diff --git a/Feature-Requests.md b/Feature-Requests.md index 7548f74..5d2ee01 100644 --- a/Feature-Requests.md +++ b/Feature-Requests.md @@ -23,6 +23,15 @@ Status: `[ ]` = offen · `[x]` = erledigt ## Erledigt +### Version 1.6.1 + +- [x] **FR-017** Bug: Maschinenlaufzeit ist in HA nicht verfügbar (MQTT Discovery Sensor fehlt) ✅ + - **Symptom**: Home Assistant zeigte die Maschinenlaufzeit (Gesamtbetriebszeit) nicht als eigenständigen Sensor an. + - **Ursache**: In `publishDiscovery()` fehlte ein dedizierter numerischer Discovery-Sensor für `total_minutes`. Der bestehende Sensor #4 "Gesamtzeit" formatiert den Wert als hh:mm-String (kein numerischer HA-Sensor, keine Langzeitstatistik möglich). + - **Fix**: Neuer Discovery-Sensor #6 "Maschinenlaufzeit" hinzugefügt: `value_template: {{ value_json.total_minutes }}`, `unit_of_measurement: min`, `state_class: total_increasing` → HA kann Statistiken und Diagramme erstellen. Anzahl publizierter Entities von 8 auf 9 erhöht. + - **Betroffene Dateien**: `src/mqtt_client.cpp` + - Commit: `f6dfdeb` + ### Version 1.6.0 diff --git a/README.md b/README.md index 11f24a0..9469489 100644 --- a/README.md +++ b/README.md @@ -337,7 +337,7 @@ Ab **v1.5.0** meldet sich der ESP32 automatisch als vollständiges HA-Device an, ### Funktionsweise -Nach jedem (Re-)Connect publiziert der Client 8 retained JSON-Nachrichten an +Nach jedem (Re-)Connect publiziert der Client 9 retained JSON-Nachrichten an `homeassistant//lasercutter-display//config`. Home Assistant erkennt das Device daraufhin automatisch und zeigt alle Entities gruppiert an. @@ -349,6 +349,7 @@ Home Assistant erkennt das Device daraufhin automatisch und zeigt alle Entities | `sensor` | Laserzeit Summe | `session_minutes_sum` (min) | | `sensor` | Laserzeit aktuell (s) | `session_seconds` (s) | | `sensor` | Gesamtlaufzeit | `total_minutes` → Jinja2 `hh:mm` | +| `sensor` | Maschinenlaufzeit | `total_minutes` (min, `state_class: total_increasing`) | | `sensor` | Firmware | `firmware_version` (Diagnose) | | `switch` | Display | `display_on` → `ON`/`OFF` | | `button` | Session zurücksetzen | → `lasercutter/cmd` `{"reset_session_ram":true}` | diff --git a/src/mqtt_client.cpp b/src/mqtt_client.cpp index 54e2e17..5a473bb 100644 --- a/src/mqtt_client.cpp +++ b/src/mqtt_client.cpp @@ -298,7 +298,21 @@ void MqttClient::publishDiscovery() { _client->publish(t, p, true); vTaskDelay(pdMS_TO_TICKS(50)); - // ---- 6. switch – Display ----------------------------------------------- + // ---- 6. sensor – Maschinenlaufzeit (Gesamtbetriebszeit, numerisch) ----- + snprintf(t, sizeof(t), "%s/sensor/lasercutter-display/machine_runtime/config", + MQTT_DISCOVERY_PREFIX); + snprintf(p, sizeof(p), + "{\"name\":\"Maschinenlaufzeit\"," + "\"unique_id\":\"lc_machine_runtime\"," + "\"state_topic\":\"" MQTT_TOPIC_STATUS "\"," + "\"value_template\":\"{{ value_json.total_minutes }}\"," + "\"unit_of_measurement\":\"min\"," + "\"state_class\":\"total_increasing\"," + "\"icon\":\"mdi:clock-time-eight\",%s,%s}", av, dev); + _client->publish(t, p, true); + vTaskDelay(pdMS_TO_TICKS(50)); + + // ---- 7. switch – Display ----------------------------------------------- // payload_on/off: das sind die MQTT-Payloads die HA bei Toggle sendet snprintf(t, sizeof(t), "%s/switch/lasercutter-display/display/config", MQTT_DISCOVERY_PREFIX); @@ -316,7 +330,7 @@ void MqttClient::publishDiscovery() { _client->publish(t, p, true); vTaskDelay(pdMS_TO_TICKS(50)); - // ---- 7. button – Session zurücksetzen ---------------------------------- + // ---- 8. button – Session zurücksetzen ---------------------------------- snprintf(t, sizeof(t), "%s/button/lasercutter-display/reset_session/config", MQTT_DISCOVERY_PREFIX); snprintf(p, sizeof(p), @@ -329,7 +343,7 @@ void MqttClient::publishDiscovery() { _client->publish(t, p, true); vTaskDelay(pdMS_TO_TICKS(50)); - // ---- 8. button – Neustart ---------------------------------------------- + // ---- 9. button – Neustart ---------------------------------------------- snprintf(t, sizeof(t), "%s/button/lasercutter-display/reboot/config", MQTT_DISCOVERY_PREFIX); snprintf(p, sizeof(p), @@ -341,7 +355,7 @@ void MqttClient::publishDiscovery() { "\"icon\":\"mdi:restart\",%s,%s}", av, dev); _client->publish(t, p, true); - LOG_I("MQTT", "HA Discovery: 8 Entities publiziert (retained)"); + LOG_I("MQTT", "HA Discovery: 9 Entities publiziert (retained)"); } // --------------------------------------------------------------------------