Abluftventilator über Luftfeuchte ein- ausschalten

Begonnen von Puschel74, 01 Februar 2012, 17:40:05

Vorheriges Thema - Nächstes Thema

Puschel74

                                               

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
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.

Guest

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

UliM

                                                 

KS300 im ReadingsVal in Anführungsstriche einbetten?

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

Guest

Originally posted by: <email address deleted>

Nicht ?, sondern !!

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

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

Guest

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

Guest

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

Puschel74

                                               

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
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.

Guest

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

Guest

Originally posted by: <email address deleted>

Ehrlich sollte das heißen. ;)

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

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

Puschel74

                                               

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
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.

Guest

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

Guest

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

rudolfkoenig

                                                   

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