new OpenWeatherMapAPI onecall v3 Support
This commit is contained in:
		@@ -269,8 +269,9 @@ sub Weather_Initialize($) {
 | 
			
		||||
    $hash->{SetFn}   = 'Weather_Set';
 | 
			
		||||
    $hash->{AttrList} =
 | 
			
		||||
        'disable:0,1 '
 | 
			
		||||
      . 'forecast:hourly,daily,every,off '
 | 
			
		||||
      . 'forecast:multiple-strict,hourly,daily '
 | 
			
		||||
      . 'forecastLimit '
 | 
			
		||||
      . 'alerts:0,1 '
 | 
			
		||||
      . $readingFnAttributes;
 | 
			
		||||
    $hash->{NotifyFn} = 'Weather_Notify';
 | 
			
		||||
 | 
			
		||||
@@ -328,7 +329,12 @@ sub Weather_RetrieveCallbackFn($) {
 | 
			
		||||
 | 
			
		||||
sub Weather_WriteReadings($$) {
 | 
			
		||||
    my ( $hash, $dataRef ) = @_;
 | 
			
		||||
    my $name = $hash->{NAME};
 | 
			
		||||
    my $name    = $hash->{NAME};
 | 
			
		||||
    my $hourly  = ( AttrVal( $name, 'forecast', '' ) =~ m{hourly}xms ? 1: 0 );
 | 
			
		||||
    my $daily   = ( AttrVal( $name, 'forecast', '' ) =~ m{daily}xms ? 1 : 0 );
 | 
			
		||||
    my $alerts  = ( AttrVal( $name, 'forecast', '' ) =~ m{alerts}xms ? 1 : 0 );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    readingsBeginUpdate($hash);
 | 
			
		||||
 | 
			
		||||
    # delete some unused readings
 | 
			
		||||
@@ -381,16 +387,15 @@ sub Weather_WriteReadings($$) {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ### forecast
 | 
			
		||||
    if ( ref( $dataRef->{forecast} ) eq 'HASH'
 | 
			
		||||
        and AttrVal( $name, 'forecast', 'every' ) ne 'off' )
 | 
			
		||||
    if (  ref( $dataRef->{forecast} ) eq 'HASH'
 | 
			
		||||
      and ($hourly or $daily) )
 | 
			
		||||
    {
 | 
			
		||||
        ## hourly
 | 
			
		||||
        if (
 | 
			
		||||
                defined( $dataRef->{forecast}->{hourly} )
 | 
			
		||||
            and ref( $dataRef->{forecast}->{hourly} ) eq 'ARRAY'
 | 
			
		||||
            and scalar( @{ $dataRef->{forecast}->{hourly} } ) > 0
 | 
			
		||||
            and (  AttrVal( $name, 'forecast', 'every' ) eq 'every'
 | 
			
		||||
                or AttrVal( $name, 'forecast', 'hourly' ) eq 'hourly' )
 | 
			
		||||
            and $hourly
 | 
			
		||||
          )
 | 
			
		||||
        {
 | 
			
		||||
            my $i = 0;
 | 
			
		||||
@@ -445,8 +450,7 @@ sub Weather_WriteReadings($$) {
 | 
			
		||||
                defined( $dataRef->{forecast}->{daily} )
 | 
			
		||||
            and ref( $dataRef->{forecast}->{daily} ) eq 'ARRAY'
 | 
			
		||||
            and scalar( @{ $dataRef->{forecast}->{daily} } ) > 0
 | 
			
		||||
            and (  AttrVal( $name, 'forecast', 'every' ) eq 'every'
 | 
			
		||||
                or AttrVal( $name, 'forecast', 'daily' ) eq 'daily' )
 | 
			
		||||
            and $daily
 | 
			
		||||
          )
 | 
			
		||||
        {
 | 
			
		||||
            my $i = 0;
 | 
			
		||||
@@ -496,6 +500,16 @@ sub Weather_WriteReadings($$) {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (  ref( $dataRef->{alerts} ) eq 'HASH'
 | 
			
		||||
      and $alerts )
 | 
			
		||||
    {
 | 
			
		||||
      while ( my ( $r, $v ) = each %{ $dataRef->{alerts} } ) {
 | 
			
		||||
            readingsBulkUpdate( $hash, $r, $v )
 | 
			
		||||
              if (  ref( $dataRef->{$r} ) ne 'HASH'
 | 
			
		||||
                and ref( $dataRef->{$r} ) ne 'ARRAY' );
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    my $val = 'T: '
 | 
			
		||||
      . $dataRef->{current}->{temperature} . ' °C' . ' '
 | 
			
		||||
      . substr( $status_items_txt_i18n{1}, 0, 1 ) . ': '
 | 
			
		||||
@@ -529,7 +543,7 @@ sub Weather_GetUpdate($) {
 | 
			
		||||
        Weather_RearmTimer( $hash, gettimeofday() + $hash->{INTERVAL} );
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
        #       Weather_RetrieveData($name, 0);
 | 
			
		||||
        $hash->{fhem}->{api}->{exclude} = Weather_parseForcastAttr($hash);
 | 
			
		||||
        $hash->{fhem}->{api}->setRetrieveData;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -537,6 +551,20 @@ sub Weather_GetUpdate($) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
###################################
 | 
			
		||||
sub Weather_parseForcastAttr {
 | 
			
		||||
    my $hash      = shift;
 | 
			
		||||
    my $name      = $hash->{NAME};
 | 
			
		||||
    
 | 
			
		||||
    my @exclude   = qw 'alerts minutely hourly daily';
 | 
			
		||||
    my @forecast  = split(',',AttrVal($name,'forcast','') . (AttrVal($name,'alerts',0) ? ',alerts' : ''));
 | 
			
		||||
    my %exclude =();
 | 
			
		||||
 | 
			
		||||
    @exclude{@exclude} = @exclude;
 | 
			
		||||
    delete @exclude{@forecast};
 | 
			
		||||
 | 
			
		||||
    return join(',',keys %exclude);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub Weather_Get($@) {
 | 
			
		||||
    my ( $hash, @a ) = @_;
 | 
			
		||||
 | 
			
		||||
@@ -712,6 +740,7 @@ sub Weather_Define($$) {
 | 
			
		||||
            location   => $hash->{fhem}->{LOCATION},
 | 
			
		||||
            apioptions => $hash->{APIOPTIONS},
 | 
			
		||||
            language   => $hash->{LANG}
 | 
			
		||||
            exclude    => Weather_parseForcastAttr($hash),
 | 
			
		||||
        }
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
@@ -1373,7 +1402,7 @@ sub WeatherCheckOptions($@) {
 | 
			
		||||
  ],
 | 
			
		||||
  "release_status": "stable",
 | 
			
		||||
  "license": "GPL_2",
 | 
			
		||||
  "version": "v2.1.4",
 | 
			
		||||
  "version": "v2.2.5",
 | 
			
		||||
  "author": [
 | 
			
		||||
    "Marko Oldenburg <leongaultier@gmail.com>"
 | 
			
		||||
  ],
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user