From 484013b0871ad67a02c42cf8333f8473bdf33044 Mon Sep 17 00:00:00 2001
From: Christian Elberfeld <elberfeld@web.de>
Date: Fri, 30 Dec 2022 02:44:20 +0100
Subject: [PATCH] reorganize mqtt devices for openhab

---
 group_vars/prod                               | 16 ++++++++
 host_vars/ogg                                 |  6 ---
 .../templates/conf/items/mqtt.items           | 38 +++++++++++++------
 .../templates/conf/things/mqtt.things         | 28 ++++++++------
 .../icinga/conf.d/services_mqttsensors.conf   |  6 +--
 5 files changed, 63 insertions(+), 31 deletions(-)

diff --git a/group_vars/prod b/group_vars/prod
index 9ad0b4c4..f28a92a9 100644
--- a/group_vars/prod
+++ b/group_vars/prod
@@ -97,3 +97,19 @@ monitoring:
     - { ip: "1.1.1.1", name: "Cloudflare" }
     - { ip: "8.8.8.8", name: "Google" }
     - { ip: "9.9.9.9", name: "Quad9" }
+
+# ESPHome Devices für Openhab und Icinga 
+esphome_devices:
+  - { id: "alarm",        name: "Alarm",         groups: "gHauptraum" }
+  # - { id: "dach",         name: "Dach",         groups: "" }
+  # - { id: "display01",    name: "Display01",         groups: "gHauptraum" }
+  # - { id: "display02",    name: "Display02",         groups: "gHauptraum" }
+  # - { id: "display03",    name: "Display03",         groups: "gHauptraum" }
+  - { id: "feinstaub01",   name: "Feinstaub01",   groups: "gHauptraum",     sensors: [ "feinstaub_2_5" ] }
+  - { id: "hauptraum",     name: "Hauptraum",     groups: "gHauptraum",     sensors: [ "Temp", "pressure", "humidity" ] }
+  - { id: "holzwerkstatt", name: "Holzwerkstatt", groups: "gHolzwerkstatt", sensors: [ "Temp", "pressure", "humidity" ] }
+  - { id: "kamin",         name: "Kamin",         groups: "gHauptraum",     sensors: [ "HeizungVorlauf", "HeizungRuecklauf"]  }
+  - { id: "kuehlschrank",  name: "Kühlschrank",   groups: "gHauptraum",     sensors: [ "Kuehlschrank-Temp" ] }
+  - { id: "lounge",        name: "Lounge",        groups: "gLounge",        sensors: [ "Temp", "pressure", "humidity" ] }
+  - { id: "status",        name: "Status/Strom",  groups: "gHauptraum",     sensors: [ "stromverbrauch" ] }
+  - { id: "vortragsraum",  name: "Vortragsraum",  groups: "gVortragsraum",  sensors: [ "Temp", "pressure", "humidity" ] }
diff --git a/host_vars/ogg b/host_vars/ogg
index dbca5f4e..ded6053e 100644
--- a/host_vars/ogg
+++ b/host_vars/ogg
@@ -115,9 +115,3 @@ wled_devices:
   - { id: "rack",             groups: "gLounge" }
   - { id: "warpcubes",        groups: "gLounge" }
 
-mqtt_sensors_temp:
-  - { id: "hauptraum",    name: "Hauptraum",    groups: "gHauptraum" }
-  - { id: "vortragsraum", name: "Vortragsraum", groups: "gVortragsraum" }
-
-mqtt_sensors_feinstaub:
-  - { id: "feinstaub01",  name: "Feinstaub01",    groups: "gHauptraum" }
diff --git a/intern/docker_openhab/templates/conf/items/mqtt.items b/intern/docker_openhab/templates/conf/items/mqtt.items
index 1db4adae..c0b6e2a1 100644
--- a/intern/docker_openhab/templates/conf/items/mqtt.items
+++ b/intern/docker_openhab/templates/conf/items/mqtt.items
@@ -3,27 +3,43 @@ Number Werkstatt_Licht     "Werkstatt Licht [%.0f (0-225)]"      <light> (gHaupt
     channel="mqtt:topic:mosquitto:werkstattlicht:level"
 }
 
-{% for device in mqtt_sensors_temp %}
+{% for device in esphome_devices %}
+  {% if device.sensors is defined %}
+    {% for sensor in device.sensors %}
 
-Number MQTT_{{ device.id }}_temp     "Sensor {{ device.name }} Temp [%.1f °C]"      <temperature> ({{ device.groups }}) ["Measurement","Temperature","CurrentTemperature"] { 
-    channel="mqtt:topic:mosquitto:{{ device.id }}:temp"
+      {% if sensor == "temp" or sensor == "HeizungVorlauf" or sensor == "HeizungRuecklauf" or sensor == "Kuehlschrank-Temp" %}
+
+Number MQTT_{{ device.id }}_{{ sensor | replace("-","") }} "Sensor {{ device.name }} {{ sensor }} [%.1f °C]"      <temperature> ({{ device.groups }}) ["Measurement","Temperature","CurrentTemperature"] { 
+    channel="mqtt:topic:mosquitto:{{ device.id }}:{{ sensor | replace("-","") | lower }}"
 }
 
-Number MQTT_{{ device.id }}_pressure "Sensor {{ device.name }} Pressure [%.1f hPa]" <pressure>    ({{ device.groups }}) ["Measurement","Pressure"] { 
-    channel="mqtt:topic:mosquitto:{{ device.id }}:pressure" 
+      {% elif sensor == "pressure" %}  
+
+Number MQTT_{{ device.id }}_{{ sensor }} "Sensor {{ device.name }} Pressure [%.1f hPa]" <pressure>    ({{ device.groups }}) ["Measurement","Pressure"] { 
+    channel="mqtt:topic:mosquitto:{{ device.id }}:{{ sensor }}" 
 }
 
-Number MQTT_{{ device.id }}_humidity "Sensor {{ device.name }} Humidity [%.1f %%]"  <humidity>    ({{ device.groups }}) ["Measurement","Humidity","CurrentHumidity"] { 
-    channel="mqtt:topic:mosquitto:{{ device.id }}:humidity"
+      {% elif sensor == "humidity" %}  
+
+Number MQTT_{{ device.id }}_{{ sensor }} "Sensor {{ device.name }} Humidity [%.1f %%]"  <humidity>    ({{ device.groups }}) ["Measurement","Humidity","CurrentHumidity"] { 
+    channel="mqtt:topic:mosquitto:{{ device.id }}:{{ sensor }}"
 }
 
-{% endfor %}
+      {% elif sensor == "feinstaub_2_5" %}  
 
-{% for device in mqtt_sensors_feinstaub %}
+Number MQTT_{{ device.id }}_{{ sensor }} "Sensor {{ device.name }} 2.5 PM [%.1f µg/m³]"   ({{ device.groups }}) ["Measurement"] { 
+    channel="mqtt:topic:mosquitto:{{ device.id }}:{{ sensor }}" 
+}
+
+      {% elif sensor == "stromverbrauch" %}  
 
-Number MQTT_{{ device.id }}_feinstaub_2_5 "Sensor {{ device.name }} 2.5 PM [%.1f µg/m³]"   ({{ device.groups }}) ["Measurement"] { 
-    channel="mqtt:topic:mosquitto:{{ device.id }}:feinstaub_2_5" 
+Number MQTT_{{ device.id }}_{{ sensor }} "Sensor {{ device.name }} kW [%.1f kW]"   ({{ device.groups }}) ["Measurement"] { 
+    channel="mqtt:topic:mosquitto:{{ device.id }}:{{ sensor }}" 
 }
 
+      {% endif %}  
+
+    {% endfor %}
+  {% endif %}  
 {% endfor %}
 
diff --git a/intern/docker_openhab/templates/conf/things/mqtt.things b/intern/docker_openhab/templates/conf/things/mqtt.things
index ae4a93f9..afd79df4 100644
--- a/intern/docker_openhab/templates/conf/things/mqtt.things
+++ b/intern/docker_openhab/templates/conf/things/mqtt.things
@@ -7,26 +7,32 @@ Bridge mqtt:broker:mosquitto [ host="{{ int_ip4 }}", secure=false, enableDiscove
         Type number : level "Werkstatt Licht (dali)" [ stateTopic="light/dali", commandTopic="light/dali", postCommand=true, min=0, max=255 ]
     }
 
-{% for device in mqtt_sensors_temp %}
+{% for device in esphome_devices %}
 
     Thing topic {{ device.id }} "Sensor {{ device.name }}" {
+
+  {% if device.sensors is defined %}
     Channels:
-        Type number : temp     "Sensor {{ device.name }} Temp"     [ stateTopic="ESPHome/esphome_{{ device.id }}/sensor/temp/state" ]
-        Type number : pressure "Sensor {{ device.name }} Pressure" [ stateTopic="ESPHome/esphome_{{ device.id }}/sensor/pressure/state" ]
-        Type number : humidity "Sensor {{ device.name }} Humidity" [ stateTopic="ESPHome/esphome_{{ device.id }}/sensor/humidity/state" ]
-    }
 
+    {% for sensor in device.sensors %}
 
-{% endfor %}
+      {% if sensor == "Temp" or sensor == "HeizungVorlauf" or sensor == "HeizungRuecklauf" or sensor == "Kuehlschrank-Temp" %}
+        Type number : {{ sensor | replace("-","") | lower }} "Sensor {{ device.name }} {{ sensor }}"     [ stateTopic="ESPHome/esphome_{{ device.id }}/sensor/{{ sensor | lower }}/state" ]
+      {% elif sensor == "pressure" %}  
+        Type number : {{ sensor }} "Sensor {{ device.name }} Pressure" [ stateTopic="ESPHome/esphome_{{ device.id }}/sensor/{{ sensor }}/state" ]
+      {% elif sensor == "humidity" %}  
+        Type number : {{ sensor }} "Sensor {{ device.name }} Humidity" [ stateTopic="ESPHome/esphome_{{ device.id }}/sensor/{{ sensor }}/state" ]
+      {% elif sensor == "feinstaub_2_5" %}  
+        Type number : {{ sensor }} "Sensor {{ device.name }} 2.5 PM" [ stateTopic="ESPHome/esphome_{{ device.id }}/sensor/{{ sensor }}/state" ]
+      {% elif sensor == "stromverbrauch" %}  
+        Type number : {{ sensor }} "Sensor {{ device.name }} kW" [ stateTopic="ESPHome/esphome_{{ device.id }}/sensor/{{ sensor }}/state" ]
+      {% endif %}  
 
-{% for device in mqtt_sensors_feinstaub %}
+    {% endfor %}
+  {% endif %}
 
-    Thing topic {{ device.id }} "Sensor {{ device.name }}" {
-    Channels:
-        Type number : feinstaub_2_5 "Sensor {{ device.name }} 2.5 PM" [ stateTopic="ESPHome/esphome_{{ device.id }}/sensor/feinstaub_2_5/state" ]
     }
 
-
 {% endfor %}
 
 }
diff --git a/webserver/docker_icinga/templates/etc/icinga/conf.d/services_mqttsensors.conf b/webserver/docker_icinga/templates/etc/icinga/conf.d/services_mqttsensors.conf
index 3114a6fa..b0a31dd6 100644
--- a/webserver/docker_icinga/templates/etc/icinga/conf.d/services_mqttsensors.conf
+++ b/webserver/docker_icinga/templates/etc/icinga/conf.d/services_mqttsensors.conf
@@ -1,13 +1,13 @@
 
-{% for device in mqtt_sensors %}
+{% for device in esphome_devices %}
 
-apply Service "mqttsensor-{{ device.id }}-status" {
+apply Service "esphome-{{ device.id }}-status" {
   import "generic-service"
 
   check_command = "check_mqtt"
 
   vars.mqtt_host = "{{ mqtt.ip }}"
-  vars.mqtt_topic = "{{ device.id }}/status"
+  vars.mqtt_topic = "ESPHome/esphome_{{ device.id }}/status"
   vars.mqtt_value = "online"
   vars.mqtt_operator = "equal"
   vars.mqtt_readonly = true
-- 
GitLab