Ankündigung
Einklappen
Keine Ankündigung bisher.
Message mit 2 byte in 16 bit wandeln
Einklappen
X
-
Hi Michael,
da mein Python nicht so gut ist, hab ich Mal bei Google nach "Python binary Operator" geschaut und sofort gesehen, dass das binäre UND als & notiert wird.
Versuch es damit, dann wird das schon was. Wahrscheinlich musst du in yaml dann die rechte Seite von eval in Anführungszeichen setzen.
Gruß, Waldemar
Einen Kommentar schreiben:
-
Hallo,
führt zu einem anderen Ergebnis, aber nicht zum gewünschten, leider:Zitat von bmx Beitrag anzeigenTrue if value and 0b00000001 else False
item.yaml
Das Item raumtemp.devices.onewire_gateway.ch1_error.from_kn x erhält den Wert "8".Code:raumtemp: devices: type: foo onewire_gateway: type: foo ch1_error: type: bool from_knx: type: num knx_dpt: 7 knx_listen: 0/3/136 sensor1_error: type: bool eval: True if value and 0b00000001 else False eval_trigger: raumtemp.devices.onewire_gateway.ch1_error.from_knx sensor2_error: type: bool eval: True if value and 0b00000010 else False eval_trigger: raumtemp.devices.onewire_gateway.ch1_error.from_knx
Die sensorX_error werden alle true.
Ist das nicht die Standardeinstellung?Zitat von mumpf Beitrag anzeigenich glaube, dass läuft nur, wenn Du mit assign_compatibility: compat_1.2 arbeitest. Siehe in der Doku unter
Michael
Einen Kommentar schreiben:
-
Hi,
ich glaube, dass läuft nur, wenn Du mit assign_compatibility: compat_1.2 arbeitest. Siehe in der Doku unter https://www.smarthomeng.de/user/konf...-wertzuweisung.
Gruß, Waldemar
Einen Kommentar schreiben:
-
AND kleingeschrieben (also "and") hilft. Dieser Fehler ist weg und das eval wird ausgeführt.
Vom KNX kommt immer noch die "8" als Wert mit DPT7
Das Eval bei Sensor 1 ergibt TRUE.
Für die anderen 3 kommt eine Fehlermeldung.
Im Log gibt es eine Fehlermeldung:
und es ist egal ob ichCode:2019-07-21 20:30:44 WARNING raumtemp.devices.onewire_gateway.ch1_error.sensor2_error Item raumtemp.devices.onewire_gateway.ch1_error.sensor2_error: value "2" does not match type bool. Via Eval raumtemp.devices.onewire_gateway.ch1_error.from_knx 2019-07-21 20:30:44 WARNING raumtemp.devices.onewire_gateway.ch1_error.sensor3_error Item raumtemp.devices.onewire_gateway.ch1_error.sensor3_error: value "4" does not match type bool. Via Eval raumtemp.devices.onewire_gateway.ch1_error.from_knx 2019-07-21 20:30:44 WARNING raumtemp.devices.onewire_gateway.ch1_error.sensor4_error Item raumtemp.devices.onewire_gateway.ch1_error.sensor4_error: value "8" does not match type bool. Via Eval raumtemp.devices.onewire_gateway.ch1_error.from_knx
oderCode:eval: value and 0b00000001 eval_trigger: raumtemp.devices.onewire_gateway.ch1_error.from_knx
verwende.Code:eval: sh.raumtemp.devices.onewire_gateway.ch1_error.from_knx() and 0b00000010 eval_trigger: raumtemp.devices.onewire_gateway.ch1_error.from_knx
Einen Kommentar schreiben:
-
Ich habe es in EDOMI so umgesetzt und das sieht soweit gut aus jetzt:
https://knx-user-forum.de/forum/proj...-16bit-wandeln
Einen Kommentar schreiben:
-
AND klein schreiben --> and . Hast Du mal value and 0b00000001 ausprobiert
Einen Kommentar schreiben:
-
Msinn
Danke.
Ich habe das nun mal so umgesetzt:
item.yaml
Im Busmonitor steht:Code:%YAML 1.1 --- raumtemp: devices: type: foo onewire_gateway: type: foo ch1_error: type: bool from_knx: type: num knx_dpt: 7 knx_listen: 0/3/136 sensor1_error: type: bool eval: sh.raumtemp.devices.onewire_gateway.ch1_error.from_knx() AND 0b00000001 eval_trigger: raumtemp.devices.onewire_gateway.ch1_error.from_knx sensor2_error: type: bool eval: sh.raumtemp.devices.onewire_gateway.ch1_error.from_knx() AND 0b00000010 eval_trigger: raumtemp.devices.onewire_gateway.ch1_error.from_knx sensor3_error: type: bool eval: sh.raumtemp.devices.onewire_gateway.ch1_error.from_knx() AND 0b00000100 eval_trigger: raumtemp.devices.onewire_gateway.ch1_error.from_knx sensor4_error: type: bool eval: sh.raumtemp.devices.onewire_gateway.ch1_error.from_knx() AND 0b00001000 eval_trigger: raumtemp.devices.onewire_gateway.ch1_error.from_knx# Zeit Dienst Flags Prio Quell-Adresse Quell-Name Ziel-Adresse Ziel-Name Rout Typ DPT Info 38 21.07.2019 19:47:04,719 vom Bus Low 1.0.40 - 0/3/136 - 5 GroupValueResponse 7.001 Pulse 00 08 | 8 pulses
Im Backend steht:
Item-InformationenBzgl. des eval gibt es für alle 4 items im Log eine Fehlermeldung:Pfad raumtemp.devices.onewire_gateway.ch1_error.from_kn x Name raumtemp.devices.onewire_gateway.ch1_error.from_kn x Typ (type) num Wert (value) Letztes Update 2019-07-21 19:46:54.707472+02:00 Letzte Änderung 2019-07-21 19:44:14.892936+02:00 Alter (Update) 33.27 Sekunden Alter (Änderung) 3 Minuten, 13.08 Sekunden Update durch knx:1.0.40:ga=0/3/136 Geändert durch knx:1.0.40:ga=0/3/136 vorheriger Wert 0 vorheriges Update 2019-07-21 19:42:25.048387+02:00 vorherige Änderung 2019-07-21 19:42:25.048387+02:00 vorh. Alter (Update) 36.59 Sekunden vorh. Alter (Änderung) 36.59 Sekunden
WARNING raumtemp.devices.onewire_gateway.ch1_error.sensor4 _error Item raumtemp.devices.onewire_gateway.ch1_error.sensor4 _error: problem evaluating sh.raumtemp.devices.onewire_gateway.ch1_error.from _knx() AND 0b00001000: invalid syntax (<string>, line 1)
Kommt denn vom KNX überhaupt das richtige an? oder muss Masifi da nochmal nachschauen?
Einen Kommentar schreiben:
-
DPT 7.001 liefert per KNX Definition einen unsigned 16 Bit Wert. Dieser wird am besten in ein Item vom Typ num eingelesen. Danach kannst Du in einer Logik oder in einem eval Ausdruck diesen Wert umwandeln. Ihn in einen String aus Nullen und Einsen umzuwandeln ist dabei eher unpraktisch.
Du kannst z.B. mit dem binären AND Operator die Information des Fehler Bits für Sensor 4 in ein eigenes Item isolieren:
Alternativ zu der Angabe der Maske in binärer Form, kannst Du die Angabe auch hexadezimal machen, also statt 0b00001000 den Wert 0x08 verwenden.Code:from_knx: type: num knx_dpt: 7 knx_listen: 0/3/136 sensor4_error: type: bool eval: sh.from_knx() AND 0b00001000
Einen Kommentar schreiben:
-
Message mit 2 byte in 16 bit wandeln
Hallo,
ich teste aktuelle das 1w Gateway von Masifi (mehr hier). Das Gateway bietet 3 Kanäle mit je bis zu 10 Sensoren.
In der letzten Firmware wurden die Errormessages implemtiert. Diese sind DPT7, müssen aber bitweise gelesen werden. An der Stelle mit "1" ist der Sensor fehlerhaft.
Beispiele:- 0000001000 --> die "1" steht an 4. Stelle -> der Sensor4 hat einen Error.
- Sensor 2 und Sensor 5 und Sensor 10 haben einen Fehler, dann wird eine Nachricht geschickt die so aussieht: 1000010010 --> an der zweiten, fünften und zehnten Stelle (von rechts) steht eine "1"
Die Message selbst ist auch etwas komisch (zumindest für mich). Im CH1 fehlt Sensor 4. Im Busmonitor (DPT7) erscheint:In shNG konnte ich bislang nur als Datentyp "foo" einlesen und bekomme die Zahl "8" geliefert.# Zeit Dienst Flags Prio Quell-Adresse Quell-Name Ziel-Adresse Ziel-Name Rout Typ DPT Info 6 21.07.2019 13:53:04,028 vom Bus Low 1.0.40 Dummy 0/3/136 1w Fehler CH1 6 GroupValueWrite 7.001 Pulse 00 08 | 8 pulses
Wie kann ich das bitweise einlesen, um "0000001000" zu erhalten?
Wer kann helfen?
Danke Euch!Zuletzt geändert von Sisamiwe; 23.07.2019, 20:15.Stichworte: -


Einen Kommentar schreiben: