Ankündigung

Einklappen
Keine Ankündigung bisher.

Supportthread für Kodi Plugin

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

    Supportthread für Kodi Plugin

    Ich bearbeite gerade das alte xbmc Plugin und habe eine fette Aktualisierung in den develop gepusht. Bitte testen und Probleme hier melden. https://github.com/smarthomeNG/plugins/pull/241

    Titel und Media State Abfrage muss noch implementiert werden, ansonsten sollte soweit alles klappen.
    Zuletzt geändert von Onkelandy; 19.05.2019, 22:59.

    #2
    Inzwischen hat sich einiges getan. Momentan sieht es recht robust aus. Gerne testen.

    Kommentar


      #3
      Hallo

      ich wollte heute Abend meine 2 Kodi Instanzen mit SmarthomeNG verheiraten und bin dabei kläglichst gescheitert ...

      Infos zum System: SmarthomeNG 1.6.(1) - plugins aus develop
      Kodi: Libreelec auf Raspberry Pi 4 - 9.1.502 (letzte offizielle Version) - Kodi 18.4

      plugin.yaml:
      Code:
      kodi:
          plugin_name: kodi
          host: 192.168.1.81
          autoreconnect: True
          instance: 'wohnzimmer'
      log:

      Code:
      2019-11-17  22:05:50 INFO     Main         Loading '/usr/local/smarthome/plugins/kodi/plugin.yaml' to 'OrderedDict'
      2019-11-17  22:05:50 INFO     Main         plugin 'kodi': Metadata paramlist = '['host', 'port', 'instance', 'autoreconnect', 'connect_retries', 'connect_cycle', 'send_retries']'
      2019-11-17  22:05:50 INFO     Main         plugin 'kodi': Metadata itemdeflist = '['kodi_item']'
      2019-11-17  22:05:50 INFO     Main         plugin 'kodi': Metadata plugin_functionlist = '['notify']'
      2019-11-17  22:05:50 INFO     Main         plugin 'kodi': Metadata get_plugin_function_defstrings -> '['notify(title, message, image, display_time)']'
      2019-11-17  22:05:50 INFO     Main         plugin 'kodi': Metadata get_plugin_function_defstrings -> '['notify(title:str, message:str, image:str, display_time:int)']'
      2019-11-17  22:05:50 INFO     Main         plugin 'kodi': Metadata get_plugin_function_defstrings -> '['notify(title, message, image=None, display_time=10000)']'
      2019-11-17  22:05:50 INFO     Main         plugin 'kodi': Metadata get_plugin_function_defstrings -> '['notify(title:str, message:str, image:str=None, display_time:int=10000)']'
      2019-11-17  22:05:50 INFO     Main         plugin 'kodi': Metadata itemstructlist = '[]'
      2019-11-17  22:05:50 INFO     Main         add_struct_definition: struct 'kodi.query' = OrderedDict([('name', 'Vorlage-Struktur für Kodi Infos, die nicht aktiv verämndert werden können.'), ('state', OrderedDict([('kodi_item@instance', 'state'), ('type', 'str'), ('visu_acl', 'ro')])), ('title', OrderedDict([('kodi_item@instance', 'title'), ('type', 'str'), ('visu_acl', 'ro')])), ('media', OrderedDict([('kodi_item@instance', 'media'), ('type', 'str'), ('visu_acl', 'ro')])), ('player', OrderedDict([('kodi_item@instance', 'player'), ('type', 'num'), ('visu_acl', 'rw'), ('enforce_updates', True)]))])
      2019-11-17  22:05:50 INFO     Main         add_struct_definition: struct 'kodi.control' = OrderedDict([('name', 'Vorlage-Struktur für Kodi Befehle zum Steuern'), ('mute', OrderedDict([('kodi_item@instance', 'mute'), ('type', 'bool'), ('visu_acl', 'rw'), ('enforce_updates', True)])), ('volume', OrderedDict([('kodi_item@instance', 'volume'), ('type', 'num'), ('visu_acl', 'rw'), ('enforce_updates', True)])), ('speed', OrderedDict([('kodi_item@instance', 'speed'), ('type', 'num'), ('visu_acl', 'rw'), ('enforce_updates', True)])), ('on_off', OrderedDict([('kodi_item@instance', 'on_off'), ('enforce_updates', True), ('type', 'bool'), ('visu_acl', 'rw')])), ('input', OrderedDict([('kodi_item@instance', 'input'), ('type', 'str'), ('visu_acl', 'rw'), ('enforce_updates', True)])), ('favourites', OrderedDict([('kodi_item@instance', 'favourites'), ('type', 'str'), ('visu_acl', 'rw'), ('enforce_updates', True)])), ('macro', OrderedDict([('kodi_item@instance', 'macro'), ('type', 'str'), ('visu_acl', 'rw'), ('enforce_updates', True)])), ('audiostream', OrderedDict([('kodi_item@instance', 'audiostream'), ('type', 'foo'), ('visu_acl', 'rw'), ('enforce_updates', True)])), ('subtitle', OrderedDict([('kodi_item@instance', 'subtitle'), ('type', 'list'), ('visu_acl', 'rw'), ('enforce_updates', True)])), ('seek', OrderedDict([('kodi_item@instance', 'seek'), ('type', 'num'), ('visu_acl', 'rw'), ('enforce_updates', True)])), ('home', OrderedDict([('kodi_item@instance', 'home'), ('type', 'bool'), ('visu_acl', 'rw'), ('enforce_updates', True)])), ('stop', OrderedDict([('type', 'bool'), ('eval', "sh...input('stop')"), ('enforce_updates', True)])), ('play', OrderedDict([('type', 'bool'), ('eval', "sh...input('play')"), ('enforce_updates', True)])), ('pause', OrderedDict([('type', 'bool'), ('eval', "sh...input('pause')"), ('enforce_updates', True)])), ('previous', OrderedDict([('type', 'bool'), ('eval', "sh...input('skipprevious')"), ('enforce_updates', True)])), ('next', OrderedDict([('type', 'bool'), ('eval', "sh...input('skipnext')"), ('enforce_updates', True)])), ('select', OrderedDict([('type', 'bool'), ('eval', "sh...input('select')"), ('enforce_updates', True)])), ('contextmenu', OrderedDict([('type', 'str'), ('eval', "sh...input('contextmenu')"), ('enforce_updates', True)]))])
      2019-11-17  22:05:50 INFO     Main         Loading '/usr/local/smarthome/plugins/kodi/locale.yaml' to 'dict'
      2019-11-17  22:05:50 INFO     Main         plugin 'kodi': value not found in plugin configuration file for parameter 'port' -> using default value '9090' instead
      2019-11-17  22:05:50 INFO     Main         plugin 'kodi': value not found in plugin configuration file for parameter 'instance' -> using default value '' instead
      2019-11-17  22:05:50 INFO     Main         plugin 'kodi': value not found in plugin configuration file for parameter 'connect_retries' -> using default value '10' instead
      2019-11-17  22:05:50 INFO     Main         plugin 'kodi': value not found in plugin configuration file for parameter 'connect_cycle' -> using default value '5' instead
      2019-11-17  22:05:50 INFO     Main         plugin 'kodi': value not found in plugin configuration file for parameter 'send_retries' -> using default value '5' instead
      2019-11-17  22:05:50 INFO     Main         Initialized plugin 'kodi' instance 'wohnzimmer' from from section 'kodi'
      wobei ich auch schon versucht hätte die Instanz wegzulassen - die items dementsprechend die Instanz weggenommen - auch dort keine Verbindung möglich
      Ports sind bei Kodi alle Standard belassen
      Steuern mit KORE funktioniert einwandfrei - also auf der Kodi Seite hätte ich keine Fehler gesehen (wobei ichs nicht für unmöglich halte)

      Kommentar


        #4
        Du sprichst von 2 Instanzen - wie sehen da die Einträge zu beiden Instanzen in der plugin.yaml aus? Im Log steht, dass instance nicht gefunden wurde, aber bei der Initialisierung passt es dann doch wieder. Hier ist also am ehesten was mit deiner Config nicht sauber.

        Was passiert denn nach der Initialisierung!? Logfile bitte.

        Kommentar


          #5
          Start Log (bereinigt um div. Plugins (duw, unifi, mqtt)

          Kodi mit 192.168.1.81 läuft aktuell, 192.168.1.82 läuft NICHT

          Code:
           
          2019-11-18 10:15:49 WARNING Main -------------------- Init SmartHomeNG 1.6.master (1dcb4fb5) --------------------
          2019-11-18 10:15:49 WARNING Main Running in Python interpreter 'v3.5.3 final' (pid=11770) on linux platform
          2019-11-18 10:15:49 INFO Main test_requirements: filepath '/usr/local/smarthome/requirements/base.txt' is checked
          2019-11-18 10:15:49 INFO Main Loading '/usr/local/smarthome/etc/plugin.yaml' to 'dict'
          2019-11-18 10:15:50 INFO Main test_requirements: filepath '/usr/local/smarthome/requirements/conf_all.txt' is checked
          2019-11-18 10:15:50 INFO Main Init Scheduler
          2019-11-18 10:15:50 INFO Main Init loadable Modules
          2019-11-18 10:15:50 INFO Main Loading '/usr/local/smarthome/etc/module.yaml' to 'OrderedDict'
          2019-11-18 10:15:50 INFO Main Module 'http': module_name 'http' was extracted from classpath 'modules.http'
          2019-11-18 10:15:50 INFO Main Loading '/usr/local/smarthome/modules/http/module.yaml' to 'OrderedDict'
          2019-11-18 10:15:50 INFO Main module 'http': Metadata paramlist = '['user', 'password', 'hashed_password', 'service_user', 'service_password', 'service_hashed_password', 'ip', 'port', 'tls_port', 'use_tls', 'tls_cert', 'tls_key', 'servicesport', 'showpluginlist', 'showservicelist', 'starturl', 'threads', 'showtraceback']'
          2019-11-18 10:15:50 INFO Main module 'http': has no item-struct definitions in metadata
          2019-11-18 10:15:50 INFO Main Loading module 'http': args = '{'servicesport': "'4321'", 'port': "'8383'", 'starturl': "'admin'"}'
          2019-11-18 10:15:51 INFO Main module 'http': value not found in plugin configuration file for parameter 'user' -> using default value 'admin' instead
          2019-11-18 10:15:51 INFO Main module 'http': value not found in plugin configuration file for parameter 'password' -> using default value '' instead
          2019-11-18 10:15:51 INFO Main module 'http': value not found in plugin configuration file for parameter 'hashed_password' -> using default value '' instead
          2019-11-18 10:15:51 INFO Main module 'http': value not found in plugin configuration file for parameter 'service_user' -> using default value 'serviceuser' instead
          2019-11-18 10:15:51 INFO Main module 'http': value not found in plugin configuration file for parameter 'service_password' -> using default value '' instead
          2019-11-18 10:15:51 INFO Main module 'http': value not found in plugin configuration file for parameter 'service_hashed_password' -> using default value '' instead
          2019-11-18 10:15:51 INFO Main module 'http': value not found in plugin configuration file for parameter 'ip' -> using default value '0.0.0.0' instead
          2019-11-18 10:15:51 INFO Main module 'http': value not found in plugin configuration file for parameter 'tls_port' -> using default value '8385' instead
          2019-11-18 10:15:51 INFO Main module 'http': value not found in plugin configuration file for parameter 'use_tls' -> using default value 'False' instead
          2019-11-18 10:15:51 INFO Main module 'http': value not found in plugin configuration file for parameter 'tls_cert' -> using default value 'shng.cer' instead
          2019-11-18 10:15:51 INFO Main module 'http': value not found in plugin configuration file for parameter 'tls_key' -> using default value 'shng.key' instead
          2019-11-18 10:15:51 INFO Main module 'http': value not found in plugin configuration file for parameter 'showpluginlist' -> using default value 'True' instead
          2019-11-18 10:15:51 INFO Main module 'http': value not found in plugin configuration file for parameter 'showservicelist' -> using default value 'False' instead
          2019-11-18 10:15:51 INFO Main module 'http': value not found in plugin configuration file for parameter 'threads' -> using default value '4' instead
          2019-11-18 10:15:51 INFO Main module 'http': value not found in plugin configuration file for parameter 'showtraceback' -> using default value 'False' instead
          2019-11-18 10:15:51 INFO Main Module 'http': ip address = 192.168.1.20, hostname = 'Router'
          2019-11-18 10:15:51 INFO Main _hostmap_webifs = {'Router.local:8383': '/msg', '192.168.1.20:8383': '/msg', 'Router:8383': '/msg'}
          2019-11-18 10:15:51 INFO Main _hostmap_services = {'192.168.1.20:4321': '/msg', 'Router:4321': '/msg', 'Router.local:4321': '/msg'}
          2019-11-18 10:15:51 INFO Main [18/Nov/2019:10:15:51] ENGINE Bus STARTING
          2019-11-18 10:15:51 INFO Main [18/Nov/2019:10:15:51] ENGINE Serving on http://192.168.1.20:4321
          2019-11-18 10:15:51 INFO Main [18/Nov/2019:10:15:51] ENGINE Serving on http://192.168.1.20:8383
          2019-11-18 10:15:51 INFO Main [18/Nov/2019:10:15:51] ENGINE Bus STARTED
          2019-11-18 10:15:51 INFO Main mount '/plugins' - webif_dir = '/usr/local/smarthome/modules/http/webif'
          2019-11-18 10:15:51 INFO Main Module http: config dict: '{'/gstatic': {'tools.staticdir.on': True, 'tools.staticdir.dir': 'gstatic'}, '/static': {'tools.staticdir.on': True, 'tools.staticdir.dir': 'static'}, '/': {'tools.staticdir.root': '/usr/local/smarthome/modules/http/webif', 'tools.auth_basic.on': False, 'tools.auth_basic.checkpassword': <bound method Http.validate_password of <modules.http.Http object at 0x75ca21d0>>, 'tools.auth_basic.realm': 'shng_http_webif'}}'
          2019-11-18 10:15:51 INFO Main - user 'admin', password '', hashed_password ''
          2019-11-18 10:15:51 INFO Main Module http: Registering webinterface 'plugins' of plugin 'plugins' from pluginclass '' instance ''
          2019-11-18 10:15:51 INFO Main - conf dict: '{'/gstatic': {'tools.staticdir.on': True, 'tools.staticdir.dir': '/usr/local/smarthome/modules/http/webif/gstatic'}, '/static': {'tools.staticdir.on': True, 'tools.staticdir.dir': 'static'}, '/': {'tools.staticdir.root': '/usr/local/smarthome/modules/http/webif', 'tools.auth_basic.on': False, 'tools.auth_basic.checkpassword': <bound method Http.validate_password of <modules.http.Http object at 0x75ca21d0>>, 'tools.auth_basic.realm': 'shng_http_webif'}}'
          2019-11-18 10:15:51 INFO Main Modules: Loaded module 'http' (class 'Http') v1.6.0: Modul zur Implementierung von Backend-Webinterfaces für Plugins
          2019-11-18 10:15:51 INFO Main Loading '/usr/local/smarthome/modules/admin/module.yaml' to 'OrderedDict'
          2019-11-18 10:15:51 INFO Main module 'admin': Metadata paramlist = '['login_expiration', 'login_autorenew', 'pypi_timeout', 'itemtree_fullpath', 'itemtree_searchstart', 'websocket_host', 'websocket_port', 'log_chunksize']'
          2019-11-18 10:15:51 INFO Main module 'admin': has no item-struct definitions in metadata
          2019-11-18 10:15:51 INFO Main Loading module 'admin': args = '{'module_name': "'admin'"}'
          2019-11-18 10:15:52 INFO Main module 'admin': value not found in plugin configuration file for parameter 'login_expiration' -> using default value '48.0' instead
          2019-11-18 10:15:52 INFO Main module 'admin': value not found in plugin configuration file for parameter 'login_autorenew' -> using default value 'True' instead
          2019-11-18 10:15:52 INFO Main module 'admin': value not found in plugin configuration file for parameter 'pypi_timeout' -> using default value '5' instead
          2019-11-18 10:15:52 INFO Main module 'admin': value not found in plugin configuration file for parameter 'itemtree_fullpath' -> using default value 'True' instead
          2019-11-18 10:15:52 INFO Main module 'admin': value not found in plugin configuration file for parameter 'itemtree_searchstart' -> using default value '2.0' instead
          2019-11-18 10:15:52 INFO Main module 'admin': value not found in plugin configuration file for parameter 'websocket_host' -> using default value '0.0.0.0' instead
          2019-11-18 10:15:52 INFO Main module 'admin': value not found in plugin configuration file for parameter 'websocket_port' -> using default value '2424' instead
          2019-11-18 10:15:52 INFO Main module 'admin': value not found in plugin configuration file for parameter 'log_chunksize' -> using default value '1000' instead
          2019-11-18 10:15:52 INFO Main Modules: Loaded module 'admin' (class 'Admin') v1.6.0: Dieses Modul implementiert das Administrationinterface von SmartHomeNG
          2019-11-18 10:15:52 INFO Main Loaded Modules: ['admin', 'http']
          2019-11-18 10:15:52 INFO Main Start Modules
          2019-11-18 10:15:52 INFO Main Module 'admin': webif_dir = webif_dir = /usr/local/smarthome/modules/admin/webif
          2019-11-18 10:15:52 INFO Main Module http: Registering webinterface 'admin' of plugin 'admin' from pluginclass 'admin' instance ''
          2019-11-18 10:15:52 INFO Main - conf dict: '{'/gstatic': {'tools.staticdir.on': True, 'tools.staticdir.dir': '/usr/local/smarthome/modules/http/webif/gstatic'}, '/': {'tools.expires.on': True, 'tools.staticdir.on': True, 'tools.caching.delay': 6, 'error_page.404': '/usr/local/smarthome/modules/admin/webif/static/index.html', 'tools.caching.force': False, 'tools.expires.secs': 6, 'tools.staticdir.index': 'index.html', 'tools.staticdir.root': '/usr/local/smarthome/modules/admin/webif', 'tools.staticdir.dir': 'static', 'tools.chaching.on': False}}'
          2019-11-18 10:15:52 INFO Main self._applications['admin'] = {'Mount': '/admin', 'Pluginname': 'admin', 'Instance': '', 'Pluginclass': 'admin', 'Description': 'Administrationsoberfläche für SmartHomeNG', 'Webifname': 'admin', 'Conf': {'/gstatic': {'tools.staticdir.on': True, 'tools.staticdir.dir': '/usr/local/smarthome/modules/http/webif/gstatic'}, '/': {'tools.expires.on': True, 'tools.staticdir.on': True, 'tools.caching.delay': 6, 'error_page.404': '/usr/local/smarthome/modules/admin/webif/static/index.html', 'tools.caching.force': False, 'tools.expires.secs': 6, 'tools.staticdir.index': 'index.html', 'tools.staticdir.root': '/usr/local/smarthome/modules/admin/webif', 'tools.staticdir.dir': 'static', 'tools.chaching.on': False}}}
          2019-11-18 10:15:52 INFO Main Loading '/usr/local/smarthome/modules/core/module.yaml' to 'dict'
          2019-11-18 10:15:52 INFO Main Loading '/usr/local/smarthome/modules/http/module.yaml' to 'dict'
          2019-11-18 10:15:52 INFO Main Loading '/usr/local/smarthome/modules/admin/module.yaml' to 'dict'
          2019-11-18 10:15:53 INFO Main __init__ self.logics = None
          2019-11-18 10:15:53 INFO Main __init__ self.plugins = None
          2019-11-18 10:15:53 INFO Main __init__ self.scheduler = <Scheduler(Scheduler, started 1975788656)>
          2019-11-18 10:15:53 INFO Main Loading '/usr/local/smarthome/etc/logging.yaml' to 'dict'
          2019-11-18 10:15:53 INFO Main logging_conf: self.root_logname = smarthome
          2019-11-18 10:15:53 INFO Main PluginController(): __init__
          2019-11-18 10:15:53 INFO Main Module http: Registering webinterface 'api' of plugin 'api' from pluginclass 'api' instance ''
          2019-11-18 10:15:53 INFO Main - conf dict: '{'/gstatic': {'tools.staticdir.on': True, 'tools.staticdir.dir': '/usr/local/smarthome/modules/http/webif/gstatic'}, '/': {'error_page.405': <bound method Admin._error_page of <modules.admin.Admin object at 0x723dcbb0>>, 'tools.expires.on': True, 'tools.caching.delay': 6, 'request.dispatch': <cherrypy._cpdispatch.MethodDispatcher object at 0x75c99ab0>, 'tools.expires.secs': 6, 'error_page.411': <bound method Admin._error_page of <modules.admin.Admin object at 0x723dcbb0>>, 'error_page.500': <bound method Admin._error_page of <modules.admin.Admin object at 0x723dcbb0>>, 'error_page.401': <bound method Admin._error_page of <modules.admin.Admin object at 0x723dcbb0>>, 'error_page.404': <bound method Admin._error_page of <modules.admin.Admin object at 0x723dcbb0>>, 'error_page.400': <bound method Admin._error_page of <modules.admin.Admin object at 0x723dcbb0>>, 'tools.chaching.on': False, 'tools.caching.force': False}}'
          2019-11-18 10:15:53 INFO Main self._applications['api'] = {'Mount': '/api', 'Pluginname': 'api', 'Instance': '', 'Pluginclass': 'api', 'Description': 'API der Administrationsoberfläche für SmartHomeNG', 'Webifname': 'api', 'Conf': {'/gstatic': {'tools.staticdir.on': True, 'tools.staticdir.dir': '/usr/local/smarthome/modules/http/webif/gstatic'}, '/': {'error_page.405': <bound method Admin._error_page of <modules.admin.Admin object at 0x723dcbb0>>, 'tools.expires.on': True, 'tools.caching.delay': 6, 'request.dispatch': <cherrypy._cpdispatch.MethodDispatcher object at 0x75c99ab0>, 'tools.expires.secs': 6, 'error_page.411': <bound method Admin._error_page of <modules.admin.Admin object at 0x723dcbb0>>, 'error_page.500': <bound method Admin._error_page of <modules.admin.Admin object at 0x723dcbb0>>, 'error_page.401': <bound method Admin._error_page of <modules.admin.Admin object at 0x723dcbb0>>, 'error_page.404': <bound method Admin._error_page of <modules.admin.Admin object at 0x723dcbb0>>, 'error_page.400': <bound method Admin._error_page of <modules.admin.Admin object at 0x723dcbb0>>, 'tools.chaching.on': False, 'tools.caching.force': False}}}
          2019-11-18 10:15:53 INFO Main Init Plugins
          2019-11-18 10:15:53 INFO Main Loading '/usr/local/smarthome/etc/plugin.yaml' to 'OrderedDict'
          2019-11-18 10:15:53 INFO Main Loading '/usr/local/smarthome/bin/locale.yaml' to 'dict'
          2019-11-18 10:15:54 INFO Main Loaded global translations = {'Item': {'en': '=', 'fr': 'Objet', 'de': '='}, 'IP': {'en': '=', 'fr': '=', 'de': '='}, 'Funktion': {'en': 'Function', 'fr': 'Fonction', 'de': '='}, 'Aktiv': {'en': 'Active', 'fr': 'Actif', 'de': '='}, 'Scheduler': {'en': 'Scheduler', 'fr': '', 'de': '='}, 'deaktiviert': {'de': '=', 'en': 'disabled'}, 'Stunde': {'en': 'hour', 'fr': 'heure', 'de': '='}, 'Pfad': {'en': 'Path', 'fr': '', 'de': '='}, 'Dienste': {'en': 'Services', 'fr': '', 'de': '='}, 'Szenen': {'en': 'Scenes', 'fr': '', 'de': '='}, 'Clients': {'en': '=', 'fr': '', 'de': '='}, 'Verbunden': {'de': '=', 'en': 'Connected'}, 'Plugins': {'en': '=', 'fr': '', 'de': '='}, 'Thread': {'en': '=', 'fr': '', 'de': '='}, 'Version': {'en': '=', 'fr': '=', 'de': '='}, 'Sekunden': {'en': 'seconds', 'fr': 'secondes', 'de': '='}, 'Wert': {'en': 'Value', 'fr': 'Valeur', 'de': '='}, 'Benutzer': {'en': 'User', 'fr': 'Utilisateur', 'de': '='}, 'Typ': {'en': 'Type', 'fr': 'Type', 'de': '='}, 'Geräte': {'en': 'Devices', 'fr': 'Appareils', 'de': '='}, 'Adresse': {'en': 'Address', 'fr': 'Adresse', 'de': '='}, 'Szene': {'en': 'Scene', 'fr': '', 'de': '='}, 'Nein': {'en': 'No', 'fr': 'Non', 'de': '='}, 'Port': {'en': '=', 'fr': '=', 'de': '='}, 'Dienst': {'en': 'Service', 'fr': '', 'de': '='}, 'Ja': {'en': 'Yes', 'fr': 'Qui', 'de': '='}, 'Urheberrechtshinweise': {'en': 'Disclosure', 'fr': '', 'de': '='}, 'Threads': {'en': '=', 'fr': '', 'de': '='}, 'Logik': {'en': 'Logic', 'fr': '', 'de': '='}, 'Tage': {'en': 'days', 'fr': 'jours', 'de': '='}, 'Aktualisieren': {'en': 'Update', 'fr': 'Recharger', 'de': '='}, 'Letzter Change': {'en': 'Last Change', 'fr': '', 'de': '='}, 'Logiken': {'en': 'Logics', 'fr': '', 'de': '='}, 'Instanz': {'en': 'Instance', 'fr': '=', 'de': '='}, 'Sekunde': {'en': 'second', 'fr': 'seconde', 'de': '='}, 'aktiviert': {'de': '=', 'en': 'enabled'}, 'Gestoppt': {'en': 'Stopped', 'fr': 'Arrêté', 'de': '='}, 'Host': {'en': '=', 'fr': 'Hôte', 'de': '='}, 'Scheduler (plural)': {'en': 'Schedulers', 'fr': '', 'de': 'Scheduler'}, 'Tag': {'en': 'day', 'fr': 'jour', 'de': '='}, 'Kanal': {'en': 'Channel', 'fr': 'Canal', 'de': '='}, 'Knoten': {'en': 'Node', 'fr': 'noeud', 'de': '='}, 'Status': {'en': '=', 'fr': '', 'de': '='}, 'Stunden': {'en': 'hours', 'fr': 'heures', 'de': '='}, 'Items': {'en': '=', 'fr': 'Objets', 'de': '='}, 'Name': {'en': '=', 'fr': 'Nom', 'de': '='}, 'Client': {'en': '=', 'fr': '', 'de': '='}, 'Schließen': {'en': 'Close', 'fr': 'Fermer', 'de': '='}, 'Letztes Update': {'en': 'Last Update', 'fr': '', 'de': '='}, 'Plugin': {'en': '=', 'fr': '', 'de': '='}, 'Firmware': {'en': '=', 'fr': 'Micrologiciel', 'de': '='}, 'Minuten': {'en': 'minutes', 'fr': 'minutes', 'de': '='}, 'Logging': {'en': '=', 'fr': '', 'de': '='}, 'Minute': {'en': 'minute', 'fr': 'minute', 'de': '='}, 'Gerät': {'en': 'Device', 'fr': 'Appareil', 'de': '='}, 'Passwort': {'de': '=', 'en': 'Password'}, 'Laufzeit': {'de': '=', 'en': 'Uptime'}, 'Protokoll': {'en': 'Protocol', 'fr': 'Protocole', 'de': '='}, 'Browser': {'en': '=', 'fr': 'Navigateur', 'de': '='}}
          2019-11-18 10:15:54 INFO Main Load plugins
          2019-11-18 10:15:54 INFO Main Loading '/usr/local/smarthome/plugins/backend/plugin.yaml' to 'OrderedDict'
          2019-11-18 10:15:54 INFO Main plugin 'backend': Metadata paramlist = '['updates_allowed', 'developer_mode', 'pypi_timeout']'
          2019-11-18 10:15:54 INFO Main Loading '/usr/local/smarthome/plugins/backend/locale.yaml' to 'dict'
          2019-11-18 10:15:54 INFO Main plugin 'backend': value not found in plugin configuration file for parameter 'updates_allowed' -> using default value 'True' instead
          2019-11-18 10:15:54 INFO Main plugin 'backend': value not found in plugin configuration file for parameter 'developer_mode' -> using default value 'False' instead
          2019-11-18 10:15:54 INFO Main plugin 'backend': value not found in plugin configuration file for parameter 'pypi_timeout' -> using default value '5' instead
          2019-11-18 10:15:54 INFO Main WebInterface: Running from '/usr/local/smarthome/plugins/backend/webif'
          2019-11-18 10:15:54 INFO Main BackendSysteminfo __init__
          2019-11-18 10:15:54 INFO Main BackendServices __init__
          2019-11-18 10:15:54 INFO Main BackendItems __init__ <lib.item.Items object at 0x75ca2670>
          2019-11-18 10:15:54 INFO Main BackendLogics __init__ self.logics = None
          2019-11-18 10:15:54 INFO Main BackendLogics __init__ self.plugins = <lib.plugin.Plugins object at 0x6a11c510>
          2019-11-18 10:15:54 INFO Main BackendLogics __init__ self.scheduler = <Scheduler(Scheduler, started 1975788656)>
          2019-11-18 10:15:54 INFO Main BackendSchedulers __init__ self.scheduler = <Scheduler(Scheduler, started 1975788656)>
          2019-11-18 10:15:54 INFO Main BackendPlugins __init__ self.plugins = <lib.plugin.Plugins object at 0x6a11c510>
          2019-11-18 10:15:54 INFO Main BackendScenes __init__
          2019-11-18 10:15:54 INFO Main BackendThreads __init__
          2019-11-18 10:15:54 INFO Main BackendLogging __init__
          2019-11-18 10:15:54 INFO Main Module http: Registering webinterface 'backend' of plugin 'backend' from pluginclass 'BackendServer' instance ''
          2019-11-18 10:15:54 INFO Main - conf dict: '{'/gstatic': {'tools.staticdir.on': True, 'tools.staticdir.dir': '/usr/local/smarthome/modules/http/webif/gstatic'}, '/static': {'tools.staticdir.on': True, 'tools.staticdir.dir': 'static'}, '/': {'tools.staticdir.root': '/usr/local/smarthome/plugins/backend/webif', 'tools.auth_basic.on': False, 'tools.auth_basic.checkpassword': <bound method Http.validate_password of <modules.http.Http object at 0x75ca21d0>>, 'tools.auth_basic.realm': 'shng_http_webif'}}'
          2019-11-18 10:15:54 INFO Main self._applications['backend'] = {'Mount': '/backend', 'Pluginname': 'backend', 'Instance': '', 'Pluginclass': 'BackendServer', 'Description': 'Administrationsoberfläche für SmartHomeNG', 'Webifname': 'backend', 'Conf': {'/gstatic': {'tools.staticdir.on': True, 'tools.staticdir.dir': '/usr/local/smarthome/modules/http/webif/gstatic'}, '/static': {'tools.staticdir.on': True, 'tools.staticdir.dir': 'static'}, '/': {'tools.staticdir.root': '/usr/local/smarthome/plugins/backend/webif', 'tools.auth_basic.on': False, 'tools.auth_basic.checkpassword': <bound method Http.validate_password of <modules.http.Http object at 0x75ca21d0>>, 'tools.auth_basic.realm': 'shng_http_webif'}}}
          2019-11-18 10:15:54 INFO Main Initialized plugin 'backend' from from section 'BackendServer'
          2019-11-18 10:15:54 INFO Main Loading '/usr/local/smarthome/plugins/knx/plugin.yaml' to 'OrderedDict'
          2019-11-18 10:15:55 INFO Main plugin 'knx': Metadata paramlist = '['time_ga', 'date_ga', 'send_time', 'busmonitor', 'host', 'port', 'readonly', 'enable_stats', 'instance']'
          2019-11-18 10:15:55 INFO Main plugin 'knx': Metadata itemdeflist = '['knx_dpt', 'knx_send', 'knx_listen', 'knx_init', 'knx_cache', 'knx_reply', 'knx_status', 'knx_poll']'
          2019-11-18 10:15:55 INFO Main plugin 'knx': Metadata logic_paramlist = '['knx_listen', 'knx_reply']'
          2019-11-18 10:15:55 INFO Main plugin 'knx': Metadata plugin_functionlist = '['encode', 'groupwrite', 'groupread', 'send_time']'
          2019-11-18 10:15:55 INFO Main plugin 'knx': Metadata get_plugin_function_defstrings -> '['encode(data, dpt)', 'groupread(ga, cache)', 'groupwrite(ga, data, dpt)', 'send_time(time_ga, date_ga)']'
          2019-11-18 10:15:55 INFO Main plugin 'knx': Metadata get_plugin_function_defstrings -> '['encode(data:foo, dpt:foo)', 'groupread(ga:knx_ga, cache:bool)', 'groupwrite(ga:knx_ga, data:foo, dpt:str)', 'send_time(time_ga:knx_ga, date_ga:knx_ga)']'
          2019-11-18 10:15:55 INFO Main plugin 'knx': Metadata get_plugin_function_defstrings -> '['encode(data, dpt)', 'groupread(ga, cache=False)', 'groupwrite(ga, data, dpt)', 'send_time(time_ga, date_ga)']'
          2019-11-18 10:15:55 INFO Main plugin 'knx': Metadata get_plugin_function_defstrings -> '['encode(data:foo, dpt:foo)', 'groupread(ga:knx_ga, cache:bool=False)', 'groupwrite(ga:knx_ga, data:foo, dpt:str)', 'send_time(time_ga:knx_ga, date_ga:knx_ga)']'
          2019-11-18 10:15:55 INFO Main Loading '/usr/local/smarthome/plugins/knx/locale.yaml' to 'dict'
          2019-11-18 10:15:55 INFO Main Plugin 'knx': Loaded plugin translations = {'Statistiken': {'en': 'Statistics', 'fr': 'Statistiques', 'de': '='}, 'Gruppen Adresse': {'en': 'Group Address', 'fr': '', 'de': '='}, 'Letzte KNX Aktivität': {'en': 'Last KNX activity', 'fr': 'Dernière activité KNX', 'de': '='}, '# gelesen': {'en': '# read', 'fr': '', 'de': '='}, '# geschrieben': {'en': '# write', 'fr': '', 'de': '='}, '# geantwortet': {'en': '# response', 'fr': '', 'de': '='}, 'Service für den KNX Support': {'en': 'Service deamon for the KNX support', 'fr': '', 'de': '='}}
          2019-11-18 10:15:55 INFO Main plugin 'knx': value not found in plugin configuration file for parameter 'date_ga' -> using default value '' instead
          2019-11-18 10:15:55 INFO Main plugin 'knx': value not found in plugin configuration file for parameter 'busmonitor' -> using default value 'off' instead
          2019-11-18 10:15:55 INFO Main plugin 'knx': value not found in plugin configuration file for parameter 'readonly' -> using default value 'False' instead
          2019-11-18 10:15:55 INFO Main plugin 'knx': value not found in plugin configuration file for parameter 'enable_stats' -> using default value 'True' instead
          2019-11-18 10:15:55 INFO Main plugin 'knx': value not found in plugin configuration file for parameter 'instance' -> using default value '' instead
          2019-11-18 10:15:55 INFO Main Module http: Registering webinterface 'knx' of plugin 'knx' from pluginclass 'KNX' instance ''
          2019-11-18 10:15:55 INFO Main - conf dict: '{'/gstatic': {'tools.staticdir.on': True, 'tools.staticdir.dir': '/usr/local/smarthome/modules/http/webif/gstatic'}, '/static': {'tools.staticdir.on': True, 'tools.staticdir.dir': 'static'}, '/': {'tools.staticdir.root': '/usr/local/smarthome/plugins/knx/webif', 'tools.auth_basic.on': False, 'tools.auth_basic.checkpassword': <bound method Http.validate_password of <modules.http.Http object at 0x75ca21d0>>, 'tools.auth_basic.realm': 'shng_http_webif'}}'
          2019-11-18 10:15:55 INFO Main self._applications['knx'] = {'Mount': '/knx', 'Pluginname': 'knx', 'Instance': '', 'Pluginclass': 'KNX', 'Description': 'Webinterface knx of plugin knx', 'Webifname': 'knx', 'Conf': {'/gstatic': {'tools.staticdir.on': True, 'tools.staticdir.dir': '/usr/local/smarthome/modules/http/webif/gstatic'}, '/static': {'tools.staticdir.on': True, 'tools.staticdir.dir': 'static'}, '/': {'tools.staticdir.root': '/usr/local/smarthome/plugins/knx/webif', 'tools.auth_basic.on': False, 'tools.auth_basic.checkpassword': <bound method Http.validate_password of <modules.http.Http object at 0x75ca21d0>>, 'tools.auth_basic.realm': 'shng_http_webif'}}}
          2019-11-18 10:15:55 INFO Main Initialized plugin 'knx' from from section 'knx'
          2019-11-18 10:15:56 INFO Main Loading '/usr/local/smarthome/plugins/visu_websocket/plugin.yaml' to 'OrderedDict'
          2019-11-18 10:15:56 INFO Main plugin 'visu_websocket': Metadata paramlist = '['ip', 'port', 'tls', 'acl', 'wsproto', 'querydef']'
          2019-11-18 10:15:56 INFO Main plugin 'visu_websocket': Metadata itemdeflist = '['visu_acl']'
          2019-11-18 10:15:56 INFO Main plugin 'visu_websocket': Metadata logic_paramlist = '['visu_acl']'
          2019-11-18 10:15:56 INFO Main plugin 'visu_websocket': Metadata plugin_functionlist = '['url']'
          2019-11-18 10:15:56 INFO Main plugin 'visu_websocket': Metadata get_plugin_function_defstrings -> '['url(url, clientip)']'
          2019-11-18 10:15:56 INFO Main plugin 'visu_websocket': Metadata get_plugin_function_defstrings -> '['url(url:str, clientip:str)']'
          2019-11-18 10:15:56 INFO Main plugin 'visu_websocket': Metadata get_plugin_function_defstrings -> '["url(url, clientip= '')"]'
          2019-11-18 10:15:56 INFO Main plugin 'visu_websocket': Metadata get_plugin_function_defstrings -> '["url(url:str, clientip:str= '')"]'
          2019-11-18 10:15:56 INFO Main Loading '/usr/local/smarthome/plugins/visu_websocket/locale.yaml' to 'dict'
          2019-11-18 10:15:56 INFO Main Plugin 'visu': Loaded plugin translations = {'Visu Client': {'de': '=', 'en': '='}, 'Client Software': {'de': '=', 'en': '='}, 'Keine aktiven Clients': {'de': '=', 'en': 'No active clients'}, 'nicht aktiv': {'de': '=', 'en': 'disabled'}, 'Visu Zugriff': {'de': '=', 'en': 'Visu Access'}, 'Definitions-Abfrage': {'de': '=', 'en': 'Query definitions'}, 'Verboten': {'de': '=', 'en': 'Forbidden'}, 'nicht erlaubt': {'de': '=', 'en': 'disabled'}, 'aktiv': {'de': '=', 'en': 'enabled'}, 'Erlaubt': {'de': '=', 'en': 'Allowed'}, 'Websocket Protokoll': {'de': '=', 'en': 'Websocket protocol'}, 'erlaubt': {'de': '=', 'en': 'enabled'}, 'Standard Zugriff': {'de': '=', 'en': 'Default Access'}, 'Anzahl Clients': {'de': '=', 'en': 'Number of clients'}}
          2019-11-18 10:15:56 INFO Main plugin 'visu_websocket': value not found in plugin configuration file for parameter 'ip' -> using default value '0.0.0.0' instead
          2019-11-18 10:15:56 INFO Main plugin 'visu_websocket': value not found in plugin configuration file for parameter 'tls' -> using default value 'False' instead
          2019-11-18 10:15:56 INFO Main plugin 'visu_websocket': value not found in plugin configuration file for parameter 'querydef' -> using default value 'False' instead
          2019-11-18 10:15:56 INFO Main Module http: Registering webinterface 'visu_websocket' of plugin 'visu_websocket' from pluginclass 'WebSocket' instance ''
          2019-11-18 10:15:56 INFO Main - conf dict: '{'/gstatic': {'tools.staticdir.on': True, 'tools.staticdir.dir': '/usr/local/smarthome/modules/http/webif/gstatic'}, '/static': {'tools.staticdir.on': True, 'tools.staticdir.dir': 'static'}, '/': {'tools.staticdir.root': '/usr/local/smarthome/plugins/visu_websocket/webif', 'tools.auth_basic.on': False, 'tools.auth_basic.checkpassword': <bound method Http.validate_password of <modules.http.Http object at 0x75ca21d0>>, 'tools.auth_basic.realm': 'shng_http_webif'}}'
          2019-11-18 10:15:56 INFO Main self._applications['visu_websocket'] = {'Mount': '/visu_websocket', 'Pluginname': 'visu_websocket', 'Instance': '', 'Pluginclass': 'WebSocket', 'Description': 'Webinterface visu_websocket of plugin visu_websocket', 'Webifname': 'visu_websocket', 'Conf': {'/gstatic': {'tools.staticdir.on': True, 'tools.staticdir.dir': '/usr/local/smarthome/modules/http/webif/gstatic'}, '/static': {'tools.staticdir.on': True, 'tools.staticdir.dir': 'static'}, '/': {'tools.staticdir.root': '/usr/local/smarthome/plugins/visu_websocket/webif', 'tools.auth_basic.on': False, 'tools.auth_basic.checkpassword': <bound method Http.validate_password of <modules.http.Http object at 0x75ca21d0>>, 'tools.auth_basic.realm': 'shng_http_webif'}}}
          2019-11-18 10:15:56 INFO Main Initialized plugin 'visu_websocket' from from section 'visu'
          2019-11-18 10:15:56 INFO Main Loading '/usr/local/smarthome/plugins/telegram/plugin.yaml' to 'OrderedDict'
          2019-11-18 10:15:56 INFO Main plugin 'telegram': Metadata paramlist = '['token', 'name', 'long_polling_timeout', 'welcome_msg', 'bye_msg', 'no_access_msg', 'no_write_access_msg', 'pretty_thread_names']'
          2019-11-18 10:15:56 INFO Main plugin 'telegram': Metadata itemdeflist = '['telegram_message', 'telegram_info', 'telegram_text', 'telegram_value_match_regex', 'telegram_chat_ids']'
          2019-11-18 10:15:56 INFO Main plugin 'telegram': Metadata plugin_functionlist = '['msg_broadcast', 'photo_broadcast']'
          2019-11-18 10:15:56 INFO Main plugin 'telegram': Metadata get_plugin_function_defstrings -> '['msg_broadcast(msg, chat_id)', 'photo_broadcast(photofile_or_url, caption, chat_id)']'
          2019-11-18 10:15:56 INFO Main plugin 'telegram': Metadata get_plugin_function_defstrings -> '['msg_broadcast(msg:str, chat_id:int)', 'photo_broadcast(photofile_or_url:str, caption:str, chat_id:int)']'
          2019-11-18 10:15:56 INFO Main plugin 'telegram': Metadata get_plugin_function_defstrings -> '['msg_broadcast(msg, chat_id)', 'photo_broadcast(photofile_or_url, caption, chat_id)']'
          2019-11-18 10:15:56 INFO Main plugin 'telegram': Metadata get_plugin_function_defstrings -> '['msg_broadcast(msg:str, chat_id:int)', 'photo_broadcast(photofile_or_url:str, caption:str, chat_id:int)']'
          2019-11-18 10:15:57 INFO Main Loading '/usr/local/smarthome/plugins/telegram/locale.yaml' to 'dict'
          2019-11-18 10:15:57 INFO Main Plugin 'telegram': Loaded plugin translations = {'Info from the items:': {'en': '=', 'fr': 'Info sur les Items:', 'de': 'Infos von den Items:'}, 'choose': {'en': '=', 'fr': 'Choisissez parmi', 'de': 'Auswählen'}, 'no items found with the attribute %s': {'en': '=', 'fr': 'Ne pas trouvée une Item avec %s', 'de': 'Keine Items mit Attribut %s gefunden'}, 'I will hide the keyboard': {'en': '=', 'fr': 'Je cache le clavier', 'de': 'Ich blende die Bedientasten aus'}, 'unknown command %s': {'en': '=', 'fr': 'commande inconnue %s:', 'de': 'Unbekanntes Kommando %s:'}}
          2019-11-18 10:15:57 INFO Main plugin 'telegram': value not found in plugin configuration file for parameter 'long_polling_timeout' -> using default value '120.0' instead
          2019-11-18 10:15:57 INFO Main plugin 'telegram': value not found in plugin configuration file for parameter 'bye_msg' -> using default value 'SmartHomeNG Telegram Plugin stops' instead
          2019-11-18 10:15:57 INFO Main plugin 'telegram': value not found in plugin configuration file for parameter 'no_access_msg' -> using default value 'This bot does not know your chat id and thus does not trust it, you are not allowed to use this bot' instead
          2019-11-18 10:15:57 INFO Main plugin 'telegram': value not found in plugin configuration file for parameter 'no_write_access_msg' -> using default value 'This bot knows your chat id but you are not allowed to use this bot to write to items' instead
          2019-11-18 10:15:57 INFO Main plugin 'telegram': value not found in plugin configuration file for parameter 'pretty_thread_names' -> using default value 'True' instead
          2019-11-18 10:15:57 INFO Main Telegram bot is listening: *****
          2019-11-18 10:15:57 INFO Main Module http: Registering webinterface 'telegram' of plugin 'telegram' from pluginclass 'Telegram' instance ''
          2019-11-18 10:15:57 INFO Main - conf dict: '{'/gstatic': {'tools.staticdir.on': True, 'tools.staticdir.dir': '/usr/local/smarthome/modules/http/webif/gstatic'}, '/static': {'tools.staticdir.on': True, 'tools.staticdir.dir': 'static'}, '/': {'tools.staticdir.root': '/usr/local/smarthome/plugins/telegram/webif', 'tools.auth_basic.on': False, 'tools.auth_basic.checkpassword': <bound method Http.validate_password of <modules.http.Http object at 0x75ca21d0>>, 'tools.auth_basic.realm': 'shng_http_webif'}}'
          2019-11-18 10:15:57 INFO Main self._applications['telegram'] = {'Mount': '/telegram', 'Pluginname': 'telegram', 'Instance': '', 'Pluginclass': 'Telegram', 'Description': 'Webinterface telegram of plugin telegram', 'Webifname': 'telegram', 'Conf': {'/gstatic': {'tools.staticdir.on': True, 'tools.staticdir.dir': '/usr/local/smarthome/modules/http/webif/gstatic'}, '/static': {'tools.staticdir.on': True, 'tools.staticdir.dir': 'static'}, '/': {'tools.staticdir.root': '/usr/local/smarthome/plugins/telegram/webif', 'tools.auth_basic.on': False, 'tools.auth_basic.checkpassword': <bound method Http.validate_password of <modules.http.Http object at 0x75ca21d0>>, 'tools.auth_basic.realm': 'shng_http_webif'}}}
          2019-11-18 10:15:57 INFO Main Initialized plugin 'telegram' from from section 'telegram'
          2019-11-18 10:15:57 INFO Main Loading '/usr/local/smarthome/plugins/visu_smartvisu/plugin.yaml' to 'OrderedDict'
          2019-11-18 10:15:58 INFO Main plugin 'visu_smartvisu': Metadata paramlist = '['smartvisu_dir', 'generate_pages', 'overwrite_templates', 'visu_style', 'handle_widgets', 'instance']'
          2019-11-18 10:15:58 INFO Main plugin 'visu_smartvisu': Metadata itemdeflist = '['sv_page', 'sv_overview', 'sv_item_type', 'sv_img', 'sv_widget', 'sv_widget2', 'sv_nav_aside', 'sv_nav_aside2', 'sv_heading_left', 'sv_heading_center', 'sv_heading_right']'
          2019-11-18 10:15:58 INFO Main Loading '/usr/local/smarthome/plugins/visu_smartvisu/locale.yaml' to 'dict'
          2019-11-18 10:15:58 INFO Main plugin 'visu_smartvisu': value not found in plugin configuration file for parameter 'generate_pages' -> using default value 'True' instead
          2019-11-18 10:15:58 INFO Main plugin 'visu_smartvisu': value not found in plugin configuration file for parameter 'overwrite_templates' -> using default value 'True' instead
          2019-11-18 10:15:58 INFO Main plugin 'visu_smartvisu': value not found in plugin configuration file for parameter 'visu_style' -> using default value 'std' instead
          2019-11-18 10:15:58 INFO Main plugin 'visu_smartvisu': value not found in plugin configuration file for parameter 'handle_widgets' -> using default value 'True' instead
          2019-11-18 10:15:58 INFO Main plugin 'visu_smartvisu': value not found in plugin configuration file for parameter 'instance' -> using default value '' instead
          2019-11-18 10:15:58 INFO Main Initialized plugin 'visu_smartvisu' from from section 'smartvisu'
          2019-11-18 10:15:58 INFO Main Loading '/usr/local/smarthome/plugins/database/plugin.yaml' to 'OrderedDict'
          2019-11-18 10:16:00 INFO Main plugin 'database': Metadata paramlist = '['driver', 'connect', 'prefix', 'cycle', 'precision']'
          2019-11-18 10:16:00 INFO Main plugin 'database': Metadata itemdeflist = '['database']'
          2019-11-18 10:16:00 INFO Main plugin 'database': Metadata plugin_functionlist = '['id', 'db', 'dump', 'insertLog', 'updateLog', 'readLog', 'deleteLog', 'readLogs', 'insertItem', 'updateItem', 'readItem', 'readItems', 'deleteItem', 'cleanup']'
          2019-11-18 10:16:00 INFO Main plugin 'database': Metadata get_plugin_function_defstrings -> '['cleanup()', 'db()', 'deleteItem(id)', 'deleteLog(id, time, time_start, time_end, changed, changed_start, changed_end, cur)', 'dump(dumpfile, id, time, time_start, time_end, changed, changed_start, changed_end, cur)', 'id(item)', 'insertItem(name, cur)', 'insertLog(id, time, duration, val, it, changed, cur)', 'readItem(id, cur)', 'readItems(id, cur)', 'readLog(id, time)', 'readLogs(id, time, time_start, time_end, changed, changed_start, changed_end, cur)', 'updateItem(id, time, duration, val, it, changed, cur)', 'updateLog(id, time, duration, val, it, changed, cur)']'
          2019-11-18 10:16:00 INFO Main plugin 'database': Metadata get_plugin_function_defstrings -> '['cleanup()', 'db()', 'deleteItem(id:int)', 'deleteLog(id:int, time:int, time_start:int, time_end:int, changed:int, changed_start:int, changed_end:int, cur:foo)', 'dump(dumpfile:str, id:int, time:int, time_start:int, time_end:int, changed:int, changed_start:int, changed_end:int, cur:foo)', 'id(item:foo)', 'insertItem(name:str, cur:foo)', 'insertLog(id:int, time:int, duration:int, val:str, it:str, changed:int, cur:foo)', 'readItem(id:int, cur:foo)', 'readItems(id:int, cur:foo)', 'readLog(id:int, time:int)', 'readLogs(id:int, time:int, time_start:int, time_end:int, changed:int, changed_start:int, changed_end:int, cur:foo)', 'updateItem(id:int, time:int, duration:int, val:str, it:str, changed:int, cur:foo)', 'updateLog(id:int, time:int, duration:int, val:str, it:str, changed:int, cur:foo)']'
          2019-11-18 10:16:00 INFO Main plugin 'database': Metadata get_plugin_function_defstrings -> '['cleanup()', 'db()', 'deleteItem(id)', 'deleteLog(id, time, time_start, time_end, changed, changed_start, changed_end, cur)', 'dump(dumpfile, id, time, time_start, time_end, changed, changed_start, changed_end, cur)', 'id(item)', 'insertItem(name, cur)', 'insertLog(id, time, duration, val, it, changed, cur)', 'readItem(id, cur)', 'readItems(id, cur)', 'readLog(id, time)', 'readLogs(id, time, time_start, time_end, changed, changed_start, changed_end, cur)', 'updateItem(id, time, duration, val, it, changed, cur)', 'updateLog(id, time, duration, val, it, changed, cur)']'
          2019-11-18 10:16:00 INFO Main plugin 'database': Metadata get_plugin_function_defstrings -> '['cleanup()', 'db()', 'deleteItem(id:int)', 'deleteLog(id:int, time:int, time_start:int, time_end:int, changed:int, changed_start:int, changed_end:int, cur:foo)', 'dump(dumpfile:str, id:int, time:int, time_start:int, time_end:int, changed:int, changed_start:int, changed_end:int, cur:foo)', 'id(item:foo)', 'insertItem(name:str, cur:foo)', 'insertLog(id:int, time:int, duration:int, val:str, it:str, changed:int, cur:foo)', 'readItem(id:int, cur:foo)', 'readItems(id:int, cur:foo)', 'readLog(id:int, time:int)', 'readLogs(id:int, time:int, time_start:int, time_end:int, changed:int, changed_start:int, changed_end:int, cur:foo)', 'updateItem(id:int, time:int, duration:int, val:str, it:str, changed:int, cur:foo)', 'updateLog(id:int, time:int, duration:int, val:str, it:str, changed:int, cur:foo)']'
          2019-11-18 10:16:00 INFO Main Loading '/usr/local/smarthome/plugins/database/locale.yaml' to 'dict'
          2019-11-18 10:16:00 INFO Main Plugin 'database': Loaded plugin translations = {'Datenbank-Cleanup': {'de': '=', 'en': 'Database Cleanup'}, 'Historische Daten': {'de': 'Historische Daten', 'en': 'Historical Data'}, 'Zeige Einträge vom': {'de': 'Zeige Einträge vom', 'en': 'Show entries from'}, 'CSV Export der Werte': {'de': 'CSV Export der Werte', 'en': 'CSV Export of Values'}, 'in der Tabelle "log" wurde erfolgreich initiiert!': {'de': 'in der Tabelle "log" wurde erfolgreich initiiert!', 'en': 'in table "log" successfully initiated.'}, 'Item-ID in der Datenbank': {'de': 'Item-ID in der Datenbank', 'en': 'Item ID within the database'}, 'Wert löschen': {'de': 'Wert löschen', 'en': 'Delete Value'}, 'Verbunden': {'de': 'Verbunden', 'en': 'Connected'}, 'Löschauftrag für die Einträge von Item ID': {'de': 'Löschauftrag für die Einträge von Item ID', 'en': 'Deletion of data for the entries of item ID'}, 'Datensätze': {'de': 'Datensätze', 'en': 'Data Sets'}, 'Die folgenden Einträge entstammen der log Tabelle mit historischen Daten für das Item {{ item_path }} (Datenbank-ID: {{ item_id }})': {'de': 'Die folgenden Einträge entstammen der log Tabelle mit historischen Daten für das Item', 'en': 'The following entries are derived from the log table with historical data for item )'}, 'Ja': {'de': 'Ja', 'en': 'Yes'}, 'Zeit': {'de': 'Zeit', 'en': 'Time'}, 'Übersicht': {'de': 'Übersicht', 'en': 'Overview'}, 'Löschauftrag in der Tabelle "log" wurde erfolgreich initiiert!': {'de': 'Löschauftrag in der Tabelle "log" wurde erfolgreich initiiert!', 'en': 'Deletion of data set successfully initiated!'}, 'Wollen Sie den Datensatz (Tabelle log) dieses Items wirklich löschen?': {'de': 'Wollen Sie den Datensatz (Tabelle log) dieses Items wirklich löschen?', 'en': 'Do you really want to delete the historic dataset (table log) of this item?'}, 'Wollen Sie die historischen Daten (Tabelle log) dieses Items wirklich löschen?': {'de': 'Wollen Sie die historischen Daten (Tabelle log) dieses Items wirklich löschen?', 'en': 'Do you really want to delete the historical data (table log) of this item?'}, 'Datenbank-Cleanup wurde erfolgreich initiiert!': {'de': '=', 'en': 'Database cleanup successfully initiated!'}, 'Anzahl Einträge in LOG Tabelle für Item': {'de': '=', 'en': 'Number of data sets in LOG table for item'}, 'Wertehistorie löschen': {'de': 'Wertehistorie löschen', 'en': 'Delete Historical Data'}, 'Geändert': {'de': 'Geändert', 'en': 'Changed'}, 'Item ID': {'de': 'Item ID', 'en': 'Item ID'}, 'am': {'de': 'am', 'en': 'on the'}, 'Aktionen': {'de': 'Aktionen', 'en': 'Actions'}, 'Anzahl Datensätze in LOG Tabelle': {'de': '=', 'en': 'Number of data sets in LOG table'}, 'Die folgenden Items sind dieser Instanz des Database Plugins zugewiesen': {'de': 'Die folgenden Items sind dieser Instanz des Database Plugins zugewiesen', 'en': 'The following items are assigned to this instance of the database plugin'}, 'Plugin-API': {'en': 'Plugin API', 'fr': '', 'de': '='}, 'Aktueller Wert': {'de': '=', 'en': 'Recent Value'}, 'Typ': {'de': '=', 'en': 'Type'}, 'Wollen Sie alle Datensätze ohne zugehöriges Item wirklich löschen?': {'de': '=', 'en': 'Do you really want to delete all data sets without corresponding item?'}, 'Nein': {'de': 'Nein', 'en': 'No'}, 'Das Löschen von Einträgen, für die es keine Items mehr gibt, kann noch kurze Zeit dauern, da die Ausführung erst nach Abschluß der bestehenden Transaktionen erfolgen kann.': {'de': '=', 'en': 'The cleanup of entries, for which no items exist anymore, can take a while, as it can only be processed after the end of already existing database transactions.'}, 'Datenbank-ID': {'de': 'Datenbank-ID', 'en': 'Database ID'}, 'Das Löschen kann noch kurze Zeit dauern, da die Ausführung des Delete Queries erst nach Abschluß der bestehenden Transaktionen erfolgen kann.': {'de': 'Das Löschen kann noch kurze Zeit dauern, da die Ausführung des Delete Queries erst nach Abschluß der bestehenden Transaktionen erfolgen kann.', 'en': 'The deletion could take a short time, as the DELETE query will be processed after the end of already existing database transactions.'}, 'Database Items': {'en': '=', 'fr': '', 'de': '='}, 'Dauer': {'de': 'Dauer', 'en': 'Duration'}, 'Loading...': {'de': '=', 'en': '='}, 'Datenbank-Dump': {'de': 'Datenbank-Dump', 'en': 'Database Dump'}, 'Parameter': {'en': 'Parameters', 'fr': '', 'de': '='}, 'Tabelle': {'de': '=', 'en': 'Table'}, 'Die folgenden Einträge entstammen der log Tabelle mit historischen Daten für das Item': {'de': 'Die folgenden Einträge entstammen der log Tabelle mit historischen Daten für das Item', 'en': 'The following entries are derived from the log table with historical data for item )'}}
          2019-11-18 10:16:00 INFO Main plugin 'database': value not found in plugin configuration file for parameter 'prefix' -> using default value '' instead
          2019-11-18 10:16:00 INFO Main plugin 'database': value not found in plugin configuration file for parameter 'cycle' -> using default value '60' instead
          2019-11-18 10:16:00 INFO Main plugin 'database': value not found in plugin configuration file for parameter 'precision' -> using default value '2' instead
          2019-11-18 10:16:00 INFO Main Database [Database]: Connected with <pymysql.connections.Connection object at 0x69c88f90> using "pyformat" style
          2019-11-18 10:16:00 INFO Main Database [Database]: Version 6 found
          2019-11-18 10:16:00 INFO Main Module http: Registering webinterface 'database_mysqldb' of plugin 'database' from pluginclass 'Database' instance 'mysqldb'
          2019-11-18 10:16:00 INFO Main - conf dict: '{'/gstatic': {'tools.staticdir.on': True, 'tools.staticdir.dir': '/usr/local/smarthome/modules/http/webif/gstatic'}, '/static': {'tools.staticdir.on': True, 'tools.staticdir.dir': 'static'}, '/': {'tools.staticdir.root': '/usr/local/smarthome/plugins/database/webif', 'tools.auth_basic.on': False, 'tools.auth_basic.checkpassword': <bound method Http.validate_password of <modules.http.Http object at 0x75ca21d0>>, 'tools.auth_basic.realm': 'shng_http_webif'}}'
          2019-11-18 10:16:00 INFO Main self._applications['database_mysqldb'] = {'Mount': '/database_mysqldb', 'Pluginname': 'database', 'Instance': 'mysqldb', 'Pluginclass': 'Database', 'Description': 'Webinterface database_mysqldb of plugin database', 'Webifname': 'database_mysqldb', 'Conf': {'/gstatic': {'tools.staticdir.on': True, 'tools.staticdir.dir': '/usr/local/smarthome/modules/http/webif/gstatic'}, '/static': {'tools.staticdir.on': True, 'tools.staticdir.dir': 'static'}, '/': {'tools.staticdir.root': '/usr/local/smarthome/plugins/database/webif', 'tools.auth_basic.on': False, 'tools.auth_basic.checkpassword': <bound method Http.validate_password of <modules.http.Http object at 0x75ca21d0>>, 'tools.auth_basic.realm': 'shng_http_webif'}}}
          2019-11-18 10:16:00 INFO Main Initialized plugin 'database' instance 'mysqldb' from from section 'database'
          2019-11-18 10:16:00 INFO Main Loading '/usr/local/smarthome/plugins/uzsu/plugin.yaml' to 'OrderedDict'
          2019-11-18 10:16:01 INFO Main plugin 'uzsu': Metadata paramlist = '['remove_duplicates']'
          2019-11-18 10:16:01 INFO Main plugin 'uzsu': Metadata itemdeflist = '['uzsu_item']'
          2019-11-18 10:16:01 INFO Main plugin 'uzsu': Metadata plugin_functionlist = '['planned', 'clear', 'activate', 'interpolation']'
          2019-11-18 10:16:01 INFO Main plugin 'uzsu': Metadata get_plugin_function_defstrings -> '['activate()', 'clear()', 'interpolation(type, interval, backintime)', 'planned()']'
          2019-11-18 10:16:01 INFO Main plugin 'uzsu': Metadata get_plugin_function_defstrings -> '['activate()', 'clear()', 'interpolation(type:str, interval:int, backintime:int)', 'planned()']'
          2019-11-18 10:16:01 INFO Main plugin 'uzsu': Metadata get_plugin_function_defstrings -> '['activate()', 'clear()', "interpolation(type= 'none', interval=5, backintime=0)", 'planned()']'
          2019-11-18 10:16:01 INFO Main plugin 'uzsu': Metadata get_plugin_function_defstrings -> '['activate()', 'clear()', "interpolation(type:str= 'none', interval:int=5, backintime:int=0)", 'planned()']'
          2019-11-18 10:16:01 INFO Main plugin 'uzsu': Metadata itemstructlist = '[]'
          2019-11-18 10:16:01 INFO Main add_struct_definition: struct 'uzsu.child' = OrderedDict([('name', 'Vorlage-Struktur für Zeitschaltuhren'), ('uzsu', OrderedDict([('type', 'dict'), ('uzsu_item', '..'), ('cache', True), ('visu_acl', 'rw'), ('active', OrderedDict([('remark', 'Use this item to easily turn on or off your UZSU'), ('type', 'bool'), ('eval', 'sh...activate(value)'), ('visu_acl', 'rw'), ('status', OrderedDict([('type', 'bool'), ('eval', 'sh....activate()'), ('eval_trigger', ['..', '...']), ('on_change', '.. = value'), ('crontab', 'init = 0')]))]))]))])
          2019-11-18 10:16:01 INFO Main Loading '/usr/local/smarthome/plugins/uzsu/locale.yaml' to 'dict'
          2019-11-18 10:16:01 INFO Main Plugin 'uzsu': Loaded plugin translations = {'Back in Time': {'de': '=', 'en': '='}, 'Uhr': {'de': '=', 'en': "o'clock"}, 'Init Information fehlt!': {'de': '=', 'en': 'Init entry missing!'}, 'Interpolation (Intervall)': {'de': '=', 'en': 'Interpolation (interval)'}, 'Item existiert nicht!': {'de': '=', 'en': 'Item does not exist!'}, 'Sonnenuntergang': {'de': '=', 'en': 'sun set'}, 'Interpolationsinformation fehlt!': {'de': '=', 'en': 'Interpolation entry missing!'}, 'Sonnenaufgang': {'de': '=', 'en': 'sun rise'}, 'UZSU Item': {'de': '=', 'en': '='}, 'Wert des abhängigen Items': {'de': '=', 'en': 'Value of dependant Item'}, 'Klick auf ein Item um dessen Konfiguration anzuzeigen': {'de': '=', 'en': 'Click on an item to show its configuration'}, 'Abhängige Items (mit Typ)': {'de': '=', 'en': 'Dependant Item (with type)'}, 'Aktives Item, keine (aktiven) Einträge!': {'de': '=', 'en': 'Active item, no (active) entries!'}, 'Die folgenden Items sind dem UZSU Plugin zugewiesen': {'de': '=', 'en': 'The following items are assigned to the UZSU plugin'}}
          2019-11-18 10:16:01 INFO Main plugin 'uzsu': value not found in plugin configuration file for parameter 'remove_duplicates' -> using default value 'True' instead
          2019-11-18 10:16:01 INFO Main Module http: Registering webinterface 'uzsu' of plugin 'uzsu' from pluginclass 'UZSU' instance ''
          2019-11-18 10:16:01 INFO Main - conf dict: '{'/gstatic': {'tools.staticdir.on': True, 'tools.staticdir.dir': '/usr/local/smarthome/modules/http/webif/gstatic'}, '/static': {'tools.staticdir.on': True, 'tools.staticdir.dir': 'static'}, '/': {'tools.staticdir.root': '/usr/local/smarthome/plugins/uzsu/webif', 'tools.auth_basic.on': False, 'tools.auth_basic.checkpassword': <bound method Http.validate_password of <modules.http.Http object at 0x75ca21d0>>, 'tools.auth_basic.realm': 'shng_http_webif'}}'
          2019-11-18 10:16:01 INFO Main self._applications['uzsu'] = {'Mount': '/uzsu', 'Pluginname': 'uzsu', 'Instance': '', 'Pluginclass': 'UZSU', 'Description': 'Webinterface uzsu of plugin uzsu', 'Webifname': 'uzsu', 'Conf': {'/gstatic': {'tools.staticdir.on': True, 'tools.staticdir.dir': '/usr/local/smarthome/modules/http/webif/gstatic'}, '/static': {'tools.staticdir.on': True, 'tools.staticdir.dir': 'static'}, '/': {'tools.staticdir.root': '/usr/local/smarthome/plugins/uzsu/webif', 'tools.auth_basic.on': False, 'tools.auth_basic.checkpassword': <bound method Http.validate_password of <modules.http.Http object at 0x75ca21d0>>, 'tools.auth_basic.realm': 'shng_http_webif'}}}
          2019-11-18 10:16:01 INFO Main Init with timezone tzfile('/usr/share/zoneinfo/Europe/Berlin')
          2019-11-18 10:16:01 INFO Main Initialized plugin 'uzsu' from from section 'uzsu'
          2019-11-18 10:16:01 INFO Main Loading '/usr/local/smarthome/plugins/network/plugin.yaml' to 'OrderedDict'
          2019-11-18 10:16:02 INFO Main plugin 'network': Metadata paramlist = '['ip', 'port', 'udp', 'tcp', 'http', 'udp_acl', 'tcp_acl', 'http_acl']'
          2019-11-18 10:16:02 INFO Main plugin 'network': Metadata itemdeflist = '['nw', 'nw_acl', 'nw_udp_listen', 'nw_tcp_listen', 'nw_udp_send']'
          2019-11-18 10:16:02 INFO Main plugin 'network': Metadata logic_paramlist = '['nw', 'nw_acl', 'nw_udp_listen', 'nw_tcp_listen']'
          2019-11-18 10:16:02 INFO Main plugin 'network': Metadata plugin_functionlist = '['udp']'
          2019-11-18 10:16:02 INFO Main plugin 'network': Metadata get_plugin_function_defstrings -> '['udp(host, port, data)']'
          2019-11-18 10:16:02 INFO Main plugin 'network': Metadata get_plugin_function_defstrings -> '['udp(host:str, port:int, data:foo)']'
          2019-11-18 10:16:02 INFO Main plugin 'network': Metadata get_plugin_function_defstrings -> '['udp(host, port, data)']'
          2019-11-18 10:16:02 INFO Main plugin 'network': Metadata get_plugin_function_defstrings -> '['udp(host:str, port:int, data:foo)']'
          2019-11-18 10:16:02 INFO Main plugin 'network': has no item-struct definitions in metadata
          2019-11-18 10:16:02 INFO Main Loading '/usr/local/smarthome/plugins/network/locale.yaml' to 'dict'
          2019-11-18 10:16:02 INFO Main plugin 'network': value not found in plugin configuration file for parameter 'ip' -> using default value '0.0.0.0' instead
          2019-11-18 10:16:02 INFO Main plugin 'network': value not found in plugin configuration file for parameter 'port' -> using default value '2727' instead
          2019-11-18 10:16:02 INFO Main plugin 'network': value not found in plugin configuration file for parameter 'udp' -> using default value 'no' instead
          2019-11-18 10:16:02 INFO Main plugin 'network': value not found in plugin configuration file for parameter 'http' -> using default value 'no' instead
          2019-11-18 10:16:02 INFO Main plugin 'network': value not found in plugin configuration file for parameter 'udp_acl' -> using default value '['*']' instead
          2019-11-18 10:16:02 INFO Main plugin 'network': value not found in plugin configuration file for parameter 'http_acl' -> using default value '['*']' instead
          2019-11-18 10:16:02 INFO Main Initialized plugin 'network' from from section 'nw'
          2019-11-18 10:16:03 INFO Main Loading '/usr/local/smarthome/plugins/webservices/plugin.yaml' to 'OrderedDict'
          2019-11-18 10:16:03 INFO Main plugin 'webservices': Metadata paramlist = '['mode']'
          2019-11-18 10:16:03 INFO Main plugin 'webservices': Metadata itemdeflist = '['webservices_set', 'webservices_data']'
          2019-11-18 10:16:03 INFO Main Loading '/usr/local/smarthome/plugins/webservices/locale.yaml' to 'dict'
          2019-11-18 10:16:03 INFO Main Plugin 'WebServices': Loaded plugin translations = {'Alle Items': {'de': '=', 'en': 'All items'}, 'Tipp: Durch Anhängen des Parameters "?mode=val|full" kann erzwungen werden, dass das Item / Itemset mit vollen oder einfachen Daten zurückgeliefert wird. Ansonsten greift die Konfiguration im Item via webservices_data.': {'de': '=', 'en': 'Hint: By adding the parameter "?mode=val|full" to the URL, it can be enforced that the Item / Itemset is returned with full / simple data. Otherwise the configuration within the item (webservices_data) applies.'}, 'Die folgenden Items und Sets können über die REST und die Simple WebService API gelesen und (bei str, num und bool Items) verändert werden': {'de': '=', 'en': 'The following items and sets can be read through the REST and the Simple WebService API. Values of str, num, and bool items can also be changed.'}, 'Modus': {'de': '=', 'en': 'Mode'}, 'Alle zugreifbaren Items': {'de': '=', 'en': 'All Accessible Items'}, 'Nur in Sets definierte Items': {'de': '=', 'en': 'Only items defined in sets'}}
          2019-11-18 10:16:03 INFO Main Module http: Registering service 'rest' of plugin 'webservices' from pluginclass 'WebServices' instance ''
          2019-11-18 10:16:03 INFO Main - conf dict: '{'/static': {'tools.staticdir.on': True, 'tools.staticdir.dir': 'static'}, '/': {'tools.staticdir.root': '/usr/local/smarthome/plugins/webservices/webif', 'tools.auth_basic.on': False, 'tools.auth_basic.checkpassword': <bound method Http.validate_service_password of <modules.http.Http object at 0x75ca21d0>>, 'tools.auth_basic.realm': 'shng_http_service'}}'
          2019-11-18 10:16:03 INFO Main self._services['rest'] = {'Mount': '/rest', 'Pluginname': 'webservices', 'Instance': '', 'Pluginclass': 'WebServices', 'Description': 'WebService Plugin für SmartHomeNG (REST)', 'Conf': {'/static': {'tools.staticdir.on': True, 'tools.staticdir.dir': 'static'}, '/': {'tools.staticdir.root': '/usr/local/smarthome/plugins/webservices/webif', 'tools.auth_basic.on': False, 'tools.auth_basic.checkpassword': <bound method Http.validate_service_password of <modules.http.Http object at 0x75ca21d0>>, 'tools.auth_basic.realm': 'shng_http_service'}}, 'Servicename': 'rest'}
          2019-11-18 10:16:03 INFO Main Module http: Registering service 'ws' of plugin 'webservices' from pluginclass 'WebServices' instance ''
          2019-11-18 10:16:03 INFO Main - conf dict: '{'/static': {'tools.staticdir.on': True, 'tools.staticdir.dir': 'static'}, '/': {'tools.staticdir.root': '/usr/local/smarthome/plugins/webservices/webif', 'tools.auth_basic.on': False, 'tools.auth_basic.checkpassword': <bound method Http.validate_service_password of <modules.http.Http object at 0x75ca21d0>>, 'request.dispatch': <function VirtualHost.<locals>.vhost_dispatch at 0x67e13078>, 'tools.auth_basic.realm': 'shng_http_service'}}'
          2019-11-18 10:16:03 INFO Main self._services['ws'] = {'Mount': '/ws', 'Pluginname': 'webservices', 'Instance': '', 'Pluginclass': 'WebServices', 'Description': 'Webservice-Plugin für SmartHomeNG (simple)', 'Conf': {'/static': {'tools.staticdir.on': True, 'tools.staticdir.dir': 'static'}, '/': {'tools.staticdir.root': '/usr/local/smarthome/plugins/webservices/webif', 'tools.auth_basic.on': False, 'tools.auth_basic.checkpassword': <bound method Http.validate_service_password of <modules.http.Http object at 0x75ca21d0>>, 'request.dispatch': <function VirtualHost.<locals>.vhost_dispatch at 0x67e13078>, 'tools.auth_basic.realm': 'shng_http_service'}}, 'Servicename': 'ws'}
          2019-11-18 10:16:03 INFO Main Module http: Registering webinterface 'webservices' of plugin 'webservices' from pluginclass 'WebServices' instance ''
          2019-11-18 10:16:03 INFO Main - conf dict: '{'/gstatic': {'tools.staticdir.on': True, 'tools.staticdir.dir': '/usr/local/smarthome/modules/http/webif/gstatic'}, '/static': {'tools.staticdir.on': True, 'tools.staticdir.dir': 'static'}, '/': {'tools.staticdir.root': '/usr/local/smarthome/plugins/webservices/webif', 'tools.auth_basic.on': False, 'tools.auth_basic.checkpassword': <bound method Http.validate_password of <modules.http.Http object at 0x75ca21d0>>, 'request.dispatch': <function VirtualHost.<locals>.vhost_dispatch at 0x67e13198>, 'tools.auth_basic.realm': 'shng_http_webif'}}'
          2019-11-18 10:16:03 INFO Main self._applications['webservices'] = {'Mount': '/webservices', 'Pluginname': 'webservices', 'Instance': '', 'Pluginclass': 'WebServices', 'Description': 'Webservice-Plugin für SmartHomeNG (Frontend)', 'Webifname': 'webservices', 'Conf': {'/gstatic': {'tools.staticdir.on': True, 'tools.staticdir.dir': '/usr/local/smarthome/modules/http/webif/gstatic'}, '/static': {'tools.staticdir.on': True, 'tools.staticdir.dir': 'static'}, '/': {'tools.staticdir.root': '/usr/local/smarthome/plugins/webservices/webif', 'tools.auth_basic.on': False, 'tools.auth_basic.checkpassword': <bound method Http.validate_password of <modules.http.Http object at 0x75ca21d0>>, 'request.dispatch': <function VirtualHost.<locals>.vhost_dispatch at 0x67e13198>, 'tools.auth_basic.realm': 'shng_http_webif'}}}
          2019-11-18 10:16:03 INFO Main Initialized plugin 'webservices' from from section 'WebServices'
          2019-11-18 10:16:03 INFO Main Loading '/usr/local/smarthome/plugins/nut/plugin.yaml' to 'OrderedDict'
          2019-11-18 10:16:03 INFO Main plugin 'nut': Metadata paramlist = '['ups', 'cycle', 'host', 'port', 'timeout']'
          2019-11-18 10:16:03 INFO Main plugin 'nut': Metadata itemdeflist = '['nut_var']'
          2019-11-18 10:16:03 INFO Main Section nut (plugin_name None) is disabled - Plugin not loaded
          2019-11-18 10:16:05 DEBUG Main Read 25 on Register: 5000
          2019-11-18 10:16:05 INFO Main device: aerosilent exos
          2019-11-18 10:16:05 DEBUG Main Opened command file <codecs.StreamReaderWriter object at 0x67e0e1f0>
          2019-11-18 10:16:05 INFO Main Loading '/usr/local/smarthome/plugins/kodi/plugin.yaml' to 'OrderedDict'
          2019-11-18 10:16:06 INFO Main plugin 'kodi': Metadata paramlist = '['host', 'port', 'instance', 'autoreconnect', 'connect_retries', 'connect_cycle', 'send_retries']'
          2019-11-18 10:16:06 INFO Main plugin 'kodi': Metadata itemdeflist = '['kodi_item']'
          2019-11-18 10:16:06 INFO Main plugin 'kodi': Metadata plugin_functionlist = '['notify']'
          2019-11-18 10:16:06 INFO Main plugin 'kodi': Metadata get_plugin_function_defstrings -> '['notify(title, message, image, display_time)']'
          2019-11-18 10:16:06 INFO Main plugin 'kodi': Metadata get_plugin_function_defstrings -> '['notify(title:str, message:str, image:str, display_time:int)']'
          2019-11-18 10:16:06 INFO Main plugin 'kodi': Metadata get_plugin_function_defstrings -> '['notify(title, message, image=None, display_time=10000)']'
          2019-11-18 10:16:06 INFO Main plugin 'kodi': Metadata get_plugin_function_defstrings -> '['notify(title:str, message:str, image:str=None, display_time:int=10000)']'
          2019-11-18 10:16:06 INFO Main plugin 'kodi': Metadata itemstructlist = '[]'
          2019-11-18 10:16:06 INFO Main add_struct_definition: struct 'kodi.query' = OrderedDict([('name', 'Vorlage-Struktur für Kodi Infos, die nicht aktiv verämndert werden können.'), ('state', OrderedDict([('kodi_item@instance', 'state'), ('type', 'str'), ('visu_acl', 'ro')])), ('title', OrderedDict([('kodi_item@instance', 'title'), ('type', 'str'), ('visu_acl', 'ro')])), ('media', OrderedDict([('kodi_item@instance', 'media'), ('type', 'str'), ('visu_acl', 'ro')])), ('player', OrderedDict([('kodi_item@instance', 'player'), ('type', 'num'), ('visu_acl', 'rw'), ('enforce_updates', True)]))])
          2019-11-18 10:16:06 INFO Main add_struct_definition: struct 'kodi.control' = OrderedDict([('name', 'Vorlage-Struktur für Kodi Befehle zum Steuern'), ('mute', OrderedDict([('kodi_item@instance', 'mute'), ('type', 'bool'), ('visu_acl', 'rw'), ('enforce_updates', True)])), ('volume', OrderedDict([('kodi_item@instance', 'volume'), ('type', 'num'), ('visu_acl', 'rw'), ('enforce_updates', True)])), ('speed', OrderedDict([('kodi_item@instance', 'speed'), ('type', 'num'), ('visu_acl', 'rw'), ('enforce_updates', True)])), ('on_off', OrderedDict([('kodi_item@instance', 'on_off'), ('enforce_updates', True), ('type', 'bool'), ('visu_acl', 'rw')])), ('input', OrderedDict([('kodi_item@instance', 'input'), ('type', 'str'), ('visu_acl', 'rw'), ('enforce_updates', True)])), ('favourites', OrderedDict([('kodi_item@instance', 'favourites'), ('type', 'str'), ('visu_acl', 'rw'), ('enforce_updates', True)])), ('macro', OrderedDict([('kodi_item@instance', 'macro'), ('type', 'str'), ('visu_acl', 'rw'), ('enforce_updates', True)])), ('audiostream', OrderedDict([('kodi_item@instance', 'audiostream'), ('type', 'foo'), ('visu_acl', 'rw'), ('enforce_updates', True)])), ('subtitle', OrderedDict([('kodi_item@instance', 'subtitle'), ('type', 'list'), ('visu_acl', 'rw'), ('enforce_updates', True)])), ('seek', OrderedDict([('kodi_item@instance', 'seek'), ('type', 'num'), ('visu_acl', 'rw'), ('enforce_updates', True)])), ('home', OrderedDict([('kodi_item@instance', 'home'), ('type', 'bool'), ('visu_acl', 'rw'), ('enforce_updates', True)])), ('stop', OrderedDict([('type', 'bool'), ('eval', "sh...input('stop')"), ('enforce_updates', True)])), ('play', OrderedDict([('type', 'bool'), ('eval', "sh...input('play')"), ('enforce_updates', True)])), ('pause', OrderedDict([('type', 'bool'), ('eval', "sh...input('pause')"), ('enforce_updates', True)])), ('previous', OrderedDict([('type', 'bool'), ('eval', "sh...input('skipprevious')"), ('enforce_updates', True)])), ('next', OrderedDict([('type', 'bool'), ('eval', "sh...input('skipnext')"), ('enforce_updates', True)])), ('select', OrderedDict([('type', 'bool'), ('eval', "sh...input('select')"), ('enforce_updates', True)])), ('contextmenu', OrderedDict([('type', 'str'), ('eval', "sh...input('contextmenu')"), ('enforce_updates', True)]))])
          2019-11-18 10:16:06 INFO Main Loading '/usr/local/smarthome/plugins/kodi/locale.yaml' to 'dict'
          2019-11-18 10:16:06 INFO Main plugin 'kodi': value not found in plugin configuration file for parameter 'port' -> using default value '9090' instead
          2019-11-18 10:16:06 INFO Main plugin 'kodi': value not found in plugin configuration file for parameter 'instance' -> using default value '' instead
          2019-11-18 10:16:06 INFO Main plugin 'kodi': value not found in plugin configuration file for parameter 'connect_retries' -> using default value '10' instead
          2019-11-18 10:16:06 INFO Main plugin 'kodi': value not found in plugin configuration file for parameter 'connect_cycle' -> using default value '5' instead
          2019-11-18 10:16:06 INFO Main plugin 'kodi': value not found in plugin configuration file for parameter 'send_retries' -> using default value '5' instead
          2019-11-18 10:16:06 INFO Main Init Kodi Plugin
          2019-11-18 10:16:06 INFO Main Initializing a connection to 192.168.1.81 on TCP port 9090 with autoreconnect
          2019-11-18 10:16:06 DEBUG Main 192.168.1.81 is a valid IP address
          2019-11-18 10:16:06 INFO Main Initialized plugin 'kodi' instance 'wohnzimmer' from from section 'kodi'
          2019-11-18 10:16:06 INFO Main Loading '/usr/local/smarthome/plugins/kodi/plugin.yaml' to 'OrderedDict'
          2019-11-18 10:16:06 INFO Main plugin 'kodi': Metadata paramlist = '['host', 'port', 'instance', 'autoreconnect', 'connect_retries', 'connect_cycle', 'send_retries']'
          2019-11-18 10:16:06 INFO Main plugin 'kodi': Metadata itemdeflist = '['kodi_item']'
          2019-11-18 10:16:06 INFO Main plugin 'kodi': Metadata plugin_functionlist = '['notify']'
          2019-11-18 10:16:06 INFO Main plugin 'kodi': Metadata get_plugin_function_defstrings -> '['notify(title, message, image, display_time)']'
          2019-11-18 10:16:06 INFO Main plugin 'kodi': Metadata get_plugin_function_defstrings -> '['notify(title:str, message:str, image:str, display_time:int)']'
          2019-11-18 10:16:06 INFO Main plugin 'kodi': Metadata get_plugin_function_defstrings -> '['notify(title, message, image=None, display_time=10000)']'
          2019-11-18 10:16:06 INFO Main plugin 'kodi': Metadata get_plugin_function_defstrings -> '['notify(title:str, message:str, image:str=None, display_time:int=10000)']'
          2019-11-18 10:16:06 INFO Main plugin 'kodi': Metadata itemstructlist = '[]'
          2019-11-18 10:16:06 INFO Main add_struct_definition: struct 'kodi.query' = OrderedDict([('name', 'Vorlage-Struktur für Kodi Infos, die nicht aktiv verämndert werden können.'), ('state', OrderedDict([('kodi_item@instance', 'state'), ('type', 'str'), ('visu_acl', 'ro')])), ('title', OrderedDict([('kodi_item@instance', 'title'), ('type', 'str'), ('visu_acl', 'ro')])), ('media', OrderedDict([('kodi_item@instance', 'media'), ('type', 'str'), ('visu_acl', 'ro')])), ('player', OrderedDict([('kodi_item@instance', 'player'), ('type', 'num'), ('visu_acl', 'rw'), ('enforce_updates', True)]))])
          2019-11-18 10:16:06 INFO Main add_struct_definition: struct 'kodi.control' = OrderedDict([('name', 'Vorlage-Struktur für Kodi Befehle zum Steuern'), ('mute', OrderedDict([('kodi_item@instance', 'mute'), ('type', 'bool'), ('visu_acl', 'rw'), ('enforce_updates', True)])), ('volume', OrderedDict([('kodi_item@instance', 'volume'), ('type', 'num'), ('visu_acl', 'rw'), ('enforce_updates', True)])), ('speed', OrderedDict([('kodi_item@instance', 'speed'), ('type', 'num'), ('visu_acl', 'rw'), ('enforce_updates', True)])), ('on_off', OrderedDict([('kodi_item@instance', 'on_off'), ('enforce_updates', True), ('type', 'bool'), ('visu_acl', 'rw')])), ('input', OrderedDict([('kodi_item@instance', 'input'), ('type', 'str'), ('visu_acl', 'rw'), ('enforce_updates', True)])), ('favourites', OrderedDict([('kodi_item@instance', 'favourites'), ('type', 'str'), ('visu_acl', 'rw'), ('enforce_updates', True)])), ('macro', OrderedDict([('kodi_item@instance', 'macro'), ('type', 'str'), ('visu_acl', 'rw'), ('enforce_updates', True)])), ('audiostream', OrderedDict([('kodi_item@instance', 'audiostream'), ('type', 'foo'), ('visu_acl', 'rw'), ('enforce_updates', True)])), ('subtitle', OrderedDict([('kodi_item@instance', 'subtitle'), ('type', 'list'), ('visu_acl', 'rw'), ('enforce_updates', True)])), ('seek', OrderedDict([('kodi_item@instance', 'seek'), ('type', 'num'), ('visu_acl', 'rw'), ('enforce_updates', True)])), ('home', OrderedDict([('kodi_item@instance', 'home'), ('type', 'bool'), ('visu_acl', 'rw'), ('enforce_updates', True)])), ('stop', OrderedDict([('type', 'bool'), ('eval', "sh...input('stop')"), ('enforce_updates', True)])), ('play', OrderedDict([('type', 'bool'), ('eval', "sh...input('play')"), ('enforce_updates', True)])), ('pause', OrderedDict([('type', 'bool'), ('eval', "sh...input('pause')"), ('enforce_updates', True)])), ('previous', OrderedDict([('type', 'bool'), ('eval', "sh...input('skipprevious')"), ('enforce_updates', True)])), ('next', OrderedDict([('type', 'bool'), ('eval', "sh...input('skipnext')"), ('enforce_updates', True)])), ('select', OrderedDict([('type', 'bool'), ('eval', "sh...input('select')"), ('enforce_updates', True)])), ('contextmenu', OrderedDict([('type', 'str'), ('eval', "sh...input('contextmenu')"), ('enforce_updates', True)]))])
          2019-11-18 10:16:06 INFO Main Loading '/usr/local/smarthome/plugins/kodi/locale.yaml' to 'dict'
          2019-11-18 10:16:06 INFO Main plugin 'kodi': value not found in plugin configuration file for parameter 'port' -> using default value '9090' instead
          2019-11-18 10:16:06 INFO Main plugin 'kodi': value not found in plugin configuration file for parameter 'instance' -> using default value '' instead
          2019-11-18 10:16:06 INFO Main plugin 'kodi': value not found in plugin configuration file for parameter 'connect_retries' -> using default value '10' instead
          2019-11-18 10:16:06 INFO Main plugin 'kodi': value not found in plugin configuration file for parameter 'connect_cycle' -> using default value '5' instead
          2019-11-18 10:16:06 INFO Main plugin 'kodi': value not found in plugin configuration file for parameter 'send_retries' -> using default value '5' instead
          2019-11-18 10:16:06 INFO Main Init Kodi Plugin
          2019-11-18 10:16:06 INFO Main Initializing a connection to 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:16:06 DEBUG Main 192.168.1.82 is a valid IP address
          2019-11-18 10:16:06 INFO Main Initialized plugin 'kodi' instance 'schlafzimmer' from from section 'kodiSZ'
          2019-11-18 10:16:06 INFO Main Load of plugins finished
          2019-11-18 10:16:06 INFO Main Start initialization of items
          2019-11-18 10:16:06 INFO Main Loading '/usr/local/smarthome/etc/struct.yaml' to 'OrderedDict'
          2019-11-18 10:16:07 INFO Main add_struct_definition: struct 'dimmervorlage' = OrderedDict([('name', 'vorlage'), ('sv_widget', "{{ device.dimmer('', 'item.name', 'item.schalten', 'item.dimmen', 0, 100) }}<br/> {{ basic.flip('', 'item.sperren', 'sperren', 'freigeben') }}"), ('schalten', OrderedDict([('type', 'bool'), ('knx_dpt', 1), ('knx_send', '1/0/5'), ('knx_cache', '1/0/8'), ('visu_acl', 'rw'), ('enforce_updates', 'yes')])), ('dimmen', OrderedDict([('type', 'num'), ('knx_dpt', 5.001), ('knx_cache', '1/0/9'), ('knx_send', '1/0/7'), ('visu_acl', 'rw')])), ('sperren', OrderedDict([('type', 'bool'), ('knx_dpt', 1), ('knx_cache', '6/0/2'), ('knx_send', '6/0/2'), ('visu_acl', 'rw')]))])
          2019-11-18 10:16:07 INFO Main add_struct_definition: struct 'anwesenheit' = OrderedDict([('type', 'bool'), ('knx_dpt', 1), ('knx_listen', '0/0/0'), ('visu_acl', 'r')])
          2019-11-18 10:16:07 INFO Main add_struct_definition: struct 'rollladen' = OrderedDict([('name', 'Rollladen Vorlage'), ('sv_widget', "{{ device.shutter ('', 'item.name', 'item.move', 'item.stop', 'item.absolut', '', '', '', '0', '100') }}<br/>{{ basic.flip('', 'item.sperren', 'sperren', 'freigeben') }}"), ('move', OrderedDict([('type', 'bool'), ('knx_dpt', 1), ('knx_send', '3/2/40'), ('visu_acl', 'rw'), ('enforce_updates', 'yes')])), ('stop', OrderedDict([('type', 'bool'), ('knx_dpt', 1), ('knx_send', '3/2/41'), ('visu_acl', 'rw'), ('enforce_updates', 'yes')])), ('absolut', OrderedDict([('type', 'num'), ('knx_dpt', 5.001), ('knx_send', '3/2/46'), ('knx_cache', '3/2/43'), ('visu_acl', 'rw'), ('cache', 'yes')])), ('sperren', OrderedDict([('type', 'bool'), ('knx_dpt', 1), ('knx_send', '3/2/42'), ('knx_cache', '3/2/42'), ('visu_acl', 'rw'), ('enforce_updates', 'yes')]))])
          2019-11-18 10:16:07 INFO Main add_struct_definition: struct 'zaehlerstaende' = OrderedDict([('letzteFuenfzehn', OrderedDict([('type', 'num'), ('crontab', '0-59 * * * = 1'), ('eval', "sh...db('max', '15i')-sh...db('min', '15i')"), ('enforce_updates', 'yes')])), ('Fuenfzehn', OrderedDict([('type', 'num'), ('crontab', '0,15,30,45 * * * = 1'), ('eval', "sh...db('max', '15i')-sh...db('min', '15i')"), ('enforce_updates', 'yes')])), ('letzteStunde', OrderedDict([('type', 'num'), ('crontab', '0-59 * * * = 1'), ('eval', "sh...db('max', '1h')-sh...db('min', '1h')"), ('enforce_updates', 'yes')])), ('Stunde', OrderedDict([('type', 'num'), ('crontab', '0 * * * = 1'), ('eval', "sh...db('max', '1h')-sh...db('min', '1h')"), ('enforce_updates', 'yes')])), ('Tag', OrderedDict([('type', 'num'), ('crontab', '0 0 * * = 1'), ('eval', "sh...db('max', '24h')-sh...db('min', '24h')"), ('enforce_updates', 'yes'), ('database@mysqldb', 'init')])), ('Woche', OrderedDict([('type', 'num'), ('crontab', '0 0 * * = 1'), ('eval', "sh...db('max', '1w')-sh...db('min', '1w')"), ('enforce_updates', 'yes'), ('database@mysqldb', 'init')])), ('Monat', OrderedDict([('type', 'num'), ('crontab', '0 0 1 * = 1'), ('eval', "sh...db('max', '1m')-sh...db('min', '1m')"), ('enforce_updates', 'yes'), ('database@mysqldb', 'init')]))])
          2019-11-18 10:16:07 WARNING Main load_itemdefinitions(): For testing the joined item structs are saved to /usr/local/smarthome/etc/structs_joined.yaml
          2019-11-18 10:16:07 INFO Main Saving 'OrderedDict' to '/usr/local/smarthome/etc/structs_joined.yaml'
          2019-11-18 10:16:07 INFO Main parse_itemsdir: Beginning to parse items directory /usr/local/smarthome/lib/env/
          2019-11-18 10:16:07 INFO Main Loading '/usr/local/smarthome/lib/env/core.yaml' to 'OrderedDict'
          2019-11-18 10:16:07 INFO Main Loading '/usr/local/smarthome/lib/env/location.yaml' to 'OrderedDict'
          2019-11-18 10:16:07 INFO Main parse_itemsdir: skipping logic definition file = /usr/local/smarthome/lib/env/logic.yaml
          2019-11-18 10:16:07 INFO Main Loading '/usr/local/smarthome/lib/env/system.yaml' to 'OrderedDict'
          2019-11-18 10:16:07 INFO Main parse_itemsdir: Finished parsing items directory /usr/local/smarthome/lib/env/
          2019-11-18 10:16:07 INFO Main parse_itemsdir: Beginning to parse items directory /usr/local/smarthome/items/
          2019-11-18 10:16:07 INFO Main Loading '/usr/local/smarthome/items/0Licht.yaml' to 'OrderedDict'
          2019-11-18 10:16:09 INFO Main add_struct_to_template: 'struct' 'dimmervorlage' reference found in item 'EG.Bad.Licht.Decke', instance ''
          2019-11-18 10:16:09 INFO Main add_struct_to_template: 'struct' 'anwesenheit' reference found in item 'EG.Bad.Anwesenheit', instance ''
          2019-11-18 10:16:09 INFO Main add_struct_to_template: 'struct' 'dimmervorlage' reference found in item 'EG.Gang.Licht.Decke', instance ''
          2019-11-18 10:16:09 INFO Main add_struct_to_template: 'struct' 'dimmervorlage' reference found in item 'EG.Gang.Licht.Stiege', instance ''
          2019-11-18 10:16:09 INFO Main add_struct_to_template: 'struct' 'anwesenheit' reference found in item 'EG.Gang.Anwesenheit', instance ''
          2019-11-18 10:16:09 INFO Main add_struct_to_template: 'struct' 'dimmervorlage' reference found in item 'EG.WC.Licht.Decke', instance ''
          2019-11-18 10:16:09 INFO Main add_struct_to_template: 'struct' 'anwesenheit' reference found in item 'EG.WC.Anwesenheit', instance ''
          2019-11-18 10:16:09 INFO Main add_struct_to_template: 'struct' 'dimmervorlage' reference found in item 'EG.Sabi_Buero.Licht.Decke', instance ''
          2019-11-18 10:16:09 INFO Main add_struct_to_template: 'struct' 'anwesenheit' reference found in item 'EG.Sabi_Buero.Anwesenheit', instance ''
          2019-11-18 10:16:09 INFO Main add_struct_to_template: 'struct' 'dimmervorlage' reference found in item 'EG.Abstellraum.Licht.Decke', instance ''
          2019-11-18 10:16:09 INFO Main add_struct_to_template: 'struct' 'anwesenheit' reference found in item 'EG.Abstellraum.Anwesenheit', instance ''
          2019-11-18 10:16:09 INFO Main add_struct_to_template: 'struct' 'dimmervorlage' reference found in item 'EG.Kueche_Esszimmer.Licht.Decke', instance ''
          2019-11-18 10:16:09 INFO Main add_struct_to_template: 'struct' 'dimmervorlage' reference found in item 'EG.Kueche_Esszimmer.Licht.Kuechenzeile', instance ''
          2019-11-18 10:16:09 INFO Main add_struct_to_template: 'struct' 'dimmervorlage' reference found in item 'EG.Kueche_Esszimmer.Licht.Esszimmerlampe', instance ''
          2019-11-18 10:16:09 INFO Main add_struct_to_template: 'struct' 'anwesenheit' reference found in item 'EG.Kueche_Esszimmer.Anwesenheit', instance ''
          2019-11-18 10:16:09 INFO Main add_struct_to_template: 'struct' 'anwesenheit' reference found in item 'EG.Wohnzimmer.Anwesenheit', instance ''
          2019-11-18 10:16:09 INFO Main add_struct_to_template: 'struct' 'dimmervorlage' reference found in item 'EG.Markus_Buero.Licht.Decke', instance ''
          2019-11-18 10:16:09 INFO Main add_struct_to_template: 'struct' 'anwesenheit' reference found in item 'EG.Markus_Buero.Anwesenheit', instance ''
          2019-11-18 10:16:09 INFO Main add_struct_to_template: 'struct' 'dimmervorlage' reference found in item 'OG.Kizi_Nord.Licht.Decke', instance ''
          2019-11-18 10:16:09 INFO Main add_struct_to_template: 'struct' 'anwesenheit' reference found in item 'OG.Kizi_Nord.Anwesenheit', instance ''
          2019-11-18 10:16:09 INFO Main add_struct_to_template: 'struct' 'anwesenheit' reference found in item 'OG.Gang.Anwesenheit_Nord', instance ''
          2019-11-18 10:16:09 INFO Main add_struct_to_template: 'struct' 'anwesenheit' reference found in item 'OG.Gang.Anwesenheit_Sued', instance ''
          2019-11-18 10:16:09 INFO Main add_struct_to_template: 'struct' 'dimmervorlage' reference found in item 'OG.WC.Licht.Decke', instance ''
          2019-11-18 10:16:09 INFO Main add_struct_to_template: 'struct' 'anwesenheit' reference found in item 'OG.WC.Anwesenheit', instance ''
          2019-11-18 10:16:09 INFO Main add_struct_to_template: 'struct' 'dimmervorlage' reference found in item 'OG.Bad.Licht.Decke', instance ''
          2019-11-18 10:16:09 INFO Main add_struct_to_template: 'struct' 'anwesenheit' reference found in item 'OG.Bad.Anwesenheit', instance ''
          2019-11-18 10:16:09 INFO Main add_struct_to_template: 'struct' 'dimmervorlage' reference found in item 'OG.Schrankraum.Licht.Decke', instance ''
          2019-11-18 10:16:09 INFO Main add_struct_to_template: 'struct' 'anwesenheit' reference found in item 'OG.Schrankraum.Anwesenheit', instance ''
          2019-11-18 10:16:09 INFO Main add_struct_to_template: 'struct' 'dimmervorlage' reference found in item 'OG.Schlafzimmer.Licht.Decke', instance ''
          2019-11-18 10:16:09 INFO Main add_struct_to_template: 'struct' 'anwesenheit' reference found in item 'OG.Schlafzimmer.Anwesenheit', instance ''
          2019-11-18 10:16:09 INFO Main add_struct_to_template: 'struct' 'dimmervorlage' reference found in item 'OG.Kizi_Sued.Licht.Decke', instance ''
          2019-11-18 10:16:09 INFO Main add_struct_to_template: 'struct' 'anwesenheit' reference found in item 'OG.Kizi_Sued.Anwesenheit', instance ''
          2019-11-18 10:16:09 INFO Main Loading '/usr/local/smarthome/items/0Visu.yaml' to 'OrderedDict'
          2019-11-18 10:16:11 INFO Main Loading '/usr/local/smarthome/items/Kodi.yaml' to 'OrderedDict'
          2019-11-18 10:16:21 DEBUG Main Registering item: Sonder.Kodi.wohnzimmer.query.state
          2019-11-18 10:16:21 DEBUG Main Registering item: Sonder.Kodi.wohnzimmer.query.title
          2019-11-18 10:16:21 DEBUG Main Registering item: Sonder.Kodi.wohnzimmer.query.media
          2019-11-18 10:16:21 DEBUG Main Registering item: Sonder.Kodi.wohnzimmer.query.player
          2019-11-18 10:16:21 DEBUG Main Registering item: Sonder.Kodi.wohnzimmer.control.mute
          2019-11-18 10:16:21 DEBUG Main Registering item: Sonder.Kodi.wohnzimmer.control.volume
          2019-11-18 10:16:21 DEBUG Main Registering item: Sonder.Kodi.wohnzimmer.control.speed
          2019-11-18 10:16:21 DEBUG Main Registering item: Sonder.Kodi.wohnzimmer.control.on_off
          2019-11-18 10:16:21 DEBUG Main Registering item: Sonder.Kodi.wohnzimmer.control.input
          2019-11-18 10:16:21 DEBUG Main Registering item: Sonder.Kodi.wohnzimmer.control.favourites
          2019-11-18 10:16:21 DEBUG Main Registering item: Sonder.Kodi.wohnzimmer.control.macro
          2019-11-18 10:16:21 DEBUG Main Registering item: Sonder.Kodi.wohnzimmer.control.audiostream
          2019-11-18 10:16:21 DEBUG Main Registering item: Sonder.Kodi.wohnzimmer.control.subtitle
          2019-11-18 10:16:21 DEBUG Main Registering item: Sonder.Kodi.wohnzimmer.control.seek
          2019-11-18 10:16:21 DEBUG Main Registering item: Sonder.Kodi.wohnzimmer.control.home
          2019-11-18 10:16:21 INFO Main Sonder.Kodi.wohnzimmer.control.stop.get_absolutepath('..input'): Result = 'Sonder.Kodi.wohnzimmer.control.input' (for attribute 'eval')
          2019-11-18 10:16:21 INFO Main Sonder.Kodi.wohnzimmer.control.play.get_absolutepath('..input'): Result = 'Sonder.Kodi.wohnzimmer.control.input' (for attribute 'eval')
          2019-11-18 10:16:21 INFO Main Sonder.Kodi.wohnzimmer.control.pause.get_absolutepath('..input'): Result = 'Sonder.Kodi.wohnzimmer.control.input' (for attribute 'eval')
          2019-11-18 10:16:21 INFO Main Sonder.Kodi.wohnzimmer.control.previous.get_absolutepath('..input'): Result = 'Sonder.Kodi.wohnzimmer.control.input' (for attribute 'eval')
          2019-11-18 10:16:21 INFO Main Sonder.Kodi.wohnzimmer.control.next.get_absolutepath('..input'): Result = 'Sonder.Kodi.wohnzimmer.control.input' (for attribute 'eval')
          2019-11-18 10:16:21 INFO Main Sonder.Kodi.wohnzimmer.control.select.get_absolutepath('..input'): Result = 'Sonder.Kodi.wohnzimmer.control.input' (for attribute 'eval')
          2019-11-18 10:16:21 INFO Main Sonder.Kodi.wohnzimmer.control.contextmenu.get_absolutepath('..input'): Result = 'Sonder.Kodi.wohnzimmer.control.input' (for attribute 'eval')
          2019-11-18 10:16:21 ERROR Main Item Sonder.Kodi.wohnzimmer.notify.parameters.display_time: type 'int' unknown. Please use one of: scene, num, bool, str, foo, dict, list.
          2019-11-18 10:16:21 ERROR Main Item Sonder.Kodi.wohnzimmer.notify.parameters.display_time: problem creating:
          Traceback (most recent call last):
          File "/usr/local/smarthome/lib/item.py", line 683, in __init__
          child = Item(smarthome, self, child_path, value)
          File "/usr/local/smarthome/lib/item.py", line 712, in __init__
          raise AttributeError
          AttributeError
          2019-11-18 10:16:21 DEBUG Main Registering item: Sonder.Kodi.schlafzimmer.query.state
          2019-11-18 10:16:21 DEBUG Main Registering item: Sonder.Kodi.schlafzimmer.query.title
          2019-11-18 10:16:21 DEBUG Main Registering item: Sonder.Kodi.schlafzimmer.query.media
          2019-11-18 10:16:21 DEBUG Main Registering item: Sonder.Kodi.schlafzimmer.query.player
          2019-11-18 10:16:21 DEBUG Main Registering item: Sonder.Kodi.schlafzimmer.control.mute
          2019-11-18 10:16:21 DEBUG Main Registering item: Sonder.Kodi.schlafzimmer.control.volume
          2019-11-18 10:16:21 DEBUG Main Registering item: Sonder.Kodi.schlafzimmer.control.speed
          2019-11-18 10:16:21 DEBUG Main Registering item: Sonder.Kodi.schlafzimmer.control.on_off
          2019-11-18 10:16:21 DEBUG Main Registering item: Sonder.Kodi.schlafzimmer.control.input
          2019-11-18 10:16:21 DEBUG Main Registering item: Sonder.Kodi.schlafzimmer.control.favourites
          2019-11-18 10:16:21 DEBUG Main Registering item: Sonder.Kodi.schlafzimmer.control.macro
          2019-11-18 10:16:21 DEBUG Main Registering item: Sonder.Kodi.schlafzimmer.control.audiostream
          2019-11-18 10:16:21 DEBUG Main Registering item: Sonder.Kodi.schlafzimmer.control.subtitle
          2019-11-18 10:16:21 DEBUG Main Registering item: Sonder.Kodi.schlafzimmer.control.seek
          2019-11-18 10:16:21 DEBUG Main Registering item: Sonder.Kodi.schlafzimmer.control.home
          2019-11-18 10:16:21 INFO Main Sonder.Kodi.schlafzimmer.control.stop.get_absolutepath('..input'): Result = 'Sonder.Kodi.schlafzimmer.control.input' (for attribute 'eval')
          2019-11-18 10:16:21 INFO Main Sonder.Kodi.schlafzimmer.control.play.get_absolutepath('..input'): Result = 'Sonder.Kodi.schlafzimmer.control.input' (for attribute 'eval')
          2019-11-18 10:16:21 INFO Main Sonder.Kodi.schlafzimmer.control.pause.get_absolutepath('..input'): Result = 'Sonder.Kodi.schlafzimmer.control.input' (for attribute 'eval')
          2019-11-18 10:16:21 INFO Main Sonder.Kodi.schlafzimmer.control.previous.get_absolutepath('..input'): Result = 'Sonder.Kodi.schlafzimmer.control.input' (for attribute 'eval')
          2019-11-18 10:16:21 INFO Main Sonder.Kodi.schlafzimmer.control.next.get_absolutepath('..input'): Result = 'Sonder.Kodi.schlafzimmer.control.input' (for attribute 'eval')
          2019-11-18 10:16:21 INFO Main Sonder.Kodi.schlafzimmer.control.select.get_absolutepath('..input'): Result = 'Sonder.Kodi.schlafzimmer.control.input' (for attribute 'eval')
          2019-11-18 10:16:21 INFO Main Sonder.Kodi.schlafzimmer.control.contextmenu.get_absolutepath('..input'): Result = 'Sonder.Kodi.schlafzimmer.control.input' (for attribute 'eval')
          2019-11-18 10:16:21 ERROR Main Item Sonder.Kodi.schlafzimmer.notify.parameters.display_time: type 'int' unknown. Please use one of: scene, num, bool, str, foo, dict, list.
          2019-11-18 10:16:21 ERROR Main Item Sonder.Kodi.schlafzimmer.notify.parameters.display_time: problem creating:
          Traceback (most recent call last):
          File "/usr/local/smarthome/lib/item.py", line 683, in __init__
          child = Item(smarthome, self, child_path, value)
          File "/usr/local/smarthome/lib/item.py", line 712, in __init__
          raise AttributeError
          AttributeError
          2019-11-18 10:16:25 INFO CP Server Thread-13 AuthController.update(): /renew
          2019-11-18 10:16:26 INFO CP Server Thread-13 AuthController.renew_token(): remote.ip = 192.168.1.142, user = Autologin
          2019-11-18 10:16:26 INFO CP Server Thread-13 192.168.1.142 - - [18/Nov/2019:10:16:26] "PUT /api/authenticate/renew HTTP/1.1" 200 314 "http://192.168.1.20:8383/admin/items/config" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"
          2019-11-18 10:16:26 INFO Main Items initialization finished, 1051 items loaded
          2019-11-18 10:16:26 INFO Main Start Logics
          2019-11-18 10:16:26 INFO Main Loading '/usr/local/smarthome/lib/env/logic.yaml' to 'OrderedDict'
          2019-11-18 10:16:26 INFO Main Loading '/usr/local/smarthome/etc/logic.yaml' to 'OrderedDict'
          2019-11-18 10:16:26 INFO Main Start plugins
          2019-11-18 10:16:26 INFO smartvisu Loading '/usr/local/smarthome/etc/plugin.yaml' to 'OrderedDict'
          2019-11-18 10:16:26 INFO uzsu Adding sun update schedule for midnight
          2019-11-18 10:16:26 DEBUG kodi Plugin 'kodi': run method called
          2019-11-18 10:16:26 DEBUG kodi Kodi connection initialized by run
          2019-11-18 10:16:26 INFO Main Start of plugins finished
          2019-11-18 10:16:26 DEBUG kodiSZ Plugin 'kodi': run method called
          2019-11-18 10:16:26 DEBUG kodiSZ Kodi connection initialized by run
          2019-11-18 10:16:26 DEBUG TCP_Connect Starting connection cycle for 192.168.1.81
          2019-11-18 10:16:26 DEBUG TCP_Connect Starting connection cycle for 192.168.1.82
          2019-11-18 10:16:27 DEBUG TCP_Connect Connecting to 192.168.1.81 using IPv4 192.168.1.81 on TCP port 9090 with autoreconnect
          2019-11-18 10:16:27 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:16:27 INFO TCP_Connect Connected to 192.168.1.81 on TCP port 9090
          2019-11-18 10:16:27 DEBUG TCP_Connect Kodi running onconnect started by TCP_Connect. Connection: True. Selfcommands []
          2019-11-18 10:16:27 DEBUG TCP_Connect Sending command after connect: {'method': 'JSONRPC.Ping'}
          2019-11-18 10:16:27 DEBUG TCP_Connect Sending method JSONRPC.Ping. Alive: True
          2019-11-18 10:16:27 DEBUG TCP_Connect Command lock acquired
          2019-11-18 10:16:27 DEBUG TCP_Connect Sendcommands while sending: []
          2019-11-18 10:16:27 DEBUG TCP_Connect Sendcommands while sending: [{'jsonrpc': '2.0', 'method': 'JSONRPC.Ping', 'id': 'JSONRPC.Ping'}]
          2019-11-18 10:16:27 DEBUG TCP_Connect Kodi sending: {"jsonrpc":"2.0","method":"JSONRPC.Ping","id":"JSONRPC.Ping"}
          2019-11-18 10:16:27 DEBUG TCP_Connect Command lock released
          2019-11-18 10:16:27 DEBUG TCP_Connect Sending command after connect: {'params': {'properties': ['window', 'path', 'thumbnail', 'windowparameter']}, 'method': 'Favourites.GetFavourites'}
          2019-11-18 10:16:27 DEBUG TCP_Connect Sending method Favourites.GetFavourites. Alive: True
          2019-11-18 10:16:27 DEBUG TCP_Connect Command lock acquired
          2019-11-18 10:16:27 DEBUG TCP_Connect Sendcommands while sending: [{'jsonrpc': '2.0', 'method': 'JSONRPC.Ping', 'id': 'JSONRPC.Ping'}]
          2019-11-18 10:16:27 DEBUG TCP_Connect Sendcommands while sending: [{'jsonrpc': '2.0', 'method': 'JSONRPC.Ping', 'id': 'JSONRPC.Ping'}, {'params': {'properties': ['window', 'path', 'thumbnail', 'windowparameter']}, 'jsonrpc': '2.0', 'method': 'Favourites.GetFavourites', 'id': 'Favourites.GetFavourites'}]
          2019-11-18 10:16:27 DEBUG TCP_Connect Kodi sending: {"params":{"properties":["window","path","thumbnail","windowparameter"]},"jsonrpc":"2.0","method":"Favourites.GetFavourites","id":"Favourites.GetFavourites"}
          2019-11-18 10:16:27 DEBUG TCP_Connect Command lock released
          2019-11-18 10:16:27 DEBUG TCP_Connect Sending command after connect: {'method': 'Player.GetActivePlayers'}
          2019-11-18 10:16:27 DEBUG TCP_Connect Sending method Player.GetActivePlayers. Alive: True
          2019-11-18 10:16:27 DEBUG TCP_Connect Command lock acquired
          2019-11-18 10:16:27 DEBUG TCP_Connect Sendcommands while sending: [{'jsonrpc': '2.0', 'method': 'JSONRPC.Ping', 'id': 'JSONRPC.Ping'}, {'params': {'properties': ['window', 'path', 'thumbnail', 'windowparameter']}, 'jsonrpc': '2.0', 'method': 'Favourites.GetFavourites', 'id': 'Favourites.GetFavourites'}]
          2019-11-18 10:16:27 DEBUG TCP_Connect Sendcommands while sending: [{'jsonrpc': '2.0', 'method': 'JSONRPC.Ping', 'id': 'JSONRPC.Ping'}, {'params': {'properties': ['window', 'path', 'thumbnail', 'windowparameter']}, 'jsonrpc': '2.0', 'method': 'Favourites.GetFavourites', 'id': 'Favourites.GetFavourites'}, {'jsonrpc': '2.0', 'method': 'Player.GetActivePlayers', 'id': 'Player.GetActivePlayers'}]
          2019-11-18 10:16:27 DEBUG TCP_Connect Kodi sending: {"jsonrpc":"2.0","method":"Player.GetActivePlayers","id":"Player.GetActivePlayers"}
          2019-11-18 10:16:27 DEBUG TCP_Connect Command lock released
          2019-11-18 10:16:27 DEBUG TCP_Connect Sending command after connect: {'params': {'properties': ['volume', 'muted']}, 'method': 'Application.GetProperties'}
          2019-11-18 10:16:27 DEBUG TCP_Connect Sending method Application.GetProperties. Alive: True
          2019-11-18 10:16:27 DEBUG TCP_Connect Command lock acquired
          2019-11-18 10:16:27 DEBUG TCP_Connect Sendcommands while sending: [{'jsonrpc': '2.0', 'method': 'JSONRPC.Ping', 'id': 'JSONRPC.Ping'}, {'params': {'properties': ['window', 'path', 'thumbnail', 'windowparameter']}, 'jsonrpc': '2.0', 'method': 'Favourites.GetFavourites', 'id': 'Favourites.GetFavourites'}, {'jsonrpc': '2.0', 'method': 'Player.GetActivePlayers', 'id': 'Player.GetActivePlayers'}]
          2019-11-18 10:16:27 DEBUG TCP_Connect Sendcommands while sending: [{'jsonrpc': '2.0', 'method': 'JSONRPC.Ping', 'id': 'JSONRPC.Ping'}, {'params': {'properties': ['window', 'path', 'thumbnail', 'windowparameter']}, 'jsonrpc': '2.0', 'method': 'Favourites.GetFavourites', 'id': 'Favourites.GetFavourites'}, {'jsonrpc': '2.0', 'method': 'Player.GetActivePlayers', 'id': 'Player.GetActivePlayers'}, {'params': {'properties': ['volume', 'muted']}, 'jsonrpc': '2.0', 'method': 'Application.GetProperties', 'id': 'Application.GetProperties'}]
          2019-11-18 10:16:27 DEBUG TCP_Connect Kodi sending: {"params":{"properties":["volume","muted"]},"jsonrpc":"2.0","method":"Application.GetProperties","id":"Application.GetProperties"}
          2019-11-18 10:16:27 DEBUG TCP_Connect Command lock released
          2019-11-18 10:16:27 DEBUG TCP_Client_KodiTCPConnection Kodi receiving: {"id":"JSONRPC.Ping","jsonrpc":"2.0","result":"pong"}{"id":"Favourites.GetFavourites","jsonrpc":"2.0","result":{"favourites":null,"limits":{"end":0,"start":0,"total":0}}}{"id":"Player.GetActivePlayers","jsonrpc":"2.0","result":[{"playerid":1,"playertype":"internal","type":"video"}]}{"id":"Application.GetProperties","jsonrpc":"2.0","result":{"muted":false,"volume":100}}
          2019-11-18 10:16:27 DEBUG TCP_Client_KodiTCPConnection Kodi checking from multianswer: {'result': 'pong', 'id': 'JSONRPC.Ping', 'jsonrpc': '2.0'}
          2019-11-18 10:16:27 DEBUG TCP_Client_KodiTCPConnection Sent successfully {'jsonrpc': '2.0', 'method': 'JSONRPC.Ping', 'id': 'JSONRPC.Ping'}.
          2019-11-18 10:16:27 DEBUG TCP_Client_KodiTCPConnection Sendcommands after receiving: [{'params': {'properties': ['window', 'path', 'thumbnail', 'windowparameter']}, 'jsonrpc': '2.0', 'method': 'Favourites.GetFavourites', 'id': 'Favourites.GetFavourites'}, {'jsonrpc': '2.0', 'method': 'Player.GetActivePlayers', 'id': 'Player.GetActivePlayers'}, {'params': {'properties': ['volume', 'muted']}, 'jsonrpc': '2.0', 'method': 'Application.GetProperties', 'id': 'Application.GetProperties'}]
          2019-11-18 10:16:27 DEBUG TCP_Client_KodiTCPConnection Kodi checking from multianswer: {'result': {'limits': {'start': 0, 'total': 0, 'end': 0}, 'favourites': None}, 'id': 'Favourites.GetFavourites', 'jsonrpc': '2.0'}
          2019-11-18 10:16:27 DEBUG TCP_Client_KodiTCPConnection No favourites found.
          2019-11-18 10:16:27 DEBUG TCP_Client_KodiTCPConnection Sendcommands after receiving: [{'jsonrpc': '2.0', 'method': 'Player.GetActivePlayers', 'id': 'Player.GetActivePlayers'}, {'params': {'properties': ['volume', 'muted']}, 'jsonrpc': '2.0', 'method': 'Application.GetProperties', 'id': 'Application.GetProperties'}]
          2019-11-18 10:16:27 DEBUG TCP_Client_KodiTCPConnection Kodi checking from multianswer: {'result': [{'playertype': 'internal', 'type': 'video', 'playerid': 1}], 'id': 'Player.GetActivePlayers', 'jsonrpc': '2.0'}
          2019-11-18 10:16:27 DEBUG TCP_Client_KodiTCPConnection Getting player info for [{'playertype': 'internal', 'type': 'video', 'playerid': 1}]
          2019-11-18 10:16:27 DEBUG TCP_Client_KodiTCPConnection Getting player info. Checking 1
          2019-11-18 10:16:27 DEBUG TCP_Client_KodiTCPConnection Sendcommands after receiving: [{'params': {'properties': ['volume', 'muted']}, 'jsonrpc': '2.0', 'method': 'Application.GetProperties', 'id': 'Application.GetProperties'}]
          2019-11-18 10:16:27 DEBUG TCP_Client_KodiTCPConnection Kodi checking from multianswer: {'result': {'volume': 100, 'muted': False}, 'id': 'Application.GetProperties', 'jsonrpc': '2.0'}
          2019-11-18 10:16:27 DEBUG TCP_Client_KodiTCPConnection Received GetProperties: Change mute to False and volume to 100
          2019-11-18 10:16:27 DEBUG TCP_Client_KodiTCPConnection Sendcommands after receiving: []
          2019-11-18 10:16:28 INFO kodiSZ Could not establish a connection to Kodi Server
          2019-11-18 10:16:29 INFO Main VISU: Websocket handler uses protocol version 4
          2019-11-18 10:16:29 INFO CP Server Thread-13 REST_dispatch_execute(): public_root = 'False'
          2019-11-18 10:16:29 INFO CP Server Thread-13 LogsController.read(None, chunk=1)
          2019-11-18 10:16:29 INFO CP Server Thread-13 192.168.1.142 - - [18/Nov/2019:10:16:29] "GET /api/logs/ HTTP/1.1" 200 732 "http://192.168.1.20:8383/admin/logs/display" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"
          2019-11-18 10:16:29 WARNING Main Client 192.168.1.142:57845 requested to monitor item EG.Wohnzimmer.Licht..Decke_Strips.sperren which can not be found
          2019-11-18 10:16:30 INFO CP Server Thread-13 LogsController.read(smarthome.log, chunk=1)
          2019-11-18 10:16:30 INFO CP Server Thread-13 192.168.1.142 - - [18/Nov/2019:10:16:30] "GET /api/logs/smarthome.log?chunk=1 HTTP/1.1" 200 177721 "http://192.168.1.20:8383/admin/logs/display" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"
          2019-11-18 10:16:32 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error timed out. Counter: 1/10
          2019-11-18 10:16:35 INFO CP Server Thread-13 LogsController.read(knx_kodi.log, chunk=1)
          2019-11-18 10:16:35 INFO CP Server Thread-13 192.168.1.142 - - [18/Nov/2019:10:16:35] "GET /api/logs/knx_kodi.log?chunk=1 HTTP/1.1" 200 11977 "http://192.168.1.20:8383/admin/logs/display" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"
          2019-11-18 10:16:37 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:16:40 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 2/10
          2019-11-18 10:16:45 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:16:48 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 3/10
          2019-11-18 10:16:53 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:16:56 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 4/10
          2019-11-18 10:17:00 INFO Scheduler Adding worker thread. Total: 6
          2019-11-18 10:17:01 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:17:04 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 5/10
          2019-11-18 10:17:09 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:17:12 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 6/10
          2019-11-18 10:17:17 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:17:20 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 7/10
          2019-11-18 10:17:25 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:17:29 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 8/10
          2019-11-18 10:17:34 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:17:37 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 9/10
          2019-11-18 10:17:42 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:17:45 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 10/10
          2019-11-18 10:18:15 INFO CP Server Thread-14 LogsController.read(smarthome.log, chunk=1)
          2019-11-18 10:18:15 INFO CP Server Thread-14 192.168.1.142 - - [18/Nov/2019:10:18:15] "GET /api/logs/smarthome.log?chunk=1 HTTP/1.1" 200 177721 "http://192.168.1.20:8383/admin/logs/display" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"
          2019-11-18 10:18:20 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:18:21 INFO CP Server Thread-14 LogsController.read(smarthome.log, chunk=0)
          2019-11-18 10:18:21 INFO CP Server Thread-14 192.168.1.142 - - [18/Nov/2019:10:18:21] "GET /api/logs/smarthome.log?chunk=0 HTTP/1.1" 200 55693 "http://192.168.1.20:8383/admin/logs/display" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"
          2019-11-18 10:18:23 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 1/10
          2019-11-18 10:18:28 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:18:31 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 2/10
          2019-11-18 10:18:33 INFO CP Server Thread-15 LogsController.read(smarthome.log, chunk=8)
          2019-11-18 10:18:34 INFO CP Server Thread-15 192.168.1.142 - - [18/Nov/2019:10:18:34] "GET /api/logs/smarthome.log?chunk=8 HTTP/1.1" 200 305521 "http://192.168.1.20:8383/admin/logs/display" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"
          2019-11-18 10:18:36 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:18:39 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 3/10
          2019-11-18 10:18:44 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:18:48 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 4/10
          2019-11-18 10:18:53 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:18:56 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 5/10
          2019-11-18 10:18:56 INFO CP Server Thread-16 LogsController.read(smarthome.log, chunk=0)
          2019-11-18 10:18:57 INFO CP Server Thread-16 192.168.1.142 - - [18/Nov/2019:10:18:57] "GET /api/logs/smarthome.log?chunk=0 HTTP/1.1" 200 61000 "http://192.168.1.20:8383/admin/logs/display" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"
          2019-11-18 10:19:00 INFO Scheduler Adding worker thread. Total: 7
          2019-11-18 10:19:01 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:19:04 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 6/10
          2019-11-18 10:19:09 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:19:12 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 7/10
          2019-11-18 10:19:17 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:19:20 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 8/10
          2019-11-18 10:19:25 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:19:28 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 9/10
          2019-11-18 10:19:33 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:19:37 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 10/10
          2019-11-18 10:20:12 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:20:15 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 1/10
          2019-11-18 10:20:20 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:20:23 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 2/10
          2019-11-18 10:20:28 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:20:31 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 3/10
          2019-11-18 10:20:36 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:20:39 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 4/10
          2019-11-18 10:20:44 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:20:47 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 5/10
          2019-11-18 10:20:52 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:20:56 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 6/10
          2019-11-18 10:21:01 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:21:04 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 7/10
          2019-11-18 10:21:09 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:21:12 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 8/10
          2019-11-18 10:21:17 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:21:20 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 9/10
          2019-11-18 10:21:25 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:21:28 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 10/10
          2019-11-18 10:22:03 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:22:06 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 1/10
          2019-11-18 10:22:11 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:22:14 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 2/10
          2019-11-18 10:22:19 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:22:23 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 3/10
          2019-11-18 10:22:28 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:22:31 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 4/10
          2019-11-18 10:22:36 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:22:39 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 5/10
          2019-11-18 10:22:44 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:22:47 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 6/10
          2019-11-18 10:22:52 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:22:55 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 7/10
          2019-11-18 10:23:00 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:23:03 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 8/10
          2019-11-18 10:23:08 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:23:12 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 9/10
          2019-11-18 10:23:17 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:23:20 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 10/10
          2019-11-18 10:23:55 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:23:58 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 1/10
          2019-11-18 10:24:03 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:24:06 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 2/10
          2019-11-18 10:24:11 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:24:14 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 3/10
          2019-11-18 10:24:19 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:24:22 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 4/10
          2019-11-18 10:24:27 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:24:31 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 5/10
          2019-11-18 10:24:36 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:24:39 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 6/10
          2019-11-18 10:24:44 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:24:47 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 7/10
          2019-11-18 10:24:52 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:24:55 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 8/10
          2019-11-18 10:25:00 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:25:03 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 9/10
          2019-11-18 10:25:08 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:25:11 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 10/10
          2019-11-18 10:25:46 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:25:50 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 1/10
          2019-11-18 10:25:55 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:25:58 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 2/10
          2019-11-18 10:26:03 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:26:06 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 3/10
          2019-11-18 10:26:11 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:26:14 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 4/10
          2019-11-18 10:26:19 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:26:22 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 5/10
          2019-11-18 10:26:27 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:26:30 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 6/10
          2019-11-18 10:26:33 INFO CP Server Thread-17 LogsController.read(smarthome.log, chunk=1)
          2019-11-18 10:26:33 INFO CP Server Thread-17 192.168.1.142 - - [18/Nov/2019:10:26:33] "GET /api/logs/smarthome.log?chunk=1 HTTP/1.1" 200 177721 "http://192.168.1.20:8383/admin/logs/display" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"
          2019-11-18 10:26:35 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:26:38 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 7/10
          2019-11-18 10:26:43 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:26:47 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 8/10
          2019-11-18 10:26:52 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:26:55 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 9/10
          2019-11-18 10:27:00 DEBUG TCP_Connect Connecting to 192.168.1.82 using IPv4 192.168.1.82 on TCP port 9090 with autoreconnect
          2019-11-18 10:27:03 WARNING TCP_Connect TCP connection to 192.168.1.82:9090 failed with error [Errno 113] Keine Route zum Zielrechner. Counter: 10/10
          plugin.yaml:

          Code:
          kodi:
              plugin_name: kodi
              host: 192.168.1.81
              autoreconnect: True
              instance: 'wohnzimmer'
              
          kodiSZ:
              plugin_name: kodi
              host: 192.168.1.82
              autoreconnect: True
              instance: 'schlafzimmer'
          item.yaml:

          Code:
          #Kodi.yaml
          Sonder:
              Kodi:
                  wohnzimmer:
                      query:
                          name: Vorlage-Struktur für Kodi Infos, die nicht aktiv verämndert werden können.
          
                          state:
                            kodi_item@wohnzimmer: state
                            type: str
                            visu_acl: ro
          
                          title:
                            kodi_item@wohnzimmer: title
                            type: str
                            visu_acl: ro
          
                          media:
                            kodi_item@wohnzimmer: media
                            type: str
                            visu_acl: ro
          
                          player:
                            kodi_item@wohnzimmer: player
                            type: num
                            visu_acl: rw
                            enforce_updates: true
          
                      control:
                          name: Vorlage-Struktur für Kodi Befehle zum Steuern
          
                          mute:
                            kodi_item@wohnzimmer: mute
                            type: bool
                            visu_acl: rw
                            enforce_updates: true
          
                          volume:
                            kodi_item@wohnzimmer: volume
                            type: num
                            visu_acl: rw
                            enforce_updates: true
          
                          speed:
                            kodi_item@wohnzimmer: speed
                            type: num
                            visu_acl: rw
                            enforce_updates: true
          
                          on_off:
                            kodi_item@wohnzimmer: on_off
                            enforce_updates: true
                            type: bool
                            visu_acl: rw
          
                          input:
                            kodi_item@wohnzimmer: input
                            type: str
                            visu_acl: rw
                            enforce_updates: true
          
                          favourites:
                            kodi_item@wohnzimmer: favourites
                            type: str
                            visu_acl: rw
                            enforce_updates: true
          
                          macro:
                            kodi_item@wohnzimmer: macro
                            type: str
                            visu_acl: rw
                            enforce_updates: true
          
                          audiostream:
                            kodi_item@wohnzimmer: audiostream
                            type: foo
                            visu_acl: rw
                            enforce_updates: true
          
                          subtitle:
                            kodi_item@wohnzimmer: subtitle
                            type: list
                            visu_acl: rw
                            enforce_updates: true
          
                          seek:
                            kodi_item@wohnzimmer: seek
                            type: num
                            visu_acl: rw
                            enforce_updates: true
          
                          home:
                              kodi_item@wohnzimmer: home
                              type: bool
                              visu_acl: rw
                              enforce_updates: true
          
                          stop:
                              type: bool
                              eval: sh...input('stop')
                              enforce_updates: True
          
                          play:
                              type: bool
                              eval: sh...input('play')
                              enforce_updates: True
          
                          pause:
                              type: bool
                              eval: sh...input('pause')
                              enforce_updates: True
          
                          previous:
                              type: bool
                              eval: sh...input('skipprevious')
                              enforce_updates: True
          
                          next:
                              type: bool
                              eval: sh...input('skipnext')
                              enforce_updates: True
          
                          select:
                              type: bool
                              eval: sh...input('select')
                              enforce_updates: True
          
                          contextmenu:
                              type: str
                              eval: sh...input('contextmenu')
                              enforce_updates: True
                      notify:
                          type: str
                          description:
                              de: "Diese Funktion ermöglicht es, Mitteilungen an Kodi zu schicken. Beispiel: sh.living.kodi.notify('Door', 'Ding Dong')"
                              en: "This function provies the functionallity to send notification messages to Kodi. Example: sh.living.kodi.notify('Door', 'Ding Dong')"
          
                          parameters:
                              title:
                                  type: str
                                  description:
                                      de: 'Überschrift der Mitteilung'
                                      en: ''
          
                              message:
                                  type: str
                                  description:
                                      de: 'Text der Mitteilung'
                                      en: ''
          
                              image:
                                  type: str
                                  default: None*
                                  description:
                                      de: "Url des anzuzeigenden Bildes (z.B.: 'http://smarthome.local/img/phone.png')"
                                      en: ''
          
                              display_time:
                                  type: int
                                  default: 10000
                                  description:
                                      de: 'Dauer der Anzeige in msec'
                                      en: ''
                  schlafzimmer:
                      query:
                          name: Vorlage-Struktur für Kodi Infos, die nicht aktiv verämndert werden können.
          
                          state:
                            kodi_item@schlafzimmer: state
                            type: str
                            visu_acl: ro
          
                          title:
                            kodi_item@schlafzimmer: title
                            type: str
                            visu_acl: ro
          
                          media:
                            kodi_item@schlafzimmer: media
                            type: str
                            visu_acl: ro
          
                          player:
                            kodi_item@schlafzimmer: player
                            type: num
                            visu_acl: rw
                            enforce_updates: true
          
                      control:
                          name: Vorlage-Struktur für Kodi Befehle zum Steuern
          
                          mute:
                            kodi_item@schlafzimmer: mute
                            type: bool
                            visu_acl: rw
                            enforce_updates: true
          
                          volume:
                            kodi_item@schlafzimmer: volume
                            type: num
                            visu_acl: rw
                            enforce_updates: true
          
                          speed:
                            kodi_item@schlafzimmer: speed
                            type: num
                            visu_acl: rw
                            enforce_updates: true
          
                          on_off:
                            kodi_item@schlafzimmer: on_off
                            enforce_updates: true
                            type: bool
                            visu_acl: rw
          
                          input:
                            kodi_item@schlafzimmer: input
                            type: str
                            visu_acl: rw
                            enforce_updates: true
          
                          favourites:
                            kodi_item@schlafzimmer: favourites
                            type: str
                            visu_acl: rw
                            enforce_updates: true
          
                          macro:
                            kodi_item@schlafzimmer: macro
                            type: str
                            visu_acl: rw
                            enforce_updates: true
          
                          audiostream:
                            kodi_item@schlafzimmer: audiostream
                            type: foo
                            visu_acl: rw
                            enforce_updates: true
          
                          subtitle:
                            kodi_item@schlafzimmer: subtitle
                            type: list
                            visu_acl: rw
                            enforce_updates: true
          
                          seek:
                            kodi_item@schlafzimmer: seek
                            type: num
                            visu_acl: rw
                            enforce_updates: true
          
                          home:
                              kodi_item@schlafzimmer: home
                              type: bool
                              visu_acl: rw
                              enforce_updates: true
          
                          stop:
                              type: bool
                              eval: sh...input('stop')
                              enforce_updates: True
          
                          play:
                              type: bool
                              eval: sh...input('play')
                              enforce_updates: True
          
                          pause:
                              type: bool
                              eval: sh...input('pause')
                              enforce_updates: True
          
                          previous:
                              type: bool
                              eval: sh...input('skipprevious')
                              enforce_updates: True
          
                          next:
                              type: bool
                              eval: sh...input('skipnext')
                              enforce_updates: True
          
                          select:
                              type: bool
                              eval: sh...input('select')
                              enforce_updates: True
          
                          contextmenu:
                              type: str
                              eval: sh...input('contextmenu')
                              enforce_updates: True
                      notify:
                          type: str
                          description:
                              de: "Diese Funktion ermöglicht es, Mitteilungen an Kodi zu schicken. Beispiel: sh.living.kodi.notify('Door', 'Ding Dong')"
                              en: "This function provies the functionallity to send notification messages to Kodi. Example: sh.living.kodi.notify('Door', 'Ding Dong')"
          
                          parameters:
                              title:
                                  type: str
                                  description:
                                      de: 'Überschrift der Mitteilung'
                                      en: ''
          
                              message:
                                  type: str
                                  description:
                                      de: 'Text der Mitteilung'
                                      en: ''
          
                              image:
                                  type: str
                                  default: None*
                                  description:
                                      de: "Url des anzuzeigenden Bildes (z.B.: 'http://smarthome.local/img/phone.png')"
                                      en: ''
          
                              display_time:
                                  type: int
                                  default: 10000
                                  description:
                                      de: 'Dauer der Anzeige in msec'
                                      en: ''
          Zuletzt geändert von artner; 18.11.2019, 10:47.

          Kommentar


            #6
            das erste was mir auffällt: es gibt keine Items vom TYPE: INT. Es gibt nur Items vom TYPE: NUM

            Zu "Keine Route zum Zielrechner" -> schon mal probiert ob Du den Zielrechner pingen kannst? ich vermute der Netzwerkzugriff geht schlichtweg nicht.

            Kommentar


              #7
              Bezüglich Items kann ich nur empfehlen, die structs zu nutzen
              Code:
                      struct:
                        - kodi.query
                        - kodi.control
                      instance: schlafzimmer
              Ich glaube, der Fehler liegt in der plugin.yaml des Plugins. Entferne dort bitte mal unter parameters den "instance" Eintrag. Der hat dort eigentlich nix verloren und wär für mich die Ursache des Übels!

              Kommentar


                #8
                das erste was mir auffällt: es gibt keine Items vom TYPE: INT. Es gibt nur Items vom TYPE: NUM
                hab ich aus Unwissenheit der structs aus plugin/kodi/plugin.yaml kopiert (da ich nicht wusste dass instance sich anscheinend so überschreiben lässt)

                Zu "Keine Route zum Zielrechner" -> schon mal probiert ob Du den Zielrechner pingen kannst? ich vermute der Netzwerkzugriff geht schlichtweg nicht.
                ping funktioniert (von smarthomeng server), Kore (vom handy) funktioniert, Diverse Anzeigen im Plugin funktioniert nicht (title, volume, etc) - grundlegend dürfte aber eine Verbindung da sein, da play, pause, etc funktionieren

                Ich glaube, der Fehler liegt in der plugin.yaml des Plugins. Entferne dort bitte mal unter parameters den "instance" Eintrag. Der hat dort eigentlich nix verloren und wär für mich die Ursache des Übels!
                wobei mir dann völlig unklar ist wo ich definiere dass 192.168.1.81 das Wohnzimmer und 192.168.1.82 das Schlafzimmer ist
                plugin.yaml schaut jetzt mal so aus - ohne instance krieg ich keine Verbindung (wenn das Item eine instance hat)
                Code:
                kodi:
                    plugin_name: kodi
                    host: 192.168.1.82
                    instance: 'schlafzimmer' 
                    autoreconnect: True
                Zuletzt geändert von artner; 19.11.2019, 10:46.

                Kommentar


                  #9
                  Nene in der plugin.yaml des Plugins nicht in etc!

                  Kommentar


                    #10
                    So, ich habe auf Hinweis von Onkelandy und anderen mal das Plugin etwas auf den Kopf gestellt. Dabei habe ich versucht, die Kompatibilität zu vorhandenen Installationen so weit wie möglich beizubehalten; in der Folge ist die Benennung von shng-Items und kodi-Items nicht mehr immer ganz schlüssig; mit der jetzt gelieferten plugin.yaml sollten aber (bis auf die Benennung des struct) alle bisherigen Funktionen weiter funktionieren.

                    Die Konfiguration wurde komplett überarbeitet, generalisiert und in eine externe Datei (commands.py) ausgelagert. Soweit es schreibende Kommandos angeht, kann das Plugin ausschließlich durch Änderungen an der commands.py erweitert werden. Für lesende Kommandos muss der Parsing-Code immer noch angefasst werden. Vielleicht schaffe ich es irgendwann auch noch, das zu generalisieren

                    Für die Entwicklungsreife: Es funktioniert, man kann es grundsätzlich mindestens so weit wie vorher nutzen. Es läuft - bei mir - stabil. Im Code habe ich insbesondere die Docstring-Einträge, die Aufteilung von Methoden und Eigenschaften in public und protected und die Metadaten inkl. Dokumentation überarbeitet.

                    Seid so lieb und testet das Plugin mal auf Herz und Nieren, und vor allem: schreibt mir, wenn Fehler auftreten. Im Debug-Modus ist das Plugin ziemlich gesprächig; oberhalb von Debug ist es ziemlich still. Bei der Prüfung von Konfigurationen erzeugt es hauptsächlich Error-Meldungen, weil es dann nicht lauffähig wäre.

                    Sachen, die ich noch prüfen/fixen muss:
                    • Anzeige/Auswahl von Tonspur und Untertitel (wird als dict angezeigt, aber das Plugin nimmt an der Stelle kein dict an.)
                    • Logging auf Ebene Info verbessern
                    • Den Empfangs- und Verarbeitungscode verstehen und entknoten. (das Parsing bin ich schon angegangen, aber die Variante des Befehlsqueueings und der Entflechtung der Antworten braucht mehr Alkohol... )
                    • Arbeiten mit mehreren Instanzen. Ging wohl vorher, konnte ich aber noch nicht testen (es gibt aber eigentlich keinen Grund, wieso es nicht mehr gehen sollte)
                    • Notifications, insbesondere das automatisierte Aktualisieren von Wiedergabeinformationen (playtime usw). Geht derzeit nur über Trigger-Item 'update'; aufgrund von Wartezeiten auf die Antworten braucht ein Zyklus der Aktualisierung (getriggert) 2-3 Sekunden. Wenn Kodi das "automatisch" senden würde, könnte es problemlos im Sekundentakt laufen. Dann müsste ich die Items noch erweitern.
                    Happy testing!

                    Achso - https://github.com/Morg42/plugins/tree/develop/kodi (ist ein fork von shng/plugins, also bitte ggf. vorsichtig benutzen)

                    Kommentar


                      #11
                      So, nach weiteren Testen und noch einigen Fehlerchen, die insbesondere in Bezug auf Audiostreams/Untertitel aufgetreten sind (der Rest ging ja gestern schon), habe ich nochmal "zurück auf Start" gespielt.

                      Ich habe regelmäßig Lockups gehabt und war nicht in der Lage festzustellen, wer an welcher Stelle welches Lock blockiert (und warum!). Mir schien auch die ganze Locking-Mimik etwas überzogen, wenn das Nachrichtenprotokoll im Kern auf Asynchronität ausgerichtet ist.
                      Das bis zu fünfmalige Wiederholen eines Kommandos, das schon beim ersten Mal einen Fehler verursacht hat, leuchtet mir überhaupt nicht ein. Wenn ein Fehler drin ist, muss ich den Fehler nicht nochmal senden.
                      Eine Zuordnung von Antworten zu Anfragen ist zwar ohne größeren Aufwand möglich, aber in diesem Zusammenhang nicht wirklich sinnvoll.

                      Also habe ich den Sende- und Empfangscode auch über der Haufen geworfen und neu geschrieben.

                      Beim Senden - getriggert durch update_item() oder aus einem Auswerteprozess (aktiver Player gefunden -> Infos abfragen) wird das Paket gebaut und in eine Queue gesteckt. (Die Queue stellt exklusiven Zugriff sicher, ist ein Python-Standardmodul). Am Ende der Sendefunktion wird versucht, alles zu senden, was in der Queue steckt. Wenn ich dabei konkurrierende Threads habe, ist das egal, weil durch das Queue-Objekt jedes Sendeobjekt nur einmal "verteilt" werden kann. Die Netzwerkebene sollte beim Sende und beim Empfänger ausreichend stabil sein, um ggf. auch gleichzeitige Verbindungen zu vertragen. Die gesendeten Kommandos werden in einer Liste gespeichert (ohne Locking).

                      Beim Empfangen - als Callback vom TCPConnection-Objekt - wird das Paket auf Plausibilität geprüft, in ein Objekt überführt, Fehler werden geloggt. Wenn es eine Antwort auf ein gesendetes Paket ist - nur dann enthält es eine MessageID - , dann wird das gesendete Paket aus der Liste der gesendeten Pakete gelöscht und als "erfolgreich" oder "Fehler" geloggt. Danach wird das Paket zur Auswertung abgegeben. Da jede Netzwerkverbindung einen eigenen Callback auslöst, kann jeder Callback seine eigenen Daten verarbeiten (lassen) und es bleibt nichts übrig, also brauche ich kein Locking und keine Queues.

                      Durch die Liste von gesendeten Nachrichten kann ich - mit einem bestimmten Zeitversatz - feststellen, ob Anfragen unbeantwortet geblieben sind. Das wird derzeit noch nicht ausgewertet.

                      Durch die Vergabe von eindeutigen MessageIDs könnte man weitere Nachverfolgung machen, ich sehe darin derzeit aber keinen Mehrwert.

                      Notifications (Statusmitteilungen des Players ohne vorherige Abfrage) werden über das Callback genauso bearbeitet wie alle anderen Anfragen. Solange parse_response() damit umgehen kann, kann alles verarbeitet werden.

                      Durch die - jetzt nochmal - neue Struktur lassen sich neue Funktionen über a) die commands.py auf Sendeseite und b) die Methode _parse_response() umsetzen; eine umfassende Anpassung von vielen Methoden (senden, empfangen, auswerten, Zählen, Status abfragen) entfällt.

                      Ich hoffe, dass damit zumindest mittelfristig die Nutz- und Wartbarkeit des Codes deutlich verbessert wurde. Ich werde heute noch weiter testen und ggf. Updates pushen, aber grundsätzlich funktioniert das schonmal alles.

                      Wie immer - bitte ausgiebig testen und insbesondere Fehler zurückmelden oder selber beheben...

                      Kommentar


                        #12

                        Schöne Sache - eine solide Codebasis kann bestimmt dann auch für ähnliche Plugins herangezogen werden wie schon diskutiert.
                        Mehrfaches Senden eines Befehls... weiß auch nicht mehr genau, warum ich das gemacht hab. Bei einigen Geräten (avdevice) schien das Sinn zu machen. Nur weils das erste Mal nicht geklappt hat, heißt es ja nicht zwingend, dass es ein fehlerhafter Befehl war.
                        Das Nutzen der Message ID, um zu eruieren, ob der Befehl erfolgreich war oder nicht, fände ich praktisch, aber ist sicher nicht zwingend nötig.

                        Ich hab jetzt mal ein paar Sache probiert. Hat großteils gut funktioniert. Allerdings ist auch nach Stoppen eines Films der Player auf "1" geblieben, obgleich kein aktiver Player vorhanden. "Play" läuft dann ins Leere, kriegt man aber eigentlich nicht mit. Ob das schlimm ist, sei dahin gestellt.

                        Danke für das Update!

                        Kommentar


                          #13
                          Ich muss gestehen, dass ich durch die alte Logik nicht 100% durchgestiegen bin; aber soweit ich das nachvollziehen konnte, hat er bei einer Fehlermeldung den Befehl nochmal in die Queue gepackt, das ist natürlich Unsinn.

                          Mit MsgID zu prüfen, ob der Befehl erfolgreich war, ist jetzt schon drin, das Ergebnis (OK oder Fehler) wird auch geloggt. Die Liste der "offenen" Befehle wird entsprechend aktualisiert. Was momentan noch nicht passiert, ist alle Befehle älter als x Sekunden, die noch in der "offen"-Liste stehen, zu bearbeiten (nochmal senden, Fehler melden...); derzeit bleibt die Liste stehen und wird ggf. immer länger.

                          Das mit Stop schaue ich mir gleich mal an.

                          Kommentar


                            #14
                            So, habe den Fehler mit "stop" gefixed (war mein Fehler - ich habe state auf "Stopped" gesetzt, dabei wird der aktive Player beendet, nicht in Status "stop" gesetzt).

                            Weiterhin habe ich mal versucht, einen Mechanismus zu implementieren, der "regelmäßig" unbeantwortete Kommandos prüft. Da ich für "regelmäßig" weder einen Scheduler noch eine Schleife bauen wollte, macht er das jedesmal, wenn er Daten empfangen hat, allerdings höchstens alle 'command_repeat'/2 Sekunden. Dazu hat er eine timer-Variable.

                            Wenn die Zeit überschritten ist (ohne Aktivität erfolgt auch keine Prüfung!), geht er alle gespeicherten und nicht beantworteten Kommandos durch und prüft jeweils, ob die schon oft genug wiederholt wurden. Falls ja, fliegen sie raus; falls nein, werden sie nochmal gesendet.

                            Da das Ereignis "nicht beantwortet" bei mir nicht aufgetaucht ist, ist das Testen schwierig. Ich habe also bei "Kommando beantwortet" es nicht aus der Liste löschen lassen, so dass diese sich immer füllt. Das wiederholte Senden und Hochzählen klappt, auch das Löschen beim Erreichen der maximalen Wiederholung. Wie sich das im "echten" Betrieb verhält, müssen wir mal beobachten.

                            Fazit derzeit: läuft, wirft keine Fehler, den Rest müssen wir testen. Wie immer - bitte um Feedback

                            Kommentar


                              #15
                              So, nach noch einigen Arbeiten sollten wir jetzt einen guten und stabilen Stand erreicht haben. Neu- und Wiederverbindung klappt, Status wird entsprechend gelesen und gesetzt, und bis auf Netzwerkkabel ziehen kann das Plugin mit den meisten Problemen umgehen

                              Wer möchte, gerne mal testen. Ist derzeit noch im PR, demnächst hoffentlich in develop

                              Kommentar

                              Lädt...
                              X