[GELÖST] ESPHome payload

Begonnen von Gisbert, 03 Dezember 2024, 11:22:03

Vorheriges Thema - Nächstes Thema

Gisbert

Hallo,

ich habe es geschafft per MQTT einen Wert zu ESPHome zu senden und eine davon abhängige Aktion auszuführen (Beispiel mit payload 80 und 100). Der Code in ESPHome sieht folgendermaßen aus:

mqtt:
  broker: !secret my_broker
  port: !secret my_port
  topic_prefix: "/DEYE"
  username: !secret my_username
  password: !secret my_password
    - topic: /DEYE/MaxBattCharge/current
      payload: "100"
      then:
        - number.set:
            id: charge_current
            value: 100
    - topic: /DEYE/MaxBattCharge/current
      payload: "80"
      then:
        - number.set:
            id: charge_current
            value: 80

Mein Problem ist, dass ich nur einen spezifischen Wert senden und dann verwenden kann, ich hätte es aber gerne allgemein gehalten, so dass ich z.B. für alle Werte von 0 bis 100 nur eine Definition benötige:

   - topic: /DEYE/MaxBattCharge/current
      then:
        - number.set:
            id: charge_current
            value: "hier müsste dann das (beliebige) payload stehen - nur weiß ich nicht wie das geht"

Ich hoffe, dass ich mein Problem einigermaßen gut schildern konnte.

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

fz55

#1
Hallo Gisbert,

ich habe schon längere Zeit nichts mehr mit ESPHOME gemacht, deshalb keine Garantie, dass das hier funktioniert:

sensor: 
  - platform: mqtt_subscribe
    name: "set current"
    id: set_current
    topic: "/DEYE/MaxBattCharge/current"
    on_value:
      then:
        - number.set:
            id: charge_current
            value: !lambda "return x;"

Grüße fz55

Gisbert

Hallo fz55,

danke für deinen Vorschlag.
Ich zögere noch etwas es umzusetzen, da ich das ganze noch nicht recht verstanden habe.

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

passibe

#3
Du kannst auch den on_json_message-Trigger nehmen, ist in der Doku samt Beispiel erklärt:
https://www.esphome.io/components/mqtt.html#on-json-message-trigger

"x" ist einfach die Variable in der die mitgesendete Payload abgelegt wird:
ZitatTo use the message content, use a lambda template, the decoded message payload is available under the name x inside that lambda.

Edit: Grade auch nochmal in der Doku ein Beispiel für on_value gefunden:
https://www.esphome.io/components/number/#on-value
Sieht also gut aus, was fz55 vorgeschlagen hat.

Gisbert

Hallo fz55,
hallo passibe,

euer Vorschlag hat funktioniert, ich finde es Klasse.

Hier ist in gänze meine Definition im ESPHome-yaml-file (nur die wesentlichen Auszüge):

substitutions:
  device_type: sun12k

sensor:
  - platform: mqtt_subscribe
    id: set_max_batt_charge
    topic: "/DEYE/MaxBattCharge/current"
    on_value:
      then:
        - number.set:
            id: ${device_type}_Maximum_battery_charge_current
            value: !lambda "return x;"

  - platform: mqtt_subscribe
    id: set_max_batt_discharge
    topic: "/DEYE/MaxBattDischarge/current"
    on_value:
      then:
        - number.set:
            id: ${device_type}_Maximum_battery_discharge_current
            value: !lambda "return x;"

  - platform: mqtt_subscribe
    id: set_float_voltage
    topic: "/DEYE/battery_float/voltage"
    on_value:
      then:
        - number.set:
            id: ${device_type}_Battery_float_voltage
            value: !lambda "return x;"

Ich kann jetzt beliebige (Einschränkung: aus dem zuvor definierten Bereich) Zahlenwerte zum ESP senden. Ich hab das ganze für die max. Lade- und Entladestromstärke als auch der Float-Spannung umgesetzt, und es funktioniert. Wichtig scheint wohl zu sein, dass die id für platform: mqtt_subscribe eine andere ist als die bei number.set - sonst gibt es Gemecker beim Kompilieren.

Nochmals vielen Dank für eure Unterstützung.
Ich bin mir sicher, dass es für andere auch von Nutzen ist.

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome