Ankündigung
Einklappen
Keine Ankündigung bisher.
Viessmann Plugin Neuentwicklung Python Hilfe
Einklappen
X
-
wenn du das mit dem Protokoll hinbekommst und mal ein / zwei definitionen "vorbaust" bzw aus der xml überträgst, kann ich versuchen den Rest der funktionierenden Adressen raus zu bekommen...
-
Ich mag da jetzt nicht der Spielverderber sein, aber so unterschiedlich die Heizungen, so unterschiedlich sind auch die verfügbaren und sinnvoll nutzbaren Datenpunkte. Selbst andere Brennerheizungen haben möglicherweise nur die Hälfte der hier "vorgeschlagenen" Items; und von Wärmepumpen oder Soleanlagen brauchen wir gar nicht zu reden.
Will sagen: das ist bestimmt eine super Lösung, die auf die jeweilige Anlage abgestimmt ist. Und so, wie loeserman das geschrieben hat, ist es als Grundlage für eigene Basteleien sicher nutzbar. Insofern würde ich es meinetwegen in einem Ordner "additional_content" oder "examples" oder so mit reinpacken.
Als generelle Lösung taugt das leider nicht - das liegt aber nicht an loeserman, sondern an Viessmann und der Art, wie sie die Datenpunkte in den Heizungssteuerungen "einbauen" bzw. freigeben.
Über Structs habe ich schonmal nachgedacht. Man könnte kleine "Funktionseinheiten" - Fehler, Brenner_HK[123], WP_HK[12], Warmwasser oder so basteln, aber selbst da fängt es schon an. Das eine Gerät hat umfangreiche Fehlerspeicher, das andere fast gar nicht. Bei mir kann man für Warmwasser nur eine Temperatur auslesen, mehr nicht (und manuelles Aufheizen triggern, manchmal). Der gemeinsame Nenner wäre wahrscheinlich bei Außentemperatur, Vorlauftemperatur, Rücklauftemperatur, WW-Temperatur gegeben. Da fehlt den Meisten dann die Hälfte, die der andere jeweils nicht braucht
Wenn jemand dazu noch ne gute Idee hat, versuche ich gern, das umzusetzen. Aber für ein "generelles" Plugin wäre mir die Widget-Lösung zu speziell, um sie als "das" Widget mitzugeben.
(OT: bei Kodi wär das was anderes, weil die Mediensteuerung und -anzeige fast überall verwendbar ist...
)
Einen Kommentar schreiben:
-
Danke. Das könnte super als Widget mit ins Plugin. Und items als Struct.
Einen Kommentar schreiben:
-
Mit einem universellen Table Widget kann ich leider nicht dienen. Das Widget habe ich mir mal selbst geschrieben (speziell für die Heizung). Ist sicherlich nicht optimal gelöst aber es funktioniert prima und hat für mich gepasst.Zitat von Onkelandy Beitrag anzeigenloeserman Blöde Frage, woher hast du denn das Widget aus Post 140 https://knx-user-forum.de/forum/supp...53#post1573653
Soweit ich mich erinnere gab es mal eine Featureanfrage zu nem Table Widget..
In meinem pages Verzeichnis habe ich eine html Datei für eigene Widgets ("widget_my.html"). In dieser ist dann der folgende Code.
Aufgerufen wird es dann entsprechend auf seinen Seiten mit folgendem Befehl:Code:/** * Anzeigen der genauen Heizungsinformationen * @param unique id for this widget * @param text for headline (like: Heizung Viessmann) */ {% macro icon_and_popup_heizungviessmann(uid, headline) %} {% import "basic.html" as basic %} <!-- Internal tags --> {% set gad = 'ZAEHLER.HEIZUNG' %} <a href="#{{ uid }}-popup_heizungviessmann" data-rel="popup" style="text-decoration: none; font-weight: normal;"> {{ basic.symbol('', gad~'.ICON_STATUS', '', ['sani_boiler_temp.svg', 'sani_boiler_temp.svg', 'sani_solar.svg', 'control_x.svg'], [3,2,1,0], '', ['icon0', 'icon0', 'icon0', '#ff0000']) }} <br> {{ basic.symbol('', gad~'.ICON_STATUS', ['Standby', 'An', 'An', 'Fehler'], '', [3,2,1,0], '', ['icon0', 'icon0', 'icon0', 'icon0']) }} <br> Heizung </a> <div id="{{ uid }}-popup_heizungviessmann" data-role="popup"> <div class="lPopupHeader"> {% if headline %} {{ headline }} {% else %} {{ headline|default('### Überschrift noch nicht definiert ###') }} {% endif %} </div> <a href="#" data-rel="back" data-role="button" data-icon="delete" data-iconpos="notext" class="ui-btn-right">Close</a> <table> <!-- Zustand --> <tr bgcolor=#252525> <td colspan="6" align="center"> Zustand </td> </tr> <tr bgcolor=#303030> <td colspan="6" align="center"> {{ basic.symbol('', gad~'.SAMMELSTOERUNG', ['STÖRUNG', 'OK'], '', [1,0], '', ['icon0', 'icon0']) }} </td> </tr> <!-- Leerzeile --> <tr> <td colspan="6"> </td> </tr> <!-- Allgemein / Brenner --> <tr bgcolor=#252525> <td colspan="6" align="center"> Allgemein / Brenner </td> </tr> <tr bgcolor=#252525> <td colspan="2" align="center" width="100px"> Wert </td> <td> Bezeichnung </td> <td colspan="2" align="center" width="100px"> Wert </td> <td> Bezeichnung </td> </tr> <tr bgcolor=#303030> <td align="right"> {{ basic.print('', gad~'.ANLAGEN_LEISTUNG', 'float1') }} </td> <td align="left"> % </td> <td align="left"> Anlagenleistung </td> <td align="right"> {{ basic.print('', gad~'.BRENNERSTARTS', 'int') }} </td> <td align="left"> mal </td> <td align="left"> Brennerstarts gesamt </td> </tr> <tr bgcolor=#303030> <td align="right"> {{ basic.print('', gad~'.BRENNER_LEISTUNG', 'float1') }} </td> <td align="left"> % </td> <td align="left"> Brennerleistung </td> <td align="right"> {{ basic.print('', gad~'.BRENNERSTARTS.LETZTE_STUNDE', 'int') }} </td> <td align="left"> mal </td> <td align="left"> Brennerstarts letzte Stunde </td> </tr> <tr bgcolor=#303030> <td align="right"> {{ basic.print('', gad~'.ABGASTEMPERATUR', 'float1') }} </td> <td align="left"> °C </td> <td align="left"> Abgas Temperatur </td> <td align="right"> {{ basic.print('', gad~'.BRENNERSTARTS.LETZTER_TAG', 'int') }} </td> <td align="left"> mal </td> <td align="left"> Brennerstarts letzter Tag </td> </tr> <tr bgcolor=#303030> <td align="right"> {{ basic.print('', gad~'.KESSELSOLLTEMPERATUR', 'float1') }} </td> <td align="left"> °C </td> <td align="left"> Soll Kessel Temperatur </td> <td align="right"> {{ basic.print('', gad~'.BETRIEBSSTUNDEN', 'float') }} </td> <td align="left"> h </td> <td align="left"> Betriebsstunden gesamt </td> </tr> <tr bgcolor=#303030> <td align="right"> {{ basic.print('', gad~'.KESSELTEMPERATUR', 'float1') }} </td> <td align="left"> °C </td> <td align="left"> Ist Kessel Temperatur </td> <td align="right"> {{ basic.print('', gad~'.BETRIEBSSTUNDEN.LETZTE_STUNDE', 'float') }} </td> <td align="left"> h </td> <td align="left"> Betriebsstunden letzte Stunde </td> </tr> <tr bgcolor=#303030> <td colspan="2" align="center"> {{ basic.symbol('', gad~'.PUMPE.INTERN', ['An', 'Aus'], '', [1,0], '', ['icon0', 'icon0']) }} </td> <td align="left"> Interne Pumpe </td> <td align="right"> {{ basic.print('', gad~'.BETRIEBSSTUNDEN.LETZTER_TAG', 'float') }} </td> <td align="left"> h </td> <td align="left"> Betriebsstunden letzter Tag </td> </tr> <tr bgcolor=#303030> <td colspan="2" align="center"> {{ basic.symbol('', gad~'.BRENNERSTATUS', ['An', 'Aus'], '', [1,0], '', ['icon0', 'icon0']) }} </td> <td align="left"> Brennerstatus </td> <td align="right"> {{ basic.print('', gad~'.BETRIEB_ZU_STARTS', 'float1') }} </td> <td align="left"> mal/h </td> <td align="left"> Starts/Betrieb gesamt </td> </tr> <tr bgcolor=#303030> <td align="right"> {{ basic.print('', gad~'.BRENNERSTATUS.ALTER', 'int') }} </td> <td align="left"> min </td> <td align="left"> Letzte Statusänderung </td> <td align="right"> {{ basic.print('', gad~'.BETRIEB_ZU_STARTS.LETZTE_STUNDE', 'float1') }} </td> <td align="left"> mal/h </td> <td align="left"> Starts/Betrieb letzte Stunde </td> </tr> <tr bgcolor=#303030> <td align="right"> {{ basic.print('', gad~'.BRENNERSTATUS.PREV_ALTER', 'int') }} </td> <td align="left"> min </td> <td align="left"> Vorletzte Statusänderung </td> <td align="right"> {{ basic.print('', gad~'.BETRIEB_ZU_STARTS.LETZTER_TAG', 'float1') }} </td> <td align="left"> mal/h </td> <td align="left"> Starts/Betrieb letzter Tag </td> </tr> <!-- Leerzeile --> <tr> <td colspan="6"> </td> </tr> <!-- Außen --> <tr bgcolor=#252525> <td colspan="6" align="center"> Außen </td> </tr> <tr bgcolor=#252525> <td colspan="2" align="center"> Wert </td> <td> Bezeichnung </td> <td colspan="2" align="center"> Wert </td> <td> Bezeichnung </td> </tr> <tr bgcolor=#303030> <td align="right"> {{ basic.print('', gad~'.AUSSENTEMPERATUR', 'float1') }} </td> <td align="left"> °C </td> <td align="left"> Außen Temperatur </td> <td align="right"> {{ basic.print('', gad~'.AUSSENTEMPERATUR_GEDAEMPFT', 'float1') }} </td> <td align="left"> °C </td> <td align="left"> Außen Temperatur gedämpft </td> </tr> <!-- Leerzeile --> <tr> <td colspan="6"> </td> </tr> <!-- Solar --> <tr bgcolor=#252525> <td colspan="6" align="center"> Solar </td> </tr> <tr bgcolor=#252525> <td colspan="2" align="center"> Wert </td> <td> Bezeichnung </td> <td colspan="2" align="center"> Wert </td> <td> Bezeichnung </td> </tr> <tr bgcolor=#303030> <td align="right"> {{ basic.print('', gad~'.SOLARKOLLEKTORTEMPERATUR', 'float1') }} </td> <td align="left"> °C </td> <td align="left"> Solarkollektor Temperatur </td> <td align="right"> {{ basic.print('', gad~'.SOLARSPEICHERTEMPERATUR', 'float1') }} </td> <td align="left"> °C </td> <td align="left"> Solarspeicher Temperatur </td> </tr> <tr bgcolor=#303030> <td align="right"> {{ basic.print('', gad~'.SOLARWAERMEMENGE', 'int') }} </td> <td align="left"> kWh </td> <td align="left"> Wärmemenge </td> <td align="right"> {{ basic.print('', gad~'.SOLARAUSBEUTE', 'int') }} </td> <td align="left"> Wh </td> <td align="left"> Ausbeute heute </td> </tr> <tr bgcolor=#303030> <td colspan="2" align="center"> {{ basic.symbol('', gad~'.PUMPE.SOLAR', ['An', 'Aus'], '', [1,0], '', ['icon0', 'icon0']) }} </td> <td align="left"> Solar Pumpe </td> <td align="right"> {{ basic.print('', gad~'.SOLARBETRIEBSSTUNDEN', 'int') }} </td> <td align="left"> h </td> <td align="left"> Betriebsstunden </td> </tr> <!-- Leerzeile --> <tr> <td colspan="6"> </td> </tr> <!-- Heizkreise --> <tr bgcolor=#252525> <td colspan="6" align="center"> Heizkreise </td> </tr> <tr bgcolor=#252525> <td colspan="3" align="center"> HK1 - Heizkörper KG,DG,DS </td> <td colspan="3" align="center"> HK2 - Fußboden EG </td> </tr> <tr bgcolor=#252525> <td colspan="2" align="center"> Wert </td> <td> Bezeichnung </td> <td colspan="2" align="center"> Wert </td> <td> Bezeichnung </td> </tr> <tr bgcolor=#303030> <td align="right"> {{ basic.print('', gad~'.VORLAUFSOLLTEMPERATUR.HK1', 'float1') }} </td> <td align="left"> °C </td> <td align="left"> Soll Vorlauf Temperatur </td> <td align="right"> {{ basic.print('', gad~'.VORLAUFSOLLTEMPERATUR.HK2', 'float1') }} </td> <td align="left"> °C </td> <td align="left"> Soll Vorlauf Temperatur </td> </tr> <tr bgcolor=#303030> <td align="right"> {{ basic.print('', gad~'.VORLAUFISTTEMPERATUR.HK1', 'float1') }} </td> <td align="left"> °C </td> <td align="left"> Ist Vorlauf Temperatur </td> <td align="right"> {{ basic.print('', gad~'.VORLAUFISTTEMPERATUR.HK2', 'float1') }} </td> <td align="left"> °C </td> <td align="left"> Ist Vorlauf Temperatur </td> </tr> <tr bgcolor=#303030> <td colspan="2" align="center"> {{ basic.symbol('', gad~'.PUMPE.HK1', ['An', 'Aus'], '', [1,0], '', ['icon0', 'icon0']) }} </td> <td align="left"> Heizkreis Pumpe </td> <td colspan="2" align="center"> {{ basic.symbol('', gad~'.PUMPE.HK2', ['An', 'Aus'], '', [1,0], '', ['icon0', 'icon0']) }} </td> <td align="left"> Heizkreis Pumpe </td> </tr> <tr bgcolor=#303030> <td colspan="3" align="center"> {{ basic.symbol('', gad~'.BETRIEBSART.HK1', ['Normalbetrieb (Dauernd)', 'Normalbetrieb (Schaltuhr)', 'Red. Betrieb (Schaltuhr)', 'Abschaltbetrieb'], '', [3,2,1,0], '', ['icon0', 'icon0', 'icon0', 'icon0']) }} </td> <td colspan="3" align="center"> {{ basic.symbol('', gad~'.BETRIEBSART.HK2', ['Normalbetrieb (Dauernd)', 'Normalbetrieb (Schaltuhr)', 'Red. Betrieb (Schaltuhr)', 'Abschaltbetrieb'], '', [3,2,1,0], '', ['icon0', 'icon0', 'icon0', 'icon0']) }} </td> </tr> <tr bgcolor=#303030> <td colspan="3" align="center"> {{ basic.symbol('', gad~'.HEIZART.HK1', ['Normalbetrieb (Dauernd)', 'Heizen und Warmwasser', 'Nur Warmwasser', 'Abschaltbetrieb'], '', [3,2,1,0], '', ['icon0', 'icon0', 'icon0', 'icon0']) }} </td> <td colspan="3" align="center"> {{ basic.symbol('', gad~'.HEIZART.HK2', ['Normalbetrieb (Dauernd)', 'Heizen und Warmwasser', 'Nur Warmwasser', 'Abschaltbetrieb'], '', [3,2,1,0], '', ['icon0', 'icon0', 'icon0', 'icon0']) }} </td> </tr> <!-- Leerzeile --> <tr> <td colspan="6"> </td> </tr> <!-- Warmwasser --> <tr bgcolor=#252525> <td colspan="6" align="center"> Warmwasser </td> </tr> <tr bgcolor=#252525> <td colspan="2" align="center"> Wert </td> <td> Bezeichnung </td> <td colspan="2" align="center"> Wert </td> <td> Bezeichnung </td> </tr> <tr bgcolor=#303030> <td align="right"> {{ basic.print('', gad~'.WARMWASSERSOLLTEMPERATUR', 'float1') }} </td> <td align="left"> °C </td> <td align="left"> Soll Warmwasser Temperatur </td> <td colspan="2" align="center"> {{ basic.symbol('', gad~'.PUMPE.WARMWASSER', ['An', 'Aus'], '', [1,0], '', ['icon0', 'icon0']) }} </td> <td align="left"> Speicherlade Pumpe </td> </tr> <tr bgcolor=#303030> <td align="right"> {{ basic.print('', gad~'.WARMWASSERISTTEMPERATUR', 'float1') }} </td> <td align="left"> °C </td> <td align="left"> Ist Warmwasser Temperatur </td> <td colspan="2" align="center"> {{ basic.symbol('', gad~'.PUMPE.ZIRKULATION', ['An', 'Aus'], '', [1,0], '', ['icon0', 'icon0']) }} </td> <td align="left"> Zirkulations Pumpe </td> </tr> <tr bgcolor=#303030> <td align="right"> {{ basic.print('', gad~'.WARMWASSERAUSTRITTSTEMPERATUR', 'float1') }} </td> <td align="left"> °C </td> <td align="left"> Austritt Warmwasser Temperatur </td> <td colspan="2" align="center"> </td> <td align="left"> </td> </tr> <!-- Leerzeile --> <tr> <td colspan="6"> </td> </tr> <!-- Lesestatus --> <tr> <td colspan="6"> {{ basic.stateswitch('', gad~'.UPDATE', 'mini', 1, 'refresh', '', '', 'blink') }} Letzte Aktualisierung {{ basic.print('', gad~'.LAST_READ') }} </td> </tr> </table> </div> {% endmacro %}
Dazu gehört dann noch die folgende KonfigurationCode:{% import "widget_my.html" as widget_my %} {{ widget_my.icon_and_popup_heizungviessmann('VIESSMANN', 'Heizung Viessmann') }}
Vielleicht hilft es ja einem und man kann sich etwas rauskopieren und für sich anpassen.Code:ZAEHLER: HEIZUNG: LAST_READ: remark: Wann wurde zuletzt die Schnittstelle genutzt. Dieses Item wird über das Item ANLAGEN_LEISTUNG bei einem Update neu getriggert und geschrieben. name: Letztes Update von type: str UPDATE: name: Update aller Items mit 'viess_read' type: bool visu_acl: rw viess_update: 1 autotimer: 1 = 0 ALARMMESSAGE: name: Heizung Alarmmeldung type: bool visu_acl: rw value: false cache: true ANLAGEN_LEISTUNG: name: Anlagenleistung type: num viess_read: Anlagenleistung viess_read_cycle: 60 viess_init: true database: init on_update: ZAEHLER.HEIZUNG.LAST_READ = sh.ZAEHLER.HEIZUNG.ANLAGEN_LEISTUNG.last_update().strftime('%a %d.%m.%Y %H:%M:%S') BRENNER_LEISTUNG: name: Brennerleistung type: num viess_read: Brennerleistung viess_read_cycle: 60 viess_init: true database: init AUSSENTEMPERATUR: name: Aussentemperatur_TP type: num viess_read: Aussentemperatur_TP viess_read_cycle: 300 viess_init: true database: init AUSSENTEMPERATUR_GEDAEMPFT: name: Aussentemperatur_Dp type: num viess_read: Aussentemperatur_Dp viess_read_cycle: 300 viess_init: true database: init BRENNERSTATUS: name: Brennerstatus type: bool cache: true eval: True if (sh.ZAEHLER.HEIZUNG.BRENNER_LEISTUNG() > 0.0) else False eval_trigger: - ZAEHLER.HEIZUNG.BRENNER_LEISTUNG ALTER: # Brenner eingesachaltet name: Dauer des aktuellen Brennerstatus type: num # Berechnung minütlich crontab: - '* * * * = 1' # crontab Minütlich - Aufbau: mm(0..59) hh day(0..28) wday(0=Mo, 1=Di, 2=Mi, 3=Do, 4=Fr, 5=Sa, 6=So) enforce_updates: true # Updates True, da der Crontab immer mit 1 ausführt und die Berechnung durchgeführt werden soll. eval: (sh.ZAEHLER.HEIZUNG.BRENNERSTATUS.age() / 60) PREV_ALTER: # Brenner eingesachaltet name: Dauer des Brennerstatus zuvor type: num # Berechnung minütlich crontab: - '* * * * = 1' # crontab Minütlich - Aufbau: mm(0..59) hh day(0..28) wday(0=Mo, 1=Di, 2=Mi, 3=Do, 4=Fr, 5=Sa, 6=So) enforce_updates: True # Updates True, da der Crontab immer mit 1 ausführt und die Berechnung durchgeführt werden soll. eval: (sh.ZAEHLER.HEIZUNG.BRENNERSTATUS.prev_age() / 60) BRENNERSTARTS: name: Brennerstarts type: num viess_read: Brennerstarts viess_read_cycle: 300 viess_init: true database: init LETZTE_STUNDE: name: Brennertstarts innerhalb der letzten Stunde type: num cache: True # Berechnung stündlich crontab: - '0 * * * = 1' # crontab Stündlich - Aufbau: mm(0..59) hh day(0..28) wday(0=Mo, 1=Di, 2=Mi, 3=Do, 4=Fr, 5=Sa, 6=So) enforce_updates: True # Updates True, da der Crontab immer mit 1 ausführt und die Berechnung durchgeführt werden soll. eval: round((sh.ZAEHLER.HEIZUNG.BRENNERSTARTS() - sh.ZAEHLER.HEIZUNG.BRENNERSTARTS.db('min', '1h')), 1) LETZTER_TAG: name: Brennertstarts innerhalb des letzten Tages type: num cache: True database: init # Berechnung täglich crontab: - '0 0 * * = 1' # crontab Täglich 0 Uhr - Aufbau: mm(0..59) hh day(0..28) wday(0=Mo, 1=Di, 2=Mi, 3=Do, 4=Fr, 5=Sa, 6=So) enforce_updates: True # Updates True, da der Crontab immer mit 1 ausführt und die Berechnung durchgeführt werden soll. eval: round((sh.ZAEHLER.HEIZUNG.BRENNERSTARTS() - sh.ZAEHLER.HEIZUNG.BRENNERSTARTS.db('min', '1d')), 1) BETRIEBSSTUNDEN: name: Brenner_Betriebsstunden type: num viess_read: Brenner_Betriebsstunden viess_read_cycle: 300 viess_init: true database: init LETZTE_STUNDE: name: Betriebsstunden innerhalb der letzten Stunde type: num cache: True # Berechnung stündlich crontab: - '0 * * * = 1' # crontab Stündlich - Aufbau: mm(0..59) hh day(0..28) wday(0=Mo, 1=Di, 2=Mi, 3=Do, 4=Fr, 5=Sa, 6=So) enforce_updates: True # Updates True, da der Crontab immer mit 1 ausführt und die Berechnung durchgeführt werden soll. eval: round((sh.ZAEHLER.HEIZUNG.BETRIEBSSTUNDEN() - sh.ZAEHLER.HEIZUNG.BETRIEBSSTUNDEN.db('min', '1h')), 1) LETZTER_TAG: name: Betriebsstunden innerhalb des letzten Tages type: num cache: True database: init # Berechnung täglich crontab: - '0 0 * * = 1' # crontab Täglich 0 Uhr - Aufbau: mm(0..59) hh day(0..28) wday(0=Mo, 1=Di, 2=Mi, 3=Do, 4=Fr, 5=Sa, 6=So) enforce_updates: True # Updates True, da der Crontab immer mit 1 ausführt und die Berechnung durchgeführt werden soll. eval: round((sh.ZAEHLER.HEIZUNG.BETRIEBSSTUNDEN() - sh.ZAEHLER.HEIZUNG.BETRIEBSSTUNDEN.db('min', '1d')), 1) BETRIEB_ZU_STARTS: name: Betriebsstunden / Brennertstarts type: num eval: round(sh...Brennerstarts() / sh...Brenner_Betriebsstunden(), 2) eval_trigger: - ..Brenner_Betriebsstunden - ..Brennerstarts database: init LETZTE_STUNDE: name: Brennertstarts / Betriebsstunden innerhalb der letzten Stunde type: num cache: True # Berechnung stündlich crontab: - '0 * * * = 1' # crontab Stündlich - Aufbau: mm(0..59) hh (0..23) day(0..28) wday(0=Mo, 1=Di, 2=Mi, 3=Do, 4=Fr, 5=Sa, 6=So) enforce_updates: True # Updates True, da der Crontab immer mit 1 ausführt und die Berechnung durchgeführt werden soll. eval: (round(((sh.ZAEHLER.HEIZUNG.BRENNERSTARTS() - sh.ZAEHLER.HEIZUNG.BRENNERSTARTS.db('min', '1h')) / (sh.ZAEHLER.HEIZUNG.BETRIEBSSTUNDEN() - sh.ZAEHLER.HEIZUNG.BETRIEBSSTUNDEN.db('min', '1h'))), 1)) if ((sh.ZAEHLER.HEIZUNG.BETRIEBSSTUNDEN() - sh.ZAEHLER.HEIZUNG.BETRIEBSSTUNDEN.db('min', '1h')) > 0) else 0 LETZTER_TAG: name: Brennertstarts / Betriebsstunden innerhalb des letzten Tages type: num cache: True database: init # Berechnung täglich crontab: - '0 0 * * = 1' # crontab Täglich 0 Uhr - Aufbau: mm(0..59) hh (0..23) day(0..28) wday(0=Mo, 1=Di, 2=Mi, 3=Do, 4=Fr, 5=Sa, 6=So) enforce_updates: True # Updates True, da der Crontab immer mit 1 ausführt und die Berechnung durchgeführt werden soll. eval: (round(((sh.ZAEHLER.HEIZUNG.BRENNERSTARTS() - sh.ZAEHLER.HEIZUNG.BRENNERSTARTS.db('min', '1d')) / (sh.ZAEHLER.HEIZUNG.BETRIEBSSTUNDEN() - sh.ZAEHLER.HEIZUNG.BETRIEBSSTUNDEN.db('min', '1d'))), 1)) if ((sh.ZAEHLER.HEIZUNG.BETRIEBSSTUNDEN() - sh.ZAEHLER.HEIZUNG.BETRIEBSSTUNDEN.db('min', '1d')) > 0) else 0 KESSELTEMPERATUR: name: Kesseltemperatur_TP type: num viess_read: Kesseltemperatur_TP viess_read_cycle: 180 viess_init: true database: init KESSELSOLLTEMPERATUR: name: Kesselsolltemperatur type: num viess_read: Kesselsolltemperatur viess_read_cycle: 180 viess_init: true ABGASTEMPERATUR: name: Abgastemperatur type: num viess_read: Abgastemperatur viess_read_cycle: 180 viess_init: true database: init WARMWASSERSOLLTEMPERATUR: name: Abgastemperatur type: num viess_read: Warmwasser_Solltemperatur viess_read_cycle: 180 viess_init: true database: init WARMWASSERISTTEMPERATUR: name: Abgastemperatur type: num viess_read: Warmwasser_Temperatur viess_read_cycle: 180 viess_init: true database: init WARMWASSERAUSTRITTSTEMPERATUR: name: Abgastemperatur type: num viess_read: Warmwasser_Austrittstemperatur viess_read_cycle: 180 viess_init: true database: init BETRIEBSART: HK1: name: Betriebasart 0..3 type: num viess_read: Betriebsart_HK1 viess_read_cycle: 180 viess_init: true database: init HK2: name: Betriebasart 0..3 type: num viess_read: Betriebsart_HK2 viess_read_cycle: 180 viess_init: true database: init HEIZART: HK1: name: Heizart 0..4 type: num viess_read: Heizart_HK1 viess_read_cycle: 180 viess_init: true database: init HK2: name: Heizart 0..4 type: num viess_read: Heizart_HK2 viess_read_cycle: 180 viess_init: true database: init VORLAUFSOLLTEMPERATUR: HK1: name: Heizart 0..4 type: num viess_read: Vorlauftemperatur_Soll_HK1 viess_read_cycle: 180 viess_init: true database: init HK2: name: Heizart 0..4 type: num viess_read: Vorlauftemperatur_Soll_HK2 viess_read_cycle: 180 viess_init: true database: init VORLAUFISTTEMPERATUR: HK1: name: Heizart 0..4 type: num viess_read: Vorlauftemperatur_HK1 viess_read_cycle: 180 viess_init: true database: init HK2: name: Heizart 0..4 type: num viess_read: Vorlauftemperatur_HK2 viess_read_cycle: 180 viess_init: true database: init PUMPE: HK1: name: Umwälzpumpe HK1 type: bool viess_read: Heizkreispumpe_HK1 viess_read_cycle: 60 viess_init: true database: init HK2: name: Umwälzpumpe HK2 type: bool viess_read: Heizkreispumpe_HK2 viess_read_cycle: 60 viess_init: true database: init WARMWASSER: name: Umwälzpumpe HK2 type: bool viess_read: Speicherladepumpe viess_read_cycle: 60 viess_init: true database: init ZIRKULATION: name: Zirkulations Pumpe type: bool viess_read: Zirkulationspumpe viess_read_cycle: 60 viess_init: true database: init SOLAR: name: Solar Pumpe type: bool viess_read: SolarPumpe viess_read_cycle: 60 viess_init: true database: init INTERN: name: Interne Pumpe type: bool viess_read: Interne_Pumpe viess_read_cycle: 60 viess_init: true database: init SOLARKOLLEKTORTEMPERATUR: name: Solarkollektor Temperatur [°C] type: num viess_read: Kollektortemperatur viess_read_cycle: 180 viess_init: true database: init SOLARSPEICHERTEMPERATUR: name: Solarspeicher Temperatur [°C] type: num viess_read: Speichertemperatur viess_read_cycle: 180 viess_init: true database: init SOLARBETRIEBSSTUNDEN: name: Solar Betriebsstunden [h] type: num viess_read: Solar_Betriebsstunden viess_read_cycle: 3600 viess_init: true database: init SOLARWAERMEMENGE: name: Solar Wärmemenge [kWh] type: num viess_read: Solar_Waermemenge viess_read_cycle: 3600 viess_init: true database: init SOLARAUSBEUTE: name: Solar Ausbeute heute [Wh] type: num viess_read: Solar_Ausbeute viess_read_cycle: 3600 viess_init: true database: init SAMMELSTOERUNG: name: Sammelstoerung type: num viess_read: Sammelstoerung viess_read_cycle: 180 viess_init: true database: init ERROR_1: name: Fehlerhistory Eintrag 1 type: foo viess_read: Error0 viess_read_cycle: 3600 viess_init: true ERROR_2: name: Fehlerhistory Eintrag 2 type: foo viess_read: Error1 viess_read_cycle: 3600 viess_init: true ERROR_3: name: Fehlerhistory Eintrag 3 type: foo viess_read: Error2 viess_read_cycle: 3600 viess_init: true ERROR_4: name: Fehlerhistory Eintrag 4 type: foo viess_read: Error3 viess_read_cycle: 3600 viess_init: true ERROR_5: name: Fehlerhistory Eintrag 5 type: foo viess_read: Error4 viess_read_cycle: 3600 viess_init: true ERROR_6: name: Fehlerhistory Eintrag 6 type: foo viess_read: Error5 viess_read_cycle: 3600 viess_init: true ERROR_7: name: Fehlerhistory Eintrag 7 type: foo viess_read: Error6 viess_read_cycle: 3600 viess_init: true ERROR_8: name: Fehlerhistory Eintrag 8 type: foo viess_read: Error7 viess_read_cycle: 3600 viess_init: true ERROR_9: name: Fehlerhistory Eintrag 9 type: foo viess_read: Error8 viess_read_cycle: 3600 viess_init: true ERROR_10: name: Fehlerhistory Eintrag 10 type: foo viess_read: Error9 viess_read_cycle: 3600 viess_init: true ICON_STATUS: # 0 = Störung Icon = control_x.svg (rot) # 1 = Solarpumpe Icon = sani_solar.svg (weiss) # 2 = Brenner Icon = sani_boiler_temp.svg (weiss) # 3 = Brenner aus Icon = sani_boiler_temp.svg (weiss) name: Iconstatus für die Heizung type: num cache: True eval: 0 if (sh.ZAEHLER.HEIZUNG.SAMMELSTOERUNG() == True) else 1 if (sh.ZAEHLER.HEIZUNG.PUMPE.SOLAR() == True) else 2 if (sh.ZAEHLER.HEIZUNG.BRENNER_LEISTUNG() > 0.0) else 3 eval_trigger: - ZAEHLER.HEIZUNG.SAMMELSTOERUNG - ZAEHLER.HEIZUNG.PUMPE.SOLAR - ZAEHLER.HEIZUNG.BRENNER_LEISTUNG
Gruß
loesermanZuletzt geändert von loeserman; 11.12.2020, 11:05.
Einen Kommentar schreiben:
-
Ich habe nach verschiedenen Instabilitäten mal das Plugin deaktiviert - keine Änderung, zum Glück
und weiß nun, dass der Raspi4 zwar schön flott, aber thermisch instabil ist (zumindest meiner). Zum Schluss 2-3 Reboots am Tag war dann doch nicht mehr gut.
Den habe ich jetzt durch einen RPi 3 ersetzt und der läuft völlig klaglos, insofern habe ich auch keine Anhaltspunkte, dass das Plugin nicht sauber liefe.
Ich würde dann noch das Commandset einbauen, das loeserman geschickt hat und auch dieses (zumindest in Teilen), und dann könnte das von mir aus auch gern ins Release.
Vitotronic 200 ist anscheinend so eine Art Gattungsbegriff, so ein Teil habe ich bei mir nämlich auch an der Heizung, aber meine ist eine Wärmepumpe von 2014, und es spricht P300 einwandfrei
ob die V200KW2 das auch kann, müsste TCr82 dann mal ausprobieren. Wenn wir KW2 noch mit aufnehmen, müsste das natürlich erst noch getestet werden; ich sehe aber keine Notwendigkeit, das Plugin nach der bisherigen Wartezeit jetzt "sofort" reinzubekommen; so lange können wir dann auch noch warten...
Am Wochenende mache ich das mal fertig, dann kann er testen, und dann schauen wir weiter. Ok?
Einen Kommentar schreiben:
-
loeserman Blöde Frage, woher hast du denn das Widget aus Post 140 https://knx-user-forum.de/forum/supp...53#post1573653
Soweit ich mich erinnere gab es mal eine Featureanfrage zu nem Table Widget..
Einen Kommentar schreiben:
-
Hallo,Zitat von Morg Beitrag anzeigenOb deine Heizung nur KW2 kann oder auch P300, weiß ich natürlich nicht. Ich habe mich auch mit KW2 nie wirklich beschäftigt; aber die Konfiguration in der vcontrold.xml sieht für mich seltsam aus; die Kommandosequenzen sind für KW2 und P300 identisch. Da hätte ich jetzt was anderes erwartet.
soweit ich weiß, kann die Vitotronic 200 nur das KW2 Protokoll. Die Sequenzen sind zwischen KW2 und P300 unterschiedlich. Das KW2 Protokoll ist hier beschrieben.
Die Datentypen (zumindest ein Auszug) findest sich hier.
Morg
Nachdem das Plugin bei uns ja nun schon einige Zeit läuft, könnten wir es doch auch noch in den nächsten shNG Release bringen, oder?
Auch die Timer setzten etc mit Anbindung an smartVISU klappt stabil.
Beste Grüße
Einen Kommentar schreiben:
-
Ich habe nicht all zu viel von der Konfig benutzt, kann also nicht sagen ob alles wirklich korrekt ist. Ich hatte damals mit vielen verschiedenen Konfigs herum probiert und bin letztlich bei der hängen geblieben.
Ich weiss aber wie bereits schon erwähnt dass der Mischer von HK2 nicht die richtige % angezeigt hatte mit der Konfig (zeigte immer 100%).
Benutzt habe ich folgendes:
getTempA, getTempWWist, getTempWWsoll, getTempKist, getTempKsoll, getBrennerStufe, getTempVListM2, getTempVLsollM1, getTempVLsollM2, getPumpeStatusM2, getPumpeStatusSp, getMischerM2***, getBetriebArtM1, getBetriebArtM2
edit:
Ich muss sagen, getTempVLsollM1 und getTempVLsollM2 sieht auch nicht richtig aus, bin mir aber nicht sicher ob das die ganze Zeit so war...Code:[FONT=monospace][COLOR=#54ff54][B]root@heizung[/B][/COLOR][COLOR=#000000]:[/COLOR][COLOR=#5454ff][B]~[/B][/COLOR][COLOR=#000000]# vclient -c getTempA,getTempWWist,getTempWWsoll,getTempKist,ge tTempKsoll,getBrennerStufe,getTempVListM2,getTempV LsollM1,getTempVLsollM2,getPumpeStatusM2,getPumpeS tatusSp,getMischerM2,getBetriebAr[/COLOR] tM1,getBetriebArtM2 getTempA: 3.200000 Grad Celsius getTempWWist: 37.099998 Grad Celsius getTempWWsoll: 51.000000 Grad Celsius getTempKist: 71.099998 Grad Celsius getTempKsoll: 71.400002 Grad Celsius getBrennerStufe: 0 getTempVListM2: 38.900002 Grad Celsius getTempVLsollM1: -0.100000 Grad Celsius getTempVLsollM2: -0.100000 Grad Celsius getPumpeStatusM2: 1 getPumpeStatusSp: 0 getMischerM2: 100.000000 % getBetriebArtM1: H+WW getBetriebArtM2: H+WW[/FONT]
Zuletzt geändert von TCr82; 10.12.2020, 23:01.
Einen Kommentar schreiben:
-
Also, die vito.xml ist ziemlich Kraut und Rüben, aber das sollte sich klären lassen.
Ob deine Heizung nur KW2 kann oder auch P300, weiß ich natürlich nicht. Ich habe mich auch mit KW2 nie wirklich beschäftigt; aber die Konfiguration in der vcontrold.xml sieht für mich seltsam aus; die Kommandosequenzen sind für KW2 und P300 identisch. Da hätte ich jetzt was anderes erwartet.
Ich kann es dir am Wochenende ja mal zusammenbasteln und lade eine neue Version ins develop hoch. Dann probierst du einfach mal, ob es mit P300 geht; und wenn nicht, dann setze ich mich nochmal an die Protokollspezifikation und schreibe das KW2-Protokoll eben auch noch ins Plugin.
Einen Kommentar schreiben:
-
voller Elan hab ich heute den Raspi2 im Keller von Ubuntu 18.04 auf 20.04 umformatiert und shNG drauf gespielt.
Natürlich hab ich Idiot vergessen meine zwei Skripte weg zu sichern
Aber was solls, das leben geht weiter
Also das komplette /etc hab ich natürlich weg gesichert - inkl. der vcontrold.xml und vito.xml
Ich hab das mal als Anhang ran gehängt.
Ich hab schon gesehen, dass das Protokoll KW2 und die Heizung V200KW2 nicht unterstützt ist - oder irre ich mich?Angehängte DateienZuletzt geändert von TCr82; 10.12.2020, 22:14.
Einen Kommentar schreiben:
-
Die Konfiguration ist nicht weniger problematisch als bei vcontrold - du brauchst die Funktionen, die Adressen und den Datentyp.
Wenn du mir deine vcontrold-Konfiguration schickst, kann ich das in das Plugin einbauen, dann musst du das nur noch richtig konfigurieren. Oder hast du ggf. sogar eine der Anlagen, die schon "drin" sind?
Einen Kommentar schreiben:
-
Hey danke, das https://knx-user-forum.de/forum/supp...zu-smarthomeng hatte ich auch gerade gefunden. Da muss ich mich mal wieder erst mal einlesen und vor alle dem Zeit finden.
Speziell muss ich erst mal testen wie dein Plugin mit meiner Vitotronic 200 Typ KW2 funktioniert. Das rum hantieren mit den Adressen und Protokollen fand ich leider schon beim vcontrold dermaßen
.... deswegen habe ich da nur lesend zugegriffen... Aber habe es zb auch nie hinbekommen alles richtig auszulesen.
Z.B. funktioniert alles, bis auf den % Wert des Mischers der in HK2 verbaut ist. Hatte ich das Protokoll gewechselt, dann hatte ich den Mischer aber was anders ging nicht mehr...
Hoffentlich finde ich demnächst mal Zeit das zu testen
Gruß und Danke nochmal.
Einen Kommentar schreiben:
-
Genau so ist es realisiert.Zitat von TCr82 Beitrag anzeigenDas Plugin ersetzt vcontrold, so wie ich es verstanden habe?!
Da bist Du denke ich auf dem richtigen Weg. Während der Entwicklung des Plugins hatte ich das ähnlich. Mit Test-RPI hatte das Plugin und hat die Daten auf den Haupt-RPI übertragen. Beides natürlich mit shNG.Zitat von TCr82 Beitrag anzeigench kann auf dem Raspi im Keller natürlich auch shNG drauf bauen mit dem Plugin.... aber die Daten müssen ja dann nach oben kommen auf den Haupt-shNG server...
Schau mal hier, hier und hier
Der Austausch geht über network plugin pder mqtt.
Beste Grüße
Michael
Einen Kommentar schreiben:
-
Hey, das ist ja GOIL.... sowas habe ich mir schon die ganze Zeit gewünscht...
Das Plugin ersetzt vcontrold, so wie ich es verstanden habe?!
Bleibt für mich nur ein kleines Problem..... Mein Raspi mit vcontrol ist im Keller mit dem Optolink an der Heizung und per WLAN am Netzwerk.
Mein Smarthome-PC ist im EG im 19" Kasten eingebaut und Ruft die Daten von vcrontrol (lesend) momentan über ein von mir gebasteltes Skript über einenen Mini-HTTP Webserver vom Raspi per JSON ab.
Hat wer ne Idee, wie man das umbauen könnte?
Ich kann auf dem Raspi im Keller natürlich auch shNG drauf bauen mit dem Plugin.... aber die Daten müssen ja dann nach oben kommen auf den Haupt-shNG server...
Einen Kommentar schreiben:
-
Mit dem item-Property bekommst du den letzten Lesezeitpunkt sogar für jedes Item einzeln
Gut, wenns für dich passt!
Einen Kommentar schreiben:


Einen Kommentar schreiben: