Das skript lieset die power vom shelly 3EM aus und steuert mein akkulader netzteil über seriell auf nulleinspeisung.
Netzteil Kiprim DC310S (Owon relabel) 30V 10A 80 eur auf amazon. Der shelly 3EM ist im schaltkasten und geht über WiFi.
Bin nicht so der python profi, da geht vieles sicher einfacher. Konstruktive kommentare wilkommen.
import time import urllib.request as request import json import serial port = 'com7' shelly = '192.168.178.47' def getshelly(): with request.urlopen('http://' + shelly + '/status') as response: if response.getcode() == 200: source = response.read() data = json.loads(source) return float(data["total_power"]) else: print('shelly error') return 0 actpower = 0.0 powerreq = 0.0 chargeamps = 0.0 chargevolt = 27.2 ser = serial.Serial(port, 115200, timeout=0) ser.write('*idn?\r\n'.encode('utf-8')) time.sleep(0.2) rx = ser.readline() if len(rx) >= 1: print(rx.decode("utf-8")) # ser.write('MEAS:VOLT?\r\n'.encode('utf-8')) # time.sleep(0.2) # rx = ser.readline() # if len(rx) >= 1: # chargevolt = round(float(rx.decode("utf-8").strip()),2) # print('volt ' + str(chargevolt)) while True: actpower = getshelly() print('shellypwr ' + str(actpower)) ser.write('MEAS:CURR?\r\n'.encode('utf-8')) time.sleep(0.2) rx = ser.readline() if len(rx) >= 1: chargeamps = round(float(rx.decode("utf-8").strip()),2) print('amps ' + str(chargeamps)) powerreq = round(chargeamps * chargevolt - actpower,0) print('requestpwr ' + str(powerreq)) if powerreq > 1 : reqamps = round(powerreq / chargevolt,2) if reqamps > 10: reqamps = 10 else: reqamps = 0 print('reqamps ' + str(reqamps)) ampstr = 'CURR ' + str(reqamps) + '\r\n' ser.write(ampstr.encode('utf-8')) time.sleep(5.0) print() # netzteil protokoll, Kiprim/Owon 30V 10A, 80 eur. # id = #*idn? # reset = *rst # getvolt = MEAS:VOLT? # getcurrent = MEAS:CURR? # getpower = MEAS:POW? # on/off = OUTP ON or OUTP OFF # set current = CURR 1.3 (in A) # set voltage = VOLT 10.2 (in V)