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

    Lightbulb [Timer] Präsenz

    Das folgende IPSmagic-Skript - versteht nicht jeder, aber jeder kann es anwenden
    setzt die Variable "Präsenz" für 5 (änderbar) Minuten auf "TRUE".
    Der Timer (function CreateEventIDByName) und die Variable (function CreateVariableByName) werden vom Skript automatisch angelegt.
    Getriggert wird es "Bei Variablenaktualisierung" einer Status-Variablen z.B. von einem Bewegungsmelders / PIRI.
    Wird vor Ablauf der 5 Minuten ein neuer "TRUR-Impuls" vom PIRI gemeldet, wird der TIMER erneut auf 5 Minuten gesetzt.
    Also wie eine "Eieruhr", die man immer wieder aufzieht.
    Nach Ablauf der Zeit, kann z.B. die Heizung um 2 Grad abgesenkt werden oder das Licht, Monitor, Lötstation usw. ausgeschaltet werden ...

    MST

    - Skript entfernt, da für die V2.1 nicht mehr anwendbar
    Geändert von paresy (13.10.09 um 09:31 Uhr)

  2. #2
    Registriert seit
    Jun 2007
    Ort
    Hockenheim
    Beiträge
    1,800

    Standard @ Steiner

    Dieser Teil des Präsenz Scriptes:

    if($IPS_VALUE == True) { //Timer starten
    $eid = CreateEventIDByName($vid, "Timer für Variable: ".$IPS_VARIABLE, 1);
    IPS_SetEventCyclic($eid, 0, 0, 0, 1, 5*60); // alle 5 Minuten
    IPS_SetEventCyclicTimeBounds($eid, time(), 0);
    IPS_SetEventActive($eid, true);
    if(!GetValue($vid)) {
    SetValue($vid, true);

    Gibt bei mir folgende Fehlermeldung bei 4 Anwesenheitsscripten die ich in bestimmten Bereichen meines Hauses nach diesem Script mit copy / paste angelegt habe:

    Warning: Wrong parameter count for ips_seteventcyclic () in line 21

    Ich habe dieses Script von Dir ohne jegliche Modifikation übernommen und triggere es je mit einem PIRI und dessen Statusvariable.

    Die Variable "Präsenz" wurde mit einem zugehörigen Timerevent mit Daily after 0 Seconds unterhalb der triggernden Statusvariablen der 4 Piri automatisch angelegt.
    Die Variable springt auch einmalig auf "TRUE" bei PIRI Auslösung, fällt dann aber nicht mehr automatisch auf "False" nach der gewünschten Triggerzeit zurück.

    Das erstellte Timerevent bleibt auf 00:00:00 stehen und das Script wird jede Minute scheinbar ausgeführt, da der Fehler in der Messageview alle 60 Sekunden wiederkommt. Diese Fehlermeldung kommt aber nur dann, wenn ein PIRI wieder ausgelöst.

    Wo ist mein Fehler....?
    Ich kann doch nicht zu blöd für copy / paste und einbindung einer Variablen sein.

    Gruss
    B71
    IP-Symcon V4.4,MAC mini mit Parallels 12 und W10 und PI 5.0 Testing,15" Touch Screen,iPADs,Sonos,FHZ1300,HM Gateways,Allnet 3691,USB-T 868,Homematic: 140 Instanzen, FS20: 6 Instanzen, Allnet: 1 Instanz

  3. #3
    Registriert seit
    Feb 2005
    Ort
    Lübeck
    Beiträge
    22,217

    Hier die Lösung:
    http://www.ipsymcon.de/forum/49379-post39.html

    Es fehlt einfach seit der Version ein Parameter. Für hinter die 0, 0, 0 einfach noch ein , 0 ein. Dann wird es wieder gehen

    paresy

  4. #4
    Registriert seit
    Jun 2007
    Ort
    Hockenheim
    Beiträge
    1,800

    Danke....

    habe jetzt echt an meinem Geist gezweifelt.
    Läuft jetzt wie beschrieben.... mann o mann..... 3 Stunden Suche überall, inkl. Doku.... :-)
    Wieder vieles gelesen und gelernt....aber die Lösung hierfür hätte ich im Leben nicht gefunden...

    Liebe Grüsse
    B71
    Geändert von Bernardo71 (21.11.08 um 23:04 Uhr)
    IP-Symcon V4.4,MAC mini mit Parallels 12 und W10 und PI 5.0 Testing,15" Touch Screen,iPADs,Sonos,FHZ1300,HM Gateways,Allnet 3691,USB-T 868,Homematic: 140 Instanzen, FS20: 6 Instanzen, Allnet: 1 Instanz

  5. #5
    Registriert seit
    Sep 2007
    Ort
    Bodensee
    Beiträge
    953

    Ich muss hier auch nochmal nachhaken:
    ich trigger auf die StatusVariable eines PIRI. Beim ersten Durchlauf läuft auch alles, aber danach wird nichts mehr geschaltet, da die StatusVariable des PIRI nicht auf False zurückgesetzt wird.
    Die Funktion "SetStatusVariableValue" funktioniert leider auch nicht, obwohl sie eine "1" zurück gibt.

    Jemand ne Idee?

  6. #6
    Registriert seit
    Feb 2005
    Ort
    Sarkwitz
    Beiträge
    3,676

    ... danach wird nichts mehr geschaltet, da die StatusVariable des PIRI nicht auf False zurückgesetzt wird
    Bitte genau lesen: Getriggert wird es "Bei Variablenaktualisierung"

    MST

  7. #7
    Registriert seit
    Sep 2007
    Ort
    Bodensee
    Beiträge
    953

    Grmbl... Danke, hatte Änderung drin.

  8. #8
    Registriert seit
    Aug 2005
    Ort
    Wiesbaden/Germany
    Beiträge
    463

    Hallo Gemeinde,

    ich habe gerade einen stundenlangen "Conference Call" Themen eher langweilig - deshalb mal wieder eine gelegenheit im Form zu schnüffeln.

    zum Thema Präsenz:
    Ich habe mich zwar noch nicht durch das script gearbeitet - aber habe in der Vergangenheit was ähnliches 'zusammengeworfen'.

    Dabei war mir es wichtig, dass ein kurzes betreten des Raumes die Präsenz noch nicht triggert - sondern erst nach x-Minuten Anwesenheit. Aktuell notwendig ist das bei meinem Labor zu Hause - ich gehe oft kurz hinein um was zu holen - verlasse den Raum aber nach ca. 1 - 3 Minuten wieder und dazu muss die Temperatur nicht angehoben werden. Übersteigt die Anwesenheit 3 Minuten, wird die Zimmersolltemperatur für X Minuten um Y-Grad angehoben und gehalten, solange jemand im Raum ist.
    Vielleicht lässt sich sowas noch in dem gezeigen Script ergänzen

    Was haltet Ihr davon?

    Gruss babba
    Geändert von babba (05.07.09 um 22:05 Uhr)
    router: fritzbox.7590, VDSL-100MB, am Netzwerk: Server, FREENAS, KODI, 4 Work Stations
    ips: V5.3 auf Raspberry Pi 3 - RASPBERRYMATIC - 3 x COM-Port Heizungssteuerung & Wetterstation (Reinhardt MWS 5MPV)

  9. #9
    Registriert seit
    Nov 2006
    Beiträge
    176

    Standard Problem mit Präsenz

    Hallo
    Ich habe versucht das Script mit einem Piri Bewegungsmelder zu steuern.
    Da ich den Bewegungsmelder im Flur habe, soll er dies nur tun, wenn es draußen dunkel ist.

    Habe also das Skript mit einem Befehl erweitert, das er zusätzlich den Status von meinem SunsetScript abholen soll und erst wenn SunriseSunset\DAYLIGHT == False ist, das Licht geschalten werden soll, ansonsten soll er nichts machen.
    Ganz am anfag des Themas steht ja das das Skipt "Bei Variabelaktualisierung" getriggert werden soll.
    Im Script selbst steht allerdings // Trigger: "Bei Variablenänderung" > PIRI_Status
    Liegt es daran?
    Oder habe ich jetzt irgendwas nicht verstanden.

    Hier mal das Script "Präsenz"
    PHP-Code:
    <?
    //Beschreibung unter (http://www.ip-symcon.de/forum/f53/timer-praesenz-5431/)
    // (c) by IP-Symcon 2008
    // lauffähig ab Version 2.0
    // Trigger: "Bei Variablenänderung" > PIRI_Status



    if($IPS_SENDER == "Execute")
    {
       echo 
    "Diese Skript kann so nicht ausgeführt werden.\n";
       echo 
    "Bitte triggern sie das Skript über eine Boolean Variable";
    }

    if(
    $IPS_SENDER == "Variable")
    {
       if(!
    is_bool($IPS_VALUE))
       {
          die(
    "Skript kann nur über Boolean Variablen verarbeiten!");
       }
       
    $vid CreateVariableByName($IPS_VARIABLE"Präsenz"0);
        
    $Tageslicht 43584 /*[SunriseSunset\DAYLIGHT]*/;
       if((
    $IPS_VALUE == True) && ($Tageslicht == False))  {  //Timer starten
          
    $eid CreateEventIDByName($vid"Timer für Variable: ".$IPS_VARIABLE1);
          
    IPS_SetEventCyclic($eid000012*60); // alle 5 Minuten
          
    IPS_SetEventCyclicTimeBounds($eidtime(), 0);
          
    IPS_SetEventActive($eidtrue);
          if(!
    GetValue($vid)) {
             
    SetValue($vidtrue);
          }

     
    // weitere Befehle beim Erkennen einer Bewegung
     // z.B.  FS20_SwitchMode(.....

      
    FS20_SetIntensity(33626 /*[Alle Steckdosen und Fernbedienungen\Flur Stehlampe]*/162);
      
    FS20_SetIntensity(20066 /*[Alle Steckdosen und Fernbedienungen\Flur Treppe]*/162);
      }
    }

    if(
    $IPS_SENDER == "TimerEvent"){  //Timer ausschalten
       
    IPS_SetEventActive($IPS_EVENTfalse);

       
    //Übergeornete Variable herausfinden
       
    $event IPS_GetObject($IPS_EVENT);

       
    //Variable setzen
       
    SetValue($event['ParentID'], false);

     
    // weitere Befehle nach Ablauf des Zeit
     // z.B.  FS20_SwitchMode(.....
    //IPS_RunScript("48318");


      
    FS20_SetIntensity(33626 /*[Alle Steckdosen und Fernbedienungen\Flur Stehlampe]*/830);
      
    FS20_SetIntensity(20066 /*[Alle Steckdosen und Fernbedienungen\Flur Treppe]*/1630);

    }

    function 
    CreateVariableByName($id$name$type)
    {
       global 
    $IPS_SELF;
       
    $vid = @IPS_GetVariableIDByName($name$id);
       if(
    $vid===false) {
          
    $vid IPS_CreateVariable($type);
          
    IPS_SetParent($vid$id);
          
    IPS_SetName($vid$name);
          
    IPS_SetInfo($vid"This Variable was created by Script #$IPS_SELF");
       }
       return 
    $vid;
    }

    function 
    CreateEventIDByName($id$name$type)
    {
       global 
    $IPS_SELF;
       
    $eid = @IPS_GetEventIDByName($name$id);
       if(
    $eid===false) {
          
    $eid IPS_CreateEvent($type);
          
    IPS_SetEventScript($eid$IPS_SELF);
          
    IPS_SetParent($eid$id);
          
    IPS_SetName($eid$name);
          
    IPS_SetInfo($eid"This Event was created by Script #$IPS_SELF");
       }
       return 
    $eid;
    }

    ?>
    Wenn ich nun also
    $Tageslicht = False benutze, schaltet er nicht obwohl Daylight = False.
    Schreibe ich aber:
    $Tageslicht = True schaltet er wie er soll, allerdings auch wenn Daylight = False ist.
    Hier nochmal das Skript SUNRISE_SUNSET
    PHP-Code:
       <?
    /*
    *******************************
     IP-SYMCON Event Scripting
    *******************************
    File     : SUNRISE_SUNSET.ips.php
    Trigger  :
    Interval : 60 Sekunden
    */

    /*
    //:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

    switch ($IPS_SENDER)
    {
    case "Execute": // ************** Initialisierung *****************************
    $CatID = IPS_CreateCategory();         // Kategorie anlegen
    IPS_SetName($CatID, "SunriseSunset");  // Kategorie benennen


    $VarID = IPS_CreateVariable(1); IPS_SetName($VarID, "SUNRISE_OFFSET"); IPS_SetParent($VarID, $CatID);
    $VarID = IPS_CreateVariable(1); IPS_SetName($VarID, "SUNSET_OFFSET");  IPS_SetParent($VarID, $CatID);
    $VarID = IPS_CreateVariable(3); IPS_SetName($VarID, "SUNRISE");        IPS_SetParent($VarID, $CatID);
    $VarID = IPS_CreateVariable(3); IPS_SetName($VarID, "SUNSET");         IPS_SetParent($VarID, $CatID);
    $VarID = IPS_CreateVariable(0); IPS_SetName($VarID, "DAYLIGHT");       IPS_SetParent($VarID, $CatID);
    $VarID = IPS_CreateVariable(3); IPS_SetName($VarID, "TIME");           IPS_SetParent($VarID, $CatID);
    $VarID = IPS_CreateVariable(3); IPS_SetName($VarID, "WEEKDAY");        IPS_SetParent($VarID, $CatID);
    $VarID = IPS_CreateVariable(1); IPS_SetName($VarID, "DAY");            IPS_SetParent($VarID, $CatID);
    $VarID = IPS_CreateVariable(3); IPS_SetName($VarID, "MONTH");          IPS_SetParent($VarID, $CatID);
    $VarID = IPS_CreateVariable(1); IPS_SetName($VarID, "YEAR");           IPS_SetParent($VarID, $CatID);
    $VarID = IPS_CreateVariable(3); IPS_SetName($VarID, "TIME_STRING");    IPS_SetParent($VarID, $CatID);

    break;
    }
    //::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    */

    // Sonnenauf Sonnenuntergang berechnen
    // Getriggert wird alle 60 sek.

    $latitude 53.33;
    $longitude 9.59;

    $day_offset = (GetValue(13019 /*[SunriseSunset\SUNRISE_OFFSET]*/ )+(date("I")*60))/60+1;
    $night_offset = (GetValue(51121 /*[SunriseSunset\SUNSET_OFFSET]*/ )+(date("I")*60))/60+1;

    $var_sunrise date(date_sunrise(time(), SUNFUNCS_RET_STRING$latitude$longitude90$day_offset));
    $var_sunset date(date_sunset(time(), SUNFUNCS_RET_STRING$latitude$longitude90$night_offset));

    $VarID IPS_GetVariableID("SUNRISE");
    SetValue($VarID$var_sunrise);
    $VarID IPS_GetVariableID("SUNSET");
    SetValue($VarID$var_sunset);

    //DAYLIGHT festlegen
    if (date("H:i") == $var_sunrise) {
       
    SetValue(43584 /*[SunriseSunset\DAYLIGHT]*/ true);
       }
    if (
    date("H:i") == $var_sunset) {
       
    SetValue(43584 /*[SunriseSunset\DAYLIGHT]*/ false);
       }

    //Zeit ausgeben
    SetValue(14498 /*[SunriseSunset\TIME]*/ date("H:i"));

    // Wochentag in deutsch ausgeben
    $Tag Date("w");
    $Tag1 = array("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag");
    //$Tag1 = array("So","Mo","Di","Mi","Do","Fr","Sa");
    SetValue(48630 /*[SunriseSunset\WEEKDAY]*/ $Tag1[$Tag]);

    // Tag
    SetValue(31930 /*[SunriseSunset\DAY]*/ , (INT)date("j"));

    //Monat in deutsch ausgeben
    $Monat Date("n");
    $Monat1 = array("","Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember");
    SetValue(31336 /*[SunriseSunset\MONTH]*/ $Monat1[$Monat]);

    //Jahr ausgeben
    SetValue(54070 /*[SunriseSunset\YEAR]*/ , (INT)date("Y"));

    //Timestring schreiben
    //SetValue(19224 /*[SunriseSunset\Latitudet]*/ ,$Tag1[$Tag]." ".date("j").".".$Monat1[$Monat]." ".date("Y")."  ".date("H:i"));
    SetValue(50565 /*[SunriseSunset\TIME_STRING]*/ ,date("j").".".$Monat1[$Monat]." ".date("Y"));

    SetValue(19224 /*[SunriseSunset\Latitudet]*/ $latitude);
    SetValue(21312 /*[SunriseSunset\Longitude]*/ $longitude);
    ?>
    Kann mir einer erkären wieso er (egal ob Daylight = True oder False)
    bei eigabe von $Tageslicht == True immer schaltet (egal ob Tag oder Nacht und bei der Eigabe von
    $Tageslicht == False NIE schaltet (auch hier egal ob Tag oder Nacht Also Daylight == False oder True ist)

    Hoffe ich habe es nicht zu kompliziert geschrieben, weiss aber nicht wie ich es anders formulieren soll.

    Danke im vorraus
    Geändert von Xanon (26.04.09 um 13:32 Uhr)

  10. #10
    Registriert seit
    Feb 2007
    Ort
    Zwickau
    Beiträge
    5,490

    PHP-Code:
       $Tageslicht 43584 /*[SunriseSunset\DAYLIGHT]*/;
       if((
    $IPS_VALUE == True) && ($Tageslicht == False))  {  //Timer starten 
    Da fehlt wohl noch ein getvalue...
    Geändert von Ferengi-Master (26.04.09 um 14:20 Uhr) Grund: rs
    MfG Thomas

    Eaton Xcomfort|FS20|1-Wire|Axis WebCams|WMRS200 Wetterstation|Funksystem-868|Gas und Wasserzähler per S0 1-Wire|E-Zähler per OKK+seriell2LAN Adapter|Amazon Alexa|
    Visu auf: 10"Touchscr.|Apple iPod Touch|Apple iPhone|Apple iPad|IPS V5.x|Dashboard|WebFront|iFront