Abluftventilator über Luftfeuchte ein- ausschalten

1,152 views
Skip to first unread message

puschel74

unread,
Feb 1, 2012, 11:40:05 AM2/1/12
to FHEM users
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

puschel74

unread,
Feb 1, 2012, 11:40:15 AM2/1/12
to FHEM users

Zrrronggg!

unread,
Feb 1, 2012, 1:14:41 PM2/1/12
to FHEM users
So recht verstehe ich dich nicht.
Ich würde ja sowas machen wie:

define Feuchtecheck at +*00:05 { if (abfrage der Feuchte>Wunschwert)
{ fhem ("set OG_Bad_Vent on" ) } else { fhem(("set OG_Bad_Vent
off" ) } }

Dass sollte alle 5 Minuten checken, wie der Wert der Luftfeuchte ist
und dann entweder ein oder auschalten.

Ist nicht ausprobiert, nur so ne Idee. Bachteil ist das du nur einen
Wert hast, aber ist ja ausbaufähig, z.b. alle 5 Minuten auf
Einschaltbedingung teste und alle 10 Minuten auf Ausschaltbedingung
oder so.

Jetzt sagst du aber, das willst du NICHT machen. Unter welcher
Bedingung sollen denn der Feuchtecheck gemacht werden und unter
welcher nicht?

Und wenn's im Bad zu feucht ist ist's zu feucht... WARUM oder WANN ist
doch egal, oder? Warum das Bad also nicht trockenen, wenn es in eurem
Urlaub zu feucht wird?

Nebenbei: bei den von dir gewünschten wErten von 30% und 50% wird der
Lüfter in normalen Umgebungen IMMER laufen. Luftfeuchte unter ca. 45%
kriegt man eigentlich nur mit aktiver Trockung hin. Unter 40% beginnt
die Austrockung der Schleimhäute und damit der gesundheitlich eher zu
trocken Bereich. Ich würde den Schaltpunkt so um die 60% machen.
Schimmelbildung droht je nach Randparametern so ca. oberhalb 75%

puschel74

unread,
Feb 1, 2012, 1:26:30 PM2/1/12
to FHEM users
hi und danke schonmal für den gedankenanstoss,

seh ich das richtig das ich das nur alle x minuten prüfen lassen kann?
mir wäre eher sowas wie
wenn der s300th >x% hat ventilator ein und bei <y% wieder aus lieber
und nicht schau alle 5 minuten ob s300th>x% oder <y% liegt.
"belastet" das den prozessor bzw. fhem nicht unnötig?
bei einem schalter schau ich ja auch nicht alle a minuten ob er
gedrückt wurde - ok macht auch nicht viel sinn.
nur "schaut" mir fhem eben auch um 01:xx nach der feuchte und da ist
garantiert nichts zu tun.
ich logg die temperatur und feuchte mit dem s300th seit knapp einer
woche mit und da bewegen sich die werte eigentlich immer zwischen 52%
(nach dem duschen) und 36%.
aber ok wenn ich das "nur" alle x minuten triggern kann solls mir auch
recht sein ich dachte es geht auch anders.
dann werd ich mich mal ans "programmieren" machen.

Roland

P.S.: Warum der erste Post zweimal reingerutscht ist weiß ich auch
nicht - sorry

Rudolf Koenig

unread,
Feb 1, 2012, 2:27:40 PM2/1/12
to fhem-...@googlegroups.com
> "belastet" das den prozessor bzw. fhem nicht unn�tig?

Nein. Erstens ist das nicht unnoetig, und zweitens ist das auch auf einem
Fritzbox weniger als 0.01% CPU. Alternativ kannst auch folgendes versuchen,
ist aber auch nicht weniger Belastung.

define badNotify bad_s300th:humidity.* { \
my $hum = %EVTPART1;;\
my $val = Value("Schalter");;\
fhem("set Schalter on") if($hum > 50 && $val eq "off");;\
fhem("set Schalter off") if($hum < 30 && $val eq "on");;\
}

Achtung, nicht getestet.

Roland

unread,
Feb 1, 2012, 2:28:35 PM2/1/12
to fhem-...@googlegroups.com

�h Moment mal,
sollte das nicht eher so aussehen:

define a_Feuchtecheck at +*00:05:00 trigger Feuchtecheck

define Feuchtecheck notify Feuchtecheck {\
my $Feuchte_Bad=ReadingsVal(CUL_WS_1, "Humidity", "101%");;\
$Feuchte_Bad=(substr($Feuchte_Bad, 0, (length($Feuchte_Bad)-1)));;\
if ($Feuchte_Bad>50) {\
fhem("set OG_Bad_Abluft on")}\
else {\
if ($Feuchte_Bad<30){\
fhem("set OG_Bad_Abluft off")}\
}\
}

Ich will das nur noch nicht auf mein fhem loslassen weil ich vermute das
mein Code nur Fehler produziert.
Ich habe Teile der Heizungssteuerung genommen und frei Schnauze
angepasst wie ich mir das denke (oder wie ich es gerne haben w�rde).
Wenn da mal jemand mit Ahnung kurz dr�ber schauen k�nnte w�re ich dankbar.

Roland
P.S.: Ich �bersetz die CUL/CUNO commandref gern fertig - das geht mir
leichter von der Hand als so einen Codeschnippsel zu "er"denken.
> hi und danke schonmal f�r den gedankenanstoss,
>
> seh ich das richtig das ich das nur alle x minuten pr�fen lassen kann?
> mir w�re eher sowas wie


> wenn der s300th>x% hat ventilator ein und bei<y% wieder aus lieber
> und nicht schau alle 5 minuten ob s300th>x% oder<y% liegt.

> "belastet" das den prozessor bzw. fhem nicht unn�tig?


> bei einem schalter schau ich ja auch nicht alle a minuten ob er

> gedr�ckt wurde - ok macht auch nicht viel sinn.


> nur "schaut" mir fhem eben auch um 01:xx nach der feuchte und da ist
> garantiert nichts zu tun.
> ich logg die temperatur und feuchte mit dem s300th seit knapp einer
> woche mit und da bewegen sich die werte eigentlich immer zwischen 52%
> (nach dem duschen) und 36%.
> aber ok wenn ich das "nur" alle x minuten triggern kann solls mir auch
> recht sein ich dachte es geht auch anders.
> dann werd ich mich mal ans "programmieren" machen.
>
> Roland
>

> P.S.: Warum der erste Post zweimal reingerutscht ist wei� ich auch


> nicht - sorry
>
> On 1 Feb., 19:14, "Zrrronggg!"<blunzmanj...@tekkno.de> wrote:
>> So recht verstehe ich dich nicht.

>> Ich w�rde ja sowas machen wie:


>>
>> define Feuchtecheck at +*00:05 { if (abfrage der Feuchte>Wunschwert)
>> { fhem ("set OG_Bad_Vent on" ) } else { fhem(("set OG_Bad_Vent
>> off" ) } }
>>
>> Dass sollte alle 5 Minuten checken, wie der Wert der Luftfeuchte ist
>> und dann entweder ein oder auschalten.
>>
>> Ist nicht ausprobiert, nur so ne Idee. Bachteil ist das du nur einen

>> Wert hast, aber ist ja ausbauf�hig, z.b. alle 5 Minuten auf


>> Einschaltbedingung teste und alle 10 Minuten auf Ausschaltbedingung
>> oder so.
>>
>> Jetzt sagst du aber, das willst du NICHT machen. Unter welcher
>> Bedingung sollen denn der Feuchtecheck gemacht werden und unter
>> welcher nicht?
>>
>> Und wenn's im Bad zu feucht ist ist's zu feucht... WARUM oder WANN ist
>> doch egal, oder? Warum das Bad also nicht trockenen, wenn es in eurem
>> Urlaub zu feucht wird?
>>

>> Nebenbei: bei den von dir gew�nschten wErten von 30% und 50% wird der
>> L�fter in normalen Umgebungen IMMER laufen. Luftfeuchte unter ca. 45%


>> kriegt man eigentlich nur mit aktiver Trockung hin. Unter 40% beginnt

>> die Austrockung der Schleimh�ute und damit der gesundheitlich eher zu
>> trocken Bereich. Ich w�rde den Schaltpunkt so um die 60% machen.


>> Schimmelbildung droht je nach Randparametern so ca. oberhalb 75%
>>
>> On 1 Feb., 17:40, puschel74<pusche...@gmx.net> wrote:
>>
>>
>>
>>
>>
>>
>>
>>> 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


puschel74

unread,
Feb 1, 2012, 2:47:05 PM2/1/12
to FHEM users
Sorry Rudolf,
unsere 2 Posts haben sich zeitlich überschnitten.
Deiner sieht natürlich um einiges eleganter aus - ich werd den morgen
mal ausprobieren.
Danke schonmal.

Breaker

unread,
Jun 28, 2012, 9:55:06 AM6/28/12
to fhem-...@googlegroups.com

Halllo,

ich versuche gerade etwas ähnliches und habe den Vorschlag von Rudolf übernommen/geändert nur leider ohne Erfolg. Trotzdem beide  Schwellenwerte mehrfach erreicht wurden ist kein Schaltvorgang ausgelöst worden. Hier mein Versuch:
 
 

 define KinoFeuchteNotify notify Kino_Sensor:humidity.* { \
  my $hum = %EVTPART1;;\
  my $val = Value("myITSwitch");;\
  fhem("set myITSwitch on")  if($hum > 65 && $val eq "off");;\
  fhem("set myITSwitch off") if($hum < 60 && $val eq "on");;\
}
attr KinoFeuchteNotify room Kino

es existieren myITSwitch (Name für den Test noch vorläufig) und Kino_Sensor in meiner Umgebung.
 
Wenn das erst mal läuft würde ich das noch gern vom Zustand der Fenster abhängig schalten. Es macht keinen Sinn den Luftenfeuchter (am myITSwitch) laufen zu lassen wenn gerade gelüftet wird.
 
Viele Grüße
Breaker

 

UliM

unread,
Jun 28, 2012, 12:22:38 PM6/28/12
to fhem-...@googlegroups.com
Hi,
bau doch mal
Log 1, "Hum: $hum";;\

etc ein und schau, ob die Werte stimmen. Ggf musstbDunauf %EVTPART2 o.ä. ändern.
Sonstbirgendwas im log?

Gruß Uli

Prof. Dr. Peter A. Henning

unread,
Jun 28, 2012, 12:34:01 PM6/28/12
to fhem-...@googlegroups.com
Die Feuchtigkeitsmessung war einer meiner Gründe, so stark in das 1-Wire business einzusteigen. Mit einem analogen Sensor am DS2450 und zusätzlichem Thermometer DS1820, oder an einem Kombisensor DS2438 bekomme ich eine hochgenaue temperaturkompensierte Feuchtemessung wenn ich es brauche. Und nicht nur dann, wenn der S300TH beschließt, ein telegramm zu senden.

LG

pah

Kiter11

unread,
Jun 28, 2012, 12:50:07 PM6/28/12
to fhem-...@googlegroups.com
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?

UliM

unread,
Jun 28, 2012, 12:53:51 PM6/28/12
to fhem-...@googlegroups.com
KS300 im ReadingsVal in Anführungsstriche einbetten?

Prof. Dr. Peter A. Henning

unread,
Jun 28, 2012, 12:57:33 PM6/28/12
to fhem-...@googlegroups.com
Nicht ?, sondern !!
Message has been deleted

Kiter11

unread,
Jun 28, 2012, 1:14:10 PM6/28/12
to fhem-...@googlegroups.com


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")} } }

Prof. Dr. Peter A. Henning

unread,
Jun 28, 2012, 1:49:39 PM6/28/12
to fhem-...@googlegroups.com
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

puschel74

unread,
Jun 28, 2012, 2:09:43 PM6/28/12
to fhem-...@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

Kiter11

unread,
Jun 28, 2012, 5:27:49 PM6/28/12
to fhem-...@googlegroups.com
Wenn ich höflich sein soll, ich sehe keinen Unterschied!

Wo soll ich den Code denn sonst hin schreiben?

Kiter11

unread,
Jun 28, 2012, 5:28:31 PM6/28/12
to fhem-...@googlegroups.com
Ehrlich sollte das heißen. ;)

Kiter11

unread,
Jun 28, 2012, 5:41:16 PM6/28/12
to fhem-...@googlegroups.com
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?

puschel74

unread,
Jun 28, 2012, 5:49:41 PM6/28/12
to fhem-...@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

Prof. Dr. Peter A. Henning

unread,
Jun 28, 2012, 9:42:22 PM6/28/12
to fhem-...@googlegroups.com
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

Kiter11

unread,
Jun 29, 2012, 1:24:12 AM6/29/12
to fhem-...@googlegroups.com
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.
 

Rudolf Koenig

unread,
Jun 29, 2012, 3:27:57 AM6/29/12
to fhem-...@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锟絜rdem verlangsamt das die Ausf锟絟rung enorm, weil er jedesmal bei
> Ausf锟絟rung neu 锟絙ersetzt 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".

Kiter11

unread,
Jun 29, 2012, 6:44:24 AM6/29/12
to fhem-...@googlegroups.com
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?

Breaker

unread,
Jun 29, 2012, 3:02:35 PM6/29/12
to fhem-...@googlegroups.com
Hallo,

Der Tip mit dem Log ist sehr gut - da hätte ich auchdrauf kommen müssen. Eigenartiger Weise gehts jetzt ohne großartige Änderung evtl. Reagiert es erst bei 1% differenz?
Die Genauigkeit und auch die Zeitpunkte der Messungen reicht für diese Anwendung aus - mir kommt es da nicht auf 5min oder +- 4% an, hauptsache es gammelt nicht wenn man den Raum nicht so oft nutzt.
Fehlt noch die Einbindung der fht80 um es völlig zu automatisieren -da werde ich noch mal rumtesten.

Vielen Dank &Gruß
Message has been deleted

Kiter11

unread,
Jun 30, 2012, 9:29:05 AM6/30/12
to fhem-...@googlegroups.com
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?

UliM

unread,
Jun 30, 2012, 9:41:32 AM6/30/12
to fhem-...@googlegroups.com
Anlegen 99_myUtils.pm : fhemwiki.de - Code snippets

Log-Einträge: hab ich Dir in diesem post weiter oben schon geschrieben

Kiter11

unread,
Jun 30, 2012, 10:08:38 AM6/30/12
to fhem-...@googlegroups.com
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.

Kiter11

unread,
Jun 30, 2012, 10:14:26 AM6/30/12
to fhem-...@googlegroups.com
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");;\
}}}

UliM

unread,
Jul 1, 2012, 2:49:17 AM7/1/12
to fhem-...@googlegroups.com
Was liefert das log denn zu $val ?
Vll ist der aktuelle Status ja nicht "on" , sondern "ON" ...

Kiter11

unread,
Jul 1, 2012, 6:12:14 AM7/1/12
to fhem-...@googlegroups.com
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.

puschel74

unread,
Jul 1, 2012, 6:21:44 AM7/1/12
to fhem-...@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

Kiter11

unread,
Jul 1, 2012, 7:34:42 AM7/1/12
to fhem-...@googlegroups.com
Oh,

dann hatte ich das überlesen.
Naja Ende gut alles gut. ;)

Prof. Dr. Peter A. Henning

unread,
Jul 1, 2012, 7:47:08 AM7/1/12
to fhem-...@googlegroups.com
Darum sollte man Programmierhinweise immer genau lesen...

LG

pah

tobias.faust

unread,
Jul 25, 2012, 10:44:24 PM7/25/12
to fhem-...@googlegroups.com
Hallo Pah,
zwei Fragen:
1. kannst du im conrib/1wire einen Beispielschaltplan einstellen wie man den DS2450 grundsätzlich verdrahtet. Sicherlich benötigt dieser noch PullUp/Down Widerstände an den A/D EIngängen, oder?
2. du schreibst das du eine Feuchtemessung durchführen willst und empfiehlst den DS2438. Aber das ist doch ein Smart Battery Monitor mit TempFühler? Wo bleibt da der Feuchtefühler?

On Thursday, June 28, 2012 6:34:01 PM UTC+2, Prof. Dr. Peter A. Henning wrote:
Die Feuchtigkeitsmessung war einer meiner Gründe, so stark in das 1-Wire business einzusteigen. Mit einem analogen Sensor am DS2450 und zusätzlichem Thermometer DS1820, oder an einem Kombisensor DS2438 bekomme ich eine hochgenaue temperaturkompensierte Feuchtemessung wenn ich es brauche. Und nicht nur dann, wenn der S300TH beschließt, ein telegramm zu senden.

LG

pah

Prof. Dr. Peter A. Henning

unread,
Jul 26, 2012, 12:52:20 AM7/26/12
to fhem-...@googlegroups.com
1. Der DS2450 benötigt keine Pullup oder Pulldown-Widerstände am Eingang, sondern einen Spannungswert. Beschaltung ? ist nicht nötig.
2. Dieser Spannungswert wird ihm von einem analogen Feuchtesensor geliefert, z.B. http://www.conrad.de/ce/de/product/505268/SMD-Feuchtesensor-Honeywell-HIH-4031-001-0-100-rF-40-85-C
3. Damit die Anzeige genau ist, muss dieser temperaturkompensiert werden, indem der gemessene Spannungswert UND die Temperatur in einen Feuchtewert umgerechnet werden (siehe Datenblatt des Feuchtesensors). Dazu kann  als 2. 1-Wire-Device neben den DS2450 ein DS1820 gesetzt werden.
4. Die elegantere Lösung ist, die feuchtemessung über ein einzelnes 1-Wire Device zu machen: DS2438 enthält Temperaturmessung und zwei A/D Wandler. Obwohl das Ding als Smart Battery Monitor gehandelt wird,kann man damit also gleichzeitig Feuchte, Temperatur und noch einen weiteren Analogwert (z.B. solre Einstarhlung) messen, wenn man es richtig anstellt. Das OWX-Modul dafür gibt es aber noch nicht.

pah
Reply all
Reply to author
Forward
0 new messages