Ankündigung

Einklappen
Keine Ankündigung bisher.

Message mit 2 byte in 16 bit wandeln

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • bmx
    antwortet
    Tja, der Waldemar hat wohl Recht mit dem und da habe ich auch nicht mehr dran gedacht

    Einen Kommentar schreiben:


  • mumpf
    antwortet
    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:


  • Sisamiwe
    antwortet
    Hallo,

    Zitat von bmx Beitrag anzeigen
    True if value and 0b00000001 else False
    führt zu einem anderen Ergebnis, aber nicht zum gewünschten, leider:

    item.yaml
    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
    Das Item raumtemp.devices.onewire_gateway.ch1_error.from_kn x erhält den Wert "8".
    Die sensorX_error werden alle true.

    Zitat von mumpf Beitrag anzeigen
    ich glaube, dass läuft nur, wenn Du mit assign_compatibility: compat_1.2 arbeitest. Siehe in der Doku unter
    Ist das nicht die Standardeinstellung?

    Michael

    Einen Kommentar schreiben:


  • mumpf
    antwortet
    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:


  • bmx
    antwortet
    True if value and 0b00000001 else False

    Einen Kommentar schreiben:


  • Sisamiwe
    antwortet
    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:
    Code:
    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
    und es ist egal ob ich
    Code:
    eval: value and 0b00000001
    eval_trigger: raumtemp.devices.onewire_gateway.ch1_error.from_knx
    oder

    Code:
    eval: sh.raumtemp.devices.onewire_gateway.ch1_error.from_knx() and 0b00000010
    eval_trigger: raumtemp.devices.onewire_gateway.ch1_error.from_knx
    verwende.

    Einen Kommentar schreiben:


  • Masifi
    antwortet
    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:


  • bmx
    antwortet
    AND klein schreiben --> and . Hast Du mal value and 0b00000001 ausprobiert

    Einen Kommentar schreiben:


  • Sisamiwe
    antwortet
    Msinn
    Danke.

    Ich habe das nun mal so umgesetzt:

    item.yaml
    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
    Im Busmonitor steht:
    # 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-Informationen
    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
    Bzgl. des eval gibt es für alle 4 items im Log eine Fehlermeldung:

    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:


  • Msinn
    antwortet
    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:

    Code:
    from_knx:
        type: num
        knx_dpt: 7
        knx_listen: 0/3/136
    
    sensor4_error:
        type: bool
        eval: sh.from_knx() AND 0b00001000
    Alternativ zu der Angabe der Maske in binärer Form, kannst Du die Angabe auch hexadezimal machen, also statt 0b00001000 den Wert 0x08 verwenden.

    Einen Kommentar schreiben:


  • Sisamiwe
    hat ein Thema erstellt Message mit 2 byte in 16 bit wandeln.

    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"
    Aktuell habe ich den Fall aus dem ersten Beispiel. Der Busmonitor sagt:

    Die Message selbst ist auch etwas komisch (zumindest für mich). Im CH1 fehlt Sensor 4. Im Busmonitor (DPT7) erscheint:
    # 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
    In shNG konnte ich bislang nur als Datentyp "foo" einlesen und bekomme die Zahl "8" geliefert.

    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.
Lädt...
X