Hallo Leute,
ich habe eine, wie ich finde, Anfängerfrage, da das Wiki mir nicht weiter helfen kann.
Zur manuellen Regulierung der Temperatur möchte ich via Telegram die aktuelle Temperatur um 0,5 °C erhöhen (oder auch verringern je nach Fall).
Folgendes habe ich mir bisher zusammengebaut:
if ($EVTPART1 eq '/Temp_Wohn_hoch'){
my $Temp_aktuel = ReadingsVal("Wohn_Heizung_Clima", "desired-temp","");
fhem(set Wohn_Heizung_Clima set_desired-temp $Temp_aktuel+0,5);
}
/Temp_Wohn_hoch ist der Befehl um die Temperatur um 0,5 °C zu erhöhen.
Vom Event Monitor weiß ich, dass die aktuelle Temperatur des Homematic Thermostat mit desired-temp geloggt wird.
Meine Idee ist es also diese Temperatur auszulesen und +0,5 °C neu zu setzen.
Ich glaube aber, dass ich dabei am setzen scheitere.
Wie muss der Code also richtig aussehen?
Oder wie kann ich via FHEM die Temperatur neu setzen?
fhem "set Wohn_Heizung_Clima desired-temp " . (ReadingsVal ('Wohn_Heizung_Clima','measured-temp', 17) +0,5);
Versuche das mal.
Mhh, die Fehlermeldung beim Abspeichern des Codes ist weg, aber es bewirkt keine Änderung.
Anbei ein Auszug aus dem Event Monitor zum entsprechenden Thermostat:
Zitat2017-03-19 19:26:26 CUL_HM Wohn_Heizung actuator: 0
2017-03-19 19:26:26 CUL_HM Wohn_Heizung batteryLevel: 3.1
2017-03-19 19:26:26 CUL_HM Wohn_Heizung desired-temp: 21.0
2017-03-19 19:26:26 CUL_HM Wohn_Heizung measured-temp: 25.4
2017-03-19 19:26:26 CUL_HM Wohn_Heizung motorErr: communicationERR
2017-03-19 19:26:26 CUL_HM Wohn_Heizung_Clima ValvePosition: 0
2017-03-19 19:26:26 CUL_HM Wohn_Heizung_Clima boostTime: -
2017-03-19 19:26:26 CUL_HM Wohn_Heizung_Clima controlMode: auto
2017-03-19 19:26:26 CUL_HM Wohn_Heizung_Clima desired-temp: 21.0
2017-03-19 19:26:26 CUL_HM Wohn_Heizung_Clima measured-temp: 25.4
2017-03-19 19:26:26 CUL_HM Wohn_Heizung_Clima partyEnd: -
2017-03-19 19:26:26 CUL_HM Wohn_Heizung_Clima partyStart: -
2017-03-19 19:26:26 CUL_HM Wohn_Heizung_Clima partyTemp: -
2017-03-19 19:26:26 CUL_HM Wohn_Heizung_Clima T: 25.4 desired: 21.0 valve: 0
2017-03-19 19:26:26 CUL_HM Wohn_Heizung_Weather measured-temp: 25.4
2017-03-19 19:26:26 CUL_HM Wohn_Heizung_Weather 25.4
[/qoute]
Zitat von: Allan Sche Sar am 19 März 2017, 19:28:04
Mhh, die Fehlermeldung beim Abspeichern des Codes ist weg, aber es bewirkt keine Änderung.
Anbei ein Auszug aus dem Event Monitor zum entsprechenden Thermostat:
Ich habe das bei mir getestet. Der Code den ich Dir gegeben habe klappt.
Zeig mal was Du da jetzt genau hast.
Hi,
2017-03-19 19:26:26 CUL_HM Wohn_Heizung_Clima controlMode: auto
Ich würde den auf manual setzen 8)
Gruß Otto
Hallo Otto,
ich wollte mit der Regelung die manuelle Nachstellung vornehmen, wie man sie auch am Drehrad vornimmt. Das bedeutet, dass die nachgestellt Temperatur solange erhalten bleibt, bis der nächste Heizzyklus ansteht. Bedeutet das, dass ich nun vom automatischen Modus in den manuellen stellen muss?
Anmerkung: Der Heizwochenplan ist momentan noch nicht in FHEM hinterlegt. Das wird noch über die Thermostate direkt gemacht.
Mein momentaner Stand sieht wie folgt aus:
teleBot:msgText.* {
#Temperaturstatus
if($EVTPART1 eq '/Temperatur'){
my $Temp_Wohn= ReadingsVal("Wohn_Heizung_Clima","desired-temp","");
my $Temp_Kueche= ReadingsVal("Kuec_Heizung_Clima","desired-temp","");
my $Temp_Schlaf= ReadingsVal("Schl_Heizung_Clima","desired-temp","");
fhem("set teleBot send
Die aktuellen Temperatur betragen:
- Wohnzimmer: $Temp_Wohn °C
- Küche: $Temp_Kueche °C
- Schlafzimmer: $Temp_Schlaf °C");
}
#Temperatursteuerung
elsif ($EVTPART1 eq '/Temp_Wohn_hoch'){
my $Temp_aktuel = ReadingsVal("Wohn_Heizung_Clima", "desired-temp","");
fhem "set Wohn_Heizung_Clima desired-temp " . ReadingsVal ('Wohn_Heizung_Clima','measured-temp', 17) +0,5;
}
Die Ausgabe der Temperatur funktioniert
solange er auf auto steht liest er immer wieder die tempList ein. Da kannst Du setzen und er setzt wieder zurück, das Spiel kannst Du treiben bis bei im die Batterie leer ist oder Du keine Lust mehr hast ;)
Versuch macht Klug, mach doch einfach set Wohn_Heizung_Clima controlMode manual
[/s]
Und Leons Code geht von der Ist Temperatur aus, ich glaube Du wolltest einfach die Soll Temperatur hochschrauben.
Gruß Otto
#Temperatursteuerung
elsif ($EVTPART1 eq '/Temp_Wohn_hoch'){
fhem "set Wohn_Heizung_Clima desired-temp " . (ReadingsVal ('Wohn_Heizung_Clima','measured-temp', 17) +0,5);
}
Zitat von: Otto123 am 19 März 2017, 19:48:48
solange er auf auto steht liest er immer wieder die tempList ein. Da kannst Du setzen und er setzt wieder zurück, das Spiel kannst Du treiben bis bei im die Batterie leer ist oder Du keine Lust mehr hast ;)
Gruß Otto
Naja nicht ganz. Bei Auto schaltet er die Temperatur ja erst ab dem nächsten Schaltpunkt laut templist.
Zitat von: CoolTux am 19 März 2017, 19:50:49
Naja nicht ganz. Bei Auto schaltet er die Temperatur ja erst ab dem nächsten Schaltpunkt laut templist.
Ja da wirst Du Recht haben :)
Dann mach doch ohne den ganzen Heckmeck mal einfach
{fhem "set Wohn_Heizung_Clima desired-temp " . (ReadingsVal ('Wohn_Heizung_Clima','measured-temp', 17) +0,5)}
oder
{fhem "set Wohn_Heizung_Clima desired-temp " . (ReadingsVal ('Wohn_Heizung_Clima','desired-temp', 17) +0,5)}
In der Kommanozeile von FHEM
Gruß Otto
Okay es "klappt" doch. Also ich habe nun die Temperatur verändert. Allerdings wird jetzt die Temperatur von 21,0 °C (Normalwert) auf 5,0 °C gesetzt?
Das ist doch ein Gleitkomma Problem oder?
Aber wie behebe ich es und wo finde ich eine Erklärung zu dem von dir dargestellten Code @CoolTux?
Zitat von: CoolTux am 19 März 2017, 19:50:49
Naja nicht ganz. Bei Auto schaltet er die Temperatur ja erst ab dem nächsten Schaltpunkt laut templist.
Das ist ja genau das, was ich möchte :D
Edit: @CoolTux, wenn ich in der Kommandozeile deine Codes mit den geschweiften Klammern eingebe, dann kommt
Zitat
Unknown command {fhem, try help. Unknown command }, try help.
und ohne die geschweiften Klammern kommt
Zitat
Usage: fhemdebug {enable|disable|status}
Sorry nicht aufgepasst. In Perl immer . statt Komma bei Zahlen. Mach mal aus die 0,5 eine 0.5 und Leerzeichen zwischen + und 0.5
Zitat von: Allan Sche Sar am 19 März 2017, 19:59:24
Okay es "klappt" doch. Also ich habe nun die Temperatur verändert. Allerdings wird jetzt die Temperatur von 21,0 °C (Normalwert) auf 5,0 °C gesetzt?
Dann ist (ReadingsVal ('Wohn_Heizung_Clima','desired-temp', 17) leer?
Was gibt
{(ReadingsVal ('Wohn_Heizung_Clima','desired-temp', 17)}
in der Kommandozeile?
Gruß Otto
Wenn du den Code in die Kommandozeile eingibst dann ohne Semikolon bitte, aber mit geschweifte Klammern
Ich danke euch beiden. In der letzten Stunde habe ich viel dazu gelernt. Und das beste ist, dass es mit deinem Code CoolTux auch funktioniert 8)
So sieht es dann aus:
#Temperatursteuerung
elsif ($EVTPART1 eq '/Temp_Wohn_hoch'){
my $Temp_aktuel = ReadingsVal("Wohn_Heizung_Clima", "desired-temp","");
fhem "set Wohn_Heizung_Clima desired-temp " . (ReadingsVal ('Wohn_Heizung_Clima','desired-temp', 17) + 0.5);
}
CoolTux kannst du mir sagen, wie du auf den Code gekommen bist, damit ich noch mehr lernen kann und was zum Beispiel die 17 bedeutet?
P.S.: Morgen werde ich zu der Steuerung noch eine Ausgabe schreiben, dass eine Bestätigung kommt, auf welche Temperatur das ganze nun gesetzt wurde.
DANKE nochmals!
Das hier kannst Du im übrigen löschen. Brauchst Du nicht
my $Temp_aktuel = ReadingsVal("Wohn_Heizung_Clima", "desired-temp","");
ReadingsVal ist eine Perl Funktion die zu FHEM gehört. Diese Funktion liest Dir Readings eines Devices aus. Der Funktion werden 3 Parameter übergeben.
ReadingsVal (DEVICENAME,READINGSNAME,DEFAULT)
DEFAULT ist der Wert der genommen wird wenn das Reading nicht ausgelesen werden konnte. In unserem Fall halt 17.
Danke für die Erklärung. Das ReadingsVal kenne ich im allgemeinen, nur hatte ich bisher immer "" übergeben als Standard und keine feste Zahl. Daher war es etwas ungewohnt für mich.
Die Variablendeklaration ist noch enthalten, da ich damit die Ausgabe realisieren werde.