Hallo liebe Leute,
ich habe es geschafft mein FHEM auf einem Raspberry ans Laufen zu bringen.
Ich möchte eine Heizungs und Lüftungssteuerung für einige Kellerräume realisieren.
Die Temperatursensoren werden inklusive Taupunkt von einem Jeelink ausgelesen, geloggt und grafisch dargestellt.
Die Funksteckdosen (Intertechno) für Heizung, Lüftung und Lufttrockner, werden über einen CUL geschaltet.
Jetzt muss ich die Logik dafür entwickeln:
Wenn Taupunkt draußen größer Wandtemparatur drinnen, dann Lüften - wenn drinnen zu kalt erst lüften, dann trocknen, dann Heizen...
Dabei beachten, ob jemand da ist - der soll die Wunschtemperatur verändern können oder die Lüfter ausmachen, wenns nervt...
Ich habe mich noch nicht richtig eingelesen, wie das im Detail geht - die Algorithmen habe ich aber schon ungefähr im Kopf.
Wenn ich es richtig verstanden habe, gibt es verschieden Möglichkeiten, so etwas aufzubauen:
Z.B. mit notify direkt in FHEM.
Es gibt aber doch auch die Möglichkeit, das mit Prozeduren in Skripten zu realisieren.
Könnte mir mal einer (ugs.) erklären, welche Möglichkeiten es gibt, vielleicht mit Vor- und Nachteilen, oder gibt es eine Seite oder einen Thread, wo das schon steht.
Vielleicht bin ich auch nur zu dumm zum Suchen.
P.S.: Wie kann ich Listen nutzen; ich muss z.B. Nachschauen, wie lange der Lüfter heute schon lief und wann der nächste Besucher kommt.
P.P.S.: Ganz nett wäre es, wenn ich die Routinen vorher am Mac testen kann, dann könnte ich das im Zug programmieren.
Mit der Bitte um Hilfe
Ette
https://forum.fhem.de/index.php?topic=20693.0
http://www.fhemwiki.de/wiki/Energiesparende_Schimmelbek%C3%A4mpfung_/_Luftentfeuchtung_in_kritischen_R%C3%A4umen
Eventuell hilft es Dir etwas beim rausfinden einer passenden Lösung für Dich.
Danke CoolTux,
den eine Artikel kannte ich noch nicht.
Was würdest du empfehlen: Alles in FHEM zu realisieren( lange Kette von DOIF, DOELSEIF), oder doch selber ein paar Funktionen zu bauen?
Dahin zielte meine Frage.
Gruß
Ette
Da Du, so klingt es, Dich mit Perl Programmierung nicht aus kennst, würde ich an Deiner Stelle die vorhandenen "einfachen" Wege nehmen.
Vielen Dank für die Rückmeldung.
Was ich bisher noch gar nicht bei den FHEM-Befehlen gefunden habe:
Wie kann ich die LogFiles auswerten, beispielsweise: "Wie lange lief der Lüfter in den letzten 36 Stunden" und "wieviel Grad hatte der niedrigste Tapunkt in den letzten 24 Stunden".
Muss ich die Logs in eine Datenbank schreiben, um das machen zu können?
Liebe Grüße
Ette
Du könntest Plots anlegen mit Max und Min werten für das von Dir gewählte Zeitfenster.
Ich versuche gemäß obigem Rat meine Routinen in FHEM zu realisieren.
Leider scheitere ich schon bei einfachsten Aktionen!
Ich möchte beispielsweise zwei Dummys in einem Notify addieren oder eine Konstante (+1) addieren.
Wenn ich die Suche bmühe bekomme ich nur Beispile in Perl angezeigt.
Ist es denn so, dass ich für einfachste arithmetische Operationen schon Perl schreiben muss?
Macht es dann nicht Sinn die Logik komplett in Perl zu schreiben und in 99_myUtils.pm anzulegen?
P.S.: Wieso funktioniert der Befehl print nicht?
Gruß
Ette
Hallo Ette
Sofern Du nicht DOIF verwendest musst Du Formeln immer in Perl schreiben. Ist Deine Perlzeile noch ein Einzeiler, so kann man ihn getrost ins Notify schreiben. Ansonsten nimmt man am besten eine 99_myUtils dafür.
Der Perlbefehl print sollte funktionieren.
Wenn Du den State zweier Dummys addieren möchtest.
Value("dummy1") + Value("dummy2");
Frage ist was soll mit dem Ergebnis passieren. Schreiben in einen dritten Dummy?
fhem ("set dummy3 ") . Value("dummy1") + Value("dummy2");
Grüße
Habe in einen Notify geschrieben:
timer.* sleep 1.0; {fhem("set timer ") . value("timer") + value("timer")}
Logfile:
2016.10.17 23:51:56 3: set timer : no set value specified
2016.10.17 23:51:56 2: After sleep: Undefined subroutine &main::value called at (eval 1192) li
OK,
Value großgeschrieben ergibt:
2016.10.17 23:57:16 3: set timer : no set value specified
[Mon Oct 17 23:57:16 2016] fhem.pl: Argument "no set value specified2" isn't numeric in addition (+) at (eval 1211) line 1.
Danke für den Versuch
versuchs morgen nochmal
Gruß
Ette
Sorry mein Fehler, mit Rechenoperationen hatte ich das noch nie probiert. Aber so geht das auf jeden Fall
Internals:
CFGFN
DEF dummy1.* { my $erg = Value("dummy1") + Value("dummy2"); fhem "set dummy3 $erg"; }
NAME notifyAddieren
NR 13
NTFY_ORDER 50-notifyAddieren
REGEXP dummy1.*
STATE 2016-10-18 03:04:16
TYPE notify
Readings:
2016-10-18 03:04:05 state active
Attributes:
room test
Und bitte kein sleep innerhalb der Perlebene. Das blockiert FHEM.
fhem "sleep 1; set dummy3 bla"
Sowas ist korrekt.
Vielen Dank für die Hilfe,
ich dachte ich hätte es verstanden und geschrieben
timer.* sleep 1 ; {my $addit = Value("timer") + Value("timer") ; fhem(" set solltempkeiner $addit ") ;}
was allerdings zu einem Fehler führt.
Das hier
timer.* {my $addit = Value("timer") + Value("timer") ; fhem("sleep 1 ; set solltempkeiner $addit ") ;}
funktioniert dagegen.
Wo ist oben der Fehler?
Kann mir das mal einer verständlich erklären.
Vielen Dank im Vorraus
Ette
Du hast beim ersten fhem und Perlebene gemischt. Das geht nicht.
Sobald Du bisschen Perlcode benötigst musst Du das Notify komplett in Perlebene schreiben
{ }
Damit gehst du in die Perlebene, und wenn Du nun einen fhem Befehl Absenden willst, gibst Du mit dem Wort fhem an das ein fhem Befehl folgt
{ bla bla Perlcode bka bla fhem "hier kommen fhem Befehle" und nun wieder Perl;
Das mit dem Mischen der beiden Ebenen habe ich bisher nicht verstanden, ich dachte im unteren Beispiei würde das gemischt werden.
Fazit: wenn Perl im notify, dann fhem nur innerhalb von Perl.
Vielen vielen Dank.
Als nächstes werde ich mir mal die Funktionsaufrufe in Perl ansehen.
Das ist zwar hier beschrieben (http://www.fhemwiki.de/wiki/99_myUtils_anlegen (http://www.fhemwiki.de/wiki/99_myUtils_anlegen)) aber die Parameterübergabe hat bei mir noch nicht ohne Fehlermeldungen geklappt.
Wenn Fragen dann gerne per PM oder neuen Thread aufmachen.
Grüße
Hier noch das funktionierende Ergebnis meines Programmiertages:
Mein persönliches "Hello World"als OneLiner in einem Notify (Zählt von Starttimer runter bis 0 und fängt von vorne an-wichtig ist der Space vor dem Punkt):
timer.* {if (Value("timer") eq "0") {fhem("sleep 0.1 ;set timer " . (Value("starttimer"))) } else { my $addit = Value("timer") - 1 ; fhem("sleep 0.1 ; set timer $addit ") ;}}
Danke für die Hilfe und
Schönen Abned noch
Ette