Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. KNX Button / Action und Value über JavaScript Handler

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.5k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.1k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    2.7k

KNX Button / Action und Value über JavaScript Handler

Geplant Angeheftet Gesperrt Verschoben JavaScript
12 Beiträge 3 Kommentatoren 916 Aufrufe 2 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • P peak3d

    Hallo Zusammen,

    vorerst: Ich bin js UND iobroker Neuling, denke aber recht flott reinzukommen, wenn mir die Grundlagen klar sind.

    Mein Thema ist hier bereits bekannt
    KNX hat getrennt Aktion und Status, was über die bestehenden vis Elemente nicht abbildbar ist.

    Beispiel: Bulb On/Off an KNX Schalter.

    Plan ist nun, einen js handler (mit subscribe) zu schreiben, der Status behandelt und dem vis objekt, welches schaltet, den aktuellen status mitzuteilen.

    Was ich nun versucht habe ist ( nach Durchforsten der Threads hier zu diesem Thema):

    subscribe({id: "knx.0.Neue_Hauptgruppe.Neue_Mittelgruppe.Haus_Anbau_EG_Licht_Links_Status" , val: true}, function (obj) {
                console.log("XXX","status changed");
        });
    

    in meinen vis Editor / Reiter Scripte einzufügen.

    In der runtime Umgebung sagt mir die js Console jedoch:

    Uncaught ReferenceError: subscribe is not defined
    

    Kann mir hier jemand auf die Sprünge helfen? Danke!

    Edit:

    Einen pragmatischen Ansatz sehe ich:

    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 dann kann ich mit dem vis.registerOnChange arbeiten, um auf die Statusmeldungen zu reagieren.
    Macht das Sinn?

    thewhoboxT Offline
    thewhoboxT Offline
    thewhobox
    schrieb am zuletzt editiert von thewhobox
    #2

    @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?

    Meine Adapter: emby | discovery
    Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

    1 Antwort Letzte Antwort
    0
    • P Offline
      P Offline
      peak3d
      schrieb am zuletzt editiert von
      #3

      @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.

      thewhoboxT 1 Antwort Letzte Antwort
      0
      • P peak3d

        @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.

        thewhoboxT Offline
        thewhoboxT Offline
        thewhobox
        schrieb am zuletzt editiert von
        #4

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

        Meine Adapter: emby | discovery
        Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

        P 1 Antwort Letzte Antwort
        0
        • thewhoboxT thewhobox

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

          P Offline
          P Offline
          peak3d
          schrieb am zuletzt editiert von peak3d
          #5

          @thewhobox Im vis editor, Skripte:

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

          Edit: Übrigens, dieser registerOnChange Ansatz funktioniert soweit.

          1 Antwort Letzte Antwort
          0
          • P peak3d

            Hallo Zusammen,

            vorerst: Ich bin js UND iobroker Neuling, denke aber recht flott reinzukommen, wenn mir die Grundlagen klar sind.

            Mein Thema ist hier bereits bekannt
            KNX hat getrennt Aktion und Status, was über die bestehenden vis Elemente nicht abbildbar ist.

            Beispiel: Bulb On/Off an KNX Schalter.

            Plan ist nun, einen js handler (mit subscribe) zu schreiben, der Status behandelt und dem vis objekt, welches schaltet, den aktuellen status mitzuteilen.

            Was ich nun versucht habe ist ( nach Durchforsten der Threads hier zu diesem Thema):

            subscribe({id: "knx.0.Neue_Hauptgruppe.Neue_Mittelgruppe.Haus_Anbau_EG_Licht_Links_Status" , val: true}, function (obj) {
                        console.log("XXX","status changed");
                });
            

            in meinen vis Editor / Reiter Scripte einzufügen.

            In der runtime Umgebung sagt mir die js Console jedoch:

            Uncaught ReferenceError: subscribe is not defined
            

            Kann mir hier jemand auf die Sprünge helfen? Danke!

            Edit:

            Einen pragmatischen Ansatz sehe ich:

            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 dann kann ich mit dem vis.registerOnChange arbeiten, um auf die Statusmeldungen zu reagieren.
            Macht das Sinn?

            paul53P Offline
            paul53P Offline
            paul53
            schrieb am zuletzt editiert von paul53
            #6

            @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.

            Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
            Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

            P 1 Antwort Letzte Antwort
            0
            • paul53P 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 Offline
              P Offline
              peak3d
              schrieb am zuletzt editiert von
              #7

              @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.

              paul53P 1 Antwort Letzte Antwort
              0
              • P peak3d

                @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.

                paul53P Offline
                paul53P Offline
                paul53
                schrieb am zuletzt editiert von
                #8

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

                Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                P 1 Antwort Letzte Antwort
                0
                • paul53P paul53

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

                  P Offline
                  P Offline
                  peak3d
                  schrieb am zuletzt editiert von
                  #9

                  @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?

                  thewhoboxT 1 Antwort Letzte Antwort
                  0
                  • P peak3d

                    @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?

                    thewhoboxT Offline
                    thewhoboxT Offline
                    thewhobox
                    schrieb am zuletzt editiert von thewhobox
                    #10

                    @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.

                    Meine Adapter: emby | discovery
                    Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                    P 1 Antwort Letzte Antwort
                    0
                    • thewhoboxT 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 Offline
                      P Offline
                      peak3d
                      schrieb am zuletzt editiert von
                      #11

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

                      1 Antwort Letzte Antwort
                      0
                      • P Offline
                        P Offline
                        peak3d
                        schrieb am zuletzt editiert von
                        #12

                        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 Antwort Letzte Antwort
                        0
                        Antworten
                        • In einem neuen Thema antworten
                        Anmelden zum Antworten
                        • Älteste zuerst
                        • Neuste zuerst
                        • Meiste Stimmen


                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        427

                        Online

                        32.4k

                        Benutzer

                        81.5k

                        Themen

                        1.3m

                        Beiträge
                        Community
                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                        ioBroker Community 2014-2025
                        logo
                        • Anmelden

                        • Du hast noch kein Konto? Registrieren

                        • Anmelden oder registrieren, um zu suchen
                        • Erster Beitrag
                          Letzter Beitrag
                        0
                        • Home
                        • Aktuell
                        • Tags
                        • Ungelesen 0
                        • Kategorien
                        • Unreplied
                        • Beliebt
                        • GitHub
                        • Docu
                        • Hilfe