Guten Abend,
ich komme einfach nicht weiter, vermutlich liegt es am Verständnis.
Ich hab ein ESP8266-01 mit nem Temp Sensor dran, der funktioniert auch wunderbar, auch in FHEM, alles super.
Dann habe ich mir rausgesucht, wie man ein Output, also z.B. LED zum Testen schalten kann, klappt auch.
Aber dann möchte ich gerne für unsere Bewässerung im Garten unter den Buttons für Bewässerung "an" und "aus" auch "15 Minuten" Knöpfe hin machen.
Die also die alte Funktion "set Bewässerung on-for-timer 900" durchführen.
Aber das bekomme ich nicht gebacken. Ich hab schon mit eventMaps rumgehampelt und andere Sachen probiert, aber es passiert nichts.
Ich weiß auch gar nicht, ob man das schalten mit diesen Hilfs-Dummys machen muss, oder ob man die nur anlegt für nen schönen Knopf?!
Vielleicht kann mir ja jemand ein bisschen helfen...
## TEST ESP ##
define ESPEasy_esp_holger2_temp_dsb ESPEasy 192.168.178.104 80 espBridge esp_holger2_temp_dsb
attr ESPEasy_esp_holger2_temp_dsb IODev espBridge
attr ESPEasy_esp_holger2_temp_dsb Interval 300
attr ESPEasy_esp_holger2_temp_dsb group ESPEasy Device
attr ESPEasy_esp_holger2_temp_dsb presenceCheck 1
attr ESPEasy_esp_holger2_temp_dsb readingSwitchText 1
attr ESPEasy_esp_holger2_temp_dsb room ESPEasy
attr ESPEasy_esp_holger2_temp_dsb setState 3
define LED_Schalter dummy
attr LED_Schalter devStateIcon on:ios-on-green off:ios-off
attr LED_Schalter room Gartenleuchten
attr LED_Schalter setList on off
attr LED_Schalter webCmd on:off
define LED_AN notify LED_Schalter:on set ESPEasy_esp_holger2_temp_dsb gpio 0 1
define LED_AUS notify LED_Schalter:off set ESPEasy_esp_holger2_temp_dsb gpio 0 0
define LED_Schalter_timer dummy
attr LED_Schalter_timer devStateIcon on:ios-on-green off:ios-off
attr LED_Schalter_timer eventMap /longpulse 0 on:on-for-timer/longpulse 0 off:off-for-timer/gpio 0 on:on/gpio 0 off:off/gpio 0 gpio:off/gpio 0 output:off/
attr LED_Schalter_timer room Gartenleuchten
attr LED_Schalter_timer setList on off
attr LED_Schalter_timer webCmd on-for-timer 15:off
define LED_AN_timer notify LED_Schalter_timer:on set ESPEasy_esp_holger2_temp_dsb gpio 0 1
define LED_AUS_timer notify LED_Schalter_timer:off set ESPEasy_esp_holger2_temp_dsb gpio 0 0
Im oberen Teil wurde die ESPBridge definiert, von FHEM selbst, durch den Sensor (DSB18b20).
Dann hab ich so einen Schalter angelegt und dadrunter Hilfs-Dummys gepackt mit den Funktionen. -> Funktioniert auch.
Und dadrunter ist dann mein Versuch, irgendwie zum Testen die LED die an GPIO 0 ist, mal für 15 Sekunden zum Leuchten zu bringen.
Vielleicht geht das auch übersichtlicher mit weniger Code?!
LG
Weiß nicht ob es dir hilft hatte anfangs auch Dummys zum schalten jetzt sieht es dank eventMap und StateSyle so aus..
Danke für die Antwort.
Wenn ich die Dummys weglasse, habe ich auch die Buttons, aber beim Drücken passiert nichts.
Mir ist nicht ganz klar, wie ich das on und off dann mit einer Funktion versehen kann.
Ich hab einen älteren Thread gefunden, der im Prinzip auch das macht, was ich möchte:
https://forum.fhem.de/index.php?topic=64665.0 (https://forum.fhem.de/index.php?topic=64665.0)
Jedoch läuft es da auch auf eine spezielle eventMap hinaus.
Hi,
also vielleicht nicht elegant aber pragmatisch: Du gibst ohne die ganzen Eventmap deinem Dummy einen dritten "Knopf" z.B. timer.
Du definierst ein notify mit trigger auf dummy:timer und machst dort ein set <> on;sleep 900;set <> off.
Gruß Otto
define LED_Schalter_timer dummy
attr LED_Schalter_timer devStateIcon on:ios-on-green off:ios-off
attr LED_Schalter_timer room Gartenleuchten
attr LED_Schalter_timer setList on off
attr LED_Schalter_timer webCmd on:off
define LED_AN_timer notify LED_Schalter_timer:on set LED_Schalter on;sleep 3;set LED_Schalter off
define LED_AUS_timer notify LED_Schalter_timer:off set LED_Schalter off
Hab's damit probiert, aber ausser, dass die LED angeht, passiert dann nichts mehr. Ich weiß auch nicht, in wieweit es sinnvoll ist, den Sleep-Befehl zu benutzen?! In der Regel hält der doch das ganze Main-Programm auf, also die FHEM Software.
Wieso sollte sleep irgendetwas blockieren? Das stimmt so nicht, nicht wenn er zwischen FHEM Befehlen eingesetzt wird. Zitat commandref
ZitatBemerkung: falls sleep von keinem Befehl gefolgt wird, dann wird FHEM blockiert. Das ist unerwünscht, und im FHEM-Log wird eine Warnung protokolliert.
Dein define ist falsch, weil Du ; im define doppelt schreiben musst (steht dann einmal im DEF).
Ich würde ändern:
attr LED_Schalter_timer setList on off timer
attr LED_Schalter_timer webCmd on:off:timer
define LED_AN_timer notify LED_Schalter_timer:timer set LED_Schalter on;;sleep 3;;set LED_Schalter off
Gruß Otto
Erstmal vielen Dank, es klappt jetzt wie gewollt :)
define LED_Schalter_timer dummy
attr LED_Schalter_timer devStateIcon on:ios-on-green off:ios-off timer:time-timer
attr LED_Schalter_timer room Gartenleuchten
attr LED_Schalter_timer setList on off timer
attr LED_Schalter_timer webCmd on:off:timer
define LED_AN_timer notify LED_Schalter_timer:on set LED_Schalter on
define LED_AUS_timer notify LED_Schalter_timer:off set LED_Schalter off
define LED_TIMER_timer notify LED_Schalter_timer:timer set LED_Schalter on;;sleep 3;;set LED_Schalter off
Jedoch gefällt mir die Aufmachung noch nicht so.
Ich hab jetzt daraus einen 3er Schalter gemacht, also on, off und timer.
Leider zeigt er die Uhr nie an, wenn man auf Timer klickt. On und Off zeigt er jedoch richtig an.
LG
Edit: Ich habe den Fehler gefunden: Es lag daran, dass das Icon nicht "timer-timer", sondern "time_timer" heißt :)
Bleibt aber noch die Frage, ob die Lösung mit dem Sleep so OK ist? Auch wenn ich mal ein Sleep 3600 mache.
Erstmal hätte ich noch ein notify weniger 8)
define LED_AnAus_timer notify LED_Schalter_timer:(on|off) set LED_Schalter $EVENT
Was zeigt er anstatt der Uhr? Hat er das icon einfach nicht? Versuch mal timer:clock
Warum vertraust Du dem sleep nicht? Oder traust Du mir nicht? Oder der commandref nicht?
Gruß Otto
Hallo Otto,
nein, ich traue Dir schon und dem commandref auch. Höchsten mir nicht :)
Vielen Dank für Deine Hilfe!
Es klappt jetzt so wie gewollt. Ich habe den oberen Dummy noch versteckt und nur den einen Tripple-Schalter stehen gelassen.
Bei An und Aus ist der Schalter jetzt wie gewollt, und beim Timer steht dann ein Uhr-Symbol da.
Was mich noch stört bei dieser Lösung ist, dass wenn der Timer abgelaufen ist, die Uhr als Symbol stehen bleibt. Und nicht wieder auf das AUS-Icon geändert wird, weil eben die erste Hilfsvariable Aus ist, aber mein Knopf noch auf Status Timer steht.
## TEST ESP ##
define ESPEasy_esp_holger2_temp_dsb ESPEasy 192.168.178.104 80 espBridge esp_holger2_temp_dsb
attr ESPEasy_esp_holger2_temp_dsb IODev espBridge
attr ESPEasy_esp_holger2_temp_dsb Interval 300
attr ESPEasy_esp_holger2_temp_dsb group ESPEasy Device
attr ESPEasy_esp_holger2_temp_dsb presenceCheck 1
attr ESPEasy_esp_holger2_temp_dsb readingSwitchText 1
attr ESPEasy_esp_holger2_temp_dsb room ESPEasy
attr ESPEasy_esp_holger2_temp_dsb setState 3
define LED_Schalter dummy
attr LED_Schalter devStateIcon An:ios-on-green Aus:ios-off
attr LED_Schalter setList An Aus
attr LED_Schalter webCmd An:Aus
define LED_AN notify LED_Schalter:An set ESPEasy_esp_holger2_temp_dsb gpio 0 1
define LED_AUS notify LED_Schalter:Aus set ESPEasy_esp_holger2_temp_dsb gpio 0 0
define LED_Schalter_timer dummy
attr LED_Schalter_timer alias LED
attr LED_Schalter_timer devStateIcon An:ios-on-green Aus:ios-off 15-min-Timer:time_timer
attr LED_Schalter_timer group Bewässerungen
attr LED_Schalter_timer room Gartenleuchten
attr LED_Schalter_timer setList An Aus 15-min-Timer
attr LED_Schalter_timer webCmd An:Aus:15-min-Timer
define LED_AN_timer notify LED_Schalter_timer:An set LED_Schalter An
define LED_AUS_timer notify LED_Schalter_timer:Aus set LED_Schalter Aus
define LED_TIMER_timer notify LED_Schalter_timer:15-min-Timer set LED_Schalter An;;sleep 3;;set LED_Schalter Aus
Mein notify gefällt Dir nicht?
Du kannst am Ende des Timer notify doch einfach den dummy auf off setzen. Das notify schaltet dann die LED aus.
define LED_TIMER_timer notify LED_Schalter_timer:15-min-Timer set LED_Schalter An;;sleep 3;;set LED_Schalter_timer Aus
Gruß Otto
Doch, Dein notify gefällt mir, hatte es eben getestet, da hat es aber nicht funktioniert. Vermutlich mein Fehler, aber hab's jetzt erstmal so gelassen. Bei meinen Intertechno-Geräten verwende ich das universal notify auch und da funktioniert es auch problemlos.
Jetzt ist wirklich alles so, wie ich es wollte :)
zum Abschluss nochmal der gesamte Code:
## LED im Gartenhaus
define LED_Schalter dummy
attr LED_Schalter devStateIcon An:ios-on-green Aus:ios-off
attr LED_Schalter setList An Aus
attr LED_Schalter webCmd An:Aus
define LED_AN notify LED_Schalter:An set ESPEasy_GW gpio 15 1
define LED_AUS notify LED_Schalter:Aus set ESPEasy_GW gpio 15 0
define LED_Schalter_timer dummy
attr LED_Schalter_timer alias LED
attr LED_Schalter_timer devStateIcon An:ios-on-green Aus:ios-off 1-min-Timer:time_timer
attr LED_Schalter_timer group Gartenhaus
attr LED_Schalter_timer icon light_led
attr LED_Schalter_timer room Garten
attr LED_Schalter_timer setList An Aus 1-min-Timer
attr LED_Schalter_timer webCmd An:Aus:1-min-Timer
define LED_AN_timer notify LED_Schalter_timer:An set LED_Schalter An
define LED_AUS_timer notify LED_Schalter_timer:Aus set LED_Schalter Aus
define LED_TIMER_timer notify LED_Schalter_timer:1-min-Timer set LED_Schalter An;;sleep 3;;set LED_Schalter_timer Aus
Vielen Dank nochmal für die Hilfe.
PS: Wie kann ich das Thema auf "gelöst" stellen, dass andere es auch zur Hilfe benutzen können?
Naja Du müsstest define LED_AnAus_timer notify LED_Schalter_timer:(An|Aus) set LED_Schalter $EVENT
Du hast ja on/offf gegen An Aus getauscht.
gelöst schreibst Du einfach in deinen Thread Titel davor
Gruß Otto