@sborg
@JamesFrosch007
falls das Thema noch wen interessiert:
ich hab das mit Node-Red relativ einfach gelöst.
zusätzliches npm package node-red-node-serialport installiert
Node-Red-Flow
[
{
"id": "7f40fabab7ea23c0",
"type": "serial in",
"z": "c241f527b52bd10a",
"name": "GMC-320",
"serial": "15ad7491d36bd43d",
"x": 220,
"y": 100,
"wires": [
[
"222a8e8215c110c6"
]
]
},
{
"id": "222a8e8215c110c6",
"type": "function",
"z": "c241f527b52bd10a",
"name": "function 4",
"func": "//@superflip - 2025-03-25\n\nif (msg.payload && Buffer.isBuffer(msg.payload) && msg.payload.length > 0) {\n //read Buffer and write to local variable\n let buffer = msg.payload;\n let cpm = buffer.readUInt8(0);\n\n // check, if counter already exists\n if (!context.counterCPM) {\n context.counterCPM = 0; // Initialisiere den Zähler\n //first buffer is sometimes set to 128\n if (cpm == 128) {\n cpm=0;\n }\n }\n\n // calculate time since last reset\n let currentTime = new Date().getTime();\n if (!context.lastResetTime) {\n context.lastResetTime = currentTime;\n }\n\n //add new value to counter\n context.counterCPM += cpm;\n\n // if 60s are over\n if (currentTime - context.lastResetTime >= 60000) {\n // write msg.payload.total for further processing\n msg.payload = { total: context.counterCPM};\n // reset counter\n context.counterCPM = 0;\n context.lastResetTime = currentTime;\n }\n\n} \n\nreturn msg;\n",
"outputs": 1,
"timeout": 0,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 400,
"y": 100,
"wires": [
[
"72e83dc1246866b4"
]
]
},
{
"id": "72e83dc1246866b4",
"type": "switch",
"z": "c241f527b52bd10a",
"name": "",
"property": "payload.total",
"propertyType": "msg",
"rules": [
{
"t": "nnull"
}
],
"checkall": "true",
"repair": false,
"outputs": 1,
"x": 550,
"y": 100,
"wires": [
[
"755b9544f295d10a"
]
]
},
{
"id": "427bfe4a2025d94e",
"type": "ioBroker out",
"z": "c241f527b52bd10a",
"name": "CPM schreiben",
"topic": "0_userdata.0.test.radioactivity",
"ack": "true",
"autoCreate": "false",
"stateName": "",
"role": "",
"payloadType": "",
"readonly": "",
"stateUnit": "",
"stateMin": "",
"stateMax": "",
"x": 940,
"y": 100,
"wires": []
},
{
"id": "755b9544f295d10a",
"type": "change",
"z": "c241f527b52bd10a",
"name": "",
"rules": [
{
"t": "set",
"p": "payload",
"pt": "msg",
"to": "payload.total",
"tot": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 730,
"y": 100,
"wires": [
[
"427bfe4a2025d94e"
]
]
},
{
"id": "15ad7491d36bd43d",
"type": "serial-port",
"name": "",
"serialport": "/dev/ttyUSB0",
"serialbaud": "115200",
"databits": "8",
"parity": "none",
"stopbits": "1",
"waitfor": "",
"dtr": "none",
"rts": "none",
"cts": "none",
"dsr": "none",
"newline": "0x80",
"bin": "bin",
"out": "char",
"addchar": "",
"responsetimeout": "10000"
}
]