mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-04-22 02:10:32 +00:00
82_LGTV_WebOS: version 1.0.0 add WakeOnLAN function
git-svn-id: https://svn.fhem.de/fhem/trunk@15094 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
a0295c3774
commit
b94f51058f
@ -1,5 +1,6 @@
|
|||||||
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
|
# 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.
|
# Do not insert empty lines here, update check depends on it.
|
||||||
|
- feature: 82_LGTV_WebOS: version 1.0.0 add WakeOnLAN function
|
||||||
- bugfix: 00_MQTT: fix Undef
|
- bugfix: 00_MQTT: fix Undef
|
||||||
- feature: 83_IOhomecontrol: new attribute setCmds
|
- feature: 83_IOhomecontrol: new attribute setCmds
|
||||||
- bugfix: 00_MQTT: added delete
|
- bugfix: 00_MQTT: added delete
|
||||||
|
@ -67,7 +67,7 @@ use Blocking;
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
my $version = "0.8.0";
|
my $version = "1.0.0";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -104,6 +104,7 @@ sub LGTV_WebOS_Presence($);
|
|||||||
sub LGTV_WebOS_PresenceRun($);
|
sub LGTV_WebOS_PresenceRun($);
|
||||||
sub LGTV_WebOS_PresenceDone($);
|
sub LGTV_WebOS_PresenceDone($);
|
||||||
sub LGTV_WebOS_PresenceAborted($);
|
sub LGTV_WebOS_PresenceAborted($);
|
||||||
|
sub LGTV_WebOS_WakeUp_Udp($@);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -165,7 +166,8 @@ my %openApps = (
|
|||||||
'ARDMediathek' => 'ard.mediathek',
|
'ARDMediathek' => 'ard.mediathek',
|
||||||
'Arte' => 'com.3827031.168353',
|
'Arte' => 'com.3827031.168353',
|
||||||
'WetterMeteo' => 'meteonews',
|
'WetterMeteo' => 'meteonews',
|
||||||
'Notificationcenter' => 'com.webos.app.notificationcenter'
|
'Notificationcenter' => 'com.webos.app.notificationcenter',
|
||||||
|
'Plex' => 'cdp-30'
|
||||||
);
|
);
|
||||||
|
|
||||||
my %openAppsPackageName = (
|
my %openAppsPackageName = (
|
||||||
@ -187,7 +189,8 @@ my %openAppsPackageName = (
|
|||||||
'ard.mediathek' => 'ARDMediathek',
|
'ard.mediathek' => 'ARDMediathek',
|
||||||
'com.3827031.168353' => 'Arte',
|
'com.3827031.168353' => 'Arte',
|
||||||
'meteonews' => 'WetterMeteo',
|
'meteonews' => 'WetterMeteo',
|
||||||
'com.webos.app.notificationcenter' => 'Notificationcenter'
|
'com.webos.app.notificationcenter' => 'Notificationcenter',
|
||||||
|
'cdp-30' => 'Plex'
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
@ -211,6 +214,8 @@ sub LGTV_WebOS_Initialize($) {
|
|||||||
$hash->{AttrList} = "disable:1 ".
|
$hash->{AttrList} = "disable:1 ".
|
||||||
"channelGuide:1 ".
|
"channelGuide:1 ".
|
||||||
"pingPresence:1 ".
|
"pingPresence:1 ".
|
||||||
|
"wakeOnLanMAC ".
|
||||||
|
"wakeOnLanBroadcast ".
|
||||||
$readingFnAttributes;
|
$readingFnAttributes;
|
||||||
|
|
||||||
|
|
||||||
@ -239,6 +244,7 @@ sub LGTV_WebOS_Define($$) {
|
|||||||
$hash->{helper}{device}{channelguide}{counter} = 0;
|
$hash->{helper}{device}{channelguide}{counter} = 0;
|
||||||
$hash->{helper}{device}{registered} = 0;
|
$hash->{helper}{device}{registered} = 0;
|
||||||
$hash->{helper}{device}{runsetcmd} = 0;
|
$hash->{helper}{device}{runsetcmd} = 0;
|
||||||
|
$hash->{helper}{device}{channelguide}{counter} = 'none';
|
||||||
|
|
||||||
|
|
||||||
Log3 $name, 3, "LGTV_WebOS ($name) - defined with host $host";
|
Log3 $name, 3, "LGTV_WebOS ($name) - defined with host $host";
|
||||||
@ -432,8 +438,13 @@ sub LGTV_WebOS_Set($@) {
|
|||||||
if($cmd eq 'off') {
|
if($cmd eq 'off') {
|
||||||
$uri = $lgCommands{powerOff};
|
$uri = $lgCommands{powerOff};
|
||||||
} elsif ($cmd eq 'on') {
|
} elsif ($cmd eq 'on') {
|
||||||
|
if( AttrVal($name,'wakeOnLanMAC','none') ne 'none' ) {
|
||||||
|
LGTV_WebOS_WakeUp_Udp($hash,AttrVal($name,'wakeOnLanMAC',0),AttrVal($name,'wakeOnLanBroadcast','255.255.255.255'));
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
$uri = $lgCommands{powerOn};
|
$uri = $lgCommands{powerOn};
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} elsif($cmd eq '3D') {
|
} elsif($cmd eq '3D') {
|
||||||
return "usage: 3D on/off" if( @args != 1 );
|
return "usage: 3D on/off" if( @args != 1 );
|
||||||
@ -549,7 +560,7 @@ sub LGTV_WebOS_Set($@) {
|
|||||||
|
|
||||||
} else {
|
} else {
|
||||||
my $list = "";
|
my $list = "";
|
||||||
$list .= "connect:noArg pairing:noArg screenMsg mute:on,off volume:slider,0,1,100 volumeUp:noArg volumeDown:noArg channelDown:noArg channelUp:noArg getServiceList:noArg on:noArg off:noArg launchApp:Maxdome,AmazonVideo,YouTube,Netflix,TV,GooglePlay,Browser,Chilieu,TVCast,Smartshare,Scheduler,Miracast,TVGuide,Timemachine,ARDMediathek,Arte,WetterMeteo,Notificationcenter 3D:on,off stop:noArg play:noArg pause:noArg rewind:noArg fastForward:noArg clearInputList:noArg input:$inputs channel";
|
$list .= "connect:noArg pairing:noArg screenMsg mute:on,off volume:slider,0,1,100 volumeUp:noArg volumeDown:noArg channelDown:noArg channelUp:noArg getServiceList:noArg on:noArg off:noArg launchApp:Maxdome,AmazonVideo,YouTube,Netflix,TV,GooglePlay,Browser,Chilieu,TVCast,Smartshare,Scheduler,Miracast,TVGuide,Timemachine,ARDMediathek,Arte,WetterMeteo,Notificationcenter,Plex 3D:on,off stop:noArg play:noArg pause:noArg rewind:noArg fastForward:noArg clearInputList:noArg input:$inputs channel";
|
||||||
return "Unknown argument $cmd, choose one of $list";
|
return "Unknown argument $cmd, choose one of $list";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -628,7 +639,7 @@ sub LGTV_WebOS_Read($) {
|
|||||||
my $buf;
|
my $buf;
|
||||||
|
|
||||||
|
|
||||||
Log3 $name, 4, "LGTV_WebOS ($name) - ReadFn gestartet";
|
Log3 $name, 4, "LGTV_WebOS ($name) - ReadFn started";
|
||||||
|
|
||||||
$len = sysread($hash->{CD},$buf,10240);
|
$len = sysread($hash->{CD},$buf,10240);
|
||||||
|
|
||||||
@ -640,7 +651,7 @@ sub LGTV_WebOS_Read($) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
unless( defined $buf) {
|
unless( defined $buf) {
|
||||||
Log3 $name, 3, "LGTV_WebOS ($name) - Keine Daten empfangen";
|
Log3 $name, 3, "LGTV_WebOS ($name) - no data received";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -807,7 +818,10 @@ sub LGTV_WebOS_ResponseProcessing($$) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
my $decode_json = decode_json(encode_utf8($json));
|
my $decode_json = decode_json(encode_utf8($json));
|
||||||
|
if($@){
|
||||||
|
Log3 $name, 3, "LGTV_WebOS ($name) - JSON error while request: $@";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
LGTV_WebOS_WriteReadings($hash,$decode_json);
|
LGTV_WebOS_WriteReadings($hash,$decode_json);
|
||||||
|
|
||||||
@ -825,6 +839,7 @@ sub LGTV_WebOS_WriteReadings($$) {
|
|||||||
my $name = $hash->{NAME};
|
my $name = $hash->{NAME};
|
||||||
my $mute;
|
my $mute;
|
||||||
my $response;
|
my $response;
|
||||||
|
my %channelList;
|
||||||
|
|
||||||
|
|
||||||
Log3 $name, 4, "LGTV_WebOS ($name) - Beginn Readings writing";
|
Log3 $name, 4, "LGTV_WebOS ($name) - Beginn Readings writing";
|
||||||
@ -1403,6 +1418,32 @@ sub LGTV_WebOS_PresenceAborted($) {
|
|||||||
Log3 $name, 4, "Sub LGTV_WebOS_PresenceAborted ($name) - The BlockingCall Process terminated unexpectedly. Timedout!";
|
Log3 $name, 4, "Sub LGTV_WebOS_PresenceAborted ($name) - The BlockingCall Process terminated unexpectedly. Timedout!";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub LGTV_WebOS_WakeUp_Udp($@) {
|
||||||
|
|
||||||
|
my ($hash,$mac_addr,$host,$port) = @_;
|
||||||
|
my $name = $hash->{NAME};
|
||||||
|
|
||||||
|
|
||||||
|
$port = 9 if (!defined $port || $port !~ /^\d+$/ );
|
||||||
|
|
||||||
|
my $sock = new IO::Socket::INET(Proto=>'udp') or die "socket : $!";
|
||||||
|
if(!$sock) {
|
||||||
|
Log3 $name, 3, "Sub LGTV_WebOS_WakeUp_Udp ($name) - Can't create WOL socket";
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
my $ip_addr = inet_aton($host);
|
||||||
|
my $sock_addr = sockaddr_in($port, $ip_addr);
|
||||||
|
$mac_addr =~ s/://g;
|
||||||
|
my $packet = pack('C6H*', 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, $mac_addr x 16);
|
||||||
|
|
||||||
|
setsockopt($sock, SOL_SOCKET, SO_BROADCAST, 1) or die "setsockopt : $!";
|
||||||
|
send($sock, $packet, 0, $sock_addr) or die "send : $!";
|
||||||
|
close ($sock);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
####### Presence Erkennung Ende ############
|
####### Presence Erkennung Ende ############
|
||||||
|
|
||||||
|
|
||||||
@ -1506,6 +1547,18 @@ sub LGTV_WebOS_PresenceAborted($) {
|
|||||||
current state of ping presence from TV. create a reading presence with values absent or present.
|
current state of ping presence from TV. create a reading presence with values absent or present.
|
||||||
</ul>
|
</ul>
|
||||||
</ul>
|
</ul>
|
||||||
|
<ul>
|
||||||
|
<ul>
|
||||||
|
<li>wakeOnLanMAC</li>
|
||||||
|
Network MAC Address of the LG TV Networkdevice.
|
||||||
|
</ul>
|
||||||
|
</ul>
|
||||||
|
<ul>
|
||||||
|
<ul>
|
||||||
|
<li>wakeOnLanBroadcast</li>
|
||||||
|
Broadcast Address of the Network - wakeOnLanBroadcast <network>.255
|
||||||
|
</ul>
|
||||||
|
</ul>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
=end html
|
=end html
|
||||||
@ -1597,6 +1650,22 @@ sub LGTV_WebOS_PresenceAborted($) {
|
|||||||
<ul>Mögliche Werte: 0 => keine zyklischen TV-Guide-Updates, 1 => zyklische TV-Guide-Updates</ul>
|
<ul>Mögliche Werte: 0 => keine zyklischen TV-Guide-Updates, 1 => zyklische TV-Guide-Updates</ul>
|
||||||
</ul>
|
</ul>
|
||||||
</ul>
|
</ul>
|
||||||
|
<ul>
|
||||||
|
<ul>
|
||||||
|
<ul>
|
||||||
|
<li>wakeOnLanMAC</li>
|
||||||
|
MAC Addresse der Netzwerkkarte vom LG TV
|
||||||
|
</ul>
|
||||||
|
</ul>
|
||||||
|
</ul>
|
||||||
|
<ul>
|
||||||
|
<ul>
|
||||||
|
<ul>
|
||||||
|
<li>wakeOnLanBroadcast</li>
|
||||||
|
Broadcast Netzwerkadresse - wakeOnLanBroadcast <netzwerk>.255
|
||||||
|
</ul>
|
||||||
|
</ul>
|
||||||
|
</ul>
|
||||||
<p><br /><br /><strong>Generierte Readings/Events:</strong></p>
|
<p><br /><br /><strong>Generierte Readings/Events:</strong></p>
|
||||||
<ul>
|
<ul>
|
||||||
<ul>
|
<ul>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user