Ankündigung

Einklappen
Keine Ankündigung bisher.

Vallox über RS485 an HS

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

    Vallox über RS485 an HS

    Hallo,
    Ich habe bisher meine KNX Steuerung im Haus mit dem Homeserver realisiert.
    Nun möchte ich gerne meine KWL Vallo Plus 510 SE in meine Steuerung integrieren.
    Dazu habe ich mir einen Raspberry 3 und eine RS485 Schnittstelle gekauft und mit der Anlage verbunden.
    Installiert habe ich das SmarthomeNG 1.3 von Onkelandi und kann testweise mittels ´groupswrite ip:localhost 1/1/11 1´ auch meine Lampe schalten.
    Die RS485 Schnittstelle erhält Via "dmesg | grep tty" auch irgendwelche Daten allerdings steht auf der Fernbedienung "Bus Fehler".

    Mein Problem sind die Items befürchte ich. Ich habe eine Datei smarthome/items/helios.conf erstellt und die Einstellunge von Tom Bombadil und Marcel angepasst. Vielen Dank dafür

    Code:
    [[rs485]]              # Connectors to the plugin values
        # ============================================================================================ #
    
            [[[_power_state]]]
                name = Anlage an / aus
                type = num
                helios_var = power_state
                visu_acl = rw
                knx_dpt = 3
                knx_send = 0/3/3
                knx_listen = 0/3/18
    Sende ich nun mittels ETS auf 0/3/18 eine 0 erhalte ich im sh.log am Raspberry diese Fehlermeldung.

    Code:
    WARNING  Main         Item ventilation.rs485._power_state: value [0, 0] does not match type num. Via KNX 15.15.1
    Ich gehe mal davon aus, die Item alleine reicht nicht aus. Ich benötige eine weitere Datei, die diesen Befehl an die Vallox übersetzt oder ich muss vielleicht auch einen 6 byte Befehl senden?
    Kann mir jemand Hilfestellung geben?

    Vielen Dank
    Michael
    Zuletzt geändert von Megen; 19.02.2017, 16:02.

    #2
    Hmmm, da muss einer mit Ahnung in Sachen KNX ran, da kann ich nicht helfen. In diese num-Variable des Plugins gehört nur 0 oder 1 für 'aus' oder 'an'.

    Aber grundsätzlich: Kannst Du die Werte in den Variablen des Plugins denn schon mal auf dem Bus lesen (Busmonitor o.ä.)? Da ist ja noch einiges mehr, z.B. eine Lüftungsstufe, die sich sehr einfach über die Fernbedienung schalten lässt. Das sollte dann jedesmal ein Telegramm lostreten.

    Schreiben von Werten / schalten würde ich erst im 2. Schritt versuchen ...

    /tom

    Kommentar


      #3
      Nein leider erhalte ich gar nichts im Busmonitor wenn ich an der Fernbedienung etwas ändere.
      Ich verstehe aber auch diese helios.conf Datei nicht.
      Die Zeilen knx_send und knx_listen ist klar aber wenn ich von der ETS eine 1 sende, kann doch die KWL damit nichts anfangen?
      Auch den Befehl power_state oder fanspeed sollte die Anlage doch eigentlich nicht verstehen.
      Wo ist der Befehl hinterlegt, der an die KWL gesendet wird, wenn auf knx_listen etwas ankommt?

      Kommentar


        #4
        Um die notwendigen Befehle kümmert sich das Plugin von allein, da musst Du nichts machen. Vereinfacht gesagt, überwacht es auf der einen Seite die Variablen in der KWL, und auf der anderen Seite die Variablen in smarthomeNG, und übernimmt dann die notwendige Übersetzung zwischen beiden.

        Schreibst Du also eine 6 in das Item (die 'Variable') für die Lüftungsstufe in smartHomeNG, erkennt dies das Plugin und sorgt dafür, dass der Befehl für 'Lüftungsstufe 6' auf dem RS485-Bus gesendet wird.

        Schaltest Du manuell mit der Fernbedienung die KWL auf Lüftungsstufe 4 zurück, gibt diese das auch auf dem RS485 bekannt. Das Plugin liest vom RS485 und beschreibt das zugehörige Item mit einer 4.

        Verbindest Du das Item für die Lüftungsstufe nun zusätzlich mit KNX (knx_dpt, knx_listen, knx_send), übernimmt das knx-Plugin zusätzlich noch die Anbindung für dieses Item an den KNX-Bus. Dann arbeiten also schon 2 Plugins 'auf' diesem zentralen smartHomeNG-Item.

        Ich hoffe, das war einigermaßen verständlich erklärt. Aber:

        Bist Du sicher, dass Deine Vallo Plus 510 SE den gleichen Befehlssatz wie die Vallox 90 SE verwendet? Du hattest ja geschrieben, dass Du bereits Werte bekommst, und ich hab das als 'gültige Werte' interpretiert. Nicht, dass es wie bei Helios ist, wo die neueren Modelle ein ganz anderes Protokoll auf dem RS485 haben.

        Möglichkeiten, das zu prüfen:
        - smartHomeNG im Debug-Modus starten und logs unter smarthome/var/log auf Fehler prüfen,
        - nachsehen, ob die Items in smartHomeNG überhaupt gültige Werte bekommen, z.B. die aktuelle Lüftungsstufe
        (Backend-Plugin, standardmäßig erreichbar unter http://ip-deines-raspi:8383 (ggf vorher aktivieren!)).

        /tom

        Kommentar


          #5
          Die Vallox 510SE hat den gleichen Befehlssatz, sollte also einwandfrei mit dem Plugin funktionieren. Habe diese hier bei mir selber im Einsatz.

          Stehen im sh.log ansonsten noch andere Fehlermeldungen des Plugins Helios? Manchmal tauchen diese auch an verschiedenen Stellen auf.

          Gruß
          Marcus

          Kommentar


            #6
            Ich muss getehen, habe den Raspberry neu aufgesetzt und das Plugin gar nicht mehr installiert. Hatte dich falsch verstanden und gedacht nur die Item würde für meine Zwecke ausreichen.
            Tut mir leid ich muss mich noch einmal daran setzen und die helios.zip installieren.
            Danke euch

            Kommentar


              #7
              Ok, dann kann's nicht gehen.
              /tom

              Kommentar


                #8
                Also habe jetzt das Plugin wieder installiert und erhalte auch Werte...

                Code:
                (#)/usr/local/smarthome/plugins/helios:$ python3 ./__init__.py -d -t /dev/ttyUSB                                                                                                             0
                2017-02-20 23:57:56,067 - root - DEBUG - Helios: Connecting...
                2017-02-20 23:57:56,070 - root - DEBUG - Helios: Reading value: boost_setting
                2017-02-20 23:57:56,141 - root - DEBUG - Helios: Sending telegram '0x1 0x2f 0x11                                                                                                              0x0 0xaa 0xeb '
                2017-02-20 23:57:56,155 - root - DEBUG - Telegram received '0x1 0x11 0x2f 0xaa 0                                                                                                             x1a 0x5 '
                2017-02-20 23:57:56,156 - root - DEBUG - Helios: Value received (raw data): boos                                                                                                             t_setting = 0x1a
                2017-02-20 23:57:56,156 - root - DEBUG - Helios: Value received (converted): boo                                                                                                             st_setting = 0
                boost_setting = 0
                2017-02-20 23:57:56,157 - root - DEBUG - Helios: Reading value: max_fanspeed
                2017-02-20 23:57:56,228 - root - DEBUG - Helios: Sending telegram '0x1 0x2f 0x11                                                                                                              0x0 0xa5 0xe6 '
                2017-02-20 23:57:56,241 - root - DEBUG - Telegram received '0x1 0x11 0x2f 0xa5 0                                                                                                             xff 0xe5 '
                2017-02-20 23:57:56,242 - root - DEBUG - Helios: Value received (raw data): max_                                                                                                             fanspeed = 0xff
                2017-02-20 23:57:56,242 - root - DEBUG - Helios: Value received (converted): max                                                                                                             _fanspeed = 8
                max_fanspeed = 8
                2017-02-20 23:57:56,242 - root - DEBUG - Helios: Reading value: exhaust_temp
                2017-02-20 23:57:56,313 - root - DEBUG - Helios: Sending telegram '0x1 0x2f 0x11                                                                                                              0x0 0x33 0x74 '
                2017-02-20 23:57:56,327 - root - DEBUG - Telegram received '0x1 0x11 0x2f 0x33 0                                                                                                             x89 0xfd '
                2017-02-20 23:57:56,328 - root - DEBUG - Helios: Value received (raw data): exha                                                                                                             ust_temp = 0x89
                2017-02-20 23:57:56,328 - root - DEBUG - Helios: Value received (converted): exh                                                                                                             aust_temp = 12
                exhaust_temp = 12
                2017-02-20 23:57:56,328 - root - DEBUG - Helios: Reading value: failure_notice
                2017-02-20 23:57:56,399 - root - DEBUG - Helios: Sending telegram '0x1 0x2f 0x11                                                                                                              0x0 0x36 0x77 '
                2017-02-20 23:57:56,414 - root - DEBUG - Telegram received '0x1 0x11 0x2f 0x36 0                                                                                                             x0 0x77 '
                2017-02-20 23:57:56,415 - root - DEBUG - Helios: Value received (raw data): fail                                                                                                             ure_notice = 0x0
                2017-02-20 23:57:56,415 - root - DEBUG - Helios: Value received (converted): fai                                                                                                             lure_notice = 0
                failure_notice = 0
                2017-02-20 23:57:56,415 - root - DEBUG - Helios: Reading value: bypass_temp
                2017-02-20 23:57:56,486 - root - DEBUG - Helios: Sending telegram '0x1 0x2f 0x11                                                                                                              0x0 0xaf 0xf0 '
                2017-02-20 23:57:56,501 - root - DEBUG - Telegram received '0x1 0x11 0x2f 0xaf 0                                                                                                             x97 0x87 '
                2017-02-20 23:57:56,501 - root - DEBUG - Helios: Value received (raw data): bypa                                                                                                             ss_temp = 0x97
                2017-02-20 23:57:56,502 - root - DEBUG - Helios: Value received (converted): byp                                                                                                             ass_temp = 16
                bypass_temp = 16
                2017-02-20 23:57:56,502 - root - DEBUG - Helios: Reading value: exhaust_fan
                2017-02-20 23:57:56,573 - root - DEBUG - Helios: Sending telegram '0x1 0x2f 0x11                                                                                                              0x0 0x8 0x49 '
                2017-02-20 23:57:56,588 - root - DEBUG - Telegram received '0x1 0x11 0x2f 0x8 0x                                                                                                             1 0x4a '
                2017-02-20 23:57:56,588 - root - DEBUG - Helios: Value received (raw data): exha                                                                                                             ust_fan = 0x1
                2017-02-20 23:57:56,589 - root - DEBUG - Helios: Value received (converted): exh                                                                                                             aust_fan = 0
                exhaust_fan = 0
                2017-02-20 23:57:56,589 - root - DEBUG - Helios: Reading value: fresh_air_fan
                2017-02-20 23:57:56,660 - root - DEBUG - Helios: Sending telegram '0x1 0x2f 0x11                                                                                                              0x0 0x8 0x49 '
                2017-02-20 23:57:56,674 - root - DEBUG - Telegram received '0x1 0x11 0x2f 0x8 0x                                                                                                             1 0x4a '
                2017-02-20 23:57:56,674 - root - DEBUG - Helios: Value received (raw data): fres                                                                                                             h_air_fan = 0x1
                2017-02-20 23:57:56,674 - root - DEBUG - Helios: Value received (converted): fre                                                                                                             sh_air_fan = 0
                fresh_air_fan = 0
                2017-02-20 23:57:56,675 - root - DEBUG - Helios: Reading value: boost_activate
                2017-02-20 23:57:56,746 - root - DEBUG - Helios: Sending telegram '0x1 0x2f 0x11                                                                                                              0x0 0x71 0xb2 '
                2017-02-20 23:57:56,759 - root - DEBUG - Telegram received '0x1 0x11 0x2f 0x71 0                                                                                                             x0 0xb2 '
                2017-02-20 23:57:56,760 - root - DEBUG - Helios: Value received (raw data): boos                                                                                                             t_activate = 0x0
                2017-02-20 23:57:56,760 - root - DEBUG - Helios: Value received (converted): boo                                                                                                             st_activate = 0
                boost_activate = 0
                2017-02-20 23:57:56,761 - root - DEBUG - Helios: Reading value: inside_temp
                2017-02-20 23:57:56,832 - root - DEBUG - Helios: Sending telegram '0x1 0x2f 0x11                                                                                                              0x0 0x34 0x75 '
                2017-02-20 23:57:56,845 - root - DEBUG - Telegram received '0x1 0x11 0x2f 0x34 0                                                                                                             xaa 0x1f '
                2017-02-20 23:57:56,846 - root - DEBUG - Helios: Value received (raw data): insi                                                                                                             de_temp = 0xaa
                2017-02-20 23:57:56,846 - root - DEBUG - Helios: Value received (converted): ins                                                                                                             ide_temp = 24
                inside_temp = 24
                2017-02-20 23:57:56,846 - root - DEBUG - Helios: Reading value: boost_remaining
                2017-02-20 23:57:56,917 - root - DEBUG - Helios: Sending telegram '0x1 0x2f 0x11                                                                                                              0x0 0x79 0xba '
                2017-02-20 23:57:56,931 - root - DEBUG - Telegram received '0x1 0x11 0x2f 0x79 0                                                                                                             x0 0xba '
                2017-02-20 23:57:56,931 - root - DEBUG - Helios: Value received (raw data): boos                                                                                                             t_remaining = 0x0
                2017-02-20 23:57:56,932 - root - DEBUG - Helios: Value received (converted): boo                                                                                                             st_remaining = 0
                boost_remaining = 0
                2017-02-20 23:57:56,932 - root - DEBUG - Helios: Reading value: fanspeed
                2017-02-20 23:57:57,003 - root - DEBUG - Helios: Sending telegram '0x1 0x2f 0x11                                                                                                              0x0 0x29 0x6a '
                2017-02-20 23:57:57,018 - root - DEBUG - Telegram received '0x1 0x11 0x2f 0x29 0                                                                                                             x1 0x6b '
                2017-02-20 23:57:57,018 - root - DEBUG - Helios: Value received (raw data): fans                                                                                                             peed = 0x1
                2017-02-20 23:57:57,018 - root - DEBUG - Helios: Value received (converted): fan                                                                                                             speed = 1
                fanspeed = 1
                2017-02-20 23:57:57,019 - root - DEBUG - Helios: Reading value: outside_temp
                2017-02-20 23:57:57,090 - root - DEBUG - Helios: Sending telegram '0x1 0x2f 0x11                                                                                                              0x0 0x32 0x73 '
                2017-02-20 23:57:57,105 - root - DEBUG - Telegram received '0x1 0x11 0x2f 0x32 0                                                                                                             x81 0xf4 '
                2017-02-20 23:57:57,106 - root - DEBUG - Helios: Value received (raw data): outs                                                                                                             ide_temp = 0x81
                2017-02-20 23:57:57,106 - root - DEBUG - Helios: Value received (converted): out                                                                                                             side_temp = 9
                outside_temp = 9
                2017-02-20 23:57:57,107 - root - DEBUG - Helios: Reading value: boost_status
                2017-02-20 23:57:57,179 - root - DEBUG - Helios: Sending telegram '0x1 0x2f 0x11                                                                                                              0x0 0x71 0xb2 '
                2017-02-20 23:57:57,194 - root - DEBUG - Telegram received '0x1 0x11 0x2f 0x71 0                                                                                                             x0 0xb2 '
                2017-02-20 23:57:57,194 - root - DEBUG - Helios: Value received (raw data): boos                                                                                                             t_status = 0x0
                2017-02-20 23:57:57,195 - root - DEBUG - Helios: Value received (converted): boo                                                                                                             st_status = 0
                boost_status = 0
                2017-02-20 23:57:57,196 - root - DEBUG - Helios: Reading value: bypass_disabled
                2017-02-20 23:57:57,267 - root - DEBUG - Helios: Sending telegram '0x1 0x2f 0x11                                                                                                              0x0 0xa3 0xe4 '
                2017-02-20 23:57:57,282 - root - DEBUG - Telegram received '0x1 0x11 0x2f 0xa3 0                                                                                                             x9 0xed '
                2017-02-20 23:57:57,283 - root - DEBUG - Helios: Value received (raw data): bypa                                                                                                             ss_disabled = 0x9
                2017-02-20 23:57:57,284 - root - DEBUG - Helios: Value received (converted): byp                                                                                                             ass_disabled = 1
                bypass_disabled = 1
                2017-02-20 23:57:57,284 - root - DEBUG - Helios: Reading value: power_state
                2017-02-20 23:57:57,356 - root - DEBUG - Helios: Sending telegram '0x1 0x2f 0x11                                                                                                              0x0 0xa3 0xe4 '
                2017-02-20 23:57:57,371 - root - DEBUG - Telegram received '0x1 0x11 0x2f 0xa3 0                                                                                                             x9 0xed '
                2017-02-20 23:57:57,372 - root - DEBUG - Helios: Value received (raw data): powe                                                                                                             r_state = 0x9
                2017-02-20 23:57:57,372 - root - DEBUG - Helios: Value received (converted): pow                                                                                                             er_state = 1
                power_state = 1
                2017-02-20 23:57:57,373 - root - DEBUG - Helios: Reading value: clean_filter
                2017-02-20 23:57:57,445 - root - DEBUG - Helios: Sending telegram '0x1 0x2f 0x11                                                                                                              0x0 0xab 0xec '
                2017-02-20 23:57:57,460 - root - DEBUG - Telegram received '0x1 0x11 0x2f 0xab 0                                                                                                             x1 0xed '
                2017-02-20 23:57:57,460 - root - DEBUG - Helios: Value received (raw data): clea                                                                                                             n_filter = 0x1
                2017-02-20 23:57:57,461 - root - DEBUG - Helios: Value received (converted): cle                                                                                                             an_filter = 1
                clean_filter = 1
                2017-02-20 23:57:57,462 - root - DEBUG - Helios: Reading value: incoming_temp
                2017-02-20 23:57:57,534 - root - DEBUG - Helios: Sending telegram '0x1 0x2f 0x11                                                                                                              0x0 0x35 0x76 '
                2017-02-20 23:57:57,549 - root - DEBUG - Telegram received '0x1 0x11 0x2f 0x35 0                                                                                                             xa2 0x18 '
                2017-02-20 23:57:57,550 - root - DEBUG - Helios: Value received (raw data): inco                                                                                                             ming_temp = 0xa2
                2017-02-20 23:57:57,550 - root - DEBUG - Helios: Value received (converted): inc                                                                                                             oming_temp = 21
                incoming_temp = 21
                2017-02-20 23:57:57,551 - root - DEBUG - Helios: Reading value: min_fanspeed
                2017-02-20 23:57:57,623 - root - DEBUG - Helios: Sending telegram '0x1 0x2f 0x11                                                                                                              0x0 0xa9 0xea '
                2017-02-20 23:57:57,638 - root - DEBUG - Telegram received '0x1 0x11 0x2f 0xa9 0                                                                                                             x1 0xeb '
                2017-02-20 23:57:57,638 - root - DEBUG - Helios: Value received (raw data): min_                                                                                                             fanspeed = 0x1
                2017-02-20 23:57:57,639 - root - DEBUG - Helios: Value received (converted): min                                                                                                             _fanspeed = 1
                min_fanspeed = 1
                2017-02-20 23:57:57,640 - root - DEBUG - HeliosBase: Disconnecting...
                Ich erhalte allerdings nichts auf den Bus aber jede Menge Fehlermeldung mit denen ich leider nichts anfangen kann.

                Code:
                2017-02-21  00:29:56 WARNING  Main         --------------------   Init smarthomeNG 1.3.781.dev   --------------------
                2017-02-21  00:29:56 INFO     Main         Init Scheduler
                2017-02-21  00:29:56 INFO     Main         Init Plugins
                2017-02-21  00:29:56 WARNING  Main         CLI: You should set a password for this plugin.
                2017-02-21  00:29:57 INFO     Main         Init Items
                2017-02-21  00:29:58 WARNING  Main         Helios: Ignoring unknown variable 'heating_setpoint'
                2017-02-21  00:29:58 WARNING  Main         Helios: Ignoring unknown variable 'heating_on_off'
                2017-02-21  00:29:58 WARNING  Main         Helios: Ignoring unknown variable 'frost_stop'
                2017-02-21  00:29:58 WARNING  Main         Helios: Ignoring unknown variable 'cell_defrost'
                2017-02-21  00:29:58 WARNING  Main         Helios: Ignoring unknown variable 'fan_in_on_off'
                2017-02-21  00:29:58 WARNING  Main         Helios: Ignoring unknown variable 'fan_in_percent'
                2017-02-21  00:29:58 WARNING  Main         Helios: Ignoring unknown variable 'fan_out_on_off'
                2017-02-21  00:29:58 WARNING  Main         Helios: Ignoring unknown variable 'fan_out_percent'
                2017-02-21  00:29:58 WARNING  Main         Helios: Ignoring unknown variable 'boost_mode'
                2017-02-21  00:29:58 WARNING  Main         Helios: Ignoring unknown variable 'boost_on'
                2017-02-21  00:29:58 WARNING  Main         Helios: Ignoring unknown variable 'device_error'
                2017-02-21  00:29:58 INFO     Main         Items: 198
                2017-02-21  00:29:58 INFO     Main         Start Logics
                2017-02-21  00:29:59 INFO     Main         Start Plugins
                2017-02-21  00:30:08 WARNING  ventilation.thermal_energy.efficiency Item ventilation.thermal_energy.efficiency: problem evaluating round(sh.ventilation.thermal_energy.recovery() / sh.ventilation.thermal_energy.total_outgoing() * 100): division by zero
                2017-02-21  00:30:17 ERROR    Connections  _websocket: problem binding 0.0.0.0:2424 (TCP): [Errno 98] Die Adresse wird bereits verwendet
                2017-02-21  00:30:20 ERROR    Helios       Item ventilation.rs485._incoming_temp: problem running <bound method KNX.update_item of <plugins.knx.KNX object at 0x763354d0>>: 'int' object is not subscriptable
                Traceback (most recent call last):
                  File "/usr/local/smarthome/lib/item.py", line 477, in __update
                    method(self, caller, source, dest)
                  File "/usr/local/smarthome/plugins/knx/__init__.py", line 358, in update_item
                    self.groupwrite(ga, item(), item.conf['knx_dpt'])
                  File "/usr/local/smarthome/plugins/knx/__init__.py", line 79, in groupwrite
                    pkt.extend(self.encode(payload, dpt))
                  File "/usr/local/smarthome/plugins/knx/__init__.py", line 160, in encode
                    return dpts.encode[str(dpt)](data)
                  File "/usr/local/smarthome/plugins/knx/dpts.py", line 49, in en3
                    return [(int(vlist[0]) << 3) & 0x08 | int(vlist[1]) & 0x07]
                TypeError: 'int' object is not subscriptable
                2017-02-21  00:30:23 ERROR    Helios       Item ventilation.rs485._min_fanspeed: problem running <bound method KNX.update_item of <plugins.knx.KNX object at 0x763354d0>>: 'int' object is not subscriptable
                Traceback (most recent call last):
                  File "/usr/local/smarthome/lib/item.py", line 477, in __update
                    method(self, caller, source, dest)
                  File "/usr/local/smarthome/plugins/knx/__init__.py", line 358, in update_item
                    self.groupwrite(ga, item(), item.conf['knx_dpt'])
                  File "/usr/local/smarthome/plugins/knx/__init__.py", line 79, in groupwrite
                    pkt.extend(self.encode(payload, dpt))
                  File "/usr/local/smarthome/plugins/knx/__init__.py", line 160, in encode
                    return dpts.encode[str(dpt)](data)
                  File "/usr/local/smarthome/plugins/knx/dpts.py", line 49, in en3
                    return [(int(vlist[0]) << 3) & 0x08 | int(vlist[1]) & 0x07]
                TypeError: 'int' object is not subscriptable
                2017-02-21  00:30:23 ERROR    Helios       Item ventilation.rs485._bypass_disabled: problem running <bound method KNX.update_item of <plugins.knx.KNX object at 0x763354d0>>: 'int' object is not subscriptable
                Traceback (most recent call last):
                  File "/usr/local/smarthome/lib/item.py", line 477, in __update
                    method(self, caller, source, dest)
                  File "/usr/local/smarthome/plugins/knx/__init__.py", line 358, in update_item
                    self.groupwrite(ga, item(), item.conf['knx_dpt'])
                  File "/usr/local/smarthome/plugins/knx/__init__.py", line 79, in groupwrite
                    pkt.extend(self.encode(payload, dpt))
                  File "/usr/local/smarthome/plugins/knx/__init__.py", line 160, in encode
                    return dpts.encode[str(dpt)](data)
                  File "/usr/local/smarthome/plugins/knx/dpts.py", line 49, in en3
                    return [(int(vlist[0]) << 3) & 0x08 | int(vlist[1]) & 0x07]
                TypeError: 'int' object is not subscriptable
                2017-02-21  00:30:23 ERROR    Helios       Item ventilation.rs485._power_state: problem running <bound method KNX.update_item of <plugins.knx.KNX object at 0x763354d0>>: 'int' object is not subscriptable
                Traceback (most recent call last):
                  File "/usr/local/smarthome/lib/item.py", line 477, in __update
                    method(self, caller, source, dest)
                  File "/usr/local/smarthome/plugins/knx/__init__.py", line 358, in update_item
                    self.groupwrite(ga, item(), item.conf['knx_dpt'])
                  File "/usr/local/smarthome/plugins/knx/__init__.py", line 79, in groupwrite
                    pkt.extend(self.encode(payload, dpt))
                  File "/usr/local/smarthome/plugins/knx/__init__.py", line 160, in encode
                    return dpts.encode[str(dpt)](data)
                  File "/usr/local/smarthome/plugins/knx/dpts.py", line 49, in en3
                    return [(int(vlist[0]) << 3) & 0x08 | int(vlist[1]) & 0x07]
                TypeError: 'int' object is not subscriptable
                2017-02-21  00:30:23 ERROR    Helios       Item ventilation.rs485._max_fanspeed: problem running <bound method KNX.update_item of <plugins.knx.KNX object at 0x763354d0>>: 'int' object is not subscriptable
                Traceback (most recent call last):
                  File "/usr/local/smarthome/lib/item.py", line 477, in __update
                    method(self, caller, source, dest)
                  File "/usr/local/smarthome/plugins/knx/__init__.py", line 358, in update_item
                    self.groupwrite(ga, item(), item.conf['knx_dpt'])
                  File "/usr/local/smarthome/plugins/knx/__init__.py", line 79, in groupwrite
                    pkt.extend(self.encode(payload, dpt))
                  File "/usr/local/smarthome/plugins/knx/__init__.py", line 160, in encode
                    return dpts.encode[str(dpt)](data)
                  File "/usr/local/smarthome/plugins/knx/dpts.py", line 49, in en3
                    return [(int(vlist[0]) << 3) & 0x08 | int(vlist[1]) & 0x07]
                TypeError: 'int' object is not subscriptable
                2017-02-21  00:32:13 ERROR    Helios       Item ventilation.rs485._exhaust_temp: problem running <bound method KNX.update_item of <plugins.knx.KNX object at 0x763354d0>>: 'int' object is not subscriptable
                Traceback (most recent call last):
                  File "/usr/local/smarthome/lib/item.py", line 477, in __update
                    method(self, caller, source, dest)
                  File "/usr/local/smarthome/plugins/knx/__init__.py", line 358, in update_item
                    self.groupwrite(ga, item(), item.conf['knx_dpt'])
                  File "/usr/local/smarthome/plugins/knx/__init__.py", line 79, in groupwrite
                    pkt.extend(self.encode(payload, dpt))
                  File "/usr/local/smarthome/plugins/knx/__init__.py", line 160, in encode
                    return dpts.encode[str(dpt)](data)
                  File "/usr/local/smarthome/plugins/knx/dpts.py", line 49, in en3
                 return [(int(vlist[0]) << 3) & 0x08 | int(vlist[1]) & 0x07]
                TypeError: 'int' object is not subscriptable
                Kann damit jemand etwas anfangen?
                Vielen Dank
                Zuletzt geändert von Megen; 21.02.2017, 00:34.

                Kommentar


                  #9
                  bist du dir sicher, das alles richtig konfiguriert ist in den conf Dateien? Die Meldung _websocket: problem binding sollte eigentlich nicht kommen. Kannst du überhaupt irgendetwas schalten?

                  Gruß
                  Marcus

                  Kommentar


                    #10
                    Poste doch mal deine intems.conf. So wie es für mich aussieht, sind die Helios-Items nicht vorhanden oder falsch konfiguriert.

                    Kommentar


                      #11
                      Bitte das Plugin und die originale helios.conf aus dem aktuellen develop tree nehmen. Die Items am RS485 beginnen da mit _.
                      /tom

                      (sorry, bin gerade auf Reisen, kann nicht ausführlich antworten).
                      Zuletzt geändert von Tom Bombadil; 21.02.2017, 16:59.

                      Kommentar


                        #12

                        Meine Helios.conf hatte scheinbar wirklich einen Fehler. Habe diese nochmal neu aus deinem File genommen und angepasst.

                        Code:
                        # smarthome/items/helios.conf, version 1.0
                        # Item file for smarthome.py - Helios/Vallox ventilation unit control & visualization through RS485
                        # Use at own risk - ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law.
                        
                        [ventilation]
                        
                        
                        [[parameters]] # Settings - by default for Helios EC/ET 300 Pro; adjust as necessary
                        # ================================================== ========================================== #
                        
                        [[[house_volume]]]
                        name = Volumen des Hauses in m³ ("umbauter Raum", der von der Lüftung durchströmt wird)
                        type = num
                        # value = 546 # Original 'umbauter Raum' = 546; gem. Helios-Rechner aber nur 384
                        value = 384
                        visu_acl = r
                        
                        [[[max_airflow]]]
                        name = Maximaler Volumenstrom der KWL in m³ (siehe Anlagendoku)
                        type = num
                        # value = 360 # Default Helios EC/ET 300 Pro
                        value = 360
                        visu_acl = r
                        
                        [[[fanspeed_levels]]]
                        name = Anzahl der Schaltstufen der KWL (siehe Anlagendoku); wird z.Z. nicht verwendet
                        type = num
                        # value = 8 # Default Helios EC/ET 300 Pro
                        value = 8
                        visu_acl = r
                        
                        [[[airflow_per_mode]]]
                        name = Volumenstrom je Stufe in m³/h (siehe Anlagendoku); F7-Filter = jeweils -10%!
                        type = str
                        # value = "0 105 165 195 240 270 305 335 360" # Default Helios EC/ET 300 Pro
                        value = "0 105 165 195 240 270 305 335 360"
                        visu_acl = r
                        
                        [[[consumption_per_mode]]]
                        name = Verbrauch _beider_ Ventilatoren je Stufe in W (siehe Anlagendoku)
                        type = str
                        # value = "0 20 36 50 72 92 130 160 194" # Default Helios EC/ET 300 Pro
                        value = "0 20 36 50 72 92 130 160 194"
                        visu_acl = r
                        
                        [[[preheating_consumption]]]
                        name = Stromverbrauch der Vorheizung in W (siehe Anlagendoku)
                        type = num
                        # value = 1000 # Default Helios EC/ET 300 Pro
                        value = 1000
                        visu_acl = r
                        
                        [[[fWS]]]
                        name = DIN - Wärmeschutzfaktor; 0,3 für Haus mit Wärmeschutzdämmung, sonst 0,4
                        type = num
                        # value = 0.3
                        value = 0.3
                        visu_acl = r
                        
                        [[[[daemmung]]]]
                        name = Haustyp gem. Wärmeschutzdämmung # nicht ändern, wird automatisch gesetzt
                        type = str
                        visu_acl = r
                        eval = "gedämmt" if (sh.ventilation.parameters.fWS()<0.4) else "teil-/ungedämmt"
                        eval_trigger = ventilation.parameters.fWS
                        
                        [[[Ane]]]
                        name = DIN - Fläche (A) der Nutzungseinheit (ne) in m²
                        type = num
                        # value = 143 # Lüftungsrelevante Nutzfläche des Hauses
                        value = 143
                        visu_acl = r
                        
                        
                        [[logics_settings]] # sh.py/logics/helios_logics.py - Booster ("Stoßlüftung") settings
                        # ================================================== ========================================== #
                        
                        [[[boost_mode]]] # 1=Helios default, 2=Logic with fixed values, 3=Logic (interactive Popup)
                        name = Setting for booster
                        type = num
                        value = 3
                        visu_acl = r
                        
                        [[[boost_fanspeed]]]
                        name = Setting for booster - speed for logic with fixed values (only for boost_mode 2)
                        type = num
                        value = 8
                        visu_acl = r
                        
                        [[[boost_time]]]
                        name = Setting for booster - duration for logic with fixed values (only for boost_mode 2)
                        type = num
                        # value = 2700 # 45 minutes * 60 seconds = 2700 seconds
                        value = 2700
                        visu_acl = r
                        
                        
                        # ================================================== ========================================== #
                        # Don't modify items below unless you know what you're doing #
                        # ================================================== ========================================== #
                        
                        
                        [[uzsu]] # UZSU - Universelle Zeit Schalt Uhr
                        # ================================================== ========================================== #
                        
                        [[[fanspeed_uzsu]]]
                        name = Zeitschaltuhr: Hilfsitem für Tests
                        type = num
                        visu_acl = rw
                        
                        [[[uzsu_timer]]]
                        name = Universelle ZeitSchaltUhr: Hauptitem
                        type = dict
                        uzsu_item = ventilation.uzsu.fanspeed_uzsu
                        cache = True
                        visu_acl = rw
                        
                        
                        [[rs485]] # Connectors to the plugin values
                        # ================================================== ========================================== #
                        
                        [[[_power_state]]]
                        name = Anlage an / aus
                        type = num
                        helios_var = power_state
                        visu_acl = rw
                        knx_dpt = 3
                        knx_send = 0/3/3
                        knx_listen = 0/3/18 # sofern erforderlich, siehe visu_acl; Temperaturen setzen macht z.B. keinen Sinn
                        
                        
                        
                        [[[_bypass_disabled]]]
                        name = Sommerbypass an / aus
                        type = num
                        helios_var = bypass_disabled
                        visu_acl = rw
                        knx_dpt = 3
                        knx_send = 0/3/14
                        knx_listen = 0/3/19 # sofern erforderlich, siehe visu_acl; Temperaturen setzen macht z.B. keinen Sinn
                        
                        
                        
                        [[[_bypass_setpoint]]]
                        name = Temperatur für automatische Umschaltung des Sommerbypasses
                        type = num
                        helios_var = bypass_temp
                        visu_acl = r
                        
                        [[[_outside_temp]]]
                        name = DIN/EN: Außenluft, outdoor air / ODA, grün; Luft von draussen
                        type = num
                        helios_var = outside_temp
                        visu_acl = r
                        sqlite = yes
                        # rrd = yes
                        # rrd_min = yes
                        # rrd_max = yes
                        knx_dpt = 3
                        knx_send = 0/3/5
                        
                        
                        # Achtung: Bei starkem Frost wird der Zuluftventilator automatisch gestoppt.
                        # In diesem Fall weicht die 'outside_temp' von der tatsächlichen Außentemperatur
                        # stark ab, da keine Frischluft mehr in die Anlage geführt wird.
                        # (Erwärmung des WT Anlage durch die Raumtemperatur sowie durch die ggf. gerade
                        # abkühlende Vorheizung verfälschen dann die Werte)
                        
                        [[[_incoming_temp]]]
                        name = DIN/EN: Zuluft, supply air / SUP, blau; Luft in die Räume
                        type = num
                        helios_var = incoming_temp
                        visu_acl = r
                        sqlite = yes
                        # rrd = yes
                        # rrd_min = yes
                        # rrd_max = yes
                        knx_dpt = 3
                        knx_send = 0/3/6
                        
                        [[[_inside_temp]]]
                        name = DIN/EN: Abluft, extract air / ETA, gelb; Luft aus den Räumen
                        type = num
                        cache = true # schmeisst sonst beim Start Fehler div/0 bei Berechnungen
                        helios_var = inside_temp
                        visu_acl = r
                        sqlite = yes
                        # rrd = yes
                        # rrd_min = yes
                        # rrd_max = yes
                        knx_dpt = 3
                        knx_send = 0/3/7
                        
                        [[[_exhaust_temp]]]
                        name = DIN/EN: Fortluft, exhaust air, braun; Luft nach draussen
                        type = num
                        helios_var = exhaust_temp
                        visu_acl = r
                        sqlite = yes
                        # rrd = yes
                        # rrd_min = yes
                        # rrd_max = yes
                        knx_dpt = 3
                        knx_send = 0/3/8
                        
                        [[[_heating_on_off]]]
                        name = Vorheizung ein
                        type = num
                        visu_acl = rw
                        helios_var = heating_on_off
                        sqlite = yes
                        # rrd = yes
                        # rrd_min = yes
                        # rrd_max = yes
                        
                        [[[_heating_setpoint]]]
                        name = Einschalttemperatur Vorheizung
                        type = num
                        visu_acl = rw
                        helios_var = heating_setpoint
                        
                        [[[_frost_setpoint]]]
                        name = Frostschutztemperatur - Zuluft aus unter dieser Temperatur
                        type = num
                        visu_acl = rw
                        helios_var = frost_stop
                        
                        [[[_frost_hysteresis]]]
                        name = Hysteresetemperatur Frostschutz, 0x03 ~ 1°C
                        type = num
                        visu_acl = rw
                        helios_var = cell_defrost
                        
                        [[[_min_fanspeed]]]
                        name = Lüftungerstufe min (EC300Pro: 1..8)
                        type = num
                        helios_var = min_fanspeed
                        visu_acl = rw
                        knx_dpt = 3
                        knx_send = 0/3/1
                        
                        
                        [[[_max_fanspeed]]]
                        name = Lüftersufe max (EC300Pro: 1..8)
                        type = num
                        helios_var = max_fanspeed
                        visu_acl = rw
                        knx_dpt = 3
                        knx_send = 0/3/2
                        
                        
                        [[[_fanspeed]]]
                        name = Aktuelle Lüftungsstufe (EC300Pro: 1..8)
                        type = num
                        helios_var = fanspeed
                        visu_acl = rw
                        sqlite = yes
                        # rrd = yes
                        # rrd_min = yes
                        # rrd_max = yes
                        knx_dpt = 3
                        knx_send = 0/3/8
                        
                        [[[_fan_in_on_off]]]
                        name = Ausschaltregister (1=aus); u.a. vom Frostschutz benutzt; ggf zweifach beschreiben
                        type = num
                        helios_var = fan_in_on_off
                        visu_acl = rw
                        
                        [[[_fan_in_percent]]]
                        name = Stellwert für Motordrehzahl Zuluft in %
                        type = num
                        helios_var = fan_in_percent
                        visu_acl = rw
                        sqlite = yes
                        # rrd = yes
                        # rrd_min = yes
                        # rrd_max = yes
                        
                        [[[_fan_out_on_off]]]
                        name = Ausschaltregister (1=aus); ggf zweifach beschreiben
                        type = num
                        helios_var = fan_out_on_off
                        visu_acl = rw
                        
                        [[[_fan_out_percent]]]
                        name = Stellwert für Motordrehzahl Abluft in %
                        type = num
                        helios_var = fan_out_percent
                        visu_acl = rw
                        sqlite = yes
                        # rrd = yes
                        # rrd_min = yes
                        # rrd_max = yes
                        
                        [[[_boost_on]]]
                        name = Stoßlüftung ein (Anlage setzt selbstständig zurück)
                        type = bool
                        helios_var = boost_on
                        visu_acl = rw
                        
                        [[[_boost_mode]]]
                        name = Grundeinstellung: 0=Kaminlüftung ("Anheizen"), 1=Stoßlüftung
                        type = num
                        helios_var = boost_mode
                        visu_acl = rw
                        
                        [[[_boost_status]]] # Wird in den Logiken nicht verwendet???? --> prüfen
                        name = Aktueller Status
                        type = bool
                        helios_var = boost_status
                        visu_acl = r
                        
                        [[[_boost_remaining]]]
                        name = Verbleibende Minuten bei aktivierter Stoßlüftung
                        type = num
                        helios_var = boost_remaining
                        visu_acl = r
                        
                        [[[_clean_filter]]]
                        name = Verbleibende Zeit für Filterreinigung in Monaten
                        type = num
                        helios_var = clean_filter
                        visu_acl = rw
                        
                        [[[_device_error]]]
                        name = Aus der KWL ausgelesener Fehlercode
                        type = num
                        helios_var = device_error
                        visu_acl = r
                        e0 = "0:Kein Fehler:Kein Fehlertext:Keine Fehlerbehebung" # Format = ErrNo:Name:Description:Countermeasures
                        e1 = "1:?:?:?"
                        e2 = "2:?:?:?"
                        e3 = "3:?:?:?"
                        e4 = "4:?:?:?"
                        e5 = "5:Zuluftsensor defekt:Fühler lose, Kurzschluss <br/>oder Temperatur >90°C gemessen:Gerätestecker ziehen (ausschalten), kurz warten und wieder einstecken"
                        e6 = "6:CO2-Alarm:CO2-Wert >5.000 ppm seit mehr als 3 Minuten:Ursache ermitteln oder ggf. Sensor überprüfen lassen."
                        e7 = "7:Außenluftsensor defekt:Fühler lose, Kurzschluss oder Temperatur >90°C gemessen:Gerätestecker ziehen (ausschalten), kurz warten und wieder einstecken"
                        e8 = "8:Abluftsensor defekt:Fühler lose, Kurzschluss oder Temperatur >90°C gemessen:Gerätestecker ziehen (ausschalten), kurz warten und wieder einstecken"
                        e9 = "9:Frostwarnung:Außenluft <0°C und Zuluft <8°C - Frostgefahr am Wärmetauscher:Der Alarm verschwindet automatisch bei normalisierten Temperaturen"
                        e10 = "10:Fortluftsensor defekt:Fühler lose, Kurzschluss oder Temperatur >90°C gemessen:Gerätestecker ziehen (ausschalten), kurz warten und wieder einstecken"
                        
                        
                        [[heating]] # Fresh air heating ("pre-heating")
                        # ================================================== ========================================== #
                        
                        # hier noch prüfen, was passiert, wenn der Frostschutz greift (angeblich Motor aus = Heizung aus)
                        [[[is_on]]]
                        name = Pre-heating on --> 1
                        type = num
                        eval = "(sh.ventilation.rs485._heating_on_off() and sh.ventilation.rs485._power_state())"
                        eval_trigger = ventilation.rs485._heating_on_off | ventilation.rs485._power_state
                        
                        [[[[as_text]]]]
                        name = Item als formatierter Text
                        type = str
                        eval = "'An' if sh.ventilation.heating.is_on() else 'Aus'"
                        eval_trigger = ventilation.heating.is_on
                        
                        [[[setpoint]]]
                        
                        [[[[as_text]]]]
                        name = Item als formatierter Text
                        type = str
                        eval = "str(int(sh.ventilation.rs485._heating_setpoin t()) ) + '°C'"
                        eval_trigger = ventilation.rs485._heating_setpoint
                        
                        
                        [[frost_protection]] # Fresh air fan auto-stop (frost)
                        # ================================================== ========================================== #
                        
                        [[[is_on]]] ### hier evtl. noch Logikfehler --> wird wieder 1, wenn setpoint überschritten, aber hysterese noch nicht erreicht ist; Test mit neuem eval_trigger
                        name = Frost-protection on --> 1
                        type = num
                        eval = 1 if ((sh.ventilation.rs485._exhaust_temp()<=sh.ventila tion.rs485._frost_setpoint()) and not sh.ventilation.fans.supply.is_on()) else 0
                        # eval_trigger = ventilation.rs485._exhaust_temp | ventilation.rs485._frost_setpoint | ventilation.fans.supply.is_on
                        eval_trigger = ventilation.rs485._frost_setpoint | ventilation.fans.supply.is_on
                        
                        [[[[as_text]]]]
                        name = Item als formatierter Text
                        type = str
                        eval = "'An' if sh.ventilation.frost_protection.is_on() else 'Aus'"
                        eval_trigger = ventilation.frost_protection.is_on
                        
                        [[[setpoint]]] # ---> ventilation.rs485._frost_setpoint
                        
                        [[[[as_text]]]]
                        name = Item als formatierter Text
                        type = str
                        eval = "str(int(sh.ventilation.rs485._frost_setpoint( ))) + '°C'"
                        eval_trigger = ventilation.rs485._frost_setpoint
                        
                        [[[hysteresis]]] # ---> ventilation.rs485._frost_hysteresis
                        
                        [[[[celsius]]]]
                        name = Umrechnung # 03h ~ 1°C
                        type = num
                        eval = "sh.ventilation.rs485._frost_hysteresis() / 3"
                        eval_trigger = ventilation.rs485._frost_hysteresis
                        
                        [[[[[as_text]]]]]
                        name = Item als formatierter Text
                        type = str
                        eval = "str(int(sh.ventilation.frost_protection.hyste resi s.celsius())) + '°C'"
                        eval_trigger = ventilation.frost_protection.hysteresis.celsius
                        
                        [[[end_setpoint]]]
                        name = Ausschalttemperatur Fostschutz
                        type = num
                        eval = "sh.ventilation.rs485._frost_setpoint() + (sh.ventilation.rs485._frost_hysteresis() / 3)"
                        eval_trigger = sh.ventilation.frost_protection.setpoint | ventilation.frost_protection.hysteresis.celsius
                        
                        [[[[as_text]]]]
                        name = Item als formatierter Text
                        type = str
                        eval = "str(int(sh.ventilation.frost_protection.end_s etpo int())) + '°C'"
                        eval_trigger = ventilation.frost_protection.end_setpoint
                        
                        
                        [[fans]] # Fans
                        # ================================================== ========================================== #
                        # Hinweis: Für 0..10V-Signal sollten in den evals entsprechende Formeln gesetzt werden.
                        # Die anliegende Spannung ist im Register 2EH als Wert 0..FFh gespeichert.
                        
                        [[[supply]]] # Fresh air
                        
                        [[[[is_on]]]]
                        name = Lüfter ist wirklich an
                        # type = num ### rene 12/2016: Diagramme falsch
                        type = bool
                        eval = "0 if (sh.ventilation.rs485._fan_in_on_off()==1 or sh.ventilation.rs485._power_state()==0) else 1"
                        eval_trigger = ventilation.rs485._fan_in_on_off | ventilation.rs485._power_state
                        sqlite = yes
                        # rrd = yes
                        # rrd_min = yes
                        # rrd_max = yes
                        
                        [[[[[as_text]]]]]
                        name = Item als formatierter Text
                        type = str
                        # eval = "'An' if sh.ventilation.fans.supply.is_on()==1 else 'Aus'"
                        eval = "'An' if sh.ventilation.fans.supply.is_on() else 'Aus'"
                        eval_trigger = ventilation.fans.supply.is_on
                        
                        [[[[percent]]]] # ---> ventilation.rs485._fan_in_percent
                        
                        [[[[[as_text]]]]]
                        name = Item als formatierter Text
                        type = str
                        eval = "str(int(sh.ventilation.rs485._fan_in_percent( ))) + '%'"
                        eval_trigger = ventilation.rs485._fan_in_percent
                        
                        [[[[[effective]]]]]
                        name = Tatsächliche Drehzahl in % unter Berücksichtigung von an/aus
                        type = num
                        visu_acl = rw
                        eval = "sh.ventilation.rs485._fan_in_percent() * int(sh.ventilation.fans.supply.is_on())" ### int hinzugefügt
                        eval_trigger = ventilation.rs485._fan_in_percent | ventilation.fans.supply.is_on # | ventilation.rs485._fanspeed | ventilation.rs485._exhaust_temp
                        
                        [[[[[[as_text]]]]]]
                        name = Item als formatierter Text
                        type = str
                        eval = "str(int(sh.ventilation.fans.supply.percent.ef fect ive())) + '%'"
                        eval_trigger = ventilation.fans.supply.percent.effective
                        
                        [[[[info1]]]]
                        name = Zuluftmotor Infotext - Status, Luftvolumen
                        visu_acl = r
                        type = str
                        eval = "sh.ventilation.fans.supply.is_on.as_text() + ', ' + sh.ventilation.power.supply_fan.effective.as_text( )"
                        # eval_trigger = ventilation.rs485._fanspeed | ventilation.rs485._fan_in_percent | ventilation.fans.supply.is_on
                        eval_trigger = ventilation.fans.supply.is_on.as_text | ventilation.power.supply_fan.effective.as_text
                        
                        [[[[info2]]]]
                        name = Zuluftmotor Infotext - Drosselung, Verbrauch
                        visu_acl = r
                        type = str
                        eval = "sh.ventilation.airflow.supply_fan.effective.a s_te xt() + ' (' + sh.ventilation.fans.supply.percent.effective.as_te xt() + ')'"
                        # eval_trigger = ventilation.rs485._fanspeed ventilation.rs485._fan_in_percent | ventilation.fans.supply.is_on
                        eval_trigger = ventilation.airflow.supply_fan.effective.as_text | ventilation.fans.supply.percent.effective.as_text
                        
                        [[[exhaust]]] # Exhaust air
                        
                        [[[[is_on]]]]
                        name = Lüfter ist wirklich an
                        type = num
                        eval = "0 if (sh.ventilation.rs485._fan_out_on_off()==1 or sh.ventilation.rs485._power_state()==0) else 1"
                        eval_trigger = ventilation.rs485._fan_out_on_off | ventilation.rs485._power_state
                        sqlite = yes
                        # rrd = yes
                        # rrd_min = yes
                        # rrd_max = yes
                        
                        [[[[[as_text]]]]]
                        name = Item als formatierter Text
                        type = str
                        eval = "'An' if sh.ventilation.fans.exhaust.is_on()==1 else 'Aus'"
                        eval_trigger = ventilation.fans.exhaust.is_on
                        
                        [[[[percent]]]] # ---> ventilation.rs485._fan_out_percent
                        
                        [[[[[as_text]]]]]
                        name = Item als formatierter Text
                        type = str
                        eval = "str(int(sh.ventilation.rs485._fan_out_percent ())) + '%'"
                        eval_trigger = ventilation.rs485._fan_out_percent
                        
                        [[[[[effective]]]]]
                        name = Tatsächliche Drehzahl in % unter Berücksichtigung von an/aus
                        type = num
                        visu_acl = rw
                        eval = "sh.ventilation.rs485._fan_out_percent() * sh.ventilation.fans.exhaust.is_on()"
                        eval_trigger = ventilation.rs485._fan_out_percent | ventilation.fans.exhaust.is_on # | ventilation.rs485._fanspeed
                        
                        [[[[[[as_text]]]]]]
                        name = Item als formatierter Text
                        type = str
                        eval = "str(int(sh.ventilation.fans.exhaust.percent.e ffec tive())) + '%'"
                        eval_trigger = ventilation.fans.exhaust.percent.effective
                        
                        [[[[info1]]]]
                        name = Fortluftmotor Infotext - Status, Luftvolumen
                        visu_acl = r
                        type = str
                        eval = "sh.ventilation.fans.exhaust.is_on.as_text() + ', ' + sh.ventilation.power.exhaust_fan.effective.as_text ()"
                        eval_trigger = ventilation.fans.exhaust.is_on.as_text | ventilation.power.exhaust_fan.effective.as_text
                        
                        [[[[info2]]]]
                        name = Fortluftmotor Infotext - Drosselung, Verbrauch
                        visu_acl = r
                        type = str
                        eval = "sh.ventilation.airflow.exhaust_fan.effective. as_t ext() + ' (' + sh.ventilation.fans.exhaust.percent.effective.as_t ext() + ')'"
                        eval_trigger = ventilation.airflow.exhaust_fan.effective.as_text | ventilation.fans.exhaust.percent.effective.as_text
                        
                        [[[both]]]
                        
                        [[[[power_consumption]]]]
                        name = Stromverbrauch beider Ventilatoren
                        type = num
                        visu_acl = r
                        eval = sh.ventilation.power.supply_fan.effective() + sh.ventilation.power.exhaust_fan.effective()
                        eval_trigger = ventilation.power.supply_fan.effective | ventilation.power.exhaust_fan.effective
                        
                        [[[[[as_text]]]]]
                        name = Item als formatierter Text
                        type = str
                        eval = "str(int(sh.ventilation.fans.both.power_consum ptio n())) + 'W'"
                        eval_trigger = ventilation.fans.both.power_consumption
                        
                        [[[[level_info]]]]
                        name = Kombinierte Anzeige der Lüftungsstufen (aktuell / min ... max)
                        visu_acl = r
                        type = str
                        eval = str(sh.ventilation.rs485._fanspeed()) + ' (' + str(sh.ventilation.rs485._min_fanspeed()) + '..' + str(sh.ventilation.rs485._max_fanspeed()) + ')'
                        eval_trigger = ventilation.rs485._fanspeed | ventilation.rs485._min_fanspeed | ventilation.rs485._max_fanspeed
                        
                        
                        [[booster]] # Booster (built-in and logic-triggered)
                        # ================================================== ========================================== #
                        
                        [[[built_in]]]
                        name = Original-Stoßlueftung der Anlagen-Firmware
                        type = num
                        
                        [[[[mode]]]]
                        name = Stoss- oder Kaminlueftung
                        type = str
                        eval = "'Stoßlüftung' if sh.ventilation.rs485._boost_mode() else 'Kaminlüftung'"
                        eval_trigger = ventilation.rs485._boost_mode
                        
                        [[[logics]]]
                        name = Logikgesteuerte Stosslueftung
                        type = foo
                        
                        [[[[switch]]]]
                        name = Stosslueftung an aus
                        type = bool
                        visu_acl = rw
                        
                        [[[[level]]]]
                        name = Stufe waehrend Stosslueftung
                        type = num
                        value = 8
                        visu_acl = rw
                        
                        [[[[value_after_boost]]]]
                        name = Stufe nach Stosslueftung
                        type = num
                        visu_acl = rw
                        
                        [[[[boost_duration]]]]
                        name = Dauer der Stosslueftung
                        type = num
                        value = 2700
                        visu_acl = rw
                        
                        [[[[fireplace_duration]]]]
                        name = Kaminfunktion ja nein
                        type = num
                        value = 0
                        visu_acl = rw
                        
                        [[[[remaining]]]]
                        name = Verbleibende Zeit
                        type = num
                        value = 10
                        visu_acl = r
                        
                        [[[boost_remaining_a]]]
                        # name = Verbleibende Stosslüftungszeit - Logik 1
                        type = num
                        # eval_trigger = ventilation.booster.logics.boost_duration # muss was anderes sein
                        eval = __import__('math').ceil(sh.ventilation.booster.log ics.boost_duration()/60) # funktioniert, aber item noch korrigieren --> nur bei boost true
                        
                        
                        [[bypass]] # Summer bypass
                        # ================================================== ========================================== #
                        
                        [[[is_on]]]
                        name = Summer bypass on --> 1
                        type = num
                        eval = "1 if (sh.ventilation.rs485._bypass_disabled()==0) else 0"
                        eval_trigger = ventilation.rs485._bypass_disabled
                        
                        [[[[as_text]]]]
                        name = Item als formatierter Text
                        type = str
                        eval = "'an' if sh.ventilation.bypass.is_on() else 'aus'"
                        eval_trigger = ventilation.bypass.is_on
                        
                        [[[setpoint]]] # ---> ventilation.rs485._frost_setpoint
                        
                        [[[[as_text]]]]
                        name = Item als formatierter Text
                        type = str
                        eval = "str(int(sh.ventilation.rs485._bypass_setpoint ())) + '°C'"
                        eval_trigger = ventilation.rs485._bypass_setpoint
                        
                        [[[heat_recovery]]]
                        name = Wärmerückgewinnung an
                        type = num
                        eval = sh.ventilation.rs485._bypass_disabled()
                        eval_trigger = ventilation.rs485._bypass_disabled
                        
                        [[[[as_text]]]]
                        name = Item als formatierter Text
                        type = str
                        eval = "'an' if sh.ventilation.bypass.heat_recovery() else 'aus'"
                        eval_trigger = ventilation.bypass.heat_recovery
                        
                        [[alarms]] # Device errors, alarms, filter change
                        # ================================================== ========================================== #
                        
                        [[[last_error]]]
                        name = Aktueller Fehler
                        type = str
                        value = "'':'':'':''"
                        eval = str(eval("sh.ventilation.rs485._device_error.conf['e" + str(sh.ventilation.rs485._device_error()) + "']"))
                        eval_trigger = ventilation.rs485._device_error
                        
                        [[[[cose]]]]
                                        name = Code des aktuellen Fehlers
                                        type = str
                                        name = Bezeichnung des aktuellen Fehlers
                                        type = str
                                        value = ""
                                        eval = self.return_parent()().split(':')[0]
                                        eval_trigger = ventilation.alarms.last_error
                        
                                    [[[[description]]]]
                                        name = Bezeichnung des aktuellen Fehlers
                                        type = str
                                        value = ""
                                        eval = self.return_parent()().split(':')[1]
                                        eval_trigger = ventilation.alarms.last_error
                        
                                    [[[[cause]]]]
                                        name = Ursache des aktuellen Fehlers
                                        type = str
                                        value = ""
                                        eval = self.return_parent()().split(':')[2]
                                        eval_trigger = ventilation.alarms.last_error
                        
                                    [[[[solution]]]]
                                        name = Behebung des aktuellen Fehlers
                                        type = str
                                        value = ""
                                        eval = self.return_parent()().split(':')[3]
                                        eval_trigger = ventilation.alarms.last_error
                        
                                [[[filter_warning]]]
                        
                        
                            [[airflow]]            # Input / output air flow and air exchange rate
                            # ============================================================================================ #
                        
                                [[[supply_fan]]]
                                    name = Luftdurchsatz in m³ gem. Messung oder Ventilatorkurve
                                    type = num
                                    visu_acl = r
                                    eval = sh.ventilation.parameters.airflow_per_mode().split()[int(sh.ventilation.rs485._fanspeed())]
                                    eval_trigger = ventilation.rs485._fanspeed | ventilation.fans.supply.is_on | ventilation.rs485._fan_in_percent
                        
                                    [[[[effective]]]]
                                        name = Tatsächlicher Luftdurchsatz (Drosselung berücksichtigt)
                                        type = num
                                        visu_acl = r
                                        eval = "sh.ventilation.airflow.supply_fan() * sh.ventilation.fans.supply.percent.effective() / 100"
                                        eval_trigger = ventilation.airflow.supply_fan  | ventilation.fans.supply.percent.effective
                                        sqlite = yes    
                                        # rrd = yes
                                        # rrd_min = yes
                                        # rrd_max = yes
                        
                                        [[[[[as_text]]]]]
                                            name = Item als formatierter Text
                                            type = str
                                            eval = "str(int(sh.ventilation.airflow.supply_fan.effective())) + 'm³/h'"
                                            eval_trigger = ventilation.airflow.supply_fan.effective
                        
                                [[[exhaust_fan]]]
                                    name = Luftdurchsatz in m³ gem. Ventilatorkurve
                                    type = num
                                    visu_acl = r
                                    eval = sh.ventilation.parameters.airflow_per_mode().split()[int(sh.ventilation.rs485._fanspeed())]
                                    eval_trigger = ventilation.rs485._fanspeed | ventilation.fans.exhaust.is_on | ventilation.rs485._fan_out_percent
                        
                                    [[[[effective]]]]
                                        name = Tatsächlicher Luftdurchsatz (Drosselung berücksichtigt)
                                        type = num
                                        visu_acl = r
                                        eval = "sh.ventilation.airflow.exhaust_fan() * sh.ventilation.fans.exhaust.percent.effective() / 100"
                                        eval_trigger = ventilation.airflow.exhaust_fan | ventilation.fans.exhaust.percent.effective
                                        sqlite = yes    
                                        # rrd = yes
                                        # rrd_min = yes
                                        # rrd_max = yes
                        
                                        [[[[[as_text]]]]]
                                            name = Item als formatierter Text
                                            type = str
                                            eval = "str(int(sh.ventilation.airflow.exhaust_fan.effective())) + 'm³/h'"
                                            eval_trigger = ventilation.airflow.exhaust_fan.effective
                        
                                [[[air_exchange_rate]]]
                                    name = Luftaustauschrate
                                    type = num
                                    visu_acl = r
                                    eval = "round(sh.ventilation.airflow.supply_fan.effective()/sh.ventilation.parameters.house_volume(), 2)"
                                    eval_trigger = ventilation.airflow.supply_fan.effective
                        
                        
                                [[[DIN]]]         # Recommended air echange volumes for your house in m³/h as per DIN 1946-6
                                # ======================================================================================== #
                        
                                # Die KWL sollte so ausgelegt sein, dass sie einen Luftaustausch zwischen
                                # Feuchteschutz (min) und Intensivlüftung (max) gewährleistet.
                                #
                                # Beispiel für eine Gebäudefläche von 280 m² in einem gedämmten Gebäude:
                                # Feuchteschutz = 0,3 *(-0,001*280² + 1,15*280+20) = 0,3*(-78,4+322+20) = 79,08
                                # Nennlüftung = -0,001*280² + 1,15*280+20 = 263,6
                                # Reduzierte Lüftung = 0,7 *(-0,001*280² + 1,15*280+20) = 184,52
                                # Intensivlüftung = 1,15 *(-0,001*280² + 1,15*280+20) = 303,14
                                # Für Auslegung nach DIN wird also KWL benötigt, die zwischen 80m³/h und 300 m³/h liefert.    
                                #
                                # Die errechneten Werte wurden mit denen des Helios Auslegungsprogramms verglichen.
                                # Die beiden wichtigsten Werte (Feuchteschutz, Intensivlüftung) sind zu 100% identisch.
                                # Die beiden anderen Werte (reduzierte Lüftung, Nennlüftung) weichen leicht ab (~10%).
                                # Grund ist vermutlich, dass das Helios-Auslegungsprogramm sowohl Volumina als auch
                                # Hausgeometrie berücksichtigt, die DIN-Formeln aber nur pauschale Flächen. Die Abweichungen
                                # waren aber unwesentlich (dieses Plugin errechnet ~15 m³/h mehr Luftaustausch als Helios).
                                #
                                # Eigene Berechnungen im Auslegungsassistenten unter:
                                # https://www.kwleasyplan.de/Erstellen-Sie-Ihr-Angebot/2.html?lang=de&stland=de&nav=auslegung
                                #
                                # unklar ist --> Wieso berechnet die DIN nach Fläche statt Volumen???
                        
                                    [[[[moisture_protection]]]]        # Mindestlüftung für Feuchteschutz in m³/h (nach DIN)
                                        name = Feuchteschutz           # fWS * (-0,001 * Ane² + 1,15 * Ane + 20)
                                        type = num
                                        visu_acl = r
                                        eval = "round(sh.ventilation.parameters.fWS() * (-0.001 * (sh.ventilation.parameters.Ane()*sh.ventilation.parameters.Ane()) + 1.15 * sh.ventilation.parameters.Ane() + 20))"
                                        eval_trigger = ventilation.parameter.ane | ventilation.parameters.fWS
                        
                                        [[[[[air_exchange_rate]]]]]
                                            name = Luftaustauschrate bei Feuchteschutz
                                            type = num
                                            visu_acl = r
                                            eval = "round(sh.ventilation.airflow.DIN.moisture_protection()/sh.ventilation.parameters.house_volume(), 2)"
                                            eval_trigger = ventilation.airflow.DIN.moisture_protection
                        
                                    [[[[reduced_air_exchange]]]]       # Reduzierte Lüftung in m³/h (nach DIN)
                                        name = Reduzierte Lüftung      # 0,7 * (-0,001 * Ane² + 1,15 * Ane + 20)
                                        type = num
                                        visu_acl = r
                                        eval = "round(0.7 * (-0.001 * (sh.ventilation.parameters.Ane()*sh.ventilation.parameters.Ane()) + 1.15 * sh.ventilation.parameters.Ane() + 20))"
                                        eval_trigger = ventilation.parameter.ane
                        
                                        [[[[[air_exchange_rate]]]]]
                                            name = Luftaustauschrate bei reduzierter Lüftung
                                            type = num
                                            visu_acl = r
                                            eval = "round(sh.ventilation.airflow.DIN.reduced_air_exchange()/sh.ventilation.parameters.house_volume(), 2)"
                                            eval_trigger = ventilation.airflow.DIN.reduced_air_exchange
                        
                                    [[[[normal_air_exchange]]]]        # Nennlüftung in m³/h (nach DIN)
                                        name = Nennlüftung             # -0,001 * Ane² + 1,15 * Ane + 20
                                        type = num
                                        visu_acl = r
                                        eval = "round(-0.001 * (sh.ventilation.parameters.Ane()*sh.ventilation.parameters.Ane()) + 1.15 * sh.ventilation.parameters.Ane() + 20)"
                                        eval_trigger = ventilation.parameter.ane
                        
                                        [[[[[air_exchange_rate]]]]]
                                            name = Luftaustauschrate bei Nennlüftung
                                            type = num
                                            visu_acl = r
                                            eval = "round(sh.ventilation.airflow.DIN.normal_air_exchange()/sh.ventilation.parameters.house_volume(), 2)"
                                            eval_trigger = ventilation.airflow.DIN.normal_air_exchange
                        
                                    [[[[boost_air_exchange]]]]         # Intensivlüftung in m³/h (nach DIN)
                                        name = Intensivlüftung         # 1,15 * (-0,001 * Ane² + 1,15 * Ane + 20)
                                        type = num
                                        visu_acl = r
                                        eval = "round(1.15 * (-0.001 * (sh.ventilation.parameters.Ane()*sh.ventilation.parameters.Ane()) + 1.15 * sh.ventilation.parameters.Ane() + 20))"
                                        eval_trigger = ventilation.parameter.ane
                        
                                        [[[[[air_exchange_rate]]]]]
                                            name = Luftaustauschrate bei Intensivlüftung
                                            type = num
                                            visu_acl = r
                                            eval = "round(sh.ventilation.airflow.DIN.boost_air_exchange()/sh.ventilation.parameters.house_volume(), 2)"
                                            eval_trigger = ventilation.airflow.DIN.boost_air_exchange
                        
                        
                            [[thermal_efficiency]] # Efficiency calculations - interpret with care
                            # ============================================================================================ #
                        
                                [[[energy_lost]]]
                                    name = Verlustwärme
                                    type = num
                                    visu_acl = r
                                    eval = "round(1.005 * 1.024 / 3.6 * sh.ventilation.airflow.exhaust_fan.effective() * (sh.ventilation.rs485._inside_temp() - sh.ventilation.rs485._incoming_temp()))"
                                    eval_trigger = ventilation.airflow.exhaust_fan.effective | ventilation.rs485._inside_temp | ventilation.rs485._incoming_temp
                                    sqlite = yes    
                                    # rrd = yes
                                    # rrd_min = yes
                                    # rrd_max = yes
                        
                                    [[[[as_text]]]]
                                        name = Verlustwärme + 'W'
                                        type = str
                                        visu_acl = r
                                        eval = "'%sW' % (sh.ventilation.thermal_efficiency.energy_lost())"
                                        eval_trigger = ventilation.thermal_efficiency.energy_lost
                        
                                [[[energy_recovered]]]
                                    name = Rückgewonnene Wärme
                                    type = num
                                    visu_acl = r
                                    eval = "round(1.005 * 1.024 / 3.6 * sh.ventilation.airflow.supply_fan.effective() * (sh.ventilation.rs485._incoming_temp() - sh.ventilation.rs485._outside_temp()))"
                                    eval_trigger = ventilation.airflow.supply_fan.effective | ventilation.rs485._incoming_temp | ventilation.rs485._outside_temp
                                    sqlite = yes    
                                    # rrd = yes
                                    # rrd_min = yes
                                    # rrd_max = yes
                        
                                    [[[[as_text]]]]
                                        name = Rückgewonnene Wärme + 'W'
                                        type = str
                                        visu_acl = r
                                        eval = "'%sW' % (sh.ventilation.thermal_efficiency.energy_recovered())"
                                        eval_trigger = ventilation.thermal_efficiency.energy_recovered
                        
                                [[[energy_total]]]
                                    name = Summe rückgewonnen + verloren (=Wärmeenergie der Abluft aus den Räumen)
                                    type = num
                                    visu_acl = r
                                    eval = "sh.ventilation.thermal_efficiency.energy_lost() + sh.ventilation.thermal_efficiency.energy_recovered()"
                                    eval_trigger = ventilation.thermal_efficiency.energy_lost | ventilation.thermal_efficiency.energy_recovered
                        
                                    [[[[as_text]]]]
                                        name = Wärmeenergie + 'W'
                                        type = str
                                        visu_acl = r
                                        eval = "'%sW' % (sh.ventilation.thermal_efficiency.energy_total())"
                                        eval_trigger = ventilation.thermal_efficiency.energy_total
                        
                                [[[efficiency]]]
                                    name = Wirkungsgrad in %
                                    type = num
                                    visu_acl = r
                                    eval = "round((sh.ventilation.rs485._incoming_temp() - sh.ventilation.rs485._outside_temp()) / (sh.ventilation.rs485._inside_temp() - sh.ventilation.rs485._outside_temp()) * 100)"
                                    eval_trigger = ventilation.rs485._incoming_temp | ventilation.rs485._outside_temp | ventilation.rs485._inside_temp
                                    sqlite = yes    
                                    # rrd = yes
                                    # rrd_min = yes
                                    # rrd_max = yes
                        
                                    [[[[as_text]]]]
                                        name = Wirkungsgrad + '%'
                                        type = str
                                        visu_acl = r
                                        eval = "str(int(sh.ventilation.thermal_efficiency.efficiency())) + '%'"
                                        eval_trigger = ventilation.thermal_efficiency.efficiency
                        
                        
                            [[power]]              # Electrical power consumption
                            # ============================================================================================ #
                        
                                [[[heating]]]
                                    name = Aktueller Stromverbrauch der Vorheizung in W
                                    type = num
                                    visu_acl = r
                                    eval = "int(sh.ventilation.heating.is_on()) * sh.ventilation.parameters.preheating_consumption()" ### int hinzugefügt
                                    eval_trigger = ventilation.heating.is_on
                        
                                    [[[[as_text]]]]
                                        name = Item als formatierter Text
                                        type = str
                                        eval = "str(int(sh.ventilation.power.heating())) + 'W'"
                                        eval_trigger = ventilation.power.heating
                        
                                [[[supply_fan]]]
                                    name = Stromverbrauch, siehe Anlagendoku (notwendiges Hilfsitem - direkte Umsetzung von "effective" schmeisst Fehler)
                                    type = num
                                    visu_acl = r
                                    eval = "int(sh.ventilation.parameters.consumption_per_mode().split()[int(sh.ventilation.rs485._fanspeed())]) / 2"
                                    eval_trigger = ventilation.rs485._fanspeed | ventilation.fans.supply.is_on | ventilation.rs485._fan_in_percent
                        
                                    [[[[effective]]]]
                                        name = Tatsächlicher Stromverbrauch (Drosselung berücksichtigt)
                                        type = num
                                        visu_acl = r
                                        eval = "sh.ventilation.power.supply_fan() * sh.ventilation.fans.supply.percent.effective() / 100"
                                        eval_trigger = ventilation.power.supply_fan | ventilation.fans.supply.percent.effective
                        
                                        [[[[[as_text]]]]]
                                            name = Item als formatierter Text
                                            type = str
                                            eval = "str(int(sh.ventilation.power.supply_fan.effective())) + 'W'"
                                            eval_trigger = ventilation.power.supply_fan.effective
                        
                                [[[exhaust_fan]]]
                                    name = Stromverbrauch, siehe Anlagendoku (notwendiges Hilfsitem - direkte Umsetzung von "effective" schmeisst Fehler)
                                    type = num
                                    visu_acl = r
                                    eval = "int(sh.ventilation.parameters.consumption_per_mode().split()[int(sh.ventilation.rs485._fanspeed())]) / 2"
                                    eval_trigger = ventilation.rs485._fanspeed | ventilation.fans.exhaust.is_on | ventilation.rs485._fan_out_percent
                        
                                    [[[[effective]]]]
                                        name = Tatsächlicher Stromverbrauch (Drosselung berücksichtigt)
                                        type = num
                                        visu_acl = r
                                        eval = "sh.ventilation.power.exhaust_fan() * sh.ventilation.fans.exhaust.percent.effective() / 100"
                                        eval_trigger = ventilation.power.exhaust_fan | ventilation.fans.exhaust.percent.effective
                        
                                        [[[[[as_text]]]]]
                                            name = Item als formatierter Text
                                            type = str
                                            eval = str(int(sh.ventilation.power.exhaust_fan.effective())) + 'W'
                                            eval_trigger = ventilation.power.exhaust_fan.effective
                        
                                [[[total]]]
                                    name = Gesamtverbrauch in W (Steuerlektronik vernachlässigt, da keine Angaben)
                                    type = num
                                    visu_acl = r
                                    eval = "sh.ventilation.power.heating() + sh.ventilation.power.supply_fan.effective() + sh.ventilation.power.exhaust_fan.effective()"
                                    eval_trigger = ventilation.power.heating | ventilation.power.supply_fan.effective | ventilation.power.exhaust_fan.effective
                        
                                    [[[[as_text]]]]
                                        name = Item als formatierter Text
                                        type = str
                                        eval = "str(int(sh.ventilation.power.total())) + 'W'"
                                        eval_trigger = ventilation.power.total
                        
                        
                            [[testing]]            # Helper items for testing
                            # ============================================================================================ #
                                [[[a_num]]]
                                    name = Numerisches Testitem
                                    type = num
                                    value = 1
                        
                                [[[a_str]]]
                                    name = String-Testitem
                                    type = str
                                    value = "test"
                        
                                [[[a_bool]]]
                                    name = Logisches Testitem
                                    type = bool
                        value = true
                        Die Fehlerliste sieht jetzt etwas übersichtlicher aus.

                        Code:
                        2017-02-21  23:03:04 WARNING  Main         --------------------   Init smarthomeNG 1.3.781.dev   --------------------
                        2017-02-21  23:03:04 INFO     Main         Init Scheduler
                        2017-02-21  23:03:04 INFO     Main         Init Plugins
                        2017-02-21  23:03:04 WARNING  Main         CLI: You should set a password for this plugin.
                        2017-02-21  23:03:06 INFO     Main         Init UZSU
                        2017-02-21  23:03:06 INFO     Main         Init Items
                        2017-02-21  23:03:06 ERROR    Main         Problem reading Helios.conf: 'utf-8' codec can't decode byte 0xb3 in position 515: invalid start byte
                        Traceback (most recent call last):
                          File "/usr/local/smarthome/bin/smarthome.py", line 277, in start
                            item_conf = lib.config.parse(self._items_dir + item_file, item_conf)
                          File "/usr/local/smarthome/lib/config.py", line 77, in parse
                            lines = iter(f.readlines())
                          File "/usr/local/lib/python3.5/codecs.py", line 321, in decode
                            (result, consumed) = self._buffer_decode(data, self.errors, final)
                        UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb3 in position 515: invalid start byte
                        2017-02-21  23:03:06 INFO     Main         Items: 45
                        2017-02-21  23:03:06 INFO     Main         Start Logics
                        2017-02-21  23:03:06 ERROR    Main         Exception: 'utf-8' codec can't decode byte 0xe9 in position 189: invalid continuation byte
                        Traceback (most recent call last):
                          File "/usr/local/smarthome/lib/logic.py", line 129, in generate_bytecode
                            code = open(self.filename, encoding='UTF-8').read()
                          File "/usr/local/lib/python3.5/codecs.py", line 321, in decode
                            (result, consumed) = self._buffer_decode(data, self.errors, final)
                        UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe9 in position 189: invalid continuation byte
                        2017-02-21  23:03:06 ERROR    Main         Exception: 'utf-8' codec can't decode byte 0xe9 in position 189: invalid continuation byte
                        Traceback (most recent call last):
                          File "/usr/local/smarthome/lib/logic.py", line 129, in generate_bytecode
                            code = open(self.filename, encoding='UTF-8').read()
                          File "/usr/local/lib/python3.5/codecs.py", line 321, in decode
                            (result, consumed) = self._buffer_decode(data, self.errors, final)
                        UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe9 in position 189: invalid continuation byte
                        2017-02-21  23:03:06 INFO     Main         Start Plugins
                        Ich kann leider bisher weder schalten noch Werte abfragen.
                        Zuletzt geändert von Megen; 21.02.2017, 23:34.

                        Kommentar


                          #13
                          So, jetzt nach Rückkehr von der Dienstreise etwas ausführlicher:

                          Auszug:
                          Code:
                          2017-02-20 23:57:56,242 - root - DEBUG - Helios: Reading value: exhaust_temp
                          2017-02-20 23:57:56,313 - root - DEBUG - Helios: Sending telegram '0x1 0x2f 0x11 0x0 0x33 0x74 '
                          2017-02-20 23:57:56,327 - root - DEBUG - Telegram received '0x1 0x11 0x2f 0x33 0x89 0xfd '
                          2017-02-20 23:57:56,328 - root - DEBUG - Helios: Value received (raw data): exhaust_temp = 0x89
                          2017-02-20 23:57:56,328 - root - DEBUG - Helios: Value received (converted): exhaust_temp = 12
                          Deine KWL hat die Anfrage des Plugins 'wie ist die Temperatur der Fortluft' mit '12' (°C) beantwortet. Das Plugin arbeitet normal, das zeigen auch die anderen Werte.

                          Aber:

                          Code:
                          2017-02-21  00:29:58 WARNING  Main         Helios: Ignoring unknown variable 'heating_setpoint'
                          Diese Meldung kann ich mir nicht erklären, außer, das Plugin wäre corrupted oder von Hand modifiziert worden (letzteres sollte man nicht tun - es sei denn, man weiss, was man tut).

                          Code:
                          2017-02-21  00:32:13 ERROR    Helios       Item ventilation.rs485._exhaust_temp: problem running <bound method KNX.update_item of <plugins.knx.KNX object at 0x763354d0>>: 'int' object is not subscriptable
                          Traceback (most recent call last):
                            File "/usr/local/smarthome/lib/item.py", line 477, in __update
                              method(self, caller, source, dest)
                            File "/usr/local/smarthome/plugins/knx/__init__.py", line 358, in update_item
                              self.groupwrite(ga, item(), item.conf['knx_dpt'])
                            File "/usr/local/smarthome/plugins/knx/__init__.py", line 79, in groupwrite
                              pkt.extend(self.encode(payload, dpt))
                            File "/usr/local/smarthome/plugins/knx/__init__.py", line 160, in encode
                              return dpts.encode[str(dpt)](data)
                            File "/usr/local/smarthome/plugins/knx/dpts.py", line 49, in en3
                          return [(int(vlist[0]) << 3) & 0x08 | int(vlist[1]) & 0x07]
                          TypeError: 'int' object is not subscriptable
                          Frage an die KNX Profis: Was heisst 'not subscriptable' beim KNX Plugin? Wird da z.B. versucht, einen Num auf einen 4-bit Wert zu pressen oder so etwas in der Art? Dann wäre es eine Frage der Definition des DPT's.

                          Außerdem ist mir noch aufgefallen:

                          Code:
                          2017-02-21  00:30:17 ERROR    Connections  _websocket: problem binding 0.0.0.0:2424 (TCP): [Errno 98] Die Adresse wird bereits verwendet
                          Für "Die Adresse wird bereits verwendet" bitte Forumssuche bemühen, hat aber mit der Anbindung der KWL und von KNX IMHO nix zu tun.

                          /tom

                          Nachtrag: Unsere Beiträge haben sich überschnitten. Ich habe null Plan, was folgendes bedeutet, vermutlich erneut 'corrupted file' aufgrund manuellen Editierens:

                          Code:
                          2017-02-21  23:03:06 ERROR    Main         Problem reading Helios.conf: 'utf-8' codec can't decode byte 0xb3 in position 515: invalid start byte
                          Traceback (most recent call last):
                            File "/usr/local/smarthome/bin/smarthome.py", line 277, in start
                              item_conf = lib.config.parse(self._items_dir + item_file, item_conf)
                            File "/usr/local/smarthome/lib/config.py", line 77, in parse
                              lines = iter(f.readlines())
                            File "/usr/local/lib/python3.5/codecs.py", line 321, in decode
                              (result, consumed) = self._buffer_decode(data, self.errors, final)
                          UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb3 in position 515: invalid start byte
                          Ich schlage vor, Du bekommst erstmal das Plugin ordentlich zum Laufen, ohne gleich drin rumzutippen (im Backend überprüfen). Im nächsten Schritt bringen wir dann KNX in's Spiel. Sonst geht das hier ewig.
                          Zuletzt geändert von Tom Bombadil; 22.02.2017, 00:13.

                          Kommentar


                            #14
                            Code:
                             2017-02-21  00:30:17 ERROR    Connections  _websocket: problem binding 0.0.0.0:2424 (TCP): [Errno 98] Die Adresse wird bereits verwendet
                            Vermutlich läuft da schon smarthomeNG Instanz. Diese muss zuerst beendet werden. Überprüfen kannst du das mit
                            Code:
                            ps -ax | grep smart
                            KNX dpt 3bei _exhaust_temp ist definitv falsch. Wenn das ein Int ist, muss es dpt 5 sein. Siehe https://www.domotiga.nl/projects/sel...wiki/Datatypes

                            Bei dpt 3 wäre es der shmarthomeNG datentyp list.

                            Bezüglich der vielen Fehlermeldungen: ich glaube nicht unbedingt an ein korruptes File, sondern eher, dass es an den Encoding-Einstellungen liegt, siehe https://knx-user-forum.de/forum/supp...73#post1036873. Probiere mal
                            Code:
                            export LC_ALL=de_DE.utf8
                            export LANGUAGE=de_DE.utf8
                            Gruß, Daniel
                            Zuletzt geändert von dafra; 22.02.2017, 23:41.

                            Kommentar


                              #15

                              Ich habe jetzt alle meine bearbeitete Dateien gegen die originalen getauscht und erhalte jetzt "nur" noch folgenden Fehler.

                              Code:
                              2017-02-22  22:46:33 ERROR    Main         Plugin helios exception: module 'plugins.helios' has no attribute 'helios'
                              Traceback (most recent call last):
                                File "/usr/local/smarthome/lib/plugin.py", line 64, in __init__
                                  plugin_thread = PluginWrapper(smarthome, plugin, classname, classpath, args, instance)
                                File "/usr/local/smarthome/lib/plugin.py", line 104, in __init__
                                  exec("self.plugin = {0}.{1}.__new__({0}.{1})".format(classpath, classname))
                                File "<string>", line 1, in <module>
                              AttributeError: module 'plugins.helios' has no attribute 'helios'
                              ps -ax | grep smart

                              Code:
                               1425 ?        Sl     0:05 python3 /usr/local/smarthome/bin/smarthome.py
                               3634 pts/0    S+     0:00 grep --color=auto smart
                              Ich werde, wenn ich wieder zu Hause bin, nochmal SmarthomeNG neu aufsetzen und Schritt für Schritt von vorne beginnen falls niemand mehr eine Idee hat.

                              Kommentar

                              Lädt...
                              X