From db1fd0b787eebd615671b99266dde664fb655b67 Mon Sep 17 00:00:00 2001 From: MaPaLo76 <72209721+MaPaLo76@users.noreply.github.com> Date: Wed, 4 Mar 2026 21:40:45 +0100 Subject: [PATCH] fix(mqtt): FR-013 device_class aus binary_sensor Discovery entfernt (v1.5.1) - binary_sensor laser_active: device_class 'running' entfernt - HA zeigt jetzt 'An' / 'Aus' statt 'In Betrieb' / 'Ausser Betrieb' --- Feature-Requests.md | 12 ++++++++++++ platformio.ini | 12 ++++++------ src/mqtt_client.cpp | 6 +++++- 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/Feature-Requests.md b/Feature-Requests.md index e60a472..aea1a27 100644 --- a/Feature-Requests.md +++ b/Feature-Requests.md @@ -25,6 +25,18 @@ Status: `[ ]` = offen · `[x]` = erledigt ## Erledigt +### Version 1.5.1 + +- [x] **FR-013** Bug: `binary_sensor` Laser aktiv zeigt "In Betrieb" / "Außer Betrieb" statt "An" / "Aus" ✅ + - **Symptom**: HA Tile-Card zeigt unter dem Sensor-Status "Außer Betrieb" statt "Aus" + - **Ursache**: `device_class: running` in der MQTT Discovery-Config erzeugt HA-spezifische Texte ("In Betrieb" / "Außer Betrieb") + - **Fix**: `device_class` aus der `publishDiscovery()`-binary_sensor-Config in `mqtt_client.cpp` entfernt → HA zeigt generisch "An" / "Aus" + - **Betroffene Dateien**: `src/mqtt_client.cpp` + - Commit: `TODO` + - Version: 1.5.1 + +--- + ### Version 1.5.0 - [x] **FR-012** Feature: Home Assistant MQTT Discovery (automatische Device-Erkennung ohne configuration.yaml) ✅ diff --git a/platformio.ini b/platformio.ini index 73915f6..90a2fa7 100644 --- a/platformio.ini +++ b/platformio.ini @@ -23,7 +23,7 @@ build_flags = -DCORE_DEBUG_LEVEL=1 ; 0=keine, 1=Fehler, 3=Info, 5=Verbose -DARDUINO_LOOP_STACK_SIZE=8192 -DELEGANTOTA_USE_ASYNC_WEBSERVER=1 - -DFIRMWARE_VERSION='"1.5.0"' ; Semantic Versioning – hier erhöhen bei neuem Release + -DFIRMWARE_VERSION='"1.5.1"' ; Semantic Versioning – hier erhöhen bei neuem Release lib_deps = majicDesigns/MD_Parola @ ^3.7.3 majicDesigns/MD_MAX72XX @ ^3.5.1 @@ -56,10 +56,10 @@ monitor_rts = 0 ; upload_flags = --auth=${sysenv.LASERCUTTER_OTA_PW} ; ============================================================================= [env:az-delivery-devkit-v4-ota] -;upload_port = 172.30.30.90 -upload_port = 192.168.2.62 +upload_port = 172.30.30.90 +;upload_port = 192.168.2.62 upload_protocol = espota -upload_flags = --auth=${sysenv.LASERCUTTER_OTA_PW} +upload_flags = --auth=${sysenv.LASERCUTTER_OTA_PW} --timeout=60 ; Vor dem Upload in PowerShell: $env:LASERCUTTER_OTA_PW = "DeinPasswort" ; Vor dem Upload in CMD: set LASERCUTTER_OTA_PW=DeinPasswort ; Kein Passwort gesetzt: Variable leer lassen oder weglassen (espota ignoriert leeren --auth) @@ -70,8 +70,8 @@ upload_flags = --auth=${sysenv.LASERCUTTER_OTA_PW} ; pio run -e az-delivery-devkit-v4-ota-http --target upload ; ============================================================================= [env:az-delivery-devkit-v4-ota-http] -;upload_port = 172.30.30.90 -upload_port = 192.168.2.62 +upload_port = 172.30.30.90 +;upload_port = 192.168.2.62 upload_protocol = custom extra_scripts = upload_ota.py diff --git a/src/mqtt_client.cpp b/src/mqtt_client.cpp index 8e24518..69ae622 100644 --- a/src/mqtt_client.cpp +++ b/src/mqtt_client.cpp @@ -240,7 +240,7 @@ void MqttClient::publishDiscovery() { "\"state_topic\":\"" MQTT_TOPIC_STATUS "\"," "\"value_template\":\"{{ value_json.laser_active }}\"," "\"payload_on\":\"True\",\"payload_off\":\"False\"," - "\"device_class\":\"running\",%s,%s}", av, dev); + "%s,%s}", av, dev); _client->publish(t, p, true); vTaskDelay(pdMS_TO_TICKS(50)); @@ -528,6 +528,7 @@ void MqttClient::onMessage(const char* topic, byte* payload, unsigned int length LOG_I("MQTT", "CMD reset_session_nvs -> laserTracker.resetTotal()"); laserTracker.resetTotal(); mqttClient.resetSessionCounter(); + mqttClient.publishHeartbeat(); } // {"reset_session_ram":true} – nur RAM-Session-Summe auf 0, NVS bleibt @@ -536,6 +537,7 @@ void MqttClient::onMessage(const char* topic, byte* payload, unsigned int length LOG_I("MQTT", "CMD reset_session_ram -> laserTracker.resetSessionSum()"); laserTracker.resetSessionSum(); mqttClient.resetSessionCounter(); + mqttClient.publishHeartbeat(); } // {"display":true/false} – Display ein-/ausschalten @@ -544,6 +546,8 @@ void MqttClient::onMessage(const char* topic, byte* payload, unsigned int length bool on = vDisplay.as(); display.setEnabled(on); LOG_I("MQTT", "CMD display -> %s", on ? "an" : "aus"); + // Sofortiges Feedback an HA (kein 60s warten auf naechsten Heartbeat) + mqttClient.publishHeartbeat(); } // {"reboot":true} – ESP32 neu starten