Ankündigung

Einklappen
Keine Ankündigung bisher.

Caller in Logik händisch setzen

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

    Caller in Logik händisch setzen

    Hallo zusammen,

    nachdem ich mich endlich durchgerungen habe, meine 10 Jahre alte smarthome.py-Instanz mal auf aktuellen Stand zu bringen (ich bin beeindruckt, wie toll das System geworden ist!), hakt es an einer Stelle:
    Meine Rolladenaktoren wollen eine anzufahrende Position auf einem KO mit DPT5 haben, geben den aktuellen Stand aber mit DPT9 aus. Ja, das ist bescheuert.
    Deswegen gibt es bei mir eine Logik, die den DPT9-Wert nimmt und auf das zu DPT5 gehörende Item schreibt. Das soll dann aber nicht wieder auf den Bus gesendet werden, sondern dient nur der internen Konsistenz.
    Im (ur)alten System ließ sich das über source='KNX' bequem lösen. Das klappt nun nicht mehr, weil im Plugin gegen caller und nicht gegen source geprüft wird. Das Thema hat Ähnlichkeiten mit dem von ralf9000, ist aber nicht ganz gleich. Den caller kann ich in der Logik aber nicht manipulieren (oder habe nicht herausgefunden, wie).

    Gibt es eine bequeme Methode, das Item zu aktualisieren und trotzdem das Senden auf KNX zu vermeiden?

    Danke und Grüße,

    Max

    #2
    Kannst Du mal die Item Definitionen und die Logik posten? Dann ist es einfacher Dir zu helfen.

    Mir ist z.B. im Moment nicht klar wo Du „source=‘KNX‘“ setzt.
    Viele Grüße
    Martin

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

    Kommentar


      #3
      Äh, ja, wäre eine gute Idee gewesen...sorry!

      Ausschnitt aus der items.yaml (eg.wohnzimmer.rolladen.rechts) - die anderen sind genauso aufgebaut

      Code:
                  rechts:
                      aufab:
                          type: bool
                          knx_dpt: 1
                          knx_send: 2/1/8
                          knx_listen: 2/1/8
                          enforce_updates: On
                      prozent:
                          type: num
                          knx_dpt: 5
                          knx_send: 2/1/9
                          enforce_updates: On
                      prozent9:
                          type: num
                          knx_dpt: 9
                          knx_listen: 2/1/108
                          knx_init: 2/1/108
                      sperre:
                          type: bool
                          knx_dpt: 1
                          knx_send: 2/1/10
                          knx_listen: 2/1/10
                          knx_init: 2/1/10
                  stop:
                      type: bool
                      knx_dpt: 1
                      knx_send: 2/1/12
        ​
      Die (simple) Logik:

      Code:
      !/usr/bin/env python
      
      if trigger['source'] == 'eg.wohnzimmer.rolladen.sued.prozent9':
          val5 = int(sh.eg.wohnzimmer.rolladen.sued.prozent9()*2.55)
          sh.eg.wohnzimmer.rolladen.sued.prozent(val5,source='knx')
          exit
      ​
      Und die etc/logic.yaml:
      Code:
      rolladen9:
          filename: rolladen9.py
          watch_item:
            - eg.wohnzimmer.rolladen.sued.prozent9
      
      ​

      Es gibt noch 5 weitere Rollläden mit dem gleichen Problem, diese Codeteile habe ich weggelassen, da sie genauso aussehen.

      Danke für deine Hilfe!

      Max

      Kommentar


        #4
        Schreib in der Logik einfach

        sh.eg.wohnzimmer.rolladen.sued.prozent(val5, caller='knx')

        wobei Du das caller auch noch weg lassen kannst, da caller der erste optionale Parameter in der Item zuweisung ist und einfach

        sh.eg.wohnzimmer.rolladen.sued.prozent(val5, ‘knx‘)

        schreiben.
        Viele Grüße
        Martin

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

        Kommentar


          #5
          Danke! Das Problem saß vor dem Bildschirm, und die Ursache war so doof, dass ich mich kaum traue, es zuzugeben:

          Nach Suchen und Ersetzen stand da statt dem (korrekten)
          Code:
          if trigger['source'] == 'eg.wohnzimmer.rolladen.sued.prozent9':
              val5 = int(sh.eg.wohnzimmer.rolladen.sued.prozent9()*2.55)
              sh.eg.wohnzimmer.rolladen.sued.prozent(val5,caller='knx')
              exit
          ​
          der folgende Unfug:
          Code:
          if trigger['caller'] == 'eg.wohnzimmer.rolladen.sued.prozent9':
              val5 = int(sh.eg.wohnzimmer.rolladen.sued.prozent9()*2.55 )
              sh.eg.wohnzimmer.rolladen.sued.prozent(val5,caller ='knx')
              exit
          ​

          Dass ShNG sich dann über das "caller" beschwert, ist ja klar.
          Zuletzt geändert von l0wside; 21.07.2025, 14:32.

          Kommentar


            #6
            Hat sich dann ja erledigt
            Zuletzt geändert von Msinn; 21.07.2025, 14:38.
            Viele Grüße
            Martin

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

            Kommentar

            Lädt...
            X