Ankündigung

Einklappen
Keine Ankündigung bisher.

Logik per KNX Bus abfragen ausführen

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

    Logik per KNX Bus abfragen ausführen

    Hallo zusammen und ein gutes neues Jahr.

    Ich stehe vor einem kleinen Rätsel und komme nicht weiter.

    Ich habe eine Logik, welche mir einmal am Tag einen Text auf den KNX-Bus senden soll und bei Bedarf durch Abfrage vom Bus durchlaufen werden soll.

    Teil 1 habe ich mit einem Crontab gelöst. Die Logik wird zumindest zum angegeben Zeitpunkt durchlaufen.

    Für die aktive Abfrage, also das Triggern der Logik, habe ich 2 Dinge ausprobiert:

    a) Ich habe das jeweilige Watch Item hinzugefügt und
    b) ich habe in den Plugin spezifischen Parametern den knx_reply befüllt.

    Leider reagiert die Logik nicht auf die Abfragen. Wenn ich es richtig verstanden habe, solle das knx_reply dem KNX Flag L entsprechen.

    Ach so, wenn ich die Logik manuell Triggere, werden die Werte korrekt auf dem Bus geschrieben.

    Die Logik:
    Code:
    #!/usr/bin/env python3
    # uhrzeiten_allgemein.py
    
    logger.notice(f"Ich mache was")
    
    sh.knx.groupwrite('0/5/25', sh.sun.rise().astimezone(sh.tzinfo()).strftime("%H:%M"), 16) #Sonnenaufgang
    
    Morgendaemmerung = sh.sun.rise().astimezone(sh.tzinfo()).strftime("%H:%M")
    logger.notice(f"Sonnenaufgang: '{Morgendaemmerung}'")
    
    sh.knx.groupwrite('0/5/26', sh.sun.set().astimezone(sh.tzinfo()).strftime("%H:%M"), 16) #Sonnenuntergang
    sh.knx.groupwrite('0/5/27', sh.sun.set(-6).astimezone(sh.tzinfo()).strftime("%H:%M"), 16) #Bürgerliche Dämmerung
    sh.knx.groupwrite('0/5/28', sh.sun.rise(-4).astimezone(sh.tzinfo()).strftime("%H:%M"), 16) #Morgendämmerung
    sh.knx.groupwrite('0/5/29', sh.moon.rise().astimezone(sh.tzinfo()).strftime("%H:%M"), 16) #Mondaufgang
    sh.knx.groupwrite('0/5/30', sh.moon.set().astimezone(sh.tzinfo()).strftime("%H:%M"), 16) #Monduntergang
    
    logger.notice(f"Ich habe was gemacht")​
    Die Parameter der Logik:
    image.png

    die Konfiguration der Items:

    Code:
    allgemein:
        status:
            Zeiten_Text:
                Sonnenaufgang:
                    type: str
                    knx_dpt: 16
                    knx_send: 0/5/25
                    #knx_listen: 0/5/25
                    knx_reply: 0/5/25
                    #knx_status: 0/5/25
                    enforce_updates: yes
                    visu_acl: rw
                Sonnenuntergang:
                    type: str
                    knx_dpt: 16
                    knx_send: 0/5/26
                    #knx_listen: 0/5/26
                    knx_reply: 0/5/26
                    #knx_status: 0/5/26
                    enforce_updates: yes
                    visu_acl: rw​


    Was mache ich falsch, bzw. geht das überhaupt?

    Danke schon mal im Voraus fürs drüberschauen.

    Gruß
    Michael

    #2
    Ich habe beides noch nie benutzt. Aber als erstes schau mal ob irgendwas in Deinen Logfiles landet sonst brauchst Du nicht weiter suchen weil Dir dann essentielle Infos fehlen.

    Und dann würde ich mal loggen wenn die Logik aufgerufen wird wie und mit welchen Parametern das passiert:

    Code:
    by = trigger.get('by', '')
    source = trigger.get('source', '')
    dest = trigger.get('dest', '')
    value = trigger.get('value', '')
    logic.logger.debug('Aufruf Logik mit (trigger[by={}, source={}, dest={}, value={}])'.format(by,source,dest,value))
    hast Du die Gruppenadressen mal bei knx_listen eingetragen? Auch nur mal eine einzige erst probiert?
    Zuletzt geändert von bmx; Gestern, 16:53.

    Kommentar


      #3
      Hi bmx,

      ja ich habe aller Kombinationen schon durch. Also nur knx_listen, nur knx_reply, nur Watch Items, nur mit einer GA etc.
      Im Log kommt immer nur dann was an, wenn ich eben manuell triggere oder wenn der crone job gelaufen ist.

      Im KNX-Log sieht es so aus:

      image.png​(die IPS/S3.1.1 Schnittstelle ist die Leseanforderung von meinem Handy aus = Quelle 1.1.5.
      die Response kommt von SHNG = 0.0.5, da ist sicher).
      Also funktioniert diese Kommunikation. Es wird halt nur nicht die Logik getriggert.

      Kommentar


        #4
        Ich vermute des Rätsels Lösung könnte sein das Du in der logic.yaml zwar über das admin Interface knx_listen und auch knx_reply definieren kannst aber der Datentyp fehlt dort. Da die gelesenen Daten vom Bus aber an die Logik weitergegeben werden sollen muss SHNG auch wissen wie die aufbereitet werden sollen.

        Also solltest Du in Deiner logic.yaml sowas stehen haben:

        Code:
        test_knx_listen_logic:
            filename: test_knx_listen_logic.py
            knx_dpt: 16 #14 byte string
            knx_listen:  # oder knx_reply
            -   0/5/25
            -   0/5/26
        ​    -   0/5/27
        ​    -   0/5/28
            -   0/5/29
        ​    -   0/5/30
        ​
        Um im admin Interface den Datentyp auswählen zu können muss dieser in der plugin.yaml aufgenommen werden. Ich habe das für knx_listen eben noch mal bei mir getestet und das hat für eine GA funktioniert.

        plugin.yaml vom knx Plugin logic_parameters zu ersetzen durch
        Code:
        logic_parameters:
            # Definition of logic parameters defined by this plugin
            knx_listen:
                type: list(knx_ga)
                description:
                    de: 'Gruppenadresse (oder Liste von Gruppenadressen), auf die gehört werden soll. KNX-Nachrichten an diese Gruppenadresse(n) werden an die Logik weitergegeben'
                    en: "Group address (or list of group addresses) to listen for. KNX messages to this group address(es) will be directed to the logic"
        
            knx_reply:
                type: list(knx_ga)
                description:
                    de: 'Eine oder mehrere Gruppenadressen angeben, um den Objektwert vom KNX-Bus aus lesen zu können.'
                    en: 'Specify one or more group addresses to allow reading the item value from the KNX bus.'
        
            knx_dpt:
                type: str
                valid_list:
                 - '1'
                 - '2'
                 - '3'
                 - '4002'
                 - '4.002'
                 - '5'
                 - '5001'
                 - '5.001'
                 - '5003'
                 - '5.003'
                 - '5999'
                 - '5.999'
                 - '6'
                 - '7'
                 - '8'
                 - '9'
                 - '10'
                 - '11'
                 - '12'
                 - '13'
                 - '14'
                 - '16000'
                 - '16'
                 - '16001'
                 - '16.001'
                 - '17'
                 - '17001'
                 - '17.001'
                 - '18001'
                 - '18.001'
                 - '20'
                 - '24'
                 - '229'
                 - '232'
                 - '251'
                 - '275.100'
                 - 'hex'
                valid_list_description:
                    de:
                     - 'Schalten (1 Bit) -> bool'
                     - 'Zwangssteuerung (2 Bit) -> list'
                     - 'Dimmen (4 Bit) -> list'
                     - 'Zeichen [8859_1] (8 Bit) -> str'
                     - 'Zeichen [8859_1] (8 Bit) -> str'
                     - 'Relativwert, 0 … 255 (8 Bit) -> num'
                     - 'Relativwert, 0 … 100 % (8 Bit) -> num'
                     - 'Relativwert, 0 … 100 % (8 Bit) -> num'
                     - 'Winkel, 0 … 360 ° (8 Bit) -> num'
                     - 'Winkel, 0 … 360 ° (8 Bit) -> num'
                     - 'Spezial DPT für Tebis TS Systeme, (8 Bit) -> num'
                     - 'Spezial DPT für Tebis TS Systeme, (8 Bit) -> num'
                     - 'Ganzzahl -128 - 127 (8 Bit) -> num'
                     - 'Ganzzahl 0 - 65535 (16 Bit) -> num'
                     - 'Ganzzahl -32768 - 32767 (16 Bit) -> num'
                     - 'Gleitkomma -671088,64 - 670760,96 (16 Bit) -> num'
                     - 'Uhrzeit [datetime.time] (24 Bit) -> foo'
                     - 'Datum [datetime.date] (24 Bit) -> foo'
                     - 'Ganzzahl 0 - 4294967295 (32 Bit) -> num'
                     - 'Ganzzahl -2147483648 - 2147483647(32 Bit) -> num'
                     - 'Gleitkommazahl (32 Bit) -> num'
                     - 'Zeichenkette [ASCII] (14 Byte) -> str'
                     - 'Zeichenkette [ASCII] (14 Byte) -> str'
                     - 'Zeichenkette [8859_1] (14 Byte) -> str'
                     - 'Zeichenkette [8859_1] (14 Byte) -> str'
                     - 'Szenennummer: 0 - 63 (8 Bit) -> num'
                     - 'Szenennummer: 1 - 64 (8 Bit) -> num'
                     - 'Szenennummer: 1 - 64 (8 Bit) -> num'
                     - 'Szenen-Kontrolle: 1 - 64 (Aufruf) 129-192 (Speichern) (8 Bit) -> num'
                     - 'Szenen-Kontrolle: 1 - 64 (Aufruf) 129-192 (Speichern) (8 Bit) -> num'
                     - 'HVAC: 0 - 255 (8 Bit) -> num'
                     - 'Unlimitierte Zeichenkette [8859_1] (var) -> str'
                     - 'Smartmeter Werte Tripel: [Ganzzahl -2147483648 - 2147483647(32 Bit), 0-255 (8 Bit), 0-255 (8 Bit)] (6 Byte) -> list'
                     - 'RGB: [0, 0, 0] - [255, 255, 255] (3 Byte) -> list'
                     - 'RGBW: [0, 0, 0, 0] - [255, 255, 255, 255] (4 Byte)-> list'
                     - 'Quadrupel mit Solltemperaturen für Komfort, Standby, Nachtabsenkung, Frostschutz (4 Fließkommazahlen mit 16 Bit) -> list'
                     - 'Empfangen von Roh-/Hex-Daten (um Key IDs des alten Winkhaus Schließsystems auszulesen'
                    en:
                     - 'Switch (1 Bit) -> bool'
                     - 'forced control (2 Bit) -> list'
                     - 'Dim (4 Bit) -> list'
                     - 'Char [8859_1] (8 Bit) -> str'
                     - 'Char [8859_1] (8 Bit) -> str'
                     - 'Relative value, 0 … 255 (8 Bit) -> num'
                     - 'Relative value, 0 … 100 % (8 Bit) -> num'
                     - 'Relative value, 0 … 100 % (8 Bit) -> num'
                     - 'Angle value, 0 … 360 ° (8 Bit) -> num'
                     - 'Angle value, 0 … 360 ° (8 Bit) -> num'
                     - 'Special DPT for Tebis TS systems, (8 Bit) -> num'
                     - 'Special DPT for Tebis TS systems, (8 Bit) -> num'
                     - 'Integer -128 - 127 (8 Bit) -> num'
                     - 'Integer 0 - 65535 (16 Bit) -> num'
                     - 'Integer -32768 - 32767 (16 Bit) -> num'
                     - 'Float -671088,64 - 670760,96 (16 Bit) -> num'
                     - 'Time [datetime.time] (24 Bit) -> foo'
                     - 'Date [datetime.date] (24 Bit) -> foo'
                     - 'Integer 0 - 4294967295 (32 Bit) -> num'
                     - 'Integer -2147483648 - 2147483647(32 Bit) -> num'
                     - 'Float (32 Bit) -> num'
                     - 'String [ASCII] (14 Byte) -> str'
                     - 'String [ASCII] (14 Byte) -> str'
                     - 'String [8859_1] (14 Byte) -> str'
                     - 'String [8859_1] (14 Byte) -> str'
                     - 'Scene number: 0 - 63 (8 Bit) -> num'
                     - 'Scene number: 1 - 64 (8 Bit) -> num'
                     - 'Scene number: 1 - 64 (8 Bit) -> num'
                     - 'Scene control: 1 - 64 (call) 129-192 (save) (8 Bit) -> num'
                     - 'Scene control: 1 - 64 (call) 129-192 (save) (8 Bit) -> num'
                     - 'HVAC: 0 - 255 (8 Bit) -> num'
                     - 'unlimited string [8859_1] (var) -> str'
                     - 'Smartmeter value triple: [Integer -2147483648 - 2147483647(32 Bit), 0-255 (8 Bit), 0-255 (8 Bit)] (6 Byte) -> list'
                     - 'RGB: [0, 0, 0] - [255, 255, 255] (3 Byte) -> list'
                     - 'RGBW: [0, 0, 0, 0] - [255, 255, 255, 255] (4 Byte)-> list'
                     - 'Quadrupel with set temperatures comfort, standby, night reduction, frost protection (4 float with 16 Bit) -> list'
                     - 'Receive raw/hex data (to read out Key IDs from the old Winkhaus locking systems'
                description:
                    de: 'Dieses Attribut setzt den Typ des KNX-Datenpunktes, der für die Konvertierung der KNX-Nachrichten in das interne SmartHomeNG-Format verwendet wird. Die Angabe ist zwingend erforderlich ist. Wenn Sie keinen Wert angeben, wird das Element vom Plugin ignoriert. Der DPT muss dem Typ des Artikels entsprechen!'
                    en: "This attribute set the KNX datapoint type used for conversion of the KNX messages to internal SmartHomeNG format. It is mandatory. If you don't provide one the item will be ignored by the plugin. The DPT has to match the type of the item! BE CAREFUL to put the value in quotes to ensure they are interpreted as strings and not as numbers!"
        und danach neustarten. Wenn Du berichten kannst, das das funktioniert dann schiebe ich das in develop.
        Zuletzt geändert von bmx; Gestern, 23:19.

        Kommentar

        Lädt...
        X