Ankündigung

Einklappen
Keine Ankündigung bisher.

Datum/Uhrzeit "Letzte '1' " eines Item auf den KNX-BUS senden.

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

    Datum/Uhrzeit "Letzte '1' " eines Item auf den KNX-BUS senden.

    Hallo zusammen,

    ich schalte die Trinkwasserzirkulationspumpe händisch (per KNX) funktioniert soweit prima.
    Beispiel: Badezimmer betreten --> Taster betätigen --> "Treppenlichtfunktion" schaltet ZP ein --> warmes Duschwasser genießen
    Auch an der Spüle findet sich eine solcher Taster. Mein Wunsch wäre es den letzten Zeitpunkt (Uhrzeit / (Datum)) als die Pumpe gelaufen ist auszugeben.

    als Funktionen (müssten) zur Verfügung stehen
    • last_update()
    • last_change()

    wenn ich die beiden richtig verstehe, zeigen die jeweils die Änderung an - sprich "0" oder "1" (da die ZP Laufzeit nicht sonderlich hoch ist wäre das zu verschmerzen)

    Im "Admin" werden die Werte angezeigt, nur wie bekomme ich den/die auf den BUS?

    ZP.png

    Code:
    # zirkulation.yaml
    kg:
        heizung:
            zirku:
             #   visu_acl: rw
                type: bool
                knx_dpt: 1
                knx_send: 5/0/0
                knx_listen: 6/1/4
                enforce_updates: yes
                autotimer: 240 = 0
                
                uzsu:
                    type: dict
                    uzsu_item: kg.heizung.zirku
                    cache: 'True'
    im Item ein "last_update() oder last_change()" einfügen?
    Zuletzt geändert von Maexle; 18.10.2022, 08:38.

    #2
    Mit welchem DPT willst Du das denn auch den Bus schicken?

    Mache ein Subitem last_on mit der entsprechenden GA/DPT Konfiguration und ergänze ein onchange Attribut zum zirku Item. WICHTIG: Es muss on Change sein, damit das neue Hilfsitem nur bei Wertänderungen von zirku aktualisiert wird und nicht bei Aktualisierungen mit dem selben Wert.

    Das onchange könnte in etwa folgendermaßen aussehen (abhängig davon wie Du den Wert auf den Bus bringen willst:
    Code:
        onchange: .last_on = sh..last_change() if value == 1 else None
    Das if Statement bewirkt, dass das Subitem nur geändert wird, wenn zirku sich auf 1 ändert.

    Statt der relativen Item Referenzierung kannst Du natürlich die Itemangaben auch absolut machen:

    Code:
        onchange: kg.heitzung.zirku.last_on = sh.kg.heitzung.zirku.last_change() if value == 1 else None
    Zuletzt geändert von Msinn; 18.10.2022, 12:38.
    Viele Grüße
    Martin

    There is no cloud. It's only someone else's computer.

    Kommentar


      #3
      Danke Martin für die Rückmeldung.

      Du meinst so?

      Code:
      # zirkulation.yaml
      kg:
          heizung:
              zirku:
               #   visu_acl: rw
                  type: bool
                  knx_dpt: 1
                  knx_send: 5/0/0
                  knx_listen: 6/1/4
                  enforce_updates: yes
                  autotimer: 240 = 0
                  
                  zuletzt_an:
                      knx_dpt: muss ich in der ETS suchen
                      type: str (vielleicht)???
                      onchange: kg.heitzung.zirku.zuletzt_an = sh.kg.heitzung.zirku.last_change() if value == 1 else None
      
                    
                  
                  uzsu:
                      type: dict
                      uzsu_item: kg.heizung.zirku
                      cache: 'True'

      Kommentar


        #4
        Nachtrag es muss auf jeden Fall

        on_change heißen

        und kg.heitzung.zirku.zuletzt_an muss raus
        Zuletzt geändert von Maexle; 18.10.2022, 13:32.

        Kommentar


          #5
          Code:
          # zirkulation.yaml
          kg:
              heizung:
                  zirku:
                   #   visu_acl: rw
                      type: bool
                      knx_dpt: 1
                      knx_send: 5/0/0
                      knx_listen: 6/1/4
                      enforce_updates: yes
                 ###     autotimer: 240 = 0 ### Einstellung ###
                      autotimer: 10 = 0
                   #   last_change:
                   #   on_change: kg.heizung.zirku.zuletzt_an = sh.kg.heizung.zirku.last_change() if value == 1 else None
                      
                      uzsu:
                          type: dict
                          uzsu_item: kg.heizung.zirku
                          cache: 'True'
                          
                      zuletzt_an:
                          knx_dpt: 10
                          type: foo
                          on_change: kg.heizung.zirku.zuletzt_an = sh.kg.heizung.zirku.last_change() if value == 1 else None
          2022-10-18 14:37:57 WARNING lib.item.item Item kg.heizung.zirku.zuletzt_an: value "2022-10-18 14:37:56.931714+02:00" does not match type str. Via On_Change kg.heizung.zirku


          mit "type: foo" bleibt die Anzeige im Item-Baum leer

          Kommentar


            #6
            Das on_change gehört in zirku, nicht in das subitem.

            Um einen String draus zu machen:
            Code:
            on_change: kg.heizung.zirku.zuletzt_an = str(sh.kg.heizung.zirku.last_change()) if value == 1 else None
            oder mit strftime, wenn Du den Zeitstempel noch formatieren willst. Z.B.:
            Code:
            on_change: kg.heizung.zirku.zuletzt_an = sh.kg.heizung.zirku.last_change().strftime("%m/%d/%Y, %H:%M:%S"​) if value == 1 else None
            Viele Grüße
            Martin

            There is no cloud. It's only someone else's computer.

            Kommentar


              #7
              Martin ich danke Dir

              Kommentar


                #8
                Ich würde auch relative Items definieren. Das macht das einfacher, wenn man mal was kopieren oder ändern will. So habe ich es gemacht:

                Code:
                schalten:
                    type: bool
                    enforce_updates: yes
                    on_change: .wannAktiv = sh.now() if value else None
                
                    wannAktiv:
                        type: foo
                        enforce_updates: yes

                Kommentar

                Lädt...
                X