Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Script triggert nicht bei Temperaturänderung

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Script triggert nicht bei Temperaturänderung

    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      michihorn last edited by

      Hallöchen, ich habe ein Script erstellt, dass soll bei einer Temperatur von 25 Grad auslösen und eine Markisse hochfahren.
      Das Script soll auch bei Regen den Behang Runter fahren. Abend nach vor eingestellter Zeit soll der Behang ebenfalls Runter fahren.
      Grundsätzlich funktioniert das Script. Schließen klappt. Bei Temperatur hochfahren auch, aber nur wenn ich zuvor im Script-Editor das Script neu gestartet habe. Könnte sich jemand mal das Script bitte anschauen?. Danke

      /*****Steuerung Markisse Pool Kopf*******************************************
      **    April 2020
      **    TAHOMA
      **    0 = OBEN, 100 = UNTEN, Nr 0= OBEN, Nr 1 = UNTEN
      **    
      **    geä:
      ********************************************************************************/
      
      const idRollo = 'tahoma.0.devices.Pool_Kopf.states.core:DeploymentState';
      const idAnwesend = 'javascript.0.Anwesenheitssteuerung.Userlist.JemandDa';
      const idAuto = 'javascript.0.Garten.Zeitsteuerung.PoolK.AutoTemp'; // Automatik
      const idNr = 'javascript.0.Garten.Zeitsteuerung.PoolK.Nr'; // Wert zur Steuerung Widgets
      const idPosK = 'tahoma.0.devices.Pool_Kopf.states.core:DeploymentState';
      const idRStunde = "javascript.0.Garten.Zeitsteuerung.PoolK.R_stunde";
      const idRMinute = "javascript.0.Garten.Zeitsteuerung.PoolK.R_minute";
      const idTemp = 'hm-rpc.2.0010D8A98AD479.1.ACTUAL_TEMPERATURE'; // Temperatur Poolbereich
      const idSW_Temp = 'javascript.0.Garten.Zeitsteuerung.PoolK.SW_Temp'; // Auslösewert'; // Temperatur Poolbereich
      const idAutoR = "javascript.0.Garten.Zeitsteuerung.PoolK.AutoR";
      
      
      const idRegen = 'hm-rpc.0.OEQ0996444.1.STATE'; // Status Regen
      
      var Anwesend = getState(idAnwesend).val;
      var RolloStatus = getState(idRollo).val;
      var R_stunde = getState(idRStunde).val;
      var R_minute = getState(idRMinute).val;
      var AUTO = getState(idAutoR).val;
      var AutoTemp = getState(idAuto).val;
      var IstTemp = getState(idTemp).val;
      var Nr = getState(idNr).val;
      var SW_Temp = getState(idSW_Temp).val;
      var Regen = getState(idRegen).val;
      var schedAuf, schedRunter, text, Pos, Status;
      
      console.log(Regen);
      //Rollo POS/Nr festlegen (Nr.0 oder Nr.1)
      schedule("* * * * *", function () {
              if (getState(idRollo).val == 0) {
              setState('javascript.0.Garten.Zeitsteuerung.PoolK.Nr', 0);
          } else {
              setState('javascript.0.Garten.Zeitsteuerung.PoolK.Nr', 1);
          
          }
      });
      
      function StatusK() {
          Pos = getState(idRollo).val;
          if (Pos == 0) {
              Status = "OBEN"
              setState(idNr, 0);//EINGEFAHREN 
          } else {
              Status = "UNTEN"
              setState(idNr, 1);//AUSGEFAHREN
          };
          return Status;
      };
      schedule("* * * * *", function () {
          console.log("----STATUSINFO ZUR MARKISSE POOL KOPF----");
          console.log("-> Automatik ist: " + AutoTemp);
          console.log("-> Auto Schließen: " + AUTO);
          console.log("-> Auto Schließen um: " + R_stunde + ":" + R_minute);
          console.log("-> Jemand im Haus: " + Anwesend);
          console.log("-> Regnet es? " + Regen);
          console.log("-> Ist Temp: " + IstTemp + " °C");
          console.log("-> Stellwert Temp: " + SW_Temp + " °C");
          console.log("-> Markisse Pool Kopf: " + StatusK());
          console.log("-> Status für Widget: " + Nr);
          console.log("--------------------------------");
      });
      
      function Aktion(pos) {
          if (getState(idAuto).val == true) {
              setState(idRollo, pos);
              if (pos) console.log("*****Markisse PoolK fährt Runter***** ");
              else console.log("*****Markisse PoolK fährt Rauf***** ");
          }
      };
      
      //PoolK RUNTER
      schedule({ hour: R_stunde, minute: R_minute }, RunDailyDown);
      function RunDailyDown() {
          if (AUTO == true) {
              Aktion(100);
              setState('javascript.0.Garten.Zeitsteuerung.PoolK.Nr', 1);
              text = '\u2b07\ufe0f  Pool Kopf ';
              createEventlog("RUNTER", text);
          }
      };
      
      //PoolK RegenRunter
      on({ id: "hm-rpc1.OEQ0996444.1.STATE", change: "any" }, function (obj) {
          if (Regen == 1) {
              Aktion(100);
              setState('javascript.0.Garten.Zeitsteuerung.PoolK.Nr', 1);
              text = '\u2b07\ufe0f  REGEN Pool Kopf ';
              createEventlog("RUNTER", text);
          }
      });
      
      on({ id: "hm-rpc.2.0010D8A98AD479.1.ACTUAL_TEMPERATURE", change: "gt" }, function (obj) {
          var value = obj.state.val;
              var oldValue = obj.oldState.val;
          if (IstTemp >= SW_Temp) {
              Aktion(0);
              setState('javascript.0.Garten.Zeitsteuerung.PoolK.Nr', 0);
              text = '\u2b06\ufe0f  Temp Markisse Pool Kopf ';
              createEventlog("AUF", text)
          }
      });
      

      Gruß Michael

      paul53 2 Replies Last reply Reply Quote 0
      • paul53
        paul53 @michihorn last edited by

        @michihorn
        IstTemp wird nur einmal bei Script-Start gesetzt. Ändere Zeile 100 und lasse Zeilen 101 bis 103 (+108) weg:

        on({ id: idTemp, valGe: SW_Temp, oldValLt: SW_Temp}, function () {
        
        M 1 Reply Last reply Reply Quote 0
        • M
          michihorn @paul53 last edited by michihorn

          @paul53 Vielen Dank hab das so geändert, mal morgen abwarten.
          Kannst du noch mal über den Teil "Regen" schauen, ob das noch zu optimieren wäre?

          EDIT: Hochfahren nach Temperatur hat schon mal heute geklappt. 👍

          Danke
          Michael

          1 Reply Last reply Reply Quote 0
          • paul53
            paul53 @michihorn last edited by paul53

            @michihorn sagte:

            on({ id: "hm-rpc1.OEQ0996444.1.STATE", change: "any" }, function (obj) { if (Regen == 1) {

            Weshalb Trigger auf change: "any" ?
            Die Variable Regen wird nur bei Script-Start gesetzt.

            on(idRegen, function(dp) {
               Regen = dp.state.val;
               if(Regen) {
            

            Auch die Variable AUTO wird nur bei Script-Start gesetzt. Es fehlt ein Trigger, der sie aktualisiert.

            Du verwendest 2 identische Schedules (jede Minute). Fasse die minütlichen Aktionen in einem Schedule zusammen.

            Wo ist die Funktion createEventlog() deklariert ?

            M 2 Replies Last reply Reply Quote 0
            • M
              michihorn @paul53 last edited by

              @paul53 Hallo Paul
              folgendes Script ist in "GLOBAL" deklariert

              createState("javascript.0.SystemEventList");
              createState("javascript.0.SystemEventList.EventList");
              createState("javascript.0.SystemEventList.NextEventid");
              const EventListDestination = "javascript.0.SystemEventList.";
               
              function createEventlog(EventType, EventText) {
                let EventList = getState(EventListDestination + "EventList").val;
                let EventId = getState(EventListDestination + "NextEventId").val;
                let EventDateTime = formatDate(getDateObject((new Date().getTime())), "TT.MM.JJ - hh:mm:ss");
               
                EventId = EventId + 1;
                setState(EventListDestination + "NextEventId", EventId);
                 
                let FormatedEventId = ("00000" + EventId).slice(-5);
                 
                let EventLog = FormatedEventId + " -- " + EventDateTime + " --- " + EventType + " - " + EventText;
                EventList = EventLog + "<br>" + EventList;
                 
                setState(EventListDestination + "EventList", EventList);
              };
              

              Michael

              1 Reply Last reply Reply Quote 0
              • M
                michihorn @paul53 last edited by michihorn

                @paul53 Das Ereignis Regen sollte dynamisch sein, daher das "any".
                Bei jeder Zustandsänderung des Sensor DP sollte getriggert werden und dann festgestellt werden ob 1 oder 0.

                1 Reply Last reply Reply Quote 0
                • First post
                  Last post

                Support us

                ioBroker
                Community Adapters
                Donate

                917
                Online

                31.8k
                Users

                80.0k
                Topics

                1.3m
                Posts

                javascript
                2
                6
                295
                Loading More Posts
                • Oldest to Newest
                • Newest to Oldest
                • Most Votes
                Reply
                • Reply as topic
                Log in to reply
                Community
                Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                The ioBroker Community 2014-2023
                logo