Created
November 17, 2015 09:55
-
-
Save justinatomatic/5f31eed9609ce87a03f8 to your computer and use it in GitHub Desktop.
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 socket | |
import time | |
import sys | |
import binascii | |
import logging | |
logging.basicConfig(format='%(asctime)s %(message)s',level=logging.INFO) | |
def reverseMAC(MAC): | |
hexpairs = [0, 2, 4, 6, 8, 10] | |
rmac = "" | |
for x in hexpairs: | |
rmac = MAC[x:x+2] + rmac | |
logging.info( 'Reverse MAC ' + rmac) | |
return rmac | |
def switchOrvibo(IPAddress, MAC, io): | |
UDP_IP = IPAddress | |
UDP_PORT = 10000 | |
HOST = '' # Symbolic name meaning all available interfaces | |
PORT = 10000 # Arbitrary non-privileged port | |
mac = MAC | |
rmac = reverseMAC(MAC) | |
twenties = '202020202020' | |
subscribe = '6864001e636C' | |
power = '686400176463' | |
on = '0000000001' | |
off = '0000000000' | |
# Datagram (udp) socket | |
try : | |
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) | |
except socket.error as msg : | |
logging.error('Failed to create socket. Error Code : ' + str(msg[0]) + ' Message ' + msg[1]) | |
# Bind socket to local host and port | |
try: | |
s.bind((HOST, PORT)) | |
except socket.error as msg : | |
logging.error('Bind failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1]) | |
try: | |
PACKETDATA = bytes.fromhex(subscribe + mac + twenties + rmac + twenties) | |
s.sendto(PACKETDATA, (UDP_IP, UDP_PORT)) | |
logging.info('SUBSCRIBE package sent') | |
except socket.error as msg : | |
logging.error('Send failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1]) | |
time.sleep(1) | |
try: | |
d = s.recvfrom(24) | |
reply = binascii.hexlify(bytearray(d[0])) | |
logging.info(reply) | |
except socket.error as msg : | |
logging.error('Receive failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1]) | |
try: | |
if (io == 0): | |
s.sendto(bytes.fromhex(power + mac + twenties + off), (UDP_IP, UDP_PORT)) | |
logging.info('POWER Off package sent') | |
else: | |
s.sendto(bytes.fromhex(power + mac + twenties + on), (UDP_IP, UDP_PORT)) | |
logging.info('POWER On package sent') | |
except socket.error as msg : | |
logging.error('Send failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1]) | |
try: | |
d = s.recvfrom(24) | |
reply = binascii.hexlify(bytearray(d[0])) | |
logging.info(reply) | |
except socket.error as msg : | |
logging.error('Receive failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1]) | |
switchOrvibo('192.168.xx.xx','aabbccddeeff',0) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment