Hier kommt mal so eine richtige Anfängerfrage. Meine Heizungssteuerung funktioniert, aber mir fallen im Plot immer diese Überschwinger auf.
define Heizungsschalter DOIF (([WZ_Thermostat_Climate:desired-temp] > [WZ_Thermostat_Weather:temperature]) and ([WZ_Terrassentuer] eq "closed")) (set Heizung on) DOELSEIF (([WZ_Thermostat_Climate:desired-temp] <= [WZ_Thermostat_Weather:temperature]) or ([WZ_Terrassentuer] eq "open")) (set Heizung off)
attr Heizungsschalter do always
attr Heizungsschalter wait 600:600
Deshalb dachte ich, ich könnte das THRESHOLD-Modul verwenden und hätte damit auch die Totzeit (wait 600:600) verhindert. Wenn ich als Test aber
define WZ_Temperatur THRESHOLD WZ_Thermostat_Weather:temperature Heizung|on:off
set WZ_Temperatur desired WZ_Thermostat_Climate:desired-temp
attr Heizungsschalter do always
eingebe, erwartet FHEM einen festen Wert statt des ausgelesenen. Geht das grundsätzlich nicht?
Hi,
da sich keiner traut, versuch ichs mal ;-)
Zitat von: Absolute Beginner am 11 April 2015, 13:57:30
erwartet FHEM einen festen Wert statt des ausgelesenen. Geht das grundsätzlich nicht?
Nein, das geht nicht, dass was Du da versuchst ist eine DOIF-Syntax im THRESHOLD-Modul anzuwenden. Das eine hat aber leider nichts mit dem anderen zu tun. Das Threshold-Modul erwartet immer eine absolute Zahl. Wenn du aber als desired-Wert für dein WZ_Temperatur die eingestellte Temperatur vom WZ_Thermostat_Climate haben willst, dann könnte man das als folgenden Perl-Befehl machen:
{fhem("set WZ_Temperatur desired ".ReadingsVal("WZ_Thermostat_Climate","desired-temp", "20"))}
Dann würde bei Ausführung dieses Befehls der aktuelle Wert von desired-temp von deinem Wandthermostat genommen werden und dann als aktuelle Wunschtemperatur im Threshold gesetzt werden. Optimal wäre es, wenn du an deinem Thermostat dabei "event-on-change-reading desired-temp" als Attribut setzt, dir ein notify auf "WZ_Thermostat_Climate:desired-temp" legst und dann den oben genannten Befehl ausführst. Somit würde bei jeder Temperaturänderung am Wandthermostat dein THRESHOLD-Device aktualisiert werden und entsprechend schalten.
Viele Grüße
Markus
danke Markus - immer bist Du das Opfer... :-)
Wäre ja schön, wenn Software so einfach zu verstehen wäre. Ich habe Folgendes eingegeben:
define WZ_Temperatur THRESHOLD WZ_Thermostat_Weather:temperature Heizung
define Heizungsschalter notify Heizung {fhem("set WZ_Temperatur desired ".ReadingsVal("WZ_Thermostat_Climate","desired-temp", "20"))} $EVENT
Aber die Wunschtemperatur wird wohl nicht übernommen - weder dass die Heizung angeht noch dass die Wunschtemperatur im Plot weiter angezeigt wird. Habe ich da noch was vergessen?
Im 'Heizungschalter' steht diese Mitteilung:
To add a regexp an eventTypes definition is needed
Dein Notify müsste aber heißen:
define Heizungsschalter notify WZ_Thermostat_Climate:desired-temp {fhem("set WZ_Temperatur desired ".ReadingsVal("WZ_Thermostat_Climate","desired-temp", "20"))}
In der commandref zu THRESHOLD (http://fhem.de/commandref_DE.html#THRESHOLD) findest du übrigens folgendes Beispiel, was doch bestimmt zu 100% auf dein Vorhaben passt, oder?:
Zitat
Steuerung einer Heizung durch ein Wandthermostat mit Übernahme der Soll- und Ist-Temperatur vom Wandthermostat:
define TH_Heizung THRESHOLD WT_ch1:measured-temp:1:WT_ch2:desired-temp Heizung
Mit set TH_Heizung desired 17 wird die Vorgabe vom Wandthermostat übersteuert bis set TH_Heizung external aufgerufen wird.
Die Meldung im Heizungsschalter ist normal, eventTypes ist ein Hilfsmodul was es dem Anwender erleichtern soll Regexp's zu verwenden in dem es versucht passende vorzuschlagen. Nutze ich persönlich nicht, da ich weis damit umzugehen. Daher werde ich auch kein eventType bei mir definieren. Das Modul macht nichts anderes als sämtliche Events die jemals im System auftreten in einer Datei zu sammeln um sie dann dem Nutzer anbieten zu können als Regexp für ein neues notify.
Viele Grüße
Markus
Heute ist mal wieder Zeit, sich an dass Thema zu begeben. Die commandref zu THRESHOLD habe ich gelesen, aber das erwähnte Beispiel kam mir zu theoretisch vor. Es hat für mich keine Ähnlichkeit mit der Grunddefinition
define <name> THRESHOLD <sensor> <actor>
Habe das Beispiel jetzt eben mal eingespielt. In der Theorie funktioniert es. Zum Testen wäre es jetzt praktisch, wenn es es mal wieder in bisschen kälter würde...
Bedeutet die "1" 1°C Schaltschwelle? Und kann bei diesem Beispiel die Auswertung des Türkontaktes (HM-Sec-SCo) mit der ODER-Verknüpfung aus dem danach folgenden Beispiel koppeln, also so:
define Heizungsschalter THRESHOLD WZ_Thermostat_Weather:temperature:1:WZ_Thermostat_Climate:desired-temp OR WZ_Terrassentuer Heizung
damit bei geöffneter Tür die Heizung ausgeht?
Die 1 ist die Hysteresis.
Du kannst das mit einem Türkontakt/Fensterkontakt kombinieren. Allerdings nur einmal. Eine mehrfache Verknüpfung von Sensoren ist damit nicht möglich, da wäre die Alternative dann eine structure zu verwenden die alle Sensoren zusammenfasst, welche man dann in ein THRESHOLD einbinden kann.
Dein Beispiel zur Verknüpfung der Terassentür würde so funktionieren, ja.
In der englischen Version der commandref zu THRESHOLD stehen die einzelnen Parameter im Define-Statement ausführlicher drin. In der deutschen Version wird darauf nicht eingegangen.
Gruß
Markus
Super, alles funktioniert bestens. Danke Markus! Bin immer wieder überrascht, wie mächtig die FHEM-Sprache ist!