fix FHEMWEB Error message if ' in City Name

This commit is contained in:
Marko Oldenburg 2017-10-20 09:47:27 +02:00
parent 47c6e941f4
commit 26f9671642

View File

@ -67,7 +67,7 @@ eval "use Encode qw(encode encode_utf8 decode_utf8);1" or $missingModul .= "Enco
eval "use JSON;1" or $missingModul .= "JSON "; eval "use JSON;1" or $missingModul .= "JSON ";
my $version = "0.0.33"; my $version = "0.0.36";
@ -86,7 +86,7 @@ sub Aqicn_ReadingsProcessing_AqiResponse($);
sub Aqicn_ErrorHandling($$$); sub Aqicn_ErrorHandling($$$);
sub Aqicn_WriteReadings($$); sub Aqicn_WriteReadings($$);
sub Aqicn_Timer_GetData($); sub Aqicn_Timer_GetData($);
sub Aqicn_AirPollutionLevel($); sub Aqicn_AirPollutionLevel($$);
@ -114,6 +114,7 @@ sub Aqicn_Initialize($) {
$hash->{AttrFn} = "Aqicn_Attr"; $hash->{AttrFn} = "Aqicn_Attr";
$hash->{AttrList} = "interval ". $hash->{AttrList} = "interval ".
"disable:1 ". "disable:1 ".
"language:de,en".
$readingFnAttributes; $readingFnAttributes;
foreach my $d(sort keys %{$modules{Aqicn}{defptr}}) { foreach my $d(sort keys %{$modules{Aqicn}{defptr}}) {
@ -362,11 +363,10 @@ sub Aqicn_ErrorHandling($$$) {
my $name = $hash->{NAME}; my $name = $hash->{NAME};
#Log3 $name, 3, "Aqicn ($name) - Recieve JSON data: $data"; Log3 $name, 4, "Aqicn ($name) - Recieve JSON data: $data";
#Log3 $name, 3, "Aqicn ($name) - Recieve HTTP Code: $param->{code}"; #Log3 $name, 3, "Aqicn ($name) - Recieve HTTP Code: $param->{code}";
#Log3 $name, 3, "Aqicn ($name) - Recieve Error: $err"; #Log3 $name, 3, "Aqicn ($name) - Recieve Error: $err";
### Begin Error Handling ### Begin Error Handling
if( defined( $err ) ) { if( defined( $err ) ) {
@ -473,7 +473,7 @@ sub Aqicn_WriteReadings($$) {
readingsBulkUpdate($hash,$r,$v); readingsBulkUpdate($hash,$r,$v);
} }
readingsBulkUpdateIfChanged($hash,'state',Aqicn_AirPollutionLevel($readings->{'PM2.5-AQI'})); readingsBulkUpdateIfChanged($hash,'state',Aqicn_AirPollutionLevel($hash,$readings->{'PM2.5-AQI'}));
readingsEndUpdate($hash,1); readingsEndUpdate($hash,1);
} }
@ -509,6 +509,7 @@ sub Aqicn_ReadingsProcessing_SearchStationResponse($$) {
$ret .= '<tr class="odd">'; $ret .= '<tr class="odd">';
} }
$dataset->{station}{name} =~ s/'//g;
$ret .= "<td>".encode_utf8($dataset->{station}{name})."</td>"; $ret .= "<td>".encode_utf8($dataset->{station}{name})."</td>";
$ret .= "<td>$dataset->{'time'}{stime}</td>"; $ret .= "<td>$dataset->{'time'}{stime}</td>";
$ret .= "<td>$dataset->{station}{geo}[0]</td>"; $ret .= "<td>$dataset->{station}{geo}[0]</td>";
@ -536,7 +537,6 @@ sub Aqicn_ReadingsProcessing_SearchStationResponse($$) {
$ret .= '</table></td></tr>'; $ret .= '</table></td></tr>';
$ret .= '</table></html>'; $ret .= '</table></html>';
#printf "\n\n$ret\n\n";
asyncOutput( $param->{cl}, $ret ) if( $param->{cl} && $param->{cl}{canAsyncOutput} ); asyncOutput( $param->{cl}, $ret ) if( $param->{cl} && $param->{cl}{canAsyncOutput} );
return; return;
} }
@ -562,22 +562,43 @@ sub Aqicn_ReadingsProcessing_AqiResponse($) {
return \%readings; return \%readings;
} }
sub Aqicn_AirPollutionLevel($) { sub Aqicn_AirPollutionLevel($$) {
my $aqi = shift;
my ($hash,$aqi) = @_;
my $name = $hash->{NAME};
my $apl; my $apl;
if($aqi < 50) { $apl = "Good"} if($aqi < 51) { $apl = "Good"}
elsif($aqi < 100) { $apl = "Moderate"} elsif($aqi < 101) { $apl = "Moderate"}
elsif($aqi < 150) { $apl = "Unhealthy for Sensitive Groups"} elsif($aqi < 151) { $apl = "Unhealthy for Sensitive Groups"}
elsif($aqi < 200) { $apl = "Unhealthy"} elsif($aqi < 201) { $apl = "Unhealthy"}
elsif($aqi < 300) { $apl = "Very Unhealthy"} elsif($aqi < 301) { $apl = "Very Unhealthy"}
elsif($aqi < 400) { $apl = "Hazardous"} else { $apl = "Hazardous"}
elsif($aqi < 500) { $apl = "Hazardous"}
return $apl
if( (AttrVal('global','language','none') eq 'DE' or AttrVal($name,'language','none') eq 'de') and AttrVal($name,'language','none') ne 'en' ) {
return Aqicn_i18n_de($apl);
} else {
return $apl;
}
}
sub Aqicn_i18n_de($) {
my $value = shift;
my %i18nde = (
'Good' => 'Gut',
'Moderate' => 'Moderat',
'Unhealthy for Sensitive Groups' => 'Ungesund für empfindliche Personengruppen',
'Unhealthy' => 'Ungesund',
'Very Unhealthy' => 'Sehr ungesund',
'Hazardous' => 'Gefährlich'
);
return $i18nde{$value};
} }