+ Antworten
Ergebnis 1 bis 5 von 5
  1. #1
    Registriert seit
    Feb 2005
    Ort
    Sarkwitz
    Beiträge
    3,676

    Lightbulb Ablaufsteuerung [Exercise]

    Um bestimmte Ereignisse / Aktionen nacheinander auszuführen, verwende ich eine Hilfs-Variable - hier "Step".
    Diese reicht von 0 bis X - also dei Anzahl der Aktionen und wird am Ende wieder auf 0 gesetzt.
    Der zeitliche Abstand der Aktionen wird durch: IPS_SetScriptTimer($IPS_SELF, ZZ);
    bestimmt, wobei ZZ die Zeit in Sekunden ist (siehe Anhang).

    MST
    PHP-Code:
    $id 22283 /*[0 OG\Flur\VELUX Rollläden\Velux Rollladen]*/;
    $step =    GetValue(23228 /*[6 Szenarien\Beschatten\Step]*/);

    if((
    $IPS_SENDER <> "TimerEvent")and($step == 0)){
        
    SetValue(21336 /*[6 Szenarien\Beschattung]*/True);
        
    SetValue(23228 /*[6 Szenarien\Beschatten\Step]*/1);
        
    IPS_SetScriptTimer($IPS_SELF60);
        
    TMEX_F29_SetPin($id0False);
        
    TMEX_F29_SetPin($id2True);
        return;
    }
    if(
    $IPS_SENDER == "TimerEvent"){
        switch(
    $step) {
          case 
    1:
           
    SetValue(23228 /*[6 Szenarien\Beschatten\Step]*/2);
            
    IPS_SetScriptTimer($IPS_SELF10);
            
    TMEX_F29_SetPin($id2False);
           break;
       case 
    2:
            
    SetValue(23228 /*[6 Szenarien\Beschatten\Step]*/3);
            
    IPS_SetScriptTimer($IPS_SELF60);
            
    TMEX_F29_SetPin($id1True);
            break;
       case 
    3:
            
    SetValue(23228 /*[6 Szenarien\Beschatten\Step]*/4);
            
    IPS_SetScriptTimer($IPS_SELF10);
            
    TMEX_F29_SetPin($id2False);
           break;
       case 
    4:
            
    SetValue(23228 /*[6 Szenarien\Beschatten\Step]*/5);
            
    IPS_SetScriptTimer($IPS_SELF20);
            
    HM_WriteValueFloat(42614 /*[0 OG\Schlafzimmer\Rollläden Kipp\HM R-Laden links]*/"LEVEL"1);  // runter
            
    break;
       case 
    5:
            
    SetValue(23228 /*[6 Szenarien\Beschatten\Step]*/6);
            
    IPS_SetScriptTimer($IPS_SELF20);
            
    HM_WriteValueFloat(27397 /*[0 OG\Schlafzimmer\Rollläden Kipp\HM R-Laden mitte]*/"LEVEL"1);  // runter
            
    break;
       case 
    6:
            
    // Ablauf  fertig
            
    SetValue(23228 /*[6 Szenarien\Beschatten\Step]*/0);
            
    IPS_SetScriptTimer($IPS_SELF0);
            
    HM_WriteValueFloat(58828 /*[0 OG\Schlafzimmer\Rollläden Kipp\HM R-Laden rechts]*/,"LEVEL".5);  // runter
        
    }

    oder
    PHP-Code:
    $id 22283 /*[0 OG\Flur\VELUX Rollläden\Velux Rollladen]*/;
    $step GetValue(23228 /*[6 Szenarien\Beschatten\Step]*/);

    if((
    $IPS_SENDER <> "TimerEvent")and($step == 0)){
        
    SetValue(21336 /*[6 Szenarien\Beschattung]*/True);
        
    SetValue(23228 /*[6 Szenarien\Beschatten\Step]*/1);
        
    IPS_SetScriptTimer($IPS_SELF60);
        
    TMEX_F29_SetPin($id0False);
        
    TMEX_F29_SetPin($id2True);
        return;
    }
    if((
    $IPS_SENDER == "TimerEvent")and($step == 1)){
        
    SetValue(23228 /*[6 Szenarien\Beschatten\Step]*/2);
        
    IPS_SetScriptTimer($IPS_SELF10);
        
    TMEX_F29_SetPin($id2False);
        return;
    }
    if((
    $IPS_SENDER == "TimerEvent")and($step == 2)){
        
    SetValue(23228 /*[6 Szenarien\Beschatten\Step]*/3);
        
    IPS_SetScriptTimer($IPS_SELF60);
        
    TMEX_F29_SetPin($id1True);
        return;
    }
    if((
    $IPS_SENDER == "TimerEvent")and($step == 3)){
        
    SetValue(23228 /*[6 Szenarien\Beschatten\Step]*/4);
        
    IPS_SetScriptTimer($IPS_SELF10);
        
    TMEX_F29_SetPin($id2False);
        return;
    }
    if((
    $IPS_SENDER == "TimerEvent")and($step == 4)){
        
    SetValue(23228 /*[6 Szenarien\Beschatten\Step]*/5);
        
    IPS_SetScriptTimer($IPS_SELF20);
        
    HM_WriteValueFloat(42614 /*[0 OG\Schlafzimmer\Rollläden Kipp\HM R-Laden links]*/"LEVEL"1);  // runter
        
    return;
    }
    if((
    $IPS_SENDER == "TimerEvent")and($step == 5)){
        
    SetValue(23228 /*[6 Szenarien\Beschatten\Step]*/6);
        
    IPS_SetScriptTimer($IPS_SELF20);
        
    HM_WriteValueFloat(27397 /*[0 OG\Schlafzimmer\Rollläden Kipp\HM R-Laden mitte]*/"LEVEL"1);  // runter
            
    return;
    }
    if((
    $IPS_SENDER == "TimerEvent")and($step == 6)){
        
    // Ablauf  fertig
        
    SetValue(23228 /*[6 Szenarien\Beschatten\Step]*/0);
        
    IPS_SetScriptTimer($IPS_SELF0);
        
    HM_WriteValueFloat(58828 /*[0 OG\Schlafzimmer\Rollläden Kipp\HM R-Laden rechts]*/,"LEVEL".5);  // runter

    Hinweis: das Skript muss über "IPS_RunScript" oder "Ausführen" gestartet werden
    Geändert von steiner (31.07.09 um 14:09 Uhr)

  2. #2
    Registriert seit
    Aug 2014
    Beiträge
    22

    Hallo steiner

    kann man das auch mit einer Temperaturabfolge benützen??

    das heisst
    switch schalten bis temperatur erreicht, pause...
    switch schalten bis temperatur erreicht, pause...
    dito...
    script abschliessen.

    gruss Urs

  3. #3
    Registriert seit
    Mar 2006
    Beiträge
    3,422

    Besser wäre doch hier das Script durch die Temperaturänderung oder bei bestimmten Wert zu triggern und mit if-Abfrage einen entsprechenden Befehl auszulösen. Oder was hast du genau vor?
    Gruß nancilla

  4. #4
    Registriert seit
    Aug 2010
    Beiträge
    4,758

    Vorhaben steht hier:
    http://www.ip-symcon.de/forum/thread...202#post234202

    Umsetzung (vielleicht)

    1) Skript manuell starten (Skriptteil 1) --> Brenner starten, Ereignis (bei Temp. >25!) aktivieren --> "Suppe wird warm"
    2) Voriges Ereignis tritt ein (startet Skriptteil 2) --> Brenner ausschalten, Ereignis (25) deaktivieren, Timer 45 min. starten --> "Suppe" ruht
    3) Timer startet neuen Lauf (startet Skriptteil 3) --> Brenner ein, Ereignis (bei Temp. > 52°) aktivieren, Timer deaktivieren --> "Suppe" wärmt weiter
    4) Ereignis (52) tritt ein (startet Skriptteil 2) --> Brenner ausschalten, Ereignis (52) deaktivieren, Timer 30 min. starten --> "Suppe" ruht
    5) Timer (30) (startet Skriptteil 5) --> alle Timer deaktivieren, Meldung "habe fertig"

    siehe 2. Skript von Steiner (geht aber ohne die Step-Geschichte)

    http://www.ip-symcon.de/service/doku...hnelleinstieg/
    http://www.ip-symcon.de/service/doku.../wie-kann-ich/
    http://www.ip-symcon.de/service/doku...stemvariablen/ (was sendet?


    Gruß
    Buno

  5. #5
    Registriert seit
    Feb 2010
    Ort
    Bamberg
    Beiträge
    146

    Ich denke hier versucht man einfach eine Schrittkette nachzubauen, ähnlich Ablaufsteuerung einer Maschine mittels Sps. Ich tue ebenso für den Ablauf meiner Externen Backups. Die Variable "Schritt" wird von den dementsprechenden Unterprogrammen oder Betätigung am Touchscreen gesetzt, ebenso damit das Script erneut angestoßen.
    Ansonsten ist meine Lösung fast mit der von Steiner identisch.

    PHP-Code:
    <?
    $schritt 
    GetValueInteger(33320 /*[System\Backup\Schritt]*/);
    $filename 'u:\data.txt';
    $filename_film 'u:\filme.txt';

    switch (
    $schritt) {
        case 
    1:                                                                                                             //Schrittkette Backup Data
             
    SetValueString(39783 /*[Dashboard\Popup global\Text Zeile 1]*/"Bitte Platte BACKUP einlegen");
             
    SetValueInteger(33320 /*[System\Backup\Schritt]*/2);
                break;
         case 
    2:
             if (
    file_exists($filename))
                {
                
    SetValueString(39783 /*[Dashboard\Popup global\Text Zeile 1]*/"Backup wird gestartet");
                
    IPS_RunScript(38819 /*[System\Backup\Backup Data ausführung]*/);
                
    SetValueInteger(33320 /*[System\Backup\Schritt]*/3);
               } else
                {
                
    SetValueString(39783 /*[Dashboard\Popup global\Text Zeile 1]*/"Falsche oder keine Wechselplatte eingelegt");
                
    SetValueString(27343 /*[Dashboard\Popup global\Text Zeile 2]*/"Bitte Platte BACKUP einlegen");
                }
            break;
         case 
    3:
                
    IPS_RunScript(41586 /*[Dashboard\Popup global\Popup schließen/Init]*/);
                
    SetValueString(11753 /*[Dashboard\Meldungen\Neu]*/"#minus#Backup DATA notwendig");
            break;
         case 
    4:                                                                                                             //Schrittkette Backupplatte entfernen
                
    if (file_exists($filename))
                {
                
    SetValueString(39783 /*[Dashboard\Popup global\Text Zeile 1]*/"Backup beendet");
                
    SetValueString(27343 /*[Dashboard\Popup global\Text Zeile 2]*/"Bitte Platte entfernen");
               } else
                {
              
    rename("c:\log\data.log""c:\log\data.old");
                
    IPS_RunScript(41586 /*[Dashboard\Popup global\Popup schließen/Init]*/);
                
    SetValueString(11753 /*[Dashboard\Meldungen\Neu]*/"#minus#Backup DATA beendet");
                 }
            break;
        case 
    11:                                                                                                             //Schrittkette Backup Filme
             
    SetValueString(39783 /*[Dashboard\Popup global\Text Zeile 1]*/"Bitte Platte FILME einlegen");
             
    SetValueInteger(33320 /*[System\Backup\Schritt]*/12);
                break;
         case 
    12:
             if (
    file_exists($filename_film))
                {
                
    SetValueString(39783 /*[Dashboard\Popup global\Text Zeile 1]*/"Backup wird gestartet");
                
    IPS_RunScript(38819 /*[System\Backup\Backup Data ausführung]*/);
                
    SetValueInteger(33320 /*[System\Backup\Schritt]*/13);
               } else
                {
                
    SetValueString(39783 /*[Dashboard\Popup global\Text Zeile 1]*/"Falsche oder keine Wechselplatte eingelegt");
                
    SetValueString(27343 /*[Dashboard\Popup global\Text Zeile 2]*/"Bitte Platte FILME einlegen");
                }
            break;
         case 
    13:
                
    IPS_RunScript(41586 /*[Dashboard\Popup global\Popup schließen/Init]*/);
                
    SetValueString(11753 /*[Dashboard\Meldungen\Neu]*/"#minus#Backup Filme notwendig");
            break;
         case 
    14:                                                                                                             //Schrittkette Backupplatte entfernen
                
    if (file_exists($filename_film))
                {
                
    SetValueString(39783 /*[Dashboard\Popup global\Text Zeile 1]*/"Backup beendet");
                
    SetValueString(27343 /*[Dashboard\Popup global\Text Zeile 2]*/"Bitte Platte entfernen");
               } else
                {
              
    rename("c:\log\filme.log""c:\log\filme.old");
                
    IPS_RunScript(41586 /*[Dashboard\Popup global\Popup schließen/Init]*/);
                
    SetValueString(11753 /*[Dashboard\Meldungen\Neu]*/"#minus#Backup Filme beendet");
                 }
            break;
    }
    ?>
    gruß
    goran

Ähnliche Themen

  1. [Exercise] TextParser
    Von steiner im Forum Anleitungen / Nützliche PHP Skripte
    Antworten: 0
    Letzter Beitrag: 31.10.08, 17:42
  2. [Exercise] Frostschutz
    Von steiner im Forum Skripte, PHP, SQL
    Antworten: 0
    Letzter Beitrag: 25.11.07, 11:03