NEWS
Heizungssteuerung
-
Das funktioniert mit dem so genannten cache selector..
Da kannst du alle Geräte welche einer Aufzählung zugeordnet sind auswerten bzw. reagieren wenn sich ein Wert von diesen ändert.
Im Webinterface unter dem Punkt "Aufzählungen" kannst du dazu unter "enum.functions" eine eigene Aufzählung anlegen.
Kleines Script Beispiel:````
var alleFenster = $('channel(functions=Fensterkontakte)[state.id=*.STATE]');alleFenster.on(function(obj) {
setState("bla blub",true);
});Alle Fensterkontakte sind bei mir in der Aufzählung "enum.functions.Fensterkontakte" vorhanden.. Alle Datenpunkte welche auf .STATE enden werden jetzt überwacht. Sobald sich etwas in einem der Fensterkontakte.STATE Datenpunkten ändert, wird```` setState("bla blub",true); ````ausgeführt. Du musst also alle Ventile in eine Aufzählung packen, dann überprüfen ob neuer Ventilstatus > 40%, wenn ja -> Therme anschalten. Wenn neuer Ventilstatus < 30%, Therme ausschalten. Gruß
-
Hi Buzzy
Vielen Dank für die schnelle Antwort.
Hab jetzt mal testweise ein Thermostat im Blockly eingepflegt.
Das funktioniert auch super
on({id: "fhem.0.01_Thermostat_Esszimmer.valveposition"/*01_Thermostat_Esszimmer valveposition*/, change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if (getState("fhem.0.01_Thermostat_Esszimmer.valveposition").val > '35') { setState("fhem.0.HA_Heizung_Schalter.state"/*HA_Heizung_Schalter state*/, true); } if (getState("fhem.0.01_Thermostat_Esszimmer.valveposition").val < '45') { setState("fhem.0.HA_Heizung_Schalter.state"/*HA_Heizung_Schalter state*/, false); } });
Aber wie kann ich statt der Objekt ID die Aufzählung angeben zum triggern des Wertes ??
lg
Chris
-
Du musst beachten, dass du alle Ventile prüfen musst, bevor du eine Aktion an der Therme auslöst.
Wenn z.B. das erste Ventil über 40% ist, und das nächste geprüfte dann unter 30% ist wird an und sofort wieder ausgeschaltet.
Also am besten alle Ventile die über 40% sind zählen und alle die unter 30% sind auch zählen..
Dann prüfen ob alle unter 30% sind -> ausschalten
prüfen ob eins über 40% ist -> anschalten.
z.B. so:
Angenommen. alle *.valveposition Datenpunkte sind in der Aufzählung enum.functions.heizungsventile (das wird in der ersten Zeile vom Script definiert)
Wenn ein Ventil über 40 ist, soll angeschaltet werden.
Wenn alle Ventile unter 30 sind, soll ausgeschaltet werden.
var cacheVentile = $('channel(functions=heizungsventile)[state.id=*.valveposition]'); function therme() { var drunter = 0; var drueber = 0; cacheVentile.each(function (id) { if (getState(id).val > 40) { drueber++; } if (getState(id).val < 30) { drunter++; } }); if (drunter >= 1 && drueber === 0) { setState("fhem.0.HA_Heizung_Schalter.state", false); } if (drueber >= 1) { setState("fhem.0.HA_Heizung_Schalter.state", true); } } cacheVentile.on(function (obj) { therme(); });
Gruß
-
alle Ventile die über 40% sind zählen und alle die unter 30% sind auch zählen..
Dann prüfen ob alle unter 30% sind -> ausschalten
prüfen ob eins über 40% ist -> anschalten. `
Alternative: Maximale Ventilstellung aller Ventile ermitten; wenn max > 40% ein, wenn max < 30% aus. -
Alternative: Maximale Ventilstellung aller Ventile ermitten; wenn max > 40% ein, wenn max < 30% aus. `
Das ist wirklich noch besser. Ich liebe dieses Forum. ..Würde dann etwa so aussehen:
var cacheVentile = $('channel(functions=heizungsventile)[state.id=*.valveposition]'); function therme() { var highest = 0; cacheVentile.each(function(id) { if (getState(id).val > highest) { highest = getState(id).val; } }); if (highest <= 30) { setState("fhem.0.HA_Heizung_Schalter.state", false); } if (highest >= 40) { setState("fhem.0.HA_Heizung_Schalter.state", true); } } cacheVentile.on(function(obj) { therme(); });
Gruß
-
Danke für die rasche Hilfe.
Aber irgendwie hab ich hier einen Hund drinne
Leider passiert nämlich nix
Anbei 2 Screenshots
Habe ich irgendwo einen Denkfehler ??
lg
Chris
6416_script.jpg
6416_aufz.jpg -
Ändere die erste Zeile von:
var cacheVentile = $('channel(functions=heizungsventile)[state.id=*.valveposition]');
in````
var cacheVentile = $('state(functions=heizungsventile)');Und versuch es dann nochmal. Gruß
-
Funktioniert
Vielen Dank. Erste Baustelle fertig.
Die restlichen Sachen bekomme ich glaube ich mit Blockly und & Co selbst hin
Wahnsinns Forum echt
lg
Chris
-
Funktioniert `
Dann markiere bitta das Thema als gelöst (im Betreff des ersten Beitrags). -
Zu früh gefreut :twisted:
Das Script verbläst mi die credits schneller als ich schauen kann
Jedes mal wenn sich ein Ventil verändert schickt es einen befehl an den Schalter
siehe
fhem.0 2018-03-15 16:34:22.659 info fhem.0.HA_Heizung_Schalter.state.true ==> writeFHEM: set HA_Heizung_Schalter on fhem.0 2018-03-15 16:34:03.517 info fhem.0.HA_Heizung_Schalter.state.true ==> writeFHEM: set HA_Heizung_Schalter on fhem.0 2018-03-15 16:32:40.554 info fhem.0.HA_Heizung_Schalter.state.true ==> writeFHEM: set HA_Heizung_Schalter on fhem.0 2018-03-15 16:32:39.354 info fhem.0.HA_Heizung_Schalter.state.true ==> writeFHEM: set HA_Heizung_Schalter on fhem.0 2018-03-15 16:30:37.377 info fhem.0.HA_Heizung_Schalter.state.true ==> writeFHEM: set HA_Heizung_Schalter on fhem.0 2018-03-15 16:30:35.793 info fhem.0.HA_Heizung_Schalter.state.true ==> writeFHEM: set HA_Heizung_Schalter on fhem.0 2018-03-15 16:29:43.956 info fhem.0.HA_Heizung_Schalter.state.true ==> writeFHEM: set HA_Heizung_Schalter on fhem.0 2018-03-15 16:28:00.133 info fhem.0.HA_Heizung_Schalter.state.true ==> writeFHEM: set HA_Heizung_Schalter on fhem.0 2018-03-15 16:27:58.931 info fhem.0.HA_Heizung_Schalter.state.true ==> writeFHEM: set HA_Heizung_Schalter on fhem.0 2018-03-15 16:23:19.912 info fhem.0.HA_Heizung_Schalter.state.true ==> writeFHEM: set HA_Heizung_Schalter on fhem.0 2018-03-15 16:23:18.668 info fhem.0.HA_Heizung_Schalter.state.true ==> writeFHEM: set HA_Heizung_Schalter on fhem.0 2018-03-15 16:22:11.590 info fhem.0.HA_Heizung_Schalter.state.true ==> writeFHEM: set HA_Heizung_Schalter on fhem.0 2018-03-15 16:15:42.659 info fhem.0.HA_Heizung_Schalter.state.true ==> writeFHEM: set HA_Heizung_Schalter on
kann man da evtl noch eine if abfrage mit einbauen zb wenn schalter bereits ein dann nichts machen.. wenn schalter aus dann einschalten . In fhem den perl code könnte ich aber in java bin ich noch ne nuss
lg
-
kann man da evtl noch eine if abfrage mit einbauen zb wenn schalter bereits ein dann nichts machen.. wenn schalter aus dann einschalten `
Kann man.const idAktor = "fhem.0.HA_Heizung_Schalter.state"; var cacheVentile = $('state(functions=heizungsventile)'); var aktor = getState(idAktor).val; function therme() { var highest = 0; cacheVentile.each(function(id) { if (getState(id).val > highest) { highest = getState(id).val; } }); if (highest <= 30 && aktor) { setState(idAktor, false); } if (highest >= 40 && !aktor) { setState(idAktor, true); } } therme(); // Skriptstart cacheVentile.on(therme); on({id: idAktor, ack: true}, function(dp) { aktor = dp.state.val; });
-
Vielen Dank für den super duper Support
Sorry für die späte Rückmeldung. Funktioniert super
Habe jetzt in der Zwischenzeit an meiner Fhem Installation etwas gebastelt und iobroker hinten angestellt.
Ist es auch möglich statt der Abfrage der Ventilstellung die Temperatur herzunehmen .
Also zb so
Alle ist Temperaturen wieder in eine Aufzählung.
und dann eine Abfrage
Soll Temperatur (Ist Temperatur + 0,5 Grad) = Therme ausschalten
Soll Temperatur (Ist Temperatur - 0,5 Grad) = Therme einschalten
Also zb Soll Temperatur = 22,5 Grad
Ist Temperatur ist 23 Grad also Therme ausschalten
Ist Temperatur ist 22 Grad als Therme einschalten
Vielen Dank für Eure Hilfe vorab
Will jetzt demnächst wenn ich alle meine Befehle von Fhem zu Iobroker portieren konnte auf Iobroker komplett umsteigen
(Nach der Heizperiode )
lg
Chris
-
Klar, höchste ist Temperatur feststellen, mit höchster soll Temperatur vergleichen…
Gruß
-
Bin nun endlich dabei von Fhem auf Iobroker umzusteigen
Habe nun dieses Script im Einsatz wie oben beschrieben
const idAktor = "sonoff.0.DVES_12A646.POWER1"; var cacheVentile = $('state(functions=heizungsventile)'); var aktor = getState(idAktor).val; function therme() { var highest = 0; cacheVentile.each(function(id) { if (getState(id).val > highest) { highest = getState(id).val; } }); if (highest <= 30 && aktor) { setState(idAktor, false); } if (highest >= 60 && !aktor) { setState(idAktor, true); } } therme(); // Skriptstart cacheVentile.on(therme); on({id: idAktor, ack: true}, function(dp) { aktor = dp.state.val; });
Ansich sollte der Schalter erst unter 30 Prozentt Ventilöffnung ausschalten
Er schaltet aber bereits früher ab. Soeben waren noch 2 Thermostet über 30% Ventilöffnung und das Script hat den Schalter aber ausgeschaltenJemand eine Idee warum dem so ist
besten Dank
lg
Chris -
@nolimitek
Der Selektor ist richtig ?
Kann getestet werden mit$('state(functions=heizungsventile)').each(function(id, i) { log(id); });
-
-
-
Da kommt dann im Log folgendes.
Das Script hat doch mit den anderen Blocklys gar nichts zu tun . ???javascript.0 2020-12-30 20:12:44.573 info (5874) script.js.Heizung.Pumpeheizung: registered 10 subscriptions and 0 schedules javascript.0 2020-12-30 20:12:44.571 info (5874) script.js.Heizung.Pumpeheizung: fhem.0.01_Thermostat_Wohnzimmer.valveposition javascript.0 2020-12-30 20:12:44.571 info (5874) script.js.Heizung.Pumpeheizung: fhem.0.01_Thermostat_Wintergarten.valveposition javascript.0 2020-12-30 20:12:44.570 info (5874) script.js.Heizung.Pumpeheizung: fhem.0.01_Thermostat_Vorraum.valveposition javascript.0 2020-12-30 20:12:44.570 info (5874) script.js.Heizung.Pumpeheizung: fhem.0.01_Thermostat_Kueche.valveposition javascript.0 2020-12-30 20:12:44.570 info (5874) script.js.Heizung.Pumpeheizung: fhem.0.01_Thermostat_Kinderzimmer.valveposition javascript.0 2020-12-30 20:12:44.569 info (5874) script.js.Heizung.Pumpeheizung: fhem.0.01_Thermostat_Gaestezimmer.valveposition javascript.0 2020-12-30 20:12:44.569 info (5874) script.js.Heizung.Pumpeheizung: fhem.0.01_Thermostat_Esszimmer.valveposition javascript.0 2020-12-30 20:12:44.566 info (5874) script.js.Heizung.Pumpeheizung: fhem.0.01_Thermostat_Buegelzimmer.valveposition javascript.0 2020-12-30 20:12:44.526 info (5874) Start javascript script.js.Heizung.Pumpeheizung javascript.0 2020-12-30 20:12:44.525 info (5874) script.js.Heizung.WCOBEN_Heizung: registered 10 subscriptions and 0 schedules javascript.0 2020-12-30 20:12:44.524 info (5874) script.js.Heizung.WCOBEN_Heizung: fhem.0.01_Thermostat_Wohnzimmer.valveposition javascript.0 2020-12-30 20:12:44.524 info (5874) script.js.Heizung.WCOBEN_Heizung: fhem.0.01_Thermostat_Wintergarten.valveposition javascript.0 2020-12-30 20:12:44.523 info (5874) script.js.Heizung.WCOBEN_Heizung: fhem.0.01_Thermostat_Vorraum.valveposition javascript.0 2020-12-30 20:12:44.523 info (5874) script.js.Heizung.WCOBEN_Heizung: fhem.0.01_Thermostat_Kueche.valveposition javascript.0 2020-12-30 20:12:44.523 info (5874) script.js.Heizung.WCOBEN_Heizung: fhem.0.01_Thermostat_Kinderzimmer.valveposition javascript.0 2020-12-30 20:12:44.523 info (5874) script.js.Heizung.WCOBEN_Heizung: fhem.0.01_Thermostat_Gaestezimmer.valveposition javascript.0 2020-12-30 20:12:44.523 info (5874) script.js.Heizung.WCOBEN_Heizung: fhem.0.01_Thermostat_Esszimmer.valveposition javascript.0 2020-12-30 20:12:44.522 info (5874) script.js.Heizung.WCOBEN_Heizung: fhem.0.01_Thermostat_Buegelzimmer.valveposition javascript.0 2020-12-30 20:12:44.508 info (5874) Start javascript script.js.Heizung.WCOBEN_Heizung javascript.0 2020-12-30 20:12:44.507 info (5874) script.js.Heizung.Badezimmer_heizung: registered 10 subscriptions and 0 schedules javascript.0 2020-12-30 20:12:44.506 info (5874) script.js.Heizung.Badezimmer_heizung: fhem.0.01_Thermostat_Wohnzimmer.valveposition javascript.0 2020-12-30 20:12:44.505 info (5874) script.js.Heizung.Badezimmer_heizung: fhem.0.01_Thermostat_Wintergarten.valveposition javascript.0 2020-12-30 20:12:44.505 info (5874) script.js.Heizung.Badezimmer_heizung: fhem.0.01_Thermostat_Vorraum.valveposition javascript.0 2020-12-30 20:12:44.505 info (5874) script.js.Heizung.Badezimmer_heizung: fhem.0.01_Thermostat_Kueche.valveposition javascript.0 2020-12-30 20:12:44.504 info (5874) script.js.Heizung.Badezimmer_heizung: fhem.0.01_Thermostat_Kinderzimmer.valveposition javascript.0 2020-12-30 20:12:44.504 info (5874) script.js.Heizung.Badezimmer_heizung: fhem.0.01_Thermostat_Gaestezimmer.valveposition javascript.0 2020-12-30 20:12:44.503 info (5874) script.js.Heizung.Badezimmer_heizung: fhem.0.01_Thermostat_Esszimmer.valveposition javascript.0 2020-12-30 20:12:44.503 info (5874) script.js.Heizung.Badezimmer_heizung: fhem.0.01_Thermostat_Buegelzimmer.valveposition javascript.0 2020-12-30 20:12:44.480 info (5874) Start javascript script.js.Heizung.Badezimmer_heizung javascript.0 2020-12-30 20:12:44.479 info (5874) script.js.Zeitschaltuhren.Aquarium_Licht1: registered 9 subscriptions and 2 schedules javascript.0 2020-12-30 20:12:44.474 info (5874) script.js.Zeitschaltuhren.Aquarium_Licht1: fhem.0.01_Thermostat_Wohnzimmer.valveposition javascript.0 2020-12-30 20:12:44.474 info (5874) script.js.Zeitschaltuhren.Aquarium_Licht1: fhem.0.01_Thermostat_Wintergarten.valveposition javascript.0 2020-12-30 20:12:44.473 info (5874) script.js.Zeitschaltuhren.Aquarium_Licht1: fhem.0.01_Thermostat_Vorraum.valveposition javascript.0 2020-12-30 20:12:44.473 info (5874) script.js.Zeitschaltuhren.Aquarium_Licht1: fhem.0.01_Thermostat_Kueche.valveposition javascript.0 2020-12-30 20:12:44.472 info (5874) script.js.Zeitschaltuhren.Aquarium_Licht1: fhem.0.01_Thermostat_Kinderzimmer.valveposition javascript.0 2020-12-30 20:12:44.472 info (5874) script.js.Zeitschaltuhren.Aquarium_Licht1: fhem.0.01_Thermostat_Gaestezimmer.valveposition javascript.0 2020-12-30 20:12:44.471 info (5874) script.js.Zeitschaltuhren.Aquarium_Licht1: fhem.0.01_Thermostat_Esszimmer.valveposition javascript.0 2020-12-30 20:12:44.471 info (5874) script.js.Zeitschaltuhren.Aquarium_Licht1: fhem.0.01_Thermostat_Buegelzimmer.valveposition javascript.0 2020-12-30 20:12:44.453 info (5874) Start javascript script.js.Zeitschaltuhren.Aquarium_Licht1 javascript.0 2020-12-30 20:12:44.452 info (5874) script.js.Zeitschaltuhren.Solar_aus_Nacht: registered 9 subscriptions and 2 schedules javascript.0 2020-12-30 20:12:44.444 info (5874) script.js.Zeitschaltuhren.Solar_aus_Nacht: fhem.0.01_Thermostat_Wohnzimmer.valveposition javascript.0 2020-12-30 20:12:44.444 info (5874) script.js.Zeitschaltuhren.Solar_aus_Nacht: fhem.0.01_Thermostat_Wintergarten.valveposition javascript.0 2020-12-30 20:12:44.443 info (5874) script.js.Zeitschaltuhren.Solar_aus_Nacht: fhem.0.01_Thermostat_Vorraum.valveposition javascript.0 2020-12-30 20:12:44.443 info (5874) script.js.Zeitschaltuhren.Solar_aus_Nacht: fhem.0.01_Thermostat_Kueche.valveposition javascript.0 2020-12-30 20:12:44.443 info (5874) script.js.Zeitschaltuhren.Solar_aus_Nacht: fhem.0.01_Thermostat_Kinderzimmer.valveposition javascript.0 2020-12-30 20:12:44.442 info (5874) script.js.Zeitschaltuhren.Solar_aus_Nacht: fhem.0.01_Thermostat_Gaestezimmer.valveposition javascript.0 2020-12-30 20:12:44.442 info (5874) script.js.Zeitschaltuhren.Solar_aus_Nacht: fhem.0.01_Thermostat_Esszimmer.valveposition javascript.0 2020-12-30 20:12:44.441 info (5874) script.js.Zeitschaltuhren.Solar_aus_Nacht: fhem.0.01_Thermostat_Buegelzimmer.valveposition javascript.0 2020-12-30 20:12:44.413 info (5874) Start javascript script.js.Zeitschaltuhren.Solar_aus_Nacht javascript.0 2020-12-30 20:12:44.406 info (5874) script.js.Zeitschaltuhren.Aquarium_Licht: registered 9 subscriptions and 2 schedules javascript.0 2020-12-30 20:12:44.377 info (5874) script.js.Zeitschaltuhren.Aquarium_Licht: fhem.0.01_Thermostat_Wohnzimmer.valveposition javascript.0 2020-12-30 20:12:44.377 info (5874) script.js.Zeitschaltuhren.Aquarium_Licht: fhem.0.01_Thermostat_Wintergarten.valveposition javascript.0 2020-12-30 20:12:44.376 info (5874) script.js.Zeitschaltuhren.Aquarium_Licht: fhem.0.01_Thermostat_Vorraum.valveposition javascript.0 2020-12-30 20:12:44.376 info (5874) script.js.Zeitschaltuhren.Aquarium_Licht: fhem.0.01_Thermostat_Kueche.valveposition javascript.0 2020-12-30 20:12:44.375 info (5874) script.js.Zeitschaltuhren.Aquarium_Licht: fhem.0.01_Thermostat_Kinderzimmer.valveposition javascript.0 2020-12-30 20:12:44.375 info (5874) script.js.Zeitschaltuhren.Aquarium_Licht: fhem.0.01_Thermostat_Gaestezimmer.valveposition javascript.0 2020-12-30 20:12:44.374 info (5874) script.js.Zeitschaltuhren.Aquarium_Licht: fhem.0.01_Thermostat_Esszimmer.valveposition javascript.0 2020-12-30 20:12:44.374 info (5874) script.js.Zeitschaltuhren.Aquarium_Licht: fhem.0.01_Thermostat_Buegelzimmer.valveposition
-
@nolimitek sagte:
Da kommt dann im Log folgendes.
Das scheint zu passen (8 mal valveposition).
FHEM: Ich glaube, der Adapter liefert Strings, die in eine Zahl gewandelt werden müssen.if (parseFloat(getState(id).val) > highest) { highest = parseFloat(getState(id).val); }
-
Ahhh das wirds sein . Hatte das bereits bei einem anderen Script das ich in Blockly gemacht habe. Da musste auch in Zahl geändert werden.
Ich teste das mal . Besten Dank für deine Hilfe.
Wenn ich den Fhem Adapter deaktiviere und die Heizungsthermostate direkt in iobroker anlege (letzte Baustelle) kann ich das Script so weiterlaufen lassen oder wieder retour stellen ?Danke
lg
Chris