NEWS
Hilfe zu: aus HEX String 0 / 1 finden und Position ermitteln
-
Hallo zusammen,
ich stehe gerade vor einem für mich unlösbaren Problem ( Aufgrund fehlender Programmierkenntnisse ).
Über Node RED importiere ich erfolgreich über UART die Melder Aktivität einer Alarmanlge mittels eines HEX String der immer aus 14 Zeichen besteht.
Dieser String muss in jeweils 2ér HEX also in Summe in 7 HEX Pärchen gesplittet werden und diese dann jeweils nach Binär konvertiert werden.
Anschliessend benötige ich dann noch eine Logik, welche es erlaubt, anhand von True & False den Status der einzelnen Melder ( 0-55 ) über jeweils einen Datenpunkt im iobroker anzuzeigen.
Folgende Matrix kommt hier zum Einsatz:
String aus Alarmanlage: 00 08 01 20 00 02 00
HEX 00 08 01 20 00 02 00
BIN 0000 0000 0000 1000 0000 0001 0010 0000 0000 0000 0000 0010 0000 0000
Melder 7 0 15 8 23 16 31 24 39 32 47 40 55 48
Ergebnis: Melder 11, 16, 29, 41 sind aktiv bzw. wären somit True
EDIT: Leider funktioniert die Formatierung des Textes nicht daher hier ein Screenshot zur besseren Veranschaulichung.
Wäre das aufwendig oder kompliziert das in Javascript umzusetzen ?
Vielen Dank für eure Unterstützung !!
VG
Sascha
-
Hallo zusammen,
ich stehe gerade vor einem für mich unlösbaren Problem ( Aufgrund fehlender Programmierkenntnisse ).
Über Node RED importiere ich erfolgreich über UART die Melder Aktivität einer Alarmanlge mittels eines HEX String der immer aus 14 Zeichen besteht.
Dieser String muss in jeweils 2ér HEX also in Summe in 7 HEX Pärchen gesplittet werden und diese dann jeweils nach Binär konvertiert werden.
Anschliessend benötige ich dann noch eine Logik, welche es erlaubt, anhand von True & False den Status der einzelnen Melder ( 0-55 ) über jeweils einen Datenpunkt im iobroker anzuzeigen.
Folgende Matrix kommt hier zum Einsatz:
String aus Alarmanlage: 00 08 01 20 00 02 00
HEX 00 08 01 20 00 02 00
BIN 0000 0000 0000 1000 0000 0001 0010 0000 0000 0000 0000 0010 0000 0000
Melder 7 0 15 8 23 16 31 24 39 32 47 40 55 48
Ergebnis: Melder 11, 16, 29, 41 sind aktiv bzw. wären somit True
EDIT: Leider funktioniert die Formatierung des Textes nicht daher hier ein Screenshot zur besseren Veranschaulichung.
2018-07-26_19-45-16.jpeg
Wäre das aufwendig oder kompliziert das in Javascript umzusetzen ?
Vielen Dank für eure Unterstützung !!
VG
Sascha `
Vielleicht hilft Dir das weiter. Geht sicherlich eleganter.
`function hex2bin(hex){ return ("00000000" + (parseInt(hex, 16)).toString(2)).substr(-8); } function alarmstring(hex) { var result = ""; var hexarr = hex.split(" "); var n = 0; var m = 0; var resarr = []; // Binärwert für jeden HEX Block for (var i=0; i < hexarr.length; i++) { result = hex2bin(hexarr[i]); // console.log(result); // Loopen über Binärwert for(var j=0; j<8; j++) { n = result.charAt(j); m = (8 - j) + (i * 8 - 1); if(n == "1") { // Melder ist aktiv resarr[m] = true; } else { // Melder ist nicht aktiv resarr[m] = false; } } } return resarr; } var hex = "00 08 01 20 00 02 00"; var res = alarmstring(hex); for (var i=0; i < res.length; i++) { if(res[i] === true) { console.log("Melder "+ i + " ist aktiv"); } else { console.log("Melder "+ i + " ist nicht aktiv"); } }` Ausgabe sieht dann so aus: `~~[code]~~07:18:20.835 [info] javascript.0 script.js.common.zeit: Melder 0 ist nicht aktiv 07:18:20.835 [info] javascript.0 script.js.common.zeit: Melder 1 ist nicht aktiv 07:18:20.835 [info] javascript.0 script.js.common.zeit: Melder 2 ist nicht aktiv 07:18:20.835 [info] javascript.0 script.js.common.zeit: Melder 3 ist nicht aktiv 07:18:20.836 [info] javascript.0 script.js.common.zeit: Melder 4 ist nicht aktiv 07:18:20.836 [info] javascript.0 script.js.common.zeit: Melder 5 ist nicht aktiv 07:18:20.836 [info] javascript.0 script.js.common.zeit: Melder 6 ist nicht aktiv 07:18:20.836 [info] javascript.0 script.js.common.zeit: Melder 7 ist nicht aktiv 07:18:20.836 [info] javascript.0 script.js.common.zeit: Melder 8 ist nicht aktiv 07:18:20.836 [info] javascript.0 script.js.common.zeit: Melder 9 ist nicht aktiv 07:18:20.836 [info] javascript.0 script.js.common.zeit: Melder 10 ist nicht aktiv 07:18:20.836 [info] javascript.0 script.js.common.zeit: Melder 11 ist aktiv 07:18:20.836 [info] javascript.0 script.js.common.zeit: Melder 12 ist nicht aktiv 07:18:20.836 [info] javascript.0 script.js.common.zeit: Melder 13 ist nicht aktiv 07:18:20.836 [info] javascript.0 script.js.common.zeit: Melder 14 ist nicht aktiv 07:18:20.836 [info] javascript.0 script.js.common.zeit: Melder 15 ist nicht aktiv 07:18:20.836 [info] javascript.0 script.js.common.zeit: Melder 16 ist aktiv 07:18:20.836 [info] javascript.0 script.js.common.zeit: Melder 17 ist nicht aktiv 07:18:20.836 [info] javascript.0 script.js.common.zeit: Melder 18 ist nicht aktiv 07:18:20.836 [info] javascript.0 script.js.common.zeit: Melder 19 ist nicht aktiv 07:18:20.837 [info] javascript.0 script.js.common.zeit: Melder 20 ist nicht aktiv 07:18:20.837 [info] javascript.0 script.js.common.zeit: Melder 21 ist nicht aktiv 07:18:20.837 [info] javascript.0 script.js.common.zeit: Melder 22 ist nicht aktiv 07:18:20.837 [info] javascript.0 script.js.common.zeit: Melder 23 ist nicht aktiv 07:18:20.837 [info] javascript.0 script.js.common.zeit: Melder 24 ist nicht aktiv 07:18:20.837 [info] javascript.0 script.js.common.zeit: Melder 25 ist nicht aktiv 07:18:20.837 [info] javascript.0 script.js.common.zeit: Melder 26 ist nicht aktiv 07:18:20.837 [info] javascript.0 script.js.common.zeit: Melder 27 ist nicht aktiv 07:18:20.837 [info] javascript.0 script.js.common.zeit: Melder 28 ist nicht aktiv 07:18:20.837 [info] javascript.0 script.js.common.zeit: Melder 29 ist aktiv 07:18:20.837 [info] javascript.0 script.js.common.zeit: Melder 30 ist nicht aktiv 07:18:20.837 [info] javascript.0 script.js.common.zeit: Melder 31 ist nicht aktiv 07:18:20.837 [info] javascript.0 script.js.common.zeit: Melder 32 ist nicht aktiv 07:18:20.837 [info] javascript.0 script.js.common.zeit: Melder 33 ist nicht aktiv 07:18:20.837 [info] javascript.0 script.js.common.zeit: Melder 34 ist nicht aktiv 07:18:20.837 [info] javascript.0 script.js.common.zeit: Melder 35 ist nicht aktiv 07:18:20.838 [info] javascript.0 script.js.common.zeit: Melder 36 ist nicht aktiv 07:18:20.838 [info] javascript.0 script.js.common.zeit: Melder 37 ist nicht aktiv 07:18:20.838 [info] javascript.0 script.js.common.zeit: Melder 38 ist nicht aktiv 07:18:20.838 [info] javascript.0 script.js.common.zeit: Melder 39 ist nicht aktiv 07:18:20.838 [info] javascript.0 script.js.common.zeit: Melder 40 ist nicht aktiv 07:18:20.838 [info] javascript.0 script.js.common.zeit: Melder 41 ist aktiv 07:18:20.838 [info] javascript.0 script.js.common.zeit: Melder 42 ist nicht aktiv 07:18:20.838 [info] javascript.0 script.js.common.zeit: Melder 43 ist nicht aktiv 07:18:20.838 [info] javascript.0 script.js.common.zeit: Melder 44 ist nicht aktiv 07:18:20.838 [info] javascript.0 script.js.common.zeit: Melder 45 ist nicht aktiv 07:18:20.838 [info] javascript.0 script.js.common.zeit: Melder 46 ist nicht aktiv 07:18:20.838 [info] javascript.0 script.js.common.zeit: Melder 47 ist nicht aktiv 07:18:20.838 [info] javascript.0 script.js.common.zeit: Melder 48 ist nicht aktiv 07:18:20.838 [info] javascript.0 script.js.common.zeit: Melder 49 ist nicht aktiv 07:18:20.838 [info] javascript.0 script.js.common.zeit: Melder 50 ist nicht aktiv 07:18:20.838 [info] javascript.0 script.js.common.zeit: Melder 51 ist nicht aktiv 07:18:20.838 [info] javascript.0 script.js.common.zeit: Melder 52 ist nicht aktiv 07:18:20.838 [info] javascript.0 script.js.common.zeit: Melder 53 ist nicht aktiv 07:18:20.839 [info] javascript.0 script.js.common.zeit: Melder 54 ist nicht aktiv 07:18:20.839 [info] javascript.0 script.js.common.zeit: Melder 55 ist nicht aktiv [/code]`[/i][/i]
-
Auf jeden Fall hilft das weiter. Super vielen Dank dafür !!!!