2 x GOK Senso4 einbinden

Hallo, ich bin gerade dabei daß man zwei Gasflaschen mit den GOK Senso4 überwachen kann und die Anzeige wie die Wasserlevel dargestellt werden.
Dazu habe ich mir in Node Red die functions vom Senso4 kopiert und die Variablen scalemac (für die BT MAC) und gokvalue zu scalemac2 und gokvalue2 geändert und den Gruppennamen zu Water / Gas angepasst. Zuvor werden die neuen Variablen gokvalue + gokvalue2 mit im init values Flow initalisiert.

Somit ist eine Eingabe einer zweiten Senso4 Waage möglich:

Aktuell habe ich dann im Sensor-Dashboard die gokvalue Werte anzeigen lassen:

image

Damit die Gaslevel Werte aber gespeichert werden und auch auf der IoT bridge angezeigt werden, sollten diese den ursprünglichen Variablen Level3+Level 4 übergeben werden.
Ich würde das gerne im Flow BLE connections in der function vor der Gaslevelanzeige machen:

if (msg.payload.includes(“timed out”)) {
return msg
}
else {
msg.payload = msg.payload.substring(2,msg.payload.length-2);
msg.payload = parseInt(msg.payload,16)+ “%”;
global.set(“gokvalue2”,msg.payload);
global.set(“Level4”,“gokvalue2”);
return msg;
}

Leider klappt das aber nicht.
@Vincent, wo ist da mein Fehler?

Gruß, Stefan

Habe festgestellt, dass die GAS Werte in VanPi irgendwie ingefroren sind.
Richtig wäre:
GAS-RE (C2:C3:8D:6A:56:AC) 43%
GAS-LI (E8:90:F1:27:62:19) 21%

Raspi liesst aber nur diese Werte aus, auch wenn mal eine Flasche nicht auf dem Sensor steht:

pi@pekaway:~$ python3 ~/pekaway/ble_py/goksenso4.py -d C2:C3:8D:6A:56:AC
b’2b’
pi@pekaway:~$ python3 ~/pekaway/ble_py/goksenso4.py -d E8:90:F1:27:62:19
b’2c’

Du weist mit global.set(“Level4”,“gokvalue2”); der Variable Level4 den String “gokvalue2” zu. Du brauchst aber den Wert, der in gokvalue2 drinsteht:

global.set(“Level4”, global.get(“gokvalue2”));

Ist deine GOK-App noch mit einer der Waagen verbunden? Es kann immer nur ein Gerät gleichzeitig auf die Bluetooth Ports zugreifen.

EDIT: Die App erwartet einen Integer von der Level4 Variable, es darf also kein String drin stehen. Du erzeugst aber mit dem “%”-Zeichen einen String

@Vincent Kann ich den String so generieren und gleichzeitig anzeigen?
if (msg.payload.includes(“timed out”)) {
return msg
}
else {
msg.payload = msg.payload.substring(2,msg.payload.length-2);
msg.payload.temp = parseInt(msg.payload, 16);
var gokvalue = parseInt(msg.payload, 16)
global.set(“Level3”, global.get(gokvalue));
msg.payload = parseInt(msg.payload, 16) + “%”;
return msg;
}

Ich bekomme aber im Debug diesen Fehler:

function : (error)

“Error: Invalid context key”

Auch ändern sich die Werte nicht. habe bereits BT am Handy ausgeschaltet.
Danke für Hilfe

Versuchs mal mit

if (msg.payload.includes("timed out")) {
    return msg
}
else {
    msg.payload = msg.payload.substring(2, msg.payload.length - 2);
    msg.payload = parseInt(msg.payload, 16);
    global.set("Level3", msg.payload);
    msg.payload = msg.payload + "%";
    global.set("gokvalue", msg.payload);
    return msg;
}

Hallo Vincent, habe deine function integriert.
Fehler kommt nun keiner mehr. Auf der Info Seite werden Werte angezeigt:
image

Aber die Werte kommen noch nicht über die IoT bridge.

Das grösste Problem ist aber, daß dei Werte nicht stimmen und sich die Werte nicht ändern, auch wenn gar keine Gasflaschen auf den Waagen stehen.

image

Die Variabeln sind aktuell so befüllt:
image

image

Schau mal in den Flow “Pekaway Shunt + Waterlevel Python”, dort werden alle 4 Level variablen alle 10 Sekunden neu geschrieben. Also überschrieben. Und wenn dort nichts anliegt, wird in die Variable eine null geschrieben. Du müsstest also die function Node für Level3 deaktivieren.

Wenn keine Gasflasche auf der Waage steht bekomme ich den Wert angezeigt, der zuletzt gemessen wurde. Stell mal die Flaschen wieder auf die Waagen, kalibrier sie in der Senso4s App neu, trenne die BT Verbindung zwischen Smartphone und Waagen und versuche es dann nochmal.

EDIT: die Senso4s App sollte dir auch eine Fehlermeldung ausgeben, wenn Flaschen nicht mehr auf den Waagen stehen.

EDIT2: Auf der Seite von Senso4s steht noch folgendes:

https://www.senso4s.com/how-it-works/#faq

Die function für Level3+4 habe ich deaktiviert. nun zeigt die Info Seite bei den Levels nur noch 0 an.
Bei der config Seite Bluetooth, werden die letzten falschen Werte angezeigt.
Eine Abfrage über SSH liest aber die richtigen Werte aus (2b + 19 (43%+25%)

Habe im Debug zufällig diesen Fehler gesehen :+1:
10.1.2023, 18:09:28
msg : string[1369]
“[GenericBLE:ERROR] Rejected send message, 2 matched rules; type=“method_call”, sender=”:1.8" (uid=1000 pid=356 comm=“node --max_old_space_size=1024 /usr/lib/node_modul”) interface=“org.freedesktop.DBus.Introspectable” member=“Introspect” error name=“(unset)” requested_reply=“0” destination=“org.bluez” (uid=0 pid=566 comm=“/usr/lib/bluetooth/bluetoothd “), DBusError: Rejected send message, 2 matched rules; type=“method_call”, sender=”:1.8” (uid=1000 pid=356 comm=“node --max_old_space_size=1024 /usr/lib/node_modul”) interface=“org.freedesktop.DBus.Introspectable” member=“Introspect” error name=“(unset)” requested_reply=“0” destination=“org.bluez” (uid=0 pid=566 comm="/usr/lib/bluetooth/bluetoothd “)↵ at _methodReturnHandlers. (/home/pi/.node-red/node_modules/dbus-next/lib/bus.js:339:27)↵ at handleMessage (/home/pi/.node-red/node_modules/dbus-next/lib/bus.js:98:11)↵ at EventEmitter. (/home/pi/.node-red/node_modules/dbus-next/lib/bus.js:147:9)↵ at EventEmit…”

10.1.2023, 18:09:28
msg : string[170]
“The error seems to be a BlueZ Permission Error. See ‘Installation Note’ in README at node-red-contrib-generic-ble (node) - Node-RED for addressing the issue.”

Deine “EDIT´s” kann ich bestätigen.

Wir benutzen die Generic BLE Node nicht, sondern starten den Befehl, der auch über SSH benutzt wird, mit der Exec Node.
Im Frontend wird jetzt nur noch 0 angezeigt, weil den Variablen ja keine Werte mehr zugewiesen werden.

Jetzt verstehe ich gar nichts mehr.
Es gibt doch die GOK Config in BLE .
Dort wird die GOK Abfrage gemacht und nun die Variable zu Level3+4 gesetzt. Nun sagst du dass diese Abfrage nicht verwndet wird ?

Kannst du mir nun ganz konkret sagen was gemacht werden muss, damit die abgefragten GOK Werte in Level 3+4 Info und somit auch in IotT bridge angezeigt werden ? Nicht dass ich und du aneinander vorbei reden und den ganzen NodeRed durcheinander brinegn :wink:

Gruss, Stefan

Richtig, die GOK Abfrage wird mithilfe von Exec Nodes gemacht. In deinem Debug Output steht jetzt aber was über die generic-ble Node.
Ich kann ja nur damit arbeiten was ich von dir bekomme, ich weiß nicht wie dein Flow aussieht, was du alles verändert hast und wo deine Debugs herkommen :smiley:

Die Schritte:

  • Du kopierst dir die Nodes, die die Abfrage für die Senso4s ausführen
  • Die kopierten Nodes hängst du quasi direkt an die erste Abfrage (am besten mit einem kurzen Delay dazwischen), allerdings so, dass die zweit MAC-Adresse gesetzt wird
  • Dann werden die Werte in die globalen Variablen für Level3 und Level4 geschrieben (wichtig: als Zahl, nicht als String, für die IoT-Bridge!)
  • Und dann noch die entsprechenden Werte den Dashboard Nodes zuführen, damit es auch dort richtig angezeigt wird.

Hallo Vincent, werde ich so probieren.
Da ich vielleicht auch zuviel geändert habe, möchte ich gerne die NodeRed Flows zurücksetzen. Wie könnte ich das am Besten machen?

Damit du dir besser ein Bild machen kannst, wie ich die Nodes kopiert und geändert habe, die Frage, wie kann ich dir diese am Besten zukommen lassen?

Du markierst die Nodes in Node-RED, gehst dann rechts oben auf das Hamburger Menü, Export, und dann als JSON (kompakt) exportieren. Dann kannst du sie hier einfügen.
Dafür machst du dir zwei mal 3 Backticks ``` und fügst sie dazwischen ein:

```
hier Code einfügen
```

Alternativ kannst du hier in Discourse oben im Bearbeitunggsfenster auf “Preformatted Text” klicken.

Um alle Veränderungen rückgängig zu machen müsstest du dir ein neues Image flashen. Es sei denn du hast vorher ein Backup deiner Flows gemacht, dann kannst du auch das benutzen.

Sodele, scheint soweit zu gehen. Werte werden auch an Homebridge übertragen.
Aber so wie es aussieht, startet der Abfrage timestamp nach einem Neustart erst, nach dem man die BT MAC neu eingegeben hat.
Anbei meine Nodes :+1:

GOK2.json (11.7 KB)

Ja fast, nur dass du jetzt eine Datei hochgeladen hast, die wird nicht als “Preformatted Text” formatiert, das ist nur für Code. Also was ich eigentlich wollte ist, dass du direkt den exportierten Code hochlädst und nicht erst in einer Datei abspeicherst. Aber so geht es erstmal auch

[{"id":"7344abfca935d13c","type":"ui_dropdown","z":"40d4ba5c28e4a6be","name":"","label":"GOK Senso4s 1","tooltip":"","place":"Select option","group":"c3110bd0cd79c2a1","order":4,"width":0,"height":0,"passthru":false,"multiple":false,"options":[],"payload":"","topic":"topic","topicType":"msg","className":"","x":780,"y":660,"wires":[["8a7ad70a77881edc"]]},{"id":"8a7ad70a77881edc","type":"function","z":"40d4ba5c28e4a6be","name":"","func":"if (msg.payload == \"\" || msg.payload == \"no bt scale\") {\n    global.set(\"scalemac\", 0)\n    msg.payload = 0\n    return [msg, null];\n}\nelse if (msg.payload == \"insert manually\") {\n    msg.payload = \"Please enter the MAC adddress:\"\n    return [null, msg]\n}\nelse {\n    msg.scalemac = msg.payload.substring(0,17);\n    global.set(\"scalemac\", msg.scalemac)\n    msg.payload = msg.scalemac\n    return [msg, null];\n}\n","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":940,"y":660,"wires":[["b965f0e05d674b8b","bd1eede2780cebf7"],["499e5ee09bb144b0"]]},{"id":"0c69cbd98298fc86","type":"exec","z":"40d4ba5c28e4a6be","command":"","addpay":"payload","append":"","useSpawn":"false","timer":"","winHide":false,"oldrc":false,"name":"","x":1450,"y":760,"wires":[["3404009d3efa656f"],[],[]]},{"id":"3404009d3efa656f","type":"function","z":"40d4ba5c28e4a6be","name":"","func":"if (msg.payload.includes(\"timed out\")) {\n    return msg\n}\nelse {\n    msg.payload = msg.payload.substring(2, msg.payload.length - 2);\n    msg.payload = parseInt(msg.payload, 16);\n    global.set(\"Level3\", msg.payload);\n    msg.payload = msg.payload + \"%\";\n    global.set(\"gokvalue\", msg.payload);\n    return msg;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1600,"y":760,"wires":[["dfb2ee3a1059628f"]]},{"id":"bd1eede2780cebf7","type":"function","z":"40d4ba5c28e4a6be","name":"global get device MAC","func":"msg.payload = global.get(\"scalemac\");\nif(msg.payload == undefined || msg.payload == \"turn off\" || msg.payload == 0 || msg.payload == \"turned off\" || msg.payload == \"Scan Bluetooth first\") {\n    return null;\n}\nelse {\n    msg.payload = \"python3 pekaway/ble_py/goksenso4.py -d \" + global.get(\"scalemac\");\n    return msg;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1280,"y":760,"wires":[["0c69cbd98298fc86"]]},{"id":"e6e313ba570b1c43","type":"inject","z":"40d4ba5c28e4a6be","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"10800","crontab":"","once":true,"onceDelay":"20","topic":"","payload":"","payloadType":"date","x":1030,"y":760,"wires":[["bd1eede2780cebf7"]]},{"id":"499e5ee09bb144b0","type":"ui_toast","z":"40d4ba5c28e4a6be","position":"prompt","displayTime":"3","highlight":"","sendall":false,"outputs":1,"ok":"OK","cancel":"Cancel","raw":false,"className":"","topic":"","name":"","x":1090,"y":660,"wires":[["a37638159bf60e43"]]},{"id":"a37638159bf60e43","type":"function","z":"40d4ba5c28e4a6be","name":"","func":"if (msg.payload == \"Cancel\") {\n    global.set(\"scalemac\", 0)\n    return null\n}\nelse {\n    global.set(\"scalemac\", msg.payload.trim())\n    msg.payload = global.get(\"scalemac\");\n    return msg\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1240,"y":660,"wires":[["b4323fc4266da3fc","bd1eede2780cebf7"]]},{"id":"b965f0e05d674b8b","type":"file","z":"40d4ba5c28e4a6be","name":"","filename":"pekaway/MACbtscale","filenameType":"str","appendNewline":false,"createDir":true,"overwriteFile":"true","encoding":"none","x":1300,"y":600,"wires":[["12a38b124dd8b4e4"]]},{"id":"b4323fc4266da3fc","type":"file","z":"40d4ba5c28e4a6be","name":"","filename":"pekaway/MACbtscale","filenameType":"str","appendNewline":false,"createDir":true,"overwriteFile":"true","encoding":"none","x":1460,"y":660,"wires":[["12a38b124dd8b4e4"]]},{"id":"60c4446af7b83bfc","type":"file in","z":"40d4ba5c28e4a6be","name":"","filename":"pekaway/MACbtscale","filenameType":"str","format":"utf8","chunk":false,"sendError":false,"encoding":"none","allProps":false,"x":1300,"y":560,"wires":[["12a38b124dd8b4e4"]]},{"id":"38528e2ba5d0f2f2","type":"ui_text","z":"40d4ba5c28e4a6be","group":"c3110bd0cd79c2a1","order":5,"width":0,"height":0,"name":"","label":"Currently set (Senso4s 1): ","format":"{{msg.payload}}","layout":"row-spread","className":"","x":1810,"y":620,"wires":[]},{"id":"12a38b124dd8b4e4","type":"function","z":"40d4ba5c28e4a6be","name":"","func":"if (msg.payload == 0) {\n    msg.payload = \"turned off\"\n    node.send([null, msg])\n    global.set(\"scalemac\", msg.payload)\n}\nelse if (msg.payload == \"Scan Bluetooth first\") {\n    var scanfirst = msg.payload\n    msg.payload = \"turned off\"\n    node.send([null, msg])\n    global.set(\"scalemac\", msg.payload)\n    msg.payload = scanfirst\n}\nreturn [msg, null];","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1600,"y":620,"wires":[["38528e2ba5d0f2f2"],["dfb2ee3a1059628f"]]},{"id":"dfb2ee3a1059628f","type":"ui_text","z":"40d4ba5c28e4a6be","group":"c3110bd0cd79c2a1","order":6,"width":0,"height":0,"name":"","label":"GOK Senso4s 1:","format":"{{msg.payload}}","layout":"row-spread","className":"","x":1790,"y":760,"wires":[]},{"id":"c5883179193b6d11","type":"comment","z":"40d4ba5c28e4a6be","name":"Request value from bt scale","info":"","x":1060,"y":720,"wires":[]},{"id":"94b32c67a767772c","type":"function","z":"40d4ba5c28e4a6be","name":"create dropdown options on startup","func":"msg.options = [ \"no bt scale\", \"insert manually\" ]\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":500,"y":660,"wires":[["7344abfca935d13c","1ad68b37610aff1d"]]},{"id":"6469e7bed9b43180","type":"ui_dropdown","z":"40d4ba5c28e4a6be","name":"","label":"GOK Senso4s 2","tooltip":"","place":"Select option","group":"c3110bd0cd79c2a1","order":4,"width":0,"height":0,"passthru":false,"multiple":false,"options":[],"payload":"","topic":"topic","topicType":"msg","className":"","x":780,"y":940,"wires":[["71dbd0c95114165a"]]},{"id":"71dbd0c95114165a","type":"function","z":"40d4ba5c28e4a6be","name":"","func":"if (msg.payload == \"\" || msg.payload == \"no bt scale\") {\n    global.set(\"scalemac2\", 0)\n    msg.payload = 0\n    return [msg, null];\n}\nelse if (msg.payload == \"insert manually\") {\n    msg.payload = \"Please enter the MAC adddress:\"\n    return [null, msg]\n}\nelse {\n    msg.scalemac = msg.payload.substring(0,17);\n    global.set(\"scalemac2\", msg.scalemac2)\n    msg.payload = msg.scalemac2\n    return [msg, null];\n}\n","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":940,"y":940,"wires":[["1693575620604d6e","207d94b50c0ce63b"],["1693575620604d6e"]]},{"id":"1693575620604d6e","type":"ui_toast","z":"40d4ba5c28e4a6be","position":"prompt","displayTime":"3","highlight":"","sendall":false,"outputs":1,"ok":"OK","cancel":"Cancel","raw":false,"className":"","topic":"","name":"","x":1090,"y":940,"wires":[["a390188953d97bfa"]]},{"id":"a390188953d97bfa","type":"function","z":"40d4ba5c28e4a6be","name":"","func":"if (msg.payload == \"Cancel\") {\n    global.set(\"scalemac2\", 0)\n    return null\n}\nelse {\n    global.set(\"scalemac2\", msg.payload.trim())\n    msg.payload = global.get(\"scalemac2\");\n    return msg\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1240,"y":940,"wires":[["28811c833fc1f02e","78dfa1fe230ebf4d"]]},{"id":"28811c833fc1f02e","type":"file","z":"40d4ba5c28e4a6be","name":"","filename":"pekaway/MACbtscale2","filenameType":"str","appendNewline":false,"createDir":true,"overwriteFile":"true","encoding":"none","x":1460,"y":940,"wires":[["8818c089f853f73f"]]},{"id":"a47353605beaf0a8","type":"function","z":"40d4ba5c28e4a6be","name":"global get device MAC","func":"msg.payload = global.get(\"scalemac2\");\nif(msg.payload == undefined || msg.payload == \"turn off\" || msg.payload == 0 || msg.payload == \"turned off\" || msg.payload == \"Scan Bluetooth first\") {\n    return null;\n}\nelse {\n    msg.payload = \"python3 pekaway/ble_py/goksenso4.py -d \" + global.get(\"scalemac2\");\n    return msg;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1280,"y":1040,"wires":[["b8e77d05857869aa"]]},{"id":"20b0897045eb02ad","type":"inject","z":"40d4ba5c28e4a6be","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"10800","crontab":"","once":true,"onceDelay":"20","topic":"","payload":"","payloadType":"date","x":810,"y":1040,"wires":[["78dfa1fe230ebf4d"]]},{"id":"89604bfac7832fdb","type":"comment","z":"40d4ba5c28e4a6be","name":"Request value from bt scale","info":"","x":1060,"y":1000,"wires":[]},{"id":"b8e77d05857869aa","type":"exec","z":"40d4ba5c28e4a6be","command":"","addpay":"payload","append":"","useSpawn":"false","timer":"","winHide":false,"oldrc":false,"name":"","x":1450,"y":1040,"wires":[["1b89a10fba7c4627"],[],[]]},{"id":"8818c089f853f73f","type":"function","z":"40d4ba5c28e4a6be","name":"","func":"if (msg.payload == 0) {\n    msg.payload = \"turned off\"\n    node.send([null, msg])\n    global.set(\"scalemac2\", msg.payload)\n}\nelse if (msg.payload == \"Scan Bluetooth first\") {\n    var scanfirst = msg.payload\n    msg.payload = \"turned off\"\n    node.send([null, msg])\n    global.set(\"scalemac2\", msg.payload)\n    msg.payload = scanfirst\n}\nreturn [msg, null];","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1600,"y":840,"wires":[["d3ee107c99438534"],["d51a6e6f22c17bcb"]]},{"id":"d3ee107c99438534","type":"ui_text","z":"40d4ba5c28e4a6be","group":"c3110bd0cd79c2a1","order":5,"width":0,"height":0,"name":"","label":"Currently set (Senso4s 2): ","format":"{{msg.payload}}","layout":"row-spread","className":"","x":1810,"y":840,"wires":[]},{"id":"1b89a10fba7c4627","type":"function","z":"40d4ba5c28e4a6be","name":"","func":"if (msg.payload.includes(\"timed out\")) {\n    return msg\n}\nelse {\n    msg.payload = msg.payload.substring(2, msg.payload.length - 2);\n    msg.payload = parseInt(msg.payload, 16);\n    global.set(\"Level4\", msg.payload);\n    msg.payload = msg.payload + \"%\";\n    global.set(\"gokvalue2\", msg.payload);\n    return msg;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1620,"y":1040,"wires":[["d51a6e6f22c17bcb"]]},{"id":"d51a6e6f22c17bcb","type":"ui_text","z":"40d4ba5c28e4a6be","group":"c3110bd0cd79c2a1","order":6,"width":0,"height":0,"name":"","label":"GOK Senso4s 2:","format":"{{msg.payload}}","layout":"row-spread","className":"","x":1790,"y":1040,"wires":[]},{"id":"f3d583a164878d1a","type":"file in","z":"40d4ba5c28e4a6be","name":"","filename":"pekaway/MACbtscale2","filenameType":"str","format":"utf8","chunk":false,"sendError":false,"encoding":"none","allProps":false,"x":1300,"y":840,"wires":[["8818c089f853f73f"]]},{"id":"207d94b50c0ce63b","type":"file","z":"40d4ba5c28e4a6be","name":"","filename":"pekaway/MACbtscale2","filenameType":"str","appendNewline":false,"createDir":true,"overwriteFile":"true","encoding":"none","x":1300,"y":880,"wires":[["8818c089f853f73f"]]},{"id":"1ad68b37610aff1d","type":"delay","z":"40d4ba5c28e4a6be","name":"","pauseType":"delay","timeout":"3","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":580,"y":940,"wires":[["6469e7bed9b43180"]]},{"id":"78dfa1fe230ebf4d","type":"delay","z":"40d4ba5c28e4a6be","name":"","pauseType":"delay","timeout":"3","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":1080,"y":1040,"wires":[["a47353605beaf0a8"]]},{"id":"c3110bd0cd79c2a1","type":"ui_group","name":"Bluetooth","tab":"b636dc7c12bc1a53","order":3,"disp":true,"width":"6","collapse":false,"className":""},{"id":"b636dc7c12bc1a53","type":"ui_tab","name":"System Config","icon":"dashboard","order":10,"disabled":false,"hidden":true}]

Also das sieht doch soweit ganz gut aus.
Was mir auffällt ist, dass du ja jetzt zwei timestamps hast, die beide regelmäßig die jeweilige Waage abfragen. die beiden timestamps starten aber zur gleichen Zeit und es kann immer nur eine Bluetooth Abfrage auf einmal durchgehen. Ich würde also das ganze so machen, dass die zweite Abfrage einfach direkt nach der ersten Abfrage ausgeführt wird:

Dann kann der zweite timestamp weg und kommt nicht mehr in die Quere.
Jetzt werden die Abfragen jeweils einmal ausgeführt wenn über das Dropdown Menü eine neue MAC-Adresse eingetragen wird und alle 180min über den timestamp. Die function Nodes fragen dann ja jeweils ab ob eine MAC Adresse eingetragen ist.
Heißt aber auch, dass so wie es in meinem Screenshot ist, die Abfrage gestoppt wird, wenn das erste Dropdown keine MAC Adresse hat. Du könntest die zweite Abfrage einfach direkt hinter den ersten timestamp hängen und das Delay (unten) noch etwas erhöhen.

Das Abfrageintervall kannst du direkt im timestamp anpassen, musst du dann mal sehen wie oft du die Werte aktualisiert haben willst ohne gleichzeitig die Batterie von den Waagen zu schnell leer zu ziehen.

Hallo Vincent, meinst das so bzgl. “zweite Abfrage einfach direkt hinter den ersten timestamp hängen” ?

Die Werte, die unter “GOK Senso4s 1/2” zu sehen sind, sind das die BT MAC Adressen? dann wären diese gleich, obwohl unterschiedlich im UI angezeigt.

@Vincent Leider aktualisieren sich die GOK Werte nicht.
Habe beide Flachen mit einer Beschwerung eingemessen. Diese Werte wurden bei der Initialisierung auch in VanPi übernommen. (43+67%).
Dann habe ich die Beschwerungen entfernt und 1h gewartet.
Lt. Handy App = 26,9+42,2%
In VanPi sind immer noch die alten Werte

Ich meine das so wie ich es in meinem Screenshot gezeigt habe.

Hast du die function Nodes überprüft, dass du nicht irgendwo den falschen Wert bei der zweiten MAC Adresse zuweist?

Was sagen die Waagen mit:

python3 pekaway/ble_py/goksenso4.py -d <MAC>