FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Gear am 30 April 2018, 10:18:22

Titel: [Gelöst] Statusänderung von UWZ soll Info per Telebot senden
Beitrag von: Gear am 30 April 2018, 10:18:22
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
Titel: Antw:Statusänderung von UWZ soll Info per Telebot senden
Beitrag von: MKeY am 01 Mai 2018, 11:03:35
poste mal ein list von deinem uwz device und deinem notify, dann können wir dir helfen
Titel: Antw:Statusänderung von UWZ soll Info per Telebot senden
Beitrag von: Gear am 01 Mai 2018, 11:24:55
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 .*
Titel: Antw:Statusänderung von UWZ soll Info per Telebot senden
Beitrag von: Byte09 am 01 Mai 2018, 11:41:13
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
Titel: Antw:Statusänderung von UWZ soll Info per Telebot senden
Beitrag von: CoolTux am 01 Mai 2018, 11:44:51
Ich würde eher auf WarnCount triggern.

:WarnCount:.[1-9]

Sollte gehen.
Titel: Antw:Statusänderung von UWZ soll Info per Telebot senden
Beitrag 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.
Titel: Antw:Statusänderung von UWZ soll Info per Telebot senden
Beitrag von: CoolTux am 01 Mai 2018, 11:56:33
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.
Titel: Antw:Statusänderung von UWZ soll Info per Telebot senden
Beitrag von: Gear am 01 Mai 2018, 12:13:28
Und wenn sich das die Stufe ändert, dann ändert sich der Count aber nicht.
Titel: Antw:Statusänderung von UWZ soll Info per Telebot senden
Beitrag von: Byte09 am 01 Mai 2018, 12:21:00
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
Titel: Antw:Statusänderung von UWZ soll Info per Telebot senden
Beitrag 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 {}
Titel: Antw:Statusänderung von UWZ soll Info per Telebot senden
Beitrag von: Byte09 am 01 Mai 2018, 13:04:27
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
Titel: Antw:Statusänderung von UWZ soll Info per Telebot senden
Beitrag 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
Titel: Antw:Statusänderung von UWZ soll Info per Telebot senden
Beitrag von: Byte09 am 01 Mai 2018, 13:46:38
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
Titel: Antw:Statusänderung von UWZ soll Info per Telebot senden
Beitrag von: Gear am 01 Mai 2018, 13:52:14
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! =)
Titel: Antw:[Gelöst] Statusänderung von UWZ soll Info per Telebot senden
Beitrag von: Dia81 am 13 Januar 2019, 12:35:07
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
Titel: Antw:[Gelöst] Statusänderung von UWZ soll Info per Telebot senden
Beitrag 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 Notify posten.
Titel: Antw:[Gelöst] Statusänderung von UWZ soll Info per Telebot senden
Beitrag von: Dia81 am 27 Oktober 2020, 22:02:34
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 ;)
Titel: Antw:[Gelöst] Statusänderung von UWZ soll Info per Telebot senden
Beitrag von: Gear am 01 Dezember 2020, 12:19:18
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
Titel: Antw:[Gelöst] Statusänderung von UWZ soll Info per Telebot senden
Beitrag von: Gear am 01 Dezember 2020, 16:39:57
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