Card, changement status via restapi

Bonjour :slight_smile: Mon premier post.

Je dispose actuellement d’une solution domotique avec Jeedom et je cherche à faire un passage vers HA (en douceur…).

J’essaye actuellement à intégrer deux prises dans HA via Jeedom en utilisant des RESTAPI.
Voici les commandes restapi que je dispose sur les prises :

  • Prise 1
    • on
    • off
    • state (return 0 or 1)
  • Prise 2
    • on
    • off
    • state (return 0 or 1)

J’ai installé le dépot « button-card » via HACS (GitHub - custom-cards/button-card: ❇️ Lovelace button-card for home assistant).

J’ai réussi à créer une carte dans lovelace pour le moment assez basique mais je n’arrive pas à la perfectionner :frowning: .

Cette carte pour le moment permet :

  • d’allumer l’ensemble des deux prises via un « tap_action » qui appelle un script pour lancer une séquence d’allumage restapi sur les deux prises
  • d’éteindre les deux prises via un « hold-action » demandant une confirmation, il appelle un script pour lancer une séquence d’extinction restapi sur les deux prises.

Mon problème

J’ai deux problème / évolution que je veux faire mais je n’y arrive pas

  1. Je cherchais à la base à faire une carte du style « light » pour avoir des curseurs à cliquer :
    1.1 Un curseur global pour allumer/éteindre l’ensemble des prises
    1.2 Un curseur unitaire pour chaques prises

N’ayant pas réussi à le faire, je suis parti sur des boutons.
Comme expliqué plus haut, via le bouton j’arrive à faire mes actions, mais je cherche à faire remonter l’état des prises sur le boutton via les restapi.

Pour le moment, je veux faire simple quitt à le faire évoluer par la suite, seul l’état d’une seule prise m’interresse, permet de changer la couleur du logo (vert= ON / red = OFF).

Voici ma configuration actuelle :

extrait « configuration .yaml » (j’ai remplacé mes champs sensibles par des balises <>) :

# Jeedom
rest_command:
  # imprimante 3D power ON
  prusa3d_power_on:
    url: 'https://<jedoom_host>/core/api/jeeApi.php?apikey=<api_key>&type=cmd&id=720'
  # imprimante 3D power OFF
  prusa3d_power_off:
    url: 'https://<jedoom_host>/core/api/jeeApi.php?apikey=<api_key>&type=cmd&id=721'
  # imprimante 3D light ON
  prusa3d_light_on:
    url: 'https://<jedoom_host>/core/api/jeeApi.php?apikey=<api_key>&type=cmd&id=1131'
  # imprimante 3D light OFF
  prusa3d_light_off:
    url: 'https://<jedoom_host>/core/api/jeeApi.php?apikey=<api_key>&type=cmd&id=1132'  

scripts.yaml :

script_prusa_on:
  alias: script_prusa_ON
  sequence:
  - service: rest_command.prusa3d_light_on
  - service: rest_command.prusa3d_power_on
  mode: single
script_prusa_off:
  alias: script_prusa_OFF
  sequence:
  - service: rest_command.prusa3d_light_off
  - service: rest_command.prusa3d_power_off
  mode: single

Ma carte :

type: horizontal-stack
title: Prusa power
cards:
  - type: 'custom:button-card'
    tap_action:
      action: call-service
      service: script.script_prusa_ON
    hold_action:
      action: call-service
      confirmation:
        text: Are you sure you want powered off ?
      service: script.script_prusa_OFF
    show_state: true
    icon: 'mdi:power-settings'

En vous remerciant d’avance pour vos conseils/aides :slight_smile:

Ma configuration


System Health

version core-2021.3.4
installation_type Home Assistant Supervised
dev false
hassio true
docker true
virtualenv false
python_version 3.8.7
os_name Linux
os_version 4.19.0-16-arm64
arch aarch64
timezone Europe/Paris
Home Assistant Community Store
GitHub API ok
Github API Calls Remaining 4970
Installed Version 1.11.3
Stage running
Available Repositories 777
Installed Repositories 5
Home Assistant Cloud
logged_in false
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Hass.io
host_os Debian GNU/Linux 10 (buster)
update_channel stable
supervisor_version supervisor-2021.03.9
docker_version 20.10.5
disk_total 9.7 GB
disk_used 4.9 GB
healthy true
supported true
supervisor_api ok
version_api ok
installed_addons File editor (5.2.0), Samba share (9.3.1)
Lovelace
dashboards 1
resources 1
views 3
mode storage
___

essaie de voir si cette réponse ne conviendrais pas (en l’adaptant bien sûr), car je pense que la solution est vers le switch personnalisé (Template Switch) :

https://forum.hacf.fr/t/commander-un-interrupteur-zwave-de-jeedom-avec-mqtt/4099/17?u=clemalex

Merci pour votre retour.

Je suis effectivement partie pour tester « switch », malheureusement celui-ci pose un soucis.
Je n’ai pas été en mesure de mettre un hold tap (contrairement au bouton).
L’avantage du « hold » est que je peux demander une confirmation pour l’extinction des prises (utiles si « miss click » lors d’une impression de plusieurs heures :slight_smile: )

Je reste donc pour le moment sur la card button.

Sur le liens que vous m’avez transmis, il est fait mention de récupérer la valeur (maleheureusement pas de détail sur cette section).

Je tente toujours de récupérer l’état sans succès… je suis un peu perdu après mes diverses recherches et les différents éléments :

  • sensors
  • binary_sensors
  • entity
  • triger

D’après ce que j’ai compris, il faudrait que :

  • Créer une entitée vide (ex: prise_status) via un « binary_sensor »
  • Peupler cette entité via un trigger :
    • trigger : weebhook ==> set prise_status

Mais, je n’arrive à rien. Je ne trouve pas comment créer cette entity, servant à stocker une variable (0 ou 1)

Tu te méprends car le switch est une entité non un carte. Donc tu peux très bien utiliser un interrupteur (switch) dans la carte de ton choix (bouton dans ton cas) :wink:

Pour l’état, oui il faut partir sur ceci : RESTful binary sensor - Home Assistant

Et tu pourras construire ton switch afin d’avoir une seule entité pour chaque prise.

Merci Clemalex, je sais pas comment j’ai pu passer à coté de ce lien malgré mes recherches (interminables :slight_smile: ).

J’ai réussi à avancer et à récupérer l’état :slight_smile:

Allez zou, je fournis la solution, ça peut servir à d’autre :slight_smile:

Il est surement possible de mieux faire mais ça fonctionne dans mon cas.

L’ensemble des services sont appelés via les APIrest (Jeedom) depuis HA, je n’ai pas réussi à récupérer l’état des prises via les Webhook, j’ai du passer par du restAPI aussi.

L’inconvénient, c’est que HA envoi régulièrement des APIrest (http_get) à Jeedom pour récupérer l’état des prises.
Alors qu’avec le webhook, c’est Jeedom qui fourni l’état à HA pour chaque changement d’état uniquement (plus propre à mon sens moins de « pollution » réseau).

J’ai créé trois « bouton » :

  • Premier

    • Check l’état de la prise 1 pour changer l’icone et sa couleur.
    • Appuis court :
      • Allume la prise 1 et 2 (en appellant les API Jeedom)
    • Appuis long :
      • Demande d’une confirmation :
      • Si oui, arrêt des prises 1 et 2
      • Si non, ne fait rien
  • Deuxième :

    • Check l’état de la prise 1 pour changer l’icone et sa couleur.
    • Appuis court :
      • Allume la prise 1 (en appellant les API Jeedom)
    • Appuis long :
      • Demande d’une confirmation :
      • Si oui, arrêt de la prises 1
      • Si non, ne fait rien
  • Troisième

    • Check l’état de la prise 2 pour changer l’icone et sa couleur.
    • Appuis court :
      • Allume ou éteint la prise 2 (en appellant les API Jeedom)

Je n’ai pas encore « splité » mon fichier de configuration, voici ce que ça donne:

configuration.yaml

binary_sensor:
  - platform: rest
    resource: https://<my_ip>/core/api/jeeApi.php?apikey=<my_apikey>&type=cmd&id=719
    method: GET
    name: printer_power_status
    device_class: power
  - platform: rest
    resource: https://<my_ip>/core/api/jeeApi.php?apikey=<my_apikey>&type=cmd&id=1134
    method: GET
    name: printer_light_status
    device_class: light


rest_command:
  # Jeedom base link
  jeedom_api:
    url: "https://<my_ip>/core/api/jeeApi.php?apikey=<my_apikey>&type=cmd&id={{ cmd_id }}"

switch:
  - platform: template
    switches:
      printer_prusa_plug:
        turn_on:
          - service: rest_command.jeedom_api
            data:
              cmd_id: 720
        turn_off:
          - service: rest_command.jeedom_api
            data:
              cmd_id: 721
        friendly_name: printer_prusa_plug
  - platform: template
    switches:
      printer_prusa_light:
        turn_on:
          - service: rest_command.jeedom_api
            data:
              cmd_id: 1131
        turn_off:
          - service: rest_command.jeedom_api
            data:
              cmd_id: 1132
        friendly_name: printer_prusa_light

Ma carte :

type: horizontal-stack
title: Prusa power
cards:
  - type: 'custom:button-card'
    name: ALL
    tap_action:
      action: call-service
      service: switch.turn_on
      service_data:
        entity_id:
          - switch.printer_prusa_plug
          - switch.printer_prusa_light
    hold_action:
      action: call-service
      confirmation:
        text: Are you sure you want powered off ?
      service: switch.turn_off
      service_data:
        entity_id:
          - switch.printer_prusa_plug
          - switch.printer_prusa_light
    show_state: true
    color_type: icon
    show_icon: true
    styles:
      icon:
        - color: |
            [[[
              if ( (states['binary_sensor.printer_power_status_2'].state == 'off') ) return 'red';
              else return 'green';
            ]]]
    icon: 'mdi:power-settings'
  - type: 'custom:button-card'
    name: Printer
    tap_action:
      action: call-service
      service: switch.turn_on
      service_data:
        entity_id:
          - switch.printer_prusa_plug
    hold_action:
      action: call-service
      confirmation:
        text: Are you sure you want powered off ?
      service: switch.turn_off
      service_data:
        entity_id:
          - switch.printer_prusa_plug
    show_state: true
    color_type: icon
    show_icon: true
    styles:
      icon:
        - color: |
            [[[
              if ( (states['binary_sensor.printer_power_status_2'].state == 'off') ) return 'red';
              else return 'green';
            ]]]
    icon: |
      [[[
        if ( (states['binary_sensor.printer_power_status_2'].state == 'off') ) return 'mdi:power-plug-off-outline';
        else return 'mdi:power-plug-outline';
      ]]]
  - type: 'custom:button-card'
    name: Lights
    tap_action:
      action: toggle
    entity: switch.printer_prusa_light
    show_state: false
    color_type: icon
    show_icon: true
    styles:
      icon:
        - color: |
            [[[
              if ( (states['binary_sensor.printer_light_status'].state == 'off') ) return 'red';
              else return 'green';
            ]]] 
    icon: |
      [[[
        if ( (states['binary_sensor.printer_light_status'].state == 'off') ) return 'mdi:lightbulb-off-outline';
        else return 'mdi:lightbulb-on-outline';
      ]]]

Rendu :
image
image


image

Merci Clemalex pour tes pistes, aides :slight_smile:

1 « J'aime »

:+1: :heart: :hacf:

Je suis d’accord avec toi.

Il n’y a plus qu’à mettre en place une automatisation alors :

:wink:

J’ai exclu l’automatisation pour récupérer l’état. Car, si j’actionne les prises de manière physique, l’état ne remontera pas sur HA.

Je vois pas le rapport avec les webhook… :innocent: