Créer un bouton avec actions et etat via URL

Hello à tous,

Je cherche a créer un bouton avec 2 actions qui déclenchent un call URL ainsi que récupérer le status d’un objet depuis une URL également.

J’ai tenté de chercher un tutorial mais j’ai rien trouvé désolé.

Merci de votre aide!

Mot clé : RESTful Command

Mot clé : RESTful sensor

Merci c’est ce que je cherchais !

Par contre j’avoue ne pas savoir comment activer le rest a un bouton + sensor au niveau entity

Salut,

Peut-être tu pourrais expliquer dans les grandes ligne ce que tu veux faire fonctionnellement.
Plusieurs solutions techniques peuvent faire ce que tu décrit.

Car je sens un petit amalgame entre les notions de bouton au sens interface graphique d’un côté et les entité de l’autre.

Fais des recherches sur le forum… :innocent:

@AlexHass en fait j’ai réussi a associer les calls REST a des boutons mais ca me fait deux boutons différents + le sensor pour l’état. Je cherche une entité plus lisible avec un bouton on/off pour les deux calls et qui change d’icone en fonction du status

Hello,
Le sensor liera automatiquement la valeur à interval régulier.
Tu peux créer un sensor de type scrape sensor ou rest sensor qui lit la valeur toutes les n secondes (paramètre scan_interval). Pour le choix rest ou scrape, tout dépendra ensuite ce que retourne ton URL pour extraire le résultat. Il n’y aura donc pas besoin de bouton puisqu’à lu à intervale régulier (donc pas à la demande).

Voila un exemple de sensor qui lit une valeur la valeur dans une réponse XML, valeur count1, toutes les 10mn.

sensor:
  - platform : scrape
    name: "mon sensor"
    scan_interval: 600
    resource: 'http://192.168.1.100/status.xml'
    select: "count1"

Un appel à la demande, appelée par un bouton par exemple, se fera avec une restfull command comme le souligne aussi @Clemalex, ce qui générera un service dans HA, mais il n’y a à ma connaissance pas moyen de récupérer la valeur retournée par l’url.

Il nous manque un peu la finalité pour t’aider.
Si les appels REST génèrent des commandes et qu’il te faut un retour de l’état, tu peux utiliser un command line avec les 2 url de command et 1 url status. Tu n’aura qu’un switch avec le bon état.

Exemple :

switch:
  - platform: command_line
    switches:
      mon_switch:   
        command_on: 'curl http://192.168.1.100/on >/dev/null'
        command_off: 'curl http://192.168.1.100/off >/dev/null'
        command_state: 'curl http://http://192.168.1.100/on/status.xml'
        value_template: '{% set status = value | regex_findall_index("<led0>(.*)</led0>") %} {% if status == "1" %} true {%- endif -%}'
        command_timeout: 20

C’est exactement pour ça que je disais qu’il ne faut pas confondre bouton de l’interface et entitiés.
Ce que tu veux se fait surement avec un sensor qui va s’occuper de faire les appels et garder un état qui vient d’une requête.
Ensuite le bouton sur l’interface n’est qu’une représentation visuelle et interactive du sensor et de son état.

Bref @Argonaute t’a donné un bon exemple. :slight_smile:

1 « J'aime »

Exactement ce que je cherchais, tout fonctionne bien, merci a vous !

Marque la réponse la plus pertinente en solution pour indiquer aux autres

Bonjour

je souhaire la même chose: piloter une pompe via un ESP (ESPEASY): pouvoir la mettre on/off et avoir un retour sur son état.

mais ca ne marche pas !

je ne trouve pas cette nouvelle entité « Pompe_Fontaine » pour créer un bouton ?

une idée ?

merci déjà,

voici ce que j’ai ajouté dans mon fichier configuration.yaml:

switch:
  - platform: command_line
    switches:
      Pompe_Fontaine:   
        command_on: "curl http://192.168.0.61/control?cmd=gpio,15,1 >/dev/null"
        command_off: "curl http://192.168.0.61/control?cmd=gpio,15,0 >/dev/null"
        command_state: "curl http://192.168.0.61/control?cmd=gpio,15"
        command_timeout: 20
        value_template: >
          {% set json = value | from_json %}
          {% if json.state == 1 %}
            true
          {% else %}
            false
          {% endif %}

les URL’s marche bien (on/off). le retour mis dans command state est le suivant=


{
"log": "port#15: set to 0",
"plugin": 1,
"pin": 15,
"mode": "output",
"state": 0
}

Bonjour,
la syntaxe des command_line à changer depuis le core 2023.6.0.

Exemple :

# Example configuration.yaml entry
command_line:
  - switch:
      name: Kitchen Light
      command_on: switch_command on kitchen
      command_off: switch_command off kitchen

merci bien !!! Je viens de Jeedom et j’adore HA mais alors quelle horreur je passe mon temps a suivre des tutos qui ne fonctionnent plus car périmés …

Oui, ça évolue beaucoup, contrairement à jeedom :joy:
Il faut regarder les docs, qui sont à jour.

Merci

Désormais je vois bien ma nouvelle entité qui est créé

command_line: - switch: name: pompe_fontaine command_on: « curl -X GET http://192.168.0.61/control?cmd=gpio,15,1 >/dev/null » command_off: « curl -X GET http://192.168.0.61/control?cmd=gpio,15,0 >/dev/null » command_state: « curl -X GET http://192.168.0.61/control?cmd=gpio,15 » command_timeout: 20 value_template: > {% set json = value | from_json %} {% if json.state == 1 %} true {% else %} false {% endif%}

Mais rien ne se passe quand j active la pompe via le bouton . Comment puis je debugger et voir les messages d erreur ? Je ne trouve rien dans les logs (lesquels d ailleurs ?)

Dans les logs de HA, dans paramètres / systèmes / journaux.

merci, rien n’apparait dans les logs core ou autre

c’est très frustrant

mais j’ai trouvé et j’ai déjà corrigé

voilà le bon code: la commande curl n’était pas bonne pour HA et l’url pour lire le satus de l’espeasy non-plus

ca marche nickel désormais

command_line:
  - switch:
      name: pompe_fontaine
      command_on: "curl http://192.168.0.61/control?cmd=gpio,15,1"
      command_off: "curl http://192.168.0.61/control?cmd=gpio,15,0"
      command_state: "curl http://192.168.0.61/control?cmd=status,gpio,15"
      command_timeout: 20
      value_template: >
          {% set json = value | from_json %}
          {% if json.state == 1 %}
            true
          {% else %}
            false
          {% endif %}

et j’ai créé un bouton qui lance comme action

1 « J'aime »