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

  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.4k

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

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

KNX Button / Action und Value über JavaScript Handler

Geplant Angeheftet Gesperrt Verschoben JavaScript
12 Beiträge 3 Kommentatoren 915 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 Offline
    P Offline
    peak3d
    schrieb am zuletzt editiert von peak3d
    #1

    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 paul53P 2 Antworten 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?

      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

                          493

                          Online

                          32.4k

                          Benutzer

                          81.4k

                          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