NEWS
Test Adapter EnOcean v0.3.x
-
Hallo,
nach fast einem Jahr hab ich es endlich geschafft mir einen EnOcean Taster und ein USB 300 Gateway zu besorgen. Anfangs hatte ich das zu Test zwecken nur mit dem JS Adapter eingebunden, aber vor ein paar Tagen hab ich mir auch noch 2 Bewegungsmelder zugelegt.
Da ohnehin ein EnOcean Adapter geplant war hab ich das gleich mal als Anlass genommen den Adapter zu schreiben.
Zum jetzigen Zeitpunkt kann der Adapter nur Daten empfangen, senden ist noch nicht möglich. Da ich auch keine Empfänger(Aktoren) habe kann ich das dann auch nur Blind implementieren. Mal sehen ob ich irgendwo ein oder zwei Empfänger günstig bekomme.
Installation ist derzeit nur von git möglich.
Vorraussetzungen:
-
EnOcean USB 300 Gateway oder EnOcean Pi
-
Nodejs version >=7.x.x
UPDATE:
Für die Leute unter euch die selbst neue Geräte hinzufügen gibt es ein paar Infos.
Syryna hat eine Einsteigerhilfe für das Verständnis der EEPs erstellt. –> https://forum.iobroker.net/viewtopic.php?p=211810#p211810
Hier eine kurze Übersicht der Dateien die für die Implementierung neuer EEPs angefasst werden müssen:
- EEP2IOB.json definiert die Objekte die für ein Profil angelegt werden
- z.B. "A5-3F-7F.js" hier werden die Funktionen hinterlegt für das Auswerten der Daten und den Bau der Datentelegramme die gesendet werden sollen
- devices.json hier sind die Geräte mit Infos wie Hersteller, Model, EEP(s) und Type hinterlegt.
- eepInclude.js fast alle EEP files zusammen und stellt sie im Adapter zur Verfügung
-
-
Cool. Super!!
Leider wegen lib Abhängigkeit Node >= 7 … Da Node 7 ne Warnung im Admin gibt weil es keine Lts Version ist also effektiv nur nodejs 8 ...
-
Nice, werd ich demnächst mal testen. Hab leider auch nur Schalter, keine Aktoren.
Btw, das Repo sollte ioBroker.enocean heißen, Kleinbuchstaben sind für das Paket in NPM zu verwenden
-
Danke für den Hinweis mit dem repo Namen. Das ändere ich sobald ich kann.
Gesendet von Unterwegs
-
Hi Jey Cee,
zuerstmal danke dafür, dass Du dich dieses Themas annimmst. Darauf warte ich schon ein kleine Ewigkeit.
Ich habe eben gerade versucht den Adapter zu installieren.
Dabei kommt folgende Fehlermeldung:
! host.castor 2017-09-26 12:24:56.741 error instance system.adapter.enocean.0 terminated with code 0 (OK)
! host.castor 2017-09-26 12:24:56.741 error Caught by controller[2]: at Object. (/opt/iobroker/node_modules/iobroker.enocean/main.js:41:38)
! host.castor 2017-09-26 12:24:56.741 error Caught by controller[2]: at require (internal/module.js:20:19)
! host.castor 2017-09-26 12:24:56.741 error Caught by controller[2]: at Module.require (module.js:497:17)
! host.castor 2017-09-26 12:24:56.741 error Caught by controller[2]: at Function.Module._load (module.js:438:3)
! host.castor 2017-09-26 12:24:56.741 error Caught by controller[2]: at tryModuleLoad (module.js:446:12)
! host.castor 2017-09-26 12:24:56.741 error Caught by controller[2]: at Module.load (module.js:487:32)
! host.castor 2017-09-26 12:24:56.741 error Caught by controller[2]: at Object.Module._extensions..js (module.js:579:10)
! host.castor 2017-09-26 12:24:56.741 error Caught by controller[2]: at Module._compile (module.js:542:28)
! host.castor 2017-09-26 12:24:56.741 error Caught by controller[2]: at Object.runInThisContext (vm.js:97:10)
! host.castor 2017-09-26 12:24:56.740 error Caught by controller[2]: at createScript (vm.js:56:10)
! host.castor 2017-09-26 12:24:56.740 error Caught by controller[2]: SyntaxError: missing ) after argument list
! host.castor 2017-09-26 12:24:56.740 error Caught by controller[2]: ^^^^^
! host.castor 2017-09-26 12:24:56.740 error Caught by controller[2]: socket.on( "get-last-sensor-value" , async function( id ) {
! host.castor 2017-09-26 12:24:56.739 error Caught by controller[2]: 2017-09-26 12:24:56.218 - enocean.0 /opt/iobroker/node_modules/iobroker.enocean/node_modules/node-enocean/index.js:248
! host.castor 2017-09-26 12:24:56.739 error Caught by controller[1]: 2017-09-26 12:24:56.216 - enocean.0 uncaught exception: missing ) after argument list
! host.castor 2017-09-26 12:24:56.739 error Caught by controller[0]: at Object. (/opt/iobroker/node_modules/iobroker.enocean/main.js:41:38)
! host.castor 2017-09-26 12:24:56.739 error Caught by controller[0]: at require (internal/module.js:20:19)
! host.castor 2017-09-26 12:24:56.739 error Caught by controller[0]: at Module.require (module.js:497:17)
! host.castor 2017-09-26 12:24:56.738 error Caught by controller[0]: at Function.Module._load (module.js:438:3)
! host.castor 2017-09-26 12:24:56.738 error Caught by controller[0]: at tryModuleLoad (module.js:446:12)
! host.castor 2017-09-26 12:24:56.738 error Caught by controller[0]: at Module.load (module.js:487:32)
! host.castor 2017-09-26 12:24:56.738 error Caught by controller[0]: at Object.Module._extensions..js (module.js:579:10)
! host.castor 2017-09-26 12:24:56.738 error Caught by controller[0]: at Module._compile (module.js:542:28)
! host.castor 2017-09-26 12:24:56.737 error Caught by controller[0]: at Object.runInThisContext (vm.js:97:10)
! host.castor 2017-09-26 12:24:56.737 error Caught by controller[0]: at createScript (vm.js:56:10)
! host.castor 2017-09-26 12:24:56.737 error Caught by controller[0]: SyntaxError: missing ) after argument list
! host.castor 2017-09-26 12:24:56.737 error Caught by controller[0]: ^^^^^
! host.castor 2017-09-26 12:24:56.736 error Caught by controller[0]: socket.on( "get-last-sensor-value" , async function( id ) {
! host.castor 2017-09-26 12:24:56.736 error Caught by controller[0]: /opt/iobroker/node_modules/iobroker.enocean/node_modules/node-enocean/index.js:248
! enocean.0 2017-09-26 12:24:56.319 info starting. Version 0.1.0 in /opt/iobroker/node_modules/iobroker.enocean, node: v6.11.2Natürlich kann ich damit nichts anfangen. Aber villeicht hilfts Dir ja.
-
node: v6.11.2 `
Bitte oben lesen, du brauchst mindestens NodeJS 7, bzw. 8 damit ioBroker nicht meckert. -
Node 8 macht mit npm 5 bei meinen Tests immer noch Probleme.
Insofern ist die Wahl, wenn es denn eine war, nicht günstig.
Und Node 7 ist nicht LTS.
Gruß
Rainer
-
Insofern ist die Wahl, wenn es denn eine war, nicht günstig. `
Das Node-Enocean Modul verwendet leider die neueste JS-Syntax ES2017 mit async/await ohne sie zu transpilieren. Das geht nur mit NodeJS 7+. Oder man müsste das Modul forken und transpiling per Babel oder am besser gleich TypeScript einbauen, damit ältere Versionen bedient werden können. -
Super, dass jemand endlich die Zeit gefunden hat, enocean Adapter zu schreiben.
Wie man sieht es ist nicht kompliziert die Kommunikation zum Laufen zu bekommen, aber es ist schwer das bequem und umfangreich wie rflink zu machen. Und genau die zwei letzte Sachen haben mich bis jetzt angehalten.
Ich hoffe, dass gemeinsam wir es schaffen können
Ich habe gleich 2 Anmerkungen:
- eo.listen(adapter.config.serialport);
Lieber in main() aufrufen. Dafür ist die Funktion da.
- teachMode nicht im Objekt, sondern in State verwalten. Weil bei jeder Objektänderung die Instanz neu gestartet wird.
Ansonsten ich bin sehr froh und werde auch gerne bei der Entwicklung helfen.
-
Bezüglich Auswahl der seriellen Schnittstelle: Bitte bei Zwave bedienen!
Der Adapter liefert auf Linux die vorhandenen seriellen Schnittstellen bei Anfrage per sendTo:
https://github.com/ioBroker/ioBroker.zw … in.js#L150
https://github.com/ioBroker/ioBroker.zw ... in.js#L515
Abfrage im Admin ist hier zu finden:
https://github.com/ioBroker/ioBroker.zw ... .html#L119
Wenn ich vor dir die Zeit finden, mache ich einen PR, kann aber etwas dauern.
-
- teachMode nicht im Objekt, sondern in State verwalten. Weil bei jeder Objektänderung die Instanz neu gestartet wird. `
Wollte ich ursprünglich auch machen nur weiss ich nicht wie ich aus der index.html zugriff auf die Objekte bekomme.
Wenn ich vor dir die Zeit finden, mache ich einen PR, kann aber etwas dauern. `
Ich hab versucht die Abfrage zu übernehmen, das DropDown wird nicht befüllt, vermutlich nur eine Kleinigkeit. Wenn du dir das anschauen würdest wäre gut. - teachMode nicht im Objekt, sondern in State verwalten. Weil bei jeder Objektänderung die Instanz neu gestartet wird. `
-
Kann ich machen.
-
Zum Überarbeiten des USB-Dropdown bin ich noch nicht gekommen, aber zum Testen. Ich habe einen PTM215 DB, der korrekt als
"eepFunc": "Rocker Switch, 2 Rocker", "eepType": "Light Control - Application Style 1"
erkannt wird.
Drücke ich eine der Tasten, wird state auf einen der Zustände "A0|A1|B0|B1 down" gesetzt, nach dem Loslassen kommt "released".
Zwei Tasten gleichzeitig mag der Adapter nicht. Da erscheint ein neuer State "unknown" mit Wert "unknown".
-
PR für USB-Dropdown erstellt https://github.com/Jey-Cee/ioBroker.enocean/pull/2
-
Habe nen PR für Teach-Mode in Arbeit, werde ich heute Abend bereitstellen. Muss da noch ein wenig Hand anlegen, um deine Änderungen von eben rein zu bekommen.
-
Habe nen PR für Teach-Mode in Arbeit, werde ich heute Abend bereitstellen. Muss da noch ein wenig Hand anlegen, um deine Änderungen von eben rein zu bekommen. `
Super. Wie löst du das? Hab gerade nach einer Lösung gesucht, hab aber nur die sendTo möglichkeit gefunden.
Hab das DropDown nochmal angepasst so das es für Windows und Linux passt, falls es für den Z-Wave von interesse ist kannst das dort auch einbauen.
Ich habe einen PTM215 DB, der korrekt als
CODE: ALLES AUSWÄHLEN
"eepFunc": "Rocker Switch, 2 Rocker",
"eepType": "Light Control - Application Style 1"
erkannt wird.
Drücke ich eine der Tasten, wird state auf einen der Zustände "A0|A1|B0|B1 down" gesetzt, nach dem Loslassen kommt "released".
Zwei Tasten gleichzeitig mag der Adapter nicht. Da erscheint ein neuer State "unknown" mit Wert "unknown". `
Das ist so alles Korrekt. Ich hatte schon überlegt es anders an zu gehen, aber die enOcean Geräte übertragen ein Value. Das heisst es muss für jedes Gerät ein Profil hinterlegt werden wie mit dem Value gearbeitet werden muss.Deswegen lass ich das vorerst mal so.
@Jey Cee:Mal sehen ob ich irgendwo ein oder zwei Empfänger günstig bekomme. `
Hab mir einen Zwischenstecker geschossen, das heisst ich werde sobald er da ist das senden einbauen. -
@Jey Cee:Super. Wie löst du das? Hab gerade nach einer Lösung gesucht, hab aber nur die sendTo möglichkeit gefunden. `
Beschreibe ich dir dann später im PR@Jey Cee:Hab das DropDown nochmal angepasst so das es für Windows und Linux passt, falls es für den Z-Wave von interesse ist kannst das dort auch einbauen. `
Ist denke ich schon von Interesse, sollte aber noch etwas aufgeräumt werden. Die Schleifen kann man elegant durch map/filter ersetzen.Für EnOcean bau ich nen PR (vor allem können wir das dank NodeJS >= 7 wunderschön mit async/await lösen).
Für ZWave (Node 4+) können wir basierend darauf zurück auf Callbacks gehen.
@Jey Cee:Das ist so alles Korrekt. Ich hatte schon überlegt es anders an zu gehen, aber die enOcean Geräte übertragen ein Value. Das heisst es muss für jedes Gerät ein Profil hinterlegt werden wie mit dem Value gearbeitet werden muss.
Deswegen lass ich das vorerst mal so. `
Ok, dann schau ich demnächst mal, ob das halbwegs allgemein geht. In FHEM stand dann einfach "A0,B1" im State. -
Dank AlCalzone und Holger, der das node-enocean Modul erstellt hat, können enOcean Geräte jetzt auch wieder abgelernt werden.
Außerdem wurde der Anlernmodus von AlCalzone angepasst so das kein Adapter Neustart erforderlich ist.
Eine weitere Neuerung ist die Auswahl des Serialport, es kann jetzt Komfortabel aus einem DropDown der Port ausgewählt werden.
Zurzeit ist es noch nicht möglich enOcean Geräte mit dem Adapter zu steuern.
Bitte Testet die neue Version. Es wäre auch gut wenn ihr preis gebt welche Geräte ihr einsetzt und ob sie vom Adapter erkannt werden.
-
Ich habe neuerdings diesen Multisensor zum Testen da: http://www.perfactory.de/bauformen/#VoCap
Muss ihn aber erst noch zum Laufen bringen, dann werde ich berichten. Gibts irgendwann nächstes Jahr auch energieautark.
-
Der Multisensor crasht den Adapter. Fix => https://github.com/Jey-Cee/ioBroker.enocean/pull/7