From cee9129f663d722a856c944486955b1270a237cb Mon Sep 17 00:00:00 2001 From: BiasF Date: Mon, 31 Aug 2026 19:40:10 +0200 Subject: [PATCH] Neigungsmesser: BLE-Wert bei jeder Messung setzen statt einmal beim Start MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Seit dem Neubau mit ESPHome 2026.6.5 lieferte der Sensor bei jeder Abfrage denselben Wert. Der Grund steht im erzeugten Code: Ein getemplatetes "value:" an einer Charakteristik wird von der neuen Fassung in eine Aktion übersetzt, die genau einmal in setup() abläuft. void setup() { ... esp32_ble_server_..._setvalueaction_id->play(); // Pitch esp32_ble_server_..._setvalueaction_id_2->play(); // Roll Danach stand in der Charakteristik für immer der Wert vom Start – beim Hochfahren ist das NAN oder die erste Messung. Die Apps lasen also gewissenhaft eine Zahl, die sich nie mehr änderte; in der Einbaulage- Bestimmung sah das aus, als merke sich die App sofort einen Wert. Jetzt setzt jeder Sensor seinen Wert selbst, über on_value. Das getemplatete "value:" an den Charakteristiken entfällt – ESPHome lehnt beides nebeneinander ohnehin ab. Im erzeugten Code steht set_value dadurch nicht mehr in setup(), sondern an den Auslösern der beiden Sensoren. Notify bleibt bewusst aus: Die Apps fragen im Takt ab, das funktioniert, und eine frühere Fassung mit notify liess das Gerät verstummen. Co-Authored-By: Claude Opus 5 --- firmware/vanalign/esp32_ble.yaml | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/firmware/vanalign/esp32_ble.yaml b/firmware/vanalign/esp32_ble.yaml index 8c1f2e7..2f43a2f 100644 --- a/firmware/vanalign/esp32_ble.yaml +++ b/firmware/vanalign/esp32_ble.yaml @@ -75,6 +75,15 @@ sensor: send_every: 1 - exponential_moving_average: alpha: 0.2 + on_value: + then: + - ble_server.characteristic.set_value: + id: pitch_ble + value: !lambda |- + std::vector v(sizeof(float)); + float val = x; + memcpy(v.data(), &val, sizeof(float)); + return v; - platform: template name: "Neigung Roll" @@ -95,6 +104,15 @@ sensor: send_every: 1 - exponential_moving_average: alpha: 0.2 + on_value: + then: + - ble_server.characteristic.set_value: + id: roll_ble + value: !lambda |- + std::vector v(sizeof(float)); + float val = x; + memcpy(v.data(), &val, sizeof(float)); + return v; globals: - id: pitch_offset @@ -115,24 +133,18 @@ esp32_ble_server: - uuid: 2a24b789-7aab-4535-af3e-ee76a35cc42d advertise: true characteristics: + # Ohne "value:" – der Wert wird bei jeder Messung gesetzt, siehe + # on_value beim Sensor. Ein getemplatetes "value:" führt ESPHome nur + # einmal aus, in setup(); die Charakteristik behielte dann für immer + # den Wert vom Start, und jede Abfrage lieferte dieselbe Zahl. - id: pitch_ble uuid: cad48e28-7fbe-41cf-bae9-d77a6c233424 description: "Pitch" read: true - value: !lambda |- - std::vector v(sizeof(float)); - float val = id(pitch).state; - memcpy(v.data(), &val, sizeof(float)); - return v; - id: roll_ble uuid: cad48e28-7fbe-41cf-bae9-d77a6c233425 description: "Roll" read: true - value: !lambda |- - std::vector v(sizeof(float)); - float val = id(roll).state; - memcpy(v.data(), &val, sizeof(float)); - return v; - id: calib_ble uuid: cad48e28-7fbe-41cf-bae9-d77a6c233427 description: "Kalibriere Neigung"