schrittweise Temperaturabsenkung

Begonnen von nase69, 26 November 2013, 22:01:17

Vorheriges Thema - Nächstes Thema

nase69

Hallo,

seid geraumer Zeit steuere ich mit einem Tuxradio einige Aktoren ( Rollläden in 4 Räumen und div Schaltsteckdosen ).
Jetzt kam mir die Idee, für meine Bartagamen die Absenkung der Tagestemperatur zu steuern. Gemeint ist hier die Anpassung an die Winterruhe.
Die Idee: Messung der Temperatur mit HMS100T, eine Wärmelampe soll über eine Schaltsteckdose FS20 ST gesteuert werden.

Der Plan: Ab 01.12. soll die Temperatur pro Tag um 0,5° abgesenkt werden ( Startwert 32° ), Generell soll die Wärmelampe nur zwischen Sonnenaufgang und Sonnenuntergang an sein. Da der HMS100T aller 5min die Werte sendet, sollte es mit zu häufigen Ein.- und Ausschalten kein Problem geben.
Ab 01.01. bleibt dann die Wärmelampe für 2 Monate aus.
Am 01.03. wird die Temperatur dann wieder täglich um 0,5° angehoben.

Nun zu meiner Frage:
Hat jemand einen Lösungsansatz oder ist dies zu komplex?

Damian

Du kannst in Utils.pm eine eigene Routine programmieren oder bestehende Module wie: sunset für Sonnenaufgang bzw. Sonnenuntergang, weektimer (heating_control) als Zeitschaltuhr zum Setzen der Solltemperatur, DUMMY zum Merken der Temperatur des Vortages und THRESHOLD zum Ansteuern der Lampe, für dein Vorhaben geschickt kombinieren.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

nase69

OK, ich glaube ich muss da weiter vorn anfangen. Ich besitze noch nicht so viele Programmierkenntnisse, deshalb benötige ich noch etwas Hilfe.

Ich würde generell die Regelung in 3 Teile splitten:
1. Rampdown --> Temperaturabsenkung über einen Monat von 32° auf Zimmertemperatur
2. Stay --> nur Licht an über Sunset/Sunrise ( läuft schon )
3. Rampup --> Temperaturanhebung über einem Monat von Zimmertemperatur auf 32°

So zur ersten Frage:
Wie kann ich ein Makro nur innerhalb eines bestimmten Monats ausführen lassen? Da ich es ja nächstes Jahr wieder nutzen möchte, würde ich die Abfrage auf den Monat beschränken.

Die Steuerung der Temperatur würde ich eventuell über einen Dimmer realisieren. Dazu würde ich den Dimmer aller 2 Tage um eine Stufe niedriger setzen. Bei 16 Stufen bin ich dann bei 32 Tage. Könnte mir bitte jemand dazu etwas Starthilfe geben.

Puschel74

Hallo,

den Monat kannst du mit $month==10 (für Oktober) prüfen.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

nase69

Hallo,
erst mal vielen  Dank für den Tipp.
Ich hab mal versucht, ein Programm zu entwerfen. Vielleicht geht es noch einfacher, für Tipps bin ich nach wie vor dankbar.


define TeraWärmeEin at *{sunrise(7200)} \
if ($month==12)
     if ($dayOfMonth == 1) || ($dayOfMonth == 2) { fhem("set Tera_DIM dim93%") }
     if ($dayOfMonth == 3) || ($dayOfMonth == 4) { fhem("set Tera_DIM dim87%") }
     if ($dayOfMonth == 5) || ($dayOfMonth == 6) { fhem("set Tera_DIM dim81%") }
     if ($dayOfMonth == 7) || ($dayOfMonth == 8) { fhem("set Tera_DIM dim75%") }
     ...
     if ($dayOfMonth == 29) || ($dayOfMonth == 30) { fhem("set Tera_DIM dim06%") }
     else { fhem("set Tera_DIM off") }

if ($month==1) || ($month==2)  { fhem("set Tera_DIM off") }}

if ($month==3)
     if ($dayOfMonth == 1) || ($dayOfMonth == 2) { fhem("set Tera_DIM dim06%") }
     if ($dayOfMonth == 3) || ($dayOfMonth == 4) { fhem("set Tera_DIM dim12%") }
     if ($dayOfMonth == 5) || ($dayOfMonth == 6) { fhem("set Tera_DIM dim18%") }
     if ($dayOfMonth == 7) || ($dayOfMonth == 8) { fhem("set Tera_DIM dim25%") }
       ...
     if ($dayOfMonth == 29) || ($dayOfMonth == 30) { fhem("set Tera_DIM dim93%") }
     else { fhem("set Tera_DIM dim100%") }
else { fhem("set Tera_DIM dim100%") }


Wie könnte ich das Programm testen? Kann ich den Dimmwert in einen Dummy schreiben und mir den Wert immer anzeigen lassen?

nase69

Zu Testzwecken habe ich mal folgenden Code eingegeben, doch leider kommt es zur Fehlermeldung. Kann mir jemand sagen, wo der Fehler liegt?

define TeraWaermeEin at *{sunrise(7200)}
{
if ($month==12)
     {
     if ($dayOfMonth == 1) || ($dayOfMonth == 2)
        {
        fhem("set Tera_DIM_Waerme dim93%");
        }
     if ($dayOfMonth == 3) || ($dayOfMonth == 4)
        {
        fhem("set Tera_DIM_Waerme dim87%");
        }
     if ($dayOfMonth == 5) || ($dayOfMonth == 6)
        {
        fhem("set Tera_DIM_Waerme dim81%")
        }
     }
}

Puschel74

Hallo,

ZitatKann mir jemand sagen, wo der Fehler liegt?
Zu finden in FHEM-Logfile (dafür ist es u. a auch da).
Soll heissen - die Fehlermeldung sollte dir sagen wo der Fehler liegt.

Wenn du die Meldung aber nicht interpretieren kannst wäre es dennoch nett wenn du sie posten würdest.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

nase69

Sorry, hier die Fehlermeldung:

Usage: define at Unknown command {, try help. Unknown command if, try help. Unknown command {, try help. Unknown command if, try help. Unknown command {, try help. Unknown command fhem("set, try help. Unknown command }, try help. Unknown command if, try help. Unknown command {, try help. Unknown command fhem("set, try help. Unknown command }, try help. Unknown command if, try help. Unknown command {, try help. Unknown command fhem("set, try help. Unknown command }, try help. Unknown command }, try help. Unknown command }, try help.

volschin

Zumindest ein sehr komischer Code, 3 mal if untereinander, der dieselbe Variable überschreibt. Es gibt auch elsif und das sollte man dann auch verwenden.

Gruß,
Veit
Intel NUC+Ubuntu 24.04+Docker+FHEM6
HomeMatic: HM-MOD-RPI-PCB+HM-USB-CFG2+hmland+diverse, HUE: Hue-Bridge, RaspBee+deCONZ+diverse
Amzn Dash-Buttons, Siro Rollos
4xRPi, 4xCO20, OWL+USB, HarmonyHub, FRITZ!Box 7590, Echo Dots+Show8, HomeBridge

nase69

Hallo,

Vielen Dank für den nächsten Hinweis.

Ich habe ein wenig experimentiert, der Code bringt beim speichern keinen Fehler, dennoch löst er keinerlei Schaltbefehl aus.

define TeraWaermeEin at +*00:00:30  {
if ($month==12) {
elseif ($dayOfMonth==1) || ($dayOfMonth==2) {fhem("set Tera_DIM_Waerme dim93%") }
elseif ($dayOfMonth==3) || ($dayOfMonth==4){ fhem("set Tera_DIM_Waerme dim87%") }
elseif ($dayOfMonth==5) || ($dayOfMonth==6) {fhem("set Tera_DIM_Waerme dim81%") } }
else {fhem("set Tera_DIM_Waerme off") }
}


Hat jemand einen Tipp? Muss das aktuelle Datum noch explizit eingelesen werden und an $month übergeben werden? Wie kann ich mir den Inhalt von $month und $dayOfMonth anzeigen lassen?

volschin

Eigentlich sollte das einen Fehler werfen, denn es heißt elsif. Also ohne e in der Mitte.
Intel NUC+Ubuntu 24.04+Docker+FHEM6
HomeMatic: HM-MOD-RPI-PCB+HM-USB-CFG2+hmland+diverse, HUE: Hue-Bridge, RaspBee+deCONZ+diverse
Amzn Dash-Buttons, Siro Rollos
4xRPi, 4xCO20, OWL+USB, HarmonyHub, FRITZ!Box 7590, Echo Dots+Show8, HomeBridge

nase69

das stimmt, ich hatte noch ein Problem mit dem Logfile ...

elseif wurde in elsif geändert,
jetzt erscheint folgende Fehlermeldung:

2013.12.07 22:48:56 3: TeraDimWaermeEin: syntax error at (eval 70921) line 1, near "{ elsif"
Global symbol "$dayOfMonth" requires explicit package name at (eval 70921) line 1.

Puschel74

Hallo,

wenn du den aktuell verwendeten Code passend zur Fehlermeldung posten könntest bräuchten die Helfer nicht alles zusammen suchen  ;)

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

nase69

Hier der aktuelle Code:

etwas abgeändert, ich will einfach einen Dummy mit einer beliebigen Zahl beschreiben. Idealer Weise würde ich hier immer eins dazu addieren also Dummy=Dummy++, funktioniert aber nicht.


define TeraDimWaermeEin at +*00:00:30 { if ($month==12){ fhem("set Dummy_TestL 393")}\
elsif ($dayOfMonth==7)||($dayOfMonth==8) {fhem("set Dummy_Test3 275") }  \
else {fhem("set Dummy_Test4 722")}\
  }
[/color][/b]

Leider wird keiner der Dummys beschrieben. Hier der Auszug aus dem Logfile:

2013.12.07 23:40:30 3: TeraDimWaermeEin: Global symbol "$dayOfMonth" requires explicit package name at (eval 6778) line 2.
syntax error at (eval 6778) line 2, near ")||"
Global symbol "$dayOfMonth" requires explicit package name at (eval 6778) line 2.