diff --git a/roles/services/tasks/power_mqtt.yaml b/roles/services/tasks/power_mqtt.yaml index ce1604f..b8a3357 100644 --- a/roles/services/tasks/power_mqtt.yaml +++ b/roles/services/tasks/power_mqtt.yaml @@ -1,7 +1,12 @@ +--- +- name: Install dependencies + apt: + name: [python3-paho-mqtt, python3-requests] + - name: Install power-mqtt template: - src: power-mqtt.sh - dest: /var/lib/power-mqtt.sh + src: power-mqtt.py + dest: /var/lib/power-mqtt.py owner: root group: root mode: 0755 diff --git a/roles/services/templates/power-mqtt.py b/roles/services/templates/power-mqtt.py new file mode 100644 index 0000000..88e7fa8 --- /dev/null +++ b/roles/services/templates/power-mqtt.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 + +import paho.mqtt.client as mqtt +import paho.mqtt.subscribe as subscribe +from time import sleep +import requests + + +sdm630_host = '100.64.0.187' +mqtt_host = '{{ mqtt_internal_host }}' + + +client = mqtt.Client() +client.connect(mqtt_host, 1883, 60) + +while True: + sleep(1) + try: + data = requests.get(f'http://{sdm630_host}/api/v1/data').json() + client.publish('bitlair/power/total_kwh', data['total_power_import_kwh']) + client.publish('bitlair/power/All/now_w', data['active_power_w']) + client.publish('bitlair/power/L1/now_w', data['active_power_l1_w']) + client.publish('bitlair/power/L2/now_w', data['active_power_l2_w']) + client.publish('bitlair/power/L3/now_w', data['active_power_l3_w']) + except Exception as err: + print(err) + continue diff --git a/roles/services/templates/power-mqtt.service b/roles/services/templates/power-mqtt.service index a455acc..82529a0 100644 --- a/roles/services/templates/power-mqtt.service +++ b/roles/services/templates/power-mqtt.service @@ -6,11 +6,10 @@ After=network.target [Service] Type=simple -ExecStart=/bin/bash /var/lib/power-mqtt.sh +ExecStart=/var/lib/power-mqtt.py Restart=on-failure RestartSec=10s DynamicUser=true [Install] WantedBy=multi-user.target - diff --git a/roles/services/templates/power-mqtt.sh b/roles/services/templates/power-mqtt.sh deleted file mode 100644 index dbeb7b2..0000000 --- a/roles/services/templates/power-mqtt.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash - -# Managed by Ansible - -set -euo pipefail - -h="{{ mqtt_internal_host }}" - -while true; do - j=$(curl -s http://100.64.0.187/api/v1/data) - - mqtt-simple -h $h -p bitlair/power/total_kwh -m $(echo "$j" | jq .total_power_import_kwh) - mqtt-simple -h $h -p bitlair/power/All/now_w -m $(echo "$j" | jq .active_power_w) - mqtt-simple -h $h -p bitlair/power/L1/now_w -m $(echo "$j" | jq .active_power_l1_w) - mqtt-simple -h $h -p bitlair/power/L2/now_w -m $(echo "$j" | jq .active_power_l2_w) - mqtt-simple -h $h -p bitlair/power/L3/now_w -m $(echo "$j" | jq .active_power_l3_w) - - sleep 1 -done