• Du musst dich registrieren, bevor du Beiträge verfassen kannst. Klicke auf Jetzt registrieren!, um den Registrierungsprozess zu starten. Registrierte User surfen werbefrei, können Suchen durchführen und sehen die volle Darstellung des Forums mit vielen anderen Unterforen!!!

Otto Wilde G32 | Smarthome

Großartige Arbeit @JBecker !! Darauf habe ich lange gewartet, der Umweg über die Cloud war eher meiner Unkenntnis von Bluetooth geschuldet, denn gewollt. Magst du deinen ESPHome Code eventuell auf GitHub teilen? Dann gibts eine aktuelle Ressource, hier im Forum geht sowas ja gerne mal unter...
 
Also ich habe gerade mein Gasbuddy kalibriert und eine Neue Flasche rein...
Gewicht: 11 kg
Tara: 10,8 kg
Füllmenge: 97%

Also Ausgangslage:
IMG_8784.PNG


Beide Werte Konnte ich im BLE Profil Finden:

Die % Anzeige ist unter:
UUID -> UUID: 64EBC8A5-E9A4-11ED-A05B-0242AC120003 bei mir HEX 61 was Dezimal 97 entspricht
IMG_8786.PNG


Das Taragewicht ist unter
Weight Measurement
UUID: 2A9D
Bei mir HEX 29C1 was Dezimal 10689 also ca. 10,8 kg entspricht...

1705931723191.png


Prozent müsste dann wie folgt ins Script?!
YAML:
   - platform: ble_client
     type: characteristic
     name: "G32 Gasbuddy Füllstand"
     service_uuid: '181D'
     characteristic_uuid: '64EBC8A5-E9A4-11ED-A05B-0242AC120003'
     device_class: "battery"
     unit_of_measurement: "%"
     update_interval: 120s
     lambda: |-
      return (x[0]);

Ich tests mal!
 
Die % Anzeige ist unter:
UUID -> UUID: 64EBC8A5-E9A4-11ED-A05B-0242AC120003 bei mir HEX 61 was

Prozent müsste dann wie folgt ins Script?!
YAML:
   - platform: ble_client
     type: characteristic
     name: "G32 Gasbuddy Füllstand"
     service_uuid: '181D'
     characteristic_uuid: '64EBC8A5-E9A4-11ED-A05B-0242AC120003'
     device_class: "battery"
     unit_of_measurement: "%"
     update_interval: 120s
     lambda: |-
      return (x[0]);

Ich tests mal!
Wow, super! Gut, dass das Anlernen des Gas Buddy bei Dir funktioniert (was für eine Firmware ist bei Dir auf dem G32, bei mir ist es V1.0.5?).
Schönes Tool auch, diese nRFconnect App, da haben wir ja schon einiges durch herausgefunden!

Wenn das bei Dir funktioniert, dann füge ich das noch in meinen Code weiter oben hinein, dann kann jeder den kompletten Code von dort kopieren.

UND: ich bin anscheinend doch nicht zu bescheuert, den Gas Buddy ans Gehen zu bringen. Hatte das bei OW angemeckert und gerade folgende Rückmeldung bekommen:
Der Fehler des Gas-Buddys ist uns leider auch bereits bekannt.
Dies ist auf das letzte Update zurückzuführen und wird zeitnah durch unser App Team behoben.

Das App Team priorisiert diesen Fehler und arbeitet mit Hochdruck an einer Lösung.
 
Update also ich bekomm über die Config von mir die 97% zurück :) kannst du gerne im Script ergänzen. Oder würdest du eine andere device_class nehmen?
Bildschirmfoto 2024-01-22 um 15.12.01.png


Macht es Sinn das Tara Gewicht auch auszulesen/anzuzeigen? Ich denke für die meisten ist die % Anzeige ausreichend...die Neukalibrierung müsste jedoch über die OW App gemacht werden...?!
 
Hab auch die Version 1.0.5 drauf, es wird in der Otto Wilde App auch alles angezeigt, außer ich bin mit dem nrf Connect Verbunden, dann wird der Gasbuddy nicht übertragen! Wenn ich dort Disconnecte dann geht der Gasbuddy wieder, vielleicht liegts daran?
 
Update also ich bekomm über die Config von mir die 97% zurück :) kannst du gerne im Script ergänzen. Oder würdest du eine andere device_class nehmen?
Anhang anzeigen 3324072

Macht es Sinn das Tara Gewicht auch auszulesen/anzuzeigen? Ich denke für die meisten ist die % Anzeige ausreichend...die Neukalibrierung müsste jedoch über die OW App gemacht werden...?!
Perfekt! Füge ich gleich ein.

Welche device class man nimmt, weiß ich auch nicht. Habe darüber eben auch schon bei dem Haubenzustand gegrübelt. Da konnte ich nichts wie 'door' oder 'window' verwenden, war nicht erlaubt. Auch der Sensor ist ein allgemeiner Sensor und habe ich nicht als binary_sensor hinbekommen.
Jetzt gibt der Sensor 0 oder 1 zurück. Damit man dann trotzdem eine Anzeige wie 'geöffnet' oder 'geschlossen' erhält, habe ich noch eine Hilfsvariable in der configuration.yaml angelegt:

Code:
  - binary_sensor:
    - name: "G32 Haube"
      unique_id: binary_sensor.g32_haube
      state: >
        {% if states("sensor.espg32_g32_haube") | float(0) == 0 %}
          off
        {% else %}
          on
        {% endif %}
      icon: >
        {% if states("sensor.espg32_g32_haube") | float(0) == 0 %}
          mdi:door
        {% else %}
          mdi:door-open
        {% endif %}

Dann steht dort bei der Anzeige der Entität korrekt 'geöffnet' und 'geschlossen' und es wird eine offene oder geschlossene Tür angezeit. Naja ...

EDIT: ist obsolet! Benötigt man nicht mehr, wenn man den Code aus Beitrag #5 verwendet (Stand 23.01.2024) !
 
Hab auch die Version 1.0.5 drauf, es wird in der Otto Wilde App auch alles angezeigt, außer ich bin mit dem nrf Connect Verbunden, dann wird der Gasbuddy nicht übertragen! Wenn ich dort Disconnecte dann geht der Gasbuddy wieder, vielleicht liegts daran?
Nee, bei mir lässt sich die neue Gasflasche nicht anlernen. drücke ich auf 'Fertig', dann orgelt die App nur noch im Kreise ...
Auch wenn ich Bluetooth ausschalte.
 
Im 31ten Byte (pData[30]) steht der rssi Wert der Wifi Verbindung des G32 als signed byte (bei mir momentan 187 entsprechend -69dBm).
 
Also ums mal kurz zu machen... ein HomeAssistant sollte bei euch schon laufen, das ist Grundvoraussetzung. Die Einkaufsliste ist dann relativ kurz :) Ich hab zum Beispiel dieses Board : esp32 wroom ein USB Microkabel benötigt ihr noch, mehr eigentlich nicht! Dann auf dem HA espHome installieren, das .yaml von JBecker draufschieben, (vorher eure Mac vom Grill eintragen) und das ganze läuft schon. Optional noch: Case

Ich schau mir mal an, ob ich das Nativ auf den ESP32 bekomme, dann wäre es eigentlich fast ein Plug-And-Play Modul, so ne Art BLE2MQTT Gateway -> https://github.com/shmuelzon/esp32-ble2mqtt wo man per Webinterface die Mac Einträgt und WLAN/MQTT Broker.
Kann euch aber nichts versprechen, ist nicht mein Kerngebiet :) vielleicht gibts hier ja talentiertere c Programmierer!
Perfekt! Füge ich gleich ein.

Welche device class man nimmt, weiß ich auch nicht. Habe darüber eben auch schon bei dem Haubenzustand gegrübelt. Da konnte ich nichts wie 'door' oder 'window' verwenden, war nicht erlaubt. Auch der Sensor ist ein allgemeiner Sensor und habe ich nicht als binary_sensor hinbekommen.
Jetzt gibt der Sensor 0 oder 1 zurück. Damit man dann trotzdem eine Anzeige wie 'geöffnet' oder 'geschlossen' erhält, habe ich noch eine Hilfsvariable in der configuration.yaml angelegt:

Code:
  - binary_sensor:
    - name: "G32 Haube"
      unique_id: binary_sensor.g32_haube
      state: >
        {% if states("sensor.espg32_g32_haube") | float(0) == 0 %}
          off
        {% else %}
          on
        {% endif %}
      icon: >
        {% if states("sensor.espg32_g32_haube") | float(0) == 0 %}
          mdi:door
        {% if states("sensor.espg32_g32_haube") | float(0) == 0 %}
          mdi:door
        {% endif %}

Dann steht dort bei der Anzeige der Entität korrekt 'geöffnet' und 'geschlossen' und es wird eine offene oder geschlossene Tür angezeit. Naja ...
Ich habe für den Hauben-Sensor in die YAML des ESP32 anstatt des o.g. Skriptes einfach ein binary template angelegt. Dann wird ein binary sensor angelegt in dessen Einstellungen dann "anzeigen als Öffnung" auswählt und es wird offen oder geschlossen angezeigt.Icon kann man sich ein beliebiges aussuchen, habe erstmal probeweise door genommen.

hier der Code: (man muss noch im Hauben-Sensor eine id vergeben)

binary_sensor:
- platform: template
name: "G32 Haube"
icon: mdi:door
lambda: |-
if (id(g32_haube).state = 1) {
// G32 Haube is offen.
return true;
} else {
// G32 Haube is geschlossen.
return false;
}
sensor:
- platform: ble_client
type: characteristic
name: "G32 Haube"
id: g32_haube
service_uuid: '183b'
characteristic_uuid: 'e1255ec0-6199-44ab-b78e-08ec262cea4b'
update_interval: 2s
lambda: |-
return (x[0]);
 
Ich habe für den Hauben-Sensor in die YAML des ESP32 anstatt des o.g. Skriptes einfach ein binary template angelegt. Dann hat wird ein binary sensor angelegt in dessen Einstellungen dann "anzeigen als Öffnung" auswählt und es wird offen oder geschlossen angezeigt.Icon kann man sich ein beliebiges aussuchen, habe erstmal probeweise door genommen.

hier der Code: (man muss noch im Hauben-Sensor eine id vergeben)

binary_sensor:
- platform: template
name: "G32 Haube"
icon: mdi:door
lambda: |-
if (id(g32_haube).state = 1) {
// G32 Haube is offen.
return true;
} else {
// G32 Haube is geschlossen.
return false;
}
sensor:
- platform: ble_client
type: characteristic
name: "G32 Haube"
id: g32_haube
service_uuid: '183b'
characteristic_uuid: 'e1255ec0-6199-44ab-b78e-08ec262cea4b'
update_interval: 2s
lambda: |-
return (x[0]);
Das ist ja (fast) das Gleiche, oder? (ich hatte da noch einen Copy und Paste Fehler drin, sorry. Lag daran, dass beim Kopieren in HA fast immer der Editor abschmiert.)
OK, das Umwandeln wird dann schon im ESP gemacht, klar. Das übernehme ich so! Danke!
Gruß, Jörg.

PS: Abfrage auf ==1 geändert.
 
Ich habe noch wie bei allen meinen ESP32 die Standard-Sensoren hinzugefügt:

- Verbindungsstatus
- WIFI-Signalstärke
- CPU-Temperatur
- Bluetooth-Signalstärke

binary_sensor:
- platform: template
name: "G32 Haube"
icon: mdi:door
lambda: |-
if (id(g32_haube).state == 1) {
// G32 Haube is offen.
return true;
} else {
// G32 Haube is geschlossen.
return false;
}
- platform: status
name: "Status ESP G32"

sensor:
- platform: ble_rssi
mac_address: HIER DIE BT-MAC DES G32 EINTRAGEN
name: "BT Signalstärke"
- platform: wifi_signal
name: "WiFi Signal ESP G32"
update_interval: 300s
- platform: internal_temperature
name: "CPU Temperatur ESP G32"
update_interval: 300s
 
Ich habe noch wie bei allen meinen ESP32 die Standard-Sensoren hinzugefügt:

- Verbindungsstatus
- WIFI-Signalstärke
- CPU-Temperatur
- Bluetooth-Signalstärke

binary_sensor:
- platform: template
name: "G32 Haube"
icon: mdi:door
lambda: |-
if (id(g32_haube).state == 1) {
// G32 Haube is offen.
return true;
} else {
// G32 Haube is geschlossen.
return false;
}
- platform: status
name: "Status ESP G32"

sensor:
- platform: ble_rssi
mac_address: HIER DIE BT-MAC DES G32 EINTRAGEN
name: "BT Signalstärke"
- platform: wifi_signal
name: "WiFi Signal ESP G32"
update_interval: 300s
- platform: internal_temperature
name: "CPU Temperatur ESP G32"
update_interval: 300s
Ist jetzt auch im Code in Beitrag #5 eingefügt!
 
Hab mir nochmal einen ESP32 gekauft und spiel gerade mit der Adruino IDE rum... mein Ziel ist es, ne Firmware zu machen, in der man per WifiManager das Wifi connecten kann, anschließen die MAC vom G32 sowie nen MQTT Broker eintragen kann, damit die Werte per MQTT kommen... dann wärs universell Einsetzbar.
 
Ist jetzt auch im Code in Beitrag #5 eingefügt!
ich habe noch einen kleinen Fehler gefunden:

dieser Code:

sensor:
- platform: ble_client
type: characteristic
name: "G32 Haube"
id: g32_haube
service_uuid: '183b'
characteristic_uuid: 'e1255ec0-6199-44ab-b78e-08ec262cea4b'
update_interval: 2s
lambda: |-
return (x[0]);

für den Hauben-Sensor ist für das Licht, hab mich nämlich gerade gewundert, dass das am Tag nicht funktioniert. Weil ja genug Helligkeit vorhanden ist löst es dann nicht aus.
ABER
Die characteristic_uuid: 'e1255ec0-6199-44ab-b78e-08ec262cea4b' ist vom Licht, somit hätte man noch einen Sensor für das Licht.

Um die Haube als Sensor anzulegen habe ich die characteristic_uuid: 'e1255ec1-6199-44ab-b78e-08ec262cea4b' gefunden.

Unterschied ist also nur der Anfang e1255ec0 vs. e1255ec1.

Damit funktioniert es jetzt auch am Tag und man hat einen Sensor zusätzlich für das Licht.

Hier noch mal die YAML incl. Binary-Template:

binary_sensor:
- platform: template
name: "G32 Haube"
icon: mdi:door
lambda: |-
if (id(g32_haube).state == 1) {
// G32 Haube is offen.
return true;
} else {
// G32 Haube is geschlossen.
return false;
}
- platform: template
name: "G32 Licht"
icon: mdi:lightbulb
lambda: |-
if (id(g32_licht).state == 1) {
// G32 Licht is An.
return true;
} else {
// G32 Licht is Aus.
return false;
}
- platform: status
name: "Status ESP G32"

sensor:
- platform: ble_rssi
mac_address: BT-MAC DES G32
name: "BT Signalstärke"
- platform: wifi_signal
name: "WiFi Signal ESP G32"
update_interval: 300s
- platform: internal_temperature
name: "CPU Temperatur ESP G32"
update_interval: 300s
- platform: ble_client
type: characteristic
name: "G32 Licht"
id: g32_licht
service_uuid: '183b'
characteristic_uuid: 'e1255ec0-6199-44ab-b78e-08ec262cea4b'
update_interval: 2s
lambda: |-
return (x[0]);
- platform: ble_client
type: characteristic
name: "G32 Haube"
id: g32_haube
service_uuid: '183b'
characteristic_uuid: 'e1255ec1-6199-44ab-b78e-08ec262cea4b'
update_interval: 2s
lambda: |-
return (x[0]);
 
Hab mir nochmal einen ESP32 gekauft und spiel gerade mit der Adruino IDE rum... mein Ziel ist es, ne Firmware zu machen, in der man per WifiManager das Wifi connecten kann, anschließen die MAC vom G32 sowie nen MQTT Broker eintragen kann, damit die Werte per MQTT kommen... dann wärs universell Einsetzbar.
das wäre natürlich elegant....
 
ich habe noch einen kleinen Fehler gefunden:

dieser Code:

sensor:
- platform: ble_client
type: characteristic
name: "G32 Haube"
id: g32_haube
service_uuid: '183b'
characteristic_uuid: 'e1255ec0-6199-44ab-b78e-08ec262cea4b'
update_interval: 2s
lambda: |-
return (x[0]);

für den Hauben-Sensor ist für das Licht, hab mich nämlich gerade gewundert, dass das am Tag nicht funktioniert. Weil ja genug Helligkeit vorhanden ist löst es dann nicht aus.
ABER
Die characteristic_uuid: 'e1255ec0-6199-44ab-b78e-08ec262cea4b' ist vom Licht, somit hätte man noch einen Sensor für das Licht.

Um die Haube als Sensor anzulegen habe ich die characteristic_uuid: 'e1255ec1-6199-44ab-b78e-08ec262cea4b' gefunden.

Unterschied ist also nur der Anfang e1255ec0 vs. e1255ec1.

Damit funktioniert es jetzt auch am Tag und man hat einen Sensor zusätzlich für das Licht.

Hier noch mal die YAML incl. Binary-Template:

binary_sensor:
- platform: template
name: "G32 Haube"
icon: mdi:door
lambda: |-
if (id(g32_haube).state == 1) {
// G32 Haube is offen.
return true;
} else {
// G32 Haube is geschlossen.
return false;
}
- platform: template
name: "G32 Licht"
icon: mdi:lightbulb
lambda: |-
if (id(g32_licht).state == 1) {
// G32 Licht is An.
return true;
} else {
// G32 Licht is Aus.
return false;
}
- platform: status
name: "Status ESP G32"

sensor:
- platform: ble_rssi
mac_address: BT-MAC DES G32
name: "BT Signalstärke"
- platform: wifi_signal
name: "WiFi Signal ESP G32"
update_interval: 300s
- platform: internal_temperature
name: "CPU Temperatur ESP G32"
update_interval: 300s
- platform: ble_client
type: characteristic
name: "G32 Licht"
id: g32_licht
service_uuid: '183b'
characteristic_uuid: 'e1255ec0-6199-44ab-b78e-08ec262cea4b'
update_interval: 2s
lambda: |-
return (x[0]);
- platform: ble_client
type: characteristic
name: "G32 Haube"
id: g32_haube
service_uuid: '183b'
characteristic_uuid: 'e1255ec1-6199-44ab-b78e-08ec262cea4b'
update_interval: 2s
lambda: |-
return (x[0]);
Ich hatte mich ja schon gewundert, warum es dort zwei UUIDs gab. Jetzt ist es klar, also eine für die Haube und eine fürs Licht! Ich hab's natürlich nur im Dunkeln ausprobiert ...
Habe ich gerade noch oben im Code geändert! (und dieses Mal auch vorher getestet ...)
Danke,
Jörg.
 
Zurück
Oben Unten