39_VALVES - kleines Helferlein um Positionen von Heizungsthermostate auszuwerten

Begonnen von epsrw1, 18 Juni 2014, 05:05:00

Vorheriges Thema - Nächstes Thema

epsrw1

hier ein kleines helferlein um einen halbwegs sinnvollen und individuell gewichteten durchschnittswert der ventilpositionen mehrerer heizungsthermostate zu berechnen.
die idee ist quasi aus der not entstanden, es war mir zu umständlich die readings einzeln von einem remote fhem zu holen der selbst remote des systems ist das die daten haben will (rekursivproblem...). so kann ich direkt auf meinem heizungs-rechner mit den daten arbeiten die von einem anderen server verarbeitet werden.

die liste aller thermostate wird in einem attr eingestellt, name des readings in einem weiteren. das modul prüft dann regelmäßig (attr: poll interval) die daten des fhem-devices und berechnet neu wenn ein update vorhanden ist.
für die berechnung kann man folgende einstellungen vorgeben:
-ignoriere niedrigste 0...3 positionen
-ignoriere höchste 0...3 positionen
-ignoriere namentlich genannte devices
-priority-device liste (zählen doppelt)
-optionale einzeleinstellung für jeden thermostat, multipliziere mit attr-wert (zB:0,95 um 5% der position abzuziehen) um schlechten hydraulischen abgleich zu kompensieren

readings:
state ->mittelwert nach oben beschriebener berechnung
valve_<Devicename> -> berechnete virtuelle ventilstellung pro gerät
valveDetail_<Devicename> -> debug info mit details
raw_average -> simpler mittelwert ohne berücksichtigung der gewichtungen (ignores werden auch hier ignoriert)
valve_max -> größte aktuelle ventilöffnung
valve_min -> kleinste aktuelle ventilöffnung

in der theorie sollte es mit allen möglichen thermostaten funktionieren, falls jemand feststellt daß es mit irgendeinem hersteller inkompatibel ist versuche ich gerne das nachzurüsten.

doku ist nicht meine stärke, aber es gibt wie immer den befehl "get attrHelp ....."

LG, florian


# $Id: 39_VALVES.pm 1015 2016-12-04 09:55:00Z Florian Duesterwald $



http://www.fhemwiki.de/wiki/Raumbedarfsabh%C3%A4ngige_Heizungssteuerung
http://www.fhemwiki.de/wiki/VALVES
Ich habe keine Ahnung, aber davon wenigstens ganz viel

CQuadrat

Hallo Florian,

an genau so etwas bastele ich zur Zeit auch herum. Allerdings wollte ich das mit dummys realisieren. Dein Ansatz ist da deutlich schicker  ;)

Was ich aber nicht sehe, wo die Gewichtung der einzelnen Heizkörper herkommt. Ich vermute mal, dass jeder Heizkörper nach seiner Größe/Heizleistung in die Mittelwertberechnung einfließt. Korrekt?


Viele Grüße

Christoph
FHEM auf Mini-ITX-Server mit Intel Quad-Core J1900:
+ HM: HM-LAN, HM-USB, HM-MOD-UART mit div. HM-Komponenten
+ RFXtrx: Funkwetterstation Bresser mit ext. Thermometer, Regenmesser und Windmesser
+ TUL (KNX-Anbindung), KM271 (per ser2net), SONOS (div. Gimmicks), OneWire, Hue

epsrw1

christoph,
die dummy lösung watr mir zu unhandlich, insbesondere das einzelne abrufen vom remote fhem...

ZitatWas ich aber nicht sehe, wo die Gewichtung der einzelnen Heizkörper herkommt. Ich vermute mal, dass jeder Heizkörper nach seiner Größe/Heizleistung in die Mittelwertberechnung einfließt.

zu Deiner frage:
die individuelle gewichtung kann über attr. eingestellt werden.
die attr sind zunächst nicht vorhanden, und werden der attr.List erst hinzugefügt wenn Du attr valvesDeviceList Heizg1,Heizg2,Heitg3,... ausführst. danach ist im attr dropdown valvesHeizg1Gewichtung valvesHeizg2Gewichtung usw.. vorhanden.
(beim start ohne eigenes List attr werden nur die defaults verwendet, dabei auch nicht die extra attr angelegt.)

ich würde statt heizleistung/fläche etc... eher einen individuellen erfahrungswert als maß der dinge nehmen für diese einstellung, man weiß ja, im raum weit weg von der heizung mit dem sehr kleinen heizkörper ist die ventilstellung in der regel eher 60% statt 50%, d.h. unterschied für das einzelattr wäre 1.2 (durchschnitt(50%) * attr (1.2) = 60%
edit (hab ich falsch erklärt):d.h. unterschied für das einzelattr wäre 0.8 (durchschnitt(60%) * attr (0.8) = 50% ->50% werden für die berechnung angenommen obwohl tatsächliche ventilpos. höher

rechnerisch könnte man mit einigem aufwand das verhältnis heizleistung./.wärmebedarf des raums (aus: raumvolumen./.isolierungsqualität./.wunschtemperatur./. ... ... usw) nehmen um auf das gleiche zu kommen. dazu bin ich persönlich jedoch zu bequem ;)

LG, florian
Ich habe keine Ahnung, aber davon wenigstens ganz viel

epsrw1

mini-doku

edit: in ersten beitrag des threads verschoben
Ich habe keine Ahnung, aber davon wenigstens ganz viel

cwagner

Hi Florian,

die abzufragenden Ventile müssen als Liste, können nicht als RegEx á la "Aktor.*" eingetragen werden?

Herzliche Grüße

Christian
PI 2B+/3B+ Raspbian 12, Perl 5.36.0, FHEM 6.3: 295 Module in ConfigDB: Steuerung Heizkessel, FBH, Solarthermie, kontr. Lüftung mit WRG. Smarthome u.a. HMCUL, 1-Wire (FT232RL ; DS2480B), EnOcean (TCM EPS3), MQTT2. DOIF, PID20, Threshold, OWX; Micropelt IRTV, Volkszähler, SolarForecast; MariaDB

epsrw1

ja, es muß eine liste sein damit die zusätzlichen attr für die gewichtung sauber generiert werden können
Ich habe keine Ahnung, aber davon wenigstens ganz viel

cwagner

Moin, Florian,

beim ersten Neustart hatte ich eine interessante Liste:

2014.06.18 23:15:11 3: VALVES MAX_Valve has been defined
2014.06.18 23:15:11 3: VALVES MAX_Valve: attribute-value [group] = Heizung changed
2014.06.18 23:15:11 3: VALVES MAX_Valve: attribute-value [room] = Heizung changed
2014.06.18 23:15:11 3: VALVES MAX_Valve attribute-value [valvesDeviceList] = Aktor_Esszimmer,Aktor_Wohnzimmer,Aktor_Kueche,Aktor_Bad_EG,Aktor_Bad_OG,Aktor_Suedzimmer,Aktor_Jula,Aktor_Schlafzimmer changed
2014.06.18 23:15:11 3: VALVES MAX_Valve Heizg_Bad [err] DeviceReading not present
2014.06.18 23:15:11 3: VALVES MAX_Valve Heizg_Buero [err] DeviceReading not present
2014.06.18 23:15:11 3: VALVES MAX_Valve Heizg_WC_unten [err] DeviceReading not present
2014.06.18 23:15:11 3: VALVES MAX_Valve Heizg_Wohnzimmer1 [err] DeviceReading not present
2014.06.18 23:15:11 3: VALVES MAX_Valve Heizg_Wohnzimmer2 [err] DeviceReading not present
2014.06.18 23:15:11 3: VALVES MAX_Valve: attribute-value [valvesDeviceReading] = state changed
2014.06.18 23:15:11 3: VALVES MAX_Valve attribute-value [valvesPollInterval] = 15 changed
2014.06.18 23:15:11 3: VALVES MAX_Valve Aktor_Esszimmer [err] DeviceReading not present
2014.06.18 23:15:11 3: VALVES MAX_Valve Aktor_Wohnzimmer [err] DeviceReading not present
2014.06.18 23:15:11 3: VALVES MAX_Valve Aktor_Kueche [err] DeviceReading not present
2014.06.18 23:15:11 3: VALVES MAX_Valve Aktor_Bad_EG [err] DeviceReading not present
2014.06.18 23:15:11 3: VALVES MAX_Valve Aktor_Bad_OG [err] DeviceReading not present
2014.06.18 23:15:11 3: VALVES MAX_Valve Aktor_Suedzimmer [err] DeviceReading not present
2014.06.18 23:15:11 3: VALVES MAX_Valve Aktor_Jula [err] DeviceReading not present
2014.06.18 23:15:11 3: VALVES MAX_Valve Aktor_Schlafzimmer [err] DeviceReading not present

Da ist im Code noch eine hübsche Liste Deiner 5 Thermostate :-)

Auf der Telnet-Konsole ernte ich haufenweise Use of uninitialized value in addition (+) at ./FHEM/98_VALVES.pm line 236  jeweils in der Anfangsphase nach einem Neustart.

Mein Listing:
Internals:
   CFGFN      ./FHEM/heizung.cfg
   NAME       MAX_Valve
   NR         774
   NTFY_ORDER 50-MAX_Valve
   STATE      0
   TYPE       VALVES
   Readings:
     2014-06-18 23:48:10   raw_average     0
     2014-06-18 23:48:10   state           0
     2014-06-18 23:54:04   valveDetail_CC_Bad_EG pos:0 calc:0 time:2014-06-18 23:53:36
     2014-06-18 23:54:04   valveDetail_CC_Bad_OG pos:0 calc:0 time:2014-06-18 23:51:45
     2014-06-18 23:54:04   valveDetail_CC_Jula pos:0 calc:0 time:2014-06-18 23:51:17
     2014-06-18 23:54:04   valveDetail_CC_Kueche pos:0 calc:0 time:2014-06-18 23:53:12
     2014-06-18 23:54:04   valveDetail_CC_Schlafzimmer pos:0 calc:0 time:2014-06-18 23:52:58
     2014-06-18 23:54:04   valveDetail_CC_Suedzimmer pos:0 calc:0 time:2014-06-18 23:52:49
     2014-06-18 23:54:04   valveDetail_CC_Wohnzimmer pos:0 calc:0 time:2014-06-18 23:51:16
     2014-06-18 23:53:36   valve_CC_Bad_EG 0
     2014-06-18 23:51:45   valve_CC_Bad_OG 0
     2014-06-18 23:51:17   valve_CC_Jula   0
     2014-06-18 23:53:12   valve_CC_Kueche 0
     2014-06-18 23:52:58   valve_CC_Schlafzimmer 0
     2014-06-18 23:52:49   valve_CC_Suedzimmer 0
     2014-06-18 23:51:16   valve_CC_Wohnzimmer 0
     2014-06-18 23:48:10   valve_average   0
     2014-06-18 23:31:09   valve_max       0
     2014-06-18 23:31:09   valve_min       0
Attributes:
   group      Heizung
   room       Heizung
   valvesDeviceList CC_Esszimmer,CC_Wohnzimmer,CC_Kueche,CC_Bad_EG,CC_Bad_OG,CC_Suedzimmer,CC_Jula,CC_Schlafzimmer
   valvesDeviceReading actuator
   valvesPollInterval 15



Herzliche Grüße

Christian
PI 2B+/3B+ Raspbian 12, Perl 5.36.0, FHEM 6.3: 295 Module in ConfigDB: Steuerung Heizkessel, FBH, Solarthermie, kontr. Lüftung mit WRG. Smarthome u.a. HMCUL, 1-Wire (FT232RL ; DS2480B), EnOcean (TCM EPS3), MQTT2. DOIF, PID20, Threshold, OWX; Micropelt IRTV, Volkszähler, SolarForecast; MariaDB

epsrw1

uninitialized val in l.236 habe ich repariert, war ein bug.

ein paar meiner devices waren noch als default hinterlegt, habe ich auch geändert, und gleich noch eine bremse eingebaut: falls die dev list nicht vorhanden ist startet die berechnung nicht und in state steht eine fehlermeldung.

Zitat2014.06.18 23:15:11 3: VALVES MAX_Valve Aktor_Suedzimmer [err] DeviceReading not present
habe jetzt  mal die zeit bis zum ersten loop ab fhem-start oder define auf ca.1 minute erhöht. vermute es liegt daran daß die devices (noch) nicht alle da waren, oder die reihenfolge Deiner def's innerhalb der fhem.cfg ist unlogisch gewesen

Attributes:
   group      Heizung
   room       Heizung
   valvesDeviceList CC_Esszimmer,CC_Wohnzimmer,CC_Kueche,CC_Bad_EG,CC_Bad_OG,CC_Suedzimmer,CC_Jula,CC_Schlafzimmer
   valvesDeviceReading actuator
   valvesPollInterval 15

handling der inividuellen attr ebenfalls geringfügig updated.

neue version im ersten beitrag des threads.
# $Id: 98_VALVES.pm 1006 2014-06-19 01:50:00Z Florian Duesterwald $

grüße, florian
Ich habe keine Ahnung, aber davon wenigstens ganz viel

cwagner

Jo, das passt besser!
Bezüglich des "Esszimmers" war das mein Fehler, aber
im laufenden Betrieb habe ich jetzt erst mal weiter Fehlermeldungen, weil sich VALVES irgendwo aus vorherigen Experimenten etliche ungültige bzw. Testdevices immer noch gemerkt hat und mir diese unter Attribute auch noch z.B. als <DeviceXX>valve anbeitet (inkl. meiner Versuche mit regEXes). Wen oder was muss ich da löschen, um wieder tabula rasa zu haben? set <devicename> reset hat nicht geholfen.

Herzliche Grüße

Christian
PI 2B+/3B+ Raspbian 12, Perl 5.36.0, FHEM 6.3: 295 Module in ConfigDB: Steuerung Heizkessel, FBH, Solarthermie, kontr. Lüftung mit WRG. Smarthome u.a. HMCUL, 1-Wire (FT232RL ; DS2480B), EnOcean (TCM EPS3), MQTT2. DOIF, PID20, Threshold, OWX; Micropelt IRTV, Volkszähler, SolarForecast; MariaDB

Groby


cwagner

... na, das hätte ich ja auch finden sollen. Danke, stimmt und funzt.
Christian
PI 2B+/3B+ Raspbian 12, Perl 5.36.0, FHEM 6.3: 295 Module in ConfigDB: Steuerung Heizkessel, FBH, Solarthermie, kontr. Lüftung mit WRG. Smarthome u.a. HMCUL, 1-Wire (FT232RL ; DS2480B), EnOcean (TCM EPS3), MQTT2. DOIF, PID20, Threshold, OWX; Micropelt IRTV, Volkszähler, SolarForecast; MariaDB

epsrw1

update:

# $Id: 39_VALVES.pm 1007 2014-06-20 18:00:00Z Florian Duesterwald $
Ich habe keine Ahnung, aber davon wenigstens ganz viel

epsrw1

update:

# $Id: 39_VALVES.pm 1008 2014-06-20 23:10:00Z Florian Duesterwald $


Ich habe keine Ahnung, aber davon wenigstens ganz viel

epsrw1

update:

# $Id: 39_VALVES.pm 1009 2014-06-21 11:19:00Z Florian Duesterwald $

+attr valvesInitialDelay
+Log level angepaßt
Ich habe keine Ahnung, aber davon wenigstens ganz viel

epsrw1

update:

# $Id: 39_VALVES.pm 1010 2014-06-21 15:11:00Z Florian Duesterwald $


attr handling
Ich habe keine Ahnung, aber davon wenigstens ganz viel