NEWS
Daten von USB (seriell) an Datenpunkt übergeben
-
Moin
Dies ist mein erster Beitrag hier: Tolles Projekt und tolles Forum.
Bisher hat mich lesen schon weit gebracht. Nun muss ich aber fragen.
Bei mir läuft Iobroker auf einem Raspberry. Ich habe schon viele Objekte eingebunden: Fritz Box, Sonoffs, Mqtt...
Nun möchte ich noch meinen Füllstand des Öltanks visualisieren.
Es handelt sich hier um einen Ultraschall System. Der Monitor hat eine serielle Schnittstelle über USB. Der Monitor sendet alle 60min einen Datensatz mit 22Byte rüber. Mich interessieren 2 Bits. Bit 17 und 18 beinhalten meine Restölmenge in Litern.
Mir fehlt nun ein Ansatz, wie ich diese Bytes als Datenpunkt bekomme.
Kann mich bitte jemand auf den richtigen Weg schubsen?
Danke und Gruss
Björn -
@Bjoern77 Serieller Eingang via USB? Da fällt mir der Smarmeter-Adapter ein https://github.com/Apollon77/ioBroker.smartmeter , den ich allerdings selbst nicht benutze und selbst nicht kenne.
Der RFLInk-Adapter verwendet auch Serial via USB, hat aber eine auf RFLink zugeschnittene Auswertung. -
Hallo
Danke für die schnelle Antwort.
Ich bin ein Stück weiter. Ich habe es mit Node Red versucht. Dort gibt es eine Serial In.
Ich bekomme die Daten auch in einen Buffer. Nur dann komme ich nicht weiter.Der Buffer sieht so aus:
Raw:
[83,73,0,22,2,16,11,30,27,80,94,82,94,0,0,0,9,217,15,57,70,169,83,73,0,22,2,16,12,2,25,80,94,82,94,0,0,0,9,217,15,57,40,6,83,73,0,22,2,16,12,34,23,80,94,82,94,87,0,56,9,217,15,57,232,232,83,73,0,22,2,16,13,6,20,80,94,82,94,0,0,0,9,217,15,57,67,195,83,73,0,22,2,16,13,38,18,80,94,82,94,88,0,56,9,217,15,57,18,108,83,73,0,22,2,16,14,10]Ich brauch nur die ersten 22byte:
83,73,0,22,2,16,11,30,27,80,94,82,94,0,0,0,9,217,15,57,70,169Nun kommt die Frage, wie ich aus diesem Buffer meine 22byte schnippel und daraus dann meine Byte 16 und 17?
Und dann muss ich den Wert von Byte 16 * 256 multiplizieren und den Wert von Byte 17 addieren.
Das Ergebnis ist dan 2521 Liter Restmenge im Öltank.
Nur wie sag ich es der Software?
Hat jemand einen Ansatz für mich?
Danke und Gruß
Björn -
@Bjoern77 am besten du versuchst irgendwie diesen buffer in einen iobroker datenpunkt (string) zu schreiben - ein kleines script erledigt den rest
-
-
Moin
Danke für die Antworten.
Ich denke die Zählung beginnt mit 0.
Meine "wichtigen" Bytes sind 16 mit Wert 9 und Byte 17 mit Wert 217.
9 * 256 + 217 = Restöl.
Aber wie ich das Umsätze...???
Danke und Gruß
Björn -
Moin
Ein Weihnachtswunder: Es funktioniert!
Also, wer eine Proteus Füllstandsanzeige einbinden möchte, kann das mit Node Red machen.
Man benötigt die Serial Node.
Zerlegt wird das ganze mit einer Funktion wie dieser:let arr = []; arr.push(...msg.payload); let result = 256 * arr[16] + arr[17]; msg.payload = result; return msg;
Hier der gesamte Flow mit den richtigen Settings für die Serielle:
[ { "id": "99d77eab.d4a9d8", "type": "tab", "label": "Buffer to Array", "disabled": false, "info": "" }, { "id": "59d5a970.095358", "type": "function", "z": "99d77eab.d4a9d8", "name": "Calculate result", "func": "let arr = [];\narr.push(...msg.payload);\n\nlet result = 256 * arr[16] + arr[17];\nmsg.payload = result;\nreturn msg;", "outputs": 1, "noerr": 0, "x": 460, "y": 200, "wires": [ [ "44e6b472.074a3c", "f5e44a87.62f1a8" ] ] }, { "id": "8e1b88dd.fd1038", "type": "serial in", "z": "99d77eab.d4a9d8", "name": "", "serial": "a2f7fb51.59e46", "x": 220, "y": 200, "wires": [ [ "59d5a970.095358" ] ] }, { "id": "f5e44a87.62f1a8", "type": "ui_text", "z": "99d77eab.d4a9d8", "group": "ebfa9ff4.005738", "order": 3, "width": 0, "height": 0, "name": "", "label": "text", "format": "{{msg.payload}}", "layout": "row-spread", "x": 660, "y": 240, "wires": [] }, { "id": "44e6b472.074a3c", "type": "debug", "z": "99d77eab.d4a9d8", "name": "", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "false", "x": 680, "y": 160, "wires": [] }, { "id": "a2f7fb51.59e46", "type": "serial-port", "z": "", "serialport": "/dev/ttyUSB0", "serialbaud": "115200", "databits": "8", "parity": "none", "stopbits": "1", "waitfor": "", "dtr": "none", "rts": "none", "cts": "none", "dsr": "none", "newline": "10000", "bin": "bin", "out": "time", "addchar": "", "responsetimeout": "10000" }, { "id": "ebfa9ff4.005738", "type": "ui_group", "z": "", "name": "Test", "tab": "64424ddc.01020c", "disp": true, "width": "6", "collapse": false }, { "id": "64424ddc.01020c", "type": "ui_tab", "z": "", "name": "Home", "icon": "dashboard", "disabled": false, "hidden": false } ]
Schönes Fest und Gruß
Björn -
@Bjoern77 herzlichen Glückwunsch zum Erfolg und vielen Dank für die Rückmeldung