Skip to content

Instantly share code, notes, and snippets.

@justinatomatic
Created November 17, 2015 09:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save justinatomatic/5f31eed9609ce87a03f8 to your computer and use it in GitHub Desktop.
Save justinatomatic/5f31eed9609ce87a03f8 to your computer and use it in GitHub Desktop.
#!/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