NEWS
I2C-Bus auslesen
-
Hallo,
ich kämpfe immer noch mit dem I2C-Bus das Beispiel soll eine Temperatur auslesen und auf einem Debug Node abzeigen
habe allerdings nun eine funktionierende Lösung … verstehe sie aber nicht
neu wurde ein Change Node eingefügt.
Darin steht eine Formel die mit der Aufgabe nichts zu tun hat
Seitdem wird am Debug Node der richtige Wert angezeigt.
Kennt da jemand die Erklärung?
> [{"id":"196f2db3.ca5ba2","type":"inject","z":"31c65011.a45468","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":100,"y":380,"wires":[["cb80319c.2ac42"]]},{"id":"43e4dd20.9ca9d4","type":"change","z":"31c65011.a45468","name":"buffer","rules":[{"t":"set","p":"buffer","pt":"msg","to":"$round((payload.\"1\" + (256 * payload.\"0\"))/1.2,2)","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":270,"y":300,"wires":[["a868659d.91d9b8"]]},{"id":"a868659d.91d9b8","type":"debug","z":"31c65011.a45468","name":"","active":true,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","x":450,"y":300,"wires":[]},{"id":"cb80319c.2ac42","type":"i2c in","z":"31c65011.a45468","name":"Temp-Baustein","address":"72","command":"0","count":"1","x":280,"y":380,"wires":[["43e4dd20.9ca9d4"]]}]
-
Also dein flow passt vorn und hinten nicht zusammen. Dein debug-node zeigt genau den payload an, den dein i2c-node ausgibt.
Dein change-node tut eigentlich gar nichts sinnvolles.
$round( ( payload."1" + (256 * payload."0") )/1.2, 2 )
Der JSONata Ausdruck soll eine msg-property namens buffer setzen.
Und zwar aus dem Eingangs payload."1", was immer das sein soll ? Ein payload."2" gibt es ebenso wenig. Ergo, das Ergebnis des Ausdruckes ist null und eine property buffer wird nicht gebildet.
Payload wird von change-node nicht angefasst und einfach an den Aufgang weitergereicht. Was du siehst sollte der buffer des i2c-nodes sein.
Vlt. solltest du einfach mal erklären, was das change-node denn machen SOLLTE.
Ich hab jetzt weder deinen Sensor, noch einen raspi um das zu testen. Aber wenn ich das i2c-node richtig interpretiere liefert es nach deinen Einstellungen das Ergebnis des Command=0 als buffer mit der Länge 1 zurück.
Und nach dem Datenblatt des TC74x ist das die Temperatur im 2er Complement (standard Int8).
Du musst also lediglich dein bufferbyte zurück nach int8 konvertieren, das kannst du z.B. so machen:
! ````
[{"id":"5a33628b.2780dc","type":"function","z":"6afed17e.ffe838","name":"buffer 0x7e => 126 ","func":"var buf = new Buffer(1);\nbuf.writeInt8(0x7e, 0);\nmsg.payload = buf;\nreturn msg;","outputs":1,"noerr":0,"x":390,"y":180,"wires":[["cac70295.1dfce","fd7a7c41.1e68e8"]]},{"id":"edfe5e88.96bd2","type":"inject","z":"6afed17e.ffe838","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":380,"y":140,"wires":[["5a33628b.2780dc"]]},{"id":"cac70295.1dfce","type":"function","z":"6afed17e.ffe838","name":"buffer to int8","func":"msg.payload = msg.payload.readInt8();\nreturn msg;","outputs":1,"noerr":0,"x":610,"y":180,"wires":[["9a8a088a.f95868"]]},{"id":"9a8a088a.f95868","type":"debug","z":"6afed17e.ffe838","name":"int from buffer","active":true,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","x":800,"y":180,"wires":[]},{"id":"fd7a7c41.1e68e8","type":"debug","z":"6afed17e.ffe838","name":"buffer from i2c","active":true,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","x":620,"y":240,"wires":[]},{"id":"6aff5297.e075e4","type":"comment","z":"6afed17e.ffe838","name":"das simuliert dein i2c","info":"","x":360,"y":60,"wires":[]},{"id":"8f89ae3f.6c71e","type":"comment","z":"6afed17e.ffe838","name":"das i2c liefert ein buf[1]","info":"","x":360,"y":100,"wires":[]},{"id":"95fc6ee4.aafac","type":"comment","z":"6afed17e.ffe838","name":"convertiert das buffer-byte nach integer","info":"","x":690,"y":100,"wires":[]}] Du musst eigentlich nur das mittlere function-node an dein i2c node hängen und gut is. Ich konnte jetzt nicht prüfen, ob das i2c das payload selber als buffer liefert (gehe ich mal von aus) oder ob es den buffer da als property innerhalb von payload gibt.
-
Herzlichen Dank für deine ausführliche Info!