Files
chargeman/chargeman.py
T
2026-11-11 18:52:40 +01:00

136 lines
3.0 KiB
Python
Executable File

from queue import SimpleQueue
import time
import threading
import configparser
import atexit
import logging
import logging.handlers
import tibberclient
import victronclient
import controller
import mqtthandler
queue = SimpleQueue()
queue_handler = logging.handlers.QueueHandler(queue)
listener = logging.handlers.QueueListener(
queue,
logging.StreamHandler(),
)
logger = logging.getLogger('main')
logger.addHandler(queue_handler)
formatter = logging.Formatter('[%(asctime)s] %(message)s')
queue_handler.setFormatter(formatter)
logging.basicConfig(level=logging.INFO)
logger.info("Chargeman v0.2 starting")
config = configparser.ConfigParser()
config.read('config.ini')
if not 'tibber' in config:
raise Exception("Missing section tibber in config")
if not 'key' in config['tibber']:
raise Exception("Missing tibber key in config")
victronconn = victronclient.client()
tibber = tibberclient.client(config['tibber']['key'])
cm = controller.chargeman_controller(victronconn,tibber)
mqtt = mqtthandler.handler(cm)
if 'battery_total' in config:
try:
cm.set_battery_total_net_delivery(float(config['battery_total']['net_delivery']))
except:
logger.error("Unable to load net_delivery {}".format(config['battery_total']['net_delivery']))
exit()
try:
cm.set_battery_total_net_usage(float(config['battery_total']['net_usage']))
except:
logger.error("Unable to load net_usage {}".format(config['battery_total']['net_usage']))
exit()
if 'status' in config:
logger.info("Chargemode loaded: {}".format(int(config['status']['chargemode'])))
cm.set_chargemode(controller.Chargemode(int(config['status']['chargemode'])))
if 'chargevalue' in config['status']:
logger.info("Chargevalue loaded: {}".format(int(config['status']['chargevalue'])))
cm.set_chargevalue(int(config['status']['chargevalue']))
if 'valuekwh' in config['status']:
logger.info("valuekwh loaded: {}".format(float(config['status']['valuekwh'])))
cm.set_chargevaluekwh(float(config['status']['valuekwh']))
lasthour = -1
lock = threading.Lock()
def update():
logger.debug("Run update")
victronconn.update()
cm.update()
config['battery_total'] = {}
config['battery_total']['net_usage'] = str(cm.get_battery_total_net_usage())
config['battery_total']['net_delivery'] = str(cm.get_battery_total_net_delivery())
config['status'] = {}
config['status']['chargemode'] = str(cm.get_chargemode_int())
config['status']['chargevalue'] = str(cm.get_chargevalue())
config['status']['valuekwh'] = str(cm.get_chargevaluekwh())
with open('config.ini', 'w') as configfile:
config.write(configfile)
pass
def main():
while True:
update()
time.sleep(10)
#pub=threading.Thread(target=publishing)
sub=threading.Thread(target=mqtt.subscribing)
main=threading.Thread(target=main)
listener.start()
sub.start()
tibber.start()
main.start()
atexit.register(listener.stop)