+ Antworten
Seite 1 von 2 1 2 LetzteLetzte
Ergebnis 1 bis 10 von 12
  1. #1
    Registriert seit
    Feb 2005
    Ort
    Sarkwitz
    Beiträge
    3,675

    Lightbulb Skript-Ausführung

    Problem: es soll verhindert werden, dass ein Skript innerhalb eines Zeitraumes erneut ausgeführt wird
    Anwendung: wiederholtes triggern z.B. durch einen Bewegungsmelder
    Lösung: "IPS_SemaphoreEnter" - leider nein, da dies nur ein erneutes Starten verhindert, bevor das Skript beendet wurde.
    Man muss also nur den Zeitpunkt der letzten Ausführung kennen: IPS_GetScript - IP-Symcon :: Automatisierungssoftware
    und ihn mit der gewünschten "Totzeit" vergleichen (hier 60 Sekunden).
    PHP-Code:
    // ID von diesem Skript ermitteln
    $event IPS_GetObject($IPS_SELF);
    $id $event['ObjectID'];  
    echo 
    "Skript-ID: $id\n";

    $data IPS_GetScript($id);
    // Unix Timestamp des letzten Aufrufs
    // siehe auch:http://www.ip-symcon.de/service/dokumentation/befehlsreferenz/skriptverwaltung/ips-getscript/
    $last_up $data[LastExecute];   
    echo 
    "Letzte Ausführung Unix: $last_up\n";
    // zur Kontrolle
    // siehe auch: http://de.php.net/manual/de/function.date.php
    echo "Letzte Ausführung (His): ".date("H:i:s"$last_up)."\n";

    $deltaT time() - $last_up;
    echo 
    "Letzte Ausführung in sec. : $deltaT\n";

    if (
    $deltaT 60){

        
    // hier folgt ein tolles Skript
        // das nur alle 60 Sekunden ausgeführt werden darf


    MST

  2. #2
    Registriert seit
    Dec 2005
    Beiträge
    917

    Hallo,

    dises Skript tut das selbe, benutzt aber einen anderen Ansatz.
    PHP-Code:
    define ("SPERRZEIT"60);                           // Wartezeit (Sekunden) in der das Skript nicht abgearbeitet werden darf

    switch ($IPS_SENDER)
    {
        case 
    "Variable":                                // Trigger durch Variable
           
    if (IPS_GetScriptTimer($IPS_SELF) == 0)
            {                                           
    // Timer läuft nicht, Skript darf ausgeführt werden
              
    IPS_SetScriptTimer($IPS_SELFSPERRZEIT); // Timer aufziehen und
                // weitere Anweisungen                  // Skript ausführen
            
    }
            else                                        
    // Sperrzeit läuft bereits, daher
                
    return;                                 // Abarbeitung abbrechen
        
    break;
        
        case 
    "TimerEvent":                              // Trigger durch Timer
            
    IPS_SetScriptTimer($IPS_SELF0);           // Timer wieder löschen
        
    break;


    Gruß
    HJH

  3. #3
    Registriert seit
    Jan 2017
    Ort
    Linz
    Beiträge
    355

    Also irgendwie bekomm ich das nicht hin.
    Wo ist hier der Fehler? Muss ich da noch wo eine ID eintragen?
    LastExecute habe ich auf ScriptExecuted geändert.

    PHP-Code:
    <?

    $event 
    IPS_GetObject($IPS_SELF);
    $id $event['ObjectID'];  
    echo 
    "Skript-ID: $id\n";

    $data IPS_GetScript($id);

    $last_up $data[ScriptExecuted];   
    echo 
    "Letzte Ausführung Unix: $last_up\n";
    echo 
    "Letzte Ausführung (His): ".date("H:i:s"$last_up)."\n";

    $deltaT time() - $last_up;
    echo 
    "Letzte Ausführung in sec. : $deltaT\n";

    if (
    $deltaT 60){

    MXC_SwitchMode(52358 /*[Lichter\Deckenlicht Küche ]*/true);



    ?>
    Notice: Undefined variable: IPS_SELF in /var/lib/symcon/scripts/38248.ips.php on line 4
    Skript-ID: 0

    Warning: Skript #0 exisitert nicht in /var/lib/symcon/scripts/38248.ips.php on line 8

    Notice: Use of undefined constant ScriptExecuted - assumed 'ScriptExecuted' in /var/lib/symcon/scripts/38248.ips.php on line 11
    Letzte Ausführung Unix:
    Letzte Ausführung (His): 01:00:00
    Letzte Ausführung in sec. : 1496085229

  4. #4
    Registriert seit
    Dec 2013
    Beiträge
    90

    Hallo,
    was willst du denn genau machen? Also $IPS_SELF würde durch $_IPS['SELF'] ersetzt. $last_up = $data[ScriptExecuted]; sollte $last_up = $data['ScriptExecuted']; sein

    Gesendet von meinem SM-T715 mit Tapatalk

  5. #5
    Registriert seit
    Jan 2017
    Ort
    Linz
    Beiträge
    355

    Genau das waren die zwei Fehler! Jetzt funktionert genau das, was ich gebraucht hab:
    Der Eaton-Aktor zum Öffnen der Jalousie darf nur nach Ablauf der Zeit wieder ausgeführt werden.

    Danke dir!!

  6. #6
    Registriert seit
    Sep 2015
    Beiträge
    239

    Hallo,
    ich benutze IPS5.0 auf einem Razberry.
    Habe das Script ergänzt so das es nur alle xx Sekunden ausgeführt werden darf. Erhalte da folgende Fehlermeldung:

    Name:  Unbenannt.PNG
Hits: 498
Größe:  15.7 KB


    Was ist hier Falsch.
    Das Script sieht wie folgt aus:


    PHP-Code:
    <?
    // ID von diesem Skript ermitteln 
    $event IPS_GetObject($_IPS['SELF']); 
    $id $event['ObjectID'];   
    echo 
    "Skript-ID: $id\n"

    $data IPS_GetScript($id); 
    // Unix Timestamp des letzten Aufrufs 
    // siehe auch:[url="http://www.ip-symcon.de/service/dokumentation/befehlsreferenz/skriptverwaltung/ips-getscript/"]IPS_GetScript — IP-Symcon :: Automatisierungssoftware[/url] 
    $last_up $data[LastExecute];    
    echo 
    "Letzte Ausführung Unix: $last_up\n"
    // zur Kontrolle 
    // siehe auch: [url="http://de.php.net/manual/de/function.date.php"]PHP: date - Manual [/url] 
    echo "Letzte Ausführung (His): ".date("H:i:s"$last_up)."\n"

    $deltaT time() - $last_up
    echo 
    "Letzte Ausführung in sec. : $deltaT\n"

    if (
    $deltaT 80){ 

        
    // hier folgt ein tolles Skript 
        // das nur alle 60 Sekunden ausgeführt werden darf 


    ZW_SwitchMode(39941 /*[Erdgeschoss\Beleuchtung\Beleuchtung Strauch]*/true);
    ZW_SwitchMode(27834 /*[Erdgeschoss\Beleuchtung\Beleuchtung Vase]*/true);
    ZW_SwitchMode(41854 /*[Obergeschoss\Beleuchtung\Deko Oben]*/true);
    ZW_DimSet(16667 /*[Erdgeschoss\Beleuchtung\Wohnwand]*/20);
    HUE_SetValue(41815 /*[Erdgeschoss\Philips Hue\Hue bloom 2]*/,'STATE',true );
    HUE_SetValue(20119 /*[Erdgeschoss\Philips Hue\Hue bloom 1]*/,'STATE',true );
    HUE_SetValue(41815 /*[Erdgeschoss\Philips Hue\Hue bloom 2]*/,'COLOR',hexdec('DEE0FF'));
    HUE_SetValue(20119 /*[Erdgeschoss\Philips Hue\Hue bloom 1]*/,'COLOR',hexdec('DEE0FF'));
    ?>
    Geändert von kronos (16.05.18 um 07:38 Uhr) Grund: Quotes

  7. #7
    Registriert seit
    Nov 2009
    Ort
    Essen
    Beiträge
    2,152

    Versuch mal $data['LastExecute'];
    Deutschlandweite Dienstleistungen rund um und mit IP-Symcon. Systemintegrator im Bereich KNX. ekey Partner. Infos unter https://schrader-it.net

  8. #8
    Registriert seit
    Sep 2015
    Beiträge
    239

    Danke, aber nein... der gleiche Fehler

  9. #9
    Registriert seit
    Sep 2015
    Beiträge
    239

    Guten morgen,
    habe gelesen das Lastexecute ab der Version 4.0 durch Scriptexecuted ersetzt wird. gesagt getan.... aber das Script wird trotzdem sofort wieder ausgeführt, obwohl ich doch bei DeltaT 80 Sekunden eingetragen habe..... Die Fehlermeldung ist nun weg... aber warum wird das Script trotzdem gleich wieder ausgeführt?


    PHP-Code:
    <?
    // ID von diesem Skript ermitteln 
     
    $event IPS_GetObject($_IPS['SELF']); 
     
    $id $event['ObjectID']; 
     echo 
    "Skript-ID: $id\n"

     
    $data IPS_GetScript($id); 
     
    // Unix Timestamp des letzten Aufrufs 
     // siehe auch:IPS_GetScript — IP-Symcon :: Automatisierungssoftware 
     
    $last_up $data['ScriptExecuted']; 
     echo 
    "Letzte Ausführung Unix: $last_up\n"
     
    // zur Kontrolle 
     // siehe auch: PHP: date - Manual  
     
    echo "Letzte Ausführung (His): ".date("H:i:s"$last_up)."\n"

     
    $deltaT time() - $last_up
     echo 
    "Letzte Ausführung in sec. : $deltaT\n"

     if (
    $deltaT 80){ 

     
    // hier folgt ein tolles Skript 
     // das nur alle 60 Sekunden ausgeführt werden darf 

     

    ZW_SwitchMode(39941 /*[Erdgeschoss\Beleuchtung\Beleuchtung Strauch]*/true);
    ?>
    Geändert von kronos (16.05.18 um 07:37 Uhr) Grund: Quotes

  10. #10
    Registriert seit
    Sep 2015
    Beiträge
    239

    So Habe den fehler gefunden..... das auszuführende muss vor die letzte Klammer! Dann geht es!
    Hier mal wie es richtig sein muss....

    PHP-Code:
    <?
    // ID von diesem Skript ermitteln 
     
    $event IPS_GetObject($_IPS['SELF']); 
     
    $id $event['ObjectID']; 
     echo 
    "Skript-ID: $id\n"

     
    $data IPS_GetScript($id); 
     
    // Unix Timestamp des letzten Aufrufs 
     // siehe auch:IPS_GetScript — IP-Symcon :: Automatisierungssoftware 
     
    $last_up $data['ScriptExecuted']; 
     echo 
    "Letzte Ausführung Unix: $last_up\n"
     
    // zur Kontrolle 
     // siehe auch: PHP: date - Manual  
     
    echo "Letzte Ausführung (His): ".date("H:i:s"$last_up)."\n"

     
    $deltaT time() - $last_up
     echo 
    "Letzte Ausführung in sec. : $deltaT\n"

     if (
    $deltaT 80){ 

     
    // hier folgt ein tolles Skript 
     // das nur alle 60 Sekunden ausgeführt werden darf 
    ZW_SwitchMode(39941 /*[Erdgeschoss\Beleuchtung\Beleuchtung Strauch]*/true);
     } 

    ?>
    Geändert von kronos (16.05.18 um 07:37 Uhr) Grund: Quotes

Ähnliche Themen

  1. Dieses Skript wurde als 'fehlerhaft' markiert, falsch!
    Von Hinti im Forum Skripte, PHP, SQL
    Antworten: 6
    Letzter Beitrag: 24.02.09, 20:33
  2. Skript Download via SOAP
    Von jolentes im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 3
    Letzter Beitrag: 30.01.09, 16:20
  3. Wer ruft das Skript auf
    Von wgreipl im Forum Anleitungen / Nützliche PHP Skripte
    Antworten: 4
    Letzter Beitrag: 03.05.08, 12:38
  4. Probleme mit dem Skript von Retiarius(FHT)
    Von crezs im Forum Skripte, PHP, SQL
    Antworten: 5
    Letzter Beitrag: 20.12.06, 08:05
  5. Objekt-Eigenschaft über Skript ändern?
    Von Thunder im Forum Dashboard
    Antworten: 5
    Letzter Beitrag: 18.04.06, 16:13