Genau.
Na klar. Siehe Screenshot.
Ja, sind sie. Insg. sind es 7Stk. 2er Hexpaare + Checksumme. Ich hab mal ein Screenshot aus Node Red angehangen die diese live aussehen. In den Fall ist die "04" die Prüfsumme. Wenn man es nachrechnet passt es auch. 05 XOR 01 = 04.
In Node Red hab ich schon die Daten geteilt und in ioBroker-Objekte geschrieben. Hier gibt es die Funktion "Test", wo ich schon versuchte, die komplett empfangenen Daten mit XOR zu errechnen. Da komme ich aber nicht weiter.
[
{
"id": "2da69b37.1df24c",
"type": "tab",
"label": "HAA Empfangen",
"disabled": false,
"info": "Empfangene Daten werden hier auf den jeweiligen\nBytes gekürzt und maskiert."
},
{
"id": "fc292ded.300e98",
"type": "debug",
"z": "2da69b37.1df24c",
"name": "Input ungekürzt",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "true",
"x": 400,
"y": 200,
"wires": []
},
{
"id": "46b4f56f.ea0dc4",
"type": "serial in",
"z": "2da69b37.1df24c",
"name": "Statusempfang",
"serial": "da7b24a1.565828",
"x": 120,
"y": 280,
"wires": [
[
"fc292ded.300e98",
"65ee1056.98349",
"92d59a98.232b7",
"c2cb0851.237438",
"1d1f4b9a.95161c",
"ea03f2c9.a0e1a"
]
]
},
{
"id": "65ee1056.98349",
"type": "function",
"z": "2da69b37.1df24c",
"name": "String kürzen (0. / 1. Stelle) / BAS",
"func": "var string = msg.payload; //ankommende payload speichern\n\n//String kürzen\nvar string_teil = string.substring(0,2);\n\nreturn [{payload: string_teil}];",
"outputs": 1,
"noerr": 0,
"x": 440,
"y": 280,
"wires": [
[
"381721c3.e06106"
]
]
},
{
"id": "92d59a98.232b7",
"type": "function",
"z": "2da69b37.1df24c",
"name": "String kürzen (2. / 3. Stelle) / SIR",
"func": "var string = msg.payload; //ankommende payload speichern\n\n//String kürzen\nvar string_teil = string.substring(2,4);\n\nreturn [{payload: string_teil}];",
"outputs": 1,
"noerr": 0,
"x": 440,
"y": 480,
"wires": [
[
"78bdb8a6.e688a"
]
]
},
{
"id": "c2cb0851.237438",
"type": "function",
"z": "2da69b37.1df24c",
"name": "String kürzen (4. / 5. Stelle) / REE",
"func": "var string = msg.payload; //ankommende payload speichern\n\n//String kürzen\nvar string_teil = string.substring(4,6);\n\nreturn [{payload: string_teil}];",
"outputs": 1,
"noerr": 0,
"x": 460,
"y": 680,
"wires": [
[
"dec6c73.c1cf638"
]
]
},
{
"id": "8a72b235.d47318",
"type": "function",
"z": "2da69b37.1df24c",
"name": "String kürzen (10. / 11. / 12. / 13. Stelle) / SW",
"func": "var string = msg.payload; //ankommende payload speichern\n\n//String kürzen\nvar string = string.substring(10,14);\n\nreturn [{payload: string}];",
"outputs": 1,
"noerr": 0,
"x": 500,
"y": 900,
"wires": [
[
"22af2a70.c8faee"
]
]
},
{
"id": "381721c3.e06106",
"type": "function",
"z": "2da69b37.1df24c",
"name": "BAS (Byte0) Splitten - Basis",
"func": "var bas_int = parseInt(msg.payload, 16); //ankommende Hex-Nachricht (Basis 16) in Integer wandeln\n\nvar kal = false;\nif((bas_int & 1) == \"1\") //Maskierung und gleichzeitig in Boolean ändern\n{\n kal = true;\n}\n\nvar val = false;\nif((bas_int & 2) == \"2\") //Maskierung und gleichzeitig in Boolean ändern\n{\n val = true;\n}\n\nvar alm = false;\nif((bas_int & 4) == \"4\") //Maskierung und gleichzeitig in Boolean ändern\n{\n alm = true;\n}\nvar als = false;\nif((bas_int & 8) == \"8\") //Maskierung und gleichzeitig in Boolean ändern\n{\n als = true;\n}\n\nvar alf = false;\nif((bas_int & 16) == \"16\") //Maskierung und gleichzeitig in Boolean ändern\n{\n alf = true;\n}\nvar sab = false;\nif((bas_int & 32) == \"32\") //Maskierung und gleichzeitig in Boolean ändern\n{\n sab = true;\n}\n\nreturn [{payload: kal}, {payload: val},{payload: alm}, {payload: als},{payload: alf}, {payload: sab}];",
"outputs": 6,
"noerr": 0,
"x": 920,
"y": 280,
"wires": [
[
"6d2f24fd.83778c"
],
[
"f57b8515.a2eb38"
],
[
"881e87f5.694ca"
],
[
"e928711b.a11db"
],
[
"a0fe88a7.655cf8"
],
[
"203ddcf0.ae3e1c"
]
]
},
{
"id": "881e87f5.694ca",
"type": "ioBroker out",
"z": "2da69b37.1df24c",
"name": "Alarm",
"topic": "node-red.0.HAA.Basis.Alarm",
"ack": "true",
"autoCreate": "true",
"x": 1230,
"y": 240,
"wires": []
},
{
"id": "6d2f24fd.83778c",
"type": "ioBroker out",
"z": "2da69b37.1df24c",
"name": "Kontaktalarm",
"topic": "node-red.0.HAA.Basis.Kontaktalarm",
"ack": "true",
"autoCreate": "true",
"x": 1250,
"y": 120,
"wires": []
},
{
"id": "e928711b.a11db",
"type": "ioBroker out",
"z": "2da69b37.1df24c",
"name": "Start",
"topic": "node-red.0.HAA.Basis.Start",
"ack": "true",
"autoCreate": "true",
"x": 1230,
"y": 300,
"wires": []
},
{
"id": "f57b8515.a2eb38",
"type": "ioBroker out",
"z": "2da69b37.1df24c",
"name": "Voralarm",
"topic": "node-red.0.HAA.Basis.Voralarm",
"ack": "true",
"autoCreate": "true",
"x": 1240,
"y": 180,
"wires": []
},
{
"id": "a0fe88a7.655cf8",
"type": "ioBroker out",
"z": "2da69b37.1df24c",
"name": "Scharf",
"topic": "node-red.0.HAA.Basis.Scharf",
"ack": "true",
"autoCreate": "true",
"x": 1230,
"y": 360,
"wires": []
},
{
"id": "203ddcf0.ae3e1c",
"type": "ioBroker out",
"z": "2da69b37.1df24c",
"name": "Sabotagekontakt",
"topic": "node-red.0.HAA.Basis.Sabotagealarm",
"ack": "true",
"autoCreate": "true",
"x": 1270,
"y": 420,
"wires": []
},
{
"id": "78bdb8a6.e688a",
"type": "function",
"z": "2da69b37.1df24c",
"name": "SIR (Byte1) Splitten - Sirene",
"func": "var sir_int = parseInt(msg.payload, 16); //ankommende Hex-Nachricht (Basis 16) in Integer wandeln\n\nvar sto = false;\nif((sir_int & 1) == \"1\") //Maskierung und gleichzeitig in Boolean ändern\n{\n sto = true;\n}\n\nreturn [{payload: sto}];",
"outputs": 1,
"noerr": 0,
"x": 920,
"y": 480,
"wires": [
[
"e9e1c426.6757f8"
]
]
},
{
"id": "e9e1c426.6757f8",
"type": "ioBroker out",
"z": "2da69b37.1df24c",
"name": "Störung",
"topic": "node-red.0.HAA.Sirene.Störung",
"ack": "true",
"autoCreate": "true",
"x": 1240,
"y": 480,
"wires": []
},
{
"id": "dec6c73.c1cf638",
"type": "function",
"z": "2da69b37.1df24c",
"name": "REE (Byte2) Splitten - Reedkontakte",
"func": "var ree_int = parseInt(msg.payload, 16); //ankommende Hex-Nachricht (Basis 16) in Integer wandeln\n\nvar ree0 = false;\nif((ree_int & 1) == \"1\") //Maskierung und gleichzeitig in Boolean ändern\n{\n ree0 = true;\n}\n\nvar ree1 = false;\nif((ree_int & 2) == \"2\") //Maskierung und gleichzeitig in Boolean ändern\n{\n ree1 = true;\n}\n\nvar ree2 = false;\nif((ree_int & 4) == \"4\") //Maskierung und gleichzeitig in Boolean ändern\n{\n ree2 = true;\n}\n\nvar ree3 = false;\nif((ree_int & 8) == \"8\") //Maskierung und gleichzeitig in Boolean ändern\n{\n ree3 = true;\n}\n\nvar ree4 = false;\nif((ree_int & 16) == \"16\") //Maskierung und gleichzeitig in Boolean ändern\n{\n ree4 = true;\n}\n\nvar ree5 = false;\nif((ree_int & 32) == \"32\") //Maskierung und gleichzeitig in Boolean ändern\n{\n ree5 = true;\n}\n\nreturn [{payload: ree0}, {payload: ree1},{payload: ree2}, {payload: ree3},{payload: ree4}, {payload: ree5}];",
"outputs": 6,
"noerr": 0,
"x": 950,
"y": 680,
"wires": [
[
"e6d3475a.15eed8"
],
[
"8f916e73.1d74b"
],
[
"de1a6728.a2b8"
],
[
"83b12b42.bbcc18"
],
[
"197e4e9a.388119"
],
[
"389d88ee.224938"
]
]
},
{
"id": "e6d3475a.15eed8",
"type": "ioBroker out",
"z": "2da69b37.1df24c",
"name": "Eingangstür",
"topic": "node-red.0.HAA.Reed.Eingangstür",
"ack": "true",
"autoCreate": "true",
"x": 1250,
"y": 540,
"wires": []
},
{
"id": "8f916e73.1d74b",
"type": "ioBroker out",
"z": "2da69b37.1df24c",
"name": "Eingangsfenster",
"topic": "node-red.0.HAA.Reed.Eingangsfenster",
"ack": "true",
"autoCreate": "true",
"x": 1260,
"y": 600,
"wires": []
},
{
"id": "de1a6728.a2b8",
"type": "ioBroker out",
"z": "2da69b37.1df24c",
"name": "Garage",
"topic": "node-red.0.HAA.Reed.Garage",
"ack": "true",
"autoCreate": "true",
"x": 1240,
"y": 660,
"wires": []
},
{
"id": "83b12b42.bbcc18",
"type": "ioBroker out",
"z": "2da69b37.1df24c",
"name": "Wohnzimmer",
"topic": "node-red.0.HAA.Reed.Wohnzimmer",
"ack": "true",
"autoCreate": "true",
"x": 1250,
"y": 720,
"wires": []
},
{
"id": "197e4e9a.388119",
"type": "ioBroker out",
"z": "2da69b37.1df24c",
"name": "Esszimmer",
"topic": "node-red.0.HAA.Reed.Esszimmer",
"ack": "true",
"autoCreate": "true",
"x": 1250,
"y": 780,
"wires": []
},
{
"id": "389d88ee.224938",
"type": "ioBroker out",
"z": "2da69b37.1df24c",
"name": "Keller",
"topic": "node-red.0.HAA.Reed.Keller",
"ack": "true",
"autoCreate": "true",
"x": 1230,
"y": 840,
"wires": []
},
{
"id": "22af2a70.c8faee",
"type": "function",
"z": "2da69b37.1df24c",
"name": "SW (Byte5/6) Splitten - Software",
"func": "var string = msg.payload; //ankommende payload speichern\n//vom string kürzen\nvar string_teil1 = string.substring(0,2);\nvar swh_hex = parseInt(string_teil1, 16); //ankommende Hex-Nachricht (Basis 16) in Integer wandeln\nvar string_teil2 = string.substring(2,4);\nvar swn_hex = parseInt(string_teil2, 16); //ankommende Hex-Nachricht (Basis 16) in Integer wandeln\n\n//----------SWH--------------\nvar swh = 0;\nif((swh_hex & 1) == \"1\") //Maskierung und gleichzeitig in eine Zahl wandeln\n{\n swh += 1;\n}\n\nif((swh_hex & 2) == \"2\") \n{\n swh += 2;\n}\n\nif((swh_hex & 4) == \"4\") \n{\n swh += 4;\n}\n\nif((swh_hex & 8) == \"8\") \n{\n swh += 8;\n}\n\nif((swh_hex & 16) == \"16\") \n{\n swh += 16;\n}\n\nif((swh_hex & 32) == \"32\") \n{\n swh += 32;\n}\n\nif((swh_hex & 64) == \"64\") \n{\n swh += 64;\n}\n\nif((swh_hex & 128) == \"128\") //Maskierung und gleichzeitig in Boolean ändern\n{\n swh += 128;\n}\n\n//----------SWN--------------\nvar swn = 0;\nif((swn_hex & 1) == \"1\") //Maskierung und gleichzeitig in eine Zahl wandeln\n{\n swn += 1;\n}\n\nif((swn_hex & 2) == \"2\") \n{\n swn += 2;\n}\n\nif((swn_hex & 4) == \"4\") \n{\n swn += 4;\n}\n\nif((swn_hex & 8) == \"8\") \n{\n swn += 8;\n}\n\nif((swn_hex & 16) == \"16\") \n{\n swh += 16;\n}\n\nif((swn_hex & 32) == \"32\") \n{\n swn += 32;\n}\n\nif((swn_hex & 64) == \"64\") \n{\n swn += 64;\n}\n\nif((swn_hex & 128) == \"128\") //Maskierung und gleichzeitig in Boolean ändern\n{\n swn += 128;\n}\n\n//Hex wieder in String wandeln und zusammensetzten\nvar version = \"v\";\nversion += swh.toString();\nversion += \".\";\nversion += swn.toString();\n\nreturn [{payload: version}];",
"outputs": 1,
"noerr": 0,
"x": 930,
"y": 900,
"wires": [
[
"5157645f.db9a4c"
]
]
},
{
"id": "5157645f.db9a4c",
"type": "ioBroker out",
"z": "2da69b37.1df24c",
"name": "Softwareversion",
"topic": "node-red.0.HAA.Software.Version",
"ack": "true",
"autoCreate": "true",
"x": 1260,
"y": 900,
"wires": []
},
{
"id": "1d1f4b9a.95161c",
"type": "function",
"z": "2da69b37.1df24c",
"name": "String kürzen (14. / 15. Stelle) / CHK",
"func": "var string = msg.payload; //ankommende payload speichern\n\n//String kürzen\nvar string_teil = string.substring(14,16);\n\nreturn [{payload: string_teil}];",
"outputs": 1,
"noerr": 0,
"x": 470,
"y": 960,
"wires": [
[
"4088645b.a1ca94"
]
]
},
{
"id": "4088645b.a1ca94",
"type": "ioBroker out",
"z": "2da69b37.1df24c",
"name": "Checksumme HAA",
"topic": "node-red.0.HAA.Chk.HAA",
"ack": "true",
"autoCreate": "true",
"x": 1270,
"y": 960,
"wires": []
},
{
"id": "ea03f2c9.a0e1a",
"type": "function",
"z": "2da69b37.1df24c",
"name": "Test",
"func": "var x = parseInt(5, 16);\nvar y = parseInt(4, 16);\n\nvar test = x ^ y;\n\nreturn [{payload: test}];",
"outputs": 1,
"noerr": 0,
"x": 370,
"y": 140,
"wires": [
[]
]
},
{
"id": "da7b24a1.565828",
"type": "serial-port",
"z": "2da69b37.1df24c",
"serialport": "/dev/ttyAMA0",
"serialbaud": "9600",
"databits": "8",
"parity": "none",
"stopbits": "1",
"newline": "16",
"bin": "false",
"out": "count",
"addchar": true
}
]
Alles anzeigen