[gelöst] Frage zur Kombination von DOIF, Mailversand und variabler Mailtext

Begonnen von josburg, 20 März 2016, 22:13:10

Vorheriges Thema - Nächstes Thema

josburg

Hallo,

ich habe einen Aktor "SCHALTER_ZISTERNE", mit welchem man die Zisternenpumpe ein- und ausschalten kann.
Die Zisternenpumpe verwende ich zur automatisierten Bewässerung des Gartens.
Bisher habe ich die Zisternenpumpe zu einer definierten Uhrzeit eingeschaltet und automatisiert wieder abgeschaltet.

Die Logik habe ich etwas erweitern, z.B. soll die Zisternenpumpe nur bei folgender Bedingung einschalten:
- zwischen 21:00 und 21:30 Uhr
- wenn die Außentemp. > 13 Grad ist
- wenn die Windgeschwindigkeit < 4.0 m/s ist
- etc

Soweit funktioniert das alles mit dem u.s. Code auch.

define TESTSCHALTER_SteckdoseZisterne DOIF ([21:00-21:30] and [SENSOR_HUETTE:TEMP] > 13.0 and [SENSOR_WINDGESCHWINDIGKEIT:WINDGESCHWINDIGKEIT] < 4.0 and  [SENSOR_WINDGESCHWINDIGKEIT:BÖE] < 6.0) (set SCHALTER_ZISTERNE on-for-timer 30) DOELSE (set SCHALTER_ZISTERNE off) ({DebianMail('XXXXXX@gmx.de','Keine Bewaesserung erfolgt','Keine Bewaesserung erfolgt');; })


Jetzt aber mein Problem:
Im DOELSE habe ich den Mailversand definiert (funktioniert wie beschrieben auch).
Gerne möchte ich in der Mail die Werte der Außentemperatur, Windgeschwindigkeit und Windböe anzeigen, so dass ich weiß, warum nicht gewässert wurde.
Also hätte ich z.B. gerne folgenden Mailtext:
"Keine Bewaesserung erfolgt, da Außentemperatur 12 Grad, Windgeschwindigkeit 5 m/s und Windböe 7 m/s"

Wie kann ich das realisieren?

Vielen Dank für Eure Hilfe.

Viele Grüße
Jens



Damian

...({DebianMail('XXXXXX@gmx.de','Keine Bewaesserung erfolgt','Keine Bewaesserung erfolgt, da Außentemperatur [SENSOR_HUETTE:TEMP] Grad, Windgeschwindigkeit [SENSOR_WINDGESCHWINDIGKEIT:WINDGESCHWINDIGKEIT] m/s und Windböe [SENSOR_WINDGESCHWINDIGKEIT:BÖE] m/s"
') })


Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

josburg

Hallo Damian,

super, vielen Dank für die Hilfe!
So funktioniert es:

define TESTSCHALTER_SteckdoseZisterne DOIF ([21:00-23:30] and [SENSOR_HUETTE:TEMP] > 13.0 and [SENSOR_WINDGESCHWINDIGKEIT:WINDGESCHWINDIGKEIT] < 4.0 and [SENSOR_WINDGESCHWINDIGKEIT:BÖE] < 6.0) (set SCHALTER_STECKDOSE_ZISTERNE on-for-timer 30) DOELSE (set SCHALTER_STECKDOSE_ZISTERNE off) ({DebianMail('XXXXXXX@gmx.de','Keine Bewaesserung erfolgt','Keine Bewaesserung erfolgt, da Außentemperatur [SENSOR_HUETTE:TEMP] Grad, Windgeschwindigkeit [SENSOR_WINDGESCHWINDIGKEIT:WINDGESCHWINDIGKEIT] m/s und Windböe [SENSOR_WINDGESCHWINDIGKEIT:BÖE] m/s.');; })


Somit habe ich nun folgendes umgesetzt:
Wenn es 21 Uhr ist
und die Temperatur > 13 Grad
und die Windgeschwindigkeit < 4 m/s (14,4 km/h)
und die Windböe < 6 m/s (21,6 km/h)

Im DOIF habe ich ja folgende Zeitspanne eingegeben:
[21:00-23:30]

Um 21 Uhr wird das DOIF ausgeführt.
Ich hätte gedacht, dass dieses jedoch zwischen 21:00 - 23:30 Uhr ausgeführt wird und wenn die Bedingung "true" wird (z.B. Wind lässt nach), dass dann die Bewässerung beginnt.
Anscheinend verstehe ich das DOIF noch nicht so richtig...?!?

Dann gibt es ja noch das Attribut "do always", aber hierbei wird wohl die von mir vorgegebene Zeitspanne auch nicht berücksichtigt.

Was bewirkt die von mir angegebene Zeitspanne?
Was muss ich tun, um meine Idee zu realisieren: Die Bewässerung soll zw. 21:00 - 23:30 Uhr einschalten, sobald die Bedingungen erfüllt sind?

Vielen Dank für Eure Hilfe!

Grüße
Jens

Damian

Zitat von: josburg am 21 März 2016, 21:01:08
Hallo Damian,

super, vielen Dank für die Hilfe!
So funktioniert es:

define TESTSCHALTER_SteckdoseZisterne DOIF ([21:00-23:30] and [SENSOR_HUETTE:TEMP] > 13.0 and [SENSOR_WINDGESCHWINDIGKEIT:WINDGESCHWINDIGKEIT] < 4.0 and [SENSOR_WINDGESCHWINDIGKEIT:BÖE] < 6.0) (set SCHALTER_STECKDOSE_ZISTERNE on-for-timer 30) DOELSE (set SCHALTER_STECKDOSE_ZISTERNE off) ({DebianMail('XXXXXXX@gmx.de','Keine Bewaesserung erfolgt','Keine Bewaesserung erfolgt, da Außentemperatur [SENSOR_HUETTE:TEMP] Grad, Windgeschwindigkeit [SENSOR_WINDGESCHWINDIGKEIT:WINDGESCHWINDIGKEIT] m/s und Windböe [SENSOR_WINDGESCHWINDIGKEIT:BÖE] m/s.');; })


Somit habe ich nun folgendes umgesetzt:
Wenn es 21 Uhr ist
und die Temperatur > 13 Grad
und die Windgeschwindigkeit < 4 m/s (14,4 km/h)
und die Windböe < 6 m/s (21,6 km/h)

Im DOIF habe ich ja folgende Zeitspanne eingegeben:
[21:00-23:30]

Um 21 Uhr wird das DOIF ausgeführt.
Ich hätte gedacht, dass dieses jedoch zwischen 21:00 - 23:30 Uhr ausgeführt wird und wenn die Bedingung "true" wird (z.B. Wind lässt nach), dass dann die Bewässerung beginnt.
Anscheinend verstehe ich das DOIF noch nicht so richtig...?!?

Dann gibt es ja noch das Attribut "do always", aber hierbei wird wohl die von mir vorgegebene Zeitspanne auch nicht berücksichtigt.

Was bewirkt die von mir angegebene Zeitspanne?
Was muss ich tun, um meine Idee zu realisieren: Die Bewässerung soll zw. 21:00 - 23:30 Uhr einschalten, sobald die Bedingungen erfüllt sind?

Vielen Dank für Eure Hilfe!

Grüße
Jens

Offenbar war deine Bedingung um 21:00 Uhr wahr, sonst gäbe es die Mail nicht ;)

Was du meinst ist, dass du um 21:00 Uhr nicht zusätzlich prüfen willst, ob die Bedingung wahr ist, dann musst du den Zeittrigger rausnehmen:

mit [?21:00-23:30]

All das steht hier: http://fhem.de/commandref_DE.html#DOIF_Zeitintervalle_Readings_und_Stati_ohne_Trigger
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

josburg

Hallo,

die Mail wurde ja gerade im DOELSE versendet, da die Temperatur bei nur 6 Grad war (also < 13 Grad).
Falls die Temperatur jetzt aber zwischen 21:00 - 23:30 Uhr über 13 Grad steigen würde, sollte die Bewässerung einschalten.

Ich weiß, das Bsp. ist eher unrealistisch - aber für die Windstärke würde es passen.

Ich möchte also, dass die Bewässerung zwischen 21-23:30 Uhr einschaltet, sobald die Temp > 13 Grad, Wind < 4 m/s und Windböe < 6 m/s sind.

josburg

Zitat von: josburg am 21 März 2016, 21:32:24
Hallo,

die Mail wurde ja gerade im DOELSE versendet, da die Temperatur bei nur 6 Grad war (also < 13 Grad).
Falls die Temperatur jetzt aber zwischen 21:00 - 23:30 Uhr über 13 Grad steigen würde, sollte die Bewässerung einschalten.

Ich weiß, das Bsp. ist eher unrealistisch - aber für die Windstärke würde es passen.

Ich möchte also, dass die Bewässerung zwischen 21-23:30 Uhr einschaltet, sobald die Temp > 13 Grad, Wind < 4 m/s und Windböe < 6 m/s sind.

Hallo,

kann mir evtl. doch noch jemand weiterhelfen, wie ich das beschriebene Ziel mit DOIF löse?

Vielen Dank für Eure Mühe.

Viele Grüße
Jens

josburg

Hallo,

ich versuche nochmal, meine Frage besser zu formulieren, da ich einfach nicht weiter komme:

Ich habe mein DOIF-Befehl inhaltlich deutlich vereinfacht, um die Funktionsweise besser zu verstehen:


define TESTSCHALTER DOIF ([09:00-11:00] and [SENSOR_HUETTE:TEMP] > 13.0 ) (set SCHALTER_STECKDOSE_ZISTERNE on-for-timer 30) DOELSE (set SCHALTER_STECKDOSE_ZISTERNE off)


Was möchte ich tun:
Zwischen 9:00 und 11:00 Uhr soll geprüft werden, ob die Temperatur > 13 Grad ist. Wenn ja soll die Steckdose der Zisterne eingeschaltet werden. Wenn zwischen 09:00 und 11:00 Uhr die Temperatur <13 Grad ist, soll die Zisterne nicht eingeschaltet werden.

Wenn ich das Attribut "do always" setze, wird alle 10 Minuten der DOELSE-Zweig ausgelöst, völlig unabhängig von der Uhrzeit.
Wenn ich das Attribut "do always" nicht setze, wird keiner der beiden Befehle (Steckdose an bzw. Steckdose aus) zu keiner Zeit ausgeführt.

Was mache ich falsch?
Irgendwie komme ich nicht drauf.

Vielen Dank nochmal für Eure Unterstützung.

Grüße
Jens

Otto123

Hallo Jens,

das DOIF stimmt aus meiner Sicht. Ich habe etwas fast genauso laufen.
Ich erkenne zwei mögliche Probleme:
Ich würde nicht 13.0 schreiben sondern 13 (Ich teste auf > 20)
Stimmt denn der Sensor? SENSOR_HUETTE:TEMP - das Reading heisst wirklich TEMP großgeschrieben?
Poste doch mal ein list SENSOR_HUETTE

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Damian

Zitat von: josburg am 26 März 2016, 09:41:04
Hallo,

ich versuche nochmal, meine Frage besser zu formulieren, da ich einfach nicht weiter komme:

Ich habe mein DOIF-Befehl inhaltlich deutlich vereinfacht, um die Funktionsweise besser zu verstehen:


define TESTSCHALTER DOIF ([09:00-11:00] and [SENSOR_HUETTE:TEMP] > 13.0 ) (set SCHALTER_STECKDOSE_ZISTERNE on-for-timer 30) DOELSE (set SCHALTER_STECKDOSE_ZISTERNE off)


Was möchte ich tun:
Zwischen 9:00 und 11:00 Uhr soll geprüft werden, ob die Temperatur > 13 Grad ist. Wenn ja soll die Steckdose der Zisterne eingeschaltet werden. Wenn zwischen 09:00 und 11:00 Uhr die Temperatur <13 Grad ist, soll die Zisterne nicht eingeschaltet werden.

Wenn ich das Attribut "do always" setze, wird alle 10 Minuten der DOELSE-Zweig ausgelöst, völlig unabhängig von der Uhrzeit.
Wenn ich das Attribut "do always" nicht setze, wird keiner der beiden Befehle (Steckdose an bzw. Steckdose aus) zu keiner Zeit ausgeführt.

Was mache ich falsch?
Irgendwie komme ich nicht drauf.

Vielen Dank nochmal für Eure Unterstützung.

Grüße
Jens

Denke daran, dass DOIF mit Zuständen arbeitet: Der gleiche Befehl ohne do always wird nicht wiederholt, cmd1 kann nur nach cmd2 kommen und umgekehrt.

Gruß

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

josburg

Hallo,

vielen Dank Otto123, ohne die Nachkommastelle hat es jetzt funktioniert.

Für alle Interessierte hier meine aktuelle Lösung zur Gartenbewässerung, wobei diese hier in Abhängigkeit von der Außentemperatur und den Windverhältnissen erfolgt:


define ENTSCHEIDUNG_GARTENBEWAESSERUNG DOIF ([19:00-19:10] and [SENSOR_HUETTE:TEMP] > 13 and [SENSOR_WINDGESCHWINDIGKEIT:WINDGESCHWINDIGKEIT] < 4 and [SENSOR_WINDGESCHWINDIGKEIT:BÖE] < 6) (set SCHALTER_STECKDOSE_ZISTERNE on-for-timer 30)
DOELSEIF
([19:00-19:10] and [SENSOR_HUETTE:TEMP] < 13) ({DebianMail('XXXXX@gmx.de','Keine Bewaesserung erfolgt','Keine Bewaesserung erfolgt, da Außentemperatur nur [SENSOR_HUETTE:TEMP] Grad und somit < 13 Grad.');; })
DOELSEIF
([19:00-19:10] and [SENSOR_WINDGESCHWINDIGKEIT:WINDGESCHWINDIGKEIT] > 4) ({DebianMail('XXXXX@gmx.de','Keine Bewaesserung erfolgt','Keine Bewaesserung erfolgt, da Windgeschwindigkeit [SENSOR_WINDGESCHWINDIGKEIT:WINDGESCHWINDIGKEIT] m/s und somit > 4 m/s.');; })
DOELSEIF
([19:00-19:10] and [SENSOR_WINDGESCHWINDIGKEIT:BÖE] > 6) ({DebianMail('XXXXX@gmx.de','Keine Bewaesserung erfolgt','Keine Bewaesserung erfolgt, da Wind-Böe [SENSOR_WINDGESCHWINDIGKEIT:BÖE] m/s und somit > 6 m/s.');; })
DOELSE
(set SCHALTER_STECKDOSE_ZISTERNE off)


Die Ausbau-Stufe soll dann noch die Niederschlagsmenge der letzten 12 sowie 24 Stunden berücksichtigen.
Hierfür habe ich diesen Regensensor gekauft: http://www.amazon.de/gp/product/B00XXOTLGO/ref=as_li_tl?ie=UTF8&camp=1638&creative=19454&creativeASIN=B00XXOTLGO&linkCode=as2&tag=jensosburaspu-21
Leider fehlt mir derzeit das Wissen, um die Regenmengen entsprechend zu berechnen... :-(

Viele Grüße
Jens