Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - Frage zu Attributen in items

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

    - √ - Frage zu Attributen in items

    Hallo (Marcus :-)),

    beim schreiben eines Plugins ist mir folgendes aufgefallen: wenn ich Attribute an ein Item hänge (z.B. hue_send = machhaltwas), das keine Typ Definition hat, dann werden die nicht and die Methode parse_item() übergeben. Wenn ich type = str wähle, dann schon. Wenn ich type = bool setze dann ebenfalls nicht.

    Beispiel in der item.conf
    Code:
    [[hue_01_01]]
    		type = str
    		hue_lamp_id = 1
    		hue_bridge_id = 0
    geht alles wie ich mir das vorstelle,

    bei der Lösung
    Code:
    [[hue_01_01]]
    		hue_lamp_id = 1
    		hue_bridge_id = 0
    wird nicht geparst (nicht parse_item() im Plugin aufgerufen).

    Ich beziehe mich auf smarthome.py - develop.

    Was habe ich nicht verstanden ?

    Danke für die Hilfe,

    Michel

    #2
    Das "letzte" Element in der "Klammerkette" braucht zwingend ein Type weil es das eigentliche item ist.
    Beim starten von sh.py siehst Du im Log sonst schon die Fehlermeldung. Übergeordnete Attribute werden vererbt.
    Umgezogen? Ja! ... Fertig? Nein!
    Baustelle 2.0 !

    Kommentar


      #3
      Ja, soweit verstanden. In meinem Fall ist es so, dass gar keine Fehlermeldung geschrieben wird, weil ich diese Bedingung ja einhalte, aber mit die items abgehen, die ich eigentlich parsen wollte.

      Michel

      Kommentar


        #4
        Zeig mal die vollständige item.conf, so verstehe ich das im Moment nicht.
        Umgezogen? Ja! ... Fertig? Nein!
        Baustelle 2.0 !

        Kommentar


          #5
          Hallo,

          hier ist sie:
          Code:
          #
          #   Projekt MW (11-2013)
          #
          [kg]
          
              [[flur]]
          
                  [[[lampe]]]
                      name = Flurlicht
                      type = bool
                      knx_dpt = 1
                      knx_cache = 0/0/14
                      knx_send = 0/0/11
                      
                      [[[[uzsu]]]]
                      	type = dict
                      	uzsu_item = kg.flur.lampe
                      	cache = on
                      
          
                  [[[tr_kg]]]
                      name = Treppenlicht KG-EG
                      type = bool
                      knx_dpt = 1
                      knx_cache = 0/0/4
                      knx_send = 0/0/1
          
                  [[[im1]]]
                      name = Melder Flur 1
                      [[[[meld]]]]
                          type = bool
                          knx_dpt = 1
                          knx_cache = 6/0/45
                          sqlite = yes
                      [[[[beweg]]]]
                          type = bool
                          knx_dpt = 1
                          knx_cache = 6/0/41
                          sqlite = yes
                      [[[[daemm]]]]
                          type = bool
                          knx_dpt = 1
                          knx_cache = 6/0/47
                          sqlite = yes
                      [[[[pic]]]]
                          type = num
                          sqlite = yes
                          eval = sh.kg.flur.im1.meld() + 1.0
                          eval_trigger = kg.flur.im1.meld
          
              [[waschen]]
                  [[[lampe]]]
                      name = Deckenlicht
                      type = bool
                      knx_dpt = 1
                      knx_cache = 0/0/24
                      knx_send = 0/0/21
          
                  [[[im1]]]
                      name = Melder Flur 1
                      [[[[meld]]]]
                          type = bool
                          knx_dpt = 1
                          knx_cache = 6/0/75
                          sqlite = yes
                      [[[[beweg]]]]
                          type = bool
                          knx_dpt = 1
                          knx_cache = 6/0/71
                          sqlite = yes
                      [[[[daemm]]]]
                          type = bool
                          knx_dpt = 1
                          knx_cache = 6/0/77
                          sqlite = yes
                      [[[[pic]]]]
                          type = num
                          sqlite = yes
                          eval = sh.kg.waschen.im1.meld() + 3.0
                          eval_trigger = kg.waschen.im1.meld
          
          	[[hue_01_01]]
          		type = str
          		hue_lamp_id = 1
          		hue_bridge_id = 0
              	[[[bridge_name]]]
              		type = str
          			hue_listen = bridge_name
              	[[[zigbeechannel]]]
              		type = num
          			hue_listen = zigbeechannel
              	[[[mac]]]
              		type = str
          			hue_listen = mac
              	[[[dhcp]]]
              		type = bool
          			hue_listen = dhcp
              	[[[ipaddress]]]
              		type = str
          			hue_listen = ipaddress
              	[[[netmask]]]
              		type = str
          			hue_listen = netwask
              	[[[gateway]]]
              		type = str
          			hue_listen = gateway
              	[[[utc]]]
              		type = str
          			hue_listen = UTC
              	[[[localtime]]]
              		type = str
          			hue_listen = localtime
              	[[[timezone]]]
              		type = str
          			hue_listen = timezone
              	[[[whitelist]]]
              		type = dict
          			hue_listen = whitelist
              	[[[bridge_swversion]]]
              		type = str
          			hue_listen = bridge_swversion
              	[[[apiversion]]]
              		type = str
          			hue_listen = apiversion
              	[[[swupdate]]]
              		type = dict
          			hue_listen = swupdate
              	[[[linkbutton]]]
              		type = bool
          			hue_listen = linkbutton
              	[[[portalservices]]]
              		type = bool
          			hue_listen = portalservices
              	[[[portalconnection]]]
              		type = str
          			hue_listen = portalconnection
              	[[[portalstate]]]
              		type = dict
          			hue_listen = portalstate
              	[[[power]]]
                  	type = bool
                  	hue_send = on
                  	hue_listen = on
                      knx_dpt = 1
                      knx_cache = 8/0/1
              	[[[reachable]]]
                  	type = bool
                  	hue_listen = reachable
                  [[[ct]]]
                  	type = num
                  	hue_send = ct
                  	hue_listen = ct
                  [[[scene]]]
                  	type = str
                  	hue_send = scene
                  	enforce_updates = true
                  [[[bri]]]
                  	type = num
                  	cache = on
                  	hue_send = bri
                  	hue_listen = bri
                  	hue_transitionTime = 0.2
          	       	[[[[dim]]]]
          	    		type = list
          	        	knx_dpt = 3
          	        	knx_listen = 8/0/2
          	        	hue_dim_max = 255
          	        	hue_dim_step = 10
          	        	hue_dim_time = 0.2
                  [[[sat]]]
                  	type = num
                  	cache = on
                  	hue_send = sat
                  	hue_listen = sat
                  [[[col_r]]]
                  	type = num
                  	cache = on
                  	hue_send = col_r
                  [[[col_g]]]
                  	type = num
                  	cache = on
                  	hue_send = col_g
                  [[[col_b]]]
                  	type = num
                  	cache = on
                  	hue_send = col_b
                  [[[hue]]]
                  	type = num
                  	cache = on
                  	hue_send = hue
                  	hue_listen = hue
                  	hue_transitionTime = 0.2
          	       	[[[[dim]]]]
          	    		type = list
          	        	knx_dpt = 3
          	        	knx_listen = 8/0/12
          	        	hue_dim_max = 65535
          	        	hue_dim_step = 2000
          	        	hue_dim_time = 0.2
                  [[[effect]]]
                  	type = str
                  	hue_send = effect
                  	hue_listen = effect
                  [[[alert]]]
                  	type = str
                  	hue_send = alert
                  	hue_listen = alert
                   [[[modeltype]]]
                  	type = str
                  	hue_listen = type
                   [[[name]]]
                  	type = str
                  	hue_listen = name
                   [[[modelid]]]
                  	type = str
                  	hue_listen = modelid
                   [[[swversion]]]
                  	type = str
                  	hue_listen = swversion
          Grüsse Michel

          Kommentar


            #6
            Also ich glaub jetzt hab ich es verstanden.

            Wenn du in kg.hue_01_01 den type weglässt dann wird es nicht geparst und nicht als item behandelt.
            Dafür haben dann aber kg.hue_01_01.bridge_name und alle folgenden/untergeordneten die Attribute hue_lamp_id = 1 und hue_bridge_id = 0 nach denen sich parsen lässt bzw. durchlaufen auch den Parser.

            Wenn Du nun also die hue items rausfiltern willst kannst Du das mit if 'hue_lamp_id' in item.conf and 'hue_bridge_id' in item.conf machen

            Hab ich das jetzt richtig verstanden oder stehe ich noch aufm Schlauch?
            Umgezogen? Ja! ... Fertig? Nein!
            Baustelle 2.0 !

            Kommentar


              #7
              Hallo Michel,

              ja, das Verhalten ist so implementiert. Über eine Änderung des Verhaltens muss ich mal in Ruhe nachdenken.

              Zitat von Orion Beitrag anzeigen
              Wenn ich type = str wähle, dann schon. Wenn ich type = bool setze dann ebenfalls nicht.
              Kann ich im Code aber nicht nachvollziehen. Das würde ja bedeuten das alle KNX-Schalter nicht funktionieren würden => glaube ich nicht.

              Bis bald

              Marcus

              Kommentar


                #8
                Hallo,

                Dein Plugin hat wahrscheinlich große Ähnlichkeiten, was die Struktur angeht, mit meinem MPD-Plugin. Vllt hilft es Dir bei der Umsetzung.

                Bis bald

                Marcus

                Kommentar


                  #9
                  Hallo Marcus, JuMi2006,

                  danke für die Rückmeldung. das mit bool ist mein Fehler, da hatte ich zwei Ergebnisse vertauscht.
                  Dein MPD Plugin kenne ich, da hatte ich schon mal ein VDR Plugin daraus gebaut. Insofern habe ich das verstanden.
                  Ziel ist es von mir Attribute nach unten zu vererben, damit ich sie nicht immer wieder eintragen muß. Beim MPD machst Du das, indem Du eine Schleife über alle Hosts machst. die Struktur mehrfach nutzt und du damit dann für alle Items auf den jeweiligen Host referenziert.
                  Das Problem (oder der Challange) ist, dass das dann über zwei Attribute permutiert und ich dann ca. 3x20-30 diese Struktur vervielfachen würde.
                  Meine Lösung heute ist, dass ich die Attribute aus dem Parent Element beim Parsen in den Childs zusätzlich anlege, damit hat dann jedes Child ebenfalls die Attribute.

                  Ideen welcome. Ich habe eine Lösung die Funktioniert, muß ich halt auf type = str achten.

                  Michel

                  @JuMI: nein, die Attribute werden dann nicht automatisch an die child items vererbt (es sei denn ich hätte das nicht gesehen)

                  Kommentar


                    #10
                    mea culpa - hatte das nicht getestet und wohl falsch in Erinnerung.

                    Ich war irgendwie auf das Verhalten vom enocean Plugin eingeschossen, sehe aber auch gerade erst im Code dass es separat ausgehandelt wird: https://github.com/mknx/smarthome/bl...init__.py#L359
                    Ein sehr schönes Beispiel wie ich finde.

                    Gruß Mirko
                    Umgezogen? Ja! ... Fertig? Nein!
                    Baustelle 2.0 !

                    Kommentar


                      #11
                      Hallo Mirko,

                      Danke für den Hinweis. Lustiger Weise war ich auch schon bei return_parent() angekommen gewesen, hatte es aber dann verworfen, weil es dann genau nur eine Ebene nach oben geht. Im Idealfall hätte ich gerne eine Lösung, die über allen Ebenen nach oben sucht. Vielleicht ist das aber etwas zu generisch als Ziel.

                      Michel

                      Kommentar


                        #12
                        Hallo,

                        Es war einfach zu spät ! enocean Plugin macht es rekursiv. Habe es so abgeändert übernommen und funktioniert gut. Der Vorteil dabei ist sogar, dass ich die Attribute der höheren Ebenen ebenfalls auslese. Es müssen keine "richtigen" Items sein.

                        Danke für die Hilfe und die Denkanstöße.

                        Michel

                        Kommentar

                        Lädt...
                        X