NEWS
Befehle von Neeo nach ioBroker senden
-
@Kusi Im SDK Quellcode habe ich gesehen, dass newValue tatsächlich ein boolean ist; damit wäre es true oder false wie @mickym geschrieben hat. Weshalb die Callbacks aber nicht aufgerufen werden, verstehe ich auch nicht. Gemäss allen Beschreibungen, die ich gefunden habe, müssen die genau so angegeben werden.
Bist du sicher, dass alles sauber neu geladen wird im Neeo? Hast du mal versucht, einen Button umzubenennen und zu sehen, ob das auf der Fernbedienung auch geschieht?
Ich glaube nämlich langsam, dass das Problem bei der Art liegt, wie du entwickelst. Es sollte wirklich nicht notwendig sein, den RasPi bei jeder Änderung neu zu starten und auch den Pfad
/home/pi/node_modules/ioBrokerfinde ich sehr komisch. Wie bist du auf diesen gekommen? Grundsätzlich sollte man nämlich in einem node_modules-Ordner keine Änderungen machen.@UncleSam sagte in Befehle von Neeo nach ioBroker senden:
SDK Quellcode habe ich gesehen, dass newValue tatsächlich ein boolean ist; damit wäre es true oder false
Wie muss es genau heissen?
Wie folgt kann ich den Treiber nicht laden:
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" } }, -
@UncleSam sagte in Befehle von Neeo nach ioBroker senden:
SDK Quellcode habe ich gesehen, dass newValue tatsächlich ein boolean ist; damit wäre es true oder false
Wie muss es genau heissen?
Wie folgt kann ich den Treiber nicht laden:
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" } }, -
@UncleSam das habe ich mir eben auch gedacht und beim zweiten Versuch getestet, aber dann kommt folgender Fehler:
pi@raspberrypi:~ $ node /home/pi/node_modules/neeo_driver-test /home/pi/node_modules/neeo_driver-test/index.js:29 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:47So sieht es jetzt komplett aus:
"use strict"; const neeoapi = require("neeo-sdk"); const http = require("http.min"); let actualDriverObject; actualDriverObject = neeoapi.buildDevice("ioBroker"); // change "My first driver" to anything you like but keep the "" characters actualDriverObject.setType("ACCESSOIRE"); // can be changed to "ACCESSOIRE" or "AVRECEIVER" or "DVB" or "DVD" or "GAMECONSOLE" or "LIGHT" or "MEDIAPLAYER" or "MUSICPLAYER" or "PROJECTOR" or "TV" or "VOD" actualDriverObject.addButton({ name: "button-a", label: "Button A" }); // This makes a new button named button-a, on the remote its shown as Button A actualDriverObject.addButton({ name: "button-b", label: "Button B" }); // This makes a new button named button-b, on the remote its shown as Button B actualDriverObject.addButton({ name: "button-c", label: "Button C" }); // This makes a new button named button-c, on the remote its shown as Button C actualDriverObject.addButton({ name: "button-d", label: "Button D" }); // This makes a new button named button-d, on the remote its shown as Button D actualDriverObject.addButton({ name: "button-e", label: "Button E" }); // This makes a new button named button-d, on the remote its shown as Button E actualDriverObject.addButton({ name: "button-f", label: "Button F" }); // This makes a new button named button-d, on the remote its shown as Button F actualDriverObject.addButton({ name: "button-g", label: "Button G" }); // This makes a new button named button-d, on the remote its shown as Button G actualDriverObject.addButton({ name: "button-h", label: "Button H" }); // This makes a new button named button-d, on the remote its shown as Button H 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") } }, // Here is the code that gets executed when a button is pressed. actualDriverObject.addButtonHandler((buttonName, deviceId) => { console.log(`[CONTROLLER] ${buttonName} button pressed`); if (buttonName == "button-a") { http("http://192.168.1.15:8087/set/javascript.0.Eigene_Datenpunkte.Neeo-Button?value=A"); //Just sneds a http get, use this to controll devices that supports a http get } if (buttonName == "button-b") { http("http://192.168.1.15:8087/set/javascript.0.Eigene_Datenpunkte.Neeo-Button?value=B"); } if (buttonName == "button-c") { http("http://192.168.1.15:8087/set/javascript.0.Eigene_Datenpunkte.Neeo-Button?value=C"); } if (buttonName == "button-d") { http("http://192.168.1.15:8087/set/javascript.0.Eigene_Datenpunkte.Neeo-Button?value=D"); } if (buttonName == "button-e") { http("http://192.168.1.15:8087/set/javascript.0.Eigene_Datenpunkte.Neeo-Button?value=E"); } if (buttonName == "button-f") { http("http://192.168.1.15:8087/set/javascript.0.Eigene_Datenpunkte.Neeo-Button?value=F"); } if (buttonName == "button-g") { http("http://192.168.1.15:8087/set/javascript.0.Eigene_Datenpunkte.Neeo-Button?value=G"); } if (buttonName == "button-h") { http("http://192.168.1.15:8087/set/javascript.0.Eigene_Datenpunkte.Neeo-Button?value=H"); } }); // change this to set your NEEO brain IP. change 10.2.1.64 to the IP address of your NEEO brain. const neeoSettings = { brain: "192.168.1.80", port: 1104, name: "eigeneTasten", devices: [actualDriverObject] }; /////////////////////////////////////////////////////////////////////////////////////////////////// // Do not change the code below this point. /////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////// // Do not change the code below this point. /////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////// // Do not change the code below this point. /////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////// // Do not change the code below this point. /////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////// neeoapi .startServer(neeoSettings) .then(() => { console.log("# READY! use the NEEO app to search for: " + actualDriverObject.devicename); if (actualDriverObject.type == "ACCESSOIRE") { console.log("\r\n ACCESOIRE devices do not have their own recipy slides."); console.log(" You need to add the buttons as shortcuts to an existing device slide,"); console.log(" add a dummy device (search for dummy) and add the buttons as shortcut there or"); console.log(" change the actualDriverObject.setType line to present this driver as a different device type."); } }) .catch(err => { console.error("ERROR!", err); process.exit(1); }); -
@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,})@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=" + newValue); }, getter: (deviceId) => switchState,})Das hier geht, oder? Wenn du etwas änderst, musst du immer schauen, dass die öffnenden und schliessenden Klammern (rund, geschweift, eckig) übereinstimmen.
Ergo sollte es IMHO heissen:
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" } }, getter: (deviceId) => switchState,}) -
@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=" + newValue); }, getter: (deviceId) => switchState,})Das hier geht, oder? Wenn du etwas änderst, musst du immer schauen, dass die öffnenden und schliessenden Klammern (rund, geschweift, eckig) übereinstimmen.
Ergo sollte es IMHO heissen:
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" } }, getter: (deviceId) => switchState,})@UncleSam Gemäss Fehler beim vorherigen Laden des Treibers liegt der Fehler vermutlich an einem anderen Ort?
Zeilen 28 und 29 von index.js
// Here is the code that gets executed when a button is pressed. actualDriverObject.addButtonHandler((buttonName, deviceId) => { -
@UncleSam Gemäss Fehler beim vorherigen Laden des Treibers liegt der Fehler vermutlich an einem anderen Ort?
Zeilen 28 und 29 von index.js
// Here is the code that gets executed when a button is pressed. actualDriverObject.addButtonHandler((buttonName, deviceId) => { -
@Kusi Wenn Zeichen fehlen auf den vorherigen Zeilen, kann es sehr gut sein, dass der Fehler erst auf der nächsten Code-Zeile "zum Vorschein" kommt.
-
@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=" + newValue); }, getter: (deviceId) => switchState,})Das hier geht, oder? Wenn du etwas änderst, musst du immer schauen, dass die öffnenden und schliessenden Klammern (rund, geschweift, eckig) übereinstimmen.
Ergo sollte es IMHO heissen:
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" } }, getter: (deviceId) => switchState,})@UncleSam sagte in Befehle von Neeo nach ioBroker senden:
Ergo sollte es IMHO heissen:
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" } }, getter: (deviceId) => switchState,})Genau. Zeile 10.
-
@UncleSam sagte in Befehle von Neeo nach ioBroker senden:
Ergo sollte es IMHO heissen:
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" } }, getter: (deviceId) => switchState,})Genau. Zeile 10.
@UncleSam Das ist jetzt die Antwort beim Treiber-Start:
pi@raspberrypi:~ $ node /home/pi/node_modules/neeo_driver-test /home/pi/node_modules/neeo_driver-test/index.js:25 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:47Klammer fehlten!
-
@UncleSam Aus meiner Sicht fehlt irgendwo eine schliessende Klammer, denn die Öffnende ist bei
actualDriverObject.addSwitch(Woher weis die If-Schleife eigentlich, ob der Wert/Schalter true oder false isch?
@Kusi sagte in Befehle von Neeo nach ioBroker senden:
Woher weis die If-Schleife eigentlich, ob der Wert/Schalter true oder false isch?
if (newValue)überprüft den übergebenen neuen Wert, wenn dertrue(oder etwas ähnliches) ist, wird das erste ausgeführt, sonst das zweite. -
Sorry, falsches korrigiert:
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"); } }, getter: (deviceId) => switchState,}) -
Sorry, falsches korrigiert:
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"); } }, getter: (deviceId) => switchState,})@UncleSam Wie beende ich denn jetzt den Treiber, ohne dass ich den Raspi neu starten muss??
pi@raspberrypi:~ $ node /home/pi/node_modules/neeo_driver-test # 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 different device type. -
@UncleSam Wie beende ich denn jetzt den Treiber, ohne dass ich den Raspi neu starten muss??
pi@raspberrypi:~ $ node /home/pi/node_modules/neeo_driver-test # 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 different device type.