ESPHome YAML Syntax für das Absenden eines URL-Befehls

Wie ist der ESPHome YAML Syntax für das Absenden eines URL-Befehls, der zB. über den Webbrower ansonsten so aussieht: "http://192.168.178.54/relay/0?turn=on"

Hallo,
ich kenne das nicht , aber hier nix gefunden ?

https://smarthomeyourself.de/tutorial-serien/esphome-tutorial-serie/

Meinst du den Arduino IDE Sketch der zB. funktioniert.
Der ist leider für ESPhome (YAML-Code) nicht brauchbar. Die YAML-Programmierung ist grundsätzlich anders.
Kennst du die YAML-Programmierung?

substitutions:
  name: esphome-web-67a604
  friendly_name: ESPHome Web 67a604

esphome:
  name: "${name}"
  friendly_name: "${friendly_name}"
  name_add_mac_suffix: false

esp32:
  board: esp32dev
  framework:
    type: arduino

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  manual_ip:
    static_ip: 192.168.178.151
    gateway: 192.168.178.1
    subnet: 255.255.255.0

logger:
api:
ota:
web_server:

http_request:
  useragent: esphome/device
  timeout: 10s

binary_sensor:
  - platform: gpio
    pin:
      number: 4
      mode: INPUT_PULLUP
    name: "1 Button auf ESP32"
    on_press:
      then:
        - switch.turn_on: relay
        - switch.turn_on: LED
        - http_request.get:
            url: "http://192.168.178.54/relay/0?turn=on"
            verify_ssl: false
    on_release:
      then:
        - switch.turn_off: relay
        - switch.turn_off: LED
        - http_request.get:
            url: "http://192.168.178.54/relay/0?turn=off"
            verify_ssl: false
    filters:
      - invert:
        

sensor:
  - platform: dht
    pin: 16
    temperature:
      name: "4 Temperatur"
    humidity:
      name: "5 Luftfeuchte"
    update_interval: 60s
    model: DHT22

  - platform: adc
  #- platform: mq
    pin: 34
    name: "6 MQ-135 Gas Sensor"
    update_interval: 3s
    filters:
      - multiply: 94.61
      - lambda: return x;
    unit_of_measurement: "%"
    #accuracy_decimals: 0

switch:
  - platform: gpio
    pin: 21
    id: relay
    name: "2 Relay"
    icon: "mdi:relay"
    on_turn_on:
      then:
        - http_request.get:
            url: "http://192.168.178.54/relay/0?turn=on"
            verify_ssl: false
    on_turn_off:
      then:
        - http_request.get:
            url: "http://192.168.178.54/relay/0?turn=off"
            verify_ssl: false
      
  - platform: gpio
    pin: 18
    id: LED
    name: "3 grüne LED"
    icon: "mdi:LED-grün"

Nein kenne ich nicht , habe da gerade mal gegoogelt. Ich denke Du bist hier im falschen Forun

Ich hatte ja bisher die Sketche mit Arduino gemacht. Ich kann mich aber erinnern, dass irgendwer im Forum meinte, dass er beides kann und er mir, so dachte ich mir, dabei helfen kann, Arduino Sketche in YAML zu ändern.
Ich dem andren FORUM (ESPhome) bin ich jetzt seit vorgestern auch. Habe aber bisher keine Antwort bekommen :neutral_face:

Hallo
noch einen Link gefunden
https://blog.christophersmart.com/2020/03/31/defining-home-automation-devices-in-yaml-with-esphome-and-home-assistant-no-programming-required/

Gegenfrage: was genau soll denn der Aufruf machen?

a.) http_request.get
damit forderst Du vom "server" eine Antwort an. Die muss man natürlich mit einem lambda Code parsen, um damit dann die gewünschten Messwerte bzw. die Entitäten zu bekommen.

b.) http_request.post
um sozusagen ein Kommando and den "server" zu senden.

Also was genau passiert wenn du im Browser obiges Kommando in die URL Zeile eingibst?

Auch Post kann Daten in beide Richtungen übertragen.
Reine "Befehle" macht man eher mit GET.

Gruß Tommy

Ist wohl richtig. Ich sehe das wohl eher aus der epshome Brille. Die Beispiele die ich gefunden habe, verwenden im esphome YAML code das http_request.get für Abfragen und das http_request.post für Kommandos. Vermutlich kann man beides mit weiteren Parametern konfigurieren. Hab ich halt noch nicht probiert.

Also das Abfragen von Messwerten hab ich schon mal verwendet, das ging so. Der Server stellt eine REST-Api bereit und mit http://192.168.178.38/value wird der Messwert geliefert. In YAML sieht das wie folgt aus, hier im Beispiel wird einfach gepollt, d.h. alle 360s wird der Request gesendet.

YAML-Snippet


http_request:
  useragent: esphome/device
  id: http_request_id
  timeout: 10s

interval:
  - interval: 360s
    then:
      - http_request.get:
          url: http://192.168.178.38/value
          on_response:
            then:
              - lambda: |-
                  auto raw_str   = id(http_request_id).get_string();
                  float water_l  = -1.0;
                  float water_m3 = -1.0;
                  sscanf(raw_str,"%f",&water_l);
                  water_m3 = water_l / 1000.0;
                  ESP_LOGI("main", "raw_str=%s water_l=%.1f l water_m3=%.4f m³",raw_str, water_l,water_m3);
                  if(water_l > 100.0) {
                    id(id_wasser_l).publish_state(water_l);
                    id(id_wasser_m3).publish_state(water_m3);
                  }

Ich bin mir nicht sicher was der TO möchte. Zwischen den Zeilen lese ich, dass er ein Relais ein/ausschalten will.

Ich hab das http_request.post Command noch nie benötigt. Aber so wie ich das sehe, wird
das vermutlich wie hier in diesem Beispiel gehen.

Ich denke mal http_request.get durch http_request.post ersetzten, sollte vielleicht schon funktionieren. JSON ist ja nicht notwendig, der url Eintrag reicht wohl aus. Also in etwas so:

    on_press:
      then:
        - switch.turn_on: relay
        - switch.turn_on: LED
        - http_request.post:
            url: "http://192.168.178.54/relay/0?turn=on"
            verify_ssl: false
    on_release:
      then:
        - switch.turn_off: relay
        - switch.turn_off: LED
        - http_request.post:
            url: "http://192.168.178.54/relay/0?turn=off"
            verify_ssl: false

edit: Typos

Keine Ahnung, wie das mit Esphome geht, ich orientiere mich am HTTP.

Gruß Tommy

Im Prinzip läuft das bei esphome so. Im YAML Config File werden die benötigten Komponenten konfiguriert, wie z.B. WiFi, Logger, API, Sensoren, Displays usw. Das esphome Script lädt die notwendigen Bibliotheken und generiert ein platformio Environment daraus, d.h. einfach ausgedrückt ein esphome.h ein main.cpp (quasi mit setup() und loop() Funktionen ) und das zugehörige platformio.ini File. Das Generieren der Firmware erledigt dann platformio. Im obigen Beispiel wird also für den "GET" Fall aus:

http_request.get : http://192.168.178.38/value

dieser C++ Code im main.cpp generiert

  interval_intervaltrigger_id = new interval::IntervalTrigger();
  interval_intervaltrigger_id->set_component_source("interval");
  App.register_component(interval_intervaltrigger_id);
  automation_id_5 = new Automation<>(interval_intervaltrigger_id);
  http_request_httprequestsendaction_id = new http_request::HttpRequestSendAction<>(http_request_id);
  http_request_httprequestsendaction_id->set_url("http://192.168.178.xxx/value");
  http_request_httprequestsendaction_id->set_method("GET");
  http_request_httprequestresponsetrigger_id = new http_request::HttpRequestResponseTrigger();
  http_request_httprequestsendaction_id->register_response_trigger(http_request_httprequestresponsetrigger_id);

bzw. für den "POST" Fall wird aus:

http_request.post: "http://192.168.178.xxx/relay/0?turn=on"

dieser C++ Code im main.cpp generiert.

  http_request_httprequestsendaction_id_2 = new   http_request::HttpRequestSendAction<>(http_request_id);
  http_request_httprequestsendaction_id_2->set_url("http://192.168.178.38/relay/0?turn=on");
  http_request_httprequestsendaction_id_2->set_method("POST");
  http_request_httprequestresponsetrigger_id_2 = new http_request::HttpRequestResponseTrigger();

Aber, mal was anderes:

Es ist irgendwie schade, dass der TO nicht mehr mitspielt. Ich dachte immer es läuft hier so: Jemand hat ein Problem und beschreibt es möglichst genau mit der Angabe der aktuellen Schaltung, den Quellen, den Fehlermeldungen usw. Darauf antworten freundliche Forenmitglieder und geben Tips. Der TO testet dann und gibt Feedback ob es funktioniert oder nicht. Ein paar Runden Ping-Pong und am Ende freuen sich alle über eine Lösung, also auch diejenigen, die vielleicht über dasselbe Problem gestolpert sind und nach einer Lösung suchen.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.