SONOFF NsPanel : Tuto complet sous Tasmota & NxPanel

9/ Créer les scénarios pour le faire fonctionner

Le fonctionnement est un peu particulier.
Lorsqu’on change de page, le NsPanel poste sur le topic nspanel/chambreparents/RESULT un JSON page avec la page en question, et attend une réponse avec les éléments à afficher.

Et lorsqu’on clique sur un bouton c’est sur le même topic qu’est posté un JSON button

Voici donc les commandes d’info qui permettent de récupérer les éléments renvoyés par le NsPanel :

Pensez à bien activer la répétition des valeurs pour page et button sinon cela ne déclencherai pas le scénario que nous allons créé ensuite lorsque vous faites deux fois la même action de suite.

image

Concernant les pages

Voici ensuite à quoi ressemble le scénario :

Le premier si avec le trigger permet de savoir qui a déclencher le scénario. Je compte utiliser d’autres NsPanel dans d’autres pièces et cela va me permettre d’avoir un seul scénario. Si vous n’avez qu’un seul NsPanel ou que vous souhaitez faire des scénarios différents ce test n’est pas nécessaire.

Les tests d’en dessous permettent de savoir quel page le NsPanel souhaite afficher, et j’appelle ensuite la bonne action pour mettre à jour la page.

Voici les actions concernées :

Et le code JSON :

{"refresh":{"pid":1,"name":"Alarme","format":2,buttons:[
{"bid":1,"label":"Armer","type":2,"state":1,"icon":6},
{"bid":2,"label":"Desarmer","type":2,"state":1,"icon":6}
]}}

Ce code me permet d’afficher deux boutons pour armer ou désarmer l’alarme de nuit.

{
   "refresh":{
      "pid":2,
      "name":"Chauffage chambre",
      "therm":{
         "set":"#[Chambre parents][Chauffage][Consigne]#",
         "temp":"#[Chambre parents][Chauffage][Température]#",
         "heat":"#[Etage][NsPanel_Helper][Etat_Chauff_CHP]#",
         "state":"#[Etage][NsPanel_Helper][Mode_Chauff_CHP]#"
      }
   }
}

Ce code permet de gérer le type de page thermostat.
Vous voyez que j’utilise un équipement qui s’appelle « NsPanel_Helper » il s’agit d’un virtuel qui me permet de convertir en boolean l’état de mon chauffage en utilisant le plugin thermostat de Jeedom.

Concernant les boutons virtuels

Le principe est le même. Voici le scenario :

Comme vous voyez le principe est le même.
Vous pouvez voir ici que j’utilise le buzzer du NsPanel, voici comment on l’utilise :

Vous pouvez indiquer jusqu’à 4 valeurs, dans l’ordre :

  1. Le nombre de bip
  2. La durée du bip en ms
  3. La durée du silence entre les bip en ms
  4. La tonalité.

Voici la documentation : Buzzer - Tasmota
Sous ESPHome il est possible aussi de faire des mélodies en RTTTL, mais à priori pas possible sous Tasmota : Utilisation de melodie de type rtttl - #21 par Bad

Pour les boutons des pages spécifiques
Pour utiliser les boutons qui sont par exemple sur la page thermostat, vous devez créer un scénario à part. Voici ce que j’ai de mon côté :

Scénario d’initialisation
Vous verrez dans la rubrique suivante comment paramétrer chacun des formats de pages.
Mais au démarrage il faut tout de même initialiser le NsPanel avec les premières informations.
Voici le scénario :


Il est provoqué lorsque le NsPanel devient Online !

On attend 10s qu’il soit bien initialisé avant de lui lancer des actions. Sinon j’ai repéré que parfois ça ne fonctionne pas très bien.
Pour le détail des actions vous verrez ensuite dans la rubrique de paramétrage de la page d’accueil.

Scenarios d’update

Il faut bien sûr penser à mettre à jour les informations sur l’écran d’accueil, voici comment j’actualise la date :wink:


Pour toutes les autres infos, j’aurais pu faire cela directement dans les équipements en allant dans les paramètres des commandes infos pour pousser la valeur à chaque changement, mais j’ai préféré centralisé dans un scénario :

Utilisation des boutons physiques
Il y a deux boutons physiques sur le NsPanel, vous pouvez biensur brancher des équipements dessus qui s’allumeront avec les relais. Vous pouvez déclencher ces relais à distance via MQTT, et vous pouvez aussi tout simplement ne rien brancher dessus et vous servir de leur état pour lancer des actions sur votre Jeedom. C’est ce que j’ai fait, je les utilise pour piloter les volets de la pièce.

Voici comment cela fonctionne :


Vous voyez que je repasse ensuite les boutons en OFF, c’est pour faire un retour d’état et ne déclencher qu’au moment ou ils passent sur ON. J’aurai pu être moins maniaque et déclencher l’action au changement d’état quel qu’il soit, mais on aurait vu sur l’interface qu’ils sont parfois en état actifs et parfois non actifs… :slight_smile:

Attention, il y a une subtilité ici.
L’état des bouton power est ON et OFF, et pourtant j’utilise un type binaire.
Il faut aller configurer une valeur calculée (comme expliquée avant dans ce tuto)

1 « J'aime »

10/ Configurer l’affichage de la page d’accueil

De manière générale pour commander l’affichage de l’écran nous allons envoyer des commandes JSON sur le noeud nspanel/chambreparents/cmnd/Screen

Nous avons déjà vu dans le chapitre 8 comment envoyer des notifications dans l’encart en haut à gauche

image

C’est avec la commande JSON {"notifications":{"text":"Votre message"}}
Attention, il ne faut pas envoyer d’accents ! Ils seraient mal affichés !

A chaque fois que vous postez un nouveau message, une petite cloche apparait jusqu’à temps que l’utilisateur tape dessus avec son doigt :slight_smile:
image

Voyons maintenant comment vider cette zone : c’est avec la commande {"notifications":{"reset":1}}

Pour le coin en haut à droite, tout se fait tout seul ! L’heure est mise à jour automatiquement par le NsPanel.

S’il n’est pas à la bonne heure, vous pouvez vous rendre sur l’adresse IP de votre NsPanel pour atteindre l’interface Tasmota, et ensuite rendez-vous dans la console ( Consoles > Console) pour taper la commande suivante :
timezone +2

Cela règlera votre NsPanel sur le bon fuseau horaire.

A coté de cette cloche il y a aussi 4 zones de notification où vous pouvez afficher des icones de différentes couleurs. Cela s’appelle les Warnings !

image

Voici les icones disponibles avec leurs couleurs :


La commande JSON est donc de la forme : { "warnings":[{"id":x,"type":y,"state":z}] }

Concernant la zone Weather en bas à gauche
Nous pouvons modifier l’icone de météo, la température principale, et une zone de texte en dessous.
Le JSON à envoyer ressemble à ça par exemple :

{"weather": {"temp": x, "icon":x, "feels": x, [or] "summary": x}
{"weather": {"temp": 27, "icon": "04d", "feels": 4}}
{"weather": {"temp": 27, "icon": "04d", "summary": "Humidity 65%"}}

Si on envoi « feels » pour la température ressentie, il sera écris feels sur l’écran, et c’est dommage !
Je vous propose donc d’utiliser plutôt « summary » qui est une zone de texte ! Cela permet d’écrire ce que vous voulez !
Je met ainsi la température intérieure de la pièce qui possède le NsPanel, mais vous pouvez mettre ce que vous voulez !

image

De plus vous n’êtes pas obligés d’envoyer tout le JSON weather complet, j’ai fait deux commandes, la première pour mettre à jour la météo extérieure, et la seconde pour la partie summary avec la température intérieure.

Voici le JSON de ma commande pour la partie météo :

{
	"weather" : {
		"temp" : #[Informations][Météo][Température]#,
		"icon" : #[Systèmes][Script_Icon_meteo][ico_Code]#
	}
}

Il y a une difficulté ici, pour pouvoir changer les icones météo, il faut envoyer le bon code. Il s’agit des codes utilisés par OpenWeatherMap

On a de la chance, le plugin météo officiel de Jeedom s’appuie aussi sur OpenWeatherMap !
Le problème c’est qu’il ne nous donne pas le code d’icone ! Il nous donne juste l’ID des conditions météo au format OpenWeatherMap avec la commande « Numéro condition », c’est déjà super !!!

Nous allons donc devoir convertir cela !
Pour cela il y a plusieurs possibilités, la première déjà présente sur le forum proposée par @TortueGeniale est un peu complexe mais fonctionne et gère les icones jours et nuit.

Pour ma part j’ai opté par l’ajout d’un équipement script avec un petit code PHP qui permet de faire la conversion. Je ne gère pas le jour et la nuit car je n’en ai pas l’utilité, mais c’est très facile de l’ajouter :wink:

ConvertWeatherIcon.php.txt (1,8 Ko)

Mais @seb821 utilise plutôt un bloc code dans un scénario pour faire la conversion…
A vous de voir ce que vous préférez !

Réglage du bouton « Favoris »

image

Ce bouton permet d’ouvrir un écran avec certaines fonctions que vous verrez dans le chapitre 11
Pour le configurer, il faut envoyer la commande JSON suivante :
{"favorite": {"pid": x, "format":y (1-15)}}

pid étant l’ID de la page, et format, le format d’affichage expliqué en chapitre 11

La zone de texte en bas à droite
image

Elle se configure simplement en envoyant ce JSON :
{"summary": {"title": "x", "temp":y, [or] "text": "y"}

Le title s’affiche en plus gros au dessus (lundi dans mon exemple) et temp ou text (il faut choisir l’un ou l’autre) s’écrivent en plus petit en dessous.

J’utilise une commande message pour gérer cela :

Réglage de la page secondaire (swipe à droite)

Lorsque vous swipez depuis la droite vers la gauche, l’écran suivant apparait.
Pour le configurer il faut envoyer le JSON suivant :
‹ {« start »: {« pid »: x, « format »:y (1-15)}} ›

La même chose que pour le bouton favoris mais avec « start »

Ces deux pages sont à configurer une fois après le démarrage du NsPanel. Il suffit d’envoyer la commande JSON et après lors de l’appui sur le bouton, ou lors du swipe vous arriverez sur la page suivante.
Si vous mettez le même pid et le même format, vous aboutirez sur la même page :slight_smile:

.
.
.

Voici un résumé de toutes les commandes de l’écran d’accueil :

Ces images sont tirées de l’excellente doc de OpenHab qui explique tout bien mieux que moi. C’est ici un résumé, mais avec cette doc tout est expliqué dans le détail, mais adapté pour OpenHab et non Jeedom

1 « J'aime »

11/ Aller plus loin avec les config d’écran

Il existe ensuite différentes sortes de pages qu’on peut utiliser sur ne NsPanel avec NxPanel.

Vous pouvez avoir des pages de deux à 8 boutons comme celle ci :

image

Vous avez une liste d’icone disponibles dans différentes couleurs :

Et que chacun de ces boutons renvoient ensuite vers des pages pour gérer l’équipement sélectionné :

image

image

Tout cela est très bien expliqué dans la doc, et je vous laisse regarder les JSON à utiliser pour ces écrans, c’est à partir de la page 35 : https://github.com/alfpf/NSPanel-setup/raw/main/OpenHAB3%20and%20Sonoff%20NSPanel%20v2.9.pdf

Pour ma part vous pouvez voir plus haut comment je gère la page thermostat et la page deux boutons.

1 « J'aime »

12/ Installer JMQTT en plus de MQTT manager

Si vous utilisez déjà le plugin MQTT manager en guise de Broker, pas de panique, il ne vous faudra pas tout changer pour passer sur JMQTT. Vous pouvez utiliser les deux plugins en parallèle.

Pour ce faire installer simplement JMQTT avec ses dépendances et laissez le croire qu’il n’y a pas de broker :

image

Ensuite ajoutez simplement un broker en mettant les paramètres de votre broker sous MQTT manager

image

C’est aussi simple que cela !!

Seule chose importante, mettez bien un client-id unique !!
Si vous mettez aussi jeedom il risque d’y avoir un conflit, car les deux clients vont se battre avec le broker pour prendre la place et se déconnecter l’un l’autre.

2 « J'aime »

13/ Sources et ressources

Pour mes recherches je me suis basé sur :

ATTENTION, si vous voulez un jour restaurer votre NsPanel avec le firmware d’origine pour le faire fonctionner sous eWeLink, il faut absolument que vous restauriez le backup qui vient de votre propre NsPanel. Il contient son identifiant unique, et si vous restaurez le backup d’un autre NsPanel, vous aurez une erreur 30014 au moment de la synchro wifi. Impossible alors de le faire refonctionner sous eWeLink…

1 « J'aime »

A l’aide !!!

J’ai rencontré plusieurs problèmes avec mon NsPanel et voici comment vous en sortir.

Problème de vitesse de communication entre l’ESP et le Nextion

Premièrement, le driver que j’avais déposé de fonctionnait pas complètement, il ne se passait rien j’ai compris que l’ESP ne communiquait pas avec le Nextion.
Pour communiquer ensembles, l’ESP et le Nextion utilisent un port série sur lequel ils se transmettent des informations. Par contre il faut qu’ils communiquent à la même vitesse, hors, pour une raison inconnue, le Nextion était passé sur une vitesse bien plus lente ! Le driver indiquant la vitesse de l’ESP, il était configuré à une vitesse qui n’est pas la bonne, ce n’est pas grave, nous allons corriger cela !

Pour ce faire, éditez le fichier autoexec.be avec un éditeur de texte (notepad suffit) et remplacer toutes les valeurs 115200 par 9600

A ce moment là vous pouvez de nouveau faire communiquer les deux. Par contre c’est beaucoup plus lent et ça engendre des problèmes de communication, vous pouvez voir apparaitre très souvent ce type de message dans le Topic Result :
{"nextion":"bytes('22666F726D6174223A20392C2022706964223A20322C202274797065223A2022...')"}

C’est tout simplement car l’ESP n’arrive pas à comprendre ce que lui envoi le Nextion sur le port serie !

Il faut donc repasser le Nextion sur la bonne vitesse ! (Merci à @seb821 pour l’astuce !)
Pour ce faire nous sommes obligés de passer par un Firmware du Nextion qui le fait repasser à la bonne vitesse.
Pour le flasher, rendez-vous sur l’interface de Tasmota, dans Consoles > Console puis tapez FlashNextion http://nspanel.pky.eu/test.tft

Cela va vous permettre d’afficher un écran blanc avec entre autres, un bouton qui permet de repasser à la vitesse 115200. Cliquez dessus, puis redémarrez le NsPanel.

Retournez sur Tasmota et dans Consoles > Console tapez installnxpanel comme tout à l’heure.
Cela va réinstaller de nouveau le bon Firmware.

N’oubliez pas ensuite de repasser votre driver à la bonne vitesse !!

Voilà pour cette interface NxPanel. Je suis maintenant passé sur l’interface d’origine avec Tasmota que je trouve plus jolie et plus fonctionnelle, je vais vous préparer un tuto avec pleins d’astuces :wink:

Merci d’avance pour vos remarques, ajustements, idées d’améliorations, ou même les remontées de coquilles ou fautes que vous voyez :wink:

Erreur 30014 au moment de la synchro wifi

ATTENTION, si vous voulez un jour restaurer votre NsPanel avec le firmware d’origine pour le faire fonctionner sous eWeLink, il faut absolument que vous restauriez le backup qui vient de votre propre NsPanel. Il contient son identifiant unique, et si vous restaurez le backup d’un autre NsPanel, vous aurez une erreur 30014 au moment de la synchro wifi. Impossible alors de le faire refonctionner sous eWeLink…

Le buzzer ne fonctionne plus correctement

Après la restauration d’un backup Tasmota, le buzzer ne fonctionne plus très bien, il ne fait pas des bip mais des petits bruits étranges.
Pour y remédier il suffit de réappliquer le template.
Allez dans Configuration > Configure other puis remplacer le template actuel par :
{"NAME":"NSPanel","GPIO":[0,0,0,0,3872,0,0,0,0,0,32,0,0,0,0,225,0,480,224,1,0,0,0,33,0,0,0,0,0,0,0,0,0,0,4736,0],"FLAG":0,"BASE":1,"CMND":"ADCParam1 2,11200,10000,3950 | Sleep 0 | BuzzerPWM 1"}

Validez, ça redémarre, et ça refonctionne !!

2 « J'aime »

Bonjour.

Un tutoriel comme je les affectionne càd didactique avec sources documentées.

Bravo.

1 « J'aime »

Déjà un grand merci pour ce super tutoriel très bien fait et qui permet vraiment de gagner du temps. Du coup cela m’a motivé à me lancer sur le NSPanel qui trainait depuis un moment dans un tiroir.

Voici quelques remarques que j’ai pu noter :

Je n’ai pas eu besoin de faire cela. De base l’écran était bien à 115200. J’ai cru comprendre que certains programmes pouvaient faire basculer l’écran en 9600. C’est notamment évoqué dans cette issue. On peut flasher le tft partagé avec la commande suivante dans Tasmota ce qui fait apparaître un bouton pour revenir en 115200 (flash testé mais pas le bouton): FlashNextion http://nspanel.pky.eu/test.tft

Je n’ai pas ce soucis a priori. Mais comme indiqué, c’est peut-être lié à la vitesse en 9600.

Pour information, on peut le faire sans souder comme expliqué dans cette vidéo. Ce n’est pas évident, mais avec un peu de patience on y arrive.

Je n’ai pas réussi à faire fonctionner cette commande, elle n’est pas prise en compte. Par contre la commande complète fonctionne.

Je l’ai fait avec un scénario et un bloc code, ça marche nickel.

Il faut que je me plonge dans les écrans secondaires maintenant mais c’est déjà un bon début :slightly_smiling_face:

Merci beaucoup @seb821 pour tes commentaires !

Je ne sais pas comment j’ai fait pour passer en 9600 du coup, mais j’ai flashé le tft que tu as partagé et ça fonctionne ! Je suis bien repassé en 115200 !

Je vais reflasher le bon tft de NxPanel et voir si j’ai encore mes problèmes de commandes qui passent ma !

Du coup j’étais parti sur le nextion d’origine sur mon deuxième NsPanel et j’ai réussi à faire fonctionner les écrans secondaires ! Je ferai un tuto aussi :wink:

Je vais modifier ici avec tes éléments du coup !!

Concernant le dim low 0, il fonctionne chez moi, après le délai d’attente pour basculer en mode dim, il s’éteint complètement.

Pour ton bout de code dans le scénario pour gérer les icones météo, si tu veux bien le partager je l’ajouterai dans le tuto :wink:

EDIT : Merci @seb821 !! Ca fonctionne !
Je n’ai plus de messages de ce type : {"nextion":"bytes('22666F726D6174223A20392C2022706964223A20322C202274797065223A2022...')"}

Et tout est bcp plus réactif !

Hello @seb821

J’ai adapté le tuto avec tout tes retours !
Merci encore !

Je vais maintenant m’attaquer à celui avec Tasmota et le tft d’origine :wink:

Super, merci.

Pour le scénario pour la météo, j’utilise un bloc code avec ces lignes (adaptation du script proposé) :

// Code météo
$numero_condition = cmd::byString('#[Météo][Météo XXX][Numéro condition]#')->execCmd();
$scenario->setLog('Numéro condition : '.$numero_condition);
switch ($numero_condition) {
  case "200": $code_meteo = "11d"; break;
  case "201": $code_meteo = "11d"; break;
  case "202": $code_meteo = "11d"; break;
  case "210": $code_meteo = "11d"; break;
  case "211": $code_meteo = "11d"; break;
  case "212": $code_meteo = "11d"; break;
  case "221": $code_meteo = "11d"; break;
  case "230": $code_meteo = "11d"; break;
  case "231": $code_meteo = "11d"; break;
  case "232": $code_meteo = "11d"; break;
  case "300": $code_meteo = "09d"; break;
  case "301": $code_meteo = "09d"; break;
  case "302": $code_meteo = "09d"; break;
  case "310": $code_meteo = "09d"; break;
  case "311": $code_meteo = "09d"; break;
  case "312": $code_meteo = "09d"; break;
  case "313": $code_meteo = "09d"; break;
  case "314": $code_meteo = "09d"; break;
  case "321": $code_meteo = "09d"; break;
  case "500": $code_meteo = "10d"; break;
  case "501": $code_meteo = "10d"; break;
  case "502": $code_meteo = "10d"; break;
  case "503": $code_meteo = "10d"; break;
  case "504": $code_meteo = "10d"; break;
  case "511": $code_meteo = "13d"; break;
  case "520": $code_meteo = "09d"; break;
  case "521": $code_meteo = "09d"; break;
  case "522": $code_meteo = "09d"; break;
  case "531": $code_meteo = "09d"; break;
  case "600": $code_meteo = "13d"; break;
  case "601": $code_meteo = "13d"; break;
  case "602": $code_meteo = "13d"; break;
  case "611": $code_meteo = "13d"; break;
  case "612": $code_meteo = "13d"; break;
  case "613": $code_meteo = "13d"; break;
  case "615": $code_meteo = "13d"; break;
  case "616": $code_meteo = "13d"; break;
  case "620": $code_meteo = "13d"; break;
  case "621": $code_meteo = "13d"; break;
  case "622": $code_meteo = "13d"; break;
  case "701": $code_meteo = "50d"; break;
  case "711": $code_meteo = "50d"; break;
  case "721": $code_meteo = "50d"; break;
  case "731": $code_meteo = "50d"; break;
  case "741": $code_meteo = "50d"; break;
  case "751": $code_meteo = "50d"; break;
  case "761": $code_meteo = "50d"; break;
  case "762": $code_meteo = "50d"; break;
  case "771": $code_meteo = "50d"; break;
  case "781": $code_meteo = "50d"; break;
  case "800": $code_meteo = "01d"; break;
  case "801": $code_meteo = "02d"; break;
  case "802": $code_meteo = "03d"; break;
  case "803": $code_meteo = "04d"; break;
  case "804": $code_meteo = "04d"; break;
}
$scenario->setLog('Code météo : '.$code_meteo);
$tags['#codeMeteo#'] = $code_meteo;
  
$scenario->setTags($tags);

Ensuite on récupère l’information avec #codeMeteo# dans le même scénario :

Hello @dcat

Merci pour ce tuto, ça me donne très très envie de remplacer mon esp en DIY à l’entrée.

Question : (j’avoue que je n’ai pas encore fouillé partout sur Commu et ailleurs) il y a au moins 3 NSPanel différents disponibles à la vente, NSPanel, NSPanel-US et NSPanel pro. On est d’accord que ce tuto s’adresse aux 2 premiers et que le pro est sous Android, donc très différent dans le fonctionnement ?
Le pro a l’air plus séduisant, surtout que je n’ai pas vraiment besoin des boutons physiques, tu as déjà un avis dessus ?

Attention, Pub. auto est là pour publier automatiquement sur le Broker au moment du changement de la valeur d’une commande dans le payload. Si la commande action est déclanché manuellement ou qu’il n’y pas de commande info dans le payload, Pub. auto ne servira à rien.

Bad

1 « J'aime »

A noter que le NSPanel pro possède son propre broker mqtt et un contrôleur zigbee.
Je pense déjà à en mettre 1 dans une residence secondaire, connecter les appareils zigbee dessus et attaquer le NSPAnel Pro via plugin-jmqtt à 400km de là avec mon Jeedom principal pour piloter les appareils zigbee … Plus besoin de Jeedom déporté

Norbert

1 « J'aime »

T’es un grand malade, je kiff !
Bon je vais me commander un NSPanel Pro !

Oui a refaire j’aurais pris aussi des NsPanel Pro car je trouve que c’est quand même de la grosse bidouille le résultat…

1 « J'aime »

Tu penses mettre un VPN entre tes deux logements ? Ou tu ouvres ton broker sur le net ? Filtrage ip ?

sans doute un tunnel SSH, mais je n’ai pas encore creuser

Si c’est de l’Android, il y a peut être moyen de faire un vrai tunnel VPN ou SSH depuis le NSPanel Pro lui-même (à vérifier et tester)

Bonjour,
Je viens de recevoir mon NS PANEL en version US.
J’ai suivi ce super tuto (merci @dcat ) , mais quand j’essaye de flasher avec le firmware US Version Landscape:

FlashNextion http://nspanel.pky.eu/lui-us-l-release.tft

Mais cela bloque à ce stade et cela n’avance pas.

Si vous avez une idée, je suis preneur.

Merci

Hello,

Ce tft est celui de lovelace UI. Il n’est pas compatible avec ce tuto, il est utilisable très facilement avec HomeAssistant mais pas Jeedom.
Je ne suis pas sur que tu puisse utiliser NxPanel avec un NsPanel US.
Les tft de NxPanel sont à cette adresse : Index of /nxpanel

Si tu veux un tuto qui fonctionne avec le NsPanel US tu peux suivre celui là, mais c’est avec l’interface d’origine : SONOFF NsPanel : Tuto complet sous Tasmota & écrans d’origine