Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [Frage] Sende Email bei Wert Unterschreitung

    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

    [Frage] Sende Email bei Wert Unterschreitung

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

      Hallo,

      ich hätte gerne, dass der Email Adapter mir eine Mail sendet, wenn die Temperatur von einem Homematic Thermostat <15°C beträgt.

      hm-rpc.0.MEQ1571251.1.TEMPERATURE < 15 –> Sende eine Mail.

      Beste Grüße.

      ToBo

      1 Reply Last reply Reply Quote 0
      • htrecksler
        htrecksler Forum Testing last edited by

        das wird auch funktionieren.

        Allerdings bräuchtest du dafür ein Script welches auf eine Änderung des Datenpunktes reagiert und dann eine Email versendet.

        Und, bei dieser Variante müsste man dann noch bedenken und berücksichtigen, dass die Mail nur einmal versendet wird und nicht jedesmal wenn sich die Temperatur unterhalb des Schwellwertes ändert.

        1 Reply Last reply Reply Quote 0
        • BBTown
          BBTown last edited by

          @TOBO:

          ich hätte gerne, dass der Email Adapter mir eine Mail sendet, wenn die Temperatur von einem Homematic Thermostat <15°C beträgt.

          hm-rpc.0.MEQ1571251.1.TEMPERATURE < 15 –> Sende eine Mail ` das abzubilden ist gar kein Problem

          Aber zeige uns doch zunächst einmal einen Screenshot was Du bisher versucht hast?!

          • blockly?

          • javascript?

          1 Reply Last reply Reply Quote 0
          • T
            tempestas last edited by

            kann bestätigen, das geht!

            1 Reply Last reply Reply Quote 0
            • M
              mlapp last edited by

              @BBTown:

              Aber zeige uns doch zunächst einmal einen Screenshot was Du bisher versucht hast?! `

              Ist ja schon ein wenig gemein 🙂

              1 Reply Last reply Reply Quote 0
              • htrecksler
                htrecksler Forum Testing last edited by

                @mlapp:

                Ist ja schon ein wenig gemein 🙂 `

                Ja, allerdings ist der Eröffnungsthread ja auch etwas, sagen wir mal… dreist. 😄

                1 Reply Last reply Reply Quote 0
                • BBTown
                  BBTown last edited by

                  @mlapp:

                  @BBTown:

                  Aber zeige uns doch zunächst einmal einen Screenshot was Du bisher versucht hast?! Ist ja schon ein wenig gemein :-) wir unterstützen im Forum allesamt immer sehr gerne, dabei geht es ja im Grunde um Hilfe zur Selbsthilfe.

                  Daher ist ja die Frage relevant was denn schon für Ideen oder Basis-Know-How vorhanden sind.

                  Und Du hast zugleich recht … für ein "Kann das mal jemand für mich machen, ich habe keine Lust mich damit zu beschäftigen" wäre mir meine Zeit zu schade,

                  jedoch unterstelle ich das hier gar nicht 😉

                  [Edit] im übrigen könnte ich wenn, nur in Blockly unterstützen 8-)

                  1 Reply Last reply Reply Quote 0
                  • T
                    TOBO last edited by

                    Lieber Herr BBTown,

                    wie Du sehen kannst, bin ich nicht ganz neu hier und habe beide Threads eben schnell mal im vorbeigehen geschrieben.

                    Meine Empfehlung. Behalte Deine Belehrungen für Dich und wenn Du keine Lust / Zeit hast, antworte einfach nicht auf einen Post

                    Bis dahin noch einen schönen Tag.

                    Gruß.

                    ToBo

                    1 Reply Last reply Reply Quote 0
                    • P
                      pix last edited by

                      Hoho,

                      locker bleiben und PN für private Konversation nutzen.

                      Ich schlage diesen Weg zur Lösung (in Javascript, Blockly kann ich nicht) vor:

                      Objekt/Variable Alarm anlegen, welche bei Unterschreitung des Grenzwertes auf true gesetzt wird. Bei Überschreitung auf false. Zur Entprellung (falls Temperatur um den Grenzwert pendelt), sollten die Grenzwerte für Auslösen und Nichtauslösen etwas auseinanderliegen (Delta).

                      Danach wird auf Variable reagiert.

                      const idTemp = "hm-rpc.0.MEQ1571251.1.TEMPERATURE";
                      const grenzwert = 15;
                      const delta = 2;
                      
                      const idTempAlarm = "javascript." + instance + ".Alarm.Temperatur";
                      createState(idTempAlarm, false, false, {
                          name: "Temperaturalarm",
                          desc: "Ist ein Grenzwert unterschritten, wird Wert gesetzt",
                          role: "indicator",
                          type: "boolean"
                      });
                      
                      // Tempüberwacchung, kann man auch in eine Funktion packen, hier aber zur Veranschaulichung in jeweils eine für Überschreitung und Unterschreitung
                      on(
                          {id: idTemp,
                          valLt: grenzwert
                      }, function (data) {
                          setState(idTempAlarm, true);
                      });
                      
                      on(
                          {id: idTemp,
                          valGt: grenzwert+delta // größer als Grenzwert +Delta zB 15 + 2
                      }, function (data) {
                          setState(idTempAlarm, false);
                      });
                      
                      on(idTemp, function (obj) {
                          if (obj.state.val) {
                              // mach was bei Alarm
                      
                          } else log("Alarmzustand Temperaturunterschreitung aufgehoben"); // einmaliger Logeintrag
                      });
                      
                      

                      Achtung: Hier im Forum-Editor geschrieben und nicht getestet. Sollte aber gehen. Jetzt habe ichs doch komplett vorgekaut, naja, das hält fit 😄

                      Gruß

                      Pix

                      1 Reply Last reply Reply Quote 0
                      • T
                        TOBO last edited by

                        Muss mir Dein Script mal ansehen.

                        ich habe dies hier, aber es geht nicht. Wir immer nur die Else Bedingung ausgeführt.

                        //var idTemp = "hm-rpc.0.MEQ1571251.1.TEMPERATURE";
                        var idTemp = "s7.0.DBs.DB1.Dimmer_Ailin"
                        var idFlag = "javascript.0.Flag_Mail_TempWerkstatt";
                        var msg = "Temperatur <= 14 Grad";
                        
                        on(idTemp, function(dp) { 
                        
                           if ((getState(idFlag) === false) && (getState(idTemp).val) < 18)
                        {
                          setState(idFlag, true); 
                          adapter.sendTo('email', msg);
                          log(getState(idTemp).val);
                        
                          } else {
                          setState(idFlag, false);
                          log("else");
                          log(getState(idTemp).val);
                            }
                        });
                        
                        // Script start
                        setState(idFlag, false); 
                        
                        

                        Ich denke mal es liegt hier dran. Aber keine Ahnung warum.

                        if ((getState(idFlag) === false) && (getState(idTemp).val) < 18)
                        
                        1 Reply Last reply Reply Quote 0
                        • P
                          pix last edited by

                          Ich glaube, dein Skript ist nicht ganz komplett:

                          //var idTemp = "hm-rpc.0.MEQ1571251.1.TEMPERATURE";
                          var idTemp = "s7.0.DBs.DB1.Dimmer_Ailin"         // Semikolon am Ende fehlt
                          var idFlag = "javascript.0.Flag_Mail_TempWerkstatt";
                          var msg = "Temperatur <= 14 Grad";
                          
                          on(idTemp, function(dp) { 
                          
                             if ((getState(idFlag) === false) && (getState(idTemp).val) < 18)     // getState(idFlag).val --> .val fehlt, würde es ganz umschreiben in if (!getState(idFlag).val && dp.state.val < 18)
                          {
                            setState(idFlag, true); 
                            adapter.sendTo('email', msg);
                            log(getState(idTemp).val); // idTemp wird doch hier überwacht, daher reicht log(dp.state.val);
                          
                            } else {
                            setState(idFlag, false);
                            log("else");
                            log(getState(idTemp).val); // idTemp wird doch hier überwacht, daher reicht log(dp.state.val);
                              }
                          });
                          
                          // Script start
                          setState(idFlag, false); 
                          
                          

                          Gruß

                          Pix

                          1 Reply Last reply Reply Quote 0
                          • T
                            TOBO last edited by

                            OK, die Abfrage geht nun, aber eine Mail wird nicht gesendet.

                            Es kommt im Log der Fehler "Error in callback: ReferenceError: adapter is not defined"

                            PS: Die Log's lösche ich eh wieder, wenn das Script läuft. Sind nur zum testen.

                            Gruss.

                            ToBo

                            Habs gefunden.

                            sendTo('email.0', msg);
                            
                            1 Reply Last reply Reply Quote 0
                            • T
                              TOBO last edited by

                              Muss leider noch mal nerven.

                              Ich hätte gern in der Mail msg die aktuelle Temperatur.

                              setState(msg, "Temperatur Werkstatt =" & getState(idTemp).val & " °C");
                              
                              

                              Das ist wohl nicht so ganz richtig 🙂

                              1 Reply Last reply Reply Quote 0
                              • P
                                pix last edited by

                                Hallo,

                                msg kannst du nicht mit setState befüllen, da es kein Objekt ist, sondern nur eine lokale Variable.

                                Ersetz mal oben Zeile 4 in

                                var msg = "Temperatur Werkstatt = ";
                                

                                Dazu verwendest dann unten statt

                                setState(msg, "Temperatur Werkstatt =" & getState(idTemp).val & " °C");
                                

                                lieber

                                msg = msg + getState(idTemp).val + "°C";
                                

                                oder

                                msg = msg + dp.state.val + "°C";
                                

                                Strings werden nicht mit dem Ampersand verbunden, sondern mit Plus (+ statt &).

                                Gruß

                                Pix

                                1 Reply Last reply Reply Quote 0
                                • P
                                  pix last edited by

                                  @TOBO:

                                  Ich hätte gern in der Mail msg die aktuelle Temperatur. `

                                  Dir ist klar, dass das Senden der Mail ja nur beim Unterschreiten des Grenzwertes (hier 14°C) passiert. Das heißt, die Temperatur ist ziemlich wahrscheinlich bei 13,xxx Grad, wenn es keinen Temperatursturz gab.

                                  Gruß

                                  Pix

                                  1 Reply Last reply Reply Quote 0
                                  • T
                                    TOBO last edited by

                                    @pix:

                                    Dir ist klar, dass das Senden der Mail ja nur beim Unterschreiten des Grenzwertes (hier 14°C) passiert. Das heißt, die Temperatur ist ziemlich wahrscheinlich bei 13,xxx Grad, wenn es keinen Temperatursturz gab. `

                                    Da hast Du wohl recht und es macht wenig Sinn 😉

                                    Nun weiss ich aber wie man das machen könnte und das kommt in mein schlaues Codeschnipselbuch.

                                    Dankeschön.

                                    1 Reply Last reply Reply Quote 0
                                    • T
                                      TOBO last edited by

                                      Habe das noch mal geändert. In der ersten Version habe ich bei jeder zweiten Temp Änderung eine Mail bekommen,

                                      weil das Flag dann wieder durch die Else Bedingung auf false gesetzt wurde.

                                      Jetzt bekomme ich eine Mail, wenn die Temperatur <=14 °C ist und wenn sie wieder über 14 °C gestiegen ist.

                                      var idTemp = "hm-rpc.0.MEQ1571251.1.TEMPERATURE";
                                      // var idTemp = "s7.0.DBs.DB1.Dimmer_Ailin"; Zum Testen
                                      var idFlag = "javascript.0.Flag_Mail_TempWerkstatt";
                                      var msg ="Temperatur Werkstatt <14°C"
                                      
                                      on(idTemp, function(dp) { 
                                      
                                         if ((getState(idFlag).val === false) && (getState(idTemp).val) <= 14)
                                      {
                                        setState(idFlag, true); 
                                        msg = " Temperatur Werkstatt <= 14 °C"
                                          sendTo('email.0', msg);
                                          }
                                      
                                         if ((getState(idFlag).val === true) && (getState(idTemp).val) > 14)
                                      {
                                        setState(idFlag, false); 
                                         msg = " Temperatur Werkstatt = 14 °C"
                                          sendTo('email.0', msg);
                                      
                                        }      
                                      });
                                      
                                      // Script start
                                      setState(idFlag, false); 
                                      
                                      
                                      1 Reply Last reply Reply Quote 0
                                      • First post
                                        Last post

                                      Support us

                                      ioBroker
                                      Community Adapters
                                      Donate

                                      951
                                      Online

                                      31.9k
                                      Users

                                      80.1k
                                      Topics

                                      1.3m
                                      Posts

                                      6
                                      17
                                      1698
                                      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