E-Mail senden bei bestimmter Temperatur?

Begonnen von DatRaspi, 17 Mai 2017, 11:32:47

Vorheriges Thema - Nächstes Thema

Otto123

Hi,

ZitatdisabledAfterTrigger <sekunden>
deaktiviert die Ausführung für <sekunden> nach dem das notify ausgelöst wurde.
Die Doku ist ja eindeutig.

Wenn Du das einmalig willst, bzw. eigentlich bis ein andere Zustand erreicht ist musst Du mehr Bedingungen einbauen:
Abfragen ist die Markise draußen oder drinnen?
Temperatur nicht nur über sondern auch unterschritten?

Das kannst Du alles in eine Perl Logik bauen, Du kannst auch andere Module (DOIF, THRESHOLD,ASC) dafür nehmen, die das vielleicht einfacher abbilden. Je nach dem wie es für Dich angenehmer ist.

Diese Code ist für die DEF nicht für defmod!
{
if ($EVTPART1 >= 42 and ReadingsNum('Markise','pct',0) < 10 )
   {fhem("set Markise pct 10");
     DebianMail('XXX@XXX.XX','Temperaturwarnung','Achtung, die Temperatur hat 42 Grad erreicht!')}
elsif ($EVTPART1 < 42 and ReadingsNum('Markise','pct',99) != 0 )
    {fhem("set Markise pct 0");
      DebianMail('XXX@XXX.XX','Temperaturwarnung','Markise fährt ein!')}
}


Damit die Markise nicht ständig raus und reinfährt kannst Du das beliebig  ändern / kombinieren: disabledAfterTrigger 300 oder $EVTPART1 < 38 anstatt 42

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

MandelHL

Danke, Otto.

Das heißt, ich öffne im WI die DEF der Markise, in der zur Zeit nur "336A56" steht und ersetze das durch


HM_336A56 {if ($EVTPART1 >= 42 and ReadingsNum('Markise','pct',0) < 10 )
   {fhem("set Markise pct 10");
     DebianMail('XXX@XXX.XX','Hitzewarnung - Markise fährt aus','Achtung, die Temperatur hat 42 Grad erreicht! Die Markise fährt aus.')}
elsif ($EVTPART1 <= 35 and ReadingsNum('Markise','pct',99) != 0 )
    {fhem("set Markise pct 0");
      DebianMail('XXX@XXX.XX','Entwarnung - Markise fährt ein','Die Temperatur ist wieder unter 35 Grad. Die Markise fährt wieder ein!')}
}


Wenn ich das so mache, bekomme ich den Hinweis "wrong syntax: define <name> CUL_HM 6-digit-hex-code [Raw Message]".

So ähnlich ist es aber auch in der DEF der Temperatur eingetragen:
HM_70A1CA:T:.* {if ($EVTPART1 >= 42 ){DebianMail('XXX@XXX.XX','Temperaturwarnung','Achtung, die Temperatur hat 42 Grad erreicht!')}}

Ich weiß, dass wahrscheinlich absolute Anfängerfehler sind. Aber deshalb poste ich das ja auch in diesem Bereich.

Grüße
Mandel

Otto123

Nein, dein Markisen Device darfst Du nicht verändern!
Das ist der Ersatz der DEF die Du schon in deinem notify hast. Als aus dem {....}  wird das in meinem Post.

In der DEF deshalb weil sonst die Zeilenumbrüche und die ; nicht stimmen.
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

MandelHL

#48
Danke, das hat super geklappt.

ZitatDiese Code ist für die DEF nicht für defmod!
Obwohl ich den Code in die DEF geschrieben habe, steht in der Raw Definition trotzdem ,,defmode".
Ist das denn trotzdem richtig oder muss ich daraus jetzt ,,def" machen?

Es funktioniert ja trotzdem so:
defmod HM_70A1CA_notify_1 notify HM_70A1CA {if ($EVTPART1 >= 40 and ReadingsNum('Markise','pct',0) < 10 )\
   {fhem("set Markise pct 10");;\
     DebianMail('XXX@XXX.XX','Hitzewarnung - Markise fährt aus','Achtung, die Temperatur hat 42 Grad erreicht! Die Markise fährt aus.')}\
elsif ($EVTPART1 <= 35 and ReadingsNum('Markise','pct',99) != 0 )\
    {fhem("set Markise pct 0");;\
      DebianMail('XXX@XXX.XX','Entwarnung - Markise fährt ein','Die Temperatur ist wieder unter 35 Grad. Die Markise fährt wieder ein!')}\
}
attr HM_70A1CA_notify_1 alias Temperaturwarnung
attr HM_70A1CA_notify_1 disabledAfterTrigger 3600
attr HM_70A1CA_notify_1 room Außentemperatur

setstate HM_70A1CA_notify_1 2021-04-26 23:07:43
setstate HM_70A1CA_notify_1 2021-04-26 18:00:42 state active



Aufgrund dieser Zeile
ReadingsNum('Markise','pct',0) < 10 )\
gehe ich davon aus, dass wenn ich die Markise komplett ausfahre, sie bei einer Temperatur unter 35 Grad nicht wieder einfährt. Das liegt daran, dass die Ausgangsposition nicht <10 war.
Sehe ich das richtig?

Und wenn ich mich entscheiden würde, eine weitere E-Mail bei Minusgraden verschicken zu lassen, müsste ich das ganze noch einmal umschreiben, weil es mit ,,elsif" nicht geht. Oder?

Vielen Dank noch mal, dass das Dank Deiner Hilfe so gut klappt.

Grüße, Mandel

Otto123

#49
ZitatObwohl ich den Code in die DEF geschrieben habe, steht in der Raw Definition trotzdem ,,defmode".
Ist das denn trotzdem richtig oder muss ich daraus jetzt ,,def" machen?
Schau Dir doch mal die Unterschiede des Codes an im DEF Editor und in der Raw Definition. (Semikolon Zeilenenden)
Das meinte ich :) - ist immer etwas schwierig das im Redefluss einzuwerfen. Man muss den Code anders formatieren, je nach dem ob man ihn im DEF Editor oder in der Raw Definition eingibt. Das ganze ist als Einsteiger auch schwer zu verstehen, hat aber Entwicklungshistorische Gründe. Im DEF Editor ist es normaler Perl Syntax wie in jedem Editor, in der Raw Definition steht es so wie es in der Config steht, erweitert um Strukturelemente damit FHEM den Code verarbeiten kann.

Mit Deiner weiteren Annahme hast Du nicht Recht.
elsif ($EVTPART1 <= 35 and ReadingsNum('Markise','pct',99) != 0 )
Wenn die temp kleinergleich 35 ist und die Markise nicht eingefahren ist (pct ist nicht 0) dann fahre sie ein. Wo sie vorher stand ist da nicht hinterlegt.
Der erste Teil:
if ($EVTPART1 >= 40 and ReadingsNum('Markise','pct',0) < 10 )
Wenn die Temp größergleich 40 ist und die Markise nicht wenigsten auf pct 10 steht dann fahre sie auf pct 10
Mit dem "Längenvergleich" wird ja primär sichergestellt, das alles nur einmal passiert. Der Zustand der Markise wird dazu abgefragt (genaugenommen nur der Zustand des Aktors).

ZitatUnd wenn ich mich entscheiden würde, eine weitere E-Mail bei Minusgraden verschicken zu lassen, müsste ich das ganze noch einmal umschreiben, weil es mit ,,elsif" nicht geht. Oder?
Warum nicht? Einfach ein weiteres elsif dazu? Nur dann brauchst ein Kriterium damit die Email nicht fortlaufend kommt. Wenn die Markise bei 0 steht springt ja der zweite Zweig nicht an, also kann der dritte bei < 0 zuschlagen.
Es ist die Frage ob man die Steuerung der Markise und die Meldung zu bestimmten Temperaturen nicht lieber getrennt abhandelt.
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

MandelHL

Vielen Dank, Otto.

Dann kann ich mein Notify ja so stehen lassen.

Wenn ich das jetzt richtig sehe, dann habe ich Stand jetzt zwei Voraussetzungen, die zum Einfahren der Markise führen:
1. Die Temperatur sinkt wieder auf 35 Grad. Und
2. Der Disabledtrigger sorgt mit der "3600" dafür, dass das Einfahren frühestens nach einer Stunde erfolgt.

Ich gehe davon aus, dass die "3600" Vorrang hat, was bedeutet, wenn die Temperatur von 35 Grad schon nach 10 Minuten erreicht ist, fährt die Markise trotzdem erst nach einer Stunde ein.
Wenn das richtig ist, muss ich mal sehen, ob ich das so lasse oder den "disabledrigger" rausnehme.

Der jetzige Grund der Programmierung ist, dass ich zwei Lautsprecher habe, die direkt unter dem Glasdach hängen. Die möchte ich vor der Sonne bzw. den hohen Temperaturen zu schützen, indem die Markise darüber fährt.

Leider fällt mir nichts ein, wie ich die Markise ausfahren kann, ohne dass sie gleich wieder einfährt, weil z.B. nur die Sonne blendet, aber die Temperatur nicht so hoch ist.
Es sei denn ich baue einen Button, mit dem ich eine Deaktivierung programmiere und nur diesen Knopf drücke.

Wenn jemand eine bessere Idee hat ....

Danke für alles, viele Grüße
Mandel

Otto123

Hi Mandel,

mit einem Temperatur Differenz sensor HM-WDS30-OT2-SM kannst Du simpel einen Sonnensensor bauen. Einen Sensor mit Alufolie umwickeln, beide zusammen in die Sonne hängen, Diff > 3 grad -> Sonne scheint.

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

MandelHL

#52
Super Idee, aber eher für einen anderen Fall.

In diesem Fall geht es nur darum, nicht mehr als 40 Grad auf die Lautsprecher einwirken zu lassen. Dann muss die Markise einen Meter raus. Darunter kann sie wieder rein, es sei denn, dass ich diese aus anderen Gründen nutzen und ausfahren möchte.
Hier sehe ich hier noch die größte Herausforderung.

Obwohl es vielleicht sogar mit Deinem vorgeschlagenen Sensor klappen kann, weil die Temperatur wahrscheinlich extrem auseinander liegen würde. Ich probiere das mal aus.

Danke für den Tipp und beste Grüße
Mandel

MandelHL

Hallo,

ich habe gerade Probleme mit meiner Programmierung beim Ausfahren der Markise bei einer bestimmten Temperatur. Ich meine, dass das schon mal ging.
Aber jetzt fährt die Markise bei 40 und mehr Grad nicht um 10 % aus und schickt mir auch keine E-Mail.

Wenn ich sie dann aber manuell um 10 % ausfahre, fährt sie bei bei 35 Grad und weniger wieder ein. Die E-Mail erhalte ich dann auch.

Kann mir jemand helfen und mitteilenden, woran das liegt?

defmod HM_70A1CA_notify_1 notify HM_70A1CA {if ($EVTPART1 >= 40 and ReadingsNum('Markise','pct',0) < 10 )\
   {fhem("set Markise pct 10");;\
     DebianMail('XXX@XXX.eu','Hitzewarnung - Markise fährt aus','Achtung, die Temperatur hat 42 Grad erreicht! Die Markise fährt aus.')}\
elsif ($EVTPART1 <= 35 and ReadingsNum('Markise','pct',99) != 0 )\
    {fhem("set Markise pct 0");;\
      DebianMail('XXX@XXX.eu','Entwarnung - Markise fährt ein','Die Temperatur ist wieder unter 35 Grad. Die Markise fährt wieder ein!')}\
}
attr HM_70A1CA_notify_1 alias Temperaturwarnung
attr HM_70A1CA_notify_1 disabledAfterTrigger 3600
attr HM_70A1CA_notify_1 room Außentemperatur

setstate HM_70A1CA_notify_1 2021-05-16 08:40:19
setstate HM_70A1CA_notify_1 2021-05-10 11:22:24 state active



Wenn noch etwas an Infos fehlt, schicke ich das gerne noch hinterher.

Danke und viele Grüße
Mandel

Otto123

Moin,

ich weiß nicht warum, aber Du hast mal irgendwann im Laufe dieser Diskussion den Trigger einfach umgebaut. Du bist weg vom: Trigger auf temperature bzw: T: und hast gewechselt zum: trigger auf alles!? Das ist für Homematic Geräte sozusagen ein no go!
Also bau das wieder so um wie ich das schon mal empfohlen hatte:
HM_70A1CA:temperature:.*

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

MandelHL

#55
Danke, Otto.

Dann sollte ich das so jetzt richtig gemacht haben, oder?

defmod HM_70A1CA_notify_1 notify HM_70A1CA:temperature:.* {if ($EVTPART1 >= 40 and ReadingsNum('Markise','pct',0) < 10 )\
   {fhem("set Markise pct 10");;\
     DebianMail('XXX@ XX.eu','Hitzewarnung - Markise fährt aus','Achtung, die Temperatur hat 42 Grad erreicht! Die Markise fährt aus.')}\
elsif ($EVTPART1 <= 35 and ReadingsNum('Markise','pct',99) != 0 )\
    {fhem("set Markise pct 0");;\
      DebianMail('XXX@XXX.eu','Entwarnung - Markise fährt ein','Die Temperatur ist wieder unter 35 Grad. Die Markise fährt wieder ein!')}\
}
attr HM_70A1CA_notify_1 alias Temperaturwarnung
attr HM_70A1CA_notify_1 disabledAfterTrigger 3600
attr HM_70A1CA_notify_1 room Außentemperatur

setstate HM_70A1CA_notify_1 2021-05-16 13:46:32
setstate HM_70A1CA_notify_1 2021-05-10 11:22:24 state active



Kannst Du das bitte noch einmal bestätigen?

Danke und schönen Sonntag
MandelHL

Otto123

Hi,

sieht so aus: kontrolliere doch solche Dinge immer im Evenmonitor! Da sieht man doch genau was passiert. Deinen trigger als Filter:
HM_70A1CA:temperature:.*
Er soll nur auf Temperaturen triggern!

im Gegensatz zu HM_70A1CA als Filter (und Eventmonitor auf notifyType gestellt!) da siehst Du auf was er sonst noch triggert und dann immer eine Stunde pause macht! -> disabledAfterTrigger 3600

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

MandelHL

Danke, es funktioniert. Den Trigger habe ich erst einmal rausgenommen.
Mal sehen, wie ich den später setze. Nicht, dass die Markise ständig aus- und einfährt.
Aber so sind die Lautsprecher auf jeden Fall vor der Hitze geschützt.

Das mit dem Eventmonitor habe ich nicht ganz verstanden.
Ich habe
HM_70A1CA:temperature:.*
eingetragen und ,,Match the whole line" gelassen. Aber nichts passiert.
Oder war ich nur zu ungeduldig?

VG
Mandel

Otto123

ZitatDen Trigger habe ich erst einmal rausgenommen.
Was meinst Du damit?
Eventmonitor:
Sorry habe ich nicht extra dazu geschrieben. Entweder notify Type - das musst Du in diesem Fall wählen
Oder match the whole line, dann ist es nicht die (spezielle) Variante deviceName:regExp sondern ein komplettes regExp sowas wie .*temperature.*
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

MandelHL

Sorry, ,,DisabledAfterTrigger 3600" habe ich erst mal gelöscht.