Hallo zusammen,
ich habe in unserem Badezimmer einen S300TH und einen Abluftventilator
über ein fs20as4 installiert.
Bisher haben wir nach dem duschen den Ventilator von Hand
eingeschaltet und mit einem timer von 30 Minuten wieder ausgeschaltet.
Nun möchte ich aber gerne versuchen den Ventilator bei einer
Luftfeuchtigkeit >50% einzuschalten und <30% auszuschalten.
Bei den ganzen Beispielen für define xxx notify yyy ist aber immer die
Rede von on.*
Mir ist schon klar das das notify dann auf alles reagiert was ein "on"
liefert.
Mein notify soll aber auf humidity>50% reagieren - diese Abfrage kommt
ja aber erst im Schleifenkörper wo auf >50% für set OG_Bad_Vent on und
<30% für set OG_Bad_Vent off überprüft wird.
Wie kann ich in mein Notify verzweigen oder bin ich damit ganz auf dem
Holzweg?
Über Uhrzeit ala alle 5 Minuten die Luftfeuchte überprüfen und dann
schalten macht ja nicht viel Sinn da in der Nacht oder auch tagsüber
niemand bei uns duscht es sei den wir haben Urlaub und sind zuhause.
Über Hilfe wäre ich sehr dankbar.
Grüße
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
Bei mir ergibt folgender CODE:
define Test_Schalter dummy
define Feuchtecheck notify Feuchtecheck { my $Feuchte_Bad=ReadingsVal(KS300, "Humidity", "101%");/
; $Feuchte_Bad= substr($Feuchte_Bad, 0, (length($Feuchte_Bad)-1)));; if ($Feuchte_Bad>50)/
{ fhem("set Test_Schalter on")} else { if ($Feuchte_Bad<30){ fhem("set Test_Schalter off")} } }
define a_Feuchtecheck at +*00:01:00 trigger Feuchtecheck
Diesen FEHLER:
2012.06.28 18:47:18 3: Feuchtecheck return value: syntax error at (eval 970) line 1, near "))"
Bareword "KS300" not allowed while "strict subs" in use at (eval 970) line 1.
Kann mir da jemand helfen?
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
KS300 im ReadingsVal in Anführungsstriche einbetten?
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
Nicht ?, sondern !!
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
Am Donnerstag, 28. Juni 2012 18:53:51 UTC+2 schrieb UliM:
>
> KS300 im ReadingsVal in Anführungsstriche einbetten?
Danke für die schnelle Antwort:
Fehlermeldung beim speichern: *Unknown module `KS300`:humidity.* (egal ob
" oder `)
define badNotify `KS300`:humidity.* { my $hum = %EVTPART1;; my $val =
Value("Schalter");; fhem("set Test_Schalter on") if($hum > 50 && $val eq
"off");; fhem("set Test_Schalter off") if($hum < 30 && $val eq "on");; }
*
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
Am Donnerstag, 28. Juni 2012 18:53:51 UTC+2 schrieb UliM:
>
> KS300 im ReadingsVal in Anführungsstriche einbetten?
Jetzt habe ich diese vielsagende Fehlermeldung:
2012.06.28 19:03:47 3: Feuchtecheck return value: syntax error at (eval 1068) line 1, near "))"
code:
define Test_Schalter dummy
define Feuchtecheck notify Feuchtecheck { my $Feuchte_Bad=ReadingsVal("KS300", "Humidity", "101%");; $Feuchte_Bad= substr($Feuchte_Bad, 0, (length($Feuchte_Bad)-1)));; if ($Feuchte_Bad>50) { fhem("set Test_Schalter on")} else { if ($Feuchte_Bad<30){ fhem("set Test_Schalter off")} } }
define a_Feuchtecheck at +*00:01:00 trigger Feuchtecheck
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
1. Gebot. Du sollst nicht langen Perl-code in Konfigurationsdateien stecken.
2. Gebot: Du sollst nur Perl-code verwenden, bei dem Du die Klammerebenen
sorgfältig gezählt hast
LG
pah
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Hallo
hier
{ my $Feuchte_Bad=ReadingsVal("KS300", "Humidity", "101%");; $Feuchte_Bad= substr($Feuchte_Bad, 0, (length($Feuchte_Bad)-1)))
hast du, meine ich, eine ) zuviel.
Grüße
Am Donnerstag, 28. Juni 2012 19:14:10 UTC+2 schrieb Kiter11:
>
>
>
> Am Donnerstag, 28. Juni 2012 18:53:51 UTC+2 schrieb UliM:
>>
>> KS300 im ReadingsVal in Anführungsstriche einbetten?
>
>
>
> Jetzt habe ich diese vielsagende Fehlermeldung:
>
> 2012.06.28 19:03:47 3: Feuchtecheck return value: syntax error at (eval 1068) line 1, near "))"
>
>
> code:
>
> define Test_Schalter dummy
>
> define Feuchtecheck notify Feuchtecheck { my $Feuchte_Bad=ReadingsVal("KS300", "Humidity", "101%");; $Feuchte_Bad= substr($Feuchte_Bad, 0, (length($Feuchte_Bad)-1)));; if ($Feuchte_Bad>50) { fhem("set Test_Schalter on")} else { if ($Feuchte_Bad<30){ fhem("set Test_Schalter off")} } }
>
> define a_Feuchtecheck at +*00:01:00 trigger Feuchtecheck
>
>
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
Wenn ich höflich sein soll, ich sehe keinen Unterschied!
Wo soll ich den Code denn sonst hin schreiben?
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
Ehrlich sollte das heißen. ;)
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
Hey, Inc hab's geschafft. Man muss nur zählen!
Trotzdem noch die Frage wohin ich den Code denn schreiben soll wenn nicht in die cfg?
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Hallo,
du kannst den Code gerne in die fhem.cfg schreiben.
Du kannst den Code auch in die 99_Utils.pm resp. in die die 99_MyUtils.pm
schreiben und dann passend aufrufen.
Das ändert aber nichts dran das genausoviele öffnende Klammern wie
schliessende
sein müssen.
Egal ob geschweifte oder normale ;-)
Grüße
Am Donnerstag, 28. Juni 2012 23:41:16 UTC+2 schrieb Kiter11:
>
> Hey, Inc hab's geschafft. Man muss nur zählen!
>
> Trotzdem noch die Frage wohin ich den Code denn schreiben soll wenn nicht
> in die cfg?
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
Wie selbst gemerkt: langer Perl-Code ist in der cfg extrem fehleranfällig.
Außerdem verlangsamt das die Ausführung enorm, weil er jedesmal bei
Ausführung neu übersetzt wird.
Also in ein Modul.
LG
pah
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
Hallo,
schon mal Danke für die Unterstützung.
define Feuchtecheck notify Feuchtecheck { my
$Feuchte_Bad=ReadingsVal("KS300", "Humidity", "101%");; $Feuchte_Bad=
substr($Feuchte_Bad, 0, (length($Feuchte_Bad)-1));; if ($Feuchte_Bad>50) {
fhem("set Test_Schalter on")} else { if ($Feuchte_Bad<30){ fhem("set
Test_Schalter off")} } }
Mein KS300 misst 80% Luftfeuchte, müsste mein Schalter dann nicht "on"
sein? => Ich habe das Gefühl, das der Code oben nicht humidity einließt
sonder Temperatur.
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Erstaunlich viele Probleme in "eine" Zeile, und ich finde meine Loesung von
weiter oben aus vielen Gruenden immer noch besser.
> define Feuchtecheck notify Feuchtecheck {
Das muss ueber trigger aufgerufen werden. Bei einem Anfaenger ist das
eher Fehler als Absicht. Besser:
define Feuchtecheck notify KS300:humidity { ...
> my $Feuchte_Bad=ReadingsVal("KS300", "Humidity", "101%");;
Ein KS300 hat kein Reading "Humidity", sondern nur ein "humidity".
Kann man im Detail-Ansicht bzw. nach "inform timer" / im "Event Monitor" sehen.
Weiterhin finde ich ein KS300 in einem Bad etwas fehlplatziert.
> $Feuchte_Bad= substr($Feuchte_Bad, 0, (length($Feuchte_Bad)-1));;
Die Feuchte liefert beim KS300 kein % zurueck, beim S300TH auch nicht,
nach dem Abschneiden geht also die letzte Stelle weg.
Abschneiden geht einfacher mit substr($Feuchte_Bad, 0, -1);
> Außerdem verlangsamt das die Ausführung enorm, weil er jedesmal bei
> Ausführung neu übersetzt wird.
Prinzipiell richtig, ich wollte es aber mal mit Zahlen unterlegen:
100-Mal auf einem Fritzbox 7390 den obigen, nicht geaenderten Code mit
"trigger Feuchtecheck" aufrufen dauert 8.38 Sekunden. Dabei war Test_Schalter
ein dummy, und fhem besass 43 per autocreate angelegte Geraete und genausovile
FileLogs.
Falls man diesen Code als eine Funktion mit dem Namen Feuchtecheck in
99_MyUtils abspeichert, und den obigen define umbaut nach
define Feuchtecheck notify Feuchtecheck { Feuchtecheck() }
dann dauern 100 triggers 6.06 Sekunden.
Mit einem "jungfreulichen" fhem.cfg sinkt die Zeit auf 1.5 Sekunden.
-> Da hier sowieso viele evals im Spiel sind, macht diese eine Optimierung
nicht so viel aus. Dafuer muessen nach jedem Schalten (set Test_Schalter on)
die 43 FileLogs pruefen, ob sie was zu schreiben haben, und das dauert etwa
1ms pro FileLog.
Die anderen Argumente (Wiederverwendbarkeit, Wartbarkeit) sprechen
trotzdem fuer eine Auslagerung laengerer "Einzeiler".
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
Hallo Herr Koenig,
vielen Dank für die ausführliche Antwort.
Jetzt verstehe ich auch ein par "Zeilen" mehr des Perlcodes.
>Weiterhin finde ich ein KS300 in einem Bad etwas fehlplatziert.
Ich habe den Code nur zum testen programmiert und der einfachheit halber
die Namen nahezu unveränder gelassen.
=> ich möchte in Zukunft mal meine Kellerfenster aufgrund der Aussen und
Innen- Temperatur und Luftfeuchte öffnen.
und das funktioniert ja genauso.
Aber wieso sinkt die bei einer "jungfreulichen .cgf" die Zeit von 6,06 auf
1,5 Sekunden?
Ich werde Ihren Code von oben nochmal testen (bin im Moment nicht auf der
"Baustelle"). => Ich denke aber das auch dieser dann in eine Funktion
gehört oder?
Gibt es eigentlich eine "Liste" was man auslagert und was man in der cfg
belässt?
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
Hallo,
ich verzweifle langsam.
der folgende Code arbeitet zwar aber bei TH_Keller = 98% ist das Ergebnis
immer noch Test_Schalter off.
define TH_Keller CUL_HM 197DCB
attr TH_Keller devInfo 030100
attr TH_Keller firmware 1.2
attr TH_Keller hmClass sender
attr TH_Keller model HM-WDS40-TH-I
define a_Feuchtecheck at +*00:05:00 trigger Feuchtecheck
define Feuchtecheck notify Feuchtecheck {my
$Feuchte_Bad=ReadingsVal("TH_Keller", "humidity",
"101%");;$Feuchte_Bad=($Feuchte_Bad, 0, -1);;if ($Feuchte_Bad>85) {
fhem("set Test_Schalter on")} else { if ($Feuchte_Bad<85){ fhem("set
Test_Schalter off")} } }
Ich würde gern mal das Ergebnis des Codes in eine Log Datei schreiben, aber
fehlt es mir schon an Programmierkenntnis.
Ich habe etliche Beispiele in Foren und Anleitungen durch, die meisten
gehen aber auf Aufzeichnungen von "echten" Aktoren ein => und die werden ja
meist schon von autocreate erzeugt.
>Falls man diesen Code als eine Funktion mit dem Namen Feuchtecheck in
>99_MyUtils abspeichert, und den obigen define umbaut nach
> define Feuchtecheck notify Feuchtecheck { Feuchtecheck() }
>dann dauern 100 triggers 6.06 Sekunden.
99_MyUtils gibt es bei mir nicht (es gibt u.a. 99_Utils.pm) oder muss ich
den selbst anlegen? Wenn ja wie?
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
Hallo,
ich verzweifle langsam.
der folgende Code arbeitet zwar aber bei TH_Keller = 98% ist das Ergebnis
immer noch Test_Schalter off.
define TH_Keller CUL_HM 197DCB
attr TH_Keller devInfo 030100
attr TH_Keller firmware 1.2
attr TH_Keller hmClass sender
attr TH_Keller model HM-WDS40-TH-I
define a_Feuchtecheck at +*00:05:00 trigger Feuchtecheck
define Feuchtecheck notify Feuchtecheck {my
$Feuchte_Bad=ReadingsVal("TH_Keller", "humidity",
"101%");;$Feuchte_Bad=($Feuchte_Bad, 0, -1);;if ($Feuchte_Bad>85) {
fhem("set Test_Schalter on")} else { if ($Feuchte_Bad<85){ fhem("set
Test_Schalter off")} } }
Ich würde gern mal das Ergebnis des Codes ($Feuchte_Bad) in eine Log Datei
schreiben, aber fehlt es mir schon an Programmierkenntnis.
Ich habe etliche Beispiele in Foren und Anleitungen durch, die meisten
gehen aber auf Aufzeichnungen von "echten" Aktoren ein => und die werden ja
meist schon von autocreate erzeugt.
>Falls man diesen Code als eine Funktion mit dem Namen Feuchtecheck in
>99_MyUtils abspeichert, und den obigen define umbaut nach
> define Feuchtecheck notify Feuchtecheck { Feuchtecheck() }
>dann dauern 100 triggers 6.06 Sekunden.
99_MyUtils gibt es bei mir nicht (es gibt u.a. 99_Utils.pm) oder muss ich
den selbst anlegen? Wenn ja wie?
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Anlegen 99_myUtils.pm : fhemwiki.de - Code snippets
Log-Einträge: hab ich Dir in diesem post weiter oben schon geschrieben
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
Hallo Uli,
danke für die schnelle Antwort mit 99_myUtils.pm habe ich gefunden und werde das gleich mal einbauen.
Bei dem Log habe ich meine schwierigkeiten.
Ich habe das mal so programmiert:
define a_Feuchtecheck at +*00:05:00 trigger Feuchtecheck
define Feuchtecheck notify Feuchtecheck { my $Feuchte_Bad=ReadingsVal("TH_Keller", "humidity", "101%");;\
$Feuchte_Bad= substr($Feuchte_Bad, 0, -1);;my $Feuchte_Bad = %EVTPART2;;Log 1, "Hum:$Feuchte_Bad";;\
if ($Feuchte_Bad<80) { fhem("set Test_Schalter on")} else { if ($Feuchte_Bad>80){ fhem("set Test_Schalter off")} } }
Resultat:
2012.06.30 16:04:31 3: Feuchtecheck return value: Bareword "EVTPART2" not allowed while "strict subs" in use at (eval 5683) line 1.
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
Wenn ich folgenden Code programmiere erscheint zwar im log der aktuelle
Wert z.B. 89, es wird aber kein Schaltbefehl ausgelöst.
define FeuchteNotify notify TH_Keller:humidity.* { \
my $hum = %EVTPART1;;\
Log 1, "Hum:$hum";;\
my $val = Value("Test_Schalter");;\
{fhem("set Test_Schalter on") if($hum > 85 && $val eq "on");;\
{fhem("set Test_Schalter off") if($hum < 85 && $val eq "off");;\
}}}
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Was liefert das log denn zu $val ?
Vll ist der aktuelle Status ja nicht "on" , sondern "ON" ...
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
Habe es nach langen basteln geschafft.
define a_Feuchtecheck at +*00:00:20 trigger Feuchtecheck
define Feuchtecheck notify Feuchtecheck { my $Feuchte_Garten=ReadingsVal("KS300", "humidity", "101%");;\
Log 1, "Hum:$Feuchte_Garten";;\
my $Erg=0;;\
my $Feuchte_Keller=ReadingsVal("TH_Keller", "humidity", "101%");;\
Log 1, "Hum:$Feuchte_Keller";;\
$Erg=$Feuchte_Keller-$Feuchte_Garten;;\
Log 1, "Hum:$Erg";;\
my $val = Value("Test_Schalter");;\
if ($Erg>15 && $val eq "off") { fhem("set Test_Schalter on")} else { if ($Erg<10 && $val eq "on"){ fhem("set Test_Schalter off")}}}
das Problem war u.a. das der Code: $Feuchte_XXX= substr($Feuchte_Bad, 0, -1)
nicht nötig ist, da das jeweilige Ergebnis gar kein % mitliefert, also muss auch nichts abgeschnitten werden.
Danke für all die Unterstützung.
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Hallo,
dann ab ins Wiki damit ;-)
Das kein % mitgeliefert wird und somit auch nicht abgeschnitten werden
braucht hat Rudi aber
in seinem Post oben erwähnt ;-)
Sein Beispiel mit
$Feuchte_XXX= substr($Feuchte_Bad, 0, -1)
sollte nur aufzeigen wie man einfacher das letzte Zeichen abschneiden kann.
Grüße
Am Sonntag, 1. Juli 2012 12:12:14 UTC+2 schrieb Kiter11:
>
> Habe es nach langen basteln geschafft.
>
> define a_Feuchtecheck at +*00:00:20 trigger Feuchtecheck
>
> define Feuchtecheck notify Feuchtecheck { my
> $Feuchte_Garten=ReadingsVal("KS300", "humidity", "101%");;\
> Log 1, "Hum:$Feuchte_Garten";;\
> my $Erg=0;;\
> my $Feuchte_Keller=ReadingsVal("TH_Keller", "humidity", "101%");;\
> Log 1, "Hum:$Feuchte_Keller";;\
> $Erg=$Feuchte_Keller-$Feuchte_Garten;;\
> Log 1, "Hum:$Erg";;\
> my $val = Value("Test_Schalter");;\
> if ($Erg>15 && $val eq "off") { fhem("set Test_Schalter on")} else { if
> ($Erg<10 && $val eq "on"){ fhem("set Test_Schalter off")}}}
>
> das Problem war u.a. das der Code: $Feuchte_XXX= substr($Feuchte_Bad, 0,
> -1)
> nicht nötig ist, da das jeweilige Ergebnis gar kein % mitliefert, also
> muss auch nichts abgeschnitten werden.
>
> Danke für all die Unterstützung.
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
Oh,
dann hatte ich das überlesen.
Naja Ende gut alles gut. ;)
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
Darum sollte man Programmierhinweise immer genau lesen...
LG
pah
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com