Umbau
This commit is contained in:
parent
0060f3abe0
commit
b22e96756d
@ -232,7 +232,8 @@ sub SmarterCoffee_ParseMessage {
|
|||||||
$updateReading->( "last_command_$key", $value );
|
$updateReading->( "last_command_$key", $value );
|
||||||
}
|
}
|
||||||
$updateReading->( "last_command", $hash->{".last_set_command"} );
|
$updateReading->( "last_command", $hash->{".last_set_command"} );
|
||||||
}, 1);
|
}, 1
|
||||||
|
, 1);
|
||||||
} else {
|
} else {
|
||||||
Log3 $hash->{NAME}, 3, "Connection :: Unknown command response '$message'.";
|
Log3 $hash->{NAME}, 3, "Connection :: Unknown command response '$message'.";
|
||||||
}
|
}
|
||||||
@ -386,9 +387,9 @@ sub SmarterCoffee_ParseStatusValues {
|
|||||||
sub SmarterCoffee_Connect($) {
|
sub SmarterCoffee_Connect($) {
|
||||||
my ($hash) = @_;
|
my ($hash) = @_;
|
||||||
|
|
||||||
my $isNewConnection = $hash->{STATE} eq "initializing";
|
my $isNewConnection = ReadingsVal($hash->{NAME},'state','none') eq "initializing";
|
||||||
|
|
||||||
$hash->{STATE} = "disconnected";
|
readingsSingleUpdate($hash,'state','disconnected',0);
|
||||||
delete $hash->{INVALID_DEVICE} if defined($hash->{INVALID_DEVICE});
|
delete $hash->{INVALID_DEVICE} if defined($hash->{INVALID_DEVICE});
|
||||||
|
|
||||||
if ($hash->{AUTO_DETECT}) {
|
if ($hash->{AUTO_DETECT}) {
|
||||||
@ -399,15 +400,10 @@ sub SmarterCoffee_Connect($) {
|
|||||||
if (not ($hash->{DeviceName} =~ m/^(.+):([0-9]+)$/)) {
|
if (not ($hash->{DeviceName} =~ m/^(.+):([0-9]+)$/)) {
|
||||||
$hash->{DeviceName} .= ":$SmarterCoffee_Port";
|
$hash->{DeviceName} .= ":$SmarterCoffee_Port";
|
||||||
}
|
}
|
||||||
|
|
||||||
RemoveInternalTimer($hash);
|
|
||||||
|
|
||||||
DevIo_CloseDev($hash) if DevIo_IsOpen($hash);
|
DevIo_CloseDev($hash) if DevIo_IsOpen($hash);
|
||||||
delete $hash->{DevIoJustClosed} if ($hash->{DevIoJustClosed});
|
delete $hash->{DevIoJustClosed} if ($hash->{DevIoJustClosed});
|
||||||
|
|
||||||
InternalTimer(gettimeofday() + 15, "SmarterCoffee_ReConnectTimer", $hash)
|
|
||||||
unless( AttrVal($hash->{NAME},'reconnectTimer',0) == 0 );
|
|
||||||
|
|
||||||
return SmarterCoffee_OpenIfRequiredAndWritePending($hash, $isNewConnection);
|
return SmarterCoffee_OpenIfRequiredAndWritePending($hash, $isNewConnection);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@ -423,10 +419,10 @@ sub SmarterCoffee_HandleInitialConnectState($) {
|
|||||||
|
|
||||||
return if ($hash->{".initial-connection-state"});
|
return if ($hash->{".initial-connection-state"});
|
||||||
|
|
||||||
if (DevIo_IsOpen($hash) and ($hash->{STATE} eq "disconnected" or $hash->{STATE} eq "opened")) {
|
if (DevIo_IsOpen($hash) and (ReadingsVal($hash->{NAME},'state','none') eq "disconnected" or ReadingsVal($hash->{NAME},'state','none') eq "opened")) {
|
||||||
$hash->{".initial-connection-state"} = 1;
|
$hash->{".initial-connection-state"} = 1;
|
||||||
|
|
||||||
$hash->{STATE} = "connected";
|
readingsSingleUpdate($hash,'state','connected',0);
|
||||||
SmarterCoffee_Get($hash, @{[ $hash->{NAME}, "info" ]}) if (not $hash->{AUTO_DETECT});
|
SmarterCoffee_Get($hash, @{[ $hash->{NAME}, "info" ]}) if (not $hash->{AUTO_DETECT});
|
||||||
SmarterCoffee_Get($hash, @{[ $hash->{NAME}, "carafe_required_status" ]});
|
SmarterCoffee_Get($hash, @{[ $hash->{NAME}, "carafe_required_status" ]});
|
||||||
SmarterCoffee_Get($hash, @{[ $hash->{NAME}, "cups_single_mode_status" ]});
|
SmarterCoffee_Get($hash, @{[ $hash->{NAME}, "cups_single_mode_status" ]});
|
||||||
@ -446,7 +442,7 @@ sub SmarterCoffee_WritePending {
|
|||||||
|
|
||||||
# Processing pending commands
|
# Processing pending commands
|
||||||
if (($hash->{INVALID_DEVICE} // "0") eq "1") {
|
if (($hash->{INVALID_DEVICE} // "0") eq "1") {
|
||||||
$hash->{STATE} = "invalid";
|
readingsSingleUpdate($hash,'state','invalid',0);
|
||||||
} else {
|
} else {
|
||||||
if ($pending) {
|
if ($pending) {
|
||||||
delete $hash->{PENDING_COMMAND} if defined($hash->{PENDING_COMMAND});
|
delete $hash->{PENDING_COMMAND} if defined($hash->{PENDING_COMMAND});
|
||||||
@ -513,8 +509,7 @@ sub SmarterCoffee_Initialize($) {
|
|||||||
$hash->{ReadFn} = 'SmarterCoffee_Read';
|
$hash->{ReadFn} = 'SmarterCoffee_Read';
|
||||||
$hash->{ReadyFn} = 'SmarterCoffee_OpenIfRequiredAndWritePending';
|
$hash->{ReadyFn} = 'SmarterCoffee_OpenIfRequiredAndWritePending';
|
||||||
$hash->{NotifyFn} = 'SmarterCoffee_Notify';
|
$hash->{NotifyFn} = 'SmarterCoffee_Notify';
|
||||||
|
|
||||||
$hash->{AttrFn} = 'SmarterCoffee_Attr';
|
|
||||||
$hash->{AttrList} = ""
|
$hash->{AttrList} = ""
|
||||||
."default-hotplate-on-for-minutes "
|
."default-hotplate-on-for-minutes "
|
||||||
."ignore-max-cups "
|
."ignore-max-cups "
|
||||||
@ -524,8 +519,6 @@ sub SmarterCoffee_Initialize($) {
|
|||||||
."strength-extra-pre-brew-cups "
|
."strength-extra-pre-brew-cups "
|
||||||
."strength-extra-pre-brew-delay-seconds "
|
."strength-extra-pre-brew-delay-seconds "
|
||||||
."strength-extra-start-on-device-strength:off,weak,medium,strong "
|
."strength-extra-start-on-device-strength:off,weak,medium,strong "
|
||||||
."devioLoglevel:0,1,2,3,4,5 "
|
|
||||||
."reconnectTimer:1 "
|
|
||||||
.$readingFnAttributes;
|
.$readingFnAttributes;
|
||||||
|
|
||||||
Log 5, "Initialized module 'SmarterCoffee'";
|
Log 5, "Initialized module 'SmarterCoffee'";
|
||||||
@ -556,15 +549,13 @@ sub SmarterCoffee_Define($$) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$hash->{NOTIFYDEV} = "global,$name";
|
$hash->{NOTIFYDEV} = "global,$name";
|
||||||
$hash->{STATE} = "initializing";
|
readingsSingleUpdate($hash,'state','initializing',0);
|
||||||
|
|
||||||
$hash->{".last_command"} =
|
$hash->{".last_command"} =
|
||||||
$hash->{".last_response"} =
|
$hash->{".last_response"} =
|
||||||
$hash->{".last_status"} =
|
$hash->{".last_status"} =
|
||||||
$hash->{".raw_last_status"} = "";
|
$hash->{".raw_last_status"} = "";
|
||||||
|
|
||||||
RemoveInternalTimer($hash);
|
|
||||||
|
|
||||||
SmarterCoffee_Connect($hash);
|
SmarterCoffee_Connect($hash);
|
||||||
|
|
||||||
Log3 $hash->{NAME}, 4, "Instance :: Defined module 'SmarterCoffee': ".Dumper($hash);
|
Log3 $hash->{NAME}, 4, "Instance :: Defined module 'SmarterCoffee': ".Dumper($hash);
|
||||||
@ -582,38 +573,6 @@ sub SmarterCoffee_Undefine($$) {
|
|||||||
return undef;
|
return undef;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub SmarterCoffee_Attr(@) {
|
|
||||||
|
|
||||||
my ( $cmd, $name, $attrName, $attrVal ) = @_;
|
|
||||||
my $hash = $defs{$name};
|
|
||||||
|
|
||||||
|
|
||||||
if( $attrName eq "devioLoglevel" ) {
|
|
||||||
if( $cmd eq "set" ) {
|
|
||||||
$hash->{devioLoglevel} = $attrVal;
|
|
||||||
Log3 $name, 3, "SmarterCoffee ($name) - set devioLoglevel to $attrVal";
|
|
||||||
|
|
||||||
} elsif( $cmd eq "del" ) {
|
|
||||||
delete $hash->{devioLoglevel};
|
|
||||||
Log3 $name, 3, "SmarterCoffee ($name) - delete Internal devioLoglevel";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
elsif( $attrName eq "reconnectTimer" ) {
|
|
||||||
if( $cmd eq "set" ) {
|
|
||||||
RemoveInternalTimer($hash,'SmarterCoffee_ReConnectTimer');
|
|
||||||
SmarterCoffee_ReConnectTimer($hash);
|
|
||||||
Log3 $name, 3, "SmarterCoffee ($name) - set Attribute reconnectTimer";
|
|
||||||
|
|
||||||
} elsif( $cmd eq "del" ) {
|
|
||||||
RemoveInternalTimer($hash,'SmarterCoffee_ReConnectTimer');
|
|
||||||
Log3 $name, 3, "SmarterCoffee ($name) - delete Attribute reconnectTimer";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return undef;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub SmarterCoffee_Get {
|
sub SmarterCoffee_Get {
|
||||||
my ($hash, @param) = @_;
|
my ($hash, @param) = @_;
|
||||||
|
|
||||||
@ -858,7 +817,7 @@ sub SmarterCoffee_Notify($$) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sub SmarterCoffee_ReadConfiguration($) {
|
sub SmarterCoffee_ReadConfiguration($$) {
|
||||||
my ($hash) = @_;
|
my ($hash) = @_;
|
||||||
|
|
||||||
# Restoring extra strength
|
# Restoring extra strength
|
||||||
@ -873,7 +832,7 @@ sub SmarterCoffee_LogCommands($$) {
|
|||||||
if ($1 eq "yes") {
|
if ($1 eq "yes") {
|
||||||
Log3 $hash->{NAME}, 4, "Command :: Success [$command]; Message: $message";
|
Log3 $hash->{NAME}, 4, "Command :: Success [$command]; Message: $message";
|
||||||
} else {
|
} else {
|
||||||
Log3 $hash->{NAME}, 4, "Command :: Failed [$command]; Cause: $message";
|
Log3 $hash->{NAME}, 3, "Command :: Failed [$command]; Cause: $message";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1128,11 +1087,11 @@ sub SmarterCoffee_UpdateReadings($$;$) {
|
|||||||
|
|
||||||
my $changed = ReadingsVal($hash->{NAME}, $name, "##undefined") ne $value;
|
my $changed = ReadingsVal($hash->{NAME}, $name, "##undefined") ne $value;
|
||||||
if ($changed or $forceUpdate) {
|
if ($changed or $forceUpdate) {
|
||||||
readingsBulkUpdateIfChanged($hash, $name, $value);
|
readingsBulkUpdate($hash, $name, $value);
|
||||||
$updated = 1 if ($changed);
|
$updated = 1 if ($changed);
|
||||||
}
|
}
|
||||||
|
|
||||||
$updated = 1 if ($name eq "state" and $hash->{STATE} ne $value);
|
$updated = 1 if ($name eq "state" and ReadingsVal($name,'state','none') ne $value);
|
||||||
};
|
};
|
||||||
|
|
||||||
readingsBeginUpdate($hash);
|
readingsBeginUpdate($hash);
|
||||||
@ -1331,21 +1290,6 @@ sub SmarterCoffee_GetDevStateIcon {
|
|||||||
return $icon;
|
return $icon;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub SmarterCoffee_ReConnectTimer($) {
|
|
||||||
|
|
||||||
my $hash = shift;
|
|
||||||
|
|
||||||
|
|
||||||
if( defined($hash->{FD}) ) {
|
|
||||||
DevIo_Disconnected($hash);
|
|
||||||
DevIo_OpenDev($hash, 1, "SmarterCoffee_WritePending");
|
|
||||||
Log3 $hash->{NAME}, 4, "SmarterCoffee_ReConnectTimer - Socket Reconnected";
|
|
||||||
}
|
|
||||||
|
|
||||||
InternalTimer(gettimeofday() + 360, "SmarterCoffee_ReConnectTimer", $hash);
|
|
||||||
Log3 $hash->{NAME}, 4, "SmarterCoffee_ReConnectTimer - Call InternalTimer";
|
|
||||||
}
|
|
||||||
|
|
||||||
## -------------------------------------------------------------------------------------------------------------------
|
## -------------------------------------------------------------------------------------------------------------------
|
||||||
## Documentation follows
|
## Documentation follows
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user