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? :)
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.
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?
Sollte. Und wenn nun data_iaqi_pm25_v geschrieben wird sollte auch cat geschrieben werden. Schau doch einfach im Eventmonitor
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.
Zeig Mal bitte ein list vom devuce
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...
Was sagt den der Eventmonitor zu data_iaqi_pm25_v wenn du neu Daten holst
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?
Naja Readings stehen aber doch drin. Vielleicht nicht weil sie sich nicht geändert haben.
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!
Lösung hier: https://forum.fhem.de/index.php/topic,38463.msg703806.html#msg703806