notify triggert nicht bei Readingänderung durch Funktion

Begonnen von maddhin, 21 Oktober 2017, 15:46:04

Vorheriges Thema - Nächstes Thema

maddhin

Hi,

ich hole per JSONREADINGS Werte und benutze diese Funktion um bei neuen Readings ein weiteres Reading zu erzeugen:

sub myUtils_usAQI_cat($) {
  my ($AQI) = @_;
  my ($cat);

  return unless(looks_like_number($AQI));

  if($AQI < 50) { $cat = "Good"}
  elsif($AQI < 100) { $cat = "Moderate"}
  elsif($AQI < 150) { $cat = "Unhealthy for Sensitive Groups"}
  elsif($AQI < 200) { $cat = "Unhealthy"}
  elsif($AQI < 300) { $cat = "Very Unhealthy"}
  elsif($AQI < 400) { $cat = "Hazardous"}
  elsif($AQI < 500) { $cat = "Hazardous"}

  else{return;}
 
  return($cat);
}


Damit habe ich dann ein neues Reading "cat".

Jetzt möchte ich ein Notfiy welches triggert, wenn sich Cat ändert:

n_AQI_Status AQI_X:cat:.* {my $AQI = ReadingsVal("AQI_X","data_aqi",0);; my $AQI_cat = ReadingsVal("AQI_X","cat",0);;fhem("set Push msg AQI: $AQI ($AQI_cat)")}

Ich habe das Problem, dass ohne den definierten Trigger "cat:.*", d.h. nur Auslösen wenn sich die Kategorie ändert, bei jeder JSON Abfrage das notify getriggert wird. Aber wenn ich den Trigger setze, reagiert das notify auf automatische Änderungen von cat durch die Funktion nicht... Das notify wird nur getriggert, wenn ich manuell mit setreading cat ändere...

Ich vermute, dass die Funktion kein Event auslöst und damit auch nicht das notify?

Bin ich zu doof ein notify zu schreiben oder gibt es hier einen Trick? :)

CoolTux

Zitat von: maddhin am 21 Oktober 2017, 15:46:04
Damit habe ich dann ein neues Reading "cat".

Nein hast Du nicht. Deine Funktion gibt lediglich einen Wert an die aufrufende Instanz zurück.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

maddhin

OK, ich hatte das entsprechende userreading vergessen:)

userReadings cat:data_iaqi_pm25_v:.* {myUtils_usAQI_cat(ReadingsNum($name, "data_iaqi_pm25_v", 0))},

Jetzt sollte ich ein Reading cat haben, oder?

CoolTux

Sollte. Und wenn nun data_iaqi_pm25_v geschrieben wird sollte auch cat geschrieben werden. Schau doch einfach im Eventmonitor
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

maddhin

Ja, wenn ich data_iaqi_pm25_v manuell ändere wird cat berechnet und geschrieben und das notify wird auch getriggert.
Der Punkt ist, wieso dann das notify bei Änderung durch die JSON Abfrage nicht getriggert wird. Cat wird da ja auch berechnet und geschrieben und richtig angezeigt... Komisch.

CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

maddhin

Internals:
   DEF        https://api.waqi.info/feed/@1451/?token=Xxxx9 60
   ERROR      no data connect to https://api.waqi.info:443 timed out
   INTERVAL   60
   NAME       AQI_BJ
   NR         100
   STATE      AQI: 59 (pm25) | AQI: 36 (PM10) | 2017-10-21 20:00:00
   TYPE       JSONREADINGS
   URL        https://api.waqi.info/feed/@1451/?token=Xxxx9
   READINGS:
     2017-10-21 21:07:26   data_aqi        59
     2017-10-21 21:07:26   data_attributions_01_name Beijing Environmental Protection Monitoring Center (北京市环境保护监测中心)
     2017-10-21 21:07:26   data_attributions_01_url http://www.bjmemc.com.cn/
     2017-10-21 21:07:26   data_attributions_02_name U.S Embassy Beijing Air Quality Monitor (美国驻北京大使馆空气质量监测)
     2017-10-21 21:07:26   data_attributions_02_url http://beijing.usembassy-china.org.cn/070109air.html
     2017-10-21 21:07:26   data_city_name  Beijing
     2017-10-21 21:07:26   data_city_url   http://aqicn.org/city/beijing/
     2017-10-21 21:07:26   data_dominentpol pm25
     2017-10-21 21:07:26   data_iaqi_co_v  5.5
     2017-10-21 21:07:26   data_iaqi_d_v   7
     2017-10-21 21:07:26   data_iaqi_h_v   63
     2017-10-21 21:07:26   data_iaqi_no2_v 16
     2017-10-21 21:07:26   data_iaqi_o3_v  17.9
     2017-10-21 21:07:26   data_iaqi_p_v   1023
     2017-10-21 21:07:26   data_iaqi_pm10_v 36
     2017-10-21 22:28:07   data_iaqi_pm25_v 55
     2017-10-21 21:07:26   data_iaqi_so2_v 2.1
     2017-10-21 21:07:26   data_iaqi_t_v   14
     2017-10-21 21:07:26   data_iaqi_w_v   0.9
     2017-10-21 21:07:26   data_iaqi_wd_v  190
     2017-10-21 21:07:26   data_idx        1451
     2017-10-21 21:07:26   data_time_s     2017-10-21 20:00:00
     2017-10-21 21:07:26   data_time_tz    +08:00
     2017-10-21 21:07:26   data_time_v     1508616000
     2017-10-21 23:00:45   state           get_new_data
     2017-10-21 21:07:26   status          ok
     2017-10-21 21:07:26   usAQI10_cat     Good
     2017-10-21 22:28:07   usAQI25_cat     Moderate
Attributes:
   room       7.01 Umwelt aussen
   stateFormat AQI: data_aqi (data_dominentpol) | AQI: data_iaqi_pm10_v (PM10) | data_time_s
   userReadings usAQI25_cat:data_iaqi_pm25_v:.* {myUtils_usAQI_cat(ReadingsNum($name, "data_iaqi_pm25_v", 0))},
usAQI10_cat:data_iaqi_pm10_v:.* {myUtils_usAQI_cat(ReadingsNum($name, "data_iaqi_pm10_v", 0))}


Wollte eigentlich nur das notify für spätere Nutzung mit AQICN vorbereiten, aber jetzt wurmt es mich schon wieso das hier nicht geht.

Ich hatte was doTrigger gelesen aber verstehe nicht warum das Ändern von Cat nicht ein Event ist...

CoolTux

Was sagt den der Eventmonitor zu data_iaqi_pm25_v wenn du neu Daten holst
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

maddhin

Da gibt es überraschenderweise nur

2017-10-21 23:26:21 JSONREADINGS AQI_BJ get_new_data
2017-10-21 23:26:45 JSONREADINGS AQI_BJ get_new_data


Das ist wohl das Problem...? D.h. Das JSONREADINGS.PM Modul schreibt die Readings nicht?

CoolTux

Naja Readings stehen aber doch drin. Vielleicht nicht weil sie sich nicht geändert haben.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

maddhin

OK, werde mal verfolgen, was passiert, wenn neue Werte kommen. Im Moment scheint die JSON API offline zu sein... AQICN hat aber aktuelle Werte! :)
danke!