############################################# package main; use strict; use warnings; use Device::Firmata; use Device::Firmata::Constants qw/ :all /; use SetExtensions; ##################################### sub FRM_OUT_Initialize($) { my ($hash) = @_; $hash->{SetFn} = "FRM_OUT_Set"; $hash->{DefFn} = "FRM_Client_Define"; $hash->{InitFn} = "FRM_OUT_Init"; $hash->{UndefFn} = "FRM_OUT_Undef"; $hash->{AttrList} = "IODev loglevel:0,1,2,3,4,5 $main::readingFnAttributes"; } sub FRM_OUT_Init($$) { my ($hash,$args) = @_; my $ret = FRM_Init_Pin_Client($hash,$args,PIN_OUTPUT); return $ret if (defined $ret); main::readingsSingleUpdate($hash,"state","Initialized",1); return undef; } sub FRM_OUT_Set($@) { my ($hash, @a) = @_; my $name = $hash->{NAME}; shift @a; my $cmd = $a[0]; my $value; if ($cmd eq "on") { $value=PIN_HIGH; } elsif ($cmd eq "off") { $value=PIN_LOW; } else { my $list = "on off"; return SetExtensions($hash, $list, $name, @a); } my $iodev = $hash->{IODev}; 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"; } return undef; } sub FRM_OUT_Undef($$) { my ($hash, $name) = @_; } 1; =pod =begin html

FRM_OUT


=end html =cut