Hallo Leute,
ich benutze FHEM im Moment dafür um eine Heizregelung für mein Aquarium. Ich habe einen Temeratursensor im Becken und schalte die Heizung dann über eine Funksteckdose. In der fhem.cfg habe ich die geünschte Temperatur festgelegt. Es wäre aber toll die Temperatur einfache zu wechseln. Das würde ich gerne im Floorplan über eine Dropdownliste machen in der ich z.B 22, 23, 24, 25 ,26 °C anwählen kann. Mir fehlt da aber der Ansatz für. Im Moment sieht der Code so aus und funktioniert auch.
define Heizung dummy
attr Heizung fp_Buero 254,1065,2,
attr Heizung setList on off
define off_Heizung notify Heizung:off {system("sudo /home/pi/rcswitch-pi/send 11111 2 0 &")}
attr off_Heizung icon general_aus
define on_Heizung notify Heizung:on {system("sudo /home/pi/rcswitch-pi/send 11111 2 1 &")}
attr on_Heizung icon general_an
define HeizungAnAus at +*00:00:10 {\
my $tempaquarium = ReadingsVal("GPIO4_DS18B20_000004a70cb6","temperature",0);;\
if ( $tempaquarium < 24 ) {fhem("set Heizung on")} else {fhem("set Heizung off")}}
Ich bin da mal angefangen was zu basteln. Habe mir gedacht das ich eine Variable mit meinem gewünschten Wert befülle. Das klappt aber nicht. So sieht das aus.
define Heizung dummy
attr Heizung fp_Buero 254,1065,2,
attr Heizung setList on off
define off_Heizung notify Heizung:off {system("sudo /home/pi/rcswitch-pi/send 11111 2 0 &")}
attr off_Heizung icon general_aus
define on_Heizung notify Heizung:on {system("sudo /home/pi/rcswitch-pi/send 11111 2 1 &")}
attr on_Heizung icon general_an
define Wassertemperatur dummy
attr Wassertemperatur setList 21 22 23 24 25 26
define 21_Wassertemperatur notify Wassertemperatur:21 {my $tempa = 21}
define 22_Wassertemperatur notify Wassertemperatur:22 {my $tempa = 22}
define 23_Wassertemperatur notify Wassertemperatur:23 {my $tempa = 23}
define 24_Wassertemperatur notify Wassertemperatur:24 {my $tempa = 24}
define HeizungAnAus at +*00:00:10 {\
my $tempaquarium = ReadingsVal("GPIO4_DS18B20_000004a70cb6","temperature",0);;\
if ( $tempaquarium < $tempa ) {fhem("set Heizung on")} else {fhem("set Heizung off")}}
kann mir da jemand helfen? :)
define 21_Wassertemperatur notify Wassertemperatur:21 {my $tempa = 21}
define 22_Wassertemperatur notify Wassertemperatur:22 {my $tempa = 22}
define 23_Wassertemperatur notify Wassertemperatur:23 {my $tempa = 23}
define 24_Wassertemperatur notify Wassertemperatur:24 {my $tempa = 24}
Das kannst gleich mal weglassen.
Bei mir siehts so aus für die Heizung:
define Heizkoerper_1_desired_temp dummy
attr Heizkoerper_1_desired_temp setList state:17,18,19,20,21,21.5,22,22.5,23,23.5,24,24.5
attr Heizkoerper_1_desired_temp webCmd state
Und da dann noch ein notify drauf:
define Change_heizung.01 notify Heizkoerper_1_desired_temp { my $neuer_wert = ReadingsVal("Heizkoerper_1_desired_temp","state","0"); fhem("set TH_Heizung desired $neuer_wert");}
lg, Ici
Danke für die Antwort. Ich muss da aber noch mal nachfrage.
Ich habe den Code jetzt so für mich angepasst. Ich hab jetzt das gewünschte Dropdownfeld und kann das auch anwählen. Der gewählte Wert wird auch übernommen aber ich denke das meine Variable $tempa nicht neu geschrieben wird.
define Wassertemperatur_desired_temp dummy
attr Wassertemperatur_desired_temp fp_Buero 264,286,2,Sollwert
attr Wassertemperatur_desired_temp setList state:22,23,24,25,26
attr Wassertemperatur_desired_temp webCmd state
define Anpassen notify Wassertemperatur_desired_temp {my $tempa = ReadingsVal("Wassertemperatur_desired_temp","state","0")}
define HeizungAnAus at +*00:00:10 {\
my $tempaquarium = ReadingsVal("GPIO4_DS18B20_000004a70cb6","temperature",0);;\
if ( $tempaquarium < $tempa ) {fhem("set Heizung on")} else {fhem("set Heizung off")}}
Hallo,
klar, wenn du $tempa im notify setzt, ist das damit nicht automatisch überall verfügbar, sondern nur innerhalb der Notifys.
Du könntest das jetzt entweder zB als attr comment in das Notify reinschreiben, oder (was imho viiiiel einfacher ist):
statt dem HeinzungAnAus-at ein Threshold-modul nehmen, und in dieses die gewünschte Wassertemperatur als desired_temp eintragen.
Also in etwa so:
define TH_HeizungAnAus THRESHOLD Temp_Aquarium:temperature:0.5:22 Heizung
define Anpassen notify Wassertemperatur_desired_temp {my $tempa = ReadingsVal("Wassertemperatur_desired_temp","state","0"); fhem("set TH_HeizungAnAus desired $tempa");}}
Damit brauchst du dich um nichts zu kümmern, kannst sogar eine Hysterese angeben (hier um Beispiel 0.5°) und schonst damit auch noch die Heizung, da sie nicht ständig ein/ausschaltet.
lg, Ici
Könntest du mir zeigen wie ich das mit dem attr comment machen muss? Ich möchte auf die $tempa und dem HeizungAnAus mit at nicht verzeichten.
Bin ja auch noch Anfänger und lerne gerne...
Lernen bedeutet auch, offen für neues zu sein :)
Von daher würd ich dir trotzdem das Threshold-Modul ans Herz legen.
Ausserdem noch ein Tip: Finger weg von der fhem.cfg (über "Edit files").....Du wirst dir über kurz oder lang nur Probleme einheimsen damit.
Du kannst alles über die FHEM-Kommandozeile bzw. über das define machen.
Aber zurück zu deinem Problem:
define Anpassen notify Wassertemperatur_desired_temp {my $tempa = ReadingsVal("Wassertemperatur_desired_temp","state","0");fhem("attr Anpassen comment $tempa");}
define HeizungAnAus at +*00:00:10 {
my $tempaquarium = ReadingsVal("GPIO4_DS18B20_000004a70cb6","temperature",0);
my $tempa=AttrVal("Anpassen","comment",21);
if ( $tempaquarium < $tempa ) {fhem("set Heizung on")} else {fhem("set Heizung off")}}
Wobei, eigentlich brauchst du in diesem Fall das Notify gar nicht, du kanns ja auch gleich die gewünschte Temperatur direkt in dem at auslesen:
define HeizungAnAus at +*00:00:10 {
my $tempaquarium = ReadingsVal("GPIO4_DS18B20_000004a70cb6","temperature",0);
my $tempa=ReadingsVal("Wassertemperatur_desired_temp","state",21);
if ( $tempaquarium < $tempa ) {fhem("set Heizung on")} else {fhem("set Heizung off")}}
Du hast Recht. Offen für neues bin ich auch.... aber Stück für Stück. Ich bin kein Programmierer und taste mich da ganz langsam ran. Brauche manchmal ein bisschen länger als andere um das zu verstehen.
Durch deine Hilfe bin ich jetzt ans Ziel gekommen und sau glücklich. DANKE!
Ich kann mich ja jetzt mal mit was neuem beschäftigen. Mir fällt da auch schon ;-) THRESHOLD
Bisher habe ich immer alles über fhem.cfg gemacht :-) Wie das genau über die Kommdozeile geht weis ich gar nicht. Wäre auch wohl mal was neues zum lernen.
Ich habe das jetzt ohne das notify gemacht und läuft gut. Dafür ganz vielen DANK!!!!! :) :) :)
Für alle die das Ergebnis sehen möchten.
define HeizungAnAus at +*00:00:10 {
my $tempaquarium = ReadingsVal("GPIO4_DS18B20_000004a70cb6","temperature",0);
my $tempa=ReadingsVal("Wassertemperatur_desired_temp","state",21);
if ( $tempaquarium < $tempa ) {fhem("set Heizung on")} else {fhem("set Heizung off")}}
Schön zu hören, das es klappt :)
Jetzt noch ein [gelöst] vor den Betreff, und auch Puschel ist glücklich 8)
Noch kurz zum Thema Kommandozeile:
In dem Eingabefeld ganz oben auf jeder Seite kannst du defines etc. direkt eingeben.
Weitergehende Bearbeitung machst du dadurch, dass du dann das Gerät, Notify, wasauchimmer öffnest, und da dann unter "Internals" auf "DEF" klickst.....da kannst du das super bearbeiten.
Die fhem.cfg braucht man nicht anzugreifen, es genügt, wenn FHEM selbst da drin rumwurschtelt :)
lg, Ici
Danke