Ankündigung

Einklappen
Keine Ankündigung bisher.

Item nur bei einem write auf dem Bus aktualisieren

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

    Item nur bei einem write auf dem Bus aktualisieren

    Hi allerseits,

    ich suche nach einer Möglichkeit, ein Item nur bei einem write zu aktualisieren, nicht bei einem read. Da das Item bei jedem write aktualisiert werden soll, brauche ich ein enforce_updates. Die Aktualisierung des Items triggert eine Logik.
    Dummerweise wird die Logik auch bei einem Read auf dem Bus getriggert!

    Hintergrund: Ich muss meinen PM in bestimmten Fällen nachtriggern. Dazu lausche ich auf einer GA auf ne 1 und sende die 1 dann auch auf einer anderen GA. Direkt verbinden geht nicht, weil die 0 nicht weitergeleitet werden darf (ich glaube, das nennt sich TOR-Funktion). Das klappt auch prima, aber leider wird bei einem knx-read, wenn der ne 1 liefert, auch nachgetriggert. Das möchte ich verhindern.

    Irgendwelche Ideen?

    Gruß, Waldemar
    OpenKNX www.openknx.de

    #2
    Nicht direkt, stand auch schon vor dem Problem. Ich helfe mir mit einer if Abfrage auf die GA und fahre dann die 0 per exit() aus der Logik raus.
    Hast Du cache = yes gesetzt?

    Kommentar


      #3
      Hm,

      das habe ich jetzt nicht verstanden. Hast Du mal ein Beispiel?

      Gruss, Waldemar
      OpenKNX www.openknx.de

      Kommentar


        #4
        Hallo Waldemar,

        ein KNX Read Request liefert nie einen Wert.
        In der Logik kannst Du relativ einfach trigger['value'] überprüfen, dort steht ein 'read' drin. Ich werde das in develop aber abändern, hier ist ein None wesentlich besser.

        also

        if trigger['value'] == 'read':
        exit()

        Oder demnächst:
        if trigger['value'] is None:
        exit()

        Bis bald

        Marcus

        Kommentar


          #5
          Hallo,

          vielen Dank für die bisherigen Infos - ich habe mich aber wohl unklar ausgedrückt, denn die Antworten treffen nicht mein Problem. Ich versuche es nochmal mit einem Beispiel:

          items.conf
          Code:
          [decke]
            name = Deckenlicht
            knx_cache = 3/0/1 #statusrückmeldung Aktor
            knx_send = 3/0/0
            enforce_updates = true
            update_tor = 1
            [[tor]]
              type = bool
              enforce_updates = true
              knx_dpt = 1
              knx_send = 3/0/9
          logic.conf
          Code:
          # Tor
          # Implementiert Tor-Funktion
          [tor]
            filename = tor.py
            watch_item = *:update_tor
          tor.py
          Code:
          if trigger['by'] == 'Item':
          	lItem = sh.return_item(trigger['source'])
          	if trigger['value']:
          		lItem.tor(1)
          Also alles eigentlich ganz übersichtlich...

          Das obige realisiert folgendes:
          - Jede 1 auf sh.decke schreibt eine 1 auf sh.decke.tor
          - Jede 0 auf sh.decke beeinflusst sh.decke.tor nicht

          Das ist "fast" das, was ich möchte. Problem: Wenn ein knx_read auf 3/0/1 abgesetzt wird und ein knx_response = 1 kommt, wird auch meine Logik getriggert. Ich möchte diese aber nur bei einem knx_write auf 3/0/1 triggern.
          Wie man an der logic.conf sehen kann, hängt diese Logik an allen Items, die ein update_tor = 1 haben (das sind derzeit 6, es werden aber min. 15 werden).

          @Marcus: In trigger['value'] steht 1 oder 0 drin, nicht read oder none, deswegen glaube ich, dass Du was anderes meinst als ich.

          Meine Frage: Kann ich in der Logik (tor.py) abfragen, ob das item (bei mir lItem) durch ein write geändert wurde oder in der logic.conf angeben, dass tor.py nur duch einen knx_write getriggert werden soll?

          Ziel ist:
          - Jedes knx_write = 1 auf sh.decke schreibt eine 1 auf sh.decke.tor
          - Jedes knx_write = 0 auf sh.decke beeinflusst sh.decke.tor nicht

          Hoffe, die Fragestellung ist jetzt exakt genug formuliert...

          Danke und Gruß,
          Waldemar
          OpenKNX www.openknx.de

          Kommentar


            #6
            Hallo Waldemar,

            jetzt habe ich es verstanden was Du meinst.

            Das KNX Plugin gibt die Information (Art: Read oder Response) nicht weiter.
            Daher kannst Du die Information auch nicht in der Logik abfragen.

            Ich sehe auch momentan keine gute Möglichkeit das zu differenzieren.

            Bis bald

            Marcus

            Kommentar

            Lädt...
            X