Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [gelöst] ON wenn Stromwert unterschritten wird - Bessere Möglichkeit vorhanden?

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [gelöst] ON wenn Stromwert unterschritten wird - Bessere Möglichkeit vorhanden?

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

      Hi,

      ich möchte gerne wie auf der CCU beim Unterschreiten eines bestimmten Leistungswertes eine Aktion auslösen (Steckdose aus, Sprachansage usw.).

      Um aktiv zu werden, wenn der Wert unter 5 Watt fällt, müsste doch von der Logik her ein…:

      on({id: "hm-rpc.0.NEQ0123451.2.POWER", change: 'lt'}, function (data) {
      	if (data.val > 5) {  						/* wenn unter 5 Watt  */
      		...meine Anweisungen...
      	} 
      }
      

      funktionieren, oder? Geht das auch besser, indem ich den Eventtrigger gleich entsprechend setze? Also beim change: oder irgendwo da?

      So wird ja andauernd unnötigerweise bei jedem Leistungswechsel nach unten (change: 'lt') getriggert. Das halte ich für unsauber und Ressourcenverschwendung. Noch schlimmer wäre ja ein

      on('hm-rpc.0.NEQ0123451.2.POWER', function() {...usw.
      

      Danke im Voraus,

      Fitti

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

        Du möchtest nur triggern, wenn der Wert von 5 erstmalig unterschritten wird ? Dann funktioniert es so:

        on({id: "hm-rpc.0.NEQ0123451.2.POWER", valLt: 5, oldValGe: 5}, function() {
              ...meine Anweisungen...
        });
        
        1 Reply Last reply Reply Quote 0
        • F
          Fitti last edited by

          Exakt. Funktioniert einwandfrei. Jetzt verstehe ich endlich einige Parameter… 😄

          Danke!

          1 Reply Last reply Reply Quote 0
          • F
            Fitti last edited by

            @paul53:

            Du möchtest nur triggern, wenn der Wert von 5 erstmalig unterschritten wird ? Dann funktioniert es so:

            on({id: "hm-rpc.0.NEQ0123451.2.POWER", valLt: 5, oldValGe: 5}, function() {
                  ...meine Anweisungen...
            });
            ```` `  
            

            Die sparsamen Waschmachine macht doch einige Schwierigkeiten, da am Anfang zu sehr ein hoch und runter (in der Leistung) ist.

            Wie kann ich denn das Event ermöglichen, dass erst wenn der Wert über 100W - und dann irgendwann unter 5 Watt fällt, der on aktiviert wird? Geht das überhaupt?

            Hatte es so ausprobiert, aber da kommt gar nichts mehr.

            on({id: "hm-rpc.0.NEQ0123451.2.POWER", valLt: 5, oldValGe: 100}, function() {
                  ...meine Anweisungen...
            });
            

            Oder muss ich zwei ons verwenden:

            Wenn irgendwann valGe: 100 , dann setzte Statusvariable.

            Wenn irgendwann valLt: 5, dann - wenn Statusvariable gesetzt ist, mache mein Skript und lösche zum Schluss Statusvariable.

            Danke im Voraus,

            Fitti

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

              @Fitti:

              Wie kann ich denn das Event ermöglichen, dass erst wenn der Wert über 100W - und dann irgendwann unter 5 Watt fällt, der on aktiviert wird? `
              Genau so:
              @Fitti:

              Wenn irgendwann valGe: 100 , dann setzte Statusvariable.

              Wenn irgendwann valLt: 5, dann - wenn Statusvariable gesetzt ist, mache mein Skript und lösche zum Schluss Statusvariable. `

              1 Reply Last reply Reply Quote 0
              • Homoran
                Homoran Global Moderator Administrators last edited by

                Hallo fitti,

                wenn es eine Strommess-Steckdose oder ein Strommess-Hutschieneaktor von HomeMatic ist, dann gibt es dort den so genannten Entscheidungswert.

                Da kannst du in der Konfiguration des Gerätes einstellen, wie Hoch die Leistung zuerst sein muss (Oberer Grenzwert), damit erst beim anschließenden Abfallen unter den unteren Grenzwert dieser Entscheidungswert wieder zurückgesetzt wird.

                Habe es allerdings mit neuen Steckdosen jetzt gerade selber 4 Wochen gebraucht es bei ioBroker ans Laufen zu bekommen, da dieser Entscheidungswert im Gerät erst dann sichtbar wird, wenn auf der CCU damit ein Programm angelegt ist.

                <url url="http://homematic-forum.de/forum/viewtopic.php?f=27&t=32832#p309506">[http://homematic-forum.de/forum/viewtopic.php?f=27&t=32832#p309506 " target="_blank">](</s><LINK_TEXT text=)[<link_text text="http://homematic-forum.de/forum/viewtop … 2#p309506
                ">http://homematic-forum.de/forum/viewtopic.php?f=27&t=32832#p309506</link_text>](</s><LINK_TEXT text=)</url> Daraufhin habe ich ein Dummy-Programm erzeugt und schon klappt es.

                @Fitti:

                Die sparsamen Waschmachine macht doch einige Schwierigkeiten, `
                Yepp!

                Als unterer Grenzwert muss bei mir etwa 3W eingegeben werden.

                Gruß

                Rainer

                1 Reply Last reply Reply Quote 0
                • F
                  Fitti last edited by

                  Rainer - du siehst mich wieder Baff erstaunt.

                  Entscheidungswert - wattn ditte? Habe mir mal alle vier Seiten durchglesen (naja , manches auch überflogen).

                  Dann Kanalaktion 1,1,80,starwars…. :shock:

                  Was Du so alles machst. Dachte immer ich mache einiges - aber irgendwie machst Du deutlich mehr. Schön für mch, so kenne ich jemanden, den ich fragen kann. :mrgreen:

                  Verstehe trotzdem noch ncht, wie Du es in der CCU hinbekommen hast. Läuft da ein Makro? Das macht doch nicht alles der Aktor, oder?

                  Magst Du vielleicht noch ein Screendump vom Trockner und den CCU-Settings mir posten?

                  Danke im Voraus,

                  So long,

                  Fiiti

                  1 Reply Last reply Reply Quote 0
                  • Homoran
                    Homoran Global Moderator Administrators last edited by

                    @Fitti:

                    Magst Du vielleicht noch ein Screendump vom Trockner und den CCU-Settings mir posten? `
                    Für dich tu ich doch fast ales:
                    144_hm_entscheidungswert_trockner.jpg

                    @Fitti:

                    Das macht doch nicht alles der Aktor, oder? `
                    Im Prinzip schon, nur er zeigt es dir nicht. (Funktioniert ebenso unsichtbar sogar mit Direktverknüpfungen)

                    @Fitti:

                    wie Du es in der CCU hinbekommen hast. `
                    Um jetzt diesen Wert (Sndars:200=scharfgeschaltet; 0= jetzt ist die Maschine fertig) aber in ioBroker sehen zu können, MUSS dieser Wert in einem Programm auf der CCU eingebunden zu sein. Klingt unglaublich, ist aber so!

                    Dazu habe ich dann das starwars 😉 Programm geschrieben mit allen möglichen Entscheidungswerten im Wenn und einer weiteren Bedingung, die nicht wahr werden soll (Außentemperatur >80°C) und gut ist.

                    Jetzt ist der Entscheidungswert auch in ioBroker sichtbar.

                    Der Datenpunkt existierte immer nur mit 0/NULL un änderte sich nicht. Das wir er aber ab sofort!

                    Frach mich nur!

                    Gruß

                    Rainer

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

                      Moin zusammen,

                      ich bin nicht der Javascript Typ, im Prinzip kopiere ich mir alles so zusammen, was ich so brauche in der Hoffnung das ich es auch mal verstehe 🙂

                      Mit der Entscheidungsschwelle ist nicht ganz so die Lösung die ich suche.

                      Ich möchte gerne meinen Trockner fertigmelden, aber dafür müsste ich einen Timer haben, der 3 min abfragt, ob er unterhalb der Grenze liegt, da er am Ende ein paar mal auflockert und somit direkt fertig meldet.

                      Der Code sieht ja wie folgt aus.

                      on({id: "hm-rpc.0.NEQ1234567.2.POWER", valLt: 5, oldValGe: 5}, function() {
                      

                      gibt es für die Funktion eine Einschaltverzögerung? Kenne leider nur S7 😞

                      Gruß und Danke

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

                        @ple:

                        …gibt es für die Funktion eine Einschaltverzögerung? `
                        Ja, setTimeout()

                        var timer = null;
                        
                        function meineFunktion() {
                              ...meine Anweisungen...
                        }
                        
                        on({id: "hm-rpc.0.NEQ1234567.2.POWER", valLt: 5, oldValGe: 5}, function() {
                            timer = setTimeout(meineFunktion, 180000);  // 3 Minuten in ms
                        });
                        
                        on({id: "hm-rpc.0.NEQ1234567.2.POWER", valGe: 5, oldValLt: 5}, function() {
                            if(timer) clearTimeout(timer);
                        });
                        
                        
                        1 Reply Last reply Reply Quote 0
                        • P
                          ple last edited by

                          Vielen Dank für deine Unterstützung.

                          Kann ich den Code so jetzt stehen lassen?

                          var idSayIt = "sayit.0.tts.text";
                          var timer = null;
                          
                          // Einschaltverzögerung   
                          on({id: "hm-rpc.0.NEQ1234567.2.POWER", valLt: 1.1, oldValGe: 5}, function() {
                              timer = setTimeout(meldung, 180000);  // 3 Minuten in ms
                          });
                          // Timer löschen
                          on({id: "hm-rpc.0.NEQ1234567.2.POWER", valGe: 5, oldValLt: 1.1}, function() {
                              if(timer) clearTimeout(timer);
                          });
                          
                          // Anweisung
                          function meldung() {
                              log("Trockner fertig");     
                              //setState(idSayIt, "Waschmaschine ist fertig");
                              sendTo("pushover", "send", {
                               message: 'Trockner fertig',
                               sound: "",
                               title: '',
                               priority: 1
                              }); 
                          setState(idSayIt, "Waschmaschine ist fertig");
                          }
                          
                          

                          Wenn ja hätte ich da noch eine Frage.

                          "if(timer) clearTimeout(timer);"

                          Womit ist das if verknüpft? Ich verstehe bisher nur, dass der Wert unter 1.1 und dann über 5 geht die Funktion ausgelöst aber was macht das if? würde da auch nicht einfach clearTimeout(timer) reichen?

                          var timer = null;

                          Wird dort die Variabel timer einfach mit "null" beschrieben? Würde auch ein "0" gehen? oder muss es ein String sein.

                          Besten dank für die super Unterstützung!!!

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

                            @ple:

                            Kann ich den Code so jetzt stehen lassen? `
                            Probier es aus !
                            @ple:

                            var timer = null;

                            Wird dort die Variabel timer einfach mit "null" beschrieben? Würde auch ein "0" gehen? oder muss es ein String sein. `
                            Timer-Variablen sind Objekte.
                            @ple:

                            …was macht das if? würde da auch nicht einfach clearTimeout(timer) reichen? `
                            Es würde vielleicht auch ohne if(timer) funktionieren. Da nach dem Skriptstart und erstem Waschmaschinenstart das on() für Timer löschen ausgeführt wird, ist es zumindest "sauberer" das clearTimeout(timer) dann nicht auszuführen, da die Timervariable noch nicht die richtige Objektstruktur hat (keine Ahnung, wie die aussieht :? ).

                            1 Reply Last reply Reply Quote 0
                            • AlCalzone
                              AlCalzone Developer last edited by

                              @paul53:

                              […]da die Timervariable noch nicht die richtige Objektstruktur hat (keine Ahnung, wie die aussieht :? ). `

                              Soweit ich weiß, sind Timervariablen einfach Zahlen. Die Runtime (node.js/Browser) hat dann irgendwo eine Tabelle der Timer, die zu den Zahlen gehören.

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

                                493_typ_timer.jpg

                                1 Reply Last reply Reply Quote 0
                                • AlCalzone
                                  AlCalzone Developer last edited by

                                  Hmm, dann scheinen Browser das anders zu handhaben als NodeJS
                                  1097_unbenannt.png

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

                                    Naja, ich versteh da gerade nicht viel von, aber es funktioniert 🙂

                                    Danke

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

                                    Support us

                                    ioBroker
                                    Community Adapters
                                    Donate

                                    717
                                    Online

                                    31.7k
                                    Users

                                    79.8k
                                    Topics

                                    1.3m
                                    Posts

                                    5
                                    16
                                    1911
                                    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