Hallo,
versuche mich gerade daran um mir die Werte der Heizkennlinie abhängig von den Einstellungen
und Außentemperatur über ein userRading(Formel) anzeigen zu lassen.
Mit DOIF unter "Darstellungselement mit Eingabemöglichkeit im Frontend und Schaltfunktion"
kann man sich ja Eingabefelder(setList) erzeugen.
Nur wird eben alles in einer Zeile erzeugt bei mehreren Variablen wie Steilheit,Parallelverschiebung,Raumsollwert etc. wird es auf dem
Bildschirm unschön.
Kann man dies mit DOIF untereinander lösen oder führt kein Weg an ReadingsGroup vorbei ?
Für Ideen und Hinweise bedankt sich schon mal
Hans-Jürgen
Zitat von: Deckoffizier am 11 Dezember 2018, 21:07:27
Hallo,
versuche mich gerade daran um mir die Werte der Heizkennlinie abhängig von den Einstellungen
und Außentemperatur über ein userRading(Formel) anzeigen zu lassen.
Mit DOIF unter "Darstellungselement mit Eingabemöglichkeit im Frontend und Schaltfunktion"
kann man sich ja Eingabefelder(setList) erzeugen.
Nur wird eben alles in einer Zeile erzeugt bei mehreren Variablen wie Steilheit,Parallelverschiebung,Raumsollwert etc. wird es auf dem
Bildschirm unschön.
Kann man dies mit DOIF untereinander lösen oder führt kein Weg an ReadingsGroup vorbei ?
Für Ideen und Hinweise bedankt sich schon mal
Hans-Jürgen
ja, du kannst z. B. mit dem Attribut uiTable alle FHEM-Widgets nutzen siehe: https://forum.fhem.de/index.php/topic,77690.msg696203.html#msg696203
uiTable ist eine komfortable Möglichkeit, klassisch geht es auch mit webCmdLabel.
Hallo,
DANKE EUCH BEIDEN
erster Versuch klappt schon mal, kann mich frisch ans Werk machen....
Eine besinnliche Adventszeit wünscht
Hans-Jürgen
Lass uns doch an deiner Umsetzung teilhaben!
Gesendet von meinem E6653 mit Tapatalk
Hallo sash.sc,
ZitatLass uns doch an deiner Umsetzung teilhaben!
Vorweg habe von Programmierung weiter keine Ahnung....
die Ausgabe im userReading passt soweit mit dem Kennlienienfeld(Diagramm) vom Kesselschaltfeld und stimmen
fast über ein.
Den Wert(Reading) vom userReading muss ich noch zur Anzeige bringen ist ja nur erstmal ein Entwurf.
Die berechnete Vorlauftemperatur lässt sich ja bei Bedarf auch für andere Sachen (?Mischersteuerung,PID20) verwenden.
Für die zur Berechnung notwendige Außentemperatur greife ich die Werte vom 1Wire Sensor ab.
Die Temperatur könnte man natürlich auch als Slider zum probieren einspielen.
So kann vorab mal die errechnete Vorlauftemperatur unter verschiedenen Einstellungen einfach erkannt werden.
Der Sinn dieser "Spielerei" hatte sich nebenbei bei der Suche nach der geringsten praktikablen Vorlauftemperatur
durch das neue Kesselschaltfeld mit vorhanden Mischer ergeben.
Ergebnis bei milden Außentemp. a) Badheizkörper zu klein
b) Obergeschoss 1Zimmer mit 3 Außenwänden gerade bei Wind Heizkörper zu klein Dämmung schlecht.
Alle anderen Räume im Haus soweit gute Heizleistung + Aufheizung in entsprechender Zeit.
Ob eventuell etwas Verringerung des Durchfluss in den gut funktionierenden Heizkörpern bei den beiden Problemräumen
kurzfristig etwas bringt sei mal dahingestellt.
Anbei dieser Rattenschwanz von Berechnung im userReading geht bestimmt noch besser leider fehlt mir hierzu das Wissen.
Internals:
CFGFN
DEF ([$SELF:rtsoll,"0"] or [$SELF:niveau,"0"] or [$SELF:neigung,"0"])
DOELSE
MODEL FHEM
NAME di_hzkennlinie
NR 159777
NTFY_ORDER 50-di_hzkennlinie
STATE cmd_1
TYPE DOIF
Helper:
DBLOG:
Device:
myDbLog:
TIME 1544653225.72222
VALUE di_hzkennlinie
cmd:
myDbLog:
TIME 1544653225.72222
VALUE 1
cmd_event:
myDbLog:
TIME 1544653225.72222
VALUE di_hzkennlinie
cmd_nr:
myDbLog:
TIME 1544653225.72222
VALUE 1
e_di_hzkennlinie_niveau:
myDbLog:
TIME 1544650657.31794
VALUE 2.6
e_di_hzkennlinie_rtsoll:
myDbLog:
TIME 1544653225.72222
VALUE 20
mode:
myDbLog:
TIME 1544479802.41787
VALUE enabled
niveau:
myDbLog:
TIME 1544650657.31794
VALUE 2.6
rtsoll:
myDbLog:
TIME 1544653225.72222
VALUE 20
state:
myDbLog:
TIME 1544653225.72222
VALUE cmd_1
READINGS:
2018-12-14 09:09:52 Device di_hzkennlinie
2018-12-14 09:09:52 cmd 1
2018-12-14 09:09:52 cmd_event di_hzkennlinie
2018-12-14 09:09:52 cmd_nr 1
2018-12-14 09:09:52 e_di_hzkennlinie_neigung 1.5
2018-12-14 09:09:46 mode enabled
2018-12-14 09:09:52 neigung 1.5
2018-12-14 00:00:29 niveau 0
2018-12-14 09:05:16 rtsoll 23
2018-12-14 09:09:52 state cmd_1
2018-12-14 09:09:52 vtsoll 58.2555581568164
Regex:
attr:
cmdState:
wait:
waitdel:
condition:
0 ::ReadingValDoIf($hash,'di_hzkennlinie','rtsoll','"0"') or ::ReadingValDoIf($hash,'di_hzkennlinie','niveau','"0"') or ::ReadingValDoIf($hash,'di_hzkennlinie','neigung','"0"')
devices:
0 di_hzkennlinie
all di_hzkennlinie
do:
0:
0
1:
0
helper:
event neigung: 1.5,vtsoll: 58.2555581568164
globalinit 1
last_timer 0
sleeptimer -1
timerdev di_hzkennlinie
timerevent neigung: 1.5,vtsoll: 58.2555581568164
triggerDev di_hzkennlinie
DOIF_eventas:
cmd_nr: 1
cmd: 1
cmd_event: di_hzkennlinie
state: cmd_1
timerevents:
neigung: 1.5
vtsoll: 58.2555581568164
e_di_hzkennlinie_neigung: 1.5
Device: di_hzkennlinie
cmd_nr: 1
cmd: 1
cmd_event: di_hzkennlinie
cmd_1
timereventsState:
neigung: 1.5
vtsoll: 58.2555581568164
e_di_hzkennlinie_neigung: 1.5
Device: di_hzkennlinie
cmd_nr: 1
cmd: 1
cmd_event: di_hzkennlinie
cmd_1
triggerEvents:
neigung: 1.5
vtsoll: 58.2555581568164
e_di_hzkennlinie_neigung: 1.5
Device: di_hzkennlinie
cmd_nr: 1
cmd: 1
cmd_event: di_hzkennlinie
cmd_1
triggerEventsState:
neigung: 1.5
vtsoll: 58.2555581568164
e_di_hzkennlinie_neigung: 1.5
Device: di_hzkennlinie
cmd_nr: 1
cmd: 1
cmd_event: di_hzkennlinie
cmd_1
internals:
itimer:
readings:
0 di_hzkennlinie:rtsoll di_hzkennlinie:niveau di_hzkennlinie:neigung
all di_hzkennlinie:rtsoll di_hzkennlinie:niveau di_hzkennlinie:neigung
trigger:
uiState:
uiTable:
Attributes:
DbLogExclude .*
do always
readingList rtsoll neigung niveau
room Test
setList Raumtemp rtsoll:slider,16.0,0.5,26.0
neigung:slider,0.20,0.10,1.61,1
niveau:slider,-15,1,15
userReadings vtsoll:.* {(ReadingsVal("di_hzkennlinie","rtsoll",0))+
(ReadingsVal("di_hzkennlinie","niveau",0))-(ReadingsVal("di_hzkennlinie","neigung",0))*
((ReadingsVal("Wettersensor","Temperatur",0))-(ReadingsVal("di_hzkennlinie","rtsoll",0)))*
(1.4347+0.021*((ReadingsVal("Wettersensor","Temperatur",0))-(ReadingsVal("di_hzkennlinie","rtsoll",0)))+247.9*
0.000001*((ReadingsVal("Wettersensor","Temperatur",0))-(ReadingsVal("di_hzkennlinie","rtsoll",0)))*
((ReadingsVal("Wettersensor","Temperatur",0))-(ReadingsVal("di_hzkennlinie","rtsoll",0))))}
webCmd rtsoll:neigung:niveau
webCmdLabel Raumtemp
:Neigung
:Parallelversch
Gruß
Hans-Jürgen
Zitat von: Deckoffizier am 14 Dezember 2018, 09:42:58
Anbei dieser Rattenschwanz von Berechnung im userReading geht bestimmt noch besser leider fehlt mir hierzu das Wissen.
Zumindest könntest du die Möglichkeiten von DOIF nutzen:
userReadings vtsoll:[$SELF:rtsoll + $SELF:Niveau] - [$SELF:neigung * ([Wettersensor:Temperatur] -
[$SELF:rtsoll] ) * (1.4347+0.021 *([Wettersensor:Temperatur] - [$SELF:rtsoll]) + 247.9 *
0.000001 * ([Wettersensor:Temperatur] - [di_hzkennlinie:rtsoll]) *
([Wettersensor:Temperatur] - [$SELF:rtsoll]))
(Hoffentlich habe ich die Klammerstruktur beibehalten! Und die Formel selbst habe ich nicht geprüft)Damit reduziert sich das DOIF auf
([$SELF:vtsoll])
DOELSE kannst du weglassen, denn den Fall gibt es in deiner Abfrage ohnehin nie.
Wichtig: zwischen Minus ("-") und dem nachfolgenden Wert, so er irgendwann mal negativ sein könnte, ein Leerzeichen setzten. Sicherheitshalber also immer ;), denn diese Werte werden vom DOIF direkt eingetragen. Alternativ Klammern, aber Leerzeichen ist ein Zeichen weniger.
Hallo Per,
DANKE ! lerne gerne auf meine alten Tage noch dazu.
Dies sind die kleinen Schubser die einem einen großen Schritt weiter bringen.
Steht sicherlich in der Doku zu DOIF aber am eigenen Beispiel lernt es sich doch am besten.
Teste ich gleich mal aus.
In der Kürze liegt die Würze :D eventuell könnte man noch den 4 mal vorkommenden Ausdruck
([Wettersensor:Temperatur] - [$SELF:rtsoll]) als jeweils eine Variable(DAR) zusammenfassen.
Anbei noch mal die Formel
Bin mir jetzt nicht ganz sicher RTSoll könnte eventuell auch eventuell der Fußpunkt sein im Heizkurvendiagramm?
Heizkurve
Formel : Y = Y1 + ( X - X1 ) * (( Y2 - Y1 ) / ( X2 - X1 ))
DAR = (Außentemperatur - RTSoll)
VTSoll = RTSoll + Niveau - Neigung * DAR * (1,4347 + 0,021 * DAR + 247,9 * 0,000001 * DAR*DAR)
Eine frohe Adventszeit wünscht
Hans-Jürgen
Zitat von: Deckoffizier am 14 Dezember 2018, 14:52:09eventuell könnte man noch den 4 mal vorkommenden Ausdruck
([Wettersensor:Temperatur] - [$SELF:rtsoll]) als jeweils eine Variable(DAR) zusammenfassen.
Auf Jeden!
Hallo Per,
hatte Deinen Vorschlag aufgegriffen, aber irgendwo ist da noch der Wurm drin :(
es wird kein userReading aktualisiert bzw. neu angelegt.
An einer Stelle hattest Du dich etwas vertan $SELF:Niveau] müsste $SELF:niveau] sein,
auch vermute ich [di_hzkennlinie:rtsoll]) lässt sich in [$SELF:rtsoll]) kürzen.
Sonst eigentlich für mich soweit alles logisch habe noch einiges probiert aber es klappt so
leider nicht mit der Kurzfassung.
Na ja die ursprüngliche Version tut erst mal, werde mich noch versuchen zu belesen.
Gruß
Hans-Jürgen
Hallo Per,
habe noch etwas nachgeforscht, vermutlich funktioniert $SELF im userReading nicht
da Perl.
Im attr DOIF_Reading hat es nun geklappt mit kleiner Korrektur.
Nun mal für die Zukunft schon etwas schlauer geworden. Danke für Deine Mühe!
Gruß
Hans-Jürgen
Welches User_Reading? Sind beides DOIF_Readings.
Beim Rest hast du Recht, einmal Autokorrektur, einmal Blinder Autor :D
Ein noch: 247.9 * 0.000001 sollte man gleich ausrechnen.
Hallo Per,
ZitatWelches User_Reading? Sind beides DOIF_Readings.
hmmm..... sehe oder verstehe ich vielleicht falsch dann sorry
das attr userReading erwartet laut commandref { } also Perl ?
Wenn dann $SELF darin auftaucht gibt es Mecker.
Meine Vermutung das attr DOIF_Readings ist eine Art Eigenzüchtung pardon und hat dieses Problem
nicht.
Werde mich in Zukunft wohl mehr auf das attr. DOIF_Readings versteifen.
Nun gut es funktioniert ja jetzt prima.
Gruß
Hans-Jürgen
Zitat von: Deckoffizier am 17 Dezember 2018, 17:52:35
Hallo Per,
hmmm..... sehe oder verstehe ich vielleicht falsch dann sorry
das attr userReading erwartet laut commandref { } also Perl ?
Wenn dann $SELF darin auftaucht gibt es Mecker.
Meine Vermutung das attr DOIF_Readings ist eine Art Eigenzüchtung pardon und hat dieses Problem
nicht.
Werde mich in Zukunft wohl mehr auf das attr. DOIF_Readings versteifen.
Nun gut es funktioniert ja jetzt prima.
Gruß
Hans-Jürgen
Naja immerhin hat Per geschrieben:
ZitatuserReadings vtsoll:[$SELF:rtsoll]...
Daher ist die Verwirrung nicht unbegründet.
userReadings wird von FHEM selbst ausgewertet.
DOIF_Readings ist eine Spezialität von DOIF. Es wird die DOIF-Syntax benutzt insb. die Auswertung von $SELF (gibt´s nicht in FHEM allgemein). DOIF_Readings werden intern im DOIF abgearbeitet ohne Events nach außen zu produzieren.
Sie triggern das eigene Modul nur bei deren Änderung. Es ist insb. bei wiederholenden Angaben zu verwenden und vor allem um zyklische Trigger von der DOIF-Bedingung zu entkoppeln und damit wiederholende Ausführung von DOIF-Zweigen zu unterbinden, das ist besonders im Perl-Modus interessant bzw. bei Verwendung von do always
Zitat von: Damian am 17 Dezember 2018, 19:02:55Naja immerhin hat Per geschrieben:
Tja, Copy&Paste-Fehler :-[
Hatte gar nicht realisiert, dass das dort userReading statt DOIF_Readings war. Sollen natürlich beides DOIF_Readings werden. Dann klappt auch das Triggern.