Hallo Forum
habe nun diverse Nächte mir um die Ohren gehauen, um meinen großen Mund noch gerecht zu werden.
Versprochen hatte ich eine Regelung für eine Freundin, die bald einen gr. Runden feiert.
Plan war : Kellerlüftung, dazu Raspberry pi2,4 x Funksteckdosen (Pollin), 433 mhz. Modul (Amazon), 2-fach Relais für das Ansteuern des Ventilklappenhubs (wurd mir geschenkt), 2 x DHT22 Module (China), 2x Lüfter 230 V hatte ich noch im Keller.
Anbei für jeden von Euch zur Information oder als Anhalt stelle ich die komplette Config ein.
-----------------------------------------------------------------
attr global userattr devStateIcon devStateStyle icon sortby webCmd widgetOverride
attr global autoload_undefined_devices 1
attr global logfile ./log/fhem-%Y-%m.log
attr global modpath .
attr global motd Error messages while initializing FHEM:\
attr global statefile ./log/fhem.save
attr global updateInBackground 1
attr global verbose 5
define telnetPort telnet 7072 global
define WEB FHEMWEB 8083 global
attr WEB HTTPS 1
attr WEB basicAuth xxxxxxxxxxxxxxxxxxxxxxxxxxx
attr WEB editConfig 1
attr WEB stylesheetPrefix dark
define WEBphone FHEMWEB 8084 global
attr WEBphone HTTPS 1
attr WEBphone basicAuth xxxxxxxxxxxxxxxxxxxxxxxxxx
attr WEBphone stylesheetPrefix smallscreen
define WEBtablet FHEMWEB 8085 global
attr WEBtablet HTTPS 1
attr WEBtablet basicAuth xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
attr WEBtablet stylesheetPrefix darktouchpad
# Fake FileLog entry, to access the fhem log from FHEMWEB
define Logfile FileLog ./log/fhem-%Y-%m.log fakelog
define autocreate autocreate
attr autocreate filelog ./log/%NAME-%Y.log
define eventTypes eventTypes ./log/eventTypes.txt
# Disable this to avoid looking for new USB devices on startup
# WETTER
define Wetter Weather xxxxxxxx 60 de
attr Wetter event-on-change-reading forecast_date,fc0_condition
attr Wetter event-on-update-reading dewpoint,humidity,temperature,wind_condition
attr Wetter group DHT22
attr Wetter icon rc_WEB
attr Wetter room Keller
attr Wetter stateFormat Temp : temperature Feuchte : humidity Taupunkt : dewpoint : wind_condition
define w_Wetter weblink htmlCode { WeatherAsHtml("Wetter") }
attr w_Wetter htmlattr width_"220" height="330" frameborder="0" marginheight="0" marginwidth="0"
attr w_Wetter room Wohnzimmer
define FileLog_Wetter FileLog ./log/Wetter-%Y.log Wetter
attr FileLog_Wetter logtype temp4hum6:wind|humidity|temperature,text
attr FileLog_Wetter room LOG
# WETTER ENDE
# -----PUSHBULLET------------
define pushmsg Pushbullet xxxxxxxxxxxxxxxxxxxxxxx
# ---------------------------
# Pollin Funksteckdosen 434Mhz
define SteckdoseA dummy
attr SteckdoseA icon black_Steckdose.on
attr SteckdoseA room Zentrale,Wohnzimmer
attr SteckdoseA setList on off
define off_SteckdoseA notify SteckdoseA:off {system("sudo /usr/bin/send 10101 1 0 &")}
define on_SteckdoseA notify SteckdoseA:on {system("sudo /usr/bin/send 10101 1 1 &")}
define SteckdoseB dummy
attr SteckdoseB icon black_Steckdose.on
attr SteckdoseB room Zentrale,Wohnzimmer
attr SteckdoseB setList on off
define off_SteckdoseB notify SteckdoseB:off {system("sudo /usr/bin/send 10101 2 0 &")}
define on_SteckdoseB notify SteckdoseB:on {system("sudo /usr/bin/send 10101 2 1 &")}
define SteckdoseC dummy
attr SteckdoseC icon black_Steckdose.on
attr SteckdoseC room Zentrale,Wohnzimmer
attr SteckdoseC setList on off
define off_SteckdoseC notify SteckdoseC:off {system("sudo /usr/bin/send 10101 3 0 &")}
define on_SteckdoseC notify SteckdoseC:on {system("sudo /usr/bin/send 10101 3 1 &")}
define SteckdoseD dummy
attr SteckdoseD icon black_Steckdose.on
attr SteckdoseD room Zentrale,Wohnzimmer
attr SteckdoseD setList on off
define off_SteckdoseD notify SteckdoseD:off {system("sudo /usr/bin/send 10101 4 0 &")}
define on_SteckdoseD notify SteckdoseD:on {system("sudo /usr/bin/send 10101 4 1 &")}
# TEMP-FEUCHTE DHT22 ---INNEN----funktioniert
define KellerInnen.DHT22 dummy
attr KellerInnen.DHT22 group DHT22
attr KellerInnen.DHT22 icon icoTempHausEG
attr KellerInnen.DHT22 room Keller
attr KellerInnen.DHT22 stateFormat Temp: temperature Feuchte: humidity Taupunkt: dewpoint Fan: fan
define FileLog_KellerInnen.DHT22 FileLog ./log/KellerInnen.DHT22-%Y.log KellerInnen.DHT22
attr FileLog_KellerInnen.DHT22 group DHT22
attr FileLog_KellerInnen.DHT22 logtype temp4hum6:wind|humidity|temperature,text
attr FileLog_KellerInnen.DHT22 room LOG
# TEMP-FEUCHTE DHT22 ---AUSSEN---funktioniert-
define KellerAussen.DHT22 dummy
attr KellerAussen.DHT22 group DHT22
attr KellerAussen.DHT22 icon icoTempWasser
attr KellerAussen.DHT22 room Keller
attr KellerAussen.DHT22 stateFormat Temp: temperature Feuchte: humidity Taupunkt: dewpoint
define FileLog_KellerAussen.DHT22 FileLog ./log/KellerAussen.DHT22-%Y.log KellerAussen.DHT22
attr FileLog_KellerAussen.DHT22 group DHT22
attr FileLog_KellerAussen.DHT22 logtype temp4hum6:wind|humidity|temperature,text
attr FileLog_KellerAussen.DHT22 room LOG
# -------------------PLOT---------------------funktioniert--
define SVG_FileLog_KellerAussen.DHT22_1 SVG FileLog_KellerAussen.DHT22:SVG_FileLog_KellerAussen.DHT22_1:CURRENT
attr SVG_FileLog_KellerAussen.DHT22_1 room Keller
define SVG_FileLog_KellerInnen.DHT22_1 SVG FileLog_KellerInnen.DHT22:SVG_FileLog_KellerInnen.DHT22_1:CURRENT
attr SVG_FileLog_KellerInnen.DHT22_1 room Keller
# -------------------PLOT ENDE-------------------
# ----------------DEWPOINT--------------------------funktioniert-------------------
define dew_state dewpoint dewpoint .* T H D
attr dew_state group DHT22
attr dew_state room Zentrale
define dew_Keller dewpoint fan KellerInnen.DHT22 KellerAussen.DHT22 0 2
attr dew_Keller group DHT22
attr dew_Keller room Zentrale
define dew_all dewpoint dewpoint .* temperature humidity dewpoint
attr dew_all group DHT22
attr dew_all room Zentrale
define FileLog_Keller FileLog ./log/Keller%Y.log Admin
attr FileLog_Keller logtype temp4hum6:dewpoint|humidity|temperature,text
attr FileLog_Keller room Zentrale
# ---------------DEWPOINT ENDE---------------------funktioniert--------------------
define dew_Keller_off notify KellerInnen.DHT22.*fan:.*off {if (Value("FensterAUF") eq "off"){fhem ("set SteckdoseA on;; sleep 1;; set SteckdoseA on;; sleep 1;; set SteckdoseA on;; sleep 1;;set FensterZU on;; sleep 80;; set FensterZU off;; sleep 1;; set SteckdoseA off;; sleep 1;; set SteckdoseA off sleep 1;; set SteckdoseA off")}}
define dew_Keller_on notify KellerInnen.DHT22.*fan:.*on {if (Value("FensterZU") eq "off"){fhem ("set SteckdoseA on;; sleep 1;; set SteckdoseA on;; sleep 1;; set SteckdoseA on;; sleep 1;;set FensterAUF on;; sleep 80;; set FensterAUF off;; sleep 1;; set SteckdoseA off;; sleep 1;; set SteckdoseA off")}}
# ----------------Lüfter------------funktioniert------
define Lueftercheck notify KellerInnen.DHT22.*fan:.*on {fhem ("sleep 80;;set SteckdoseB on;; sleep 2;; set SteckdoseB on;; sleep 2;; set SteckdoseB on;; sleep 300;; set SteckdoseB off;; sleep 2;;set SteckdoseB off;; sleep 2;; set SteckdoseB off")}
define Lueftercheck1 notify KellerInnen.DHT22.*fan:.*off {fhem ("set SteckdoseB off;; sleep 2;; set SteckdoseB off;; sleep 2;; set SteckdoseB off") }
# ---------------Entlüfter-----------funktioniert NICHT-------
define dew_Keller_check notify KellerInnen.DHT22.*fan:.*off {fhem ("set SteckdoseC on;; sleep 1;; set SteckdoseC on;; sleep 1;; set SteckDoseC on;; sleep 3600;; set SteckdoseC off;; sleep 1;; set SteckdoseC off;; sleep 1;; set SteckdoseC off") if (ReadingsVal("KellerInnen.DHT22","humidity","") >= 80)}
attr dew_Keller_check room Zentrale
# --------Lüfter--ENDE-----------
# -------------NICHT INSTALLIERT----------
define LuftentfeuchterWasserstand RPI_GPIO 22
attr LuftentfeuchterWasserstand active_low yes
attr LuftentfeuchterWasserstand devStateIcon .*:rc_GREEN
attr LuftentfeuchterWasserstand direction input
attr LuftentfeuchterWasserstand icon Icon_Fisch
attr LuftentfeuchterWasserstand interrupt both
attr LuftentfeuchterWasserstand pud_resistor up
attr LuftentfeuchterWasserstand room Keller
attr LuftentfeuchterWasserstand toggletostate yes
define GPIOWasserstandPusmsg notify GPIOWasserstand:on {\
fhem("set pushmsg message ACHTUNG ENTFEUCHTER VOLL ")}\
#----------------RELAIS--------------funktioniert--------
define FensterAUF RPI_GPIO 20
attr FensterAUF active_low yes
attr FensterAUF devStateIcon aus:off an:on
attr FensterAUF direction output
attr FensterAUF restoreOnStartup off
attr FensterAUF room Zentrale
#--------------------------------------funktioniert---
define FensterZU RPI_GPIO 21
attr FensterZU active_low yes
attr FensterZU devStateIcon aus:off an:on
attr FensterZU direction output
attr FensterZU restoreOnStartup off
attr FensterZU room Zentrale
Alles, aber auch wirklich alles funktioniert (Pushbullet, Funksteckdosen,Taupunktberechnung, Relaissteuerung(über wiriningPi dann aber nur über FHEM konfiguriert etc).......BIS AUF
1: Wasserstandsmelder (der ist noch nicht da, wird in den Luftentfeuchter eingebaut)
2. die Abfrage nach der KellerInnen Feuchtigkeit, die höher 80 % sein muss, um den Luftentfeuchter einzuschalten. Ich bekomme aber diese Abfrage nicht hin.!!!!! HILFE
Vielleicht hat einer von Euch eine Idee und kann mir da weiterhelfen, denn dann ist mein Geburtstagversprechen gehalten. Falls nicht, vielleicht kann der eine oder andere etwas damit für sich anfangen. In der Hoffnung von Euch zu hören.....
bis denne
P.S.: Die Befehle bei den Funksteckdosen sind mit Absicht mehrfach, da Funk (kann ja mal einer verloren gehen)
Ich würde mich freuen, falls jemand Verbesserungspotential sieht und diese dann durch Beispiele anzeigt. Manche Sachen sind kompliziert, wie z.B. :Was passiert bei einem Stromausfall, wo hängen Relais und Funksteckdosen in welchem ZUstand rum. Bei den Relais habe ich das mit FHEM gelöst (siehe fhem.cfg), aber bei den Steckdosen musste ich ein Script erstellen, um bei einem Neustart zurückgesetzt zu werden. Bei Fragen stelle ich auch gerne mal Bilder davon ein (falls das geht).
Hallo,
so ganz blick ich da nicht durch. Ohne etwas genauere Beschreibung ist es schwehr sich da reinzudenken. Was hängt z.b. an SteckdoseA, SteckdoseB usw. Wie wird eigentlich der Dummy DHT22 mit Werten gefüllt.
Dann bitte Quellcodes zwischen [ code ][ /code ]
setzen. Macht es übersichtlicher
Was mir jetzt erst mal aufgefallen ist dein notify von Lueftercheck1 und dew_Keller_check (der ja anscheinend nicht funktioniert) triggern auf dem selben Ereignis. Also kann es doch an der "Abfrage" nicht liegen wenn doch Lueftercheck1 funktioniert. Vielleicht liegt es genau daran das die beiden notifies gleichzeitig ausgeführt werden. Vielleicht mal testweise die beiden notifies zusammenfassen.
Gibt die Log irgendwelche Fehler aus? Stehen denn in DHT22.humidity wirkliche reine Zahlenwerte?
Gruß
Hallo Phill
ich freue mich auf dein Interesse.
Also , die KellerInnen.DHT22 und KellerAussen.DHT22 werden von einem Script namens fhem-dht auf linux ebene mittels Crontab ausgeführt und gefüttert. (siehe http://forum.fhem.de/index.php/topic,25413.15.html 2.Seite mittig [Adafruit] [Beitrag von Andy89].
Die SteckDoseA wird geschaltet, um den Trafo (230 V auf 24 V ) zu aktivieren/deaktivieren), der den Stellklappenmotor(Hub) mit Strom versorgt. SteckdoseB reagiert nur auf dew_Keller_on und läuft dann die eingestellte Zeit ab(Ventilatoren). Dazu ist keine weitere Abfrage nötig. Bei --Entlüfter-- aber brauche ich 2 Bedingungen: 1. dew_Keller_off und 2. humidity KellerInnen.dht22 >=80 (%).
Bedingung 1 ist einfach, aber die 2. ???? Muss ich den Wert aus der Filelog auslesen, wenn ja , dann wie , oder gehts es irgendwie anders ......
Zitat von: tester1 am 12 Juni 2015, 03:37:44
if (ReadingsVal("KellerInnen.DHT22","humidity","") >= 80)}
duch das %-Zeichen funktiont deine Abfrage oben (voraussichtlich) nicht
Das würde ich durch folgendes ersetzen:
if (ReadingsNum("KellerInnen.DHT22","humidity","") >= 80)}
[/quote]
ansonsten schau dir mal den DOIF-Befehl an
Hallo Paddinho
Das % Zeichen war nur zur Erklärung/Veranschaulichung. In der fhem.cfg ist es nicht drinne.
Die FRage ist, ob ich auf diese Weise Werte auslesen kann oder nicht. Doif ist ja nur eine eine Bedingungsabfrage , die leider nichts mit dem Ausleseproblem zu tun hat. Trotzdem Danke für den Hinweis (den schaue ich mir unbedingt an, vielleicht übersehe ich ja was )
Wenn du es ganz anders lösen willst:
Mache es doch per DOIF
define di_gz_Ventilator DOIF ([gz_TK_Fenster] eq "opened" and ([gz_TF_TEMPERATUR:dewpoint]-[Aussenthermometer:dewpoint]) > 2)
(set gz_SD_Ventilator on)
DOELSEIF ([gz_TK_Fenster] eq "closed" or ([gz_TF_TEMPERATUR:dewpoint]-[Aussenthermometer:dewpoint]) <= 2)
(set gz_SD_Ventilator off)
Das ist der Code bei mir dazu.
Allerdings triggere ich beim einschalten, ob das Kellerfenster offen ist (habe noch keine so schicken Kernbohrungen mit Lüftern drin), und die Taupunktdiferenz groß genug ist, als dass nicht ein Meßfehler vielleicht Unsinn erzeugt)
Du könntest den Teil vor dem and und vor dem or quasi einfach weglassen.
Die diversen Ausschaltbefehle (set....) hängst du einfach mit Komma getrennt dazu.
An Rince und Paddinho und natürlich allen anderen, habe es jetzt mit DOIF probiert und es scheint zu klappen. DANKE. Dafür habe ich einen neuen Fehler, und zwar reagiert das DOIF im Gegensatz zu meine vorherigen Versuchen steif im Umgang mit
sleep. Wenn ich also die Bedingungen erfülle (habe testweise auf >= 40 gestellt), dann wird starr das
sleep abgearbeitet und alles erstarrt.
define dew_Keller_check DOIF ([KellerInnen.DHT22:fan] eq "off" and [KellerInnen.DHT22:humidity] > 40) (set SteckdoseC on,, sleep 1,, set SteckdoseC on,, sleep 1,, set SteckDoseC on,, sleep 60,, set SteckdoseC off,, sleep 1,, set SteckdoseC off,, sleep 1,, set SteckdoseC off) DOELSE (set SteckdoseC off,, sleep1,, set SteckDoseC off) |
Das man bei DOIF Komma´s nimmt anstatt Semikolon´s habe ich dann schnell rausbekommen. Aber wie bekomme ich das
sleep in den Hintergrund. Bei den
notify´s funktionierts ja auch ? Habt Ihr ne Idee ??
P.S.: on-for-timer funzt bei den Funksteckdosen nicht
Wozu das sleep, welches 3x den gleichen Aktor schaltet?
Das on-for-timer ist auch überflüssig.
Sobald in dem DOIF die Differenz der 2 TaupunktE 2° oder weniger beträgt, schaltet es den Lüfter aus.
Eine fixe Laufzeit dürfte das kaum so schön hinbekommen :)
Hallo Rince, 3 x der gleiche Actor bezieht sich auf die Funksteckdosen, da wird durchaus mal ein Befehl verschluckt oder kommt an der Funksteckdose nicht an. egal. Aber das sleep brauch ich trotzdem, da ich nicht dauernd den Luftentfeuchter laufen lassen will. Er soll ca. mal eine Stunde laufen, und dann .....sehen wir erst mal weiter.....
Ok, on-for-timer geht nicht, weil dein selbst definiertes "on" das nicht kennt.
Einen Watchdog drauf los zu lassen ist nicht schlau (der währe dafür da), da nämlich das DOIF beim nächsten Event wieder zuschlagen würde...
Wirf doch bite mal einen Blick auf die deutsche commandref vom DOIF. Das kann man nämlich auch so schon dazu bringen, nur zu bestimmten Zeiten zu starten, oder innerhalb von Intervallen. Ich hab es blos net im Kopf wie genau...
gibt es ein Weg on-for-timer doch zu benutzen ????
wenn du einen readingsProxy mit on und off verwendest bekommst du on-for-timer automatisch dazu.
gruss
andre
Hallo Justme1968 ....wenn du mir erklärst (bin Laie bzw. Try and Error-Experte) wie das mit dem ReadingProxy geht ? Wäre Dir sehr dankbar
zum beispiel so: http://www.fhemwiki.de/wiki/ReadingsProxy#setExtensions_f.C3.BCr_Ger.C3.A4te_implementieren (http://www.fhemwiki.de/wiki/ReadingsProxy#setExtensions_f.C3.BCr_Ger.C3.A4te_implementieren)
Hallo Justme1968, dank dir für den Hinweis. ( was es nicht alles gibt). Wieder mal mit viel "try and Error" ans Ziel gekommen, sieht jetzt so aus :
define TEST readingsProxy SteckdoseC
attr TEST setList on off
attr TEST valueFn {$LASTCMD}
define dew_Keller_check DOIF ([KellerInnen.DHT22:fan] eq "off" and [KellerInnen.DHT22:humidity] > 80) (set TEST on-for-timer 20)
attr dew_Keller_check cmdpause 9000
attr dew_Keller_check do always
Bin mir noch nicht sicher, ob die cmdpause funzt.....
Code weiß ich nicht, aber die Logik mit Feuchte >80 ist nicht gut.
Einfach bei >80 zu lüften wird dir an einem schwül-warmen Nachmittag zuverlässig mehr Luftfeuchte in den Keller holen. Daher nicht auf die Luftfeuchte allein im Keller achten!
([gz_TF_TEMPERATUR:dewpoint]-[Aussenthermometer:dewpoint]) <= 2)
Ist besser. Obgleich nicht perfekt! (Stellt nur den Sommer gut dar, bei niedrigen Außentemperaturen sorgt es für Dauerlüftung. Besser wäre noch, es nur bei einer relativen Luftfeuchte innen von >60% anzuwerfen.)
Somit wird immer dann gelüftet, wenn unterm Strich auch wirklich nach dem Lüften die relative Luftfeuchte im Keller kleiner ist als vorher.
Hallo Rince
es geht ja um den Entlüfter, d.h. eine Maschine(Gerät) das wenn
1. Fenster geschlossen ist und
2. die Luftfeuchtigkeit zu hoch ist .....erst dann angeschmissen werden soll.
Zu 1. ist das Kellerfenster zu , bedeutet das, das der Taupunkt Aussen < 2 zum Taupunkt Innen liegt. Dann soll Fenster geschlossen sein und bleiben, da dann ein Luftaustausch mit Aussen nichts mehr bringt. Erst dann , und zwar nur dann, soll der Entlüfter mit seinen 400 Watt arbeiten (1h an ...2h warten..neu messen) , um der Luft die Feuchtigkeit zu entziehen. Irgendwie muss ich ja dann die Feuchtigkeit wegbekommen. Dazu gibt es noch den letzten Teil meiner Config, wo ich aber noch auf den Schwimmerkontakt warte, der mir anzeigt, Luftentfeuchter-Behälter voll .
Das Einzige, was ich noch nicht zu Ende gedacht habe (Danke für den Hinweis) ist, wie ich mit meiner Regelung bei Minus-Temperaturen umgehe.
ZitatEntlüfter
Ahhhh, ein Entfeuchter. Jetzt. Das macht Sinn. Meine hatte ich in der (unbenutzten) Duschwanne stehen. Da konnten die laufen solange sie lustig waren. Allerdings sollte man dann mal die Gegenrechnung aufmachen, ob ein leichtes Aufheizen nicht billiger käme...