+ Antworten
Ergebnis 1 bis 9 von 9
  1. #1
    Registriert seit
    Sep 2017
    Beiträge
    76

    Standard Ablaufsteuerung (Zeitverögrung in Skript)

    Hallo,

    die Beleuchtung meines Aquariums wird per Infrarotfernbedienung (IRTrans) gesteuert.
    Ich möchte einen sanften Sonnenaufgang mit 20 Stufen in einer bestimmten Zeit (1Stunde) programmieren.
    Die Ansteuerung der Tasten durch ein Skript (IRT_SendOnce....) funktioniert bereits.

    Ich weiß jedoch nicht, welches die beste (sinnvollste) Möglichkeit des zeitlichen Ablaufs ist.

    Die erste Idee ist, alle Befehle (20x IRT_SendOnce....) hintereinander in einem Skript auszuführen.
    Die Pausen dazwischen könnte man doch mit Sleep() lösen, oder spricht etwas dagegen?
    Dies hätte auch den Vorteil, dass ich nur 2 Skripte bräuchte (Aufgang/Untergang) und diese Skripte dann durch eine Zeitschaltuhr variabel starten könnte.

    Ich weiß jedoch noch von der Atmel Mikrocontrollerprogrammierung, dass man durch bestimmte Befehle bei Zeitabläufen
    das System stark belastet und es dafür bessere und schlechtere Lösungen gibt.
    Ist das hier evtl. auch so?
    Beeinflusst z.B. ein "Sleep" Befehl in Skript-A evtl. die Ausführung eines Skriptes-B?
    Denn der "Sleep" Befehl würde in diesem fall 20x180sec andauern...

    Danke für eure Rückmeldungen !

  2. #2
    Registriert seit
    Jun 2012
    Ort
    House of Dragons @ Lübeck
    Beiträge
    7,733

    Das funktioniert nicht, ein Script kann maximal 60 Sekunden laufen.
    Michael
    on Win7VM (ESXi): I5, 24GB RAM, HW-RAID5, 3xSat | HW: CCU + 123 Geräte (506ch), EM1000, CUL, 1Wire, XBee, ELRO 433MHz, FritzBox Cable, Android Phone + Tablet, Samsung C-Serie TV +SamyGo-Ext, Onkyo NR| SW: IPS, Apache2(mod_ssl/PHP), MySQL, hMailServer, PRTG, Rising AV, Piwik, RoundCube, Wordpress, WinLIRC, WHS2011, MediaPortal, XBMC

  3. #3
    Registriert seit
    Oct 2011
    Ort
    Hattersheim (Hessen)
    Beiträge
    5,478

    Zitat Zitat von Lenz Beitrag anzeigen
    Die erste Idee ist, alle Befehle (20x IRT_SendOnce....) hintereinander in einem Skript auszuführen.
    Die Pausen dazwischen könnte man doch mit Sleep() lösen, oder spricht etwas dagegen?
    Das funktioniert nicht, da ein Skript eine Laufzeitbegrenzung hat, Du kannst zwar für Millisekunden oder auch mal für Sekunden pausieren, wenn es sich aber um Minuten oder 1 Stunde handelt musst Du mit einem Timer arbeiten.

  4. #4
    Registriert seit
    Jun 2013
    Beiträge
    91

    Zitat Zitat von Lenz Beitrag anzeigen
    Hallo,

    die Beleuchtung meines Aquariums wird per Infrarotfernbedienung (IRTrans) gesteuert.
    Ich möchte einen sanften Sonnenaufgang mit 20 Stufen in einer bestimmten Zeit (1Stunde) programmieren.
    Die Ansteuerung der Tasten durch ein Skript (IRT_SendOnce....) funktioniert bereits.

    Ich weiß jedoch nicht, welches die beste (sinnvollste) Möglichkeit des zeitlichen Ablaufs ist.

    Die erste Idee ist, alle Befehle (20x IRT_SendOnce....) hintereinander in einem Skript auszuführen.
    Die Pausen dazwischen könnte man doch mit Sleep() lösen, oder spricht etwas dagegen?
    Dies hätte auch den Vorteil, dass ich nur 2 Skripte bräuchte (Aufgang/Untergang) und diese Skripte dann durch eine Zeitschaltuhr variabel starten könnte.

    Ich weiß jedoch noch von der Atmel Mikrocontrollerprogrammierung, dass man durch bestimmte Befehle bei Zeitabläufen
    das System stark belastet und es dafür bessere und schlechtere Lösungen gibt.
    Ist das hier evtl. auch so?
    Beeinflusst z.B. ein "Sleep" Befehl in Skript-A evtl. die Ausführung eines Skriptes-B?
    Denn der "Sleep" Befehl würde in diesem fall 20x180sec andauern...

    Danke für eure Rückmeldungen !
    Hallo Lenz,

    Das geht so nicht. Der sleep befehl pausiert das ganze script und dann gibt es einen timeout.
    Ich würde da eine Variable anlegen mit der ich die schritte mit zähle und dann einen script Timer der diese hoch oder runter zählt.
    Wenn dann max oder min von der hilfsvariable erreicht ist hört er auf.
    Den Infarot befehl kannst du da drin dann auch ausführen.
    Anstoßen kannst du das ganze dann indem du den wert dieser variablen auf 1 für Aufgang oder Max für untergang setzt. Wenn sie 0 ist dann ist die Funktion inaktiv.

    Sent from my SM-G935F using Tapatalk

  5. #5
    Registriert seit
    May 2006
    Ort
    Hannover
    Beiträge
    2,868

    Du könntest über einen Scripttimer zyklisch das Script aufrufen und mit einer Zählervariablen deine Sequenz durchlaufen.
    MfG Ralf

  6. #6
    Registriert seit
    Dec 2011
    Ort
    am Ende des Internets
    Beiträge
    314

    Zitat Zitat von Nall-chan Beitrag anzeigen
    Das funktioniert nicht, ein Script kann maximal 60 Sekunden laufen.
    Ein Skript wird nach dieser Zeit in der IPS-Expertenansicht "PHP-Informationen" rot markiert, PHP läßt es aber weiterlaufen.
    Ich habe nicht ausgereizt zu welchem Zeitpunkt der Hammer fällt, es sind aber länger als 5 Minuten; hatte ja schon mal hier beschrieben, dass ich ein Skript vorsichtshalber nach 5 Minuten abbreche: "Das Stoppen des PHP-Skriptes ist erforderlich, weil Skripte unter IPS nur eine begrenzte Laufzeit haben dürfen (sie werden auch schon nach etwa einer Minute in der Expertenansicht "PHP-Informationen" rot markiert). Macht aber nichts, wir machen ein Revolving, indem sich das Aktions-Skript kurz vor seinem Ende selbst aufruft"
    (Erforderlich ist das ganze, weil das Skript laufend neue Messwerte liefert).

    Viel Grüsse
    Harald

  7. #7
    Registriert seit
    Jun 2012
    Ort
    House of Dragons @ Lübeck
    Beiträge
    7,733

    Das ist aber ein Fehler, und je nach IPS / PHP Version wird das Script auch wirklich abgebrochen.
    Michael
    on Win7VM (ESXi): I5, 24GB RAM, HW-RAID5, 3xSat | HW: CCU + 123 Geräte (506ch), EM1000, CUL, 1Wire, XBee, ELRO 433MHz, FritzBox Cable, Android Phone + Tablet, Samsung C-Serie TV +SamyGo-Ext, Onkyo NR| SW: IPS, Apache2(mod_ssl/PHP), MySQL, hMailServer, PRTG, Rising AV, Piwik, RoundCube, Wordpress, WinLIRC, WHS2011, MediaPortal, XBMC

  8. #8
    Registriert seit
    Dec 2011
    Ort
    am Ende des Internets
    Beiträge
    314

    In der SYMCON-Doc steht unter PHP wie man die Maximale Skriptlaufzeit einstellt.
    In meiner Windows-Version steht in der "php.ini"
    max_execution_time=600

    Also können die Skripte bis zu 10 Minuten laufen, ausser man verlängert das Limit noch innerhalb des Skriptes mit set_time_limit.
    Möglicherweise hab ich die "php.ini" mal dementsprechend editiert, denn in meinen Raspis steht 'max_execution_time=30', allerdings in den beschriebenen Skripten noch zusätzliche Parameter, hier ein Auszug:
    PHP-Code:
    ...
    // Parameter:
    $Laufzeit = (60);       // in sec. des Skriptes (anschließend Selbstaufruf bei Revolving)
    set_time_limit (60);    // maximale PHP-Ausführungszeit in Sekunden
    $ZeitAL time ();                      // Laufzeit-Messung (alive)
    ...

                    do {            
    // während BLEscan
    ...
    // 2. Timer:  $Laufzeit = (4 * 60) in sec. des Skriptes (anschließend Selbstaufruf bei Revolving)
                                
    if (($ZeitAL $Laufzeit) < time ()) {     // ZeitLimit
                                    
    $lSem 'BLEscan';     // Loop beenden
                            
    IPS_RunScriptEx ($_IPS['SELF'], array (// Selbstaufruf
                                
    'TRIG'  => $_IPS['SELF'], // wurde aufgerufen von ....
                                
    'GenEv' => 'Revolving',
                                
    'GenDt' => time ()));
                                 }
    ...
                    } while (
    $lSem <> 'BLEscan');       // Ende LE
    // alles beenden
    .... 
    Viel Grüsse
    Harald

  9. #9
    Registriert seit
    Jun 2012
    Ort
    House of Dragons @ Lübeck
    Beiträge
    7,733

    Ich kann nur davon abraten es global zu verändern.
    Besser gezielt, wenn ein Script wirklich länger braucht die Zeit im Script anzuheben.
    Sonst hat man irgendwann so etwas hier:
    Hilfe, "zu viele gleichzeitige Skripte, verwerfe ausführung"
    Michael
    on Win7VM (ESXi): I5, 24GB RAM, HW-RAID5, 3xSat | HW: CCU + 123 Geräte (506ch), EM1000, CUL, 1Wire, XBee, ELRO 433MHz, FritzBox Cable, Android Phone + Tablet, Samsung C-Serie TV +SamyGo-Ext, Onkyo NR| SW: IPS, Apache2(mod_ssl/PHP), MySQL, hMailServer, PRTG, Rising AV, Piwik, RoundCube, Wordpress, WinLIRC, WHS2011, MediaPortal, XBMC

Ähnliche Themen

  1. Ablaufsteuerung Probleme
    Von sirkentucky im Forum 1-Wire, M-BUS
    Antworten: 9
    Letzter Beitrag: 10.06.18, 13:40
  2. Ablaufsteuerung Timer usw.. Frage
    Von mistljo im Forum Skripte, PHP, SQL
    Antworten: 6
    Letzter Beitrag: 16.07.17, 16:35
  3. Ablaufsteuerung [Exercise]
    Von steiner im Forum Anleitungen / Nützliche PHP Skripte
    Antworten: 4
    Letzter Beitrag: 30.09.14, 11:30
  4. Ablaufsteuerung mit Zeitverzögerung
    Von quicksim im Forum Anleitungen / Nützliche PHP Skripte
    Antworten: 4
    Letzter Beitrag: 25.03.13, 09:54
  5. Ablaufsteuerung
    Von zurisee im Forum Anleitungen / Nützliche PHP Skripte
    Antworten: 1
    Letzter Beitrag: 22.12.09, 23:54