-
-
Save dim-geo/f032161327e17a19d469a77440e8a2bc to your computer and use it in GitHub Desktop.
Wake up post 2016 Philips TV's using Wake on Lan (on Wifi, WoWLAN)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python3 | |
import struct | |
import re | |
import socket | |
import sys | |
import subprocess | |
#input mac | |
MAC = '' | |
def command(argument): | |
#print(argument) | |
try: | |
data=subprocess.run(argument.split(),check=True,capture_output=True,encoding="utf-8") | |
return data | |
except: | |
raise | |
def wake_on_lan(mac): | |
if len(mac) == 12: | |
pass | |
elif len(mac) == 12 + 5: | |
mac = mac.replace(mac[2], '') | |
else: | |
raise ValueError('Incorrect MAC address format') | |
data = ''.join(['FFFFFFFFFFFF', mac * 16]) | |
# Split up the hex values and pack. | |
send_data = b'' | |
for i in range(0, len(data), 2): | |
send_data = b''.join([send_data, struct.pack('B', int(data[i: i + 2], 16))]) | |
# Broadcast it to the LAN. | |
for _ in range(15): | |
sock = socket.socket(socket.AF_INET , socket.SOCK_DGRAM) | |
#maybe you need to send the packet from ip that belogns to the same subnet as the tv | |
#sock.bind(('192.168.x.x',0)) | |
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) | |
#You must use this broadcast IP | |
sock.sendto(send_data, ('255.255.255.255', 9)) | |
#After WOL, you need to issue remote command to wake the TV, via pylips. | |
#So the flowto wake the TV, should be: | |
#wol until ping works, then check powerstate | |
#if powerstate is ok, then power it on | |
if __name__ == '__main__': | |
# mac = get_mac_address(sys.argv[1]) | |
#print(mac) | |
flag=True | |
while flag: | |
#print(flag) | |
try: | |
#modify IP to your TV | |
print(command('ping -c1 192.168.x.x').stdout) | |
#check state | |
data=command('python3 /root/pylips/pylips.py --command powerstate') | |
print(data.stdout) | |
if "On" in data.stdout: | |
flag=False | |
continue | |
if "Standby" not in data.stdout: | |
continue | |
data=command('python3 /root/pylips/pylips.py --command standby') | |
print(data) | |
if 'Ok' in data.stdout: | |
flag=False | |
except: | |
for _ in range(20): | |
wake_on_lan(MAC) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment