NEWS
Dynamische Kennlinie in IOBroker umsetzen? Blocky?
-
Re: Kurve vom Thyristorsteller angleichen
Ich habe eine Frage, welche vielleicht an diesem alten Thema anküpft.
Ich habe diverse Anwendungsfälle, in denen ich gerne eine dynamische Kennlinie (z.B. im 0_userdata gespeichert) mit einer variablen Anzahl an Stützstellen in einem Script (z.B. Blockly) in einen Ausgangswert umrechnen... Also so ähnlich, wie in dem alten Thread zur Kurve vom Thyristorsteller... nur halt dynamisch und nicht mit festen Werten im Blockly-Script.
Als Beispiel möchte ich z.B. eine dynamische Anpassung der Vorlauftemperatur der Fußbodenheizung in Abhängigkeit der Außentemperatur hinterlegen ("witterungsgeführte Heizkennlinie").
z.B. mit diesen (ausgedachten) Werten:
Außentemperatur: [-10.01, -10, 0, 10, 10.01] °C
Vorlauftemperatur: [35, 35, 30, 20, 20] °C
... d.h. die Kennlinie ist stetig und in den Abschnitten linear. Z.-B. soll bei -10°C Außentemperatur eine Vorlauftemperatur von 35 °C eingestellt werden., bei -5 °C Außentemperatur soll dann 32,5 °C eingestellt werden.In C, Matlab oder sonstigen Programmiersprachen wüsste ich auf Anhieb wie ich das umsetze, aber wie wäre in IOBroker ein idealer Weg für eine solche Aufgabe? Bei JS und Blockly bin ich kein Profi...
Wie (als was?) muss/kann ich in 0_userdata eine derartige Kennlinie speichern? Als JSON? Als Objekt? Als Liste?
Wie könnte ich das in Blockly abfragen bzw. Umrechnen? Hat jemand eine Idee oder Hilfen? Oder gibt es gar eine viel einfachere Möglichkeit in IOBroker eine solche Aufgabe zu bearbeiten? -
@ckassiopaia Ist das nicht vielleicht eher ein Fall für Javascript?
Ansonsten muss man da wohl eine Intervallabfrage mit Wenn/Dann/Sonst über die Außentemperatur machen, und dann die Vorlauftemperatur mit Mathematik-Blöcken entsprechend berechnen.
TA1, TA2,TA3,TA4
und
TV1, TV2, TV3, TV4Intervall [TA1 ... TA2] TV=TV1 + (TV2-TV1)* (TA-TA1) / (TA2-TA1);
usw... -
@ckassiopaia sagte: variablen Anzahl an Stützstellen ... "witterungsgeführte Heizkennlinie"
Das geht auch ohne "Stützstellen" mit der richtigen Formel.
EDIT: Teste mal mit Steilheit = 0.7 und Exp = 1.1.
-
@paul53 Danke für die Links und Hilfen...
Tatsächlich geht es für die Witterungsgeführte Vorlauftemperatur mit einer entsprechenden Formel... Das war von mir aber hier an der Stelle nur als Beispiel für eine derartige Umrechnung...Also Zwei Kennlinien mit variabler Anzahl an Stützstellen... In C würde ich dazu ein Array für den Eingangsvektor verwenden und die nächstgelegene Stützstelle suchen... Und dann im Ausgangsvektor entsprechend lienear interpolieren. Oder in Matlab einfach mit interp1 als lookup table...
In IObroker wüsste ich aber gerade nicht mal wie ich die Vektoren anlegen sollte und wie man sie dann unkompliziert verarbeitet...
-
@ckassiopaia sagte: Array für den Eingangsvektor verwenden und die nächstgelegene Stützstelle suchen... Und dann im Ausgangsvektor entsprechend lienear interpolieren.
Das geht auch in Blockly mit 2 korrespondierenden Listen. Beispiel:
-
Vielen Dank @paul53 !
Das hat funktioniert. Ich habe noch die Grenzwerte abgefangen, aber sonst scheint es zu funktionieren...Vielleicht bin ich nur von C verwöhnt, wo das in einem Zwei-Zeiler umsetzbar ist