Skip to content

Instantly share code, notes, and snippets.

@vschlegel
Created December 23, 2021 14:31
Show Gist options
  • Save vschlegel/5777dfa681ac89fe0f0b9d8361ae3144 to your computer and use it in GitHub Desktop.
Save vschlegel/5777dfa681ac89fe0f0b9d8361ae3144 to your computer and use it in GitHub Desktop.
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