Neigungsmesser: BLE-Wert bei jeder Messung setzen statt einmal beim Start

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 <noreply@anthropic.com>
This commit is contained in:
BiasF
2026-08-31 19:40:10 +02:00
co-authored by Claude Opus 5
parent 396e9ed004
commit cee9129f66
+22 -10
View File
@@ -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<unsigned char> 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<unsigned char> 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<unsigned char> 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<unsigned char> 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"