fix(mqtt): FR-017 – Discovery-Sensor Maschinenlaufzeit hinzugefuegt (v1.6.1)

This commit is contained in:
MaPaLo76 2026-03-07 16:31:22 +01:00
parent 7a09b4ac94
commit 1524a2a585
3 changed files with 29 additions and 5 deletions

View File

@ -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

View File

@ -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/<typ>/lasercutter-display/<entity>/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}` |

View File

@ -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)");
}
// --------------------------------------------------------------------------