Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. ioBroker Allgemein
  4. Yahka Sprinkler mit Zeitsteuerung

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.3k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.3k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.5k

Yahka Sprinkler mit Zeitsteuerung

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
homekit yahka bewässerung zeitremaining duration homekit
76 Beiträge 14 Kommentatoren 10.7k Aufrufe 11 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • cashC Offline
    cashC Offline
    cash
    Most Active
    schrieb am zuletzt editiert von
    #25

    Habe ich schon gemacht. Scheint zu funktionieren. Ich glaube den Punkt kann man auch hochzählen lassen wenn man keinen Timer nutzt somit würde man sehen wie lange der Sprenger schon läuft. Teste ich heute Abend mal. Werde das Script dann hier posten.

    Gibt es irgendwo eine Übersicht welche Datenpunkte es gibt (also für alle Homekitsachen) und wozu die gut sind? Fände es gut wenn Homekit eine Push verschickt wie bei den Fensterkontakten.

    J 1 Antwort Letzte Antwort
    0
    • cashC cash

      Habe ich schon gemacht. Scheint zu funktionieren. Ich glaube den Punkt kann man auch hochzählen lassen wenn man keinen Timer nutzt somit würde man sehen wie lange der Sprenger schon läuft. Teste ich heute Abend mal. Werde das Script dann hier posten.

      Gibt es irgendwo eine Übersicht welche Datenpunkte es gibt (also für alle Homekitsachen) und wozu die gut sind? Fände es gut wenn Homekit eine Push verschickt wie bei den Fensterkontakten.

      J Offline
      J Offline
      jack99n
      schrieb am zuletzt editiert von
      #26

      @cash Hilft dir das?

      https://stefans-itblog.de/liste-aller-homekit-characteristics/

      1 Antwort Letzte Antwort
      0
      • cashC Offline
        cashC Offline
        cash
        Most Active
        schrieb am zuletzt editiert von
        #27

        Auf jeden Fall. Habe zwar erst grob drüber geschaut sieht aber gut aus.

        Vielen Dank.

        Gerade Timer nochmal getestet. Nun passt die Restlaufzeit. Auf der Apple Watch sieht man neben den Status ebenfalls die Restlaufzeit.

        Wie schon geschrieben probier ich heute abend mal aus was passiert wenn man keinen Timer stellt und ich das Feld hochzählen lasse.

        J 1 Antwort Letzte Antwort
        0
        • cashC cash

          Auf jeden Fall. Habe zwar erst grob drüber geschaut sieht aber gut aus.

          Vielen Dank.

          Gerade Timer nochmal getestet. Nun passt die Restlaufzeit. Auf der Apple Watch sieht man neben den Status ebenfalls die Restlaufzeit.

          Wie schon geschrieben probier ich heute abend mal aus was passiert wenn man keinen Timer stellt und ich das Feld hochzählen lasse.

          J Offline
          J Offline
          jack99n
          schrieb am zuletzt editiert von
          #28

          @cash sagte in Yahka Sprinkler mit Zeitsteuerung:

          Wie schon geschrieben probier ich heute abend mal aus was passiert wenn man keinen Timer stellt und ich das Feld hochzählen lasse.

          Was willst du damit erreichen?

          1 Antwort Letzte Antwort
          0
          • cashC Offline
            cashC Offline
            cash
            Most Active
            schrieb am zuletzt editiert von
            #29

            Bei der Apple Watch sieht man wenn man keinen Timer gestellt hat also nur normal einschaltet eine 0:00. Ich vermute das wenn ich dann die Zeit hochzähle ich dort sehen könnte wie lange die Anlage schon läuft. Fände ich jetzt eigentlich auch ganz praktisch.

            Ich könnte dann auch noch einen Schritt weitergehen und das Gerät nach einer Stunde wieder ausschalten lassen oder mir über Pushover eine Push schicken im Sinne von: Der Rasensprenger läuft jetzt schon eine Stunde. Vergessen auszuschalten?

            Mal sehen. Ist halt mehr oder weniger nur spielerei.

            J 1 Antwort Letzte Antwort
            0
            • cashC cash

              Bei der Apple Watch sieht man wenn man keinen Timer gestellt hat also nur normal einschaltet eine 0:00. Ich vermute das wenn ich dann die Zeit hochzähle ich dort sehen könnte wie lange die Anlage schon läuft. Fände ich jetzt eigentlich auch ganz praktisch.

              Ich könnte dann auch noch einen Schritt weitergehen und das Gerät nach einer Stunde wieder ausschalten lassen oder mir über Pushover eine Push schicken im Sinne von: Der Rasensprenger läuft jetzt schon eine Stunde. Vergessen auszuschalten?

              Mal sehen. Ist halt mehr oder weniger nur spielerei.

              J Offline
              J Offline
              jack99n
              schrieb am zuletzt editiert von
              #30

              @cash sagte in Yahka Sprinkler mit Zeitsteuerung:

              Ich könnte dann auch noch einen Schritt weitergehen und das Gerät nach einer Stunde wieder ausschalten lassen oder mir über Pushover eine Push schicken im Sinne von: Der Rasensprenger läuft jetzt schon eine Stunde. Vergessen auszuschalten?

              Mal sehen. Ist halt mehr oder weniger nur Spielerei

              Aber das ausschalten erledigt doch der Timeout der die Zeit bekommt die du bei Home einstellst.

              1 Antwort Letzte Antwort
              0
              • cashC Offline
                cashC Offline
                cash
                Most Active
                schrieb am zuletzt editiert von
                #31

                Nein. Also erstmal vorab es funktioniert.

                Mein Script funktioniert jetzt wie folgt:

                Wenn ich per Homekit die Steckdose einschalte (ohne Countdown). Sehe ich im Iphone oder der Apple Watch wie lange die Steckdose schon offen ist (aslo das Gegenteil vom Countdown).

                Testweise wird mir nach 5 Minuten eine Pushmitteilung geschickt mit der Frage ob ich die Bewässerung vergessen habe. Wenn alles läuft wird die Zeit länger gestellt.

                Wenn ich per Homekit die Steckdose mit Timer einschalte (also die Auswahl zwischen 5 Minuten bis 60 Minuten. Läuft ein Countdown. Ich kann dann jederzeit im Iphone oder bei der Apple Watch sehen wie lange der Countdown noch läuft. Nach Ablauf vom Timer wird die Steckdose automatisch ausgeschaltet.

                Besonderheit: Ich nutze eine Homematic Steckdose dort kann ich beim einschalten eine Laufzeit mitgeben. Wenn ich per Homekit einen Timer setze von 30 Minuten gebe ich der Steckdose eine Einschaltdauer von 29 Minuten und 30 Sekunden mit, Sollte also die CCU oder ioBroker ein Problem haben wird die Steckdose trotzdem ausschalten. Wenn der Timer nach 30 Minuten abgelaufen ist überprüfe ich ob das Magnetventil wirklich aus ist, falls nicht schicke den Schaltbefehl nocheinmal.

                Ich beobachte und teste die nächsten Tage noch etwas und werde das Script noch etwas aufräumen und dann kann ich es hier ja posten. Vielleicht kann es jemand gebrauchen.

                J 1 Antwort Letzte Antwort
                0
                • cashC cash

                  Nein. Also erstmal vorab es funktioniert.

                  Mein Script funktioniert jetzt wie folgt:

                  Wenn ich per Homekit die Steckdose einschalte (ohne Countdown). Sehe ich im Iphone oder der Apple Watch wie lange die Steckdose schon offen ist (aslo das Gegenteil vom Countdown).

                  Testweise wird mir nach 5 Minuten eine Pushmitteilung geschickt mit der Frage ob ich die Bewässerung vergessen habe. Wenn alles läuft wird die Zeit länger gestellt.

                  Wenn ich per Homekit die Steckdose mit Timer einschalte (also die Auswahl zwischen 5 Minuten bis 60 Minuten. Läuft ein Countdown. Ich kann dann jederzeit im Iphone oder bei der Apple Watch sehen wie lange der Countdown noch läuft. Nach Ablauf vom Timer wird die Steckdose automatisch ausgeschaltet.

                  Besonderheit: Ich nutze eine Homematic Steckdose dort kann ich beim einschalten eine Laufzeit mitgeben. Wenn ich per Homekit einen Timer setze von 30 Minuten gebe ich der Steckdose eine Einschaltdauer von 29 Minuten und 30 Sekunden mit, Sollte also die CCU oder ioBroker ein Problem haben wird die Steckdose trotzdem ausschalten. Wenn der Timer nach 30 Minuten abgelaufen ist überprüfe ich ob das Magnetventil wirklich aus ist, falls nicht schicke den Schaltbefehl nocheinmal.

                  Ich beobachte und teste die nächsten Tage noch etwas und werde das Script noch etwas aufräumen und dann kann ich es hier ja posten. Vielleicht kann es jemand gebrauchen.

                  J Offline
                  J Offline
                  jack99n
                  schrieb am zuletzt editiert von
                  #32

                  @cash Okay jetzt habe ich es verstanden, hört sich gut an wie du es jetzt umgesetzt hast. Dann teste mal noch ein bisschen!

                  1 Antwort Letzte Antwort
                  0
                  • cashC Offline
                    cashC Offline
                    cash
                    Most Active
                    schrieb am zuletzt editiert von
                    #33

                    Falls es jemand per Javascript umsetzen möchte:

                    
                    /**************************
                    * Script Gartenbewässerung per Homekit schalten incl Timer
                    *
                    * 08.06.19 V1.00    Erste Version
                    * 09.06.19 V1.01    Stoppuhr eingebaut wenn kein Countdown gestartet wurde
                    * 10.06.19 V1.02    Logging optimiert und Variablen zum einfachen steuern eingebaut
                    * 11.06.19 V1.03    Logging präzisiert
                    *                   kleinere Syntaxfehler behoben
                    *                   set_on_time hinzugefügt um Funktion zu deaktivieren
                    * 13.06.19 V1.04    Logging reduziert
                    *
                    * der Ziel Status wird durch Homekit geändert
                    * func_Status_Syncronisierung synronisiert den realen Status 
                    * vom Magnetventil mit den beiden Pseudo Stati von Homekit
                    * 0 = Bewässerung ist aus
                    * 1 = Bewässerung ist eingeschaltet
                    * wichtig der Ziel Status wird durch Homekit ohne ack:true geändert
                    **************************/
                    
                    const logging = true;
                    const debugging = false;
                    
                    const Stoppuhr_Dauer = 300;       //Dauer in Sekunden wie lange die Stopuhr läuft max. 3600
                    const Stoppuhr_Wasser_off = false;  //Schaltet das Magnetventil nach Ablauf der Stoppuhr automatisch aus
                    const set_on_time = true;           //Wenn ein Countdown gesetzt wird wird die Dauer direkt im Gerät gesetzt
                    
                    //Variablen für Pushover
                    const sendpush = true;     //true = verschickt per Pushover Nachrchten // false = Pushover wird nicht benutzt
                    const pushover_Instanz0 =  'pushover.0';     // Pushover instance für Pio = 0
                    const pushover_Instanz1 =  'pushover.1';     // Pushover instance für Pio = 1
                    const pushover_Instanz2 =  'pushover.2';     // Pushover instance für Pio = 2
                    const pushover_Instanz3 =  'pushover.3';     // Pushover instance für Pio = -1 oder -2
                    let _prio = 1;
                    let _titel = 'Bewässerung';
                    let _message;
                    let _device = 'TPhone'; 
                    //var device = 'All'; 
                    
                    const id_Status = 'Systemvariable.0.Terrasse.Bewässerung.Magnetventil.Status_Homekit'/*Status Homekit*/;
                    const id_Ziel_Status = 'Systemvariable.0.Terrasse.Bewässerung.Magnetventil.Ziel_Status_Homekit'/*Ziel Status Homekit*/;
                    const id_Ist = 'Systemvariable.0.Terrasse.Bewässerung.Magnetventil.Timer_Ist_Homekit'/*Timer Ist Homekit*/;
                    const id_Soll = 'Systemvariable.0.Terrasse.Bewässerung.Magnetventil.Timer_Soll_Homekit'/*Timer Soll Homekit*/;
                    const id_Magnetventil = 'hm-rpc.0.LEQ1316331.1.STATE'/*Terrasse Bewässerung:1 STATE*/;
                    const id_Magnetventil_on_time = 'hm-rpc.0.LEQ1316331.1.ON_TIME'/*Terrasse Bewässerung:1 ON TIME*/;
                    //const id_Magnetventil = 'hm-rpc.0.LEQ0929723.1.STATE'/*Wohnzimmer GSV-Licht:1 STATE*/;
                    //const id_Magnetventil_on_time = 'hm-rpc.0.LEQ0929723.1.ON_TIME'/*Wohnzimmer GSV-Licht:1 ON TIME*/;
                    
                    let timer = null;
                    
                    function send_pushover (_device, _message, _titel, _prio) {
                       // Version 4.00 vom 15.01.19
                       var pushover_Instanz =  'pushover.0';
                       if (_prio === 0){pushover_Instanz =  'pushover.0'}
                       else if (_prio == 1){pushover_Instanz =  'pushover.1'}
                       else if (_prio == 2){pushover_Instanz =  'pushover.2'}
                       else {pushover_Instanz =  'pushover.3'}
                           sendTo(pushover_Instanz, { 
                           device: _device,
                           message: _message, 
                           title: _titel, 
                           priority: _prio,
                           retry: 60,
                           expire: 600,
                           html: 1
                       }); 
                    }
                    
                    function func_Ziel_Status(){
                       var Ziel_Status =  getState(id_Ziel_Status).val;
                       var Status = getState(id_Status).val;
                       var Soll = Number(getState(id_Soll).val);
                       var Ist = Soll;
                       var Ist_real = getState(id_Ist).val;
                    
                       
                       //Magnetventil soll geschlossen werden
                       if(Ziel_Status === 0){
                           if(timer){ 
                               clearInterval(timer); // Stopp Timer
                               timer = null;
                               if(debugging){
                                   log('[DEBUG] '+'[Ziel_Status] ' +'Es läuft ein Timer. Magnetventil soll per Homekit ausgeschaltet werden');
                               }
                           }
                           if(Ist_real !== 0){
                               if(debugging){
                                   log('[DEBUG] '+'[Ziel_Status] ' +'id_Ist ist nicht null und wird auf 0 gesetzt.');
                               }
                               setState(id_Ist,0,true);
                           }
                           if(Soll !== 0){
                               if(debugging){
                                   log('[DEBUG] '+'[Ziel_Status] ' +'id_Soll ist nicht null und wird auf 0 gesetzt.');
                               }
                               setState(id_Soll,0,true);
                           }
                           if(Status == 1){
                               if(logging){
                                   log('Magnetventil soll per Homekit geschlossen werden.');
                               }
                               setStateDelayed(id_Magnetventil,false,500);
                               setState(id_Status,0);
                           }
                           else{
                               if(debugging){
                                   log('[DEBUG] '+'[Ziel_Status] ' +'Magnetventil wurde nicht über Homekit bedient (geschlossen)');
                               }
                           }
                    
                       }
                       //Magnetventil soll geöffnet werden werden
                       else if(Ziel_Status === 1){
                           if(Status === 0){
                               if(logging){
                                   log('Magnetventil soll per Homekit geöffnet werden.');
                               }
                               setStateDelayed(id_Magnetventil,true,1000);
                               setState(id_Status,1);
                    
                               if(Soll === 0){
                                   log('Es wurde kein Countdown gestartet. Starte Stopuhr.');
                                   if(timer){ 
                                       clearInterval(timer); // Stopp Timer
                                       timer = null;
                                       if(debugging){
                                           log('[DEBUG] '+'[Ziel_Status] ' +'Stoppuhr soll gestartet werden. Es existiert ein Timer. Der Timer wird abgebrochen.');
                                       }
                                   }
                                   timer = setInterval(function() {
                                       Ist++;
                                       //if(debugging){
                                       //    log('Countdown bei ' +Ist +' Sekunden');
                                       //}    
                                       setState(id_Ist,Ist);
                                       if(Ist >= Stoppuhr_Dauer) {
                                           if(debugging){
                                               log('[DEBUG] '+'[Ziel_Status] ' +'Stoppuhr für Magnetventil abgelaufen.');
                                           }
                                           clearInterval(timer);
                                           timer = null;
                                           setState(id_Ist, 0, true);
                                   
                                   
                                           if(getState(id_Magnetventil).val){
                                               if(logging){
                                                   log('Stoppuhr abgelaufen. Magnetventil ist offen. Evtl vergessen');
                                               }
                                               if(Stoppuhr_Wasser_off){
                                                   if(logging){
                                                       log('Magnetventil soll automatisch ausschalten.');
                                                   }
                                                   setState(id_Magnetventil,false,true);
                                               }
                                               //Push verschicken
                                               if(sendpush){
                                                   _prio = 2;
                                                   _message = 'Magnetventil ist immer noch offen. Vergessen?';
                                                   send_pushover(_device, _message, _titel, _prio);
                                               } 
                                           }
                                           else{
                                               if(debugging){
                                                   log('[DEBUG] '+'[Ziel_Status] ' +'Stopuhr abgelaufen Magnetventil war bereits ausgeschaltet');
                                               }
                                           }
                                       }   
                                   }, 1000);
                               }
                           }
                           else{
                               if(debugging){
                                   log('[DEBUG] '+'[Ziel_Status] ' +'Magnetventil wurde nicht über Homekit bedient (angeschaltet)');
                               }
                           }
                    
                       }
                       else{
                           if(debugging){
                               log('[DEBUG] '+'[Ziel_Status] ' +'Fehler der Zielstatus ist ungleich 0 oder 1. Das darf eigentlich nicht passieren');
                           }
                       }
                    }
                    
                    function func_Status_Syncroniserung(){
                       var Status = getState(id_Status).val;
                       var Ziel_Status = getState(id_Ziel_Status).val;
                       var Magnetventil = getState(id_Magnetventil).val;
                    
                       if(Magnetventil){
                           if(Status === 0){
                               setState(id_Status,1);
                               if(debugging){
                                   log('[DEBUG] '+'[Status_Sync] ' +'Status war 0 wird auf 1 gesetzt, da das Magnetventil an ist');
                               }
                               
                           }
                           else{
                               if(debugging){
                                   log('[DEBUG] '+'[Status_Sync] ' +'Status war bereits auf 1. Magnetventil ist an');
                               } 
                           }
                           if(Ziel_Status === 0){
                               setState(id_Ziel_Status,1);
                               if(debugging){
                                   log('[DEBUG] '+'[Status_Sync] ' +'Magnetventil wurde nicht über Homekit eingeschaltet. Ziel_Status wird von 0 auf 1 geändert');
                               }
                           }
                           else{
                               if(debugging){
                                   log('[DEBUG] '+'[Status_Sync] ' +'Ziel_Status war bereits auf true. Magnetventil wurde eingeschaltet'); 
                               }
                           }
                       }
                       else{
                           if(Status == 1){
                               setState(id_Status,0);
                               if(debugging){
                                   log('[DEBUG] '+'[Status_Sync] ' +'Status war 1 und wird auf 0 geändert weil das Magnetventil aus ist');
                               }
                               
                           }
                           else{
                               if(debugging){
                                   log('[DEBUG] '+'[Status_Sync] ' +'Status war bereits auf 0 nachdem das Magnetnvetil ausgeschaltet wurde'); 
                               }
                           }
                           if(Ziel_Status == 1){
                               setState(id_Ziel_Status,0);
                               if(debugging){
                                   log('[DEBUG] '+'[Status_Sync] ' +'Magnetventil wurde nicht über Homekit ausgeschaltet. Ziel_Status wird von 1 auf 0 geändert');
                               }
                           }
                           else{
                               if(debugging){
                                   log('[DEBUG] '+'[Status_Sync] ' +'Ziel_Status war bereits auf 0. Magnetventil wurde ausgeschaltet.'); 
                               }   
                           }
                    
                       }
                    }
                    
                    function func_countdown(){
                       var Status = getState(id_Status).val;
                       var Soll = Number(getState(id_Soll).val);
                       var Ist = Soll;
                       //ontime 5 Sekunden kürzer
                       var ontime = Soll - 10;
                       setState(id_Ist,Ist);
                    
                       if(set_on_time){
                           setState(id_Magnetventil_on_time,ontime);
                       }
                       setStateDelayed(id_Ziel_Status,1,500);
                       
                       if(logging){
                           log('[countdown] ' +'Timer für Magnetventil wird gestartet für ' +Soll +' Sekunden.');
                       }
                       
                       if(timer){ 
                           clearInterval(timer); // Stopp Timer
                           timer = null;
                           if(logging){
                               log('[countdown] ' +'Es besteht schon ein Timer für das Magnetventil. Ggf prüfen');
                           }
                       }
                    
                       if(Soll !== 0){
                           timer = setInterval(function() {
                               Ist--;
                               //if(debugging){
                               //    log('Countdown bei ' +Ist +' Sekunden');
                               //}    
                               setState(id_Ist,Ist);
                               if(Ist <= 0) {
                                   log('[Status_Sync] ' +'Timer für Magnetventil abgelaufen');
                                   clearInterval(timer);
                                   timer = null;
                                   setState(id_Soll, 0, true);
                                   setState(id_Ist, 0, true);
                                   setState(id_Magnetventil_on_time,0);
                                   if(getState(id_Magnetventil).val){
                                       if(logging){
                                           log('[countdown] ' +'Magnetventil war noch nicht ausgeschaltet und wird nun ausgeschaltet');
                                       }
                                       setState(id_Magnetventil,false,true);
                                       //Push verschicken
                                       if(sendpush){
                                           if(set_on_time){
                                               _message = 'Magnetventil war nicht geschlossen. on_Befehl hat nicht funktioniert';
                                           }
                                           else{
                                               _message = 'Magnetventil wurde ausgeschaltetn.';    
                                           }
                                           send_pushover(_device, _message, _titel, _prio);
                                       } 
                                   }
                                   else{
                                       if(debugging){
                                           log('[countdown] ' +'Magnetventil war bereits ausgeschaltet');
                                       }
                                   }
                               }   
                           }, 1000);
                       }
                       else{
                           if(debugging){
                               log('[countdown] ' +'Soll ist gleich 0');
                           }
                       }
                    } 
                    
                    
                    //beim Start
                    //func_countdown();
                    
                    on({id: id_Soll, valGt: 0 ,change: "ne"}, func_countdown);
                    on({id: id_Ziel_Status, change: "ne"}, func_Ziel_Status);
                    on({id: id_Magnetventil, change: "ne"}, func_Status_Syncroniserung);
                    

                    M 1 Antwort Letzte Antwort
                    1
                    • cashC cash

                      Falls es jemand per Javascript umsetzen möchte:

                      
                      /**************************
                      * Script Gartenbewässerung per Homekit schalten incl Timer
                      *
                      * 08.06.19 V1.00    Erste Version
                      * 09.06.19 V1.01    Stoppuhr eingebaut wenn kein Countdown gestartet wurde
                      * 10.06.19 V1.02    Logging optimiert und Variablen zum einfachen steuern eingebaut
                      * 11.06.19 V1.03    Logging präzisiert
                      *                   kleinere Syntaxfehler behoben
                      *                   set_on_time hinzugefügt um Funktion zu deaktivieren
                      * 13.06.19 V1.04    Logging reduziert
                      *
                      * der Ziel Status wird durch Homekit geändert
                      * func_Status_Syncronisierung synronisiert den realen Status 
                      * vom Magnetventil mit den beiden Pseudo Stati von Homekit
                      * 0 = Bewässerung ist aus
                      * 1 = Bewässerung ist eingeschaltet
                      * wichtig der Ziel Status wird durch Homekit ohne ack:true geändert
                      **************************/
                      
                      const logging = true;
                      const debugging = false;
                      
                      const Stoppuhr_Dauer = 300;       //Dauer in Sekunden wie lange die Stopuhr läuft max. 3600
                      const Stoppuhr_Wasser_off = false;  //Schaltet das Magnetventil nach Ablauf der Stoppuhr automatisch aus
                      const set_on_time = true;           //Wenn ein Countdown gesetzt wird wird die Dauer direkt im Gerät gesetzt
                      
                      //Variablen für Pushover
                      const sendpush = true;     //true = verschickt per Pushover Nachrchten // false = Pushover wird nicht benutzt
                      const pushover_Instanz0 =  'pushover.0';     // Pushover instance für Pio = 0
                      const pushover_Instanz1 =  'pushover.1';     // Pushover instance für Pio = 1
                      const pushover_Instanz2 =  'pushover.2';     // Pushover instance für Pio = 2
                      const pushover_Instanz3 =  'pushover.3';     // Pushover instance für Pio = -1 oder -2
                      let _prio = 1;
                      let _titel = 'Bewässerung';
                      let _message;
                      let _device = 'TPhone'; 
                      //var device = 'All'; 
                      
                      const id_Status = 'Systemvariable.0.Terrasse.Bewässerung.Magnetventil.Status_Homekit'/*Status Homekit*/;
                      const id_Ziel_Status = 'Systemvariable.0.Terrasse.Bewässerung.Magnetventil.Ziel_Status_Homekit'/*Ziel Status Homekit*/;
                      const id_Ist = 'Systemvariable.0.Terrasse.Bewässerung.Magnetventil.Timer_Ist_Homekit'/*Timer Ist Homekit*/;
                      const id_Soll = 'Systemvariable.0.Terrasse.Bewässerung.Magnetventil.Timer_Soll_Homekit'/*Timer Soll Homekit*/;
                      const id_Magnetventil = 'hm-rpc.0.LEQ1316331.1.STATE'/*Terrasse Bewässerung:1 STATE*/;
                      const id_Magnetventil_on_time = 'hm-rpc.0.LEQ1316331.1.ON_TIME'/*Terrasse Bewässerung:1 ON TIME*/;
                      //const id_Magnetventil = 'hm-rpc.0.LEQ0929723.1.STATE'/*Wohnzimmer GSV-Licht:1 STATE*/;
                      //const id_Magnetventil_on_time = 'hm-rpc.0.LEQ0929723.1.ON_TIME'/*Wohnzimmer GSV-Licht:1 ON TIME*/;
                      
                      let timer = null;
                      
                      function send_pushover (_device, _message, _titel, _prio) {
                         // Version 4.00 vom 15.01.19
                         var pushover_Instanz =  'pushover.0';
                         if (_prio === 0){pushover_Instanz =  'pushover.0'}
                         else if (_prio == 1){pushover_Instanz =  'pushover.1'}
                         else if (_prio == 2){pushover_Instanz =  'pushover.2'}
                         else {pushover_Instanz =  'pushover.3'}
                             sendTo(pushover_Instanz, { 
                             device: _device,
                             message: _message, 
                             title: _titel, 
                             priority: _prio,
                             retry: 60,
                             expire: 600,
                             html: 1
                         }); 
                      }
                      
                      function func_Ziel_Status(){
                         var Ziel_Status =  getState(id_Ziel_Status).val;
                         var Status = getState(id_Status).val;
                         var Soll = Number(getState(id_Soll).val);
                         var Ist = Soll;
                         var Ist_real = getState(id_Ist).val;
                      
                         
                         //Magnetventil soll geschlossen werden
                         if(Ziel_Status === 0){
                             if(timer){ 
                                 clearInterval(timer); // Stopp Timer
                                 timer = null;
                                 if(debugging){
                                     log('[DEBUG] '+'[Ziel_Status] ' +'Es läuft ein Timer. Magnetventil soll per Homekit ausgeschaltet werden');
                                 }
                             }
                             if(Ist_real !== 0){
                                 if(debugging){
                                     log('[DEBUG] '+'[Ziel_Status] ' +'id_Ist ist nicht null und wird auf 0 gesetzt.');
                                 }
                                 setState(id_Ist,0,true);
                             }
                             if(Soll !== 0){
                                 if(debugging){
                                     log('[DEBUG] '+'[Ziel_Status] ' +'id_Soll ist nicht null und wird auf 0 gesetzt.');
                                 }
                                 setState(id_Soll,0,true);
                             }
                             if(Status == 1){
                                 if(logging){
                                     log('Magnetventil soll per Homekit geschlossen werden.');
                                 }
                                 setStateDelayed(id_Magnetventil,false,500);
                                 setState(id_Status,0);
                             }
                             else{
                                 if(debugging){
                                     log('[DEBUG] '+'[Ziel_Status] ' +'Magnetventil wurde nicht über Homekit bedient (geschlossen)');
                                 }
                             }
                      
                         }
                         //Magnetventil soll geöffnet werden werden
                         else if(Ziel_Status === 1){
                             if(Status === 0){
                                 if(logging){
                                     log('Magnetventil soll per Homekit geöffnet werden.');
                                 }
                                 setStateDelayed(id_Magnetventil,true,1000);
                                 setState(id_Status,1);
                      
                                 if(Soll === 0){
                                     log('Es wurde kein Countdown gestartet. Starte Stopuhr.');
                                     if(timer){ 
                                         clearInterval(timer); // Stopp Timer
                                         timer = null;
                                         if(debugging){
                                             log('[DEBUG] '+'[Ziel_Status] ' +'Stoppuhr soll gestartet werden. Es existiert ein Timer. Der Timer wird abgebrochen.');
                                         }
                                     }
                                     timer = setInterval(function() {
                                         Ist++;
                                         //if(debugging){
                                         //    log('Countdown bei ' +Ist +' Sekunden');
                                         //}    
                                         setState(id_Ist,Ist);
                                         if(Ist >= Stoppuhr_Dauer) {
                                             if(debugging){
                                                 log('[DEBUG] '+'[Ziel_Status] ' +'Stoppuhr für Magnetventil abgelaufen.');
                                             }
                                             clearInterval(timer);
                                             timer = null;
                                             setState(id_Ist, 0, true);
                                     
                                     
                                             if(getState(id_Magnetventil).val){
                                                 if(logging){
                                                     log('Stoppuhr abgelaufen. Magnetventil ist offen. Evtl vergessen');
                                                 }
                                                 if(Stoppuhr_Wasser_off){
                                                     if(logging){
                                                         log('Magnetventil soll automatisch ausschalten.');
                                                     }
                                                     setState(id_Magnetventil,false,true);
                                                 }
                                                 //Push verschicken
                                                 if(sendpush){
                                                     _prio = 2;
                                                     _message = 'Magnetventil ist immer noch offen. Vergessen?';
                                                     send_pushover(_device, _message, _titel, _prio);
                                                 } 
                                             }
                                             else{
                                                 if(debugging){
                                                     log('[DEBUG] '+'[Ziel_Status] ' +'Stopuhr abgelaufen Magnetventil war bereits ausgeschaltet');
                                                 }
                                             }
                                         }   
                                     }, 1000);
                                 }
                             }
                             else{
                                 if(debugging){
                                     log('[DEBUG] '+'[Ziel_Status] ' +'Magnetventil wurde nicht über Homekit bedient (angeschaltet)');
                                 }
                             }
                      
                         }
                         else{
                             if(debugging){
                                 log('[DEBUG] '+'[Ziel_Status] ' +'Fehler der Zielstatus ist ungleich 0 oder 1. Das darf eigentlich nicht passieren');
                             }
                         }
                      }
                      
                      function func_Status_Syncroniserung(){
                         var Status = getState(id_Status).val;
                         var Ziel_Status = getState(id_Ziel_Status).val;
                         var Magnetventil = getState(id_Magnetventil).val;
                      
                         if(Magnetventil){
                             if(Status === 0){
                                 setState(id_Status,1);
                                 if(debugging){
                                     log('[DEBUG] '+'[Status_Sync] ' +'Status war 0 wird auf 1 gesetzt, da das Magnetventil an ist');
                                 }
                                 
                             }
                             else{
                                 if(debugging){
                                     log('[DEBUG] '+'[Status_Sync] ' +'Status war bereits auf 1. Magnetventil ist an');
                                 } 
                             }
                             if(Ziel_Status === 0){
                                 setState(id_Ziel_Status,1);
                                 if(debugging){
                                     log('[DEBUG] '+'[Status_Sync] ' +'Magnetventil wurde nicht über Homekit eingeschaltet. Ziel_Status wird von 0 auf 1 geändert');
                                 }
                             }
                             else{
                                 if(debugging){
                                     log('[DEBUG] '+'[Status_Sync] ' +'Ziel_Status war bereits auf true. Magnetventil wurde eingeschaltet'); 
                                 }
                             }
                         }
                         else{
                             if(Status == 1){
                                 setState(id_Status,0);
                                 if(debugging){
                                     log('[DEBUG] '+'[Status_Sync] ' +'Status war 1 und wird auf 0 geändert weil das Magnetventil aus ist');
                                 }
                                 
                             }
                             else{
                                 if(debugging){
                                     log('[DEBUG] '+'[Status_Sync] ' +'Status war bereits auf 0 nachdem das Magnetnvetil ausgeschaltet wurde'); 
                                 }
                             }
                             if(Ziel_Status == 1){
                                 setState(id_Ziel_Status,0);
                                 if(debugging){
                                     log('[DEBUG] '+'[Status_Sync] ' +'Magnetventil wurde nicht über Homekit ausgeschaltet. Ziel_Status wird von 1 auf 0 geändert');
                                 }
                             }
                             else{
                                 if(debugging){
                                     log('[DEBUG] '+'[Status_Sync] ' +'Ziel_Status war bereits auf 0. Magnetventil wurde ausgeschaltet.'); 
                                 }   
                             }
                      
                         }
                      }
                      
                      function func_countdown(){
                         var Status = getState(id_Status).val;
                         var Soll = Number(getState(id_Soll).val);
                         var Ist = Soll;
                         //ontime 5 Sekunden kürzer
                         var ontime = Soll - 10;
                         setState(id_Ist,Ist);
                      
                         if(set_on_time){
                             setState(id_Magnetventil_on_time,ontime);
                         }
                         setStateDelayed(id_Ziel_Status,1,500);
                         
                         if(logging){
                             log('[countdown] ' +'Timer für Magnetventil wird gestartet für ' +Soll +' Sekunden.');
                         }
                         
                         if(timer){ 
                             clearInterval(timer); // Stopp Timer
                             timer = null;
                             if(logging){
                                 log('[countdown] ' +'Es besteht schon ein Timer für das Magnetventil. Ggf prüfen');
                             }
                         }
                      
                         if(Soll !== 0){
                             timer = setInterval(function() {
                                 Ist--;
                                 //if(debugging){
                                 //    log('Countdown bei ' +Ist +' Sekunden');
                                 //}    
                                 setState(id_Ist,Ist);
                                 if(Ist <= 0) {
                                     log('[Status_Sync] ' +'Timer für Magnetventil abgelaufen');
                                     clearInterval(timer);
                                     timer = null;
                                     setState(id_Soll, 0, true);
                                     setState(id_Ist, 0, true);
                                     setState(id_Magnetventil_on_time,0);
                                     if(getState(id_Magnetventil).val){
                                         if(logging){
                                             log('[countdown] ' +'Magnetventil war noch nicht ausgeschaltet und wird nun ausgeschaltet');
                                         }
                                         setState(id_Magnetventil,false,true);
                                         //Push verschicken
                                         if(sendpush){
                                             if(set_on_time){
                                                 _message = 'Magnetventil war nicht geschlossen. on_Befehl hat nicht funktioniert';
                                             }
                                             else{
                                                 _message = 'Magnetventil wurde ausgeschaltetn.';    
                                             }
                                             send_pushover(_device, _message, _titel, _prio);
                                         } 
                                     }
                                     else{
                                         if(debugging){
                                             log('[countdown] ' +'Magnetventil war bereits ausgeschaltet');
                                         }
                                     }
                                 }   
                             }, 1000);
                         }
                         else{
                             if(debugging){
                                 log('[countdown] ' +'Soll ist gleich 0');
                             }
                         }
                      } 
                      
                      
                      //beim Start
                      //func_countdown();
                      
                      on({id: id_Soll, valGt: 0 ,change: "ne"}, func_countdown);
                      on({id: id_Ziel_Status, change: "ne"}, func_Ziel_Status);
                      on({id: id_Magnetventil, change: "ne"}, func_Status_Syncroniserung);
                      

                      M Offline
                      M Offline
                      Marsel
                      schrieb am zuletzt editiert von
                      #34

                      @cash Hi Cash, finde deine Idee mit dem Hoch und Runterzählen echt genial!:+1:
                      Ich würde das sehr gerne nachbauen aber ich habe im Javascript noch nicht so viel Erfahrungen. Könntest du mir kurz erläutern wo ich was ändern muss?

                      cashC 1 Antwort Letzte Antwort
                      0
                      • M Marsel

                        @cash Hi Cash, finde deine Idee mit dem Hoch und Runterzählen echt genial!:+1:
                        Ich würde das sehr gerne nachbauen aber ich habe im Javascript noch nicht so viel Erfahrungen. Könntest du mir kurz erläutern wo ich was ändern muss?

                        cashC Offline
                        cashC Offline
                        cash
                        Most Active
                        schrieb am zuletzt editiert von
                        #35

                        @Marsel Zeile 24-37 nach belieben anpassen.

                        Zeile 40-45 dort musst Du Deine Datenpunkte eintragen. Die ersten 4 musst Du manuell selber anlegen (egal wo). Die anderen beiden sind das Gerät

                        M 1 Antwort Letzte Antwort
                        1
                        • cashC cash

                          @Marsel Zeile 24-37 nach belieben anpassen.

                          Zeile 40-45 dort musst Du Deine Datenpunkte eintragen. Die ersten 4 musst Du manuell selber anlegen (egal wo). Die anderen beiden sind das Gerät

                          M Offline
                          M Offline
                          Marsel
                          schrieb am zuletzt editiert von
                          #36

                          @cash Soweit funktioniert es schon mal aber er zählt noch nicht hoch.
                          Ich schalte das Ventil über den GPIO des Raspberry Pi und da fehlt mir die Möglichkeit den On_Time aus Zeile 45 auszuwählen. Für was ist er da? Brauche ich den um die Zeit Hochzuzählen oder für die Stoppuhr um Ihn automatisch abzuschalten?

                          1 Antwort Letzte Antwort
                          0
                          • cashC Offline
                            cashC Offline
                            cash
                            Most Active
                            schrieb am zuletzt editiert von
                            #37

                            Die Zeile 45 ist der Datenpunkt wo die Zeit reingeschrieben wird wann das Ventil schließen soll.

                            Bei Homematic gibt es da einen Datenpunkt. Das Script tickt so das die Zeit also z. B. wenn man per Homekit das Ventil für 10 Minuten schalten will wird vor dem einschalten die 10 Minuten in den Datenpunkt geschrieben. Somit schaltet das Ventil selbst dann aus wenn zwischendruch die Homematic Zentrale oder iobroker cracht. Sollte der Befehl nicht funktioniert haben prüft das Script ein paar Sekunden später ob das Ventil wirklich aus istund schaltet es dann.

                            Fürs hochzählen ist er nicht da. Was passiert denn wenn Du per Homekit das Ventil öffnest? Siehst Du unter den on eine Zeit? Also 00;00.

                            Was machen die Datenpunkte? Was sagt das Log. Im Log wird geschrieben das die Stoppuhr startet?

                            M 1 Antwort Letzte Antwort
                            0
                            • cashC Offline
                              cashC Offline
                              cash
                              Most Active
                              schrieb am zuletzt editiert von
                              #38

                              Wenn Du den on-time Datenpunkt nicht hast Zeile 26 auf false...

                              1 Antwort Letzte Antwort
                              0
                              • cashC cash

                                Die Zeile 45 ist der Datenpunkt wo die Zeit reingeschrieben wird wann das Ventil schließen soll.

                                Bei Homematic gibt es da einen Datenpunkt. Das Script tickt so das die Zeit also z. B. wenn man per Homekit das Ventil für 10 Minuten schalten will wird vor dem einschalten die 10 Minuten in den Datenpunkt geschrieben. Somit schaltet das Ventil selbst dann aus wenn zwischendruch die Homematic Zentrale oder iobroker cracht. Sollte der Befehl nicht funktioniert haben prüft das Script ein paar Sekunden später ob das Ventil wirklich aus istund schaltet es dann.

                                Fürs hochzählen ist er nicht da. Was passiert denn wenn Du per Homekit das Ventil öffnest? Siehst Du unter den on eine Zeit? Also 00;00.

                                Was machen die Datenpunkte? Was sagt das Log. Im Log wird geschrieben das die Stoppuhr startet?

                                M Offline
                                M Offline
                                Marsel
                                schrieb am zuletzt editiert von
                                #39

                                @cash Okay versteh. Schade aber das geht dann wohl bei mir nicht.

                                Wenn ich das Ventil öffne dann steht 00:00 in Homekit aber der läuft nicht an. Im Log wenn ich das Script starte steht das drin:

                                22:43:34.189 info javascript.0 Stop script script.js.common.Timer-Ventil-1
                                22:43:34.213 info javascript.0 Start javascript script.js.common.Timer-Ventil-1
                                22:43:34.213 info javascript.0 script.js.common.Timer-Ventil-1: registered 3 subscriptions and 0 schedules

                                wenn ich das Ventil dann einschalte ändert sich nichts. Von der Stoppuhr kommt nichts. Wenn ich jetzt den Timer in Homekit auf 5 min stelle dann kommt ein Eintrag im Log.

                                22:45:48.913 info javascript.0 script.js.common.Timer-Ventil-1: [countdown] Timer für Magnetventil wird gestartet für 300 Sekunden.

                                Datenpunkt IST: Zählt die Zeit runter
                                Datenpunkt SOLL: Stehen die 5 min drin vom Countdown
                                Datenpunkt STATUS: steht eine 1 drin
                                Datenpunkt ZIEL_STATUS: steht eine 1 drin

                                1 Antwort Letzte Antwort
                                0
                                • cashC Offline
                                  cashC Offline
                                  cash
                                  Most Active
                                  schrieb am zuletzt editiert von
                                  #40

                                  Was steht denn im Datenpunkt ist und soll Timer wenn Du das Ventil nur öffnest (natürlich per Homekit). Zeig mal Deine Yahka Config.

                                  Ich prüfe Morgen auch nochmal das Script. Ich denke aber das bei Dir irgend etwas anders eingestellt ist wie bei mir.

                                  Beim Countdown funktioniert das automatische ausschalten?

                                  M 1 Antwort Letzte Antwort
                                  0
                                  • cashC cash

                                    Was steht denn im Datenpunkt ist und soll Timer wenn Du das Ventil nur öffnest (natürlich per Homekit). Zeig mal Deine Yahka Config.

                                    Ich prüfe Morgen auch nochmal das Script. Ich denke aber das bei Dir irgend etwas anders eingestellt ist wie bei mir.

                                    Beim Countdown funktioniert das automatische ausschalten?

                                    M Offline
                                    M Offline
                                    Marsel
                                    schrieb am zuletzt editiert von
                                    #41

                                    @cash
                                    Das steht in den Datenpunkte wenn ich keine Aktivzeit im Homekit einstelle.
                                    2.jpg

                                    So sieht die Yahka Config aus. Nicht wundern, ich habe zum Testen ein Relais von Sonoff genommen.
                                    1.jpg

                                    1 Antwort Letzte Antwort
                                    0
                                    • cashC Offline
                                      cashC Offline
                                      cash
                                      Most Active
                                      schrieb am zuletzt editiert von
                                      #42

                                      Ok da liegt das Problem. Active und inuse müssen die angelgten Systemvariablen rein.

                                      Jetzt ist mir auch klar warum er so wenig logt. Denn normalerweise müsste im log ein Eintrag auftauchen sobald Du das Gerät über Homekit schaltest. Egal ob mit oder ohne Timer...

                                      M 2 Antworten Letzte Antwort
                                      0
                                      • cashC cash

                                        Ok da liegt das Problem. Active und inuse müssen die angelgten Systemvariablen rein.

                                        Jetzt ist mir auch klar warum er so wenig logt. Denn normalerweise müsste im log ein Eintrag auftauchen sobald Du das Gerät über Homekit schaltest. Egal ob mit oder ohne Timer...

                                        M Offline
                                        M Offline
                                        Marsel
                                        schrieb am zuletzt editiert von
                                        #43

                                        @cash Das hätte mir auch auffallen können :face_with_rolling_eyes: SORRY!!!

                                        Jetzt habe ich das Problem, wenn ich im Homekit die Aktivezeit einstelle und diese dann abgelaufen ist, das er dann nicht abschaltet. Die Zeit bleibt bei 00:00 stehen.

                                        LOG:
                                        4.jpg

                                        Bei Yahka sieht es jetzt so aus:
                                        5.jpg

                                        Was mir noch aufgefallen ist, wenn er Runterzählt dann Zeigt er es in Homekit sauber an. Wenn er jetzt aber Hochzählt dann sieht es nicht ganz so sauber aus. Der Datenpunkt wenn ich den dabei beobachte der Zählst vernünftig.

                                        IMG_1097.TRIM.MOV

                                        1 Antwort Letzte Antwort
                                        0
                                        • cashC cash

                                          Ok da liegt das Problem. Active und inuse müssen die angelgten Systemvariablen rein.

                                          Jetzt ist mir auch klar warum er so wenig logt. Denn normalerweise müsste im log ein Eintrag auftauchen sobald Du das Gerät über Homekit schaltest. Egal ob mit oder ohne Timer...

                                          M Offline
                                          M Offline
                                          Marsel
                                          schrieb am zuletzt editiert von
                                          #44

                                          @cash So sieht jetzt sein Script bei mir aus.

                                          
                                          /**************************
                                          * Script Gartenbewässerung per Homekit schalten incl Timer
                                          *
                                          * 08.06.19 V1.00    Erste Version
                                          * 09.06.19 V1.01    Stoppuhr eingebaut wenn kein Countdown gestartet wurde
                                          * 10.06.19 V1.02    Logging optimiert und Variablen zum einfachen steuern eingebaut
                                          * 11.06.19 V1.03    Logging präzisiert
                                          *                   kleinere Syntaxfehler behoben
                                          *                   set_on_time hinzugefügt um Funktion zu deaktivieren
                                          * 13.06.19 V1.04    Logging reduziert
                                          *
                                          * der Ziel Status wird durch Homekit geändert
                                          * func_Status_Syncronisierung synronisiert den realen Status 
                                          * vom Magnetventil mit den beiden Pseudo Stati von Homekit
                                          * 0 = Bewässerung ist aus
                                          * 1 = Bewässerung ist eingeschaltet
                                          * wichtig der Ziel Status wird durch Homekit ohne ack:true geändert
                                          **************************/
                                          
                                          const logging = true;
                                          const debugging = false;
                                          
                                          const Stoppuhr_Dauer = 3600;       //Dauer in Sekunden wie lange die Stopuhr läuft max. 3600
                                          const Stoppuhr_Wasser_off = true;  //Schaltet das Magnetventil nach Ablauf der Stoppuhr automatisch aus
                                          const set_on_time = false;           //Wenn ein Countdown gesetzt wird wird die Dauer direkt im Gerät gesetzt
                                          
                                          //Variablen für Pushover
                                          const sendpush = false;     //true = verschickt per Pushover Nachrchten // false = Pushover wird nicht benutzt
                                          const pushover_Instanz0 =  'pushover.0';     // Pushover instance für Pio = 0
                                          const pushover_Instanz1 =  'pushover.1';     // Pushover instance für Pio = 1
                                          const pushover_Instanz2 =  'pushover.2';     // Pushover instance für Pio = 2
                                          const pushover_Instanz3 =  'pushover.3';     // Pushover instance für Pio = -1 oder -2
                                          let _prio = 1;
                                          let _titel = 'Bewässerung';
                                          let _message;
                                          let _device = 'TPhone'; 
                                          //var device = 'All'; 
                                          
                                          const id_Status = 'javascript.0.Timer.Ventil1.STATUS'/*Timer Ventil1 STATUS*/;
                                          const id_Ziel_Status = 'javascript.0.Timer.Ventil1.ZIEL_STATUS'/*Timer Ventil1 ZIEL STATUS*/;
                                          const id_Ist = 'javascript.0.Timer.Ventil1.IST'/*Timer Ventil1 IST*/;
                                          const id_Soll = 'javascript.0.Timer.Ventil1.SOLL'/*Timer Ventil1 SOLL*/;
                                          const id_Magnetventil = 'sonoff.0.Küchenzeile.POWER'/*Küchenzeile POWER*/;
                                          const id_Magnetventil_on_time = 'hm-rpc.0.LEQ0929723.1.ON_TIME'/*Wohnzimmer GSV-Licht:1 ON TIME*/;
                                          //const id_Magnetventil = 'hm-rpc.0.LEQ0929723.1.STATE'/*Wohnzimmer GSV-Licht:1 STATE*/;
                                          //const id_Magnetventil_on_time = 'hm-rpc.0.LEQ0929723.1.ON_TIME'/*Wohnzimmer GSV-Licht:1 ON TIME*/;
                                          
                                          let timer = null;
                                          
                                          function send_pushover (_device, _message, _titel, _prio) {
                                            // Version 4.00 vom 15.01.19
                                            var pushover_Instanz =  'pushover.0';
                                            if (_prio === 0){pushover_Instanz =  'pushover.0'}
                                            else if (_prio == 1){pushover_Instanz =  'pushover.1'}
                                            else if (_prio == 2){pushover_Instanz =  'pushover.2'}
                                            else {pushover_Instanz =  'pushover.3'}
                                                sendTo(pushover_Instanz, { 
                                                device: _device,
                                                message: _message, 
                                                title: _titel, 
                                                priority: _prio,
                                                retry: 60,
                                                expire: 600,
                                                html: 1
                                            }); 
                                          }
                                          
                                          function func_Ziel_Status(){
                                            var Ziel_Status =  getState(id_Ziel_Status).val;
                                            var Status = getState(id_Status).val;
                                            var Soll = Number(getState(id_Soll).val);
                                            var Ist = Soll;
                                            var Ist_real = getState(id_Ist).val;
                                          
                                            
                                            //Magnetventil soll geschlossen werden
                                            if(Ziel_Status === 0){
                                                if(timer){ 
                                                    clearInterval(timer); // Stopp Timer
                                                    timer = null;
                                                    if(debugging){
                                                        log('[DEBUG] '+'[Ziel_Status] ' +'Es läuft ein Timer. Magnetventil soll per Homekit ausgeschaltet werden');
                                                    }
                                                }
                                                if(Ist_real !== 0){
                                                    if(debugging){
                                                        log('[DEBUG] '+'[Ziel_Status] ' +'id_Ist ist nicht null und wird auf 0 gesetzt.');
                                                    }
                                                    setState(id_Ist,0,true);
                                                }
                                                if(Soll !== 0){
                                                    if(debugging){
                                                        log('[DEBUG] '+'[Ziel_Status] ' +'id_Soll ist nicht null und wird auf 0 gesetzt.');
                                                    }
                                                    setState(id_Soll,0,true);
                                                }
                                                if(Status == 1){
                                                    if(logging){
                                                        log('Magnetventil soll per Homekit geschlossen werden.');
                                                    }
                                                    setStateDelayed(id_Magnetventil,false,500);
                                                    setState(id_Status,0);
                                                }
                                                else{
                                                    if(debugging){
                                                        log('[DEBUG] '+'[Ziel_Status] ' +'Magnetventil wurde nicht über Homekit bedient (geschlossen)');
                                                    }
                                                }
                                          
                                            }
                                            //Magnetventil soll geöffnet werden werden
                                            else if(Ziel_Status === 1){
                                                if(Status === 0){
                                                    if(logging){
                                                        log('Magnetventil soll per Homekit geöffnet werden.');
                                                    }
                                                    setStateDelayed(id_Magnetventil,true,1000);
                                                    setState(id_Status,1);
                                          
                                                    if(Soll === 0){
                                                        log('Es wurde kein Countdown gestartet. Starte Stopuhr.');
                                                        if(timer){ 
                                                            clearInterval(timer); // Stopp Timer
                                                            timer = null;
                                                            if(debugging){
                                                                log('[DEBUG] '+'[Ziel_Status] ' +'Stoppuhr soll gestartet werden. Es existiert ein Timer. Der Timer wird abgebrochen.');
                                                            }
                                                        }
                                                        timer = setInterval(function() {
                                                            Ist++;
                                                            //if(debugging){
                                                            //    log('Countdown bei ' +Ist +' Sekunden');
                                                            //}    
                                                            setState(id_Ist,Ist);
                                                            if(Ist >= Stoppuhr_Dauer) {
                                                                if(debugging){
                                                                    log('[DEBUG] '+'[Ziel_Status] ' +'Stoppuhr für Magnetventil abgelaufen.');
                                                                }
                                                                clearInterval(timer);
                                                                timer = null;
                                                                setState(id_Ist, 0, true);
                                                        
                                                        
                                                                if(getState(id_Magnetventil).val){
                                                                    if(logging){
                                                                        log('Stoppuhr abgelaufen. Magnetventil ist offen. Evtl vergessen');
                                                                    }
                                                                    if(Stoppuhr_Wasser_off){
                                                                        if(logging){
                                                                            log('Magnetventil soll automatisch ausschalten.');
                                                                        }
                                                                        setState(id_Magnetventil,false,true);
                                                                    }
                                                                    //Push verschicken
                                                                    if(sendpush){
                                                                        _prio = 2;
                                                                        _message = 'Magnetventil ist immer noch offen. Vergessen?';
                                                                        send_pushover(_device, _message, _titel, _prio);
                                                                    } 
                                                                }
                                                                else{
                                                                    if(debugging){
                                                                        log('[DEBUG] '+'[Ziel_Status] ' +'Stopuhr abgelaufen Magnetventil war bereits ausgeschaltet');
                                                                    }
                                                                }
                                                            }   
                                                        }, 1000);
                                                    }
                                                }
                                                else{
                                                    if(debugging){
                                                        log('[DEBUG] '+'[Ziel_Status] ' +'Magnetventil wurde nicht über Homekit bedient (angeschaltet)');
                                                    }
                                                }
                                          
                                            }
                                            else{
                                                if(debugging){
                                                    log('[DEBUG] '+'[Ziel_Status] ' +'Fehler der Zielstatus ist ungleich 0 oder 1. Das darf eigentlich nicht passieren');
                                                }
                                            }
                                          }
                                          
                                          function func_Status_Syncroniserung(){
                                            var Status = getState(id_Status).val;
                                            var Ziel_Status = getState(id_Ziel_Status).val;
                                            var Magnetventil = getState(id_Magnetventil).val;
                                          
                                            if(Magnetventil){
                                                if(Status === 0){
                                                    setState(id_Status,1);
                                                    if(debugging){
                                                        log('[DEBUG] '+'[Status_Sync] ' +'Status war 0 wird auf 1 gesetzt, da das Magnetventil an ist');
                                                    }
                                                    
                                                }
                                                else{
                                                    if(debugging){
                                                        log('[DEBUG] '+'[Status_Sync] ' +'Status war bereits auf 1. Magnetventil ist an');
                                                    } 
                                                }
                                                if(Ziel_Status === 0){
                                                    setState(id_Ziel_Status,1);
                                                    if(debugging){
                                                        log('[DEBUG] '+'[Status_Sync] ' +'Magnetventil wurde nicht über Homekit eingeschaltet. Ziel_Status wird von 0 auf 1 geändert');
                                                    }
                                                }
                                                else{
                                                    if(debugging){
                                                        log('[DEBUG] '+'[Status_Sync] ' +'Ziel_Status war bereits auf true. Magnetventil wurde eingeschaltet'); 
                                                    }
                                                }
                                            }
                                            else{
                                                if(Status == 1){
                                                    setState(id_Status,0);
                                                    if(debugging){
                                                        log('[DEBUG] '+'[Status_Sync] ' +'Status war 1 und wird auf 0 geändert weil das Magnetventil aus ist');
                                                    }
                                                    
                                                }
                                                else{
                                                    if(debugging){
                                                        log('[DEBUG] '+'[Status_Sync] ' +'Status war bereits auf 0 nachdem das Magnetnvetil ausgeschaltet wurde'); 
                                                    }
                                                }
                                                if(Ziel_Status == 1){
                                                    setState(id_Ziel_Status,0);
                                                    if(debugging){
                                                        log('[DEBUG] '+'[Status_Sync] ' +'Magnetventil wurde nicht über Homekit ausgeschaltet. Ziel_Status wird von 1 auf 0 geändert');
                                                    }
                                                }
                                                else{
                                                    if(debugging){
                                                        log('[DEBUG] '+'[Status_Sync] ' +'Ziel_Status war bereits auf 0. Magnetventil wurde ausgeschaltet.'); 
                                                    }   
                                                }
                                          
                                            }
                                          }
                                          
                                          function func_countdown(){
                                            var Status = getState(id_Status).val;
                                            var Soll = Number(getState(id_Soll).val);
                                            var Ist = Soll;
                                            //ontime 5 Sekunden kürzer
                                            var ontime = Soll - 10;
                                            setState(id_Ist,Ist);
                                          
                                            if(set_on_time){
                                                setState(id_Magnetventil_on_time,ontime);
                                            }
                                            setStateDelayed(id_Ziel_Status,1,500);
                                            
                                            if(logging){
                                                log('[countdown] ' +'Timer für Magnetventil wird gestartet für ' +Soll +' Sekunden.');
                                            }
                                            
                                            if(timer){ 
                                                clearInterval(timer); // Stopp Timer
                                                timer = null;
                                                if(logging){
                                                    log('[countdown] ' +'Es besteht schon ein Timer für das Magnetventil. Ggf prüfen');
                                                }
                                            }
                                          
                                            if(Soll !== 0){
                                                timer = setInterval(function() {
                                                    Ist--;
                                                    //if(debugging){
                                                    //    log('Countdown bei ' +Ist +' Sekunden');
                                                    //}    
                                                    setState(id_Ist,Ist);
                                                    if(Ist <= 0) {
                                                        log('[Status_Sync] ' +'Timer für Magnetventil abgelaufen');
                                                        clearInterval(timer);
                                                        timer = null;
                                                        setState(id_Soll, 0, true);
                                                        setState(id_Ist, 0, true);
                                                        setState(id_Magnetventil_on_time,0);
                                                        if(getState(id_Magnetventil).val){
                                                            if(logging){
                                                                log('[countdown] ' +'Magnetventil war noch nicht ausgeschaltet und wird nun ausgeschaltet');
                                                            }
                                                            setState(id_Magnetventil,false,true);
                                                            //Push verschicken
                                                            if(sendpush){
                                                                if(set_on_time){
                                                                    _message = 'Magnetventil war nicht geschlossen. on_Befehl hat nicht funktioniert';
                                                                }
                                                                else{
                                                                    _message = 'Magnetventil wurde ausgeschaltetn.';    
                                                                }
                                                                send_pushover(_device, _message, _titel, _prio);
                                                            } 
                                                        }
                                                        else{
                                                            if(debugging){
                                                                log('[countdown] ' +'Magnetventil war bereits ausgeschaltet');
                                                            }
                                                        }
                                                    }   
                                                }, 1000);
                                            }
                                            else{
                                                if(debugging){
                                                    log('[countdown] ' +'Soll ist gleich 0');
                                                }
                                            }
                                          } 
                                          
                                          
                                          //beim Start
                                          //func_countdown();
                                          
                                          on({id: id_Soll, valGt: 0 ,change: "ne"}, func_countdown);
                                          on({id: id_Ziel_Status, change: "ne"}, func_Ziel_Status);
                                          on({id: id_Magnetventil, change: "ne"}, func_Status_Syncroniserung);
                                          

                                          1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate
                                          FAQ Cloud / IOT
                                          HowTo: Node.js-Update
                                          HowTo: Backup/Restore
                                          Downloads
                                          BLOG

                                          750

                                          Online

                                          32.5k

                                          Benutzer

                                          81.7k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe