Guten Tag Zusammen,
ich möchte gerne über Unwetterwarnungen informiert werden, sobald sich irgendein Wert ändert.
Ich habe es nun über die UserReadings und über ein Notify versucht, leider bekomme ich alle 5 Minuten diese Nachricht.
Ich habe es auch mit event-on-change-reading versucht.
Ich hoffe es kann mir jemand helfen.
Grüße
Gear
poste mal ein list von deinem uwz device und deinem notify, dann können wir dir helfen
UWZ
Internals:
CountryCode DE
DEF DE ***** 300
INTERVAL 300
INTERVALWARN 0
NAME Unwetterwarnung
NR 36
PLZ *****
STATE Warnungen: 0
TYPE UWZ
URL http://feed.alertspro.meteogroup.com/AlertsPro/AlertsProPollService.php?method=getWarning&language=de&areaID=UWZDE82347
VERSION 2.0.0
OLDREADINGS:
READINGS:
2018-05-01 11:14:54 WarnCount 0
2018-05-01 11:14:54 WarnUWZLevel 0
2018-05-01 11:14:54 WarnUWZLevel_Color gruen
2018-05-01 11:19:54 currentIntervalMode normal
2018-05-01 11:14:54 durationFetchReadings 0.00
2018-05-01 11:14:54 lastConnection 4 values captured in 0.00 s
2018-05-01 11:14:54 state Warnungen: 0
fhem:
LOCAL 0
helper:
Attributes:
DbLogExclude .*
download 1
event-on-change-reading 1
maps deutschland europa bayern
room 00 Draußen
Notify
Internals:
DEF Unwetterwarnung:lastConnection:..*.values.captured.in.*.*.s
{
my $WarnLevel = ReadingsVal($NAME,'WarnUWZLevel',0);
my $WarnCount .= ReadingsVal($NAME,'WarnCount',0);
my $WarnLevelOwn = 0;
my $WarnMSG = "Die Aktuelle Unwetterwarnstufe ist ". ucfirst(ReadingsVal($NAME,'WarnUWZLevel_Color',0) ."\n");
$WarnMSG .= "Aktuelle Anzahl der Warnungen: $WarnCount\n\n";
for(my $i = 0; $i < $WarnCount; $i++)
{
$WarnMSG .= "Warnung ". ($i+1) .":\n". ReadingsVal($NAME,'Warn_'. $i .'_LongText',0) ."\n\n";
}
if($WarnLevel <= 1)
{
$WarnLevelOwn = 1;
}
elsif($WarnLevel <= 3)
{
$WarnLevelOwn = 2;
}
else
{
$WarnLevelOwn = 3;
}
fhem("set mqtt publish /SH/W/UWZ/Level $WarnLevelOwn");
fhem("set TeleBot msg $WarnMSG");
}
NAME Notify.Unwetterwarnung
NOTIFYDEV Unwetterwarnung
NR 62
NTFY_ORDER 50-Notify.Unwetterwarnung
REGEXP Unwetterwarnung:lastConnection:..*.values.captured.in.*.*.s
STATE active
TYPE notify
READINGS:
2018-04-30 12:34:40 state active
Attributes:
DbLogExclude .*
du bekommst diese nachricht alle x minuten , da mit jedem update ein event erzeugt wird .
warum triggerst du auf 'last connection ' und nicht auf ' unwetter:Warnungen:..* {} ' . wenn du dann noch 'event-on-change-reading' entsprechend setzt sollte es gehen.
gruss Byte09
Ich würde eher auf WarnCount triggern.
:WarnCount:.[1-9]
Sollte gehen.
Ich habe auf 'last connection ' getriggert, da es die letzten Daten sind, die reinkommen.
Wenn es auf :WarnCount:.[1-9] reagierte dann hatte ich das Problem, dass wenn sich der Status ändert, aber die Anzahl gleich bleibt, keine neues Event ausgelöst wurde.
Bei 'unwetter:Warnungen:..* {}' war es auch so.
Zitat von: Gear am 01 Mai 2018, 11:52:46
Ich habe auf 'last connection ' getriggert, da es die letzten Daten sind, die reinkommen.
Wenn es auf :WarnCount:.[1-9] reagierte dann hatte ich das Problem, dass wenn sich der Status ändert, aber die Anzahl gleich bleibt, keine neues Event ausgelöst wurde.
Bei 'unwetter:Warnungen:..* {}' war es auch so.
Dürfte eher selten vorkommen das eine andere Warnmeldung kommt und im selben Zuge die erste verschwindet. Ich habe gute Erfahrungen gemacht mit WarnCount.
Und wenn sich das die Stufe ändert, dann ändert sich der Count aber nicht.
Zitat von: Gear am 01 Mai 2018, 12:13:28
Und wenn sich das die Stufe ändert, dann ändert sich der Count aber nicht.
dann trigger doch zusätzlich auf die Stufe ?!
gruss Byte09
Oke, dass man auf mehrere Sachen Triggern kann, das war mir nicht bewusst. :o
Wie geht das?
Ich kenne das nur so: Unwetterwarnung:lastConnection:..*.values.captured.in.*.*.s {}
Zitat von: Gear am 01 Mai 2018, 12:52:19
Oke, dass man auf mehrere Sachen Triggern kann, das war mir nicht bewusst. :o
Wie geht das?
Ich kenne das nur so: Unwetterwarnung:lastConnection:..*.values.captured.in.*.*.s {}
letztendlich müsstest du da wohl mit einen zweiten notify arbeiten ( denke ich ) , aber unter vorbehalt , da ich grundsätzlich nicht mehr mit notifys arbeite.
gruss Byte09
Mit was arbeitest du dann?
Ich glaube ich werde es über die UserReadings machen und setze eigenen Readings um diese dann zu vergleichen.
Danke für eure Hilfe!
Wünsche euch einen schönen Tag
Grüße
Gear
Zitat von: Gear am 01 Mai 2018, 13:38:55
Mit was arbeitest du dann?
Ich glaube ich werde es über die UserReadings machen und setze eigenen Readings um diese dann zu vergleichen.
Danke für eure Hilfe!
Wünsche euch einen schönen Tag
Grüße
Gear
Mit meinem eigenen Modul 'MSwitch' https://forum.fhem.de/index.php/topic,86199.0.html (https://forum.fhem.de/index.php/topic,86199.0.html), habe es eben mal damit eingerichtet .
bei interesse kann ich dir entsprechende raw und config schicken
gruss Byte09
Das Modul sieht interessant aus, muss ich die Tage mal den WiKi Eintrag lesen.
Ich komme dann in deinem Verlinkten Beitrag auf dich zu, wenn ich fragen habe, Danke! =)
Hat denn hier jemand eine Lösung gefunden die er teilen möchte? HHabe genau die gleiche Anforderung. Möchte per Telegram gesendet haben wenn 1 oder mehrere Unwetter sind UND wenn sich der Status ändert z.B. Sturm Stufe 3 auf 4.
Bisher krieg ich es leider nur hin, dass bei Änderung des WarnCounts die Meldungen kommen, kriege das aber nicht mir Änderungen der Stufen zusammen. Freu mich über weitere Infos
@Dia81
Ist dein Problem noch besändig?
Ich müsste schauen ob ich heute Abend dran denke, dann könnnte ich mein Notify posten.
Zitat von: Gear am 07 März 2019, 06:48:19
@Dia81
Ist dein Problem noch besändig?
Ich müsste schauen ob ich heute Abend dran denke, dann könnnte ich mein Totify posten.
Ungefähr 1 1/2 Jahre zu spät... aber ja das Problem ist weiterhin nicht gelöst ;)
Hatte nicht mitbekommen, dass da noch was kam, sry...
Also ich habe das so, dass ich immer wenn sich etwas an den UWZ Daten ändert, eine Nachricht bekomme, so willst du das auch haben oder?
Lass mich die Tage mal schauen, dann kann ich meine Lösung dazu posten, wenn Interesse besteht. =)
Beste Grüße
Gear
Guten Abend Dia81, also ich habe es über ein Notify gelöst, ist evtl nicht schön geschrieben, aber es waren meine ersten Schritte in Perl.
Mein UWZ Device heißt: OUT.Unwetterwarnung
Mein Telegram Bot heißt: TeleBot
Bitte so ändern, dass es für dich passt.
Im eigentlichen liest es nur die Werte aus, also WarnCount, Level und die Farbe und vergleicht die mit zu vor gesetzten Readings, ob diese ungleich sind, wenn ja, wird gepushed via Telegram.
Es werden die Anzahl der Warnungen angegeben und die Farbe, anschließend werden dann die Einzelheiten aufgelistet.
Läuft bei mir seit damals ohne Probleme.
Viel Spaß damit! =)
define Notify.Unwetterwarnung notify OUT.Unwetterwarnung:lastConnection:..*.values.captured.in.*.*.s\
{\
my $WarnCount = ReadingsVal($NAME,'WarnCount',0);;\
my $WarnLevel = ReadingsVal($NAME,'WarnUWZLevel',0);;\
my $WarnLevelColor = ReadingsVal($NAME,'WarnUWZLevel_Color',0);;\
\
my $LastWarnCount = ReadingsVal($NAME,'LastWarnCount',0);;\
my $LastWarnLevel = ReadingsVal($NAME,'LastWarnUWZLevel',0);;\
my $LastWarnLevelColor = ReadingsVal($NAME,'LastWarnUWZLevel_Color',0);;\
\
\
if(($WarnCount ne $LastWarnCount) or ($WarnLevel ne $LastWarnLevel) or ($WarnLevelColor ne $LastWarnLevelColor))\
{\
fhem("setreading $NAME LastWarnCount $WarnCount");;\
fhem("setreading $NAME LastWarnUWZLevel $WarnLevel");;\
fhem("setreading $NAME LastWarnUWZLevel_Color $WarnLevelColor");;\
\
my $WarnMSG = "Die Aktuelle Unwetterwarnstufe ist ". ucfirst($WarnLevelColor) .".\nAktuelle Anzahl der Warnungen: ". $WarnCount .".";;\
\
for(my $i = 0;; $i < $WarnCount;; $i++)\
{\
$WarnMSG .= "\n\nWarnung ". ($i + 1) .":\n". ReadingsVal($NAME,'Warn_'. $i .'_LongText',0);;\
}\
\
fhem("set TeleBot msg $WarnMSG");;\
}\
}
Beste Grüße
Gear