Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Hardware
    4. Befehle von Neeo nach ioBroker senden

    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

    Befehle von Neeo nach ioBroker senden

    This topic has been deleted. Only users with topic management privileges can see it.
    • K
      Kusi @mickym last edited by Kusi

      @mickym sagte in Befehle von Neeo nach ioBroker senden:

      mit CTRL+Z beenden

      Ich kann dann zwar wieder etwas eingeben in Putty, aber der Service/Dienst wird nicht beendet. Muss dann stets das Raspberry neu starten.

      1 Reply Last reply Reply Quote 0
      • UncleSam
        UncleSam Developer @Kusi last edited by

        @Kusi sagte in Befehle von Neeo nach ioBroker senden:

        @Kusi Folgendes ist der Code, um einen Switch einzufügen:

        actualDriverObject.addSwitch({ name: 'Schalter', label: 'Schalter' },{setter: (deviceId, newValue) => switchState = newValue,getter: (deviceId) => switchState,})
        

        Hättest du mir eine Idee, wie ich die Weiterleitung zu ioBroker konfigurieren muss? Ich möchte ja gerne 2 States, einmal für Schalter links und einmal für Schalter rechts.

          if (buttonName == "Switch") {
            http("http://192.168.1.15:8087/set/javascript.0.Eigene_Datenpunkte.Neeo-Button?value=S1");
          }
        

        Die Funktion addSwitch() speichert ja den Zustand des Schalters in switchState und gibt sie im "getter" auch wieder zurück. Etwas verwirren tut mich, dass du buttonName == "Switch" verwendest, oben den Schalter aber name: 'Schalter' nennst.

        Mit dem Namen sollten die Buttons unterscheidbar sein:

          if (buttonName == "ButtonG") {
            http("http://192.168.1.15:8087/set/javascript.0.Eigene_Datenpunkte.Neeo-Button?value=S1");
          }
          else if (buttonName == "ButtonH") {
            http("http://192.168.1.15:8087/set/javascript.0.Eigene_Datenpunkte.Neeo-Button?value=S2");
          }
        

        Allerdings würde ich für jeden Knopf einen eigenen State verwenden - das macht das Handling etwas einfacher. Im Script (Javascript Adapter) musst du dann einfach change: 'any' verwenden, damit du den Knopfdruck jedes Mal mitbekommst.

        K 1 Reply Last reply Reply Quote 0
        • K
          Kusi @UncleSam last edited by

          @UncleSam sagte in Befehle von Neeo nach ioBroker senden:

          Etwas verwirren tut mich, dass du buttonName == "Switch" verwendest, oben den Schalter aber name: 'Schalter' nennst.

          Das ist mir gar nicht aufgefallen. Danke für den Hinweis.

          K 1 Reply Last reply Reply Quote 0
          • K
            Kusi @Kusi last edited by

            @Kusi sagte in Befehle von Neeo nach ioBroker senden:

            @UncleSam sagte in Befehle von Neeo nach ioBroker senden:

            Etwas verwirren tut mich, dass du buttonName == "Switch" verwendest, oben den Schalter aber name: 'Schalter' nennst.

            Das ist mir gar nicht aufgefallen. Danke für den Hinweis.

            Du meinst damit Datenpunkt?

            UncleSam 1 Reply Last reply Reply Quote 0
            • UncleSam
              UncleSam Developer @Kusi last edited by

              @Kusi sagte in Befehle von Neeo nach ioBroker senden:

              Du meinst damit Datenpunkt?

              Sorry, ich bin auf Englisch unterwegs: genau, state = Datenpunkt.

              K 1 Reply Last reply Reply Quote 0
              • K
                Kusi @UncleSam last edited by Kusi

                @UncleSam Was ich allerdings noch nicht verstehe, wie ich einem Schalter (aus-ein) die Zuweisung gebe, dass er auf "ein" den Befehl sendet.

                actualDriverObject.addSwitch({ name: 'Schalter', label: 'Schalter' },{setter: (deviceId, newValue) => switchState = newValue,getter: (deviceId) => switchState,})
                

                Die Konfiguration ist mir ein Rätsel und weis ich nicht, wie dies gemacht werden muss.
                Und gerne hätte ich dann den Befehl in beide Richtungen (aus und ein), damit ich 2 Befehle absetzen kann.

                Ich weis nicht, welche Wörter ich durch was ersetzen muss.

                UncleSam 1 Reply Last reply Reply Quote 0
                • UncleSam
                  UncleSam Developer @Kusi last edited by

                  @Kusi sagte in Befehle von Neeo nach ioBroker senden:

                  Und gerne hätte ich dann den Befehl in beide Richtungen (aus und ein), damit ich 2 Befehle absetzen kann.

                  Selber habe ich das noch nie getestet, aber den ganzen Code hast du ja bereits oben:

                  actualDriverObject.addSwitch({ name: 'Schalter', label: 'Schalter' },{setter: (deviceId, newValue) => switchState = newValue,getter: (deviceId) => switchState,})
                  

                  setter und getter sind anonyme Javascript Funktionen. Anstatt nur die Variable zu speichern kannst du darin Code ausführen:

                  actualDriverObject.addSwitch({ name: 'Schalter', label: 'Schalter' },{
                    setter: (deviceId, newValue) => {
                      switchState = newValue;
                      if (newValue == 'XXXX') {
                        http("http://192.168.1.15:8087/set/javascript.0.Eigene_Datenpunkte.Neeo-Switch?value=XXXX"
                      } else {
                        http("http://192.168.1.15:8087/set/javascript.0.Eigene_Datenpunkte.Neeo-Switch?value=YYYY"
                      }
                    },
                    getter: (deviceId) => switchState,})
                  

                  (XXXX und YYYY musst du natürlich noch durch die richten Werte ersetzen, die ich auch nicht kenne. Und wie gesagt: ungetestet!)

                  K 1 Reply Last reply Reply Quote 0
                  • K
                    Kusi @UncleSam last edited by Kusi

                    @UncleSam sagte in Befehle von Neeo nach ioBroker senden:

                    if (newValue == 'XXXX') {

                    Mit "richtigen Wert" meinst du den Wert, welcher vom Schalter her kommt wenn dieser auf "ein" gestellt ist, also z.B. true?

                    Könnte man diesen ausgegebenen Wert irgendwie auslesen?

                    UncleSam 1 Reply Last reply Reply Quote 0
                    • UncleSam
                      UncleSam Developer @Kusi last edited by

                      @Kusi sagte in Befehle von Neeo nach ioBroker senden:

                      Könnte man diesen ausgegebenen Wert irgendwie auslesen?

                      Du könntest ihn ja direkt an den Datenpunkt schicken:

                      http("http://192.168.1.15:8087/set/javascript.0.Eigene_Datenpunkte.Neeo-Switch?value=" + newValue);
                      
                      K 1 Reply Last reply Reply Quote 0
                      • K
                        Kusi @UncleSam last edited by

                        @UncleSam Als Antwort im Browser kommt

                        {"id":"javascript.0.Eigene_Datenpunkte.Neeo-Switch","value":"\"   newValue","val":"\"   newValue"}
                        

                        Wert von Datenpunkt ist dann

                        "   newValue
                        

                        Ist ein Zeichen falsch?

                        mickym 1 Reply Last reply Reply Quote 0
                        • mickym
                          mickym Most Active @Kusi last edited by

                          @Kusi Im Browser geht das auch nicht - da dort ja die Variable "newValue" nicht gesetzt wird.

                          @UncleSam meint dass Du in dem Code des Treibers für den Switch direkt den Wert übergibst - also so:

                          actualDriverObject.addSwitch({ name: 'Schalter', label: 'Schalter' },{
                            setter: (deviceId, newValue) => {
                              switchState = newValue;
                              http("http://192.168.1.15:8087/set/javascript.0.Eigene_Datenpunkte.Neeo-Switch?value=" + newValue);
                            },
                            getter: (deviceId) => switchState,})
                          
                          
                          UncleSam K 3 Replies Last reply Reply Quote 0
                          • UncleSam
                            UncleSam Developer @mickym last edited by

                            @mickym sagte in Befehle von Neeo nach ioBroker senden:

                            @UncleSam meint dass Du in dem Code des Treibers für den Switch direkt den Wert übergibst

                            Genau.

                            1 Reply Last reply Reply Quote 0
                            • K
                              Kusi @mickym last edited by

                              @mickym sagte in Befehle von Neeo nach ioBroker senden:

                              @Kusi Im Browser geht das auch nicht - da dort ja die Variable "newValue" nicht gesetzt wird.

                              @UncleSam meint dass Du in dem Code des Treibers für den Switch direkt den Wert übergibst - also so:

                              actualDriverObject.addSwitch({ name: 'Schalter', label: 'Schalter' },{
                                setter: (deviceId, newValue) => {
                                  switchState = newValue;
                                  http("http://192.168.1.15:8087/set/javascript.0.Eigene_Datenpunkte.Neeo-Switch?value=" + newValue);
                                },
                                getter: (deviceId) => switchState,})
                              
                              

                              ioBroker aktualisiert den Datenpunkt nicht.

                              UncleSam 1 Reply Last reply Reply Quote 0
                              • UncleSam
                                UncleSam Developer @Kusi last edited by UncleSam

                                @Kusi sagte in Befehle von Neeo nach ioBroker senden:

                                ioBroker aktualisiert den Datenpunkt nicht.

                                Dann versuch statt dem http() aufruf einfach mal auf die Konsole zu loggen:

                                console.log("Neuer Wert:", newValue);
                                

                                Selbstverständlich muss nach jeder Änderung der Service oder der Driver neu gestartet werden (nicht aber ioBroker)!

                                K mickym 2 Replies Last reply Reply Quote 0
                                • K
                                  Kusi @UncleSam last edited by

                                  @UncleSam Ich starte nach jeder Änderung das Raspberry komplett neu, da ich den Dienst nicht stoppen kann.

                                  In welchem Log sollte denn eine Änderung sichtbar sein?
                                  Folgendes ist in der index.js erstellt von mir:

                                  actualDriverObject.addSwitch({ name: 'Schalter2', label: 'Schalter2' },{
                                    setter: (deviceId, newValue) => {
                                      switchState = newValue;
                                      console.log("Neuer Wert:", newValue);
                                    },
                                    getter: (deviceId) => switchState,})
                                  

                                  Und folgendes kommt bei jedem Start des Dienstes:

                                  pi@raspberrypi:~ $ node /home/pi/node_modules/ioBroker
                                  # READY! use the NEEO app to search for: ioBroker
                                  
                                    ACCESOIRE devices do not have their own recipy slides.
                                    You need to add the buttons as shortcuts to an existing device slide,
                                    add a dummy device (search for dummy) and add the buttons as shortcut there or
                                    change the actualDriverObject.setType line to present this driver as a differe                                                nt device type.
                                  
                                  

                                  Dies ändert auch nicht, wenn ich den Switch drücke...
                                  Folgendes erscheint (ebenfalls in Putty), wenn ich einen Button drücke:

                                  [CONTROLLER] button-h button pressed
                                  [CONTROLLER] button-g button pressed
                                  
                                  1 Reply Last reply Reply Quote 0
                                  • mickym
                                    mickym Most Active @UncleSam last edited by mickym

                                    @UncleSam said in Befehle von Neeo nach ioBroker senden:

                                    @Kusi sagte in Befehle von Neeo nach ioBroker senden:

                                    ioBroker aktualisiert den Datenpunkt nicht.

                                    Dann versuch statt dem http() aufruf einfach mal auf die Konsole zu loggen:

                                    console.log("Neuer Wert:", newValue);
                                    

                                    Selbstverständlich muss nach jeder Änderung der Service oder der Driver neu gestartet werden (nicht aber ioBroker)!

                                    Na ich glaube hier gehst Du von einem Missverständnis aus. Der Treiber läuft nicht im iobroker - der wird nur innerhalb des iobrokers gestartet, ist aber ein eigenständiger node.js Prozess.

                                    @Kusi Um auszuschliessen, dass es sich einfach bei der Konvertierung um ein Problem handelt, könntest Du den ersten Code von @UncleSam als boolean probieren.

                                    actualDriverObject.addSwitch({ name: 'Schalter', label: 'Schalter' },{
                                      setter: (deviceId, newValue) => {
                                        switchState = newValue;
                                        if (newValue) {
                                          http("http://192.168.1.15:8087/set/javascript.0.Eigene_Datenpunkte.Neeo-Switch?value=wahr"
                                        } else {
                                          http("http://192.168.1.15:8087/set/javascript.0.Eigene_Datenpunkte.Neeo-Switch?value=falsch"
                                        }
                                      },
                                    

                                    Evtl. fehlt aber in dem Treiber was, der dieses newValue und deviceId setzt - aber da kann ich eben nicht helfen, da dies ein Neeo Kenner machen muss.
                                    Der erste Schritte wäre dann nämlich tatsächlich, dass Du den letzten Code nochmal mit einem Wert nutzt und testest ob bei Bewegen des Schalters überhaupt was im DP ankommt:

                                    actualDriverObject.addSwitch({ name: 'Schalter', label: 'Schalter' },{
                                      setter: (deviceId, newValue) => {
                                        switchState = newValue;
                                        http("http://192.168.1.15:8087/set/javascript.0.Eigene_Datenpunkte.Neeo-Switch?value='Test'" );
                                      },
                                      getter: (deviceId) => switchState,})
                                    

                                    Wenn da nun im DP nicht Test steht - dann wird die Funktion gar nicht aufgrufen.

                                    K 2 Replies Last reply Reply Quote 0
                                    • K
                                      Kusi @mickym last edited by Kusi

                                      @mickym
                                      Dies erscheint nun beim Start des Treibers:

                                      pi@raspberrypi:~ $ node /home/pi/node_modules/ioBroker
                                      /home/pi/node_modules/ioBroker/index.js:21
                                            http("http://192.168.1.15:8087/set/javascript.0.Eigene_Datenpunkte.Neeo-Switch?value=wahr"
                                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                                      
                                      SyntaxError: missing ) after argument list
                                          at wrapSafe (internal/modules/cjs/loader.js:1053:16)
                                          at Module._compile (internal/modules/cjs/loader.js:1101:27)
                                          at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)
                                          at Module.load (internal/modules/cjs/loader.js:985:32)
                                          at Function.Module._load (internal/modules/cjs/loader.js:878:14)
                                          at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)
                                          at internal/main/run_main_module.js:17:47
                                      

                                      Ich hätte gesagt dass nach dem wahr" noch eine Klammer ) gehört, die habe ich nach wahr" und falsch" eingefügt, dann kommt allerdings folgender Fehler:

                                      pi@raspberrypi:~ $ node /home/pi/node_modules/ioBroker
                                      /home/pi/node_modules/ioBroker/index.js:28
                                      actualDriverObject.addButtonHandler((buttonName, deviceId) => {
                                                        ^
                                      
                                      SyntaxError: Unexpected token '.'
                                          at wrapSafe (internal/modules/cjs/loader.js:1053:16)
                                          at Module._compile (internal/modules/cjs/loader.js:1101:27)
                                          at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)
                                          at Module.load (internal/modules/cjs/loader.js:985:32)
                                          at Function.Module._load (internal/modules/cjs/loader.js:878:14)
                                          at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)
                                          at internal/main/run_main_module.js:17:47
                                      
                                      
                                      1 Reply Last reply Reply Quote 0
                                      • K
                                        Kusi @mickym last edited by

                                        @mickym sagte in Befehle von Neeo nach ioBroker senden:

                                                                                                                                                                    actualDriverObject.addSwitch({ name: 'Schalter', label: 'Schalter' },{                                                                                                                                                                              setter: (deviceId, newValue) => {                                                                                                                                                                                switchState = newValue;                                                                                                                                                                                http("http://192.168.1.15:8087/set/javascript.0.Eigene_Datenpunkte.Neeo-Switch?value='Test'" );                                                                                                                                                                              },                                                                                                                                                                              getter: (deviceId) => switchState,})
                                        

                                        Damit ändert sich der Datenpunkt nicht. Gebe ich

                                        http://192.168.1.15:8087/set/javascript.0.Eigene_Datenpunkte.Neeo-Switch?value='Test'
                                        

                                        im Browser ein, dann ändert sich der Datenpunkt auf 'Test'.

                                        mickym 2 Replies Last reply Reply Quote 0
                                        • mickym
                                          mickym Most Active @Kusi last edited by

                                          @Kusi das ist genau das, was ich befürchtet habe. Das es im Browser funktioniert das war relativ klar. Aber Dein Treiber Deiner Neeo ruft die Funktion gar nicht auf. Ein Pushbutton ist simpel da er keinen Status Kennt und einfach den Befehl rausschießt. Alles andere benötigt aber Kenntnisse in der Treiberprogrammierung. Ggf muss man diese Funktionsaufrufe alle selbst programmieren du musst die zur Laufzeit zugewiesene device id ermitteln usw.

                                          1 Reply Last reply Reply Quote 0
                                          • mickym
                                            mickym Most Active @Kusi last edited by

                                            @Kusi du kannst noch versuchen ob der HTTP Befehl unter getter ausgeführt - viel Hoffnung habe ich aber nicht

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            546
                                            Online

                                            31.8k
                                            Users

                                            79.9k
                                            Topics

                                            1.3m
                                            Posts

                                            neeo
                                            3
                                            62
                                            3052
                                            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