Ankündigung

Einklappen
Keine Ankündigung bisher.

Helios KWL 200 Pro per USB RS485 Adapter steuern

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

    #31
    Hallo Tom,

    super !! Besten Dank. Wenn ich heute Abend Zuhause bin, werde ich es gleich testen.

    Danke

    Kommentar


      #32
      (Nachtrag aufgrund von Rückfragen - Installation von Hand)

      Verzeichnis /usr/local/smarthome/plugins/helios erstellen und den Inhalt des Archives smarthomepy-helios-master.zip da reinpacken (__init__.py liegt hinterher in diesem Verzeichnis)

      Folgendes in die /usr/local/smarthome/etc/plugin.conf kopieren:
      HTML-Code:
      [helios]
          class_name = Helios
          class_path = plugins.helios
          tty = /dev/ttyUSB0 #hier ggf anderen Port, je nach Adapter
          cycle = 60 # default 300 seconds
      Folgendes in die /usr/local/smarthome/items/items.conf kopieren:
      HTML-Code:
      [ventilation]
          [[power_state]]
              type = num
              helios_var = power_state 
              visu=rw
              visu_acl=rw
          [[bypass_disabled]]
              type = num
              helios_var = bypass_disabled 
              visu=rw
              visu_acl=rw
          [[fanspeed]]
              type = num
              helios_var = fanspeed 
              visu=rw
              visu_acl=rw
          [[outside_temp]]
              type = num
              helios_var = outside_temp 
              visu=yes
          [[incoming_temp]]
              type = num
              helios_var = incoming_temp 
              visu=yes
          [[inside_temp]]
              type = num
              helios_var = inside_temp 
              visu=yes
          [[exhaust_temp]]
              type = num
              helios_var = exhaust_temp 
              visu=yes
          [[bypass_temp]]
              type = num
              helios_var = bypass_temp 
              visu=yes
          [[max_fanspeed]]
              type = num
              helios_var = max_fanspeed 
              visu=yes
          [[min_fanspeed]]
              type = num
              helios_var = min_fanspeed 
              visu=yes
      Neustart nicht vergessen. Danach idealerweise smarthome.py mal im Verbose-Mode aufrufen, dann sieht man, wie die Einträge gepollt werden.

      /tom

      Kommentar


        #33
        Danke hab es mit eurer tollen Anleitung hinbekommen, nur habe ich eine Frage. Ist es möglich die Stosslüftung über die Visu zu aktivieren, wenn ich einheize brauche ich diese fast immer.

        Kommentar


          #34
          Ist auf der ToDo-Liste - habe nur momentan nicht viel Zeit, mich damit zu beschäftigen ...

          Kommentar


            #35
            @rok123: In der Schnittstellenbeschreibung hab ich nichts dazu gefunden. Aber warum nutzt du für solche Funktionen nicht die Features von sh?
            Einfach ein item eingerichtet welches den maximalen Lüftungswert sendet und nach 45min über einen Timer wieder deine Standardlüftungsstufe.

            /Marcel

            Kommentar


              #36
              Es wird nicht nur die Stufe hochgeregelt, sondern auch zusätzlich noch einer der Ventilatoren ausgeschaltet (siehe Handbuch):
              Die Stoßlüftungs-Schaltfunktion schaltet das KWL für 45 min auf die eingestellte Maximalstufe. Die Kamintast-Funktion schaltet den Abluftventilator für 15 min aus, wodurch in der Luftaustauschzone ein Überdruck entsteht.
              Rein technisch sollte sich das schalten lassen. Zitat aus der Vallox-Beschreibung für das EIB-Modul:
              Obj. 29 Ein/Aus Stoßlüftungsmodus (1=EIN, 0=AUS)
              Obj. 30 Ein/Aus Status Vorheizung (1= EIN, 0=AUS)
              Obj. 31 Ein/Aus Status des Zuluftventilators (0= EIN, 1=AUS)
              Obj. 32 Ein/Aus Status des Abluftventilators (0= EIN, 1=AUS).

              Muss aber noch die Pakete sniffen, um herauszufinden, welches Register zu diesen Objekten bzw. Bits gehört.

              /tom

              Kommentar


                #37
                Für Stosslüftung geht's also...wenn die Kaminfunktion gemeint ist, leider nicht.
                Gedanken lesen war noch nie meine Stärke. ;-)

                Kommentar


                  #38
                  Hallo,

                  hier für die "Mitbastler" der aktuelle Stand in Sachen Helios. Leider habe ich momentan nicht soviel Zeit, wie ich eigentlich für die Sache bräuchte. Alles noch experimentell und ohne "schickmachen" des Codes / css usw. Alles auch "as is", eigene Kommentare und Experimentierfunktionen habe ich nicht entfernt:

                  HTML-Code:
                    <div class="block" style="text-align: left;">
                     <h3>Kontrollierte Wohnraumlüftung <span class="ui-li-aside">{{ basic.symbol('UhrAKTIV', 'Uhr.KWLAktiv', '', icon1~'time_clock.png', 1) }}</span></h3>
                    /** Experimental: Uhr-Icon in Statuszeile an/aus basic.symbol(uhraktiv)**/
                    /** eventuell muss das Symbol erst hinter dem Icon geschaltet werden **/
                    /** {{ basic.switch('KWLUhrIndikator', 'Uhr.KWLAktiv', icon1~'time_clock.png', icon0~'time_clock.png') }} **/
                   
                    /** Hintergrundbild --> ggf. Pfad zum Bild ersetzen, bei mir liegt es im Projektordner  unter pages/Rene. **/
                    /** Die einzelnen Labels werden hinterher mit negativen Positionsangabe darüber gelegt. **/
                    /** Geht sicher auch anders, aber fürs Basteln reichts erstmal. **/
                    /** <img src="pages/Rene/luef_neu.png" alt="KWL" height="400px"> **/
                    <img src="pages/Rene/luef_neu.png" alt="KWL"> 
                   
                    /** Temperaturen **/
                    <div style="position: absolute; margin-top: -310px; margin-left: 200px;">{{ basic.float('helios_aussentemperatur', 'ventilation.outside_temp', '°C') }}</div>
                    <div style="position: absolute; margin-top: -225px; margin-left: 200px;">{{ basic.float('helios_innentemperatur',  'ventilation.inside_temp', '°C') }}</div>
                    <div style="position: absolute; margin-top: -310px; margin-left: 295px;">{{ basic.float('helios_weglufttemperatur','ventilation.exhaust_temp', '°C') }}</div>
                    <div style="position: absolute; margin-top: -225px; margin-left: 295px;">{{ basic.float('helios_zulufttemperatur', 'ventilation.incoming_temp', '°C') }}</div>
                   
                    /** Lüfterstufe und stufenweise Regelung **/
                    <div style="position: absolute; margin-top: -280px; margin-left: 238px;">
                     
                     /** Icon mit Zahl für Lüftungsstufe darstellen **/  
                     /** war mal: {{ basic.value('helios_lueftungsstufe', 'ventilation.fanspeed') }} **/
                     <a href="#popup-kwlstufe" data-rel="popup">
                     {{ basic.symbol('s1', 'ventilation.fanspeed', '', icon0~'edit_numeric_1.svg', 1) }}
                     {{ basic.symbol('s2', 'ventilation.fanspeed', '', icon0~'edit_numeric_2.svg', 2) }}
                     {{ basic.symbol('s3', 'ventilation.fanspeed', '', icon0~'edit_numeric_3.svg', 3) }}
                     {{ basic.symbol('s4', 'ventilation.fanspeed', '', icon0~'edit_numeric_4.svg', 4) }}
                     {{ basic.symbol('s5', 'ventilation.fanspeed', '', icon0~'edit_numeric_5.svg', 5) }}
                     {{ basic.symbol('s6', 'ventilation.fanspeed', '', icon0~'edit_numeric_6.svg', 6) }}
                     {{ basic.symbol('s7', 'ventilation.fanspeed', '', icon0~'edit_numeric_7.svg', 7) }}
                     {{ basic.symbol('s8', 'ventilation.fanspeed', '', icon0~'edit_numeric_8.svg', 8) }}
                     </a>
                      /** Popup - Einzelne KWL-Stufen: Direktansteuerung über Buttons **/  
                     <div id="popup-kwlstufe" data-role="popup" style="width:250px; height:150px; text-align:center;" data-overlay-theme="c">
                      <a href="#" data-rel="back" data-role="button" data-icon="delete" data-iconpos="notext" class="ui-btn-right";>Close</a>
                      Lüftungsstufe <br/><br/>
                      {{ basic.button('kwl-stufe-1', 'ventilation.fanspeed', '1', '', 1, 'micro') }} &nbsp; &nbsp;
                      {{ basic.button('kwl-stufe-2', 'ventilation.fanspeed', '2', '', 2, 'micro') }} &nbsp; &nbsp; 
                      {{ basic.button('kwl-stufe-3', 'ventilation.fanspeed', '3', '', 3, 'micro') }} &nbsp; &nbsp;
                      {{ basic.button('kwl-stufe-4', 'ventilation.fanspeed', '4', '', 4, 'micro') }}
                      <br/>
                      <br/>
                      {{ basic.button('kwl-stufe-5', 'ventilation.fanspeed', '5', '', 5, 'micro') }} &nbsp; &nbsp;
                      {{ basic.button('kwl-stufe-6', 'ventilation.fanspeed', '6', '', 6, 'micro') }} &nbsp; &nbsp;
                      {{ basic.button('kwl-stufe-7', 'ventilation.fanspeed', '7', '', 7, 'micro') }} &nbsp; &nbsp;
                      {{ basic.button('kwl-stufe-8', 'ventilation.fanspeed', '8', '', 8, 'micro') }}
                     </div> 
                    </div>
                     
                    /** Anlage Ein/Aus, Wärmerückgewinnung Ein/Aus **/
                    <div style="position: absolute; margin-top: -120px; margin-left:   15px;">
                     {{ basic.switch('helios_an_aus', 'ventilation.power_state', icon1~'control_on_off.png', icon0~'control_on_off.png') }} &nbsp; &nbsp; 
                     {{ basic.switch('helios_bypass', 'ventilation.bypass_disabled', icon1~'sani_floor_heating.png', icon0~'sani_floor_heating.png') }} &nbsp; &nbsp; 
                     {{ uzsu.uzsu_icon('kwl_schaltuhr_id0', 'ventilation.fanspeed.fanspeed_timer', 'KWL Schaltuhr','0','','','num','An','Aus') }}
                    </div>
                    
                    /** Turbo-Schalter und Infos **/  
                    <div style="position: absolute; margin-top: -120px; margin-left: 390px;">
                     {{ basic.switch('helios_turbo', '', icon0~'control_cancel.png', icon0~'vent_ventilation_level_3.png') }} &nbsp; &nbsp; 
                     <a href="#popup-kwlinfo" data-rel="popup"><img src="icons/ws/message_info.png" alt="KWL" class="icon"></a>
                    </div>
                    
                    /** Popup - KWL-Infos **/
                    <div id="popup-kwlinfo" data-role="popup" style="width:250px; height:150px; text-align:center;"> /** data-overlay-theme="c"> **/
                     <a href="#" data-rel="back" data-role="button" data-icon="delete" data-iconpos="notext" class="ui-btn-right";>Close</a>
                     KWL-Infos <br/><br/>
                     /** Formatierungsdrama, Text links + rechts nicht anders gelöst bekommen, Popup spielt verrueckt **/
                     <span style="float:left; width:100%; text-align: left;">Stufenbegrenzung<span style="float:right;">{{ basic.value('helios_lueftermin', 'ventilation.min_fanspeed')}}...{{basic.value('helios_lueftermax', 'ventilation.max_fanspeed') }}</span></span>
                     <span style="float:left; width:100%; text-align: left;">WRGΔ>           <span style="float:right;">{{ basic.float('helios_bypasstemperatur', 'ventilation.bypass_temp', '°C') }}</span></span>
                    </div>
                    </div>
                  Screenshots anbei.

                  Langsam kommt der Bedarf nach dem Sniffen zusätzlicher Befehle über /dev/ttyUSB0 auf. Kennt dafür jemand einen vernünftigen Sniffer, der auf dem Pi stabil läuft und halbwegs komfortabel ist, also z.B. die Ausgabe schon "vorformatiert" ausgibt (6 Bytes Befehlsfolge in einer Zeile darstellen usw)?

                  @Marcel: Wäre es möglich, die Behandlung einer Lüftungsstufe "0" in das Plugin einzubauen, die statt der Lüftungsregelung den Off-Befehl triggert? Dann könnte man z.B. im Sommermodus die Anlage auch geplant über die selbe USZU ein-/ausschalten, die auch die normale Stufenschaltung übernimmt. Ob sich die Anlage bei >0 allein wieder einschaltet, weiss ich leider nicht - ggf. könnte man vor jeder Stufenregelung >0 einfach pauschal das betreffende Register "einschalten" ...

                  /tom
                  Angehängte Dateien

                  Kommentar


                    #39
                    Hallo Tom,

                    es gibt diverse Tools, um auf dem serial-Port zu sniffen, z.B. minicom. Ob es was gibt was dir die Telegramme gleich aufbereitet bezweifel ich.
                    Im Notfall kannst du das helios-Plugin einfach anpassen, die Methoden _readTelegram und _telegramToString machen eigentlich das was du benötigst.

                    Dass bei Lüftungsstufe "0" die Lüftungsanlage ausgehen soll, sehe ich eigentlich nicht in dem Plugin...das stellt nur die Schnittstelle zur Helios dar und solche Logiken solltest du eher in Smarthome.py umsetzen.
                    Du kannst an ein item einfach via watch_item Logiken "hängen" die dann die von dir gewünschten Umsetzungen machen.

                    /Marcel

                    Kommentar


                      #40
                      Hallo Marcel,

                      danke für die Tips, besonders die Info mit der Logik greife ich gern auf (ist eine der 10000 Baustellen, in die ich mich als Einsteiger noch einarbeiten muss). Das mit der Lüftungsstufe "0" erschien mir nur logisch

                      Folgende verifizierte Infos habe ich für Dich (Datentyp Int8 fehlt noch im Plugin, bin dran, Python muss ich ja auch noch lernen ):

                      0x08 Bit 3 r/w Zuluftventilator ein/aus

                      0x08 Bit 5 r/w Abluftventilator ein/aus

                      0x36 Int8 r Sensor-Alarme
                      05h = Zuluft-Sensor
                      06h=CO2-Alarm
                      07h=Außenluftsensor
                      08h=Abluft- oder Fortluftsensor (noch nicht ganz klar)
                      09h=Frostgefahr Wärmetauscher
                      0Ah=Abluft- oder Fortluftsensor (noch nicht ganz klar)
                      0x71 Bit 5 r/w Start Stoßlüftung bzw. Kaminlüftung (je nach Einstellung)

                      0x79 Int8 r Verbleibende Zeit bei laufender Stoß-/Kaminlüftung

                      Da es ja explizit hier gewünscht wurde, hab ich grad mal die Stoßlüftung komplett implementiert - läuft fein. Da kommt später noch mehr, ich bleibe dran - für heute habe ich aber die KWL und mein Gehirn erstmal genug gequält .

                      /tom

                      Edit: Noch vergessen

                      0xAA Bit 5 r/w Verhalten bei Booster-Modus: 0=Kaminlüftung 1=Stoßlüftung

                      Kommentar


                        #41
                        Kurzes Update zum Stand der Dinge:

                        HTML-Code:
                        #!/usr/bin/env python
                        # smarthome/logics/test.py
                        # Functions for extending the smarthome.py Helios plugin - feel free to use / modify
                        # Rev. 2014-11-14 by René Jahncke aka Tom Bombadil of https://knx-user-forum.de/smarthome-py
                        # Functions:
                        # 1) Made for UZSU: Fan speed change incl level 0 for standby mode. Requires UZSU + dummy variable.
                        # 2) Stoßlüftung mit konfigurierbarer Zeit + automatischer Einstellung des vorherigen Wertes am Ende
                        #    (aka "Der Standard-Stoßlüftungsmodus funktioniert schon, ist aber doof")
                        # 3) Sommer-Hitzemodus: Auto-Aus-An ab xx °C und bei Aussentemperatur < oder > Innentemperatur
                        #    Optionale Idee: Luftaustausch (Stoßlüftung) nachts um 0x Uhr, aber noch kein Plan dafür
                        #    Umsetzung noch nicht bis zum Ende durchdacht
                        
                         import time
                         trigger_source = trigger['source']
                         trigger_value  = trigger['value']
                        
                         if trigger_source == "ventilation.fanspeed_dummy":    ########### 1) Fan speed change ############
                         
                           if sh.ventilation.power_state() == 1:               ## Ventilation is currently ON
                             if trigger_value == 0:                            # Received fan speed 0 -> switch to standby
                               sh.ventilation.power_state(0)
                               logger.debug("Ventilation switched OFF")
                        
                             else: 
                               if trigger_value > 0 and trigger_value < 9:     # Received fan speed 1-8 -> set level
                                 sh.ventilation.fanspeed(trigger_value)
                                 logger.debug("Ventilation speed switched to " + str(trigger['value']))
                        
                           else:                                               ## Ventilation is on standby ("OFF")
                             sh.ventilation.power_state(1)
                             logger.debug("Ventilation switched ON")
                             time.sleep(10)                                    # Wait for ventilators to start
                             sh.ventilation.fanspeed(trigger_value)
                             logger.debug("Ventilation speed switched to " + str(trigger['value']))
                         
                        # Known issues and limitations:
                        # 1) Currently there is no documentation on how to switch on the remote control after standby.
                        #  So, when the ventilation is started by any bus member, the RC will remain OFF. When the RC
                        #  is switched on manually afterwards, it will automatically adjust fan speed to default value.
                        #  As the default value is usually not the same as the current fan speed, this behavior *will*
                        #  break the logic until the next fan speed adjustment takes place (by RC, UZSU, SV, whatever).
                        #  This problem is not related to this logic, but a general issue of ANY Helios plugin I found
                        #  for the various home automation systems like sh, Lox, oh and others.  
                          
                        Implementierung in Python ging erstaunlich einfach und schnell (Tips/Kommentare der Profis ausdrücklich erwünscht - ja ich weiss, sleep ist böse).

                        Ich bräuchte noch definitive Vorschläge für Funktion #3 (temperaturgeregelte Ein-/Ausschaltung abhängig von Innen-/Außentemperatur im Sommer). Bleib dran, sofern ich Zeit hab ...

                        /tom

                        Kommentar


                          #42
                          Danke für das Plugin und deine Arbeit.
                          Läuft auch an einer ValloPlus 350SE scheinbar ohne Probleme mit China RS485 USB dongle.

                          Kommentar


                            #43
                            Danke für die Rückmeldung, Exciter!

                            Kurzes Statusupdate:

                            - Umlagern des HTML-Codes in ein Widget: fertig
                            - UZSU incl. "Aus/An": fertig, läuft seit Tagen prima im Testbetrieb
                            - Standard-Helios-Stoßlüftung: fertig
                            - Stoßlüftung über Ein-/Aus-Button, Zeit+Stufe variablengesteuert: fertig
                            - Stosslüftung über Popup incl. 15-120 Minuten-Auswahl/Stufe/anschließende Stufe/Kaminmodus: gerade in Arbeit

                            Kopfzerbrechen macht mir nach wie vor die Fernsteuerung - ich kann mir einfach nicht vorstellen, dass man das Gerät nicht über den Bus ein-/ausschalten kann.

                            Werde wohl zum Wochenende mal wieder ein bisschen Code zum Testen veröffentlichen ...

                            /tom

                            Kommentar


                              #44
                              Super, ich freue mich drauf.
                              Finde ich Super das du da soviel Zeit für investierst.
                              Ist ja nicht gerade selbstverständlich.
                              Bis jetzt läuft es hier echt gut.
                              Nur mit dem Bypass bin ich mir nicht sicher.
                              Wenn das Icon blau ist, ist der Bypass aktiv?
                              Heißt Wärmerückgewinnung deaktiviert?
                              Bei den jetzigen temps also nicht gut oder sehe ich das falsch.
                              Die menüführung der vallox ist bescheiden...

                              Kommentar


                                #45
                                Howto - Stosslüftung (Standard Helios)

                                Kurze Programmierpause - hier ein bisschen Code für alle, die auf die Stoßlüftung warten (Standard Helios-Version, wie von der Fernbedienung getriggert):

                                1. Plugin um Item erweitern - smarthome/plugins/helios/__init.py__

                                Achtung - Komma am Ende der vorletzten Zeile nicht vergessen!!!!

                                Code:
                                CONST_MAP_VARIABLES_TO_ID = {
                                        "outside_temp"    : {"varid" : 0x32, 'type': 'temperature',  'bitposition': -1, 'read': True, 'write': False },
                                        "exhaust_temp"    : {"varid" : 0x33, 'type': 'temperature',  'bitposition': -1, 'read': True, 'write': False },
                                        "inside_temp"     : {"varid" : 0x34, 'type': 'temperature',  'bitposition': -1, 'read': True, 'write': False },
                                        "incoming_temp"   : {"varid" : 0x35, 'type': 'temperature',  'bitposition': -1, 'read': True, 'write': False },
                                        "bypass_temp"     : {"varid" : 0xAF, 'type': 'temperature',  'bitposition': -1, 'read': True, 'write': True  },
                                        "fanspeed"        : {"varid" : 0x29, 'type': 'fanspeed',     'bitposition': -1, 'read': True, 'write': True  },
                                        "max_fanspeed"    : {"varid" : 0xA5, 'type': 'fanspeed',     'bitposition': -1, 'read': True, 'write': True  },
                                        "min_fanspeed"    : {"varid" : 0xA9, 'type': 'fanspeed',     'bitposition': -1, 'read': True, 'write': True  },
                                        "power_state"     : {"varid" : 0xA3, 'type': 'bit',          'bitposition':  0, 'read': True, 'write': True  },
                                        "bypass_disabled" : {"varid" : 0xA3, 'type': 'bit',          'bitposition':  3, 'read': True, 'write': True  }[COLOR=red],
                                        "boost_active" :    {"varid" : 0x71, 'type': 'bit',          'bitposition':  5, 'read': True, 'write': True  }[/COLOR]  
                                    }


                                2. Item einbinden - smarthome/items/items.conf

                                Code:
                                [ventilation]
                                    ...
                                [COLOR=red] [[booster_mode]]
                                     type = bool
                                     helios_var = boost_active
                                     visu_acl = rw[/COLOR]


                                3. Item visualisieren - smartVISU/pages/deineseite/dein.html

                                Code:
                                [COLOR=red][FONT=Courier New]{{ basic.switch('helios_boost1', 'ventilation.booster_mode', icon1~'control_x.png', icon0~'vent_ventilation_level_3.png') }}[/FONT][/COLOR]
                                Frohes Lüften!

                                /tom

                                Kommentar

                                Lädt...
                                X