Danke für das Plugin und deine Arbeit.
Läuft auch an einer ValloPlus 350SE scheinbar ohne Probleme mit China RS485 USB dongle.
Ankündigung
Einklappen
Keine Ankündigung bisher.
Helios KWL 200 Pro per USB RS485 Adapter steuern
Einklappen
X
-
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.
).
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
Einen Kommentar schreiben:
-
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-Alarme0x71 Bit 5 r/w Start Stoßlüftung bzw. Kaminlüftung (je nach Einstellung)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)
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
Einen Kommentar schreiben:
-
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
Einen Kommentar schreiben:
-
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') }} {{ basic.button('kwl-stufe-2', 'ventilation.fanspeed', '2', '', 2, 'micro') }} {{ basic.button('kwl-stufe-3', 'ventilation.fanspeed', '3', '', 3, 'micro') }} {{ basic.button('kwl-stufe-4', 'ventilation.fanspeed', '4', '', 4, 'micro') }} <br/> <br/> {{ basic.button('kwl-stufe-5', 'ventilation.fanspeed', '5', '', 5, 'micro') }} {{ basic.button('kwl-stufe-6', 'ventilation.fanspeed', '6', '', 6, 'micro') }} {{ basic.button('kwl-stufe-7', 'ventilation.fanspeed', '7', '', 7, 'micro') }} {{ 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') }} {{ basic.switch('helios_bypass', 'ventilation.bypass_disabled', icon1~'sani_floor_heating.png', icon0~'sani_floor_heating.png') }} {{ 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') }} <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>
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
Einen Kommentar schreiben:
-
Für Stosslüftung geht's also...wenn die Kaminfunktion gemeint ist, leider nicht.
Gedanken lesen war noch nie meine Stärke. ;-)
Einen Kommentar schreiben:
-
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.
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
Einen Kommentar schreiben:
-
@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
Einen Kommentar schreiben:
-
Ist auf der ToDo-Liste - habe nur momentan nicht viel Zeit, mich damit zu beschäftigen ...
Einen Kommentar schreiben:
-
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.
Einen Kommentar schreiben:
-
(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
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
/tom
Einen Kommentar schreiben:
-
Hallo Tom,
super !! Besten Dank. Wenn ich heute Abend Zuhause bin, werde ich es gleich testen.
Danke
Einen Kommentar schreiben:
-
Bastelarbeiten
Hallo Manu,
Hatte heute mal keine Lust auf produktives Arbeiten nach Feierabend, also mal ein bisschen rumgespielt. Hier das Resultat und das fehlende HTML von vorhin:
HTML-Code:<h2>Hausautomation (experimental)</h2> <div data-role="collapsible"> <h3>Thema heute: +++ isch mach disch Liftunk! +++</h3> /** 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"> /** 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 [geht noch nicht!] **/ <div style="position: absolute; margin-top: -275px; margin-left: 190px;">{{ basic.button('kwl_runter', 'lueftung_runter', '', 'arrow-d', '', 'micro') }}</div> <div style="position: absolute; margin-top: -270px; margin-left: 260px;"><b>{{ basic.value('helios_lueftungsstufe', 'ventilation.fanspeed') }}</b></div> <div style="position: absolute; margin-top: -275px; margin-left: 305px;">{{ basic.button('kwl_hoch', 'lueftung_rauf', '', 'arrow-u', '', 'micro') }}</div> /** Anlage Ein/Aus, Wärmerückgewinnung Ein/Aus **/ <div style="position: absolute; margin-top: -130px; margin-left: 125px;">Status: {{ basic.flip('helios_an_aus', 'ventilation.power_state', 'An', 'Aus') }} WRG: {{ basic.flip('helios_bypass', 'ventilation.bypass_disabled', 'An', 'Aus') }}</div> /** Allgemeine Infos - Links unten die eingestellte Lüftungsbegrenzung, rechts unten WRG-Regelungs-Temperatur**/ <div style="position: absolute; margin-top: -60px; margin-left: 15px;">({{basic.value('helios_lueftermin', 'ventilation.min_fanspeed')}}...{{basic.value('helios_lueftermax', 'ventilation.max_fanspeed')}})</div> <div style="position: absolute; margin-top: -60px; margin-left: 420px;">(WRGΔ>{{ basic.float('helios_bypasstemperatur', 'ventilation.bypass_temp', '°C') }})</div> /** Einzelne KWL-Stufen: Direktansteuerung über Buttons (so fing das hier alles mal an) **/ <div style="position: absolute; margin-top: -85px; margin-left: 120px;"> {{ basic.button('kwl-stufe-1', 'ventilation.fanspeed', '1', '', 1, 'micro') }} {{ basic.button('kwl-stufe-2', 'ventilation.fanspeed', '2', '', 2, 'micro') }} {{ basic.button('kwl-stufe-3', 'ventilation.fanspeed', '3', '', 3, 'micro') }} {{ basic.button('kwl-stufe-4', 'ventilation.fanspeed', '4', '', 4, 'micro') }} {{ basic.button('kwl-stufe-5', 'ventilation.fanspeed', '5', '', 5, 'micro') }} {{ basic.button('kwl-stufe-6', 'ventilation.fanspeed', '6', '', 6, 'micro') }} {{ basic.button('kwl-stufe-7', 'ventilation.fanspeed', '7', '', 7, 'micro') }} {{ basic.button('kwl-stufe-8', 'ventilation.fanspeed', '8', '', 8, 'micro') }} </div> </div> /** ------------------------------------------------------------------------------------------------------* Alles hier geschriebene ist experimetal und expizit zur freien Verwendung - keine Gewähr, keine Haftung Meine nächsten ToDo's (freue mich über Mitstreiter): 0001) Popup mit dem "lustigen Regenbogen" (Originalton Hasi) für Stufenregelung bei Drücken auf Lüftungsstufe in der Mitte (danke, marsellus :-) ). Popup ersetzt Buttons hoch/runter. 0002) Farbliche Initialisierung des Buttons, der die aktuelle Lüftungsstufe hat 0003) Herausfinden, warum man jeden {{ }}-Wert nur genau einmal benutzen kann, das ist Mist 0004) !important Zeitschaltuhr implementieren, Beschreiben weiterer Register auf RS485 sniffen 0005) Wie kann man die Fernsteuerung mit der Anlage zusammen einschalten? Kommando sniffen ... ... 9998) Sich Sorgen darum machen, ob andere Leute andere DPI / Auflösungen / Fonts haben könnten 9999) Aus Bastelstadium herausholen und all die "Du musst Code von css trennen"- und "ohhh mein Gott wie ist das denn formatiert, nach 35 Jahren kannst Du immer noch kein Cobol!" -Junkies glücklich machen. Vorher ausreichend Snickers für die Jungs bereitlegen. * ------------------------------------------------------------------------------------------------------**/
Angehängte Dateien
Einen Kommentar schreiben:
-
Hi,
ich benutze den regulären "slider" als Popup mit min=1, max=8, step=1. Funktioniert ohne Probleme.
Warum die Fernbedienung sich nicht einschaltet hab ich auch noch nicht rausgefunden...ist für mich aber auch nicht wirklich relevant, da die Fernbedienung eh im Keller hängt wo niemand drauf schaut.
/Marcel
Einen Kommentar schreiben:
-
Zitat von manu241 Beitrag anzeigenHallo Tom Bombadil,
ist deine Ansicht ein fertiges Widget (Page) oder hast du es dir selber gebastelt ?
Würdest du es sonst zur Verfügung stellen ?
ist nur zusammengebastelt - erstellt in Powerpoint (schnelle Pfeile), Hintergrund in Photoshop ausgeschnitten und als png gespeichert. Die Messpunkte sind in meiner Bastelvariante z.Z. noch fest per css positioniert ("quick & dirty" eben, es muss erstmal funktionieren).
Eine einzelne, hier nicht näher bezeichnete Dame besteht auf einer ordentlichen Visualisierung samt Wettervorhersage, sonst kommt ihr so ein neumodische Kram wie z.B. ein Touch-Display gar nicht erst ins Haus.
Will später noch an gleicher Stelle VL/RL/Speichertemperaturen von Heizung und Wasser darstellen - aber der verbaute Trovis-Regler wird noch eine dickere Nuss als die KWL.
Nutze, was Du davon gebrauchen kannst - wenn ich später eine fertige (richtog schicke) Version habe, schieb ich die nochmal hinterher.
/tomAngehängte Dateien
Einen Kommentar schreiben:
Einen Kommentar schreiben: