Funktionierendes Beispiel!
define Wetter HTTPMOD http://api.wunderground.com/weatherstation/WXCurrentObXML.asp?ID=IBERLINB71 60
attr Wetter userattr reading01Name reading01Regex reading02Name reading02Regex reading03Name reading03Regex reading04Name reading04Regex reading05Expr reading05Name reading05Regex reading06Expr reading06Name reading06Regex reading07Expr reading07Name reading07Regex stateFormat
attr Wetter reading01Name datetime
attr Wetter reading01Regex <observation_time_rfc822>([^<]+)
attr Wetter reading02Name temperature
attr Wetter reading02Regex <temp_c>([^<]+)
attr Wetter reading03Name windDegrees
attr Wetter reading03Regex <wind_degrees>([^<]+)
attr Wetter reading04Name windDirection
attr Wetter reading04Regex <wind_dir>([^<]+)
attr Wetter reading05Expr $val * 1.6
attr Wetter reading05Name windGust
attr Wetter reading05Regex <wind_gust_mph>([^<]+)
attr Wetter reading06Expr $val * 1.6
attr Wetter reading06Name windSpeed
attr Wetter reading06Regex <wind_mph>([^<]+)
attr Wetter reading07Expr ReadingsVal($name, 'windSpeed', 0) > 5 ? 13.12 + 0.6215 * ReadingsVal($name, 'temperature', 0) - 11.37*(ReadingsVal($name, 'windSpeed', 0)**0.16) + 0.3965 * ReadingsVal($name, 'temperature', 0) * (ReadingsVal($name, 'windSpeed', 0)**0.16) : ReadingsVal($name, 'temperature', 0)
attr Wetter reading07Name windChill
attr Wetter reading07Regex <temp_c>([^<]+)
attr Wetter room Wetter
attr Wetter stateFormat {sprintf("Temperatur %.1f °C, Wind %.1f km/h", ReadingsVal($name,"temperature",0), ReadingsVal($name,"windSpeed",0))}
dero
Hallo,
bist Du sicher, dass das mit Attributen geht und Du nicht mit userreadings arbeiten möchtest?
Viele Grüße
Boris
Hi Boris,
du meinst, dass reading07Expr zu sehr nach einem Hack aussieht?
dero
Moin dero
Ich habe sowas bei meiner KS300 gemacht.
Sollte auch beim HTTPMOD klappen.
1.) Habe in der myUtils folgenden Code eingefügt.
sub windChill($)
{
my ($name) = @_;
my $temp = ReadingsVal($name, "temperature", 0);
my $wind = ReadingsVal($name, "wind", 0);
my $var = sprintf ("%.1f", 13.12 + 0.6215 * $temp - 11.37 * $wind**0.16 + 0.3965 * $temp *$wind**0.16 );
return ($temp < 5 && $wind > 5 ? $var : "---");
}
2.) In dem Device das windchill { windChill("KS300") } ins userReadings geschrieben.
Natürlich geht es nicht eins zu eins, also Anpassen nicht Vergessen.
Ich hoffe, das ich jetzt all zuviel Blödsinn von mir gegeben habe. :'(
Danke Michael, aber mein Beispiel oben FUNKTIONIERT bereits...
Hallo Dero,
Zitat von: dero am 26 November 2015, 15:11:21
du meinst, dass reading07Expr zu sehr nach einem Hack aussieht?
habe aus professionellem Interesse als Entwickler gefragt, weil man üblicherweise benutzerdefinierte Readings mit userreadings baut. Habe heute Abend aber nochmal genauer hingeschaut und gesehen, dass diese Form der Erzeugung von Readings ein exklusives Feature vom HTTPMOD-Modul ist. Wieder was gelernt.
Viele Grüße
Boris
So aus Neugier, wie habt ihr die ID für die Location rausbekommen?
VG
Frank
- Station über die Suche selektieren ,z.B. Borkum
- auf Change Station klicken
Dann steht bei mir IGRONING16 als ID auf der Seite (und in der URL)
http://www.wunderground.com/personal-weather-station/dashboard?ID=IGRONING16
Top, danke Udo, hat funktioniert
VG
Frank
Hi zusammen,
habe mir das heute auch mal die wunderground Abfrage eingerichtet und wollte natürlich auch einen windchill haben.
Was mir aufgefallen ist: Die Windgeschwindigkeit wird in mph angegeben, damit passt die Formel nicht.
Bei mir habe ich die Werte vorher in km/h umgerechnet.
Zu sehen in den Attributen reading15Expr, reading15Format, reading16Expr, reading16Format.
Dewpoint wird bei mir durch das dewpoint Modul generiert, dewegen habe ich reading03... rausgenommen
define weather HTTPMOD https://api.wunderground.com/weatherstation/WXCurrentObXML.asp?ID=INORDRHE417&format=XML 900
attr weather reading01Name cloudiness
attr weather reading01Regex cloudiness id="NN" percent="([\d\.]+)
attr weather reading02Name date
attr weather reading02Regex date date" content="([\d\.]+)
attr weather reading04Name fog
attr weather reading04Regex fog id="FOG" percent="([\d\.]+)
attr weather reading05Name heatindex
attr weather reading05Regex <heat_index_c>([\d\.]+)
attr weather reading06Name humidity
attr weather reading06Regex <relative_humidity>([\d\.]+)
attr weather reading07Name pressure
attr weather reading07Regex <pressure_mb>([\d\.]+)
attr weather reading08Name solarRadiation
attr weather reading08Regex <solar_radiation>([\d\.]+)
attr weather reading09Name solarUV
attr weather reading09Regex <UV>([\d\.]+)
attr weather reading10Name temperature
attr weather reading10Regex <temp_c>([\d\.]+)
attr weather reading11Name time
attr weather reading11Regex time Zeit([\d\:]+)
attr weather reading12Name windChill
attr weather reading12Regex <windchill_c>([\d\.]+)
attr weather reading13Name windDegrees
attr weather reading13Regex <wind_degrees>([\d\.]+)
attr weather reading14Name windDirection
attr weather reading14Regex <wind_dir>([\d\.]+)
attr weather reading15Expr $val * 1.60934
attr weather reading15Format %.1f
attr weather reading15Name windGust
attr weather reading15Regex <wind_gust_mph>([\d\.]+)
attr weather reading16Expr $val * 1.60934
attr weather reading16Format %.1f
attr weather reading16Name windSpeed
attr weather reading16Regex <wind_mph>([\d\.]+)
attr weather stateFormat T: temperature H: humidity W: windSpeed P: pressure
attr weather userReadings windChill
{
my $temperature = ReadingsVal($name, "temperature", 0);
my $windSpeed = ReadingsVal($name, "windSpeed", 0);
my $windChill;
if ($windSpeed > 5){
$windChill = sprintf("%.1f", 13.12 + (0.6215 * $temperature) - (11.37 * ($windSpeed**0.16)) + (0.3965 * $temperature * ($windSpeed**0.16)));
}else{
$windChill = $temperature;
}
return $windChill;
}
Grüße
igami
Hi igami,
danke für die Umrechnungen in km/h und windChill. Da ich noch nicht so fit mit Readings bin, kannst du mir vielleicht bitte mit dem Format helfen, da ich nicht weiß wie ich das reading benennen muss, damit es mir die Stellen kürzt??
readingsName_windSpeed
readingsRegex_windSpeed
readingsExpr_windSpeed
readingsFormat_windSpeed (funktioniert nicht)
Danke .. Max
Was soll gekürzt werden? Am besten ein Beispiel ich habe 7,9999 und möchte 8,0 oder so
Ja, genau. Durch die Multiplikation in "readingsExpr_windSpeed $val * 1.60934" bekomme ich natürlich Mahr Nachkommastelle. Hast du ja bei dir auch mit "%.1f " gekürzt. Nur heißen meine Attribute ja anders
Warum heißen deine Attribute denn anders?
Gute Frage. Ist aus einem anderen Post für Wetter kopiert worden. Frag mich aber bitte nicht woher und wann :-)
Es gibt eine Ältere Version von den Attributnamen, mit denen man die Readings angibt, diese solllte aber nicht mehr verwendet werden. Das wird auch der Grund sein, warum das bei dir nicht so funktioniert.
Zitat
The old syntax attr readingsNameX and attr readingsRegexX is still supported but it can go away in a future version of HTTPMOD so the new one with attr readingXName and attr readingXRegex should be preferred.
Einfach bitte das komplette Beispiel übernehmen.
Danke für die Hintergrundinformation. Dann passe ich das bei mir mal allgemein an
Maxl