NEWS
Tasmota Script (Beispiel für Gartenbewässerung)
-
Hallo,
ich habe mich gerade ein wenig mit der Scripterstellung (keine Rules!) in Tasmota beschäftigt.
Ich möchte euch hier ein kleines nützliches Script vorstellen. Es ist im Zuge meiner Gartenbewässerung entstanden (noch in Arbeit).HW Setup:
- Wemos D1 mini
- Tastmota 8.3.1.5 (selbstkompiliert: #define USE_SCRIPT)
- Zwei Relais (Ventil + Pumpe)
- Diverse Sensoren (Kap. Bodenfeuchte, 2 DS18B20 Bodentemperatur, BME280, BH1750 Lux)
Problem:
Der Wemos soll Ventil und Pumpe steuern. Ich will mich aber nicht darauf verlassen, das ioBroker das auch wieder ausschaltet!Lösung (meine):
Ich habe ein Script erstellt in Tasmota mit folgenden Funktionen:- Maximale Zeit die das Ventil offen sein darf
- Wenn das Ventil zu geht, soll die Pumpe mit Nachlauf ausschalten
- Wenn WiFi oder MQTT ausfällt, werden Ventil und Pumpe ausgeschaltet
- Noch eine kleine Berechnung der Abs. Luftfeuchte (aus den Beispielen)
>D t:t_MAX_ON=-1 t:t_PUMP_OFF=-1 t:wflt=-1 t:mflt=-1 tmp=0 hum=0 temp=0 valve=0 wifi=0 mqtt=0 MAX_ON=360 ; TODO: Should be changed by MQTT PUMP_OFF=5 ; TODO: Should be changed by MQTT >B tmp=pn[21] ; get gpio pin for valve relais =>print Ventil is on pin %tmp% spin(tmp 1) ; Switch off relais over raw gpio tmp=pn[22] ; get gpio pin for pump relais =>print Pumpe is on pin %tmp% spin(tmp 1) ; Switch off relais over raw gpio >T hum=BME280#Humidity temp=BME280#Temperature >S ; publish abs hum every teleperiod time if mqtts>0 and upsecs%tper==0 then ; calc abs humidity tmp=pow(2.718281828 (17.67*temp)/(temp+243.5)) tmp=(6.112*tmp*hum*18.01534)/((273.15+temp)*8.31447215) ; publish median filtered value ;=>Publish tele/%topic%/SENSOR {"BME280":{"AbsHumidity":%med(0 tmp)%}} endif ; stop ventil after MAX_ON time expired if t_MAX_ON==0 then t_MAX_ON=-1 =>print Close valve (MAX_ON time expired) =>power1 0 endif ; stop pump after valve is closed if t_PUMP_OFF==0 then t_PUMP_OFF=-1 =>print Stop pump after valve is closed =>power2 0 endif if boot==0 then valve=pwr[1] if chg[valve]>0 then if valve>0 then ; Valve open t_MAX_ON=MAX_ON ; start valve MAX_ON timmer t_PUMP_OFF=-1 ; delete pump off timer endif if valve==0 then ; Valve closed t_PUMP_OFF=PUMP_OFF ; Start pump off delay endif endif endif ; Check WiFi connection wifi=wifis if chg[wifi]>0 then if wifi==0 then wflt=10 else wflt=-1 endif endif ; Check MQTT connection mqtt=mqtts if chg[mqtt]>0 then if mqtt==0 then mflt=10 else mflt=-1 endif endif ; switch off relais on comm faults if wflt==0 ; WiFi is disconnected or mflt==0 ; MQTT is disconnected then wflt=-1 mflt=-1 =>print WiFi or MQTT disconnected =>print Switch off relais for safty =>power1 0 =>power2 0 ; Not nessessary because of Pump OFF in 5 sec. endif
Leider ist das Script Modul recht pingelig, was die Formatierung angeht...
Ich will noch die Zeiten über MQTT ändern können, aber ansonsten funktioniert das bei mir gut.Ich freue mich auf Feedback
Gruß
Andreas -
Ok, das war ein Denkanstoß...
Inzwischen habe ich den PulseTime1..x Besfehl entdeckt. Diesen kann man gut über MQTT steuern.
Da ich den Sonoff Adapter benutze, mußte ich noch die DP PulseTime1 und PulseTime2 anlegen. Dann konnte ich die per MQTT setzen.
Das Script ist aber immer noch hilfreich, da ich hier das absolute Limit einer (EIN)Schaltzeit ohne Einfluss auf die PulseTime setzen kann. Außerdem die Sicherheitsabschaltung, falls das WLAN verloren geht.Gruß
Andreas -
Deine Lösung ist echt nicht schlecht, aber für mich wahrscheinlich zu kompliziert. Ich bin das Problem bei meiner Bewässerung etwas anders angegangen. Und zwar hatte ich natürlich auch bedenken das bei der Bewässerung ein Ausschaltbefehl nicht ankommen könnte. Meine Pumpe wird über eine Eltakorelais gesteuert, egal ob iobroker läuft oder nicht nach einer Stunde ist Feierabend.
Noch dazu überprüfe ich mit diesem Skript ob ein Befehl bestätigt wurde oder nicht. Falls nicht bekomme ich sofort ein Telegramm. Das funktioniert wirklich sehr gut. Ich nutze zwar meine Bewässerung erst seit wenigen Monaten, aber bis jetzt ist noch nie ein Befehl nicht angekommen.
https://forum.iobroker.net/topic/32275/ack-state-abfragen-lesen/13