VBSkript für regelmässiges Neustart (2 Viewers)

xxs

MP Donator
  • Premium Supporter
  • April 18, 2009
    60
    2
    47
    Bayern
    Home Country
    Germany Germany
    Guten Tag Community,

    ich möchte mir gerade einen VBSkript, besser gesagt zwei zusammenbauen um den Rechner neu zu starten. Ich weiß es gibt bereits dafür Lösungen. Die sind auch nicht schlecht, aber ich bin damit noch nicht ganz zufrieden. PVR Schedule habe ich aufgegeben und GMPS teste ich gerade.
    Folgendes Szenario:
    XP fährt aus Standby hoch, MP läuft und wechsel automatisch in TV Modus (Fullscreen).
    Vorstellung:

    Erstes VB Skript wird ausgeführt (Taskplaner). Dieses soll folgende Aufgaben erledigen machen.

    1. 60 Sek. Warten (erledigt)
    2. Prüfen ob eine Aufnahme läuft (keine Ahnung wie) und prüfen ob in die nächsten 20 min. eine Aufnahme geplant ist. Wenn ja dann natürlich denn Skript beenden.
    3. Wenn nicht, eine bestimmte Taste in MP Simulieren um MP zu beenden (Taste wird in MP mit KeyboardInpuPlugin programmiert) (erledigt).
    4. Zweites VB Skript wird in Autostart kopiert (bin dabei).
    5. Rechner wir neu gestartet. (erledigt).

    Nach dem Neustart, wird logischerweise zweites Skript ausgeführt. Diese soll:

    1. Ca. 2 bis 3 Minuten warten (erledigt).
    2. Eine Taste in MP Simulieren – Standby (erledigt).
    3. Sich selber löschen (bin dabei).

    Ich habe nicht wirklich Ahnung von Programmieren, aber alle Punkte bis auf Punkt2 (SQL Abfrage aus VB Skript) würde ich noch hinkriegen.

    Es wäre schön wenn jemand Zeit, Kenntnisse und Lust hat mir zu helfen.
     

    larry_S

    MP Donator
  • Premium Supporter
  • December 11, 2008
    1,455
    185
    Home Country
    Germany Germany
    Was verstehst du eigentlich genau unter VB Script?

    Ein Programm geschrieben mit Visual Basic 2005/2008 oder mit dem Texteditor und Ausführung mit Wscript.
    Mit Wscript in Kombination mit dem Microsoft SQL Server könnte ich weiterhelfen.

    Gruß
    Larry
     

    xxs

    MP Donator
  • Premium Supporter
  • April 18, 2009
    60
    2
    47
    Bayern
    Home Country
    Germany Germany
    Ich musste erstmal nachschauen was ein WSkrip ist :oops: :D

    Klar würde ein Wskript reichen. Eigentlich ist mir egal welche Fronend Programm benutzt wird. So lange es funzt. Vielleicht hast du auch eine bessere Idee für den Ablauf.

    Mein Ziel ist es einfach den Rechner sauber, regelmäßig neu zu starten und keine Aufnahme zu zerstören. Und das meine Frau am zweiten Tag den Rechner einschaltet ohne irgend welche Überraschungen. :D:D:D

    Ich habe schon angefangen. Stelle hier mal meine primitive Skripte, obwohl ich mich dafür schäme :oops:

    Reboot:

    Code:
    set ws = CreateObject("Wscript.shell")
    WScript.Sleep 60000
    ws.AppActivate "MediaPortal", True
    ws.sendkeys "+(ü)", True
    WScript.Sleep 1000
    ws.sendkeys "{LEFT}"
    ws.sendkeys "{ENTER}"

    Standby:

    Code:
    set ws = CreateObject("Wscript.shell")
    WScript.Sleep 120000
    ws.AppActivate "MediaPortal", True
    ws.sendkeys "q"
     

    larry_S

    MP Donator
  • Premium Supporter
  • December 11, 2008
    1,455
    185
    Home Country
    Germany Germany
    Müsste so funktionieren (mit MS SQL Server).

    Script für Taskplaner:
    Code:
    set ws = CreateObject("Wscript.shell")
    set db1 = createobject ("ADODB.connection")
    Set FSO = CreateObject("Scripting.FileSystemObject")
    
    SQLServer=  "Server\SQLEXPRESS"
    SQLUser=    "sa"
    SQLPW=      "mediaportal"
    DWH=        "MpTvDb"
    
    Quelldatei= "C:\start.vbs"
    Zieldatei = "C:\Dokumente und Einstellungen\All Users\Startmenü\Programme\Autostart\standy.vbs"
    
    Zeitdiff=10
    
    db1.Open("Driver={SQL Server};SERVER="&SQLServer&";Database="&DWH&";User ID="&SQLUser&";Password="&SQLPW)
          set rs1=db1.execute("SELECT min(Starttime) as start from " & _
                              "(     select Starttime, Endtime " & _
                              "      from schedule " & _
                              "      where scheduleType=0 " & _
                              "    union " & _
                              "      select dateadd(mi,datepart(mi,starttime)-(preRecordInterval) -"&Zeitdiff&" ,dateadd(hh,datepart(hh,starttime),heute)) as startime, " & _
                              "             dateadd(mi,datepart(mi,endtime)+(PostRecordInterval)+"&Zeitdiff&" ,dateadd(hh,datepart(hh,endtime),heute)) as endtime " & _
                              "      from schedule " & _
                              "               inner join (SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE())) as heute,DATEADD(dd, -1, DATEDIFF(dd, 0, GETDATE())) as gestern, DATEADD(dd, +1, DATEDIFF(dd, 0, GETDATE())) as morgen  ) as UA " & _
                              "               on 1=1 " & _
                              "      where scheduleType in(1,3,4) or (scheduleType=2 and datepart(dw,heute)=datepart(dw,starttime)) or (scheduleType=6 and datepart(dw,heute) in (1,2,3,4,5)) or (scheduleType=5 and datepart(dw,heute) in (6,7)) " & _
                              "    union " & _
                              "      select dateadd(mi,datepart(mi,starttime)-(preRecordInterval) -"&Zeitdiff&" ,dateadd(hh,datepart(hh,starttime),morgen)) as startime, " & _
                              "             dateadd(mi,datepart(mi,endtime)+(PostRecordInterval)+"&Zeitdiff&" ,dateadd(hh,datepart(hh,endtime),morgen)) as endtime " & _
                              "      from schedule " & _
                              "               inner join (SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE())) as heute,DATEADD(dd, -1, DATEDIFF(dd, 0, GETDATE())) as gestern, DATEADD(dd, +1, DATEDIFF(dd, 0, GETDATE())) as morgen  ) as UA " & _
                              "               on 1=1 " & _
                              "      where scheduleType in(1,3,4) or (scheduleType=2 and datepart(dw,morgen)=datepart(dw,starttime)) or (scheduleType=6 and datepart(dw,morgen) in (1,2,3,4,5)) or (scheduleType=5 and datepart(dw,morgen) in (6,7)) " & _
                              "    union " & _
                              "      select dateadd(mi,datepart(mi,starttime)-(preRecordInterval) -"&Zeitdiff&" ,dateadd(hh,datepart(hh,starttime),gestern)) as startime, " & _
                              "             dateadd(mi,datepart(mi,endtime)+(PostRecordInterval)+"&Zeitdiff&" ,dateadd(hh,datepart(hh,endtime),gestern)) as endtime " & _
                              "      from schedule " & _
                              "               inner join (SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE())) as heute,DATEADD(dd, -1, DATEDIFF(dd, 0, GETDATE())) as gestern, DATEADD(dd, +1, DATEDIFF(dd, 0, GETDATE())) as morgen  ) as UA " & _
                              "               on 1=1 " & _
                              "      where scheduleType in(1,3,4) or (scheduleType=2 and datepart(dw,gestern)=datepart(dw,starttime)) or (scheduleType=6 and datepart(dw,gestern) in (1,2,3,4,5)) or (scheduleType=5 and datepart(dw,gestern) in (6,7)) " & _
                              ") as ua " & _
                              "where endTime>current_timestamp")
    
          if isdate(rs1("Start")) then 'Wenn Aufnahmen läuft... oder in 10 Minuten startet
             if rs1("Start")<now() then
                WScript.Sleep 60000
    
                fso.copyfile Quelldatei, Zieldatei
    
                ws.AppActivate "MediaPortal", True
                ws.sendkeys "+(ü)", True
                WScript.Sleep 1000
                ws.sendkeys "{LEFT}"
                ws.sendkeys "{ENTER}"
             end if
          end if
          db1.close

    Script 2:
    Code:
    set ws = CreateObject("Wscript.shell")
    Set FSO = CreateObject("Scripting.FileSystemObject")
    
    Zieldatei = "C:\Dokumente und Einstellungen\All Users\Startmenü\Programme\Autostart\standy.vbs"
    
    WScript.Sleep 120000
    fso.deletefile Zieldatei
    ws.AppActivate "MediaPortal", True
    ws.sendkeys "q"

    Gruß
    Larry
     

    xxs

    MP Donator
  • Premium Supporter
  • April 18, 2009
    60
    2
    47
    Bayern
    Home Country
    Germany Germany
    Sieht doch gut aus. Werde es am Wochenende testen und gebe dir dann Bescheid.

    Auf jeden Fall, danke schon mal für deine Mühe.

    Gruß
    xxs
     

    xxs

    MP Donator
  • Premium Supporter
  • April 18, 2009
    60
    2
    47
    Bayern
    Home Country
    Germany Germany
    Hallo larry,

    habe gestern den Skript getestet und funktioniert auch zur hälfte.

    Also wenn eine Aufnahme in die nächsten 10 min. geplant ist, wird das zweite Skript nicht kopiert. Aber wenn eine Aufnahme bereits läuft, wird das Skript trotzdem kopiert.

    Kannst du bitte nochmal schauen. Danke

    mfg
    xxs
     

    larry_S

    MP Donator
  • Premium Supporter
  • December 11, 2008
    1,455
    185
    Home Country
    Germany Germany
    Habe den Fehler gefunden:

    ersetze mal die beiden Zeilen
    Code:
    set rs1=db1.execute("SELECT min(Starttime) as start from " & _
                              "(     select Starttime, Endtime " & _

    durch

    set rs1=db1.execute("SELECT min(Starttime) as start from " & _
    "( select dateadd(mi,(preRecordInterval+"&Zeitdiff&")*-1,Starttime) as starttime, dateadd(mi,PostRecordInterval+"&Zeitdiff&",Endtime) as endtime " & _

    Gruß
    Larry
     

    xxs

    MP Donator
  • Premium Supporter
  • April 18, 2009
    60
    2
    47
    Bayern
    Home Country
    Germany Germany
    jetzt geht gar nichts mehr :D

    Unter schedule kein Eintrag --> Skript wird nicht kopiert
     

    xxs

    MP Donator
  • Premium Supporter
  • April 18, 2009
    60
    2
    47
    Bayern
    Home Country
    Germany Germany
    Hab mal die SQL Abfrage bereinigt. Vielleicht bring dir was:

    ALT

    Code:
    (SELECT min(Starttime) as start from ( select Starttime, Endtime from schedule where scheduleType=0 
    union 
    select dateadd(mi,datepart(mi,starttime)-(preRecordInterval) -10 ,dateadd(hh,datepart(hh,starttime),heute)) as startime, dateadd(mi,datepart(mi,endtime)+(PostRecordInterval)+10 ,dateadd(hh,datepart(hh,endtime),heute)) as endtime 
    from schedule 
    inner join (SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE())) as heute,DATEADD(dd, -1, DATEDIFF(dd, 0, GETDATE())) as gestern, DATEADD(dd, +1, DATEDIFF(dd, 0, GETDATE())) as morgen) as UA 
    on 1=1 
    where scheduleType in(1,3,4) or (scheduleType=2 and datepart(dw,heute)=datepart(dw,starttime)) or (scheduleType=6 and datepart(dw,heute) in (1,2,3,4,5)) or (scheduleType=5 and datepart(dw,heute) in (6,7)) 
    union 
    select dateadd(mi,datepart(mi,starttime)-(preRecordInterval) -10 ,dateadd(hh,datepart(hh,starttime),morgen)) as startime, dateadd(mi,datepart(mi,endtime)+(PostRecordInterval)+10 ,dateadd(hh,datepart(hh,endtime),morgen)) as endtime 
    from schedule 
    inner join (SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE())) as heute,DATEADD(dd, -1, DATEDIFF(dd, 0, GETDATE())) as gestern, DATEADD(dd, +1, DATEDIFF(dd, 0, GETDATE())) as morgen) as UA 
    on 1=1 
    where scheduleType in(1,3,4) or (scheduleType=2 and datepart(dw,morgen)=datepart(dw,starttime)) or (scheduleType=6 and datepart(dw,morgen) in (1,2,3,4,5)) or (scheduleType=5 and datepart(dw,morgen) in (6,7)) 
    union 
    select dateadd(mi,datepart(mi,starttime)-(preRecordInterval) -10 ,dateadd(hh,datepart(hh,starttime),gestern)) as startime, 
    dateadd(mi,datepart(mi,endtime)+(PostRecordInterval)+10 ,dateadd(hh,datepart(hh,endtime),gestern)) as endtime 
    from schedule 
    inner join (SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE())) as heute,DATEADD(dd, -1, DATEDIFF(dd, 0, GETDATE())) as gestern, DATEADD(dd, +1, DATEDIFF(dd, 0, GETDATE())) as morgen  ) as UA 
    on 1=1 
    where scheduleType in(1,3,4) or (scheduleType=2 and datepart(dw,gestern)=datepart(dw,starttime)) or (scheduleType=6 and datepart(dw,gestern) in (1,2,3,4,5)) or (scheduleType=5 and datepart(dw,gestern) in (6,7)) 
    ) as ua 
    where endTime>current_timestamp)

    NEU

    Code:
    (SELECT min(Starttime) as start from ( select dateadd(mi,(preRecordInterval+10)*-1,Starttime) as starttime, dateadd(mi,PostRecordInterval+10,Endtime ) as endtime from schedule where scheduleType=0 
    union 
    select dateadd(mi,datepart(mi,starttime)-(preRecordInterval) -10 ,dateadd(hh,datepart(hh,starttime),heute)) as startime, dateadd(mi,datepart(mi,endtime)+(PostRecordInterval)+10 ,dateadd(hh,datepart(hh,endtime),heute)) as endtime 
    from schedule 
    inner join (SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE())) as heute,DATEADD(dd, -1, DATEDIFF(dd, 0, GETDATE())) as gestern, DATEADD(dd, +1, DATEDIFF(dd, 0, GETDATE())) as morgen) as UA 
    on 1=1 
    where scheduleType in(1,3,4) or (scheduleType=2 and datepart(dw,heute)=datepart(dw,starttime)) or (scheduleType=6 and datepart(dw,heute) in (1,2,3,4,5)) or (scheduleType=5 and datepart(dw,heute) in (6,7)) 
    union 
    select dateadd(mi,datepart(mi,starttime)-(preRecordInterval) -10 ,dateadd(hh,datepart(hh,starttime),morgen)) as startime, dateadd(mi,datepart(mi,endtime)+(PostRecordInterval)+10 ,dateadd(hh,datepart(hh,endtime),morgen)) as endtime 
    from schedule 
    inner join (SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE())) as heute,DATEADD(dd, -1, DATEDIFF(dd, 0, GETDATE())) as gestern, DATEADD(dd, +1, DATEDIFF(dd, 0, GETDATE())) as morgen) as UA 
    on 1=1 
    where scheduleType in(1,3,4) or (scheduleType=2 and datepart(dw,morgen)=datepart(dw,starttime)) or (scheduleType=6 and datepart(dw,morgen) in (1,2,3,4,5)) or (scheduleType=5 and datepart(dw,morgen) in (6,7)) 
    union 
    select dateadd(mi,datepart(mi,starttime)-(preRecordInterval) -10 ,dateadd(hh,datepart(hh,starttime),gestern)) as startime, 
    dateadd(mi,datepart(mi,endtime)+(PostRecordInterval)+10 ,dateadd(hh,datepart(hh,endtime),gestern)) as endtime 
    from schedule 
    inner join (SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE())) as heute,DATEADD(dd, -1, DATEDIFF(dd, 0, GETDATE())) as gestern, DATEADD(dd, +1, DATEDIFF(dd, 0, GETDATE())) as morgen  ) as UA 
    on 1=1 
    where scheduleType in(1,3,4) or (scheduleType=2 and datepart(dw,gestern)=datepart(dw,starttime)) or (scheduleType=6 and datepart(dw,gestern) in (1,2,3,4,5)) or (scheduleType=5 and datepart(dw,gestern) in (6,7)) 
    ) as ua 
    where endTime>current_timestamp)

    Sorry mein Fehler. Skript wird ausgeführt, aber wenn eine Aufnahme läuft, wird trotzdem vorgesetzt :( Dafür wird das Anfangsdatum, für geplante Aufnahmen, jetzt richtig berechnet :D

    Wie suchst du überhaut raus, ob gerade eine Aufnahme läuft?
     

    larry_S

    MP Donator
  • Premium Supporter
  • December 11, 2008
    1,455
    185
    Home Country
    Germany Germany
    Habe den Fehler gefunden. DIe schleife passt nicht.

    Damit sollte gehen.

    Code:
     if isdate(rs1("Start")) then 'Wenn Aufnahmen läuft... oder in 10 Minuten startet
        if rs1("Start")<now() then
        Aufn=1
        else
        Aufn=0
        end if
     else
     Aufn=0
    
     end if
    
    if Aufn=0 then
                WScript.Sleep 60000
    
                fso.copyfile Quelldatei, Zieldatei
    
                ws.AppActivate "MediaPortal", True
                ws.sendkeys "+(ü)", True
                WScript.Sleep 1000
                ws.sendkeys "{LEFT}"
                ws.sendkeys "{ENTER}"
    end if

    Die Abfrage funktioniert wie folge.
    Es wird geprüft ob in der Schedule Tabelle ein Eintrag drin ist. Wenn nicht = keine Aufnahme geplant
    Im SQL wird von der Startzeit 10 Minuten abgezogen.
    Wenn also das niedrigste Startzeit in der Vergangenheit liegt, bedeutet es, dass eine Aufnahme läuft oder spätestens in 10 Minuten startet. Dann wird Aufn auf 1 gesetzt und dadurch die 2. Schleife nicht durchlaufen.

    Gruß
    Larry
     

    Users who are viewing this thread

    Top Bottom