Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. KNX Button / Action und Value über JavaScript Handler

    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

    KNX Button / Action und Value über JavaScript Handler

    This topic has been deleted. Only users with topic management privileges can see it.
    • thewhobox
      thewhobox @peak3d last edited by thewhobox

      @peak3d Mach mal statt dem subscribe ein on "on({id: "knx.0.Ne[...]"

      Außerdem reagiert dein Trigger nur, wenn der neue Wert true ist. Ist das so gewollt?

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

        @thewhobox danke fürs schnelle feedback!

        • on(...) hatte ich auch versucht, gleiches Ergebnis: Uncaught ReferenceError: on is not defined
        • Danke für den Hinweis mit Trigger / true, das hätte ich dann als nächste Nuss zu knacken gehabt, wenn subscribe / on wenigstens schon mal läuft.

        Hinweis. Ich habe den JavaScript Adapter nicht installiert, da ich der Auffassung bin, dass ein Trigger auch ohne dieses Engine registriert werden können sollte (ist das noch deutsch ???), die vis macht das ja schon erfolgreich in vis.js.

        thewhobox 1 Reply Last reply Reply Quote 0
        • thewhobox
          thewhobox @peak3d last edited by

          @peak3d Ohne Javascript Adapter? Wo machst dann deine skripte hin?
          ich würde die zwei Sachen getrennt lassen.

          P 1 Reply Last reply Reply Quote 0
          • P
            peak3d @thewhobox last edited by peak3d

            @thewhobox Im vis editor, Skripte:

            be18a0c6-463f-49cd-9400-4e16f305fc67-image.png

            Edit: Übrigens, dieser registerOnChange Ansatz funktioniert soweit.

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

              @peak3d sagte:

              KNX hat getrennt Aktion und Status, was über die bestehenden vis Elemente nicht abbildbar ist.

              Deshalb benötigt man einen weiteren Datenpunkt für Vis, der duch ein Javascript bedient und ausgewertet werden muss. Ohne Javascript-Adapter geht es (wahrscheinlich) nicht.

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

                @paul53

                Dies ist meine derzeitige (hacky) Implementierung in vis::Scripte, ohne den JS Adapter

                function status_callback(arg, id, val, ack)
                {
                    console.log('Status', 'Id:' + id+', Val:'+val);
                }
                vis.registerOnChange(status_callback);
                
                vis.subscribing.IDs.push("knx.0.Neue_Hauptgruppe.Neue_Mittelgruppe.Haus_Anbau_EG_Licht_Links_Status");
                vis.subscribing.byViews.Bedienen.push("knx.0.Neue_Hauptgruppe.Neue_Mittelgruppe.Haus_Anbau_EG_Licht_Links_Status")
                ;
                

                Und für den DP knx.0.Neue_Hauptgruppe.Neue_Mittelgruppe.Haus_Anbau_EG_Licht_Links_Status (aber auch _Schalten) wird fleissig die callback aufgerufen.

                Aber: damit ich das verstehe mit dem js adapter: Wird der JS code, den ich in der Adapter-Instanz anlege, auf dem Server ausgeführt? Mein Beispiel oben wird ja komplett client-seitig ausgeführt.

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

                  @peak3d Mit Javascript unter Vis kenne ich mich nicht aus.

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

                    @paul53 Danke trotzdem für die Antworten, mal sehen, vlt. kommt ja noch was....

                    Den workflow über die adapter - js - engine verstehe ich leider nicht wirklich, also wie der code dann in die vis kommt.
                    Muss man in der vis irgendeine .js datei includen, die vorher in der Adapter Instanz generiert wurde?

                    thewhobox 1 Reply Last reply Reply Quote 0
                    • thewhobox
                      thewhobox @peak3d last edited by thewhobox

                      @peak3d Der Javascript Adapter führt den Code unabhängig von der Vis aus.
                      Deswegen brauchst du dann noch einen zusätzlichen Datenpunkt, den du dann in der Vis anzeigen und steuern kannst.
                      Die Javascripte im JS-Adatper werden dann auf dem Server ausgeführt.

                      P 1 Reply Last reply Reply Quote 0
                      • P
                        peak3d @thewhobox last edited by

                        @thewhobox prima, danke, dann ist das so etwa wie ich mir das vorgestellt habe.
                        Ich denke, damit kann ich erstmal gut weiterforschen

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

                          Habe das nun soweit hinbekommen, schön ist anders, aber was ich gesehen habe bietet mir iobroker kein wirklich brauchbares Verfahren, um das KNX Problem zu lösen:

                          vis.setValueOld = vis.setValue;
                          
                          var StatusActionMap=
                          {
                          'knx.0.Neue_Hauptgruppe.Neue_Mittelgruppe.Haus_Anbau_EG_Licht_Links_Status':'knx.0.Neue_Hauptgruppe.Neue_Mittelgruppe.Haus_Anbau_EG_Licht_Links_Schalten'
                          }
                          
                          function mySetValue(id, val)
                          {
                              if (StatusActionMap[id])
                              {
                                  console.log('Map: ' + id + ' -> ' + StatusActionMap[id]);
                                  id = StatusActionMap[id];
                              }
                              vis.setValueOld(id, val);
                          }
                          
                          vis.setValue = mySetValue;
                          

                          Im iobroker.vis Editor / Skripte eingefügt überläd es die setValue vom vis Objekt.

                          Im Bulb On/Off have ich die ObjektId vom Status angegeben, wodurch der Schalter immer den korrekten KNX Status anzeigt, auch wenn der Zustand am Aktor über Timer geändert wird.

                          Sobald auf die Birne geklickt wird, wird die überladene mySetValue funktion aufgerufen, welche dann die originale setValue funktion vom vis Objekt mit dem DP für schalten aufruft.

                          Vielleicht hilft das ja dem Einen oder Anderen, ich kann das nun auch gut für meine Dimmer verwenden.

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

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          490
                          Online

                          31.9k
                          Users

                          80.1k
                          Topics

                          1.3m
                          Posts

                          3
                          12
                          736
                          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