Sonoff NSPanel et ESPHome

pour info, le fait d’ajouter le git suivant permet de corriger en attendant la 3.2

  - source: github://pr#3331
    components: ["json"]

La version 3.2 est sortie hier. Attention si vous n’avez pas la mise à jour, vérifiez que vous avez le bon repo

non effectivement, ca vient pas de la… mon HA part en vrille sans ancune raison donc je me suis penché sur le dernier truc installé…
edit : j’ai trouvé ce qu’il n’allait pas… mon bluetooth interne de mon nuc qui fait tout vriller :expressionless:

@Makai :
hello
j’ai encore repris un peu de temps pour intégrer mon nspanel, en repartant de ton code ou de celui de Dean.
j’arrive à intégrer du RGB ou cover :smile:
mais hormis, le on/off les autres changements ne passent pas.
quand j’appuie sur une couleur ou sur le slide de brightness, la valeur revient après 1 sec sur celle de HA et n’est donc pas modifiée.
dans la vidéo de Dean à 5 min 30, je crois comprendre qu’il faut catcher quelque chose dans HA pour effectuer le changement.

tu as fait cela? comment?

merci

Hello,

Dans la partie NSPanel: / on_json_message:on fait appelle à un service HA pour mettre à jour HA. Du coup par la suite, il faut récupérer l’info de HA. Cela se fait dans :

sensor:
  - platform: homeassistant
    id: entree_light_color_temp
    entity_id: light.entree_bulb
    attribute: color_temp
    filters:
      - calibrate_linear:
         - 250 -> 254
         - 454 -> 0
    on_value:
      then:
        - script.execute: ha_light_entree_update

Qui permet de récupérer la nouvelle valeur puis fait appelle à un script, ici ha_light_entree_update qui envoi un json à l’écran du NSPanel pour mise a jour de l’interface de l’écran

1 « J'aime »

merci de ta réponse, j’ai bien pourtant cette partie :

  - platform: homeassistant
    # Light light.living_room_rgb_bright brightness (0-255)
    id: living_room_rgb_bright
    entity_id: light.cloche
    attribute: brightness
    on_value:
      then:
        - script.execute: ha_wled_salon_update

puis le script :

  - id: ha_wled_salon_update
    # Decode RGB Attribute ((r,g,b) and send to panel
    then:
      - lambda: |-
          if (id(wled_light_salon).state) {
            int i_brightness = int(id(living_room_rgb_bright).state / 255 * 100); 
            std::string s = id(living_room_rgb_rgb).state;
            std::string r = "255";
            std::string g = "0";
            std::string b = "0";
            int p1 = s.find(",");
            if (p1 > 0) {
                int p2 = s.find(",",p1+1);
                r = s.substr(1, p1-1).erase(0,s.find_first_not_of(" ")); 
                g = s.substr(p1+2,p2-p1-2).erase(0,s.find_first_not_of(" ")); 
                b = s.substr(p2+2,s.length()-2).erase(0,s.find_first_not_of(" ")); 
            }
            id(nspanel1).send_json_command(0x86,"{\"id\":\"wled_salon\",\"params\":{\"switch\":\"on\",\"light_type\":1,\"mode\":1,\"bright\":" + to_string(i_brightness) + ",\"colorR\":" + to_string(r) + ",\"colorG\":" + to_string(g) + ",\"colorB\":" + to_string(b) + "}}");
          } else {
            id(nspanel1).send_json_command(0x86,"{\"id\":\"wled_salon\",\"params\":{\"switch\":\"off\"}}");
          }

mais rien n’y fait, j’ai beau changer la luminosité sur le NSPanel, il n’y a pas de modif coté HA et donc sur mon ampoule. et ensuite cela revient à la valeur initiale.

désolé de faire mon boulet mais l’utilisation de ce composant sans doc c’est pas simple.
il y a des id partout… :frowning:

je pense que je viens de comprendre.

lors de la définition des widgets, Dean fait un appel à un script HA

  on_json_message:
    then:
      # Widget 2 (type:0x86 id:light.cloche) - Salon RGB
      - if:
          condition:
            lambda: 'return (type == 0x86 && root.containsKey("id") && strcasecmp(root["id"], "wled_salon") == 0);'
          then:
            - if:
                condition:
                  lambda: 'return (root["params"].containsKey("switch") && root["params"]["switch"] == "on" && !root["params"].containsKey("bright"));'
                then:
                  - homeassistant.service:
                      service: light.turn_on
                      data:
                        entity_id: light.cloche
            - if:
                condition:
                  lambda: 'return (root["params"].containsKey("switch") && root["params"]["switch"] == "off");'
                then:
                  - homeassistant.service:
                      service: light.turn_off
                      data:
                        entity_id: light.cloche
            - if:
                condition:
                  lambda: 'return (root["params"].containsKey("bright"));'
                then:
                  - homeassistant.service:
                      service: script.set_light_on_rgb
                      data:
                        entity_name: light.cloche
                        brightness: !lambda 'return int(root["params"]["bright"].as<float>() / 100 * 255);'
                        red: !lambda 'return root["params"]["colorR"].as<int>();'
                        green: !lambda 'return root["params"]["colorG"].as<int>();'
                        blue: !lambda 'return root["params"]["colorB"].as<int>();'

ce script script.set_light_on_rgb est à priori ce qui fait l’appel.

set_light_on_rgb:
  alias: ESPHome RGB light set
  sequence:
  - service: light.turn_on
    target:
      entity_id: '{{ entity_name }}'
    data_template:
      brightness: '{{ brightness }}'
      rgb_color:
      - '{{ red }}'
      - '{{ green }}'
      - '{{ blue }}'

j’ai vérifié dans ton code @Makai, toi tu passes directement l’info dans la config du widget via brightness et Color_temp :

            - if:
                condition:
                  lambda: 'return (root["params"].containsKey("white"));'
                then:
                  - sensor.template.publish:
                      id: l_entree_ct
                      state: !lambda 'return int(root["params"]["white"]["ct"].as<float>());'
                  - homeassistant.service:
                      service: light.turn_on
                      data:
                        entity_id: light.entree_bulb
                        brightness: !lambda 'return int(root["params"]["white"]["br"].as<float>() / 100 * 254);'
                        color_temp: !lambda 'return int(id(l_entree_ct).state);'

enfin, je pense. je vais vérifier mon hypothèse dès que je rentre à la maison.

Edit :
je confirme que cela fonctionne avec le script dans HA :partying_face::partying_face::partying_face:
je vais essayer ta méthode aussi pour voir

1 « J'aime »

Effectivement j’ai choisi de ne pas faire de script dans HA, pour moi pas de valeur ajoutée. On peut directement passer les valeurs dans l’appel au service HA

1 « J'aime »

Bon pour ceux qui comme moi galère avec les zones de toucher non alignés sur l’écran j’ai trouvé ça sur le forum US:

lcd_dev fffb 0002 0000 0020

à rajouter dans la section programms avant de charger la première page.

Idem pour la largeur préféré des images en 452x320 :slight_smile:

Hello!

J’ai acheté 4 nspanel que j’aimerais utiliser en temps que thermostat (chauffage électrique controllé par des shelly) et éventuellement, avoir la caméra de la sonnette qui s’affiche (ou en cliquant sur un bouton), quand ça sonne à la porte :smiley:

Du coup, je suppose que esphome est le mieux? Si oui, j’ai regardé un peu sur le net, et je vois plusieurs github qui en parle.

Etant noob en la matière (HA, et nspanel) je devrais partir sur quoi?

Merci!

Il y a 2 firmwares vraiment utilisables: ESPHOME et TASMOTA.
Il y en a d’autres mais à mon avis pas assez évolués et difficilement exploitables (c’est le cas du firmware d’origine).

Je n’ai travaillé qu’avec ESPHOME donc je laisse ceux qui maitrisent la version sous tasmota te répondre.

ESPHOME te permet une vrai personnalisation de ton NSPANEL mais tu vas devoir dessiner et composer complètement ton interface graphique. Ton NSPANEL peut être lier avec ton HA, ou complètement dépendant.

Pour le thermostat c’est déjà prévu dans esphome, tu peux lire ça pour voir comment faire : Thermostat Climate Controller — ESPHome

concernant la sonnette, tu peux faire afficher une notification, apparaitre une page, un bouton…
Par contre pour afficher une caméra, bin là je sais pas trop, mais je crois pas que c’est possible car l’ensemble du graphisme est enregistré dans le nextion, et il reçoit juste des commandes.

Tant pis pour la caméra au moins si j’ai une notif c’est déjà ça.
Après le but c’est que ça soit le serveur HA qui controle les radiateurs et les nspanel ne servira qu’à avoir la température de contrôler celle de la pièce. Les radiateurs seront connectés avec des Shelly.
Je regarderais mais je ne sais pas si le : " Thermostat Climate Controller — ESPHome " sera pertinent dans ce sens.

pour la notification, c’est sur HA avec une automatisation. Par contre, sur le NSPanel tu peux pas exemple ouvrir une page bien spécifique lorsque cela sonne (quelque chose de bien flash et clignotant :joy: ), tu pourrais peut être même faire sonner une sirene ou buzzer avec l’un des relais dispo… il y a moyen de faire

AH oui dans ce cas, c’est pas l’idéal. tu peux juste utiliser une page type thermostat et tu remontes les infos de commande (température de consigne, mode…). Ca aussi c’est possible.

Avant de commencer, il faut que tu visualises bien ce que tu veux faire. ensuite tu vas devoir créer chaque page nécessaire avec NEXTION EDITOR. (déjà il te faut une page pour le screensaver, une page pour le thermostat, et une page pour l’alerte sonnette).
Et pour finir tu développes le code esphome, pour gérer tout cela.

Ton projet est intéressant, et je te conseille de créer ton propre sujet. Nous pourrons certainement t’aider dans beaucoup de ces phases, sauf pour le côté design et besoin, car ça c’est à toi de savoir ce que tu veux

A+ Fred

Merci pour les infos!

J’ai déjà créé un sujet ici :

J’essai justement de choper un maximum d’information avant de vraiment me lancer et d’acheter (sauf les nspanel que j’ai du coup)

tu as parfaitement raison, c’est comme cela que l’on construit un projet avec une base solide.

oui mais je te parlais de la création du NSPANEL (graphisme, code…) pas de tout ce qui gravite autour de HA :wink:. Effectivement, si toute ta gestion n’est pas encore terminée sur HA… ça va être difficile de concevoir ton panel, au moins pour la partie code, car tu peux déjà travailler sur l’interface graphique.

Oui effectivement je peux prendre le temps pour l’UI.

Quelqu’un à parler de ça sur mon sujet :

C’est basé sur Tasmota mais je ne sais pas vraiment ce que je peux faire (ou non), mais ça semble déjà avoir un UI assez sympa.

Oui le firmware tasmota est plutôt pas mal, mais te limite dans la personnalisation.

Il y a une page thermostat, mais comme toi tu ne veux pas d’un vrai thermostat, juste un pupitre de commande, je ne suis pas certain que cela soit possible.

Après si tu n’es pas trop pressé pour avoir ton résultat définitif, et que cela ne te dérange pas d’essayer, ça pourrait te montrer les possibilités et te donner des idées pour ton interface

Effectivement je vais plutôt directement aller avec ESPHome, même si c’est plus long et dur à mettre en place, au moins j’aurais vraiment ce que je souhaite.

Une petite question concernant le flashage des NSPANEL par ESPHOME.
J’ai regardé un peu les vidéos mais avant de me lancer (vu que j’en ai 4) j’ai un petit doute.
Je peux flasher le NSPANEL et ensuite, m’occuper de tout ce qui touche l’UI, ou alors c’est l’inverse à faire? (ie. Tout faire et ensuite flasher sans pouvoir changer sans flasher)
Merci :v:

C’est d’abord le firmware.
Pour mettre à jour ton UI, c’est un service HA qu’il faut lancer ESPHOME: nspanel_1_upload_tft

Ce service est créé par esphome lorsque tu configures ton nspanel

api:

  services:
    - service: upload_tft
      then:
        - lambda: 'id(disp1)->upload_tft();'

à la limite tu pourrais même utiliser ton nspanel sans l’écran, mais ça n’aurait pas grand intérêt :wink:

Perso, j’ai mis une config de base en premier pour que le NSPANEL tourne sur ESPHOME, et ensuite je me suis fait une vrai config NSPanel. D’autant plus, qu’une fois sur firmware ESPHOME, tu peux tout faire directement en wifi, plus besoin de le connecter en filaire

1 « J'aime »