diff --git a/FHEM/20_FRM_LCD.pm b/FHEM/20_FRM_LCD.pm index e90bcd949..f95699e61 100755 --- a/FHEM/20_FRM_LCD.pm +++ b/FHEM/20_FRM_LCD.pm @@ -30,6 +30,7 @@ FRM_LCD_Initialize($) $hash->{SetFn} = "FRM_LCD_Set"; $hash->{UndefFn} = "FRM_LCD_Undef"; $hash->{AttrFn} = "FRM_LCD_Attr"; + $hash->{StateFn} = "FRM_LCD_State"; $hash->{AttrList} = "IODev model backLight:on,off blink:on,off autoClear:on,off autoBreak:on,off loglevel:0,1,2,3,4,5 $main::readingFnAttributes"; # autoScroll:on,off direction:leftToRight,rightToLeft do not work reliably @@ -188,6 +189,18 @@ sub FRM_LCD_Set(@) { } } +sub FRM_LCD_State($$$$) +{ + my ($hash, $tim, $sname, $sval) = @_; + +STATEHANDLER: { + $sname eq "text" and do { + FRM_LCD_Set($hash,$hash->{NAME},$sname,$sval); + last; + } + } +} + sub FRM_LCD_Undef($$) { diff --git a/FHEM/20_FRM_OUT.pm b/FHEM/20_FRM_OUT.pm index da9d8cc57..9562c1ac4 100755 --- a/FHEM/20_FRM_OUT.pm +++ b/FHEM/20_FRM_OUT.pm @@ -17,6 +17,7 @@ FRM_OUT_Initialize($) $hash->{DefFn} = "FRM_Client_Define"; $hash->{InitFn} = "FRM_OUT_Init"; $hash->{UndefFn} = "FRM_OUT_Undef"; + $hash->{StateFn} = "FRM_OUT_State"; $hash->{AttrList} = "IODev loglevel:0,1,2,3,4,5 $main::readingFnAttributes"; } @@ -27,6 +28,10 @@ FRM_OUT_Init($$) my ($hash,$args) = @_; my $ret = FRM_Init_Pin_Client($hash,$args,PIN_OUTPUT); return $ret if (defined $ret); + my $name = $hash->{NAME}; + if (! (defined AttrVal($name,"stateFormat",undef))) { + $main::attr{$name}{"stateFormat"} = "value"; + } main::readingsSingleUpdate($hash,"state","Initialized",1); return undef; } @@ -48,9 +53,9 @@ FRM_OUT_Set($@) return SetExtensions($hash, $list, $name, @a); } my $iodev = $hash->{IODev}; + main::readingsSingleUpdate($hash,"value",$cmd, 1); if (defined $iodev and defined $iodev->{FirmataDevice} and defined $iodev->{FD}) { $iodev->{FirmataDevice}->digital_write($hash->{PIN},$value); - main::readingsSingleUpdate($hash,"state",$cmd, 1); } else { return $name." no IODev assigned" if (!defined $iodev); return $name.", ".$iodev->{NAME}." is not connected"; @@ -58,6 +63,18 @@ FRM_OUT_Set($@) return undef; } +sub FRM_OUT_State($$$$) +{ + my ($hash, $tim, $sname, $sval) = @_; + +STATEHANDLER: { + $sname eq "value" and do { + FRM_OUT_Set($hash,$hash->{NAME},$sval); + last; + } + } +} + sub FRM_OUT_Undef($$) { diff --git a/FHEM/20_FRM_PWM.pm b/FHEM/20_FRM_PWM.pm index 9394494a7..a5b7e31f1 100755 --- a/FHEM/20_FRM_PWM.pm +++ b/FHEM/20_FRM_PWM.pm @@ -21,6 +21,7 @@ FRM_PWM_Initialize($) $hash->{DefFn} = "FRM_Client_Define"; $hash->{InitFn} = "FRM_PWM_Init"; $hash->{UndefFn} = "FRM_PWM_Undef"; + $hash->{StateFn} = "FRM_PWM_State"; $hash->{AttrList} = "IODev loglevel:0,1,2,3,4,5 $main::readingFnAttributes"; } @@ -32,7 +33,11 @@ FRM_PWM_Init($$) my $ret = FRM_Init_Pin_Client($hash,$args,PIN_PWM); return $ret if (defined $ret); my $firmata = $hash->{IODev}->{FirmataDevice}; - $main::defs{$hash->{NAME}}{resolution}=$firmata->{metadata}{pwm_resolutions}{$hash->{PIN}} if (defined $firmata->{metadata}{pwm_resolutions}); + my $name = $hash->{NAME}; + $main::defs{$name}{resolution}=$firmata->{metadata}{pwm_resolutions}{$hash->{PIN}} if (defined $firmata->{metadata}{pwm_resolutions}); + if (! (defined AttrVal($name,"stateFormat",undef))) { + $main::attr{$name}{"stateFormat"} = "value"; + } main::readingsSingleUpdate($hash,"state","Initialized",1); return undef; } @@ -47,9 +52,9 @@ FRM_PWM_Set($@) my $command = $a[1]; my $value = $a[2]; my $iodev = $hash->{IODev}; + main::readingsSingleUpdate($hash,"value",$value, 1); if (defined $iodev and defined $iodev->{FirmataDevice} and defined $iodev->{FD}) { $iodev->{FirmataDevice}->analog_write($hash->{PIN},$value); - main::readingsSingleUpdate($hash,"state",$value, 1); } else { return $hash->{NAME}." no IODev assigned" if (!defined $iodev); return $hash->{NAME}.", ".$iodev->{NAME}." is not connected"; @@ -57,6 +62,18 @@ FRM_PWM_Set($@) return undef; } +sub FRM_PWM_State($$$$) +{ + my ($hash, $tim, $sname, $sval) = @_; + +STATEHANDLER: { + $sname eq "value" and do { + FRM_PWM_Set($hash,$hash->{NAME},$sval); + last; + } + } +} + sub FRM_PWM_Undef($$) {