NEWS
Ekey Adapterfehler
-
Ich arbeite an der Einbindung einer Ekey-Multi-Zentrale über CV-Lan (192.168.2.250) in ioBroker (192.168.2.223).
Ekey Adapter Version 1.0.0.
Nach Rücksprache mit dem Ekey-Support <u>muss</u> für die Multi-Zentrale das Datenformat <u>zwingend</u> MULTI sein. Raw/Rare geht nicht.
Im MULTI Format werden die Daten als String mit Separator übertragen. Den voreingestellten Separator _ habe ich beibehalten.
Gem. der Doku darf der in der Zentrale hinterlegte User-Name max. 10-stellig sein.
Wird ein User-Name direkt von Separatoren eingeschlossen, dann werden die Datenpunkte richtig versorgt.
Wird an dem Namen ein Leerzeichen angefügt, dann werden die Datenpunkte verschoben und unvollständig zugeordnet.
Ich weiß nicht, ob ich damals den Namen (irrtümlich) mit blank am Ende eingegeben habe oder ob der Konverter das blank hinzufügt, auf jeden Fall ist die Änderung des Namens in der Zentrale nachträglich nicht mehr möglich. D.h. löschen und neu anlegen mit Finger-Anlernen wäre sehr aufwändig.
M.E. sollte daher der Adapter ein Leerzeichen hinter dem User Namen richtig verarbeiten können.
Die Bilder im Anhang zeigen die unterschiedlichen Datenpunktzuordnungen.
Den Fehler habe ich eingegrenzt, indem ich mit der Windows Software Packet-Sender (192.168.2.118) UDP-Datenstrings erzeugt habe und auch die Datenstrings vom CV Lan habe anzeigen lassen.
Bitte um Unterstützung.
PS: Terminierung bei RS485 ist an beiden Strangenden notwendig. CV Lan Konverter hat fest eingebaute Terminierung, muss also immer an einem Ende des Strangs sein. Zentrale und Fingerprint-Sender haben Dip-Schalter. Ist im Strang CV-Lan - Zentrale - FP-Leser die Zentrale terminiert, dann gibt es keine UDP-Daten!
5453_log-fp.jpg
5453_log-packet.jpg
5453_packet.jpg
5453_obj-packet-fp.jpg -
-
\opt\iobroker\node_modules
Sent from my iPhone using Tapatalk
-
Offensichtlich ist der Fehler in den Attributen der split-Funktion:
const values = message.toString('ascii').split(/[\s_?]/);
Der message-String vom Konverter wird durch split in ein values-Array aufgeteilt. Als Trennzeichen werden im regulären Ausdruck space, underline und Fragezeichen angegeben.
Da der Vorname am Ende ein Leerzeichen hat, wird das Leerzeichen in ein values-Feld kopiert und die folgenden Werte verschieben sich in hintere Arrays.
Ich denke, folgender String ist korrekt:
const values = message.toString('ascii').split(/[_]/);
oder ohne den regulären Ausdruck
const values = message.toString('ascii').split("_");
Nun muss ich schauen, wie ich die Quelle in meiner ioBroker Installation korrigiere.
Frage an die ioBroker-Programmierer: Wie kommt so eine Änderung in den Auslieferungsstand (Prozess, Versionsnummer, etc.)?
-
Also der Split oben sollte bedeuten: SPlitte an
-
jedem Whitespace character (\s)
-
jedem underscore (_)
-
jedem Fragezeichen (?)
Also an einem dieser drei zeichen wenn es vorkommt. Da das "_" auch dabei ist sollte es gleichbedeutend sein mit deinem Split - es sei denn eins der anderen zeichen kommt vor darf aber nicht zum Splitten genutzt werden
-
-
Genau!
Das ist gerade mein Problem. Der Vorname hat am Ende ein Leerzeichen abbekommen, das zur Verschiebung der Werte in den Variablen führt. Das Handling der Dateneingabe in der Ekey-Multi-Zentrale ist sehr unbequem, Korrekturen nicht möglich. Display, Cursor und Buchstaben sind sehr klein.
Wenn also ein Name (versehentlich) mit Leerzeichen eingegeben wurde, dann kommt es zu Problemen.
Wenn z.B. ein Adelstitel vorhanden ist (von Richthofen), dann läuft es ebenfalls schief.
Am besten das Leerzeichen als Separator im Adapter rausnehmen und in der Hilfe zum Adapter erwähnen, dass als Separator für Home und Multi ausschließlich _ und Fragezeichen zulässig sind. Ggf. macht auch ; Sinn.
_ als Separator ist ja im Konverter bereits voreingestellt.
-