diff --git a/fhem/CHANGED b/fhem/CHANGED index 194056530..60c092246 100644 --- a/fhem/CHANGED +++ b/fhem/CHANGED @@ -1,5 +1,7 @@ # Add changes at the top of the list. Keep it in ASCII, and 80-char wide. # Do not insert empty lines here, update check depends on it. + - new: 39_siri.pm: configuration of fhem/siri integration + 39_alexa.pm: configuration of fhem/alexa integration - feature: 30_pilight_contact: new module to handle pilight contact sensors - feature: 59_Weather: attribute disable - new: 10_EQ3BT: Support EQ3 Bluetooth thermostat diff --git a/fhem/FHEM/39_alexa.pm b/fhem/FHEM/39_alexa.pm new file mode 100644 index 000000000..6ed4fede3 --- /dev/null +++ b/fhem/FHEM/39_alexa.pm @@ -0,0 +1,168 @@ + +# $Id$ + +package main; + +use strict; +use warnings; + +#use IO::Socket::INET; + +sub +alexa_Initialize($) +{ + my ($hash) = @_; + + #$hash->{ReadFn} = "alexa_Read"; + + $hash->{DefFn} = "alexa_Define"; + #$hash->{NOTIFYDEV} = "global"; + #$hash->{NotifyFn} = "alexa_Notify"; + $hash->{UndefFn} = "alexa_Undefine"; + #$hash->{SetFn} = "alexa_Set"; + #$hash->{GetFn} = "alexa_Get"; + #$hash->{AttrFn} = "alexa_Attr"; + $hash->{AttrList} = "$readingFnAttributes"; +} + +##################################### + +sub +alexa_Define($$) +{ + my ($hash, $def) = @_; + + my @a = split("[ \t][ \t]*", $def); + + return "Usage: define alexa" if(@a != 2); + + my $name = $a[0]; + $hash->{NAME} = $name; + + my $d = $modules{$hash->{TYPE}}{defptr}; + return "$hash->{TYPE} device already defined as $d->{NAME}." if( defined($d) ); + $modules{$hash->{TYPE}}{defptr} = $hash; + + addToAttrList("$hash->{TYPE}Name"); + + $hash->{STATE} = 'active'; + + return undef; +} + +sub +alexa_Notify($$) +{ + my ($hash,$dev) = @_; + + return if($dev->{NAME} ne "global"); + return if(!grep(m/^INITIALIZED|REREADCFG$/, @{$dev->{CHANGED}})); + + return undef; +} + +sub +alexa_Undefine($$) +{ + my ($hash, $arg) = @_; + + delete $modules{$hash->{TYPE}}{defptr}; + + return undef; +} + +sub +alexa_Set($$@) +{ + my ($hash, $name, $cmd, @args) = @_; + + my $list = ""; + + return "Unknown argument $cmd, choose one of $list"; +} + +sub +alexa_Get($$@) +{ + my ($hash, $name, $cmd) = @_; + + my $list = ""; + + return "Unknown argument $cmd, choose one of $list"; +} + +sub +alexa_Parse($$;$) +{ + my ($hash,$data,$peerhost) = @_; + my $name = $hash->{NAME}; +} + +sub +alexa_Read($) +{ + my ($hash) = @_; + my $name = $hash->{NAME}; + + my $len; + my $buf; + + $len = $hash->{CD}->recv($buf, 1024); + if( !defined($len) || !$len ) { +Log 1, "!!!!!!!!!!"; + return; + } + + alexa_Parse($hash, $buf, $hash->{CD}->peerhost); +} + +sub +alexa_Attr($$$) +{ + my ($cmd, $name, $attrName, $attrVal) = @_; + + my $orig = $attrVal; + + my $hash = $defs{$name}; + if( $attrName eq "disable" ) { + } + + if( $cmd eq 'set' ) { + if( $orig ne $attrVal ) { + $attr{$name}{$attrName} = $attrVal; + return $attrName ." set to ". $attrVal; + } + } + + return; +} + + +1; + +=pod +=item summary Module to control the FHEM/Alexa integration +=item summary_DE Modul zur Konfiguration der FHEM/Alexa Integration +=begin html + + +

alexa

+
+ +=end html +=cut diff --git a/fhem/FHEM/39_siri.pm b/fhem/FHEM/39_siri.pm new file mode 100644 index 000000000..9f570be6b --- /dev/null +++ b/fhem/FHEM/39_siri.pm @@ -0,0 +1,168 @@ + +# $Id$ + +package main; + +use strict; +use warnings; + +#use IO::Socket::INET; + +sub +siri_Initialize($) +{ + my ($hash) = @_; + + #$hash->{ReadFn} = "siri_Read"; + + $hash->{DefFn} = "siri_Define"; + #$hash->{NOTIFYDEV} = "global"; + #$hash->{NotifyFn} = "siri_Notify"; + $hash->{UndefFn} = "siri_Undefine"; + #$hash->{SetFn} = "siri_Set"; + #$hash->{GetFn} = "siri_Get"; + #$hash->{AttrFn} = "siri_Attr"; + $hash->{AttrList} = "$readingFnAttributes"; +} + +##################################### + +sub +siri_Define($$) +{ + my ($hash, $def) = @_; + + my @a = split("[ \t][ \t]*", $def); + + return "Usage: define siri" if(@a != 2); + + my $name = $a[0]; + $hash->{NAME} = $name; + + my $d = $modules{$hash->{TYPE}}{defptr}; + return "$hash->{TYPE} device already defined as $d->{NAME}." if( defined($d) ); + $modules{$hash->{TYPE}}{defptr} = $hash; + + addToAttrList("$hash->{TYPE}Name"); + + $hash->{STATE} = 'active'; + + return undef; +} + +sub +siri_Notify($$) +{ + my ($hash,$dev) = @_; + + return if($dev->{NAME} ne "global"); + return if(!grep(m/^INITIALIZED|REREADCFG$/, @{$dev->{CHANGED}})); + + return undef; +} + +sub +siri_Undefine($$) +{ + my ($hash, $arg) = @_; + + delete $modules{$hash->{TYPE}}{defptr}; + + return undef; +} + +sub +siri_Set($$@) +{ + my ($hash, $name, $cmd, @args) = @_; + + my $list = ""; + + return "Unknown argument $cmd, choose one of $list"; +} + +sub +siri_Get($$@) +{ + my ($hash, $name, $cmd) = @_; + + my $list = ""; + + return "Unknown argument $cmd, choose one of $list"; +} + +sub +siri_Parse($$;$) +{ + my ($hash,$data,$peerhost) = @_; + my $name = $hash->{NAME}; +} + +sub +siri_Read($) +{ + my ($hash) = @_; + my $name = $hash->{NAME}; + + my $len; + my $buf; + + $len = $hash->{CD}->recv($buf, 1024); + if( !defined($len) || !$len ) { +Log 1, "!!!!!!!!!!"; + return; + } + + siri_Parse($hash, $buf, $hash->{CD}->peerhost); +} + +sub +siri_Attr($$$) +{ + my ($cmd, $name, $attrName, $attrVal) = @_; + + my $orig = $attrVal; + + my $hash = $defs{$name}; + if( $attrName eq "disable" ) { + } + + if( $cmd eq 'set' ) { + if( $orig ne $attrVal ) { + $attr{$name}{$attrName} = $attrVal; + return $attrName ." set to ". $attrVal; + } + } + + return; +} + + +1; + +=pod +=item summary Module to control the FHEM/Siri integration +=item summary_DE Modul zur Konfiguration der FHEM/Siri Integration +=begin html + + +

siri

+
+ +=end html +=cut