add mqtt part and compose file

This commit is contained in:
Stefan Regnery 2023-09-19 11:18:05 +02:00
parent 8e99fbe529
commit 970888ebfa
5 changed files with 31 additions and 5 deletions

View File

@ -1,10 +1,11 @@
FROM python:3.10 FROM python:3.10
RUN adduser --disabled-password --gecos "" python RUN adduser --disabled-password --gecos "" python
ENV PATH="/home/python/.local/bin:$PATH"
USER python USER python
COPY *.py requirements.txt / COPY *.py requirements.txt /
RUN pip --disable-pip-version-check install -r requirements.txt RUN pip --disable-pip-version-check install -r requirements.txt
ENTRYPOINT ["python", "run.py"] ENTRYPOINT ["python", "run.py"]

View File

@ -1,2 +1,10 @@
[apsystems]
username = "" username = ""
password = "" password = ""
[mqtt]
username = ""
password = ""
broker = ""
port = 1883
topic = "ez1cloud2mqtt"

7
docker-compose.yml Normal file
View File

@ -0,0 +1,7 @@
version: "3.9"
services:
ez1cloud2mqtt:
image: ez1cloud2mqtt
build: .
volumes:
- ./config.toml:/config.toml

View File

@ -1,2 +1,3 @@
toml==0.10.2 toml==0.10.2
requests~=2.31.0 requests~=2.31.0
paho-mqtt~=1.6.1

13
run.py
View File

@ -1,6 +1,7 @@
import asyncio import asyncio
import os import os
import toml import toml
import paho.mqtt.client as mqtt
from CloudConnection import CloudConnection from CloudConnection import CloudConnection
from Inverter import Inverter from Inverter import Inverter
@ -11,7 +12,7 @@ async def main():
with open("config.toml", "r") as f: with open("config.toml", "r") as f:
config = toml.load(f) config = toml.load(f)
connection = CloudConnection(config["username"], config["password"]) connection = CloudConnection(config["apsystems"]["username"], config["apsystems"]["password"])
connection.generate_user_token() connection.generate_user_token()
inverter = connection.get_inverter() inverter = connection.get_inverter()
devices = [] devices = []
@ -22,9 +23,17 @@ async def main():
for device in devices: for device in devices:
asyncio.create_task(device.start()) asyncio.create_task(device.start())
mqtt_client = mqtt.Client()
mqtt_client.username_pw_set(config["mqtt"]["username"], config["mqtt"]["password"])
mqtt_client.connect(config["mqtt"]["broker"], config["mqtt"]["port"])
while True: while True:
item = await queue.get() item = await queue.get()
print(item) for i in item.data:
return_code, _ = mqtt_client.publish(f"{config['mqtt']['topic']}/{item.name}/{i}", item.data[i])
if return_code == 4:
print("Invalid credentials, check your configuration.")
exit(1)
if __name__ == '__main__': if __name__ == '__main__':