[alpha] - implementation extend state with one more thing...

This commit is contained in:
Sebastian 2022-06-11 14:07:16 +02:00
parent 6faccfe564
commit c07f757c4a
3 changed files with 83 additions and 76 deletions

View File

@ -1 +1 @@
cleanup code fix boolean

View File

@ -166,7 +166,7 @@ sub Initialize {
$hash->{AttrList} = $hash->{AttrList} =
"readingValueLanguage:de,en " "readingValueLanguage:de,en "
. "model:watering_computer,sensor,sensor2,mower,ic24,power,electronic_pressure_pump " . "model:watering_computer,sensor,sensor2,mower,ic24,power,electronic_pressure_pump "
. "extendedState " . "extendedState:0,1 "
. "IODev " . "IODev "
. $readingFnAttributes; . $readingFnAttributes;
$hash->{parseParams} = 1; $hash->{parseParams} = 1;
@ -869,89 +869,96 @@ sub setState {
if ( AttrVal( $name, 'model', 'unknown' ) eq 'mower' ); if ( AttrVal( $name, 'model', 'unknown' ) eq 'mower' );
# ic24 # ic24
readingsBulkUpdate( if ( AttrVal( $name, 'model', 'unknown' ) eq 'ic24' ){
$hash, 'state', my @ic24opened_ventils;
'scheduled watering next start: ' my $state_string = ''; my $nearst_irrigation = '2999-12-12 24:00';
. ( my $has_scheduling = 0; my $lowest_duration = 9999;
ReadingsVal( my @valves_connected = split(',', ReadingsVal( $name, 'ic24-valves_connected', ''));
$name, 'scheduling-scheduled_watering_next_start', for (@valves_connected){
'no timer' ## add to opened ventils, if watering active
) push @ic24opened_ventils, $_ if ( ( ( ReadingsVal( $name, "watering-watering_timer_".$_."_duration", 0 ) =~ m{\A[1-9]([0-9]+)?\z}xms ) ? $_ : 0 ) > 0 );
) ## find nearst timestamp
) if ( AttrVal( $name, 'model', 'unknown' ) eq 'ic24' ); $has_scheduling = 1 if ( ReadingsVal($name, 'scheduling-schedules_paused_until_'.$_ , '') ne '2038-01-18T00:00:00.000Z');
$lowest_duration = ReadingsVal( $name, "watering-watering_timer_".$_."_duration", 0 ) if (
( ReadingsVal( $name, "watering-watering_timer_".$_."_duration", 0 ) =~ m{\A[1-9]([0-9]+)?\z}xms
&& ReadingsVal( $name, "watering-watering_timer_".$_."_duration", 0 ) > 0
&& ReadingsVal( $name, "watering-watering_timer_".$_."_duration", 0 ) < $lowest_duration ) );
# override state 4 extendedstates if ( ReadingsVal($name, 'scheduling-scheduled_watering_next_start_'.$_, '') ne '') {
if ( AttrVal( $name, "extendedState", 0 ) == 1) { $nearst_irrigation = ReadingsVal($name, 'scheduling-scheduled_watering_next_start_'.$_, '') if ( Time::Piece->strptime( ReadingsVal($name, 'scheduling-scheduled_watering_next_start_'.$_, ''), "%Y-%m-%d %H:%M") < Time::Piece->strptime( $nearst_irrigation, "%Y-%m-%d %H:%M"))
### ic24 } # fi
if ( AttrVal( $name, 'model', 'unknown' ) eq 'ic24' ){ }
my @ic24opened_ventils; # override state 4 extendedstates
my $state_string = ''; my $nearst_irrigation = '2999-12-12 24:00'; if ( AttrVal( $name, "extendedState", 0 ) == 1) {
my $has_scheduling = 0;
my @valves_connected = split(',', ReadingsVal( $name, 'ic24-valves_connected', ''));
for (@valves_connected){
## add to opened ventils, if watering active
push @ic24opened_ventils, $_ if ( ( ( ReadingsVal( $name, "watering-watering_timer_".$_."_duration", 0 ) =~ m{\A[1-9]([0-9]+)?\z}xms ) ? $_ : 0 ) > 0 );
## find nearst timestamp
$has_scheduling = 1 if ( ReadingsVal($name, 'scheduling-schedules_paused_until_'.$_ , '') ne '2038-01-18T00:00:00.000Z');
if ( ReadingsVal($name, 'scheduling-scheduled_watering_next_start_'.$_, '') ne '') {
$nearst_irrigation = ReadingsVal($name, 'scheduling-scheduled_watering_next_start_'.$_, '') if ( Time::Piece->strptime( ReadingsVal($name, 'scheduling-scheduled_watering_next_start_'.$_, ''), "%Y-%m-%d %H:%M") < Time::Piece->strptime( $nearst_irrigation, "%Y-%m-%d %H:%M"))
} # fi
}
if (scalar(@ic24opened_ventils) > 0){ if (scalar(@ic24opened_ventils) > 0){
$state_string .= sprintf(RigReadingsValue($hash,'valve').' '.$_.' '.(RigReadingsValue($hash, 'will be irrigated %.f minutes remaining.')), (ReadingsVal( $name, 'watering-watering_timer_'.$_.'_duration', 0 )/60)); ## valve 1 will be ir.. 23 minutes remaining
for (@valves_connected){
$state_string .= sprintf(RigReadingsValue($hash,'valve').' '.$_.' '.(RigReadingsValue($hash, 'will be irrigated %.f minutes remaining.') .'</br>'), (ReadingsVal( $name, 'watering-watering_timer_'.$_.'_duration', 0 )/60));
} # /for
} else { } else {
$state_string .= RigReadingsValue($hash, 'closed'); $state_string .= RigReadingsValue($hash, 'closed');
} }
$state_string .= ($has_scheduling) ? sprintf( RigReadingsValue($hash, 'next watering: %s'), RigReadingsValue($hash, ReadingsVal($name, 'scheduling-scheduled_watering_next_start', ''))) : sprintf( RigReadingsValue($hash, 'paused until %s') , $nearst_irrigation); $state_string .= ($has_scheduling) ? sprintf( RigReadingsValue($hash, 'next watering: %s'), RigReadingsValue($hash, ReadingsVal($name, 'scheduling-scheduled_watering_next_start', ''))) : sprintf( RigReadingsValue($hash, 'paused until %s') , $nearst_irrigation);
#TODO: Write state format for ventil 1-@valces_connected -> map ? #TODO: Write state format for ventil 1-@valces_connected -> map ?
} else {
$state_string = scalar(@ic24opened_ventils) > 0 ?
# offen
? sprintf( (RigReadingsValue($hash, 'will be irrigated %.f minutes remaining.')), $lowest_duration/60);
# zu
:
( $has_scheduling )
# zeitplan aktiv
? sprintf( (RigReadingsValue($hash, 'closed') .'. '.RigReadingsValue($hash, 'next watering: %s')), $nearst_irrigation )
# zeitplan pausiert
: RigReadingsValue($hash, 'closed')
;
# state offline | override
$state_string = 'offline' if ($online_state eq 'offline');
## check ob ws offen ist
# ja -> dann zeig alle offene an ( durch api max. 2 )
##
# nein -> dann nur closed
#
## check ob ein zeitplan aktiv
# ja -> zeig nur den nächsten an
##
# nein -> permanent geschlosen
####
# ### eventuell auf binare bits und shiften
# $state_string .= $activ_watering > 0
# # offen
# ?
# ( ReadingsVal($name, 'scheduling-schedules_paused_until_'.$activ_watering, '' ) eq '' )
# # leer ( zeitplan aktiv ... )
# ? sprintf('V'.$activ_watering.' '.(RigReadingsValue($hash, 'will be irrigated %.f minutes remaining.').' '.RigReadingsValue($hash, 'next watering: %s')), (ReadingsVal( $name, 'watering-watering_timer_'.$activ_watering.'_duration', 0 )/60), RigReadingsValue($hash, ReadingsVal($name, 'scheduling-scheduled_watering_next_start_'.$activ_watering, '')) )
# # zeitplan pausiert
# :
# ( ReadingsVal($name, 'scheduling-schedules_paused_until_'.$activ_watering , '') eq '2038-01-18T00:00:00.000Z')
# # pause bis dauerhaft
# ? sprintf('V'.$activ_watering.' '. (RigReadingsValue($hash, 'will be irrigated %.f minutes remaining.').' '.RigReadingsValue($hash , 'schedule permanently paused')), (ReadingsVal( $name, 'watering-watering_timer_'.$activ_watering.'_duration', 0 )/60) )
# # naechter termin
# : sprintf('V'.$activ_watering.' '. RigReadingsValue($hash , 'paused until %s'), RigReadingsValue($hash, ReadingsVal($name, 'scheduling-schedules_paused_until_'.$activ_watering , '')) )
# # zu
# :
# ( ReadingsVal($name, 'scheduling-schedules_paused_until_'.$activ_watering , '' ) eq '' )
# # zeitplan aktiv
# ? sprintf( (RigReadingsValue($hash, 'closed') .'. '.RigReadingsValue($hash, 'next watering: %s')), RigReadingsValue($hash, ReadingsVal($name, 'scheduling-scheduled_watering_next_start_'.$activ_watering, '') ) )
# # zeitplan pausiert
# : RigReadingsValue($hash, 'closed')
# ;
#} FOR valvces_connected
# if ($activ_watering > 0)
# {
# # ein ventil offen
# my $state_string = "ein ventil offen"
# }
readingsBulkUpdate(
$hash, 'state', RigReadingsValue( $hash, $state_string ) );
} }
## check ob ws offen ist
# ja -> dann zeig alle offene an ( durch api max. 2 )
##
# nein -> dann nur closed
#
## check ob ein zeitplan aktiv
# ja -> zeig nur den nächsten an
##
# nein -> permanent geschlosen
####
# ### eventuell auf binare bits und shiften
# $state_string .= $activ_watering > 0
# # offen
# ?
# ( ReadingsVal($name, 'scheduling-schedules_paused_until_'.$activ_watering, '' ) eq '' )
# # leer ( zeitplan aktiv ... )
# ? sprintf('V'.$activ_watering.' '.(RigReadingsValue($hash, 'will be irrigated %.f minutes remaining.').' '.RigReadingsValue($hash, 'next watering: %s')), (ReadingsVal( $name, 'watering-watering_timer_'.$activ_watering.'_duration', 0 )/60), RigReadingsValue($hash, ReadingsVal($name, 'scheduling-scheduled_watering_next_start_'.$activ_watering, '')) )
# # zeitplan pausiert
# :
# ( ReadingsVal($name, 'scheduling-schedules_paused_until_'.$activ_watering , '') eq '2038-01-18T00:00:00.000Z')
# # pause bis dauerhaft
# ? sprintf('V'.$activ_watering.' '. (RigReadingsValue($hash, 'will be irrigated %.f minutes remaining.').' '.RigReadingsValue($hash , 'schedule permanently paused')), (ReadingsVal( $name, 'watering-watering_timer_'.$activ_watering.'_duration', 0 )/60) )
# # naechter termin
# : sprintf('V'.$activ_watering.' '. RigReadingsValue($hash , 'paused until %s'), RigReadingsValue($hash, ReadingsVal($name, 'scheduling-schedules_paused_until_'.$activ_watering , '')) )
# # zu
# :
# ( ReadingsVal($name, 'scheduling-schedules_paused_until_'.$activ_watering , '' ) eq '' )
# # zeitplan aktiv
# ? sprintf( (RigReadingsValue($hash, 'closed') .'. '.RigReadingsValue($hash, 'next watering: %s')), RigReadingsValue($hash, ReadingsVal($name, 'scheduling-scheduled_watering_next_start_'.$activ_watering, '') ) )
# # zeitplan pausiert
# : RigReadingsValue($hash, 'closed')
# ;
#} FOR valvces_connected
# if ($activ_watering > 0)
# {
# # ein ventil offen
# my $state_string = "ein ventil offen"
# }
readingsBulkUpdate(
$hash, 'state', RigReadingsValue( $hash, $state_string ) );
} }
#online state water control #online state water control
# zeitplan -> dauert pausiert wenn 2038-01-18T00:00:00.000Z # zeitplan -> dauert pausiert wenn 2038-01-18T00:00:00.000Z

View File

@ -1,2 +1,2 @@
UPD 2022-05-28_13:13:38 49520 FHEM/73_GardenaSmartBridge.pm UPD 2022-05-28_13:13:38 49520 FHEM/73_GardenaSmartBridge.pm
UPD 2022-06-10_20:26:59 66958 FHEM/74_GardenaSmartDevice.pm UPD 2022-06-11_14:06:34 67705 FHEM/74_GardenaSmartDevice.pm