Ankündigung

Einklappen
Keine Ankündigung bisher.

Möglichkeiten von "struct"

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

    Möglichkeiten von "struct"

    Hallo,

    ich bin dabei meine Items mit gleicher Struktur vermehrt mit struct zu erstellen.

    Hier möchte ich kurz klären, welche Möglichkeiten struct heute schon bietet und ggf zukünftig bieten wird.
    • struct im struct geht (aktuell) nicht, oder?
    • Liste von struct: für ein Item mehrere structs (die sich ergänzen) verwenden
      Code:
      tasmota:
      	    sonoff_b1:
      	        online:
      	            type: str
      	            mqtt_topic_in: SONOFF_B1/tele/LWT
      	        struct:
      	          - tasmota_relais
      	          - tasmota_status
      	          - tasmota_ds18b20_sensor_addon
    Danke für Eure Feedback.

    #2
    Geht bisher beides nicht. Struct in struct kommt mit v1.7. Structs können dann auch Listen von structs enthalten.

    Ob in v1.7 items Listen von structs enthalten können, muss ich noch sehen.
    Viele Grüße
    Martin

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

    Kommentar


      #3
      Zitat von Msinn Beitrag anzeigen
      Ob in v1.7 items Listen von structs enthalten können, muss ich noch sehen
      Danke.

      Ich habe trotzdem das obere Beispiel mit den 3 structs mal ausprobiert. Die Items werden im Item Tree alle richtig erstellt.
      Bei der Verwendung des alten MQTT-Plugins kommt dann ein Fehler:
      Code:
      2020-03-15  19:36:23 ERROR    __main__            Unhandled exception: Can't convert 'int' object to str implicitly
      <class 'TypeError'>
        File "/usr/local/smarthome/bin/smarthome.py", line 1252, in <module>
          sh.start()
        File "/usr/local/smarthome/bin/smarthome.py", line 549, in start
          self.items.load_itemdefinitions(self._env_dir, self._items_dir, self._etc_dir, self._plugins_dir)
        File "/usr/local/smarthome/lib/item.py", line 243, in load_itemdefinitions
          item._init_prerun()
        File "/usr/local/smarthome/lib/item.py", line 2027, in _init_prerun
          items = ['sh.' + x.id() + '()' for x in _items]
        File "/usr/local/smarthome/lib/item.py", line 2027, in <listcomp>
          items = ['sh.' + x.id() + '()' for x in _items]
      Wenn man sich das im Debug anschaut, scheint der Fehler beim Parsen der Items aufzutreten.

      Dann muss ich anders Ordnung in die Sache bzw Items bringen.

      Kommentar


        #4
        Siehe oben: Nicht unterstützt
        Viele Grüße
        Martin

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

        Kommentar


          #5
          Kommt drauf an wie die struct aussehen. Ich implementiere bei mir ne Menge structs für ein Item, aber alle structs haben verschiedene children.

          Kommentar


            #6
            Noch ne Frage:
            Kann ich in einem struct auch die Einstiegsebene mit konfigurieren?

            struct:

            Code:
            tasmota_status:
                name: Tasmota Status Addon für Standardgeräte
                type: dict
                cache: yes
                mqtt_topic_in: #SONOFF_B1/tele/STATE
                uptime:
                    type: str
                    eval: value['Uptime']
                    eval_trigger: ..
            und im Item:
            Code:
            sonoff:
                sonoff_b1:
                    type: str
                    mqtt_topic_in: SONOFF_B1/tele/LWT
                    telegram_message: 'sonoff_b1: [VALUE]!'
            
                    status:
                        struct: tasmota_status
                        mqtt_topic_in: SONOFF_B1/tele/STATE
            Wird das unterstützt?

            Kommentar


              #7
              Zitat von Onkelandy Beitrag anzeigen
              Kommt drauf an wie die struct aussehen. Ich implementiere bei mir ne Menge structs für ein Item, aber alle structs haben verschiedene children.
              Kannst Du mal ein paar Beispiele posten?
              Danke!

              Kommentar


                #8
                Siehe hierzu auch: https://knx-user-forum.de/forum/supp...9F-mit-structs

                Kommentar


                  #9
                  Hallo,

                  ich bräuchte mal Eure Hilfe. Ich möchte mit structs meine Items für Tasmota sortieren.
                  Dazu habe ich einige structs definiert. Siehe hier:
                  Code:
                  %YAML 1.1
                  ---
                  tasmota_info:
                      input:
                          info1:
                              #SONOFF_B1/tele/INFO1 = {"Module":"Sonoff Basic","Version":"8.1.0(tasmota)","FallbackTopic":"cmnd/DVES_2EB8AE_fb/","GroupTopic":"sonoffs/cmnd/"}
                              #MQTT Message Versand nach Neustart
                              type: dict
                              cache: yes
                              mqtt_topic_in: #SONOFF_B1/tele/INFO1
                          info2:
                              #SONOFF_B1/tele/INFO2 = {"WebServerMode":"Admin","Hostname":"SONOFF_B1-6318","IPAddress":"192.168.2.25"}
                              #MQTT Message Versand nach Neustart
                              type: dict
                              cache: yes
                              mqtt_topic_in: #SONOFF_B1/tele/INFO2  
                          info3:
                              #SONOFF_B1/tele/INFO3 = {"RestartReason":{"Exception":0,"Reason":"Exception","EPC":["4025496d","00000000","00000000"],"EXCVADDR":"00000000","DEPC":"00000000","CallChain":["401016d3","40258f6b","40262693","40261f53","40267fef","40000f49","40000f49","40000e19","40001878","40105865","4010586b","4010000d","40260e38","40260de9","40246d4a","40246d4a","40246d4a","40246d4a","401009b4","40106005","4000050c","40246a3b","40246a36","40246c80","40246c80","40246d4a","40246d4a","40246d4a","40246c80","40246d4a","402858fd"]}}
                              #MQTT Message Versand nach Neustart
                              type: dict
                              cache: yes
                              mqtt_topic_in: #SONOFF_B1/tele/INFO3
                      module:
                          type: str
                          eval:  sh...input.info1()['Module']
                          eval_trigger: ..input.info1
                      tasmota_ver:
                          type: str
                          eval: sh...input.info1()['Version']
                          eval_trigger: ..input.info1
                      hostname:
                          type: str
                          eval: sh...input.info2()['Hostname']
                          eval_trigger: ..input.info2
                      ip_adress:
                          type: str
                          eval: sh...input.info2()['IPAddress']
                          eval_trigger: ..input.info2
                      restart_reason:
                          type: str
                          eval: sh...input.info3()['RestartReason']
                          eval_trigger: ..input.info3
                          
                  tasmota_status:
                      name: Tasmota Status Addon für Standardgeräte
                      type: dict
                      cache: yes
                      mqtt_topic_in: #SONOFF_B1/tele/STATE
                      #SONOFF_B1/tele/STATE = {"Time":"2020-03-15T08:31:54","Uptime":"44T01:16:55","UptimeSec":3806215,"Heap":27,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":11,"POWER":"ON","Wifi":{"AP":1,"SSId":"WLAN-Access","BSSId":"38:10:D5:15:87:69","Channel":1,"RSSI":56,"Signal":-72,"LinkCount":8,"Downtime":"0T00:00:43"}}
                      #SONOFF_RF1/tele/STATE = {"Time":"2020-03-15T08:37:03","Uptime":"43T13:45:34","UptimeSec":3764734,"Heap":27,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":11,"Wifi":{"AP":1,"SSId":"WLAN-Access","BSSId":"38:10:D5:15:87:69","Channel":1,"RSSI":100,"Signal":-16,"LinkCount":8,"Downtime":"0T00:00:51"}}
                      uptime:
                          type: str
                          eval: value['Uptime']
                          eval_trigger: ..
                      load_ave:
                          type: num
                          eval: value['LoadAvg']
                          eval_trigger: ..
                      mqtt_count:
                          type: num
                          eval: sh...()['MqttCount']
                          eval_trigger: ..
                      power:
                          type: bool
                          eval: sh...()['POWER']
                          eval_trigger: ..
                      wifi:
                          access_point:
                              type: num
                              eval: sh....()['Wifi']['AP']
                              eval_trigger: ...
                          wlan_ssid:
                              type: str
                              eval: sh....()['Wifi']['SSId']
                              eval_trigger: ...
                          wlan_bssid:
                              type: str
                              eval: sh....()['Wifi']['BSSId']
                              eval_trigger: ...    
                          wlan_signal:
                              type: num
                              eval: sh....()['Wifi']['Signal']
                              eval_trigger: ...
                          link_out:
                              type: num
                              eval: sh....()['Wifi']['LinkCount']
                              eval_trigger: ...
                          wlan_downtime:
                              type: str
                              eval: sh....()['Wifi']['Downtime']
                              eval_trigger: ...
                      alive:
                          name: Heartbeat (Meldung innerhalb der letzten 10 min)
                          type: bool
                          eval: (value != '$$!!%%')
                          eval_trigger: ..
                          autotimer: 600 = $$!!%%
                          
                  tasmota_rgbw_status:
                      name: Tasmota RGBW Status Addon
                      type: dict
                      cache: yes
                      mqtt_topic_in: #SONOFF_RGBW1/tele/STATE
                      #SONOFF_RGBW1/tele/STATE = {"Time":"2020-03-15T08:37:41","Uptime":"0T00:00:12","UptimeSec":12,"Heap":28,"SleepMode":"Dynamic","Sleep":10,"LoadAvg":45,"MqttCount":1,"POWER":"ON","Dimmer":84,"Color":"D600800000","HSBColor":"324,100,84",    "White":0,"CT":153,"Channel":[84,0,50,0,0],"Scheme":0,"Fade":"ON","Speed":1,"LedTable":"OFF","Wifi":{"AP":1,"SSId":"WLAN-Access","BSSId":"38:10:D5:15:87:69","Channel":1,"RSSI":62,"Signal":-69,"LinkCount":1,"Downtime":"0T00:00:06"}}
                      uptime:
                          type: str
                          eval: value['Uptime']
                          eval_trigger: ..
                      load_ave:
                          type: num
                          eval: value['LoadAvg']
                          eval_trigger: ..
                      mqtt_count:
                          type: num
                          eval: sh...()['MqttCount']
                          eval_trigger: ..
                      power:
                          type: bool
                          eval: sh...()['POWER']
                          eval_trigger: ..
                      dimmer:
                          type: num
                          eval: sh...()['Dimmer']
                          eval_trigger: ..
                      color:
                          type: str
                          eval: sh...()['Color']
                          eval_trigger: ..
                      hsb_color:
                          type: list
                          eval: sh...()['HSBColor']
                          eval_trigger: ..
                      white:
                          type: num
                          eval: sh...()['White']
                          eval_trigger: ..
                      ct:
                          type: num
                          eval: sh...()['CT']
                          eval_trigger: ..
                      channel:
                          type: list
                          eval: sh...()['Channel']
                          eval_trigger: ..
                      scheme:
                          type: num
                          eval: sh...()['Scheme']
                          eval_trigger: ..
                      fade:
                          type: bool
                          eval: sh...()['Fade']
                          eval_trigger: ..
                      speed:
                          type: num
                          eval: sh...()['Speed']
                          eval_trigger: ..
                      ledtable:
                          type: bool
                          eval: sh...()['LedTable']
                          eval_trigger: ..
                      wifi:
                          access_point:
                              type: num
                              eval: sh....()['Wifi']['AP']
                              eval_trigger: ...
                          wlan_ssid:
                              type: str
                              eval: sh....()['Wifi']['SSId']
                              eval_trigger: ...
                          wlan_bssid:
                              type: str
                              eval: sh....()['Wifi']['BSSId']
                              eval_trigger: ...    
                          wlan_signal:
                              type: num
                              eval: sh....()['Wifi']['Signal']
                              eval_trigger: ...
                          link_out:
                              type: num
                              eval: sh....()['Wifi']['LinkCount']
                              eval_trigger: ...
                          wlan_downtime:
                              type: str
                              eval: sh....()['Wifi']['Downtime']
                              eval_trigger: ...
                      alive:
                          name: Heartbeat (Meldung innerhalb der letzten 10 min)
                          type: bool
                          eval: (value != '$$!!%%')
                          eval_trigger: ..
                          autotimer: 600 = $$!!%%
                  
                  tasmota_ds18b20_sensor_addon:
                      name: Tasmota DS18B20 Sensor Addon
                      type: dict
                      cache: yes
                      #SONOFF_B1/tele/SENSOR = {"Time":"2020-03-15T12:18:25","DS18B20":{"Id":"00000938355C","Temperature":18.5},"TempUnit":"C"}
                      mqtt_topic_in: #SONOFF_B1/tele/SENSOR
                      temp:
                          type: num
                          eval: sh...()['DS18B20']['Temperature']
                          eval_trigger: ..
                      id:
                          type: num
                          eval: sh...()['DS18B20']['Id']
                          eval_trigger: ..
                      unit:
                          type: str
                          eval: sh...()['TempUnit']
                          eval_trigger: ..
                          
                  tasmota_am2301_sensor_addon:
                      name: Tasmota AM2301 Sensor Addon
                      type: dict
                      cache: yes
                      #SONOFF_B1/tele/SENSOR = {'tempunit': 'c', 'time': '2018-08-21t13:34:52', 'am2301': {'temperature': 28.0, 'humidity': 75.1}}
                      mqtt_topic_in: #SONOFF_B1/tele/SENSOR
                      temp:
                          type: num
                          eval: sh...()['AM2301']['Temperature']
                          eval_trigger: ..
                          hum:
                          type: num
                          eval: sh...()['AM2301']['Humidity']
                          eval_trigger: ..
                      unit:
                          type: str
                          eval: sh...()['TempUnit']
                          eval_trigger: ..
                          
                  tasmota_energy_sensor_addon:
                      name: Tasmota Energy Sensor Addon
                      type: dict
                      cache: yes
                      mqtt_topic_in: #SONOFF_B1/tele/SENSOR
                      power:
                          type: num
                          eval: value['ENERGY']['Power']
                          eval_trigger: ..
                      reactive_power:
                          type: num
                          eval: value['ENERGY']['ReactivePower']
                          eval_trigger: ..
                      factor:
                          type: num
                          eval: value['ENERGY']['Factor']
                          eval_trigger: ..
                      current:
                          type: num
                          eval: value['ENERGY']['Current']
                          eval_trigger: ..
                            
                  tasmota_hsb_addon:
                      name: Tasmota HSB Addon zur Werteerstellung #hue,sat,bright
                      type: str
                      cache: yes
                      eval: "'{0},{1},{2}'.format(sh..hue(), sh..sat(), sh..bright())"  # Erstellen eines str aus den 3 numerischen Werten.
                      eval_trigger:
                        - .hue
                        - .sat
                        - .bright
                      enforce_updates: yes
                          
                      hue:
                          name: Hue # 0-359°
                          type: num
                          cache: yes
                          visu_acl: rw
                      sat:
                          name: Saturation # 0-100
                          type: num
                          cache: yes
                          visu_acl: rw
                      bright:
                          name: Brightness # 0-100
                          type: num
                          cache: yes
                          visu_acl: rw
                  
                  tasmota_rgbw_result:
                      name: Tasmota Result-Auswertung für RGBW Devices
                      type: dict
                      cache: yes
                      mqtt_topic_in: #SONOFF_RGBW2/stat/RESULT
                      #SONOFF_RGBW1/stat/RESULT = {"POWER":"ON","Dimmer":84,"Color":"2B00D60000","HSBColor":"252,100,84","White":0,"CT":153,"Channel":[17,0,84,0,0]}
                      on_update:
                        - ..status.dimmer = value['Dimmer']
                        - ..status.color = value['Color']
                        - ..status.hsbcolor = value['HSBColor']
                        - ..status.white = value['White']
                        - ..status.ct = value['CT']
                        - ..status.channel = value['Channel']
                  Meine Items sind dann:
                  Code:
                  %YAML 1.1
                  ---
                  sonoff:
                      sonoff_b1:
                          type: str
                          mqtt_topic_in: SONOFF_B1/tele/LWT
                          telegram_message: 'sonoff_b1: [VALUE]!'
                  
                          on_off:
                              type: bool
                              cache: yes
                              visu_acl: rw
                              struct: uzsu.child
                              mqtt_topic_out: SONOFF_B1/cmnd/POWER
                              mqtt_topic_in: SONOFF_B1/stat/POWER
                  
                          on_off_toggle:
                              name: 0-off, 1-on, 2-toggle
                              type: num
                              visu_acl: rw
                              enforce_updates: yes
                              struct: uzsu.child
                              mqtt_topic_out: SONOFF_B1/cmnd/POWER
                  
                          status:
                              struct: tasmota_status
                              mqtt_topic_in: SONOFF_B1/tele/STATE
                  
                          info:
                              struct: tasmota_info
                              input:
                                  info1:
                                      mqtt_topic_in: SONOFF_B1/tele/INFO1
                                  info2:
                                      mqtt_topic_in: SONOFF_B1/tele/INFO2  
                                  info3:
                                      mqtt_topic_in: SONOFF_B1/tele/INFO3
                          
                          sensor:
                              mqtt_topic_in: SONOFF_B1/tele/SENSOR
                              struct: tasmota_ds18b20_sensor_addon
                  
                      sonoff_b2:
                          type: str
                          mqtt_topic_in: SONOFF_B2/tele/LWT
                          telegram_message: 'sonoff_b2: [VALUE]!'
                  
                          on_off:
                              type: bool
                              cache: yes
                              visu_acl: rw
                              struct: uzsu.child
                              mqtt_topic_out: SONOFF_B2/cmnd/POWER
                              mqtt_topic_in: SONOFF_B2/stat/POWER
                  
                          on_off_toggle:
                              name: 0-off, 1-on, 2-toggle
                              type: num
                              visu_acl: rw
                              enforce_updates: yes
                              struct: uzsu.child
                              mqtt_topic_out: SONOFF_B2/cmnd/POWER
                  
                          status:
                              struct: tasmota_status
                              mqtt_topic_in: SONOFF_B2/tele/STATE
                              
                          info:
                              struct: tasmota_info
                              input:
                                  info1:
                                      mqtt_topic_in: SONOFF_B2/tele/INFO1
                                  info2:
                                      mqtt_topic_in: SONOFF_B2/tele/INFO2  
                                  info3:
                                      mqtt_topic_in: SONOFF_B2/tele/INFO3
                              
                          sensor:
                              mqtt_topic_in: SONOFF_B2/tele/SENSOR
                              struct: tasmota_am2301_sensor_addon
                  
                      sonoff_s1:
                          type: str
                          mqtt_topic_in: SONOFF_S1/tele/LWT
                          telegram_message: 'sonoff_s1: [VALUE]!'
                  
                          on_off:
                              type: bool
                              cache: yes
                              visu_acl: rw
                              struct: uzsu.child
                              mqtt_topic_out: SONOFF_S1/cmnd/POWER
                              mqtt_topic_in: SONOFF_S1/stat/POWER
                  
                          on_off_toggle:
                              name: 0-off, 1-on, 2-toggle
                              type: num
                              visu_acl: rw
                              enforce_updates: yes
                              struct: uzsu.child
                              mqtt_topic_out: SONOFF_S1/cmnd/POWER
                  
                          status:
                              struct: tasmota_status
                              mqtt_topic_in: SONOFF_S1/tele/STATE
                  
                          info:
                              struct: tasmota_info
                              input:
                                  info1:
                                      mqtt_topic_in: SONOFF_S1/tele/INFO1
                                  info2:
                                      mqtt_topic_in: SONOFF_S1/tele/INFO2  
                                  info3:
                                      mqtt_topic_in: SONOFF_S1/tele/INFO3
                  
                      sonoff_rf1:
                          type: str
                          mqtt_topic_in: SONOFF_RF1/tele/LWT
                          telegram_message: 'sonoff_rf1: [VALUE]!'
                  
                          send_key1:
                              name: Hoftor
                              type: num
                              mqtt_topic_out: SONOFF_RF1/cmnd/RfKey1
                              enforce_updates: yes
                          send_key2:
                              name: Garagentor links
                              type: num
                              mqtt_topic_out: SONOFF_RF1/cmnd/RfKey2
                              enforce_updates: yes
                          send_key3:
                              name: Garagentor rechts
                              type: num
                              mqtt_topic_out: SONOFF_RF1/cmnd/RfKey3
                              enforce_updates: yes
                  
                          result:
                              type: dict
                              mqtt_topic_in: SONOFF_RF1/tele/RESULT
                              cache: yes
                              #sonoff_rf1/tele/result {"rfreceived":{"sync":8000,"low":270,"high":770,"data":"4c1012","rfkey":4}}
                              
                              received_key1:
                                  name: Key 1 empfangen
                                  type: bool
                                  eval: 1 if int(sh...()['RfReceived']['RfKey'] == 1) else 0
                                  eval_trigger: ..
                              received_key2:
                                  name: Key 2 empfangen
                                  type: bool
                                  eval: 1 if int(sh...()['RfReceived']['RfKey'] == 2) else 0
                                  eval_trigger: ..
                              received_key3:
                                  name: Key 3 empfangen
                                  type: bool
                                  eval: 1 if int(sh...()['RfReceived']['RfKey'] == 3) else 0
                                  eval_trigger: ..
                              received_data1:
                                  name: 3er Taster Bad links
                                  type: bool
                                  eval: 1 if int(sh...()['RfReceived']['Data'] == '4C1012') else None
                                  eval_trigger: ..
                                  on_update:
                                      - rollladen.og.bad_o.move = 0
                                      - rollladen.og.bad_w.move = 0
                              received_data2:
                                  name: 3er Taster Bad mitte
                                  type: bool
                                  eval: 1 if int(sh...()['RfReceived']['Data'] == '4C1018') else None
                                  eval_trigger: ..
                                  on_update:
                                      - rollladen.og.bad_o.stop = 1
                                      - rollladen.og.bad_w.stop = 1
                              received_data3:
                                  name: 3er Taster Bad rechts
                                  type: bool
                                  eval: 1 if int(sh...()['RfReceived']['Data'] == '4C1014') else None
                                  eval_trigger: ..
                                  on_update:
                                      - rollladen.og.bad_o.move = 1
                                      - rollladen.og.bad_w.move = 1
                              received_data4:
                                  name: 2er Taster links
                                  type: bool
                                  eval: 1 if int(sh...()['RfReceived']['Data'] == '021FE2') else None
                                  eval_trigger: ..
                                  on_update:
                                      - steckdosen.waschkueche.waschmaschine.onoff = 1
                                      - steckdosen.waschkueche.waeschetrockner.onoff = 1
                              received_data5:
                                  name: 2er Taster rechts
                                  type: bool
                                  eval: 1 if int(sh...()['RfReceived']['Data'] == '021FE4') else None
                                  eval_trigger: ..
                                  on_update:
                                      - steckdosen.waschkueche.waschmaschine.onoff = 0
                                      - steckdosen.waschkueche.waeschetrockner.onoff = 0            
                          status:
                              struct: tasmota_status
                              mqtt_topic_in: SONOFF_RF1/tele/STATE
                  
                          info:
                              struct: tasmota_info
                              input:
                                  info1:
                                      mqtt_topic_in: SONOFF_RF1/tele/INFO1
                                  info2:
                                      mqtt_topic_in: SONOFF_RF1/tele/INFO2  
                                  info3:
                                      mqtt_topic_in: SONOFF_RF1/tele/INFO3
                              
                      sonoff_rgbw1:
                          type: str
                          mqtt_topic_in: SONOFF_RGBW1/tele/LWT
                          telegram_message: 'sonoff_rgbw1: [VALUE]!'
                  
                          on_off:
                              type: bool
                              cache: yes
                              visu_acl: rw
                              struct: uzsu.child
                              mqtt_topic_out: SONOFF_RGBW1/cmnd/POWER
                              mqtt_topic_in: SONOFF_RGBW1/stat/POWER
                  
                          on_off_toggle:
                              name: 0-off, 1-on, 2-toggle
                              type: num
                              visu_acl: rw
                              enforce_updates: yes
                              struct: uzsu.child
                              mqtt_topic_out: SONOFF_RGBW1/cmnd/POWER
                              
                          hsb:
                              struct: tasmota_hsb_addon
                              mqtt_topic_out: SONOFF_RGBW1/cmnd/HsbColor
                              
                          result:
                              struct: tasmota_rgbw_result
                              mqtt_topic_in: SONOFF_RGBW1/stat/RESULT
                  
                          status:
                              struct: tasmota_rgbw_status
                              mqtt_topic_in: SONOFF_RGBW1/tele/STATE
                  
                          info:
                              struct: tasmota_info
                              input:
                                  info1:
                                      mqtt_topic_in: SONOFF_RGBW1/tele/INFO1
                                  info2:
                                      mqtt_topic_in: SONOFF_RGBW1/tele/INFO2  
                                  info3:
                                      mqtt_topic_in: SONOFF_RGBW1/tele/INFO3
                              
                      sonoff_rgbw2:
                          type: str
                          mqtt_topic_in: SONOFF_RGBW2/tele/LWT
                          telegram_message: 'sonoff_rgbw2: [VALUE]!'
                  
                          on_off:
                              type: bool
                              cache: yes
                              visu_acl: rw
                              struct: uzsu.child
                              mqtt_topic_out: SONOFF_RGBW2/cmnd/POWER
                              mqtt_topic_in: SONOFF_RGBW2/stat/POWER
                  
                          on_off_toggle:
                              name: 0-off, 1-on, 2-toggle
                              type: num
                              visu_acl: rw
                              enforce_updates: yes
                              struct: uzsu.child
                              mqtt_topic_out: SONOFF_RGBW2/cmnd/POWER
                              
                          hsb:
                              struct: tasmota_hsb_addon
                              mqtt_topic_out: SONOFF_RGBW2/cmnd/HsbColor
                              
                          result:
                              struct: tasmota_rgbw_result
                              mqtt_topic_in: SONOFF_RGBW2/stat/RESULT
                  
                          status:
                              struct: tasmota_rgbw_status
                              mqtt_topic_in: SONOFF_RGBW2/tele/STATE
                  
                          info:
                              struct: tasmota_info
                              input:
                                  info1:
                                      mqtt_topic_in: SONOFF_RGBW2/tele/INFO1
                                  info2:
                                      mqtt_topic_in: SONOFF_RGBW2/tele/INFO2  
                                  info3:
                                      mqtt_topic_in: SONOFF_RGBW2/tele/INFO3
                          sensor:
                              struct: tasmota_am2301_sensor_addon
                              mqtt_topic_in: SONOFF_RGBW2/tele/SENSOR
                              
                      nxsm_200_01:
                          name: WLAN-Steckdose1
                          type: str
                          mqtt_topic_in: nxsm200_01/tele/LWT
                          telegram_message: 'nxsm200_01: [VALUE]!'
                  
                          on_off:
                              type: bool
                              cache: yes
                              visu_acl: rw
                              struct: uzsu.child
                              mqtt_topic_out: nxsm200_01/cmnd/POWER
                              mqtt_topic_in: nxsm200_01/stat/POWER
                  
                          on_off_toggle:
                              name: 0-off, 1-on, 2-toggle
                              type: num
                              visu_acl: rw
                              enforce_updates: yes
                              struct: uzsu.child
                              mqtt_topic_out: nxsm200_01/cmnd/POWER
                  
                          status:
                              struct: tasmota_status
                              mqtt_topic_in: nxsm200_01/tele/STATE
                              
                          info:
                              struct: tasmota_info
                              input:
                                  info1:
                                      mqtt_topic_in: nxsm200_01/tele/INFO1
                                  info2:
                                      mqtt_topic_in: nxsm200_01/tele/INFO2  
                                  info3:
                                      mqtt_topic_in: nxsm200_01/tele/INFO3
                          
                          sensor:
                              mqtt_topic_in: nxsm200_01/tele/SENSOR
                              struct: tasmota_energy_sensor_addon
                      
                      nxsm_200_02:
                          name: WLAN-Steckdose2
                          mqtt_topic_in: nxsm200_02/tele/LWT
                          on_off:
                              type: bool
                              cache: yes
                              visu_acl: rw
                              struct: uzsu.child
                              mqtt_topic_out: nxsm200_02/cmnd/POWER
                              mqtt_topic_in: nxsm200_02/stat/POWER
                  
                          on_off_toggle:
                              name: 0-off, 1-on, 2-toggle
                              type: num
                              visu_acl: rw
                              enforce_updates: yes
                              struct: uzsu.child
                              mqtt_topic_out: nxsm200_02/cmnd/POWER
                  
                          status:
                              struct: tasmota_status
                              mqtt_topic_in: nxsm200_02/tele/STATE
                              
                          info:
                              struct: tasmota_info
                              input:
                                  info1:
                                      mqtt_topic_in: nxsm200_02/tele/INFO1
                                  info2:
                                      mqtt_topic_in: nxsm200_02/tele/INFO2  
                                  info3:
                                      mqtt_topic_in: nxsm200_02/tele/INFO3
                          
                          sensor:
                              mqtt_topic_in: nxsm200_02/tele/SENSOR
                              struct: tasmota_energy_sensor_addon
                  Es kommt zu folgendem Fehler im Log:
                  Code:
                  2020-03-17  08:06:42 ERROR    __main__            Unhandled exception: can only concatenate str (not "int") to str
                  <class 'TypeError'>
                    File "/usr/local/smarthome/bin/smarthome.py", line 1311, in <module>
                      sh.start()
                    File "/usr/local/smarthome/bin/smarthome.py", line 591, in start
                      self.items.load_itemdefinitions(self._env_dir, self._items_dir, self._etc_dir, self._plugins_dir)
                    File "/usr/local/smarthome/lib/item.py", line 373, in load_itemdefinitions
                      item._init_prerun()
                    File "/usr/local/smarthome/lib/item.py", line 2136, in _init_prerun
                      items = ['sh.' + x.id() + '()' for x in _items]
                    File "/usr/local/smarthome/lib/item.py", line 2136, in <listcomp>
                      items = ['sh.' + x.id() + '()' for x in _items]
                  Darauf hin habe ich mit dem eingebauten yaml_systax_checker die item.yaml expandiert.
                  Hier das Ergebnis:
                  Code:
                  %YAML 1.1
                  ---
                  sonoff:
                      sonoff_b1:
                          on_off:
                              name: Vorlage-Struktur für Zeitschaltuhren
                              uzsu:
                                  type: dict
                                  uzsu_item: ..
                                  cache: 'True'
                                  visu_acl: rw
                                  last:
                                      remark: The last set value if UZSU is active
                                      type: foo
                                      visu_acl: ro
                                      eval: "'None' if sh...lastvalue() is None else sh...lastvalue()"
                                      crontab: init = 'None'
                                      eval_trigger: ..
                                  active:
                                      remark: Use this item to easily turn on or off your UZSU
                                      type: bool
                                      eval: sh...activate(value)
                                      visu_acl: rw
                                      status:
                                          type: bool
                                          eval: sh....activate()
                                          eval_trigger:
                                            - ..
                                            - '...'
                                          on_change: .. = value
                                          crontab: init = 0
                              type: bool
                              cache: 'True'
                              visu_acl: rw
                              # struct: uzsu.child
                              mqtt_topic_out: SONOFF_B1/cmnd/POWER
                              mqtt_topic_in: SONOFF_B1/stat/POWER
                          on_off_toggle:
                              name: 0-off, 1-on, 2-toggle
                              uzsu:
                                  type: dict
                                  uzsu_item: ..
                                  cache: 'True'
                                  visu_acl: rw
                                  last:
                                      remark: The last set value if UZSU is active
                                      type: foo
                                      visu_acl: ro
                                      eval: "'None' if sh...lastvalue() is None else sh...lastvalue()"
                                      crontab: init = 'None'
                                      eval_trigger: ..
                                  active:
                                      remark: Use this item to easily turn on or off your UZSU
                                      type: bool
                                      eval: sh...activate(value)
                                      visu_acl: rw
                                      status:
                                          type: bool
                                          eval: sh....activate()
                                          eval_trigger:
                                            - ..
                                            - '...'
                                          on_change: .. = value
                                          crontab: init = 0
                              type: num
                              visu_acl: rw
                              enforce_updates: 'True'
                              # struct: uzsu.child
                              mqtt_topic_out: SONOFF_B1/cmnd/POWER
                          status:
                              name: Tasmota Status Addon für Standardgeräte
                              type: dict
                              cache: 'True'
                              mqtt_topic_in: SONOFF_B1/tele/STATE
                              uptime:
                                  type: str
                                  eval: value['Uptime']
                                  eval_trigger: ..
                              load_ave:
                                  type: num
                                  eval: value['LoadAvg']
                                  eval_trigger: ..
                              mqtt_count:
                                  type: num
                                  eval: sh...()['MqttCount']
                                  eval_trigger: ..
                              power:
                                  type: bool
                                  eval: sh...()['POWER']
                                  eval_trigger: ..
                              wifi:
                                  access_point:
                                      type: num
                                      eval: sh....()['Wifi']['AP']
                                      eval_trigger: '...'
                                  wlan_ssid:
                                      type: str
                                      eval: sh....()['Wifi']['SSId']
                                      eval_trigger: '...'
                                  wlan_bssid:
                                      type: str
                                      eval: sh....()['Wifi']['BSSId']
                                      eval_trigger: '...'
                                  wlan_signal:
                                      type: num
                                      eval: sh....()['Wifi']['Signal']
                                      eval_trigger: '...'
                                  link_out:
                                      type: num
                                      eval: sh....()['Wifi']['LinkCount']
                                      eval_trigger: '...'
                                  wlan_downtime:
                                      type: str
                                      eval: sh....()['Wifi']['Downtime']
                                      eval_trigger: '...'
                              alive:
                                  name: Heartbeat (Meldung innerhalb der letzten 10 min)
                                  type: bool
                                  eval: (value != '$$!!%%')
                                  eval_trigger: ..
                                  autotimer: 600 = $$!!%%
                              # struct: tasmota_status
                          info:
                              input:
                                  info1:
                                      type: dict
                                      cache: 'True'
                                      mqtt_topic_in: SONOFF_B1/tele/INFO1
                                  info2:
                                      type: dict
                                      cache: 'True'
                                      mqtt_topic_in: SONOFF_B1/tele/INFO2
                                  info3:
                                      type: dict
                                      cache: 'True'
                                      mqtt_topic_in: SONOFF_B1/tele/INFO3
                              module:
                                  type: str
                                  eval: sh...input.info1()['Module']
                                  eval_trigger: ..input.info1
                              tasmota_ver:
                                  type: str
                                  eval: sh...input.info1()['Version']
                                  eval_trigger: ..input.info1
                              hostname:
                                  type: str
                                  eval: sh...input.info2()['Hostname']
                                  eval_trigger: ..input.info2
                              ip_adress:
                                  type: str
                                  eval: sh...input.info2()['IPAddress']
                                  eval_trigger: ..input.info2
                              restart_reason:
                                  type: str
                                  eval: sh...input.info3()['RestartReason']
                                  eval_trigger: ..input.info3
                              # struct: tasmota_info
                          sensor:
                              name: Tasmota DS18B20 Sensor Addon
                              type: dict
                              cache: 'True'
                              mqtt_topic_in: SONOFF_B1/tele/SENSOR
                              temp:
                                  type: num
                                  eval: sh...()['DS18B20']['Temperature']
                                  eval_trigger: ..
                              id:
                                  type: num
                                  eval: sh...()['DS18B20']['Id']
                                  eval_trigger: ..
                              unit:
                                  type: str
                                  eval: sh...()['TempUnit']
                                  eval_trigger: ..
                              # struct: tasmota_ds18b20_sensor_addon
                          type: str
                          mqtt_topic_in: SONOFF_B1/tele/LWT
                          telegram_message: 'sonoff_b1: [VALUE]!'
                      sonoff_b2:
                          on_off:
                              name: Vorlage-Struktur für Zeitschaltuhren
                              uzsu:
                                  type: dict
                                  uzsu_item: ..
                                  cache: 'True'
                                  visu_acl: rw
                                  last:
                                      remark: The last set value if UZSU is active
                                      type: foo
                                      visu_acl: ro
                                      eval: "'None' if sh...lastvalue() is None else sh...lastvalue()"
                                      crontab: init = 'None'
                                      eval_trigger: ..
                                  active:
                                      remark: Use this item to easily turn on or off your UZSU
                                      type: bool
                                      eval: sh...activate(value)
                                      visu_acl: rw
                                      status:
                                          type: bool
                                          eval: sh....activate()
                                          eval_trigger:
                                            - ..
                                            - '...'
                                          on_change: .. = value
                                          crontab: init = 0
                              type: bool
                              cache: 'True'
                              visu_acl: rw
                              # struct: uzsu.child
                              mqtt_topic_out: SONOFF_B2/cmnd/POWER
                              mqtt_topic_in: SONOFF_B2/stat/POWER
                          on_off_toggle:
                              name: 0-off, 1-on, 2-toggle
                              uzsu:
                                  type: dict
                                  uzsu_item: ..
                                  cache: 'True'
                                  visu_acl: rw
                                  last:
                                      remark: The last set value if UZSU is active
                                      type: foo
                                      visu_acl: ro
                                      eval: "'None' if sh...lastvalue() is None else sh...lastvalue()"
                                      crontab: init = 'None'
                                      eval_trigger: ..
                                  active:
                                      remark: Use this item to easily turn on or off your UZSU
                                      type: bool
                                      eval: sh...activate(value)
                                      visu_acl: rw
                                      status:
                                          type: bool
                                          eval: sh....activate()
                                          eval_trigger:
                                            - ..
                                            - '...'
                                          on_change: .. = value
                                          crontab: init = 0
                              type: num
                              visu_acl: rw
                              enforce_updates: 'True'
                              # struct: uzsu.child
                              mqtt_topic_out: SONOFF_B2/cmnd/POWER
                          status:
                              name: Tasmota Status Addon für Standardgeräte
                              type: dict
                              cache: 'True'
                              mqtt_topic_in: SONOFF_B2/tele/STATE
                              uptime:
                                  type: str
                                  eval: value['Uptime']
                                  eval_trigger: ..
                              load_ave:
                                  type: num
                                  eval: value['LoadAvg']
                                  eval_trigger: ..
                              mqtt_count:
                                  type: num
                                  eval: sh...()['MqttCount']
                                  eval_trigger: ..
                              power:
                                  type: bool
                                  eval: sh...()['POWER']
                                  eval_trigger: ..
                              wifi:
                                  access_point:
                                      type: num
                                      eval: sh....()['Wifi']['AP']
                                      eval_trigger: '...'
                                  wlan_ssid:
                                      type: str
                                      eval: sh....()['Wifi']['SSId']
                                      eval_trigger: '...'
                                  wlan_bssid:
                                      type: str
                                      eval: sh....()['Wifi']['BSSId']
                                      eval_trigger: '...'
                                  wlan_signal:
                                      type: num
                                      eval: sh....()['Wifi']['Signal']
                                      eval_trigger: '...'
                                  link_out:
                                      type: num
                                      eval: sh....()['Wifi']['LinkCount']
                                      eval_trigger: '...'
                                  wlan_downtime:
                                      type: str
                                      eval: sh....()['Wifi']['Downtime']
                                      eval_trigger: '...'
                              alive:
                                  name: Heartbeat (Meldung innerhalb der letzten 10 min)
                                  type: bool
                                  eval: (value != '$$!!%%')
                                  eval_trigger: ..
                                  autotimer: 600 = $$!!%%
                              # struct: tasmota_status
                          info:
                              input:
                                  info1:
                                      type: dict
                                      cache: 'True'
                                      mqtt_topic_in: SONOFF_B2/tele/INFO1
                                  info2:
                                      type: dict
                                      cache: 'True'
                                      mqtt_topic_in: SONOFF_B2/tele/INFO2
                                  info3:
                                      type: dict
                                      cache: 'True'
                                      mqtt_topic_in: SONOFF_B2/tele/INFO3
                              module:
                                  type: str
                                  eval: sh...input.info1()['Module']
                                  eval_trigger: ..input.info1
                              tasmota_ver:
                                  type: str
                                  eval: sh...input.info1()['Version']
                                  eval_trigger: ..input.info1
                              hostname:
                                  type: str
                                  eval: sh...input.info2()['Hostname']
                                  eval_trigger: ..input.info2
                              ip_adress:
                                  type: str
                                  eval: sh...input.info2()['IPAddress']
                                  eval_trigger: ..input.info2
                              restart_reason:
                                  type: str
                                  eval: sh...input.info3()['RestartReason']
                                  eval_trigger: ..input.info3
                              # struct: tasmota_info
                          sensor:
                              name: Tasmota AM2301 Sensor Addon
                              type: dict
                              cache: 'True'
                              mqtt_topic_in: SONOFF_B2/tele/SENSOR
                              temp:
                                  type: num
                                  eval: sh...()['AM2301']['Humidity']
                                  eval_trigger: ..
                                  hum: None
                              unit:
                                  type: str
                                  eval: sh...()['TempUnit']
                                  eval_trigger: ..
                              # struct: tasmota_am2301_sensor_addon
                          type: str
                          mqtt_topic_in: SONOFF_B2/tele/LWT
                          telegram_message: 'sonoff_b2: [VALUE]!'
                      sonoff_s1:
                          on_off:
                              name: Vorlage-Struktur für Zeitschaltuhren
                              uzsu:
                                  type: dict
                                  uzsu_item: ..
                                  cache: 'True'
                                  visu_acl: rw
                                  last:
                                      remark: The last set value if UZSU is active
                                      type: foo
                                      visu_acl: ro
                                      eval: "'None' if sh...lastvalue() is None else sh...lastvalue()"
                                      crontab: init = 'None'
                                      eval_trigger: ..
                                  active:
                                      remark: Use this item to easily turn on or off your UZSU
                                      type: bool
                                      eval: sh...activate(value)
                                      visu_acl: rw
                                      status:
                                          type: bool
                                          eval: sh....activate()
                                          eval_trigger:
                                            - ..
                                            - '...'
                                          on_change: .. = value
                                          crontab: init = 0
                              type: bool
                              cache: 'True'
                              visu_acl: rw
                              # struct: uzsu.child
                              mqtt_topic_out: SONOFF_S1/cmnd/POWER
                              mqtt_topic_in: SONOFF_S1/stat/POWER
                          on_off_toggle:
                              name: 0-off, 1-on, 2-toggle
                              uzsu:
                                  type: dict
                                  uzsu_item: ..
                                  cache: 'True'
                                  visu_acl: rw
                                  last:
                                      remark: The last set value if UZSU is active
                                      type: foo
                                      visu_acl: ro
                                      eval: "'None' if sh...lastvalue() is None else sh...lastvalue()"
                                      crontab: init = 'None'
                                      eval_trigger: ..
                                  active:
                                      remark: Use this item to easily turn on or off your UZSU
                                      type: bool
                                      eval: sh...activate(value)
                                      visu_acl: rw
                                      status:
                                          type: bool
                                          eval: sh....activate()
                                          eval_trigger:
                                            - ..
                                            - '...'
                                          on_change: .. = value
                                          crontab: init = 0
                              type: num
                              visu_acl: rw
                              enforce_updates: 'True'
                              # struct: uzsu.child
                              mqtt_topic_out: SONOFF_S1/cmnd/POWER
                          status:
                              name: Tasmota Status Addon für Standardgeräte
                              type: dict
                              cache: 'True'
                              mqtt_topic_in: SONOFF_S1/tele/STATE
                              uptime:
                                  type: str
                                  eval: value['Uptime']
                                  eval_trigger: ..
                              load_ave:
                                  type: num
                                  eval: value['LoadAvg']
                                  eval_trigger: ..
                              mqtt_count:
                                  type: num
                                  eval: sh...()['MqttCount']
                                  eval_trigger: ..
                              power:
                                  type: bool
                                  eval: sh...()['POWER']
                                  eval_trigger: ..
                              wifi:
                                  access_point:
                                      type: num
                                      eval: sh....()['Wifi']['AP']
                                      eval_trigger: '...'
                                  wlan_ssid:
                                      type: str
                                      eval: sh....()['Wifi']['SSId']
                                      eval_trigger: '...'
                                  wlan_bssid:
                                      type: str
                                      eval: sh....()['Wifi']['BSSId']
                                      eval_trigger: '...'
                                  wlan_signal:
                                      type: num
                                      eval: sh....()['Wifi']['Signal']
                                      eval_trigger: '...'
                                  link_out:
                                      type: num
                                      eval: sh....()['Wifi']['LinkCount']
                                      eval_trigger: '...'
                                  wlan_downtime:
                                      type: str
                                      eval: sh....()['Wifi']['Downtime']
                                      eval_trigger: '...'
                              alive:
                                  name: Heartbeat (Meldung innerhalb der letzten 10 min)
                                  type: bool
                                  eval: (value != '$$!!%%')
                                  eval_trigger: ..
                                  autotimer: 600 = $$!!%%
                              # struct: tasmota_status
                          info:
                              input:
                                  info1:
                                      type: dict
                                      cache: 'True'
                                      mqtt_topic_in: SONOFF_S1/tele/INFO1
                                  info2:
                                      type: dict
                                      cache: 'True'
                                      mqtt_topic_in: SONOFF_S1/tele/INFO2
                                  info3:
                                      type: dict
                                      cache: 'True'
                                      mqtt_topic_in: SONOFF_S1/tele/INFO3
                              module:
                                  type: str
                                  eval: sh...input.info1()['Module']
                                  eval_trigger: ..input.info1
                              tasmota_ver:
                                  type: str
                                  eval: sh...input.info1()['Version']
                                  eval_trigger: ..input.info1
                              hostname:
                                  type: str
                                  eval: sh...input.info2()['Hostname']
                                  eval_trigger: ..input.info2
                              ip_adress:
                                  type: str
                                  eval: sh...input.info2()['IPAddress']
                                  eval_trigger: ..input.info2
                              restart_reason:
                                  type: str
                                  eval: sh...input.info3()['RestartReason']
                                  eval_trigger: ..input.info3
                              # struct: tasmota_info
                          type: str
                          mqtt_topic_in: SONOFF_S1/tele/LWT
                          telegram_message: 'sonoff_s1: [VALUE]!'
                      sonoff_rf1:
                          send_key1:
                              name: Hoftor
                              type: num
                              mqtt_topic_out: SONOFF_RF1/cmnd/RfKey1
                              enforce_updates: 'True'
                          send_key2:
                              name: Garagentor links
                              type: num
                              mqtt_topic_out: SONOFF_RF1/cmnd/RfKey2
                              enforce_updates: 'True'
                          send_key3:
                              name: Garagentor rechts
                              type: num
                              mqtt_topic_out: SONOFF_RF1/cmnd/RfKey3
                              enforce_updates: 'True'
                          result:
                              received_key1:
                                  name: Key 1 empfangen
                                  type: bool
                                  eval: 1 if int(sh...()['RfReceived']['RfKey'] == 1) else 0
                                  eval_trigger: ..
                              received_key2:
                                  name: Key 2 empfangen
                                  type: bool
                                  eval: 1 if int(sh...()['RfReceived']['RfKey'] == 2) else 0
                                  eval_trigger: ..
                              received_key3:
                                  name: Key 3 empfangen
                                  type: bool
                                  eval: 1 if int(sh...()['RfReceived']['RfKey'] == 3) else 0
                                  eval_trigger: ..
                              received_data1:
                                  name: 3er Taster Bad links
                                  type: bool
                                  eval: 1 if int(sh...()['RfReceived']['Data'] == '4C1012') else None
                                  eval_trigger: ..
                                  on_update:
                                    - rollladen.og.bad_o.move = 0
                                    - rollladen.og.bad_w.move = 0
                              received_data2:
                                  name: 3er Taster Bad mitte
                                  type: bool
                                  eval: 1 if int(sh...()['RfReceived']['Data'] == '4C1018') else None
                                  eval_trigger: ..
                                  on_update:
                                    - rollladen.og.bad_o.stop = 1
                                    - rollladen.og.bad_w.stop = 1
                              received_data3:
                                  name: 3er Taster Bad rechts
                                  type: bool
                                  eval: 1 if int(sh...()['RfReceived']['Data'] == '4C1014') else None
                                  eval_trigger: ..
                                  on_update:
                                    - rollladen.og.bad_o.move = 1
                                    - rollladen.og.bad_w.move = 1
                              received_data4:
                                  name: 2er Taster links
                                  type: bool
                                  eval: 1 if int(sh...()['RfReceived']['Data'] == '021FE2') else None
                                  eval_trigger: ..
                                  on_update:
                                    - steckdosen.waschkueche.waschmaschine.onoff = 1
                                    - steckdosen.waschkueche.waeschetrockner.onoff = 1
                              received_data5:
                                  name: 2er Taster rechts
                                  type: bool
                                  eval: 1 if int(sh...()['RfReceived']['Data'] == '021FE4') else None
                                  eval_trigger: ..
                                  on_update:
                                    - steckdosen.waschkueche.waschmaschine.onoff = 0
                                    - steckdosen.waschkueche.waeschetrockner.onoff = 0
                              type: dict
                              mqtt_topic_in: SONOFF_RF1/tele/RESULT
                              cache: 'True'
                          status:
                              name: Tasmota Status Addon für Standardgeräte
                              type: dict
                              cache: 'True'
                              mqtt_topic_in: SONOFF_RF1/tele/STATE
                              uptime:
                                  type: str
                                  eval: value['Uptime']
                                  eval_trigger: ..
                              load_ave:
                                  type: num
                                  eval: value['LoadAvg']
                                  eval_trigger: ..
                              mqtt_count:
                                  type: num
                                  eval: sh...()['MqttCount']
                                  eval_trigger: ..
                              power:
                                  type: bool
                                  eval: sh...()['POWER']
                                  eval_trigger: ..
                              wifi:
                                  access_point:
                                      type: num
                                      eval: sh....()['Wifi']['AP']
                                      eval_trigger: '...'
                                  wlan_ssid:
                                      type: str
                                      eval: sh....()['Wifi']['SSId']
                                      eval_trigger: '...'
                                  wlan_bssid:
                                      type: str
                                      eval: sh....()['Wifi']['BSSId']
                                      eval_trigger: '...'
                                  wlan_signal:
                                      type: num
                                      eval: sh....()['Wifi']['Signal']
                                      eval_trigger: '...'
                                  link_out:
                                      type: num
                                      eval: sh....()['Wifi']['LinkCount']
                                      eval_trigger: '...'
                                  wlan_downtime:
                                      type: str
                                      eval: sh....()['Wifi']['Downtime']
                                      eval_trigger: '...'
                              alive:
                                  name: Heartbeat (Meldung innerhalb der letzten 10 min)
                                  type: bool
                                  eval: (value != '$$!!%%')
                                  eval_trigger: ..
                                  autotimer: 600 = $$!!%%
                              # struct: tasmota_status
                          info:
                              input:
                                  info1:
                                      type: dict
                                      cache: 'True'
                                      mqtt_topic_in: SONOFF_RF1/tele/INFO1
                                  info2:
                                      type: dict
                                      cache: 'True'
                                      mqtt_topic_in: SONOFF_RF1/tele/INFO2
                                  info3:
                                      type: dict
                                      cache: 'True'
                                      mqtt_topic_in: SONOFF_RF1/tele/INFO3
                              module:
                                  type: str
                                  eval: sh...input.info1()['Module']
                                  eval_trigger: ..input.info1
                              tasmota_ver:
                                  type: str
                                  eval: sh...input.info1()['Version']
                                  eval_trigger: ..input.info1
                              hostname:
                                  type: str
                                  eval: sh...input.info2()['Hostname']
                                  eval_trigger: ..input.info2
                              ip_adress:
                                  type: str
                                  eval: sh...input.info2()['IPAddress']
                                  eval_trigger: ..input.info2
                              restart_reason:
                                  type: str
                                  eval: sh...input.info3()['RestartReason']
                                  eval_trigger: ..input.info3
                              # struct: tasmota_info
                          type: str
                          mqtt_topic_in: SONOFF_RF1/tele/LWT
                          telegram_message: 'sonoff_rf1: [VALUE]!'
                      sonoff_rgbw1:
                          on_off:
                              name: Vorlage-Struktur für Zeitschaltuhren
                              uzsu:
                                  type: dict
                                  uzsu_item: ..
                                  cache: 'True'
                                  visu_acl: rw
                                  last:
                                      remark: The last set value if UZSU is active
                                      type: foo
                                      visu_acl: ro
                                      eval: "'None' if sh...lastvalue() is None else sh...lastvalue()"
                                      crontab: init = 'None'
                                      eval_trigger: ..
                                  active:
                                      remark: Use this item to easily turn on or off your UZSU
                                      type: bool
                                      eval: sh...activate(value)
                                      visu_acl: rw
                                      status:
                                          type: bool
                                          eval: sh....activate()
                                          eval_trigger:
                                            - ..
                                            - '...'
                                          on_change: .. = value
                                          crontab: init = 0
                              type: bool
                              cache: 'True'
                              visu_acl: rw
                              # struct: uzsu.child
                              mqtt_topic_out: SONOFF_RGBW1/cmnd/POWER
                              mqtt_topic_in: SONOFF_RGBW1/stat/POWER
                          on_off_toggle:
                              name: 0-off, 1-on, 2-toggle
                              uzsu:
                                  type: dict
                                  uzsu_item: ..
                                  cache: 'True'
                                  visu_acl: rw
                                  last:
                                      remark: The last set value if UZSU is active
                                      type: foo
                                      visu_acl: ro
                                      eval: "'None' if sh...lastvalue() is None else sh...lastvalue()"
                                      crontab: init = 'None'
                                      eval_trigger: ..
                                  active:
                                      remark: Use this item to easily turn on or off your UZSU
                                      type: bool
                                      eval: sh...activate(value)
                                      visu_acl: rw
                                      status:
                                          type: bool
                                          eval: sh....activate()
                                          eval_trigger:
                                            - ..
                                            - '...'
                                          on_change: .. = value
                                          crontab: init = 0
                              type: num
                              visu_acl: rw
                              enforce_updates: 'True'
                              # struct: uzsu.child
                              mqtt_topic_out: SONOFF_RGBW1/cmnd/POWER
                          hsb:
                              name: Tasmota HSB Addon zur Werteerstellung
                              type: str
                              cache: 'True'
                              eval: "'{0},{1},{2}'.format(sh..hue(), sh..sat(), sh..bright())"
                              eval_trigger:
                                - .hue
                                - .sat
                                - .bright
                              enforce_updates: 'True'
                              hue:
                                  name: Hue
                                  type: num
                                  cache: 'True'
                                  visu_acl: rw
                              sat:
                                  name: Saturation
                                  type: num
                                  cache: 'True'
                                  visu_acl: rw
                              bright:
                                  name: Brightness
                                  type: num
                                  cache: 'True'
                                  visu_acl: rw
                              # struct: tasmota_hsb_addon
                              mqtt_topic_out: SONOFF_RGBW1/cmnd/HsbColor
                          result:
                              name: Tasmota Result-Auswertung für RGBW Devices
                              type: dict
                              cache: 'True'
                              mqtt_topic_in: SONOFF_RGBW1/stat/RESULT
                              on_update:
                                - ..status.dimmer = value['Dimmer']
                                - ..status.color = value['Color']
                                - ..status.hsbcolor = value['HSBColor']
                                - ..status.white = value['White']
                                - ..status.ct = value['CT']
                                - ..status.channel = value['Channel']
                              # struct: tasmota_rgbw_result
                          status:
                              name: Tasmota RGBW Status Addon
                              type: dict
                              cache: 'True'
                              mqtt_topic_in: SONOFF_RGBW1/tele/STATE
                              uptime:
                                  type: str
                                  eval: value['Uptime']
                                  eval_trigger: ..
                              load_ave:
                                  type: num
                                  eval: value['LoadAvg']
                                  eval_trigger: ..
                              mqtt_count:
                                  type: num
                                  eval: sh...()['MqttCount']
                                  eval_trigger: ..
                              power:
                                  type: bool
                                  eval: sh...()['POWER']
                                  eval_trigger: ..
                              dimmer:
                                  type: num
                                  eval: sh...()['Dimmer']
                                  eval_trigger: ..
                              color:
                                  type: str
                                  eval: sh...()['Color']
                                  eval_trigger: ..
                              hsb_color:
                                  type: list
                                  eval: sh...()['HSBColor']
                                  eval_trigger: ..
                              white:
                                  type: num
                                  eval: sh...()['White']
                                  eval_trigger: ..
                              ct:
                                  type: num
                                  eval: sh...()['CT']
                                  eval_trigger: ..
                              channel:
                                  type: list
                                  eval: sh...()['Channel']
                                  eval_trigger: ..
                              scheme:
                                  type: num
                                  eval: sh...()['Scheme']
                                  eval_trigger: ..
                              fade:
                                  type: bool
                                  eval: sh...()['Fade']
                                  eval_trigger: ..
                              speed:
                                  type: num
                                  eval: sh...()['Speed']
                                  eval_trigger: ..
                              ledtable:
                                  type: bool
                                  eval: sh...()['LedTable']
                                  eval_trigger: ..
                              wifi:
                                  access_point:
                                      type: num
                                      eval: sh....()['Wifi']['AP']
                                      eval_trigger: '...'
                                  wlan_ssid:
                                      type: str
                                      eval: sh....()['Wifi']['SSId']
                                      eval_trigger: '...'
                                  wlan_bssid:
                                      type: str
                                      eval: sh....()['Wifi']['BSSId']
                                      eval_trigger: '...'
                                  wlan_signal:
                                      type: num
                                      eval: sh....()['Wifi']['Signal']
                                      eval_trigger: '...'
                                  link_out:
                                      type: num
                                      eval: sh....()['Wifi']['LinkCount']
                                      eval_trigger: '...'
                                  wlan_downtime:
                                      type: str
                                      eval: sh....()['Wifi']['Downtime']
                                      eval_trigger: '...'
                              alive:
                                  name: Heartbeat (Meldung innerhalb der letzten 10 min)
                                  type: bool
                                  eval: (value != '$$!!%%')
                                  eval_trigger: ..
                                  autotimer: 600 = $$!!%%
                              # struct: tasmota_rgbw_status
                          info:
                              input:
                                  info1:
                                      type: dict
                                      cache: 'True'
                                      mqtt_topic_in: SONOFF_RGBW1/tele/INFO1
                                  info2:
                                      type: dict
                                      cache: 'True'
                                      mqtt_topic_in: SONOFF_RGBW1/tele/INFO2
                                  info3:
                                      type: dict
                                      cache: 'True'
                                      mqtt_topic_in: SONOFF_RGBW1/tele/INFO3
                              module:
                                  type: str
                                  eval: sh...input.info1()['Module']
                                  eval_trigger: ..input.info1
                              tasmota_ver:
                                  type: str
                                  eval: sh...input.info1()['Version']
                                  eval_trigger: ..input.info1
                              hostname:
                                  type: str
                                  eval: sh...input.info2()['Hostname']
                                  eval_trigger: ..input.info2
                              ip_adress:
                                  type: str
                                  eval: sh...input.info2()['IPAddress']
                                  eval_trigger: ..input.info2
                              restart_reason:
                                  type: str
                                  eval: sh...input.info3()['RestartReason']
                                  eval_trigger: ..input.info3
                              # struct: tasmota_info
                          type: str
                          mqtt_topic_in: SONOFF_RGBW1/tele/LWT
                          telegram_message: 'sonoff_rgbw1: [VALUE]!'
                      sonoff_rgbw2:
                          on_off:
                              name: Vorlage-Struktur für Zeitschaltuhren
                              uzsu:
                                  type: dict
                                  uzsu_item: ..
                                  cache: 'True'
                                  visu_acl: rw
                                  last:
                                      remark: The last set value if UZSU is active
                                      type: foo
                                      visu_acl: ro
                                      eval: "'None' if sh...lastvalue() is None else sh...lastvalue()"
                                      crontab: init = 'None'
                                      eval_trigger: ..
                                  active:
                                      remark: Use this item to easily turn on or off your UZSU
                                      type: bool
                                      eval: sh...activate(value)
                                      visu_acl: rw
                                      status:
                                          type: bool
                                          eval: sh....activate()
                                          eval_trigger:
                                            - ..
                                            - '...'
                                          on_change: .. = value
                                          crontab: init = 0
                              type: bool
                              cache: 'True'
                              visu_acl: rw
                              # struct: uzsu.child
                              mqtt_topic_out: SONOFF_RGBW2/cmnd/POWER
                              mqtt_topic_in: SONOFF_RGBW2/stat/POWER
                          on_off_toggle:
                              name: 0-off, 1-on, 2-toggle
                              uzsu:
                                  type: dict
                                  uzsu_item: ..
                                  cache: 'True'
                                  visu_acl: rw
                                  last:
                                      remark: The last set value if UZSU is active
                                      type: foo
                                      visu_acl: ro
                                      eval: "'None' if sh...lastvalue() is None else sh...lastvalue()"
                                      crontab: init = 'None'
                                      eval_trigger: ..
                                  active:
                                      remark: Use this item to easily turn on or off your UZSU
                                      type: bool
                                      eval: sh...activate(value)
                                      visu_acl: rw
                                      status:
                                          type: bool
                                          eval: sh....activate()
                                          eval_trigger:
                                            - ..
                                            - '...'
                                          on_change: .. = value
                                          crontab: init = 0
                              type: num
                              visu_acl: rw
                              enforce_updates: 'True'
                              # struct: uzsu.child
                              mqtt_topic_out: SONOFF_RGBW2/cmnd/POWER
                          hsb:
                              name: Tasmota HSB Addon zur Werteerstellung
                              type: str
                              cache: 'True'
                              eval: "'{0},{1},{2}'.format(sh..hue(), sh..sat(), sh..bright())"
                              eval_trigger:
                                - .hue
                                - .sat
                                - .bright
                              enforce_updates: 'True'
                              hue:
                                  name: Hue
                                  type: num
                                  cache: 'True'
                                  visu_acl: rw
                              sat:
                                  name: Saturation
                                  type: num
                                  cache: 'True'
                                  visu_acl: rw
                              bright:
                                  name: Brightness
                                  type: num
                                  cache: 'True'
                                  visu_acl: rw
                              # struct: tasmota_hsb_addon
                              mqtt_topic_out: SONOFF_RGBW2/cmnd/HsbColor
                          result:
                              name: Tasmota Result-Auswertung für RGBW Devices
                              type: dict
                              cache: 'True'
                              mqtt_topic_in: SONOFF_RGBW2/stat/RESULT
                              on_update:
                                - ..status.dimmer = value['Dimmer']
                                - ..status.color = value['Color']
                                - ..status.hsbcolor = value['HSBColor']
                                - ..status.white = value['White']
                                - ..status.ct = value['CT']
                                - ..status.channel = value['Channel']
                              # struct: tasmota_rgbw_result
                          status:
                              name: Tasmota RGBW Status Addon
                              type: dict
                              cache: 'True'
                              mqtt_topic_in: SONOFF_RGBW2/tele/STATE
                              uptime:
                                  type: str
                                  eval: value['Uptime']
                                  eval_trigger: ..
                              load_ave:
                                  type: num
                                  eval: value['LoadAvg']
                                  eval_trigger: ..
                              mqtt_count:
                                  type: num
                                  eval: sh...()['MqttCount']
                                  eval_trigger: ..
                              power:
                                  type: bool
                                  eval: sh...()['POWER']
                                  eval_trigger: ..
                              dimmer:
                                  type: num
                                  eval: sh...()['Dimmer']
                                  eval_trigger: ..
                              color:
                                  type: str
                                  eval: sh...()['Color']
                                  eval_trigger: ..
                              hsb_color:
                                  type: list
                                  eval: sh...()['HSBColor']
                                  eval_trigger: ..
                              white:
                                  type: num
                                  eval: sh...()['White']
                                  eval_trigger: ..
                              ct:
                                  type: num
                                  eval: sh...()['CT']
                                  eval_trigger: ..
                              channel:
                                  type: list
                                  eval: sh...()['Channel']
                                  eval_trigger: ..
                              scheme:
                                  type: num
                                  eval: sh...()['Scheme']
                                  eval_trigger: ..
                              fade:
                                  type: bool
                                  eval: sh...()['Fade']
                                  eval_trigger: ..
                              speed:
                                  type: num
                                  eval: sh...()['Speed']
                                  eval_trigger: ..
                              ledtable:
                                  type: bool
                                  eval: sh...()['LedTable']
                                  eval_trigger: ..
                              wifi:
                                  access_point:
                                      type: num
                                      eval: sh....()['Wifi']['AP']
                                      eval_trigger: '...'
                                  wlan_ssid:
                                      type: str
                                      eval: sh....()['Wifi']['SSId']
                                      eval_trigger: '...'
                                  wlan_bssid:
                                      type: str
                                      eval: sh....()['Wifi']['BSSId']
                                      eval_trigger: '...'
                                  wlan_signal:
                                      type: num
                                      eval: sh....()['Wifi']['Signal']
                                      eval_trigger: '...'
                                  link_out:
                                      type: num
                                      eval: sh....()['Wifi']['LinkCount']
                                      eval_trigger: '...'
                                  wlan_downtime:
                                      type: str
                                      eval: sh....()['Wifi']['Downtime']
                                      eval_trigger: '...'
                              alive:
                                  name: Heartbeat (Meldung innerhalb der letzten 10 min)
                                  type: bool
                                  eval: (value != '$$!!%%')
                                  eval_trigger: ..
                                  autotimer: 600 = $$!!%%
                              # struct: tasmota_rgbw_status
                          info:
                              input:
                                  info1:
                                      type: dict
                                      cache: 'True'
                                      mqtt_topic_in: SONOFF_RGBW2/tele/INFO1
                                  info2:
                                      type: dict
                                      cache: 'True'
                                      mqtt_topic_in: SONOFF_RGBW2/tele/INFO2
                                  info3:
                                      type: dict
                                      cache: 'True'
                                      mqtt_topic_in: SONOFF_RGBW2/tele/INFO3
                              module:
                                  type: str
                                  eval: sh...input.info1()['Module']
                                  eval_trigger: ..input.info1
                              tasmota_ver:
                                  type: str
                                  eval: sh...input.info1()['Version']
                                  eval_trigger: ..input.info1
                              hostname:
                                  type: str
                                  eval: sh...input.info2()['Hostname']
                                  eval_trigger: ..input.info2
                              ip_adress:
                                  type: str
                                  eval: sh...input.info2()['IPAddress']
                                  eval_trigger: ..input.info2
                              restart_reason:
                                  type: str
                                  eval: sh...input.info3()['RestartReason']
                                  eval_trigger: ..input.info3
                              # struct: tasmota_info
                          sensor:
                              name: Tasmota AM2301 Sensor Addon
                              type: dict
                              cache: 'True'
                              mqtt_topic_in: SONOFF_RGBW2/tele/SENSOR
                              temp:
                                  type: num
                                  eval: sh...()['AM2301']['Humidity']
                                  eval_trigger: ..
                                  hum: None
                              unit:
                                  type: str
                                  eval: sh...()['TempUnit']
                                  eval_trigger: ..
                              # struct: tasmota_am2301_sensor_addon
                          type: str
                          mqtt_topic_in: SONOFF_RGBW2/tele/LWT
                          telegram_message: 'sonoff_rgbw2: [VALUE]!'
                          
                      nxsm_200_01:
                          on_off:
                              name: Vorlage-Struktur für Zeitschaltuhren
                              uzsu:
                                  type: dict
                                  uzsu_item: ..
                                  cache: 'True'
                                  visu_acl: rw
                                  last:
                                      remark: The last set value if UZSU is active
                                      type: foo
                                      visu_acl: ro
                                      eval: "'None' if sh...lastvalue() is None else sh...lastvalue()"
                                      crontab: init = 'None'
                                      eval_trigger: ..
                                  active:
                                      remark: Use this item to easily turn on or off your UZSU
                                      type: bool
                                      eval: sh...activate(value)
                                      visu_acl: rw
                                      status:
                                          type: bool
                                          eval: sh....activate()
                                          eval_trigger:
                                            - ..
                                            - '...'
                                          on_change: .. = value
                                          crontab: init = 0
                              type: bool
                              cache: 'True'
                              visu_acl: rw
                              # struct: uzsu.child
                              mqtt_topic_out: nxsm200_01/cmnd/POWER
                              mqtt_topic_in: nxsm200_01/stat/POWER
                          on_off_toggle:
                              name: 0-off, 1-on, 2-toggle
                              uzsu:
                                  type: dict
                                  uzsu_item: ..
                                  cache: 'True'
                                  visu_acl: rw
                                  last:
                                      remark: The last set value if UZSU is active
                                      type: foo
                                      visu_acl: ro
                                      eval: "'None' if sh...lastvalue() is None else sh...lastvalue()"
                                      crontab: init = 'None'
                                      eval_trigger: ..
                                  active:
                                      remark: Use this item to easily turn on or off your UZSU
                                      type: bool
                                      eval: sh...activate(value)
                                      visu_acl: rw
                                      status:
                                          type: bool
                                          eval: sh....activate()
                                          eval_trigger:
                                            - ..
                                            - '...'
                                          on_change: .. = value
                                          crontab: init = 0
                              type: num
                              visu_acl: rw
                              enforce_updates: 'True'
                              # struct: uzsu.child
                              mqtt_topic_out: nxsm200_01/cmnd/POWER
                          status:
                              name: Tasmota Status Addon für Standardgeräte
                              type: dict
                              cache: 'True'
                              mqtt_topic_in: nxsm200_01/tele/STATE
                              uptime:
                                  type: str
                                  eval: value['Uptime']
                                  eval_trigger: ..
                              load_ave:
                                  type: num
                                  eval: value['LoadAvg']
                                  eval_trigger: ..
                              mqtt_count:
                                  type: num
                                  eval: sh...()['MqttCount']
                                  eval_trigger: ..
                              power:
                                  type: bool
                                  eval: sh...()['POWER']
                                  eval_trigger: ..
                              wifi:
                                  access_point:
                                      type: num
                                      eval: sh....()['Wifi']['AP']
                                      eval_trigger: '...'
                                  wlan_ssid:
                                      type: str
                                      eval: sh....()['Wifi']['SSId']
                                      eval_trigger: '...'
                                  wlan_bssid:
                                      type: str
                                      eval: sh....()['Wifi']['BSSId']
                                      eval_trigger: '...'
                                  wlan_signal:
                                      type: num
                                      eval: sh....()['Wifi']['Signal']
                                      eval_trigger: '...'
                                  link_out:
                                      type: num
                                      eval: sh....()['Wifi']['LinkCount']
                                      eval_trigger: '...'
                                  wlan_downtime:
                                      type: str
                                      eval: sh....()['Wifi']['Downtime']
                                      eval_trigger: '...'
                              alive:
                                  name: Heartbeat (Meldung innerhalb der letzten 10 min)
                                  type: bool
                                  eval: (value != '$$!!%%')
                                  eval_trigger: ..
                                  autotimer: 600 = $$!!%%
                              # struct: tasmota_status
                          info:
                              input:
                                  info1:
                                      type: dict
                                      cache: 'True'
                                      mqtt_topic_in: nxsm200_01/tele/INFO1
                                  info2:
                                      type: dict
                                      cache: 'True'
                                      mqtt_topic_in: nxsm200_01/tele/INFO2
                                  info3:
                                      type: dict
                                      cache: 'True'
                                      mqtt_topic_in: nxsm200_01/tele/INFO3
                              module:
                                  type: str
                                  eval: sh...input.info1()['Module']
                                  eval_trigger: ..input.info1
                              tasmota_ver:
                                  type: str
                                  eval: sh...input.info1()['Version']
                                  eval_trigger: ..input.info1
                              hostname:
                                  type: str
                                  eval: sh...input.info2()['Hostname']
                                  eval_trigger: ..input.info2
                              ip_adress:
                                  type: str
                                  eval: sh...input.info2()['IPAddress']
                                  eval_trigger: ..input.info2
                              restart_reason:
                                  type: str
                                  eval: sh...input.info3()['RestartReason']
                                  eval_trigger: ..input.info3
                              # struct: tasmota_info
                          sensor:
                              name: Tasmota Energy Sensor Addon
                              type: dict
                              cache: 'True'
                              mqtt_topic_in: nxsm200_01/tele/SENSOR
                              power:
                                  type: num
                                  eval: value['ENERGY']['Power']
                                  eval_trigger: ..
                              reactive_power:
                                  type: num
                                  eval: value['ENERGY']['ReactivePower']
                                  eval_trigger: ..
                              factor:
                                  type: num
                                  eval: value['ENERGY']['Factor']
                                  eval_trigger: ..
                              current:
                                  type: num
                                  eval: value['ENERGY']['Current']
                                  eval_trigger: ..
                              # struct: tasmota_energy_sensor_addon
                          name: WLAN-Steckdose1
                          type: str
                          mqtt_topic_in: nxsm200_01/tele/LWT
                          telegram_message: 'nxsm200_01: [VALUE]!'
                      nxsm_200_02:
                          name: WLAN-Steckdose2
                          on_off:
                              name: Vorlage-Struktur für Zeitschaltuhren
                              uzsu:
                                  type: dict
                                  uzsu_item: ..
                                  cache: 'True'
                                  visu_acl: rw
                                  last:
                                      remark: The last set value if UZSU is active
                                      type: foo
                                      visu_acl: ro
                                      eval: "'None' if sh...lastvalue() is None else sh...lastvalue()"
                                      crontab: init = 'None'
                                      eval_trigger: ..
                                  active:
                                      remark: Use this item to easily turn on or off your UZSU
                                      type: bool
                                      eval: sh...activate(value)
                                      visu_acl: rw
                                      status:
                                          type: bool
                                          eval: sh....activate()
                                          eval_trigger:
                                            - ..
                                            - '...'
                                          on_change: .. = value
                                          crontab: init = 0
                              type: bool
                              cache: 'True'
                              visu_acl: rw
                              # struct: uzsu.child
                              mqtt_topic_out: nxsm200_02/cmnd/POWER
                              mqtt_topic_in: nxsm200_02/stat/POWER
                          on_off_toggle:
                              name: 0-off, 1-on, 2-toggle
                              uzsu:
                                  type: dict
                                  uzsu_item: ..
                                  cache: 'True'
                                  visu_acl: rw
                                  last:
                                      remark: The last set value if UZSU is active
                                      type: foo
                                      visu_acl: ro
                                      eval: "'None' if sh...lastvalue() is None else sh...lastvalue()"
                                      crontab: init = 'None'
                                      eval_trigger: ..
                                  active:
                                      remark: Use this item to easily turn on or off your UZSU
                                      type: bool
                                      eval: sh...activate(value)
                                      visu_acl: rw
                                      status:
                                          type: bool
                                          eval: sh....activate()
                                          eval_trigger:
                                            - ..
                                            - '...'
                                          on_change: .. = value
                                          crontab: init = 0
                              type: num
                              visu_acl: rw
                              enforce_updates: 'True'
                              # struct: uzsu.child
                              mqtt_topic_out: nxsm200_02/cmnd/POWER
                          status:
                              name: Tasmota Status Addon für Standardgeräte
                              type: dict
                              cache: 'True'
                              mqtt_topic_in: nxsm200_02/tele/STATE
                              uptime:
                                  type: str
                                  eval: value['Uptime']
                                  eval_trigger: ..
                              load_ave:
                                  type: num
                                  eval: value['LoadAvg']
                                  eval_trigger: ..
                              mqtt_count:
                                  type: num
                                  eval: sh...()['MqttCount']
                                  eval_trigger: ..
                              power:
                                  type: bool
                                  eval: sh...()['POWER']
                                  eval_trigger: ..
                              wifi:
                                  access_point:
                                      type: num
                                      eval: sh....()['Wifi']['AP']
                                      eval_trigger: '...'
                                  wlan_ssid:
                                      type: str
                                      eval: sh....()['Wifi']['SSId']
                                      eval_trigger: '...'
                                  wlan_bssid:
                                      type: str
                                      eval: sh....()['Wifi']['BSSId']
                                      eval_trigger: '...'
                                  wlan_signal:
                                      type: num
                                      eval: sh....()['Wifi']['Signal']
                                      eval_trigger: '...'
                                  link_out:
                                      type: num
                                      eval: sh....()['Wifi']['LinkCount']
                                      eval_trigger: '...'
                                  wlan_downtime:
                                      type: str
                                      eval: sh....()['Wifi']['Downtime']
                                      eval_trigger: '...'
                              alive:
                                  name: Heartbeat (Meldung innerhalb der letzten 10 min)
                                  type: bool
                                  eval: (value != '$$!!%%')
                                  eval_trigger: ..
                                  autotimer: 600 = $$!!%%
                              # struct: tasmota_status
                          info:
                              input:
                                  info1:
                                      type: dict
                                      cache: 'True'
                                      mqtt_topic_in: nxsm200_02/tele/INFO1
                                  info2:
                                      type: dict
                                      cache: 'True'
                                      mqtt_topic_in: nxsm200_02/tele/INFO2
                                  info3:
                                      type: dict
                                      cache: 'True'
                                      mqtt_topic_in: nxsm200_02/tele/INFO3
                              module:
                                  type: str
                                  eval: sh...input.info1()['Module']
                                  eval_trigger: ..input.info1
                              tasmota_ver:
                                  type: str
                                  eval: sh...input.info1()['Version']
                                  eval_trigger: ..input.info1
                              hostname:
                                  type: str
                                  eval: sh...input.info2()['Hostname']
                                  eval_trigger: ..input.info2
                              ip_adress:
                                  type: str
                                  eval: sh...input.info2()['IPAddress']
                                  eval_trigger: ..input.info2
                              restart_reason:
                                  type: str
                                  eval: sh...input.info3()['RestartReason']
                                  eval_trigger: ..input.info3
                              # struct: tasmota_info
                          sensor:
                              name: Tasmota Energy Sensor Addon
                              type: dict
                              cache: 'True'
                              mqtt_topic_in: nxsm200_02/tele/SENSOR
                              power:
                                  type: num
                                  eval: value['ENERGY']['Power']
                                  eval_trigger: ..
                              reactive_power:
                                  type: num
                                  eval: value['ENERGY']['ReactivePower']
                                  eval_trigger: ..
                              factor:
                                  type: num
                                  eval: value['ENERGY']['Factor']
                                  eval_trigger: ..
                              current:
                                  type: num
                                  eval: value['ENERGY']['Current']
                                  eval_trigger: ..
                              # struct: tasmota_energy_sensor_addon
                          # struct: tasmota_steckdose_strom
                          mqtt_topic_in: nxsm200_02/tele/LWT
                  Der Fehler bleibt erhalten. Ich verstehe weder die Fehlermeldung noch finde ich den Fehler in der item.yaml
                  Ich sehe wahrscheinlich den Wald vor lauter Bäumen nicht. Vielleicht findet ihr den Fehler.

                  DANKE

                  Kommentar


                    #10
                    (Auch) ohne Deine ganzen Item Definitionen kann ich Dir folgende Eingrenzung geben:

                    Der Fehler
                    Code:
                    2020-03-17  08:06:42 ERROR    __main__            Unhandled exception: can only concatenate str (not "int") to str
                    <class 'TypeError'>
                      File "/usr/local/smarthome/bin/smarthome.py", line 1311, in <module>
                        sh.start()
                      File "/usr/local/smarthome/bin/smarthome.py", line 591, in start
                        self.items.load_itemdefinitions(self._env_dir, self._items_dir, self._etc_dir, self._plugins_dir)
                      File "/usr/local/smarthome/lib/item.py", line 373, in load_itemdefinitions
                        item._init_prerun()
                      File "/usr/local/smarthome/lib/item.py", line 2136, in _init_prerun
                        items = ['sh.' + x.id() + '()' for x in _items]
                      File "/usr/local/smarthome/lib/item.py", line 2136, in <listcomp>
                        items = ['sh.' + x.id() + '()' for x in _items]
                    Tritt auf, da x.id() numerisch ist (was ein Item Name nie sein darf). Einen Item Namen, der mit einer Ziffer anfängt kann man nicht vergeben. Wie in Deinen Definitionen ein Item Name (evtl. auch in einem eval_trigger Attribut) entstanden ist, kann nich Dir nicht sagen. Zum durchforsten Deiner seitenlangen Definitionen fehlt mir leider die Zeit.
                    Viele Grüße
                    Martin

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

                    Kommentar


                      #11
                      Nachtrag: Das tritt in einem Item auf, welches ein eval Attribut hat.
                      Viele Grüße
                      Martin

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

                      Kommentar


                        #12
                        Zitat von Msinn Beitrag anzeigen
                        Tritt auf, da x.id() numerisch ist (was ein Item Name nie sein darf). Einen Item Namen, der mit einer Ziffer anfängt kann man nicht vergeben. Wie in Deinen Definitionen ein Item Name (evtl. auch in einem eval_trigger Attribut) entstanden ist, kann nich Dir nicht sagen. Zum durchforsten Deiner seitenlangen Definitionen fehlt mir leider die Zeit.
                        Ich konnte den Fehler einkreisen. Alle Items und Eval_trigger beginnen nicht numerisch. Das habe ich mehrfach kontrolliert. Bei einem Item mit eval hat der type nicht gestimmt. Ich hatte num, der Wert der zugewiesen werden sollte, war aber str. Das war ein Fehler. Zum anderen muss das Attribut struct in der Itemkonfiguration vor dem Attribut stehen, dass das jeweilige Attribut aus der struct-Definiton wieder überschreiben soll.

                        Nun geht es.

                        Kommentar


                          #13
                          Zitat von Sisamiwe Beitrag anzeigen
                          Hier möchte ich kurz klären, welche Möglichkeiten struct heute schon bietet und ggf zukünftig bieten wird.
                          • struct im struct geht (aktuell) nicht, oder?
                          • Liste von struct: für ein Item mehrere structs (die sich ergänzen) verwenden Code:

                            tasmota: sonoff_b1: online: type: str mqtt_topic_in: SONOFF_B1/tele/LWT struct: - tasmota_relais - tasmota_status - tasmota_ds18b20_sensor_addon
                          Zitat von Msinn Beitrag anzeigen
                          Structs können dann auch Listen von structs enthalten.
                          Nach dem ich das oben beschrieben Problem gelöst hatte, habe ich die Liste von stucts wie im BlogBeitrag beschieben noch einmal probiert.
                          Auch wenn struct als Liste nicht offiziell unterstützt wird, funktioniert es.

                          So sieht es dann aus:
                          Code:
                          struct:
                                   - tasmota_relais
                                   - tasmota_status
                                   - tasmota_ds18b20_sensor_addon
                          Beste Grüße

                          Kommentar

                          Lädt...
                          X