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:
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user