NEWS
Alfen Wallbox - Modbus mit Float und INT64
-
Hallo Leute,
ich habe gemäß der Anleitung von haus-automatisierung.com (Link) versucht meine Alfen Wallbox mit Node-Red auszulesen.
Den Großteil bekomme ich auch hin. Aber mit den FLOAT und bigint64 habe ich Probleme.So sieht es in Node-Red aus:
Das ist die Konfiguration für die (Uptime) Buffer-Parser-Node:
Das wäre die Einstellung gemäß Hersteller für die Adressen:
Das wäre der zugehörige Fehler-Log:
node-red.0 2023-04-29 14:00:28.321 error 29 Apr 14:00:28 - [error] [buffer-parser:93f8fd036c26bcc2] RangeError: The value of "offset" is out of range. It must be >= 0 and <= 0. Received 4 at new NodeError (node:internal/errors:387:5) at boundsError (node:internal/buffer:86:9) at Buffer.readFloatBackwards [as readFloatBE] (node:internal/buffer:518:5) at dataGetter (/opt/iobroker/iobroker-data/node-red/node_modules/node-red-contrib-buffer-parser/buffer-parser.js:378:31) at itemReader (/opt/iobroker/iobroker-data/node-red/node_modules/node-red-contrib-buffer-parser/buffer-parser.js:337:30) at parser (/opt/iobroker/iobroker-data/node-red/node_modules/node-red-contrib-buffer-parser/buffer-parser.js:475:25) at bufferParserNode._inputCallback (/opt/iobroker/iobroker-data/node-red/node_modules/node-red-contrib-buffer-parser/buffer-parser.js:761:31) at /opt/iobroker/node_modules/@node-red/runtime/lib/nodes/Node.js:210:26 at Object.trigger (/opt/iobroker/node_modules/@node-red/util/lib/hooks.js:166:13) at bufferParserNode.Node._emitInput (/opt/iobroker/node_modules/@node-red/runtime/lib/nodes/Node.js:202:11) node-red.0 2023-04-29 14:00:28.196 error 29 Apr 14:00:28 - [error] [buffer-parser:36b6db928c80dde6] RangeError: The value of "offset" is out of range. It must be >= 0 and <= 0. Received 4 at new NodeError (node:internal/errors:387:5) at boundsError (node:internal/buffer:86:9) at Buffer.readFloatBackwards [as readFloatBE] (node:internal/buffer:518:5) at dataGetter (/opt/iobroker/iobroker-data/node-red/node_modules/node-red-contrib-buffer-parser/buffer-parser.js:378:31) at itemReader (/opt/iobroker/iobroker-data/node-red/node_modules/node-red-contrib-buffer-parser/buffer-parser.js:337:30) at parser (/opt/iobroker/iobroker-data/node-red/node_modules/node-red-contrib-buffer-parser/buffer-parser.js:475:25) at bufferParserNode._inputCallback (/opt/iobroker/iobroker-data/node-red/node_modules/node-red-contrib-buffer-parser/buffer-parser.js:761:31) at /opt/iobroker/node_modules/@node-red/runtime/lib/nodes/Node.js:210:26 at Object.trigger (/opt/iobroker/node_modules/@node-red/util/lib/hooks.js:166:13) at bufferParserNode.Node._emitInput (/opt/iobroker/node_modules/@node-red/runtime/lib/nodes/Node.js:202:11) node-red.0 2023-04-29 14:00:28.071 error 29 Apr 14:00:28 - [error] [buffer-parser:a71b61da88b72f57] RangeError: The value of "offset" is out of range. It must be >= 0 and <= 0. Received 8 at new NodeError (node:internal/errors:387:5) at boundsError (node:internal/buffer:86:9) at Buffer.readBigUInt64BE (node:internal/buffer:117:5) at dataGetter (/opt/iobroker/iobroker-data/node-red/node_modules/node-red-contrib-buffer-parser/buffer-parser.js:378:31) at itemReader (/opt/iobroker/iobroker-data/node-red/node_modules/node-red-contrib-buffer-parser/buffer-parser.js:337:30) at parser (/opt/iobroker/iobroker-data/node-red/node_modules/node-red-contrib-buffer-parser/buffer-parser.js:467:25) at bufferParserNode._inputCallback (/opt/iobroker/iobroker-data/node-red/node_modules/node-red-contrib-buffer-parser/buffer-parser.js:761:31) at /opt/iobroker/node_modules/@node-red/runtime/lib/nodes/Node.js:210:26 at Object.trigger (/opt/iobroker/node_modules/@node-red/util/lib/hooks.js:166:13) at bufferParserNode.Node._emitInput (/opt/iobroker/node_modules/@node-red/runtime/lib/nodes/Node.js:202:11) node-red.0 2023-04-29 14:00:23.801 warn 29 Apr 14:00:23 - [warn] [modbus-client:Wallbox-Slave200] Client -> fsm connected after state init Get More About It By Logging TCP@192.168.1.106:502 default Unit-Id: 1 node-red.0 2023-04-29 14:00:21.899 error 29 Apr 14:00:21 - [error] [modbus-getter:100] Error: Client Not Ready To Read At State init at Object.<anonymous> (/opt/iobroker/iobroker-data/node-red/node_modules/node-red-contrib-modbus/modbus/maps/modbus-client.js:472:15) at Object.emit (node:events:513:28) at Object.origMsgInput [as emit] (/opt/iobroker/node_modules/@node-red/runtime/lib/nodes/Node.js:188:20) at Object._inputCallback (/opt/iobroker/iobroker-data/node-red/node_modules/node-red-contrib-modbus/modbus/maps/modbus-getter.js:104:13) at /opt/iobroker/node_modules/@node-red/runtime/lib/nodes/Node.js:210:26 at Object.trigger (/opt/iobroker/node_modules/@node-red/util/lib/hooks.js:166:13) at Object.Node._emitInput (/opt/iobroker/node_modules/@node-red/runtime/lib/nodes/Node.js:202:11) at Object.Node.emit (/opt/iobroker/node_modules/@node-red/runtime/lib/nodes/Node.js:186:25) at Object.Node.receive (/opt/iobroker/node_modules/@node-red/runtime/lib/nodes/Node.js:485:10) at Immediate._onImmediate (/opt/iobroker/node_modules/@node-red/runtime/lib/flows/Flow.js:831:52) node-red.0 2023-04-29 14:00:21.799 warn 29 Apr 14:00:21 - [warn] [modbus-client:Wallbox-Slave200] Client -> fsm init in 2000 ms TCP@192.168.1.106:502 default Unit-Id: 1 node-red.0 2023-04-29 14:00:21.799 warn 29 Apr 14:00:21 - [warn] [modbus-client:Wallbox-Slave200] Client -> fsm init state after new TCP@192.168.1.106:502 default Unit-Id: 1
Hat jemand eine Idee, wo mein Fehler liegt?
Danke euch -
@a1uca2d Na sieht so aus, als ob der offset falsch ist. Dir wird wohl nichts anderes übrig bleiben und mit debug nodes Deinen buffer zu untersuchen.
-
@mickym Wie stelle ich das den an (den Buffer weiter zu untersuchen)?
Ich dachte, dass ich mit dem Log (in ersten Post) bereits alle Daten habe, die es zu Sammeln gibt.Was ich nicht verstehe ist, dass es bei dem Tutorial mit einem Offset von 0 Funktioniert. Ich habe mittlerweile von 0-8 alles durch und es geht nicht.
Habe ich ggf. den Datentyp falsch angegeben? Ich habe bigUInt64 be (und Float be), die "original" Datentypen aus der Bedienungsanleitung finde ich in Node-Red nicht.Bild aus dem Tutorial:
-
@a1uca2d Also int16(be), nur der vorletzte ist ein längerer, wobei ein unint64 8 Bytes und nicht 4 Bytes sind. Diese Längenangaben schauen mir nach Words und nicht nach Bytes aus. Ein 16bit Integer umfasst 2 Bytes und nicht 1. Mach eine debug node hinter die modus node und vor die parser node und lies den Puffer aus, den Du da rein jagst. Normalerweise gibst du gar keine Längen ein, weil die parser node selbst weiß wie lange die Datentypen sind. Ich würde also immer Länge 1 eintragen und Offset 0 eintragen
Anhand des Logs im iobroker siehst du doch welche nodes eine Fehler schmeißen. Wenn ich Dir da wirklich helfen soll, dann musst du halt zeitnah das machen und den Flow untersuchen und die Daten hier posten. Ich selbst habe die Daten nicht und kein Modbus
-
@mickym Hier wäre nun mein Ergebnis. Hoffe das hilft
node-red.0 2023-05-15 14:03:55.068 info 15 May 12:03:55 - [info] [debug:debug 3] [ 16945, 0 ] node-red.0 2023-05-15 14:03:55.068 error 15 May 12:03:55 - [error] [buffer-parser:93f8fd036c26bcc2] RangeError: The value of "offset" is out of range. It must be >= 0 and <= 0. Received 2 at new NodeError (node:internal/errors:387:5) at boundsError (node:internal/buffer:86:9) at Buffer.readFloatBackwards [as readFloatBE] (node:internal/buffer:518:5) at dataGetter (/opt/iobroker/iobroker-data/node-red/node_modules/node-red-contrib-buffer-parser/buffer-parser.js:378:31) at itemReader (/opt/iobroker/iobroker-data/node-red/node_modules/node-red-contrib-buffer-parser/buffer-parser.js:337:30) at parser (/opt/iobroker/iobroker-data/node-red/node_modules/node-red-contrib-buffer-parser/buffer-parser.js:475:25) at bufferParserNode._inputCallback (/opt/iobroker/iobroker-data/node-red/node_modules/node-red-contrib-buffer-parser/buffer-parser.js:761:31) at /opt/iobroker/node_modules/@node-red/runtime/lib/nodes/Node.js:210:26 at Object.trigger (/opt/iobroker/node_modules/@node-red/util/lib/hooks.js:166:13) at bufferParserNode.Node._emitInput (/opt/iobroker/node_modules/@node-red/runtime/lib/nodes/Node.js:202:11) node-red.0 2023-05-15 14:03:54.944 info 15 May 12:03:54 - [info] [debug:debug 2] [ 16896, 0 ] node-red.0 2023-05-15 14:03:54.943 error 15 May 12:03:54 - [error] [buffer-parser:36b6db928c80dde6] RangeError: The value of "offset" is out of range. It must be >= 0 and <= 0. Received 2 at new NodeError (node:internal/errors:387:5) at boundsError (node:internal/buffer:86:9) at Buffer.readFloatBackwards [as readFloatBE] (node:internal/buffer:518:5) at dataGetter (/opt/iobroker/iobroker-data/node-red/node_modules/node-red-contrib-buffer-parser/buffer-parser.js:378:31) at itemReader (/opt/iobroker/iobroker-data/node-red/node_modules/node-red-contrib-buffer-parser/buffer-parser.js:337:30) at parser (/opt/iobroker/iobroker-data/node-red/node_modules/node-red-contrib-buffer-parser/buffer-parser.js:475:25) at bufferParserNode._inputCallback (/opt/iobroker/iobroker-data/node-red/node_modules/node-red-contrib-buffer-parser/buffer-parser.js:761:31) at /opt/iobroker/node_modules/@node-red/runtime/lib/nodes/Node.js:210:26 at Object.trigger (/opt/iobroker/node_modules/@node-red/util/lib/hooks.js:166:13) at bufferParserNode.Node._emitInput (/opt/iobroker/node_modules/@node-red/runtime/lib/nodes/Node.js:202:11) node-red.0 2023-05-15 14:03:54.819 info 15 May 12:03:54 - [info] [debug:debug 1] [ 0, 0, 1235, 24269 ] node-red.0 2023-05-15 14:03:54.818 error 15 May 12:03:54 - [error] [buffer-parser:a71b61da88b72f57] RangeError: The value of "offset" is out of range. It must be >= 0 and <= 0. Received 8 at new NodeError (node:internal/errors:387:5) at boundsError (node:internal/buffer:86:9) at Buffer.readBigUInt64BE (node:internal/buffer:117:5) at dataGetter (/opt/iobroker/iobroker-data/node-red/node_modules/node-red-contrib-buffer-parser/buffer-parser.js:378:31) at itemReader (/opt/iobroker/iobroker-data/node-red/node_modules/node-red-contrib-buffer-parser/buffer-parser.js:337:30) at parser (/opt/iobroker/iobroker-data/node-red/node_modules/node-red-contrib-buffer-parser/buffer-parser.js:467:25) at bufferParserNode._inputCallback (/opt/iobroker/iobroker-data/node-red/node_modules/node-red-contrib-buffer-parser/buffer-parser.js:761:31) at /opt/iobroker/node_modules/@node-red/runtime/lib/nodes/Node.js:210:26 at Object.trigger (/opt/iobroker/node_modules/@node-red/util/lib/hooks.js:166:13) at bufferParserNode.Node._emitInput (/opt/iobroker/node_modules/@node-red/runtime/lib/nodes/Node.js:202:11)
-
@a1uca2d sagte in Alfen Wallbox - Modbus mit Float und INT64:
So also das sind 16bit Integer Arrays und mE funktionieren die. War zwar bissi mühsam, dass aus deinem Log zusammenzusuchen:
Oben das dürfte die Uptime in ms sein. (also ca. 22 Std. wenn ich das richtig lese).
dann die Anzahl der Stations = 32
und dann die Temperatur = 44,25°CHier mal zum Import:
Keine Ahnung was Du da eingegeben hast. Wie gesagt nichts mit Offset oder Längen rumspielen.
-
@mickym Damit habe ich es verstanden. bei dem uInt64 muss ich bei dem Buffer parser die länge 1 angeben und nicht länge 4.
Danke dir für die Hilfe. Nun läuft es. -
@a1uca2d Die Länge wie ein Wert abgebildet wird, weiß der Parser doch selbst durch den Datentyp.
- Die Länge 4 in der Beschreibung gibt nur die Menge der Int16 Werte an, die so ein bigInt hat.
Die 4 zeigen also nur [ 0, 0, 1235, 24269 ] die Anzahl der Integerwerte, die eingehen. Bei der Länge von 4 und bigint64 - würde der Parser als 16 Int16- Werte erwarten.