Created
December 23, 2021 14:31
-
-
Save vschlegel/5777dfa681ac89fe0f0b9d8361ae3144 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
import socket | |
# Communication | |
ip = "192.168.50.2" | |
port= 12345 | |
#inverters = ("01", "02", "03") | |
inverters = ("01") | |
# Parameter Set (Code, Measurement, Unit, Factor) | |
parameter = [ | |
("KDY", "Energy Day", "Wh", 100), | |
("KMT", "Energy Month", "kWh", 1), | |
("KYR", "Energy Year", "kWh", 1), | |
("KT0", "Energy Total", "kWh", 1), | |
("UDC", "DC Voltage", "mV", 100), | |
("IDC", "DC Current", "mA", 10), | |
("UAC", "AC Voltage", "mV", 100), | |
("IAC", "AC Current", "mA", 10), | |
("PAC", "AC Power", "mW", 500) | |
] | |
def solar(host, port, inverters, parameter): | |
for inverter in inverters: | |
parameters = ';'.join([x[0] for x in parameter]) # generate parameter list (looks like KDY;KMT;KYR) | |
length = f"{19 + len(parameters):X}" # length in HEX | |
request = f"FB;{inverter};{length}|64:{parameters}|" # build request string | |
checksum = sum([ord(x) for x in request]) # sum of all unicode codes in request | |
checksum = f"{checksum:0>4X}" # convert to 4 digit, 0-padded HEX | |
request += checksum # append checksum | |
print(request) | |
# clientSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) | |
# clientSocket.connect((host, port)) | |
# clientSocket.send(request.encode()) | |
# response = clientSocket.recv(port).decode() | |
# response = response.split(':')[1].split('|')[0].split(';') | |
# response = [{pair.split('=')[0] : pair.split('=')[1]} for pair in response] | |
# return response | |
solar(ip, port, inverters, parameter) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment