From 24980f5e7e309222c633ea1094631758e5df3873 Mon Sep 17 00:00:00 2001 From: polyfloyd Date: Sun, 3 Dec 2023 14:12:40 +0100 Subject: [PATCH] services: Add SMD630 to MQTT glue script --- .../templates/mqtt_exporter_config.yaml | 1 + .../templates/public-bridge.conf | 1 + roles/services/handlers/main.yaml | 6 +++++ roles/services/tasks/main.yaml | 3 +++ roles/services/tasks/power_mqtt.yaml | 25 +++++++++++++++++++ roles/services/templates/power-mqtt.service | 16 ++++++++++++ roles/services/templates/power-mqtt.sh | 19 ++++++++++++++ 7 files changed, 71 insertions(+) create mode 100644 roles/services/tasks/power_mqtt.yaml create mode 100644 roles/services/templates/power-mqtt.service create mode 100644 roles/services/templates/power-mqtt.sh diff --git a/roles/monitoring/templates/mqtt_exporter_config.yaml b/roles/monitoring/templates/mqtt_exporter_config.yaml index 26df1ba..e77d293 100644 --- a/roles/monitoring/templates/mqtt_exporter_config.yaml +++ b/roles/monitoring/templates/mqtt_exporter_config.yaml @@ -8,6 +8,7 @@ prometheus: export: - subscribe: bitlair/# - subscribe: bitlair/climate/+location/# + - subscribe: bitlair/power/+group/# - subscribe: bitlair/wifi/+ssid/# - subscribe: bitlair/state diff --git a/roles/mqtt-internal/templates/public-bridge.conf b/roles/mqtt-internal/templates/public-bridge.conf index 0dc4b5d..45601b1 100644 --- a/roles/mqtt-internal/templates/public-bridge.conf +++ b/roles/mqtt-internal/templates/public-bridge.conf @@ -13,6 +13,7 @@ topic bitlair/music/+/state out topic bitlair/music/+/volume out topic bitlair/photos out topic bitlair/pos/product out +topic bitlair/power/# out topic bitlair/state out topic bitlair/state/djo out topic bitlair/wifi/+/online out diff --git a/roles/services/handlers/main.yaml b/roles/services/handlers/main.yaml index 3a1e168..3c62a74 100644 --- a/roles/services/handlers/main.yaml +++ b/roles/services/handlers/main.yaml @@ -54,3 +54,9 @@ name: wifi-mqtt state: restarted daemon_reload: true + +- name: restart power-mqtt + systemd: + name: power-mqtt + state: restarted + daemon_reload: true diff --git a/roles/services/tasks/main.yaml b/roles/services/tasks/main.yaml index f299b43..6cdbbdc 100644 --- a/roles/services/tasks/main.yaml +++ b/roles/services/tasks/main.yaml @@ -19,3 +19,6 @@ - tags: services_wifi_mqtt import_tasks: wifi_mqtt.yaml + +- tags: services_power_mqtt + import_tasks: power_mqtt.yaml diff --git a/roles/services/tasks/power_mqtt.yaml b/roles/services/tasks/power_mqtt.yaml new file mode 100644 index 0000000..ce1604f --- /dev/null +++ b/roles/services/tasks/power_mqtt.yaml @@ -0,0 +1,25 @@ +- name: Install power-mqtt + template: + src: power-mqtt.sh + dest: /var/lib/power-mqtt.sh + owner: root + group: root + mode: 0755 + notify: restart power-mqtt + +- name: Install power-mqtt service + template: + src: power-mqtt.service + dest: /etc/systemd/system/power-mqtt.service + owner: root + group: root + mode: 0644 + notify: restart power-mqtt + +- name: Start power-mqtt + systemd: + name: power-mqtt + state: started + enabled: yes + daemon_reload: true + diff --git a/roles/services/templates/power-mqtt.service b/roles/services/templates/power-mqtt.service new file mode 100644 index 0000000..a455acc --- /dev/null +++ b/roles/services/templates/power-mqtt.service @@ -0,0 +1,16 @@ +# Managed by Ansible + +[Unit] +Description=SMD630 to MQTT Probe +After=network.target + +[Service] +Type=simple +ExecStart=/bin/bash /var/lib/power-mqtt.sh +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 new file mode 100644 index 0000000..dbeb7b2 --- /dev/null +++ b/roles/services/templates/power-mqtt.sh @@ -0,0 +1,19 @@ +#!/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