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
|
send_every: 1
|
||||||
- exponential_moving_average:
|
- exponential_moving_average:
|
||||||
alpha: 0.2
|
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
|
- platform: template
|
||||||
name: "Neigung Roll"
|
name: "Neigung Roll"
|
||||||
@@ -95,6 +104,15 @@ sensor:
|
|||||||
send_every: 1
|
send_every: 1
|
||||||
- exponential_moving_average:
|
- exponential_moving_average:
|
||||||
alpha: 0.2
|
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:
|
globals:
|
||||||
- id: pitch_offset
|
- id: pitch_offset
|
||||||
@@ -115,24 +133,18 @@ esp32_ble_server:
|
|||||||
- uuid: 2a24b789-7aab-4535-af3e-ee76a35cc42d
|
- uuid: 2a24b789-7aab-4535-af3e-ee76a35cc42d
|
||||||
advertise: true
|
advertise: true
|
||||||
characteristics:
|
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
|
- id: pitch_ble
|
||||||
uuid: cad48e28-7fbe-41cf-bae9-d77a6c233424
|
uuid: cad48e28-7fbe-41cf-bae9-d77a6c233424
|
||||||
description: "Pitch"
|
description: "Pitch"
|
||||||
read: true
|
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
|
- id: roll_ble
|
||||||
uuid: cad48e28-7fbe-41cf-bae9-d77a6c233425
|
uuid: cad48e28-7fbe-41cf-bae9-d77a6c233425
|
||||||
description: "Roll"
|
description: "Roll"
|
||||||
read: true
|
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
|
- id: calib_ble
|
||||||
uuid: cad48e28-7fbe-41cf-bae9-d77a6c233427
|
uuid: cad48e28-7fbe-41cf-bae9-d77a6c233427
|
||||||
description: "Kalibriere Neigung"
|
description: "Kalibriere Neigung"
|
||||||
|
|||||||
Reference in New Issue
Block a user