|
|
@ -0,0 +1,47 @@ |
|
|
|
#!/usr/bin/env python |
|
|
|
|
|
|
|
import socket |
|
|
|
|
|
|
|
class nec_control: |
|
|
|
def __init__(self, address, id, port=7142): |
|
|
|
self.__id = (id + int("40", 16)).to_bytes(1, "big") |
|
|
|
self.__socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) |
|
|
|
self.__socket.connect((address, port)) |
|
|
|
|
|
|
|
def __genmsg(self, msgbody, msglength): |
|
|
|
# Header |
|
|
|
message = b"" |
|
|
|
message += b"\x01\x30" # SOH (Start Of Header) |
|
|
|
message += self.__id # Destination (Monitor ID) |
|
|
|
message += b"\x30" # Source (for controller - always 0x30h (ASCII '0')) |
|
|
|
message += b"\x41" # Message type |
|
|
|
message += msglength # Message length in hex (example: 0x3Ah must be encoded as ASCII characters '3' and 'A') |
|
|
|
|
|
|
|
# Message |
|
|
|
message += b"\x02" # STX (Start of Message) |
|
|
|
message += msgbody |
|
|
|
message += b"\x03" # ETX (End of message) |
|
|
|
|
|
|
|
# Check code |
|
|
|
xor = message[1] |
|
|
|
for i in range (2, len(message)): |
|
|
|
xor = xor ^ message[i] |
|
|
|
message += bytes([xor]) |
|
|
|
|
|
|
|
# Delimiter |
|
|
|
message += b"\x0d" # CR (carriage return) |
|
|
|
|
|
|
|
return(message) |
|
|
|
|
|
|
|
def powerOn(self): |
|
|
|
msgbody = b"\x43\x32\x30\x33\x44\x36\x30\x30\x30\x31" |
|
|
|
msglength = b"0C" |
|
|
|
message = self.__genmsg(msgbody, msglength) |
|
|
|
self.__socket.send(message) |
|
|
|
|
|
|
|
def powerOff(self): |
|
|
|
msgbody = b"\x43\x32\x30\x33\x44\x36\x30\x30\x30\x34" |
|
|
|
msglength = b"0C" |
|
|
|
message = self.__genmsg(msgbody, msglength) |
|
|
|
self.__socket.send(message) |
|
|
|
|