Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. HM-RPC - Werte via Scripte ohne Konflikte setzen/steuern

    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

    HM-RPC - Werte via Scripte ohne Konflikte setzen/steuern

    This topic has been deleted. Only users with topic management privileges can see it.
    • E
      esche @Homoran last edited by

      @homoran Danke für deine Rückmeldung. Ja, hatte mir überlegt das Ganze auch in einem HM-Forum zu posten. Jedoch weiß ich jetzt schon, dass dort auch kommen wird, dass dies ein IOBroker Problem bzw. des entsprechenden Adapters ist. Fakt ist aber, dass das Problem existent ist und ich denke, weder HM seine API, noch der IOBroker Adapter in seinem Vorgehen in der nächsten Zeit umgeschrieben wird. Somit bleibt eigentlich nur das Handling, bzw. eben die entsprechenden Scripte anzupassen.

      Via virtuellen Taster, ist ja schon mal ein guter Lösungsansatz. Wobei das auch bedeuten würde, dass ich einige Logik via HM-Script implementieren müsste. Bisher hatte ich versucht alles Zentral in IOBroker umzusetzen, da auch noch andere Komponenten z. B. ZigBee bei manchen Aktionen mitgesteuert werden sollen. Mal ganz davon abgesehen, ist HM-Script auch nicht meine bevorzugte Wahl beim Scripten 😉

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

        @esche sagte in HM-RPC - Werte via Scripte ohne Konflikte setzen/steuern:

        Wobei das auch bedeuten würde, dass ich einige Logik via HM-Script implementieren müsste.

        nein, per Direktverknüpfung

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

          @esche sagte: Bei Ansatz 3 wird ggf. viel Datenverkehr verursacht, was die Situation evtl. noch verschlimmert

          Bei mir sieht Ansatz 3 so aus, dass ich für jeden netzspannungsbetrieben Aktor einen Datenpunkt mit dem Sollzustand und ein Skript habe, das in zeitlichem Abstand wiederholt, aber nur wenn der Befehl nicht erfolgreich war. Bei Erfolg (ist = soll, ack = true) werden die Timer gestoppt.

          const idAktor = 'hm-rpc.0.XEQ1234567.1.STATE';
          const idSoll = '0_userdata.0.Wohnen.Licht.Deckenlampe';
          
          var soll = getState(idSoll).val;
          var timer1 = null;
          var timer5 = null;
          
          function actor() {
              setState(idAktor, soll);
              timer1 = setTimeout(function() {setState(idAktor, soll);}, 1000);
              timer5 = setTimeout(function() {setState(idAktor, soll);}, 5000);
          }
          
          if(getState(idAktor).val != soll) actor();  // script start
          
          on(idSoll, function(dp) {
              soll = dp.state.val;
              actor();
          });
          
          on({id: idAktor, val: soll, ack: true}, function(dp) {
              clearTimeout(timer1);
              clearTimeout(timer5);
          });
          

          Das funktioniert bisher sehr zuverlässig.

          Das Setzen des Sollwertes eines HKT funktioniert auch zuverlässig, wenn man berücksichtigt, dass der neue Sollwert erst in bis zu 3 Minuten später bei HKT ankommt.

          E 1 Reply Last reply Reply Quote 0
          • E
            esche @Homoran last edited by

            @homoran Geht leider nicht, da einige Logik dabei ist, die ich nicht via Direktverknüpfung abbilden kann.

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

              @esche sagte in HM-RPC - Werte via Scripte ohne Konflikte setzen/steuern:

              @homoran Geht leider nicht, da einige Logik dabei ist, die ich nicht via Direktverknüpfung abbilden kann.

              ok, geht nur dann, wenn man (immer) mehrere gleiche Befehle absetzen will: Rollladen zu, Rollladen auf., Alles Licht aus....

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

                @paul53 Danke für den Vorschlag. Glaube ich verstehe ihn aber noch nicht ganz.
                Du änderst den Wert von "idSoll", dann wird das ON-Event getriggert. Dies führt die Funktion "actor()" aus. diese Funktion setzt den Wert sofort, dann nochmal nach 1 Sek. und nochmal nach 5 Sek.
                Korrekt soweit?

                Hier meine Unklarheiten:

                1. Die beiden Timeout-Functions werden aber immer ausgeführt, egal ob erfolgreich oder nicht (somit hätte man im Erfolgsfall) den Wert mehrfach (unnötig) gesetzt.

                2. Angenommen der Wert für ist und soll ist immer noch unterschiedlich.
                  Dann müssten im Konfliktfall 3 Errors im Log auftauchen oder?
                  Wie werden dann die Timeouts erneut getriggert?

                Meine Bedenken:

                • Wenn ich das mit 30 Geräten mache, hätte ich ziemlich viele Timer laufen, welche jedes Mal JS-Functions Instanzen erzeugen. Gibt es da bisher keine Probleme mit Leaks im Memory?
                • Was ist wenn du Werte nicht via IOBroker sondern direkt über die CCU änderst? Dann stimmt der Wert von "idSoll" auch nicht mehr mit "idAktor" überein
                paul53 1 Reply Last reply Reply Quote 0
                • paul53
                  paul53 @esche last edited by paul53

                  @esche sagte: Die beiden Timeout-Functions werden aber immer ausgeführt, egal ob erfolgreich oder nicht (somit hätte man im Erfolgsfall) den Wert mehrfach (unnötig) gesetzt.

                  Die Timeouts werden im Erfolgsfall gestoppt (unterer Trigger) und somit keine weiteren setState() ausgeführt.

                  @esche sagte in HM-RPC - Werte via Scripte ohne Konflikte setzen/steuern:

                  Wenn ich das mit 30 Geräten mache, hätte ich ziemlich viele Timer laufen

                  Viel ist relativ. 60 gleichzeitig laufende Timer machen sicher keine Probleme.

                  @esche sagte in HM-RPC - Werte via Scripte ohne Konflikte setzen/steuern:

                  Was ist wenn du Werte nicht via IOBroker sondern direkt über die CCU änderst? Dann stimmt der Wert von "idSoll" auch nicht mehr mit "idAktor" überein

                  Das ist bei mir nicht vorgesehen. Ich verwende keine CCU, sondern nur den rfd aus der OCCU.

                  1 Reply Last reply Reply Quote 0
                  • Z
                    zahnheinrich @esche last edited by

                    @esche sagte in HM-RPC - Werte via Scripte ohne Konflikte setzen/steuern:

                    hm-rpc.0 (26742) xmlrpc -> setValue ["MEQXXXXXXXX:1","LEVEL",1] FLOAT error: hm-rpc.0 (26742) Cannot call setValue: XML-RPC fault: Failure

                    Selbige Fehlermeldung erhalte ich auch zeitweise vom HM-IP Adapter.
                    Ich betreibe nach jahrelangen Erfahrungen mit allen HM Systemen seit einigen Wochen ein HM-IP wired System.
                    Wenn es läuft, läuft es gut! Stellen sich jedoch obige Fehlermeldungen ein und ich versuch dann z.B. (in der HM GUI) Kommandos zur Rolladen steuerung abzustzen passiert: NICHTS.
                    Wiederhole ich selbige Kommandos mehrmals, rebootet die CCU.
                    Das Problem der Fehlermeldungen liegt offensichtlich nicht im Bereich des ioBrokers/Adapters, sondern im Bereich der CCU.

                    Nach einem CCU reboot ist der Fehler nach kurzer Zeit weiter vorhanden, mir hilft nur ein Werksreset des HM-Wired Interfaces HmIPW-DRAP.

                    E 1 Reply Last reply Reply Quote 0
                    • E
                      esche @zahnheinrich last edited by

                      @zahnheinrich said in HM-RPC - Werte via Scripte ohne Konflikte setzen/steuern:

                      @esche sagte in HM-RPC - Werte via Scripte ohne Konflikte setzen/steuern:

                      hm-rpc.0 (26742) xmlrpc -> setValue ["MEQXXXXXXXX:1","LEVEL",1] FLOAT error: hm-rpc.0 (26742) Cannot call setValue: XML-RPC fault: Failure

                      Selbige Fehlermeldung erhalte ich auch zeitweise vom HM-IP Adapter.
                      Ich betreibe nach jahrelangen Erfahrungen mit allen HM Systemen seit einigen Wochen ein HM-IP wired System.
                      Wenn es läuft, läuft es gut! Stellen sich jedoch obige Fehlermeldungen ein und ich versuch dann z.B. (in der HM GUI) Kommandos zur Rolladen steuerung abzustzen passiert: NICHTS.
                      Wiederhole ich selbige Kommandos mehrmals, rebootet die CCU.
                      Das Problem der Fehlermeldungen liegt offensichtlich nicht im Bereich des ioBrokers/Adapters, sondern im Bereich der CCU.

                      Nach einem CCU reboot ist der Fehler nach kurzer Zeit weiter vorhanden, mir hilft nur ein Werksreset des HM-Wired Interfaces HmIPW-DRAP.

                      Also meine Wired-Komponenten laufen bei mir erstaunlicherweise problemlos. Auch ein Reset des DRAPs musste ich noch nie vornehmen. Probleme habe ich wirklich nur, wenn ich die Funk-Komponenten via Schnittstelle steuere. Auch die Steuerung direkt via CCU funktioniert eigentlich ohne Probleme.

                      Ich behaupte auch nicht, dass das Grundproblem am IOBroker-Adapter liegt, sondern an der Schnittstelle. Da aber das Verhalten so ist wie es ist, müsste entweder der Adapter selbst mittels Workaround dagegenwirken (was er nicht tut), oder eben via Script etc... und genau diese "Lösung" hoffe ich noch zu finden.

                      1 Reply Last reply Reply Quote 0
                      • E
                        esche last edited by

                        Hallo zusammen,

                        nachdem ich bei dem Problem keine wirkliche Lösung finde, habe ich mir als Workaround ein Script gebaut, welches eine synchrone Verarbeitung der Befehle durchführt.
                        Es lief bei mir in den letzten Tagen ohne Probleme bei der Kommunikation mit der CCU.

                        Vielleicht ist es ja für jemanden auch interessant. Weitere Infos dazu gibts hier.

                        Blog: setState: Synchrone Verarbeitung der ioBroker Homematic RPC Adapter Befehle via BIN-RPC/XML-RPC um Probleme bei der Kommunikation zu vermeiden

                        Gerne auch Feedback ob es bei euch auch funktioniert.

                        Gruß
                        Esche

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        580
                        Online

                        31.8k
                        Users

                        80.0k
                        Topics

                        1.3m
                        Posts

                        4
                        12
                        751
                        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