Scriptlogik Neutralzone (SW zwischen zwei Werten)

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

Chris1991
Beiträge: 1
Registriert: 18.11.2023, 09:59
System: CCU

Scriptlogik Neutralzone (SW zwischen zwei Werten)

Beitrag von Chris1991 » 18.11.2023, 10:14

Moin zusammen,
nachdem ich einige Jahre ohne Hilfe ausgekommen bin und mir vieles selbst aneignen konnte, hört es hier jetzt doch auf und ich brauche euere Hilfe.

Ich habe folgendes Problem:
Eine Systemvariable (Waermepumpe_Freigabe), ist als bool definiert (true/ false).
Nun soll folgende Logik in einem Script ablaufen:
Wenn "Ventilposition" = State(n) > 150, dann waermepumpeFreigabe.State(true)
Wenn Wenn "Ventilposition" = State(n) < 140, dann waermepumpeFreigabe.State(false)
Wenn "Ventilposition" = State(n) zwischen 140 und 150 dann belasse den vorher aktiven Zustandan (z.B war vorher >150 dann bleib bei "true" oder wenn er vorher <140 war dann belasse ihn auf "false" aber ändere ihn dementsprechen wenn er die Grenzwerte 150 bzw. 140 über/ unterschreitet)

Das ganze soll an den folgenden Code angehängt werden:

Code: Alles auswählen

!a: Flur
!b: Gaeste WC
!c: Keller_Flur
!d: Kueche
!e: OG_Bad
!f: Waschkueche
!g: OG_Rechts
!h: Schlafzimmer
!i: OG_Links
!j: Wohnzimmer_Links
!k: Wohnzimmer_Rechts

var a = dom.GetObject("HmIP-RF.XXXXXXX:1.LEVEL").Value();
var b = dom.GetObject("HmIP-RF.XXXXXXX:1.LEVEL").Value();
var c = dom.GetObject("HmIP-RF.XXXXXXX:1.LEVEL").Value();
var d = dom.GetObject("HmIP-RF.XXXXXXX:1.LEVEL").Value();
var e = dom.GetObject("HmIP-RF.XXXXXXX:1.LEVEL").Value();
var f = dom.GetObject("HmIP-RF.XXXXXXX:1.LEVEL").Value();
var g = dom.GetObject("HmIP-RF.XXXXXXX:1.LEVEL").Value();
var h = dom.GetObject("HmIP-RF.XXXXXXX:1.LEVEL").Value();
var i = dom.GetObject("HmIP-RF.XXXXXXX:1.LEVEL").Value();
var j = dom.GetObject("HmIP-RF.XXXXXXX:1.LEVEL").Value();
var k = dom.GetObject("HmIP-RF.XXXXXXX:1.LEVEL").Value();
var l = a+b+c+d+e+f+g+h+i+j+k;
var m = l*100;
var n = m.ToInteger();
dom.GetObject("Ventilposition").State(n);

Mein bisheriger Ansatz, welcher aber nicht funktionier:

Code: Alles auswählen

var waermepumpeFreigabe = dom.GetObject("Waermepumpe_Freigabe");
if (n > 150) {
    waermepumpeFreigabe.State(true);
} else if (n < 140 || (waermepumpeFreigabe.State() && n >= 140)) {
    waermepumpeFreigabe.State(false);
} else if (waermepumpeFreigabe.State() && n < 140) {
    waermepumpeFreigabe.State(false);
}
Ich bitte hier um euere Hilfe :)

Vielen Dank im Voraus

Xel66
Beiträge: 14172
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 588 Mal
Danksagung erhalten: 1501 Mal

Re: Scriptlogik Neutralzone (SW zwischen zwei Werten)

Beitrag von Xel66 » 18.11.2023, 11:24

Chris1991 hat geschrieben:
18.11.2023, 10:14
Wenn "Ventilposition" = State(n) zwischen 140 und 150 dann belasse den vorher aktiven Zustandan (z.B war vorher >150 dann bleib bei "true" oder wenn er vorher <140 war dann belasse ihn auf "false" aber ändere ihn dementsprechen wenn er die Grenzwerte 150 bzw. 140 über/ unterschreitet)
Wenn Du keine Entscheidung für die Werte zwischen den beiden Totbereichbsbegrenzungen definierst, dann bleibt das doch auch so, wie es ist. Wo ist das Problem? Wenn größer 150, dann tue dies bzw. wenn kleiner 140 dann tue dass. Trifft keine Regel auf den Bereich zwischen 140 und 150 zu, dann bleibt der status quo erhalten.

Mal abgesehen davon, dass Du in Deiner if/else-Entscheidung noch ein Klammerproblem hast. Wenn Du in einer if-Abfrage zwei Prüfungen hast, müssen beide auch in Klammern gesetzt werden. Beispiel: if ((a>b) && (c<d)) {...

Gruß Xel66
Zuletzt geändert von Xel66 am 18.11.2023, 11:29, insgesamt 1-mal geändert.
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

MichaelN
Beiträge: 9689
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 700 Mal
Danksagung erhalten: 1628 Mal

Re: Scriptlogik Neutralzone (SW zwischen zwei Werten)

Beitrag von MichaelN » 18.11.2023, 11:26

Und warum braucht man dafür ein Skript? Das kann schon die WebUI
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

Xel66
Beiträge: 14172
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 588 Mal
Danksagung erhalten: 1501 Mal

Re: Scriptlogik Neutralzone (SW zwischen zwei Werten)

Beitrag von Xel66 » 18.11.2023, 11:31

MichaelN hat geschrieben:
18.11.2023, 11:26
Und warum braucht man dafür ein Skript? Das kann schon die WebUI
Naja, rechnen kann sie nicht. Ist aber die alte Idee mit der Ableitung des Wärmebedarfs aus der Summierung der Stellungen. Hat nur einen kleinen Schönheitsfehler. Hat ein Raum vollen Wärmebedarf und die anderen nicht (z.B. Bad), dann funktioniert der Kram nicht. Daher habe ich in meinem System auch die >10%-Auswertung. Funktioniert seit 2013 und ausschließlich mit den Mitteln der WebUI-Logik (ohne Script).

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

MichaelN
Beiträge: 9689
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 700 Mal
Danksagung erhalten: 1628 Mal

Re: Scriptlogik Neutralzone (SW zwischen zwei Werten)

Beitrag von MichaelN » 18.11.2023, 12:44

Xel66 hat geschrieben:
18.11.2023, 11:31
rechnen kann sie nicht
In der Fragestellung ist keine Berechnung enthalten.Der Vergleichswert scheint ja eine konstante zu sein
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

Xel66
Beiträge: 14172
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 588 Mal
Danksagung erhalten: 1501 Mal

Re: Scriptlogik Neutralzone (SW zwischen zwei Werten)

Beitrag von Xel66 » 18.11.2023, 13:58

MichaelN hat geschrieben:
18.11.2023, 12:44
In der Fragestellung ist keine Berechnung enthalten.Der Vergleichswert scheint ja eine konstante zu sein
Im ersten Scriptteil addiert er die Stellungen der Thermostatventile zur Scriptvariablen "n", die er dann im zweiten Scriptteil mit den Sollwerten <<140<>150>> vergleicht. Kann man machen, muss man aber nicht.

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

MichaelN
Beiträge: 9689
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 700 Mal
Danksagung erhalten: 1628 Mal

Re: Scriptlogik Neutralzone (SW zwischen zwei Werten)

Beitrag von MichaelN » 18.11.2023, 14:21

Ach so. Ich hatte verstanden das dies der Auslöser für das Skript sein soll. Dann ziehe ich alles zurück und behaupte das Gegenteil.
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

Benutzeravatar
Henke
Beiträge: 1526
Registriert: 27.06.2022, 20:51
System: CCU
Hat sich bedankt: 141 Mal
Danksagung erhalten: 306 Mal

Re: Scriptlogik Neutralzone (SW zwischen zwei Werten)

Beitrag von Henke » 18.11.2023, 18:32

Neutralzone == Hysterese :wink:

Teste das mal:

Code: Alles auswählen

!a: Flur
!b: Gaeste WC
!c: Keller_Flur
!d: Kueche
!e: OG_Bad
!f: Waschkueche
!g: OG_Rechts
!h: Schlafzimmer
!i: OG_Links
!j: Wohnzimmer_Links
!k: Wohnzimmer_Rechts

var a = dom.GetObject("HmIP-RF.XXXXXXX:1.LEVEL").Value();
var b = dom.GetObject("HmIP-RF.XXXXXXX:1.LEVEL").Value();
var c = dom.GetObject("HmIP-RF.XXXXXXX:1.LEVEL").Value();
var d = dom.GetObject("HmIP-RF.XXXXXXX:1.LEVEL").Value();
var e = dom.GetObject("HmIP-RF.XXXXXXX:1.LEVEL").Value();
var f = dom.GetObject("HmIP-RF.XXXXXXX:1.LEVEL").Value();
var g = dom.GetObject("HmIP-RF.XXXXXXX:1.LEVEL").Value();
var h = dom.GetObject("HmIP-RF.XXXXXXX:1.LEVEL").Value();
var i = dom.GetObject("HmIP-RF.XXXXXXX:1.LEVEL").Value();
var j = dom.GetObject("HmIP-RF.XXXXXXX:1.LEVEL").Value();
var k = dom.GetObject("HmIP-RF.XXXXXXX:1.LEVEL").Value();
var n = ((a+b+c+d+e+f+g+h+i+j+k)*100.0).ToInteger();
dom.GetObject(ID_SYSTEM_VARIABLES).Get("Ventilposition").State(n);

object waermepumpeFreigabe = dom.GetObject(ID_SYSTEM_VARIABLES).Get("Waermepumpe_Freigabe");
if (n > 150) {
	! Nur ändern, wenn anders - DC
	if ( !waermepumpeFreigabe.Value() )
	{waermepumpeFreigabe.State(true);}
}
if ( n < 140) {
	if ( waermepumpeFreigabe.Value() )
    { waermepumpeFreigabe.State(false); }
}
So habe ich vor grob einem Jahr auch angefangen die WP zu steuern...
Jetzt läuft das über NodeRed und ist wesentlich komplexer geworden. Der Kern, die Summe der Ventile geteilt durch die Anzahl, ist aber immer noch ein wichtiger Punkt zur Steuerung.

rentier-s
Beiträge: 378
Registriert: 19.06.2017, 09:24
Hat sich bedankt: 20 Mal
Danksagung erhalten: 67 Mal

Re: Scriptlogik Neutralzone (SW zwischen zwei Werten)

Beitrag von rentier-s » 20.11.2023, 14:09

Xel66 hat geschrieben:
18.11.2023, 11:31
Hat ein Raum vollen Wärmebedarf (z.B. Bad) und die anderen nicht, dann funktioniert der Kram nicht.
Zum Glück siehst Du das auch so, ich habe mich beim Lesen nämlich gleich gefragt, wie dieses Prinzip zuverlässig klappen soll.

Grundsätzlich werde ich bei allen Threads, wo es darum geht mit irgendwelchen halb durchdachten Logiken aus HM irgendwas an der Heizung rum zu schalten, immer leicht nervös.
Chris1991 hat geschrieben:
18.11.2023, 10:14
Waermepumpe_Freigabe
Reden wir wirklich von einer Wärmepumpe, die Du abschalten willst, oder meinst Du die Heizkreisvorlaufpumpe?
Zumindest klingt "Freigabe" danach, dass Du einen dafür vorgesehenen Steuereingang benutzt und nicht einfach die Stromzufuhr kappst.

Benutzeravatar
Henke
Beiträge: 1526
Registriert: 27.06.2022, 20:51
System: CCU
Hat sich bedankt: 141 Mal
Danksagung erhalten: 306 Mal

Re: Scriptlogik Neutralzone (SW zwischen zwei Werten)

Beitrag von Henke » 20.11.2023, 17:07

Ein Raum mit vollem Wärmebedarf und alle anderen haben keinen? Das tritt in der Realität eigentlich nicht auf. Ein Szenario wäre das Bad in der Übergangszeit, wenn der Boost aktiviert wird, aber dann ist es sinnvoll die WP aus zu lassen, denn bis da Wärme ankommt ist die Sache eh wieder erledigt.
Verlauf mit Nachtabsenkung und Grenzwerte 8% für FB, 17% HK.
Screenshot 2023-11-20 165823.jpg
Damit war die WP in den letzten 24h immer frei gegeben, da beim aktuellen Wetter auch richtig ist.
Als 2. Grenzwert habe ich noch 33% für FB und 50% für HK, ab dem die WP mit der kleinsten Pause von 60 Minuten läuft. Beim unteren Grenzwert macht sie 150 Minuten Pause, dazwischen entsprechend linear berechnet. Läuft sie weniger als 15 Minuten kommt noch ein Strafzuschlag drauf.
Läuft so schon ziemlich gut.

Antworten

Zurück zu „HomeMatic Zentrale (CCU / CCU2 / CCU3 / Charly)“