+ Antworten
Seite 1 von 2 1 2 LetzteLetzte
Ergebnis 1 bis 10 von 12
  1. #1
    Registriert seit
    Aug 2009
    Ort
    Wirges
    Beiträge
    395

    Standard Z-Wave Skripte

    Möchte an dieser Stelle meine Skripte Teilen

    zu mir:
    Ich bin Feinwerkmechaniker und hatte Keine PHP Kentnisse als ich mit IPS im August 2009 anfing, was ich über das Programieren weis, habe ich fast ausschließlich aus dem Forum.

    Ich setzt überwiegend ZW komponeten ein, weswegen meine Skripte Oft auf ZW ausgelegt sind. Die Koponeten beziehe ich beim Knauber für günstigere preise als im Netz.

    Ich möchte Hierüber im großem und ganzem den Werdegang und die Entwicklung meiner Skripte dokumentieren um anderen "anfängern" das
    leben zu erleichtern.

    Auch werde ich Über Kosten Berichten damit man darüber auch einblick hat.

    Bitte auch um Nachsicht bei Schreibfehlern in Texten.
    Skripte werden nur getestet reingestellt

  2. #2
    Registriert seit
    Aug 2009
    Ort
    Wirges
    Beiträge
    395

    Meine Ersten Projekt waren die Rolladen

    IPS für 99euro gekauft
    ZW-Tricklestar 49,95 gekauft
    ZW Rolladenaktor für ca 45 euro gekauft + jeweils Rohrmotor ca 60 euro

    Motor und Rolladenaktor eingebaut

    nach Anleitung den Schalter angelegt.

    Dann das erste Skript! wie fängt man an???

    Ich habe im objektbaum erst mal rumgeklickt um so bischen gefühl zu bekommen.
    Habe eine Kategorie angelegt mit namen Haus und wieder 2 Kategorien einer mit namen Aktoren und einer mit namen Skripte die dem untergeortnet waren.

    Relativ schnell ist mir aufgefallen das wenn ich einen ZW lösche und neu anlege dieser eine neue ID bekommt.

    auserdem brauch man Fingerübung

    Als das erste Skrip schalten des Aktors
    PHP-Code:
    <?
    ZW_SwitchMode
    (00000 /*[Haus\Aktoren\EG/Wohnzimmer]*/ True);
    ?>
    und siehe da Rolladen Fährt hoch doch der mus ja auch wieder runter
    als 2. Skript
    PHP-Code:
    <?
    ZW_SwitchMode
    (00000 /*[Haus\Aktoren\EG/Wohnzimmer]*/ False);
    ?>
    Wenn man die Aktoren so Steuert an stelle von direkter ansprache im Ausführenden Skript ist schnell erklärt wenn man später 5 skripte hat die auf einen aktor zu greifen und der Tricklestar geht kaputt mus man in jedem skript einzeln die neue ID eintragen so kann man sagen


    PHP-Code:
    IPS_RunScript (00000 /*[Haus\Skripte\Wohnzimmer_rolladen_hoch]*/); 
    Ich glaube das waren so die ersten Skripte von mir

  3. #3
    Registriert seit
    Aug 2009
    Ort
    Wirges
    Beiträge
    395

    Ich legte nun alle rolladen im haus so an insgesamt 6 stück kosten gesammt
    809 euro + etwa 20 Arbeitsstunden für kabellegen so wie gips zum zu gipsen
    der geschlagenen Schlitze.

    Der nächste Schritt war alle Rolladen hoch oder Runter zu fahren das ganze sah dann so aus
    PHP-Code:
    <?
    IPS_RunScript 
    (00000 /*[Haus\Skripte\Rolladen / 1. Geschoss / Arbeitszimmer / Hoch]*/);
    IPS_RunScript (00000 /*[Haus\Skripte\Rolladen / 1. Geschoss / Gaestezimmer / Hoch]*/);
    IPS_RunScript (00000 /*[Haus\Skripte\Rolladen / 1. Geschoss / Schlafzimmer / Hoch]*/);
    IPS_RunScript (00000 /*[Haus\Skripte\Rolladen / E. Geschoss / Essecke / Hoch]*/);
    IPS_RunScript (00000 /*[Haus\Skripte\Rolladen / E. Geschoss / Kueche / Hoch]*/);
    IPS_RunScript (00000 /*[Haus\Skripte\Rolladen / E. Geschoss / Terasse / Hoch]*/);
    IPS_RunScript (00000 /*[Haus\Skripte\Rolladen / E. Geschoss / Wintergaten / Hoch]*/);
    ?>
    Das ganze natürlich auch Rückwärts
    Dazu noch nen ereignis angelegt und schwupp di wupp waren die rolladen morges Oben.

  4. #4
    Registriert seit
    Aug 2008
    Ort
    Sereetz
    Beiträge
    1,649

    Bei einem kaputten Controller musst Du nicht zwingend alle IDs in den Skripten ändern. Du brauchst nur in den alten Instanzen den Datenpunkt anpassen.
    Horst

  5. #5

    wenn man anstelle von zw_switchmode ($id, boolean) den Befehl zw_dimset ($id, int) wobei Int = zwischen 0 und 100 beträgt, kann man den Rollo zielgenau auf einen zwischen 0% (ganz zu) und 100% (ganz offen) fahren.

  6. #6
    Registriert seit
    Aug 2009
    Ort
    Wirges
    Beiträge
    395

    Ok steueren wir ganz einfach die Rolladen sonnenaufgangs gesteuert ohne arbeit!!!
    PHP-Code:
    <?
    //grundgrüst erstellung
    $SkriptSonnenaufgangID = @IPS_GetObjectIDByName("Bei_Sonnenaufgang"$IPS_SELF);
    if (
    $SkriptSonnenaufgangID == 0)
        {
        
    $SkriptSonnenaufgangID IPS_CreateScript(0);
        
    IPS_SetParent($SkriptSonnenaufgangID$IPS_SELF);
        
    IPS_SetName($SkriptSonnenaufgangID"Bei_Sonnenaufgang");
        }
    $SkriptSonnenuntergangID = @IPS_GetObjectIDByName("Bei_Sonnenuntergang"$IPS_SELF);
    if (
    $SkriptSonnenuntergangID == 0)
        {
        
    $SkriptSonnenuntergangID IPS_CreateScript(0);
        
    IPS_SetParent($SkriptSonnenuntergangID$IPS_SELF);
        
    IPS_SetName($SkriptSonnenuntergangID"Bei_Sonnenuntergang");
        }
    $Variablesonnenaufgang = @IPS_GetObjectIDByName("Additivsonnenaufgangszeit"$IPS_SELF);
    if (
    $Variablesonnenaufgang == 0)
        {
        
    $Variablesonnenaufgang IPS_CreateVariable(1);
        
    IPS_SetParent($Variablesonnenaufgang$IPS_SELF);
        
    IPS_SetName($Variablesonnenaufgang"Additivsonnenaufgangszeit");
        }
    $Variablesonnenuntergang = @IPS_GetObjectIDByName("Additivsonnenuntergangszeit"$IPS_SELF);
    if (
    $Variablesonnenuntergang == 0)
        {
        
    $Variablesonnenuntergang IPS_CreateVariable(1);
        
    IPS_SetParent($Variablesonnenuntergang$IPS_SELF);
        
    IPS_SetName($Variablesonnenuntergang"Additivsonnenuntergangszeit");
        }
    $Sommerzeit = @IPS_GetObjectIDByName("Sommerzeit"$IPS_SELF);
    if (
    $Sommerzeit == 0)
        {
        
    $Sommerzeit IPS_CreateVariable(0);
        
    IPS_SetParent($Sommerzeit$IPS_SELF);
        
    IPS_SetName($Sommerzeit"Sommerzeit");
        }
    $zeitsonnenaufgang = @IPS_GetEventIDByName("Timer"$SkriptSonnenaufgangID);
    if (
    $zeitsonnenaufgang == 0)
        {
    $zeitsonnenaufgang IPS_CreateEvent(1);
    IPS_SetParent($zeitsonnenaufgang$SkriptSonnenaufgangID); //Ereignis zuordnen
    IPS_SetName($zeitsonnenaufgang"Timer");
        }
    $zeitsonnenuntergang = @IPS_GetEventIDByName("Timer"$SkriptSonnenuntergangID);
    if (
    $zeitsonnenuntergang == 0)
        {
    $zeitsonnenuntergang IPS_CreateEvent(1);
    IPS_SetParent($zeitsonnenuntergang$SkriptSonnenuntergangID); //Ereignis zuordnen
    IPS_SetName($zeitsonnenuntergang"Timer");
        }
    //grundgerüst erstellt





    $sommerzeit getValueBoolean ($Sommerzeit);
    $longitude 7.80;
    $latitude 50.47;
    If (
    $sommerzeit == True )
    {
    if (
    date("I") == 1$daylight 5;       // Sommerzeit
    if (date("I") == 0$daylight 4;       // Winterzeit
    }
    else
    {
    if (
    date("I") == 1$daylight 4;       // Sommerzeit
    if (date("I") == 0$daylight 3;       // Winterzeit
    }
    // *** Sonnenaufgang des heutigen Tages berechnen ***
    $var_sunrise date(date_sunrise(time(), SUNFUNCS_RET_STRING$longitude$latitude90.8333$daylight));
    // *** Sonnenuntergang des heutigen Tages berechnen ***
    $var_sunset date(date_sunset(time(), SUNFUNCS_RET_STRING$longitude$latitude90.8333$daylight));





    $alleEreignisse IPS_GetEventListByType(1);

    foreach (
    $alleEreignisse as $Ereignis) {
        
    $event IPS_GetObject($Ereignis);
        
    $teile explode("_",$event["ObjectName"]);
        if (
    $teile[0]=="SUN"):
            if (
    $teile[1]=="SET"):
                
    // "Sonnenuntergang";
                
    IPS_SetEventCyclicTimeBounds($Ereignismktime(substr($var_sunset,0,2),substr($var_sunset,3,2)+$teile[2]), 0);
            Else:
                
    // "Sonnenaufgang";
                
    IPS_SetEventCyclicTimeBounds($Ereignismktime(substr($var_sunrise,0,2),substr($var_sunrise,3,2)+$teile[2]), 0);
            Endif;
        Endif;
    }

    $daten explode(":"$var_sunrise);
     
    $zeit1=$daten[0]*0+$daten[0];
     
    $zeit2=$daten[0]*0+$daten[1];
    $zeitvariable1 getvalue ($Variablesonnenaufgang);

     IF (
    $zeitvariable1 )
             {
            
    $zeit2 $zeitvariable1+$zeit2 ;

     If (
    60 $zeit2 )
            {
            
    $zeit1=$zeit1+1;
            
    $zeit2=$zeit2-60;

            }
     IF (
    60 $zeit2)
          {
    $zeit2=$zeit2-60;
            }
     IF (
    $zeit2 == 60)
          {
    $zeit2=$zeit2-60;
          
    $zeit1=$zeit1+1;
            }
            }

     IF (
    $zeitvariable1 )
             {
            
    $zeitvariable1 $zeitvariable1*-;

    $zeit21=$zeit2;
            IF    (
    $zeit2 $zeitvariable1)
            {
    $zeit21=$zeit2-$zeitvariable1;}
    $zeit2 $zeit21;


            If  (
    $zeitvariable1 $zeit2 )
            {
    $zeit1=$zeit1-1;
          
    $zeit2=$zeit2+60;}

            }

    IF    (
    $zeit2 == $zeitvariable1)
            {
    $zeit2=$zeit2-$zeitvariable1;}


    IPS_SetEventCyclic($zeitsonnenaufgang00000);
    IPS_SetEventCyclicTimeBounds($zeitsonnenaufgang,
       
    mktime($zeit1$zeit20), 0);


     
    $daten explode(":"$var_sunset);
     
    $zeit3=$daten[0]*0+$daten[0]; 
     
    $zeit4=$daten[0]*0+$daten[1]; 

    $zeitvariable2 getvalue ($Variablesonnenuntergang);

     IF (
    $zeitvariable2 )
             {
            
    $zeit4 $zeitvariable2+$zeit4 ;

     If (
    60 $zeit4 )
            {
            
    $zeit3=$zeit3+1;
            
    $zeit4=$zeit4-60;

            }
     IF (
    60 $zeit4)
          {
    $zeit4=$zeit4-60;
            }
     IF (
    $zeit4 == 60)
          {
    $zeit4=$zeit4-60;
          
    $zeit3=$zeit3+1;
            }
            }

     IF (
    $zeitvariable2 )
             {
            
    $zeitvariable2 $zeitvariable2*-;

    $zeit41=$zeit4;
            IF    (
    $zeit4 $zeitvariable2)
            {
    $zeit41=$zeit4-$zeitvariable2;}
    $zeit4 $zeit41;


            If  (
    $zeitvariable2 $zeit4 )
            {
    $zeit3=$zeit3-1;
          
    $zeit4=$zeit4+60;}

            }

    IF    (
    $zeit4 == $zeitvariable2)
            {
    $zeit4=$zeit4-$zeitvariable2;}

            



    IPS_SetEventCyclic($zeitsonnenuntergang00000);
    IPS_SetEventCyclicTimeBounds($zeitsonnenuntergang,
       
    mktime($zeit3$zeit40), 0);


    ?>
    Das Skript erstellt alles selbst man haben muß, nur noch in die sich selbst erstellenden Skripte, reinschreiben was getan werden soll. das Schalten zwichen Sommerzeit und Winterzeit erfolgt via Schalter manuell mann kann die zeiten um bis zu einer stunde vor oder nach stellen. Hierfür einen wert eingeben in die integer z.b. -30 bei Additivsonnenaufgangszeit um die rolladen 30min früher zu öffnen.

    normaler weise muss in diesem Skript nix geaendert werden!!!!

    viel Spaß

  7. #7
    Registriert seit
    Aug 2009
    Ort
    Wirges
    Beiträge
    395

    @wupperi

    ja das geht auch aber mir ist aufgefallen das bei 74% mein rolladen schon zu ist. gibt es da die moglichkeit das zu ändern?

  8. #8
    Registriert seit
    Aug 2009
    Ort
    Wirges
    Beiträge
    395

    Hiermit schalte ich meinen PC Stromfrei, wenn dieser Runtergefahren ist.
    Stromverbindung wir hergestellt, indem der Schalter von Hand betätigt wird.
    Auch wieder ganz einfach anzupassen.
    $idschalter = Stromschalter vom PC (bei mir nen Düwi Steckdosenschalter)
    $ip = Die IP des Rechners der an dem Schalter hängt
    $serverip = Die Ip vom Router damit, fals der router ausfällt, nicht gleich der Rechner aus geht.

    PHP-Code:
    <?
    $idschalter 
    12712 /*[Haus\Aktoren\Stromschalter\1.Stock/PC Arbeitszimmer]*/;  //Der Schalter der die Stromzufuhr zum rechner sicherstellt

    $ip "192.168.1.86";
    $serverip "192.168.1.1";
    // IP des servers in meinem fall da W´lan anliegt sogar seperate
                                        //W´lan IP des servers

    $zeit1 1;// wiederholungszeit in minuten
    $zeit2 8;// Zeit die dem Rechner bleibt zwichen netzwerkverlust und kompletten runterfahren
                    // also nicht zu niedrig ansetzen!!!





    $name "Variabele1";
    $name2 "Variable2";
    $AktuellerPCStatus Sys_Ping($ip3000);
    $AktuellerserverStatus Sys_Ping($serverip3000);
    $parentID IPS_GetObject($IPS_SELF);
    $ObjektID = @IPS_GetObjectIDByName("$name"$IPS_SELF);
    $ObjektID2 = @IPS_GetObjectIDByName("$name2"$IPS_SELF);
    $status GetValue($ObjektID);
    $status2 GetValue($ObjektID2);
    $EreignisID = @IPS_GetEventIDByName(ScriptTimer,$IPS_SELF);
    $zeit0 $zeit1;
    if (
    $ObjektID == 0)
        {
        
    $vab IPS_CreateVariable(0);
        
    IPS_SetParent($vab$IPS_SELF);
        
    IPS_SetName($vab"$name");
        }
    if (
    $ObjektID2 == 0)
        {
        
    $vab2 IPS_CreateVariable(0);
        
    IPS_SetParent($vab2$IPS_SELF);
        
    IPS_SetName($vab2"$name2");
        }
        
                    
                    If ((
    $status == 0) and ($AktuellerPCStatus == 1))
                        {
                        
    SetValue($ObjektIDtrue);
                        
    SetValue($ObjektID2true);
                        
    ZW_Switchmode($idschaltertrue);
                        }
                If ((
    $status2 == 0) and ($AktuellerPCStatus == 0))
                        {
                        if (
    $AktuellerserverStatus == 1)
                   {
                        
    SetValue($ObjektIDfalse);
                        
    ZW_Switchmode($idschalterfalse);
                            }
                        }
                    If ((
    $status == 1) and ($AktuellerPCStatus == 0))
                        {
                        
    SetValue($ObjektID2false);
                        
    $zeit0 $zeit2;
                          }
                If ((
    $status2 == 0) and ($AktuellerPCStatus == 0))
                        {
                   
    SetValue($ObjektID2true);
                        
    $zeit0 $zeit1;
                        }
    IPS_DeleteEvent($EreignisID);
    IPS_SetScriptTimer($IPS_SELF$zeit0*60);//setzt im Programm event das in 10min ausgeloest wird


                        




    ?>
    Viel Spaß
    Geändert von neodaysleeper (05.04.10 um 15:46 Uhr)

  9. #9
    Registriert seit
    Aug 2009
    Ort
    Wirges
    Beiträge
    395

    Hier nochmal ein Energiesparskript :-)
    Diesmal für meinen Drucker

    Anzupassen sind nur die Schalter steht aber sauber im Skript.

    PHP-Code:
    <?
    $schalter 
    29875 /*[Haus\Aktoren\Stromschalter\Erdgeschoss/Drucker]*/;// die ID des zuschaltenden Schalters
    $Boolean 37349 /*[Haus\Aktoren\Stromschalter\Erdgeschoss/Drucker\Status]*/;// die ID des Status des Schalters
    $zeit1 5//Setzt Die Zeit die der Drucker am netz bleibt
    $zeit2 0.5// Setzt Die Zeit wie oft das Skript abgefragt wird passt sich nur nach einem Vorgang an

    // Ab Hier mus nichts mehr geändert Werden auser es werden andere Komponenten als Z-Wave genutzt
    // Für FS20 muss nur die// vor FS20_Switchmode entfernt werden und vor die ZW_Switchmode
    // gesetzt werden.

    $status =  GetValueBoolean ($Boolean);
    $drucker = (Sys_GetSpooler());//Liefert Druckerstatus
    $EreignisID = @IPS_GetEventIDByName(ScriptTimer,$IPS_SELF);


    if ( 
    $drucker ['HP Color LaserJet 2600n'])
            {
                  
    ZW_Switchmode ($schaltertrue);// ausgelegt Für Z-Wave
                  //FS20_Switchmode ($schalter, true);// ausgelegt Für Fs20
                   
    IPS_DeleteEvent($EreignisID);
                   
    IPS_SetScriptTimer($IPS_SELF$zeit1*60);//setzt im Programm event das in 10min ausgeloest wird
                    
    }
    else
            {if  ( 
    $status == True )
                  {
                        
    ZW_Switchmode ($schalterfalse);// ausgelegt Für Z-Wave
                        //FS20_Switchmode ($schalter, false); // ausgelegt Für FS20
                         
    IPS_DeleteEvent($EreignisID);
                        
    IPS_SetScriptTimer($IPS_SELF$zeit2*60);//setzt den Timer auf 30sec
                    
    }
            }

    // geschrieben by PW
    ?>
    So jetzt dauert es erstmal ein wenig bis ich mir neue Aufgaben ausgedacht habe

    MFG

    PW

  10. #10

    Zitat Zitat von neodaysleeper Beitrag anzeigen
    @wupperi

    ja das geht auch aber mir ist aufgefallen das bei 74% mein rolladen schon zu ist. gibt es da die moglichkeit das zu ändern?
    Ja, Du kannst die Düwi Aktoren hinsichtlich Fahrtzeit "kalibrieren".

    Fahren Sie die Jalousie bis zum Anschlag nach oben.
    • Drücken Sie für 2 Sekunden gleichzeitig die „AUF“ ( 1 ) und „AB“ ( 2 ) -Taste.
    • Die LED beginnt grün zu blinken.
    • Fahren Sie die Jalousie durch Drücken der „AB“ ( 2 ) -Taste ganz nach unten bis der Endschalter abschaltet.
    • Die LED beginnt während dieser Messzeit langsamer grün zu blinken.
    • Die Steuerung signalisiert ein erfolgreiches Speichern für 3 Sekunden mit einer grünen LED-Anzeige, ein misslungenes
    Speichern mit einer roten LED-Anzeige.
    • Drücken Sie erneut für 2 Sekunden gleichzeitig die „AUF“ ( 1 ) und „AB“ ( 2 ) -Taste.
    • Die LED beginnt grün zu blinken.
    • Fahren Sie die Jalousie durch Drücken der „AUF“ ( 1 ) -Taste bis zum Anschlag nach oben bis der Endschalter abschaltet.
    • Die LED beginnt während dieser Messzeit langsamer grün zu blinken.
    • Die Steuerung signalisiert ein erfolgreiches Speichern für 3 Sekunden mit einer grünen LED-Anzeige, ein misslungenes
    Speichern mit einer roten LED-Anzeige.
    @Paresy

    Die Zeiten würden sich auch direkt im Aktor einstellen lassen, indem man einen bestimmen Wert an den Aktor sendet, ich vermute mal, dass es bei z-wave dimmern ein standard register gibt, in welches der Wert geschrieben werden muss:

    0x00 kein Abbruch/Dauerbetrieb
    0x01-0x7F 1 Sekunde - 127 Sekunden in 1 Sekunden-Schritten
    0x80-0xFE 130 Sekunden (0x80) bis 1390 Sekunden
    (0xFE) in 10 Sekunden-Schritten
    0xFF Werkseinstellung 120 Sekunden

    Ist ein direktes Schreiben von hex werten zukünftig vorgesehen? Ungefähr so:

    zw_WriteValue ($id, $register, $wert)

    Wobei id = aktor, register = eines von n z-wave standard register -> keine Ahnung wieviele dass sind?, wert = hex wert)

    Gruss,

    wupperi
    Geändert von wupperi (10.04.10 um 06:31 Uhr)

Ähnliche Themen

  1. Nanoterminal Schaltplan Skripte - Wo?
    Von matse im Forum 1-Wire, M-BUS
    Antworten: 5
    Letzter Beitrag: 31.05.11, 21:14
  2. IPS Skripte verschwunden?!?
    Von Magmaster im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 2
    Letzter Beitrag: 08.12.09, 16:38
  3. Skripte einzeln ausführen, aber wie?
    Von chris.moe im Forum Skripte, PHP, SQL
    Antworten: 7
    Letzter Beitrag: 13.05.07, 21:54
  4. Praxis – Outlook > IP-Symcon Skripte starten
    Von steiner im Forum Alte Beiträge
    Antworten: 0
    Letzter Beitrag: 27.04.05, 21:18

Stichworte