[gelöst] Frostalarm Meldung mit notify

Begonnen von newby, 12 Januar 2016, 16:04:09

Vorheriges Thema - Nächstes Thema

newby

#15
So jetzt aber der Temperatur Log
2016.01.13 14:06:42 1: EMZ_Temp - alarm: 1
2016.01.13 14:06:42 1: Temperatur: 11.5625
2016.01.13 14:07:00 1: Pumpe_Temp - alarm: 0
2016.01.13 14:07:00 1: Temperatur: 10.5
2016.01.13 14:07:07 3: Kind_TH : measured-temp: 18.5
2016.01.13 14:07:36 1: Speicher_Temp - alarm: 0
2016.01.13 14:07:36 1: Temperatur: 9.4375


zu dem DEF
.*:alarm:.* {
my $temp=ReadingsVal($NAME,"temperature",122);
Log(1,"$NAME - $EVENT");
Log(1,"Temperatur: ".$temp);
}


Hatte für die Variable my $temp  im ReadingsVal($_,.... angegeben.
Ich habe keine Ahnung was das $_ bewirkt, aber $NAME ist definitiv zielführend  ;D

Puschel74

#16
In dem Fall hast du ja alles zusammen was du brauchst  ;)

Das
if (($alarm !~ m/0/)
kannst du auch so
if (($alarm != 0)
schreiben.

Ach ja, nochwas wegen dem Loglevel:
Ich hab global verbose bei mir auf 2 und mache die Logeinträge in meinen Codes, wie zu sehen, mit Loglevel 1
Ich mag die "normalen" Statusmeldungen in meinem Logfile nicht.

Edith: Kleiner Tipp noch - mit sprintf (siehe Perl-Wiki) kannst du deine Temperaturwerte runden lassen.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

newby

Leider noch nicht so ganz. :(
Die Temperatur der DHT22 wird mit dem Reading Temperature angegeben, in dem Fall muss ich eine weitere Vaiable erstellen oder kann man die so ähnlich erweitern?
my $temp=ReadingsVal($NAME,"temperature"|"Temperature","122");

So bekomme ich leider auch bei jedem neuen triggern des alarms mit 1 eine neue Mail gesendet.
Das würde ich gerne noch unterbinden.

Die Idee von Ellert
ZitatSendet 1 Mail und dann erst wieder, wenn die Temperatur 3°C über templow liegt und danach templow wieder unterschritten wird.
Finde ich garnicht so unschön.
Wollte das über einen dummy Frostalarm lösen der mit auf Alarm gesetzt wird.


betateilchen

Zitat von: Puschel74 am 13 Januar 2016, 14:58:42
Edith: Kleiner Tipp noch - mit sprintf (siehe Perl-Wiki) kannst du deine Temperaturwerte runden lassen.

Noch ein kleiner Tipp: fhem kennt die Funktion round() die mit zwei Werten aufgerufen wird: round(3.1415926536,2) rundet pi auf zwei Stellen nach dem Komma.

Aber lasst Euch nicht weiter stören.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Puschel74

Nein, readings musst du einzeln in Variablen speichern und vergleichen.
der Variablenamen muss aber eindeutig sein.

Du kannst versuchen im Device mit dem Reading alarm das Attribut event-on-change-reading zu setzen.
Dann wird nur ein Event generiert wenn sich was ändert.

Ich habe bei mir keinen Dummy sondern ein Reading im Device mit setreading gesetzt sobald für dieses Gerät die Batterie-leer-Meldung gesendet
wurde.
So kommt pro Device immer nur eine Mail.

Edith: Danke betateilchen - ich lern auch immer wieder noch was dazu  8)
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

newby

#20
Evtl. eine blöde Frage emperature geht hier nicht oder?
Wie im Bsp. [Bb]attery

Danke für den Tipp, round[] kannte ich noch nicht.


Kann mir einer die Bedeutung von
if (($alarm !~ m/0/)
und dem geheimnisvollen
$_
erklären?
Irgendwie zeigt er das Tt in den Klammern nicht an und die Formatierung ist auch merkwürdig.
Ich mach wieder alles kaputt.

Puschel74

Zum auslesen eines Wertes mittels ReadingsVal?
Nein - da mWn das Reading nicht als regexp angegeben werden kann.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

newby

Vielen Dank für die tolle Unterstützung.

Muss leider für heute pausieren. Melde mich morgen früh wieder mit neuen Ergebnissen.

Danke
Sven


Puschel74

Gerne.
OT - trifft sich gut kann ich meine HM-SEC-SD in Betrieb nehmen - BTT
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

betateilchen

Zitat von: newby am 13 Januar 2016, 15:23:07
Danke für den Tipp, round[] kannte ich noch nicht.

Achtung: runde Klammern, keine eckigen!

Zitat von: newby am 13 Januar 2016, 15:23:07
Kann mir einer die Bedeutung von
if ($alarm !~ m/0/)

Da wird geprüft, ob der Inhalt (!) der Variablen $alarm NICHT die Ziffer 0 enthält.

Zitat von: newby am 13 Januar 2016, 15:23:07
und dem geheimnisvollen
$_
erklären?

Das ist eine perl-interne Variable, davon gibt es eine ganze Menge, z.B. auch $1, $2, $] usw.
Die Bedeutung solcher Varianlen findest Du in der perl Doku, das ist nichts fhem spezifisches.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Otto123

#25
Zitat von: newby am 13 Januar 2016, 15:23:07
Kann mir einer die Bedeutung von
if (($alarm !~ m/0/)
Ich versuche es mal als "regexegasteniker" mit Hilfe von Selfhtml und Perldoc (Das ist auch nicht schlecht) bin ich der Bedeutung näher gekommen:

$_ ist die Default Variable

Das Ausrufezeichen kehrt etwas um.
Der ~ (Binding) Operator 
m/0/ ist der matching Operator, der hier auf 0 prüft.

betateilchen (!Puschel)  ;) war schneller und hat es vor allem richtig erklärt, ich habs immer noch nicht von alleine verstanden.
Irgendwann muss es doch mal werden.  ::)

Gruß Otto
P.S. Sorry ich habe nur mitgelesen  8)
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

Puschel74

ZitatPuschel war schneller und hat es vor allem richtig erklärt,
Nenene, das war betateilchen und !Puschel  ;D
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Otto123

Zitat von: Puschel74 am 13 Januar 2016, 16:16:39
Nenene, das war betateilchen und !Puschel  ;D
Hast ja Recht, wenn man auf "schreiben" drückt und sieht es hat schon einer, kann das lesen dann manchmal Glücksache sein.
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

newby

#28
Hatte ja die Statusmeldung angedroht.

Aktueller Code

.*:alarm:.* {
my $alarm=ReadingsVal($NAME,"alarm","0");
my $temp=ReadingsVal($NAME,"temperature","122");
my $frost=ReadingsVal("Frostalarm","state","tilt");
{ if ($alarm != 0) {
{DebianMail('mail@mail.de','FHEM Frostwarnung','Die Temperatur von ' .$NAME. ' ist ' .$temp)}
fhem ("set Frostalarm on");
   Log(1,"$NAME - $EVENT Frostalarm: $frost Alarm: $alarm");
   Log(1,"Temperatur: ".$temp);
  }
else {
  fhem ("set Frostalarm off");
   Log(1,"Else $NAME - $EVENT Frostalarm: $frost Alarm: $alarm");
   Log(1,"Temperatur: ".$temp);
  }
}
}


funktioniert einwandfrei.
Geändert habe ich noch
alarm:.*
.*:alarm:.*
da der Dummy Frostalarm sonst ein Event auslöste.

Durch das setzen von "event-on-change-reading" in den Devices wird das mehrfache senden unterbunden.

Das Problem mit der Ttemperature habe ich auf unkonventionelle Weise einfach über ein weiteres UserReading "temperature" im Device gelöst.
Sorry  :-[

Wieder ein Stück weiter und schlauer  8)
Nächstes Project steht schon an.