-
Notifications
You must be signed in to change notification settings - Fork 8
015 ByteBit Filter additional explanation
just copied from an issue thread. sorry, German...
...
Wenn du jetzt die ersten beiden Bytes als vorzeichenbehaftete Dezimalzahl (x0,1) haben möchtest, wäre
("WW Temperatur Oben (01CD)", 0x01CD, 3, 'b:0:1', 0.1, True)
das Richtige.
mit 'b:<first>:<last>'
filterst du eine Byte-Sequenz aus dem gelesenen Wert, 'b:0:1'
nimmt also die ersten beiden Bytes.
Du kannst dann noch eine Bit-Maske über den Wert legen, um auf bestimmte Flags zu filtern. Angenommen, das 4. Bit (Bit 3 von 0 aus -> 2^3=8) im 3. Byte stände für 'Sensor hat Kurzschluss', und das 5 Bit (Bit 4 von 0 aus -> 2^4=16) für 'Sensor Leitungsunterbrechung':
("WW Temperatur Oben (01CD) Sensor Fehler", 0x01CD, 3, 'b:2:2:24', 1)
Im Falles einen Sensorkurzschlusses würde das dann 8 liefern, bei Leitungsunterbrechung 16 und bei keinem von beidem 0, egal was in den anderen 6 Bits steht.
Wenn du
("WW Temperatur Oben (01CD)", 0x01CD, 3, 'b:0:1', 0.1, True),
("WW Temperatur Oben (01CD) Sensor Fehler", 0x01CD, 3, 'b:2:2:24'),
direkt hintereinander schreibst, wird dabei der Datenpunkt nur 1 mal gelesen und mehrfach ausgewertet.
Kommen wir jetzt zu deinem Wert af0140:
die ersten beiden Bytes: af 01, litte endian -> 0x01af -> dez 431 -> 43,1°C - könnte das passen?
das käme heraus mit ("WW Temperatur Oben (01CD)", 0x01CD, 3, 'b:0:1', 0.1, True),
(signed oder nicht ist bei der WW Temp glaubich egal)
das letzte Byte 40 -> binär 01000000 -> Bit 6 gesetzt (wir zählen bei sowas immer von 0) -> sagt uns jetzt ohne weiteren Hintergrund leider nichts ;-) Vielleicht steht das für 'Sensor vorhanden/konfiguriert'...