Bonjour a tous,
Je vous présente le Projet OpenHASP qui permet d’utiliser des ESP avec écran tactile et controler Home Assistant par MQTT.
Pourquoi je vous parle de OpenHASP, alors qu’il existe ESPHome ?
Pour la simple raison qu’il existe des écrans tactile 5 et 7 pouces, mais qui ne sont pas pris en charge par ESPHome. Il manque les pilotes des écrans RGB de c’est taille.
J’ai acheter un ESP avec écran tactile de 7 pouces et me suis retrouver a pas pouvoir m’en servir appart utiliser arduino ou plateformIO ( qui on le pilote pour l’écran) . Mais coder en t’en que débutant a été très dur. Et a force de chercher sur google, j’ai trouver un post sur mon modèle d’esp avec écran et le fameux OpenHASP.
Il y fallu que je compile un firmware pour fonctionner avec mon modèle car pas pris en charge encore dans OpenHASP.  Je vous mets un lien d’un tuto que j’ai fais sur le forum Anglais 5inch display ILI6122 & ILI5960 need help to add it to ESPHome - #11 by WarC0zes - ESPHome - Home Assistant Community
Requis:
un ESP et un écran tactile.
vous trouverez la liste de compatibilité ici
Installation:
Vous pouvez flasher l’esp directement d’une page web et connecter au PC.
Pour les derniers appareils pris en charge utiliser la version nightly https://nightly.openhasp.com/
Pour la version normal ( moins d’appareils pris en charge) c’est ce site https://install.openhasp.com/
Faut sélectionner son modèle et faire install. ( suivant les ESP, faudra le passer en mode download ).
Configuration:
Quand le flash est fini, débrancher l’sub de l’esp et rebrancher le.
OpenHASP démarre et vous deveza configurer le WiFi.
renseignez SSiD et mot de passe de votre box.
Ca va ce connecter au WiFi.
Ensuite, il faut installer l’intégration OpenHASH par HACS. Choisir la version 0.7.2 pour OpenHASH v0.7.0 ou la version 0.6.6 si vous avez installer le firmware 0.6.3.
Redémarrez Home Assistant.
Maintenant, on va configurer la partie MQTT. Ce connecter par votre navigateur au plate ( nom donnée par OpenHASP pour un esp, plateau en français  ) par l’adresse ip.
 ) par l’adresse ip.
Regarder sur votre box pour savoir  l’ip atribué a votre plate.  ( t’en cas être dans votre box, fixer l’ip avec le bail dhcp de votre plate ).
Vous arrivez sur le menu d’openHASP.
aller dans configuration et MQTT
Dans Hostname choisir le nom de son plate , exemple Plate01.
Dans Broker mettre l’ip de son broker ( ip de HA si vous utiliser l’addon mosquitto broker)
Mettre son user et mot de passe ( vous pouvez créer un utilisateur plate01 dans Home assistant )
Pour les Topics laisser telle quelle.
Sauvegarder le setting.
Redémarrer votre plate par le menu principal.
Le composant découvrira automatiquement votre plate et vous les verrez apparaître dans Configuration > Appareils et services > openHASP  .
Lorsque Home Assistant détectera votre plate, vous devrez lui donner un nom.
Des options vous seront présentées pour définir le niveau de luminosité du rétroéclairage lorsque votre plate est inactive et, en option, vous pouvez définir un chemin vers un pages.jsonl fichier central contenant la conception de cette plate.
vous recevrez un avertissement indiquant que vous devez ajouter une configuration manuelle pour les objets de votre configuration.yaml. L’ignorer et continuer la configuration.
Créer un dossier openhasp dans /config/ et créer un fichier pages.jsonl dedans.
Dans votre configuration.yaml ajouter ces lignes:
homeassistant:
  allowlist_external_dirs:
  - /config
openhasp: !include openhasp.yaml

Créer un fichier openhasp.yaml dans /config/.
C’est pratiquement fini, il vous reste a faire un menu.
un exemple de menu:

code a mettre dans le pages.jsonl:
{"page":0,"id":4,"obj":"label","x":175,"y":5,"h":30,"w":45,"text":"00.0","align":2,"bg_color":"#2C3E50"}
{"page":0,"id":5,"obj":"label","x":220,"y":5,"h":30,"w":45,"text":"°C","align":0,"bg_color":"#2C3E50"}
{"page":0,"id":6,"obj":"label","x":3,"y":5,"h":30,"w":62,"text":"00:00","align":0,"bg_color":"#2C3E50"}
page correspond au numéro de la page.
id correspond au nuémro d’un objet.
objet correspond au type utiliser.
code a mettre dans openhasp.yaml ( adapter les entités ) :
plate01:
  objects:
    - obj: "p0b4"
      properties:
        "text": "{{ states('sensor.my_room_temperature') }}"
    - obj: "p0b6"
      properties:
        "text": "{{ states('sensor.time') }}"
obj: "p0b4" correspond a la page 0 et objet id 4.
Vous avez plus cas recharger l’intégration OpenHASP, pour voir les changements.
Vous avez plein d’exemple dans la doc Example Configurations - openHASP
Pour tous ce qui est design regarder la doc File Editor - openHASP
Vous avez un site en ligne pour créer des pages facilement: https://haspdesigner.qrisonline.nl/
Voila le rendu final de mes appareils.
Sur le bar avec un socle de WiiU 
les trois pages que j’ai faite:



Ajout d’un timer pour le chauffage, avec le temps restant avant l’arrêt et ajout du pourcentage d’allumage du chauffage. ( j’utilise le thermostat de @Jean-Marc_Collin GitHub - jmcollin78/versatile_thermostat: A full featured Thermostat for Home Assistant: presets, window, motion, presence and overpowering management)
Code du pages.jsonl
{"comment":" ----------- Page 0 - Navigation Buttons ------------"}
{"page":0,"id":2,"obj":"label","x":683,"y":1,"h":30,"w":100,"text":"00.0°C","text_font":26,"align":0,"bg_color":"#2C3E50","text_color":"#FFFFFF"}
{"page":0,"id":1,"obj":"label","x":3,"y":1,"h":30,"w":214,"text":"00:00","text_font":26,"align":0,"bg_color":"#2C3E50","text_color":"#FFFFFF"}
{"page":0,"id":3,"obj":"btn","x":763,"y":0,"w":30,"h":30,"text":"\uE5A9","text_font":"2","bg_opa":0,"border_width":0}
{"page":0,"id":4,"obj":"btn","action":{"down": "page prev"},"x":0,"y":447,"w":266,"h":32,"bg_color":"#2C3E50","text":"\uE141","text_color":"#FFFFFF","radius":0,"border_side":0,"text_font":28}
{"page":0,"id":5,"obj":"btn","action":{"down": "page back"},"x":267,"y":447,"w":266,"h":32,"bg_color":"#2C3E50","text":"\uE2DC","text_color":"#FFFFFF","radius":0,"border_side":0,"text_font":28}
{"page":0,"id":6,"obj":"btn","action":{"down": "page next"},"x":534,"y":447,"w":266,"h":32,"bg_color":"#2C3E50","text":"\uE142","text_color":"#FFFFFF","radius":0,"border_side":0,"text_font":28}
{"page":0,"id":7,"obj":"label","x":650,"y":0,"w":30,"h":40,"text":"\uE2DC","text_font":28,"bg_opa":0,"border_width":0,"bg_color":"#2C3E50","text_color":"#FFFFFF"}
{"page":0,"id":8,"obj":"label","x":541,"y":0,"w":30,"h":40,"text":"\uE6A1","text_font":28,"bg_opa":0,"border_width":0,"bg_color":"#2C3E50","text_color":"#FFFFFF"}
{"page":0,"id":9,"obj":"label","x":574,"y":1,"h":30,"w":100,"text":"00.0°C","text_font":26,"align":0,"bg_color":"#2C3E50","text_color":"#FFFFFF"}
{"comment":"---------- Limit page prev/next between 1 and 3 ----------"}
{"page":1,"id":0,"prev":3}
{"page":3,"id":0,"next":1}
{"page":1,"comment":" ---- Home ----"}
{"page":1,"id":1,"obj":"btn","x":0,"y":0,"w":800,"h":32,"text":"Maison","text_font":28,"bg_color":"#2C3E50","text_color":"#FFFFFF","radius":0,"border_side":0}
{"page":1,"id":3,"obj":"btn","x":585,"y":35,"w":2,"h":407,"text":"","value_font":22,"text_color":"#000000","radius":0,"border_side":15,"border_color":"#2C3E50"}
{"page":1,"id":4,"obj":"btn","x":10,"y":50,"w":105,"h":90,"toggle":true,"text":"\uE335","text_font":32,"mode":"break","align":1,"radius":15,"bg_color1":"#2C3E50","text_color1":"#fffb00"}
{"page":1,"id":5,"obj":"label","x":30,"y":143,"h":40,"w":120,"text":"Entrée","text_font":26,"text_color":"#2C3E50"}
{"page":1,"id":6,"obj":"btn","x":125,"y":50,"w":105,"h":90,"toggle":true,"text":"\uE335","align":1,"text_font":32,"mode":"break","radius":15,"bg_color1":"#2C3E50","text_color1":"#fffb00"}
{"page":1,"id":7,"obj":"label","x":140,"y":143,"h":40,"w":120,"text":"Cuisine","text_font":26,"text_color":"#2C3E50"}
{"page":1,"id":8,"obj":"btn","x":240,"y":50,"w":105,"h":90,"toggle":true,"text":"\uE335","align":1,"text_font":32,"mode":"break","radius":15,"bg_color1":"#2C3E50","text_color1":"#fffb00"}
{"page":1,"id":9,"obj":"label","x":249,"y":143,"h":40,"w":120,"text":"Spot Cui","text_font":26,"text_color":"#2C3E50"}
{"page":1,"id":10,"obj":"btn","x":355,"y":50,"w":105,"h":90,"toggle":true,"text":"\uE335","align":1,"text_font":32,"mode":"break","radius":15,"bg_color1":"#2C3E50","text_color1":"#fffb00"}
{"page":1,"id":11,"obj":"label","x":356,"y":143,"h":40,"w":120,"text":"Hotte Asp","text_font":26,"text_color":"#2C3E50"}
{"page":1,"id":12,"obj":"btn","x":470,"y":50,"w":105,"h":90,"toggle":true,"text":"\uE335","align":1,"text_font":32,"mode":"break","radius":15,"bg_color1":"#2C3E50","text_color1":"#fffb00"}
{"page":1,"id":13,"obj":"label","x":476,"y":143,"h":40,"w":120,"text":"Salle à M","text_font":26,"text_color":"#2C3E50"}
{"page":1,"id":14,"obj":"switch","x":705,"y":93,"w":60,"h":30,"radius":15,"bg_color1":"#2C3E50"}
{"page":1,"id":15,"obj":"label","x":647,"y":93,"h":40,"w":60,"text":"Chat","text_font":26,"text_color":"#2C3E50"}
{"page":1,"id":16,"obj":"switch","x":705,"y":138,"w":60,"h":30,"radius":15,"bg_color1":"#2C3E50"}
{"page":1,"id":17,"obj":"label","x":630,"y":138,"h":40,"w":70,"text":"Matrix","text_font":26,"text_color":"#2C3E50"}
{"page":1,"id":20,"obj":"btn","x":10,"y":185,"w":105,"h":90,"toggle":true,"text":"\uE335","align":1,"text_font":32,"mode":"break","radius":15,"bg_color1":"#2C3E50","text_color1":"#fffb00"}
{"page":1,"id":21,"obj":"label","x":21,"y":278,"h":40,"w":120,"text":"Spot Séj","text_font":26,"text_color":"#2C3E50"}
{"page":1,"id":22,"obj":"btn","x":125,"y":185,"w":105,"h":90,"toggle":true,"text":"\uE335","align":1,"text_font":32,"mode":"break","radius":15,"bg_color1":"#2C3E50","text_color1":"#fffb00"}
{"page":1,"id":23,"obj":"label","x":144,"y":278,"h":40,"w":120,"text":"Séjour","text_font":26,"text_color":"#2C3E50"}
{"page":1,"id":18,"obj":"btn","x":240,"y":185,"w":105,"h":90,"toggle":true,"text":"\uE335","align":1,"text_font":32,"mode":"break","radius":15,"bg_color1":"#2C3E50","text_color1":"#fffb00"}
{"page":1,"id":19,"obj":"label","x":263,"y":278,"h":40,"w":120,"text":"Salon","text_font":26,"text_color":"#2C3E50"}
{"page":1,"id":24,"obj":"btn","x":355,"y":185,"w":105,"h":90,"toggle":true,"text":"\uE335","align":1,"text_font":32,"mode":"break","radius":15,"bg_color1":"#2C3E50","text_color1":"#fffb00"}
{"page":1,"id":25,"obj":"label","x":357,"y":278,"h":40,"w":120,"text":"Led Salon","text_font":26,"text_color":"#2C3E50"}
{"page":1,"id":26,"obj":"btn","x":470,"y":185,"w":105,"h":90,"toggle":true,"text":"\uE335","align":1,"text_font":32,"mode":"break","radius":15,"bg_color1":"#2C3E50","text_color1":"#fffb00"}
{"page":1,"id":27,"obj":"label","x":473,"y":278,"h":40,"w":120,"text":"Led Table","text_font":26,"text_color":"#2C3E50"}
{"page":1,"id":28,"obj":"label","x":675,"y":403,"w":30,"h":30,"text":"\uF40B","text_font":28,"bg_opa":0,"border_width":0,"text_color":"#2C3E50"}
{"page":1,"id":29,"obj":"label","x":705,"y":407,"w":75,"h":22,"text":"00.0€","text_font":22,"align":0,"text_color":"#2C3E50"}
{"page":1,"id":30,"obj":"label","x":675,"y":371,"w":30,"h":30,"text":"\uF40B","text_font":28,"bg_opa":0,"border_width":0,"text_color":"#2C3E50"}
{"page":1,"id":31,"obj":"label","x":705,"y":375,"w":90,"h":22,"text":"00.00kWh","text_font":22,"align":0,"text_color":"#2C3E50"}
{"page":1,"id":32,"obj":"label","x":675,"y":339,"w":30,"h":30,"text":"\uF40B","text_font":28,"bg_opa":0,"border_width":0,"text_color":"#2C3E50"}
{"page":1,"id":33,"obj":"label","x":705,"y":343,"w":75,"h":22,"text":"0000W","text_font":22,"align":0,"text_color":"#2C3E50"}
{"page":1,"id":34,"obj":"btn","x":598,"y":353,"w":75,"h":75,"text":"00","text_font":34,"mode":"break","align":1,"radius":15,"text_color":"#000000","border_color":"#2C3E50"}
{"page":1,"id":35,"obj":"btn","x":591,"y":330,"w":200,"h":2,"text":"","value_font":22,"text_color":"#000000","radius":0,"border_side":15,"border_color":"#2C3E50"}
{"page":1,"id":36,"obj":"btn","x":10,"y":320,"w":105,"h":90,"toggle":true,"text":"\uE335","align":1,"text_font":32,"mode":"break","radius":15,"bg_color1":"#2C3E50","text_color1":"#fffb00"}
{"page":1,"id":37,"obj":"label","x":12,"y":413,"h":40,"w":120,"text":"Lampe PC","text_font":26,"text_color":"#2C3E50"}
{"page":2,"comment":" ---- Thermostat ----"}
{"page":2,"id":1,"obj":"btn","x":0,"y":0,"w":800,"h":32,"text":"Thermostat","text_font":28,"bg_color":"#2C3E50","text_color":"#FFFFFF","radius":0,"border_side":0}
{"page":2,"id":2,"obj":"btn","x":7,"y":159,"w":190,"h":2,"text":"","value_font":22,"text_color":"#000000","radius":0,"border_side":15,"border_color":"#2C3E50"}
{"page":2,"id":3,"obj":"btn","x":212.5,"y":159,"w":265,"h":2,"text":"","value_font":22,"text_color":"#000000","radius":0,"border_side":15,"border_color":"#2C3E50"}
{"page":2,"id":4,"obj":"btn","x":7,"y":279,"w":190,"h":2,"text":"","value_font":22,"text_color":"#000000","radius":0,"border_side":15,"border_color":"#2C3E50"}
{"page":2,"id":5,"obj":"btn","x":212.5,"y":279,"w":265,"h":2,"text":"","value_font":22,"text_color":"#000000","radius":0,"border_side":15,"border_color":"#2C3E50"}
{"page":2,"id":6,"obj":"btn","x":480,"y":35,"w":2,"h":405,"text":"","value_font":22,"text_color":"#000000","radius":0,"border_side":15,"border_color":"#2C3E50"}
{"page":2,"id":8,"obj":"btn","x":486,"y":248,"w":305,"h":2,"text":"","value_font":22,"text_color":"#000000","radius":0,"border_side":15,"border_color":"#2C3E50"}
{"page":2,"id":9,"obj":"btn","x":7,"y":399,"w":190,"h":2,"text":"","value_font":22,"text_color":"#000000","radius":0,"border_side":15,"border_color":"#2C3E50"}
{"page":2,"id":10,"obj":"btn","x":212.5,"y":399,"w":265,"h":2,"text":"","value_font":22,"text_color":"#000000","radius":0,"border_side":15,"border_color":"#2C3E50"}
{"page":2,"id":101,"obj":"label","x":223.5,"y":45,"w":70,"h":25,"text":"Séjour","text_font":16,"align":1,"text_color":"#2C3E50"}
{"page":2,"id":102,"obj":"label","x":575,"y":45,"w":140,"h":25,"text":"Aujourd'hui","text_font":16,"align":1,"text_color":"#2C3E50"}
{"page":2,"id":103,"obj":"label","x":695,"y":45,"w":100,"h":25,"text":"Demain","text_font":16,"align":1,"text_color":"#2C3E50"}
{"page":2,"id":104,"obj":"label","x":223.5,"y":165,"w":70,"h":25,"text":"Salon","text_font":16,"align":1,"text_color":"#2C3E50"}
{"page":2,"id":105,"obj":"label","x":520,"y":250,"w":50,"h":25,"text":"heure","text_font":16,"align":1,"text_color":"#2C3E50"}
{"page":2,"id":106,"obj":"label","x":620,"y":250,"w":50,"h":25,"text":"heure","text_font":16,"align":1,"text_color":"#2C3E50"}
{"page":2,"id":122,"obj":"label","x":720,"y":250,"w":50,"h":25,"text":"heure","text_font":16,"align":1,"text_color":"#2C3E50"}
{"page":2,"id":107,"obj":"label","x":12,"y":45,"w":180,"h":25,"text":"Termostat Séjour","text_font":16,"align":1,"text_color":"#2C3E50"}
{"page":2,"id":108,"obj":"label","x":12,"y":165,"w":180,"h":25,"text":"Termostat Salon","text_font":16,"align":1,"text_color":"#2C3E50"}
{"page":2,"id":109,"obj":"label","x":12,"y":130,"w":180,"h":25,"text":"Offline","text_font":16,"align":1,"text_color":"#2C3E50"}
{"page":2,"id":110,"obj":"label","x":12,"y":250,"w":180,"h":25,"text":"Offline","text_font":16,"align":1,"text_color":"#2C3E50"}
{"page":2,"id":111,"obj":"btn","x":5,"y":75,"w":50,"h":50,"text":"\uE374","text_font":48,"mode":"break","align":1,"radius":15,"text_color":"#0000ff","border_color":"#2C3E50","bg_color":"#2C3E50"}
{"page":2,"id":112,"obj":"btn","x":67,"y":75,"w":70,"h":50,"text":"00.0","text_font":32,"mode":"break","align":1,"radius":15,"text_color":"#000000","border_color":"#2C3E50"}
{"page":2,"id":113,"obj":"btn","x":150,"y":75,"w":50,"h":50,"text":"\uE415","text_font":48,"mode":"break","align":1,"radius":15,"text_color":"#ff0000","border_color":"#2C3E50","bg_color":"#2C3E50"}
{"page":2,"id":114,"obj":"btn","x":5,"y":195,"w":50,"h":50,"text":"\uE374","text_font":48,"mode":"break","align":1,"radius":15,"text_color":"#0000ff","border_color":"#2C3E50","bg_color":"#2C3E50"}
{"page":2,"id":115,"obj":"btn","x":67,"y":195,"w":70,"h":50,"text":"00.0","text_font":32,"mode":"break","align":1,"radius":15,"text_color":"#000000","border_color":"#2C3E50"}
{"page":2,"id":116,"obj":"btn","x":150,"y":195,"w":50,"h":50,"text":"\uE415","text_font":48,"mode":"break","align":1,"radius":15,"text_color":"#ff0000","border_color":"#2C3E50","bg_color":"#2C3E50"}
{"page":2,"id":145,"obj":"btn","x":305,"y":45,"w":50,"h":110,"toggle":true,"text":"\uEAD7","text_font":32,"mode":"break","align":1,"radius":15,"text_color":"#2C3E50","border_color":"#2C3E50","bg_color1":"#2C3E50","text_color1":"#fffb00"}
{"page":2,"id":143,"obj":"btn","x":365,"y":45,"w":50,"h":50,"toggle":false,"text":"\uE60C","text_font":32,"mode":"break","align":1,"radius":15,"text_color":"#2C3E50","border_color":"#2C3E50"}
{"page":2,"id":117,"obj":"btn","x":425,"y":45,"w":50,"h":50,"toggle":false,"text":"\uE594","text_font":32,"mode":"break","align":1,"radius":15,"text_color":"#2C3E50","border_color":"#2C3E50"}
{"page":2,"id":144,"obj":"btn","x":365,"y":105,"w":50,"h":50,"toggle":false,"text":"\uE51B","text_font":32,"mode":"break","align":1,"radius":15,"text_color":"#2C3E50","border_color":"#2C3E50"}
{"page":2,"id":118,"obj":"btn","x":425,"y":105,"w":50,"h":50,"toggle":false,"text":"\uE599","text_font":32,"mode":"break","align":1,"radius":15,"text_color":"#2C3E50","border_color":"#2C3E50"}
{"page":2,"id":146,"obj":"btn","x":305,"y":165,"w":50,"h":110,"toggle":true,"text":"\uEAD7","text_font":32,"mode":"break","align":1,"radius":15,"text_color":"#2C3E50","border_color":"#2C3E50","bg_color1":"#2C3E50","text_color1":"#fffb00"}
{"page":2,"id":147,"obj":"btn","x":365,"y":165,"w":50,"h":50,"toggle":false,"text":"\uE60C","text_font":32,"mode":"break","align":1,"radius":15,"text_color":"#2C3E50","border_color":"#2C3E50"}
{"page":2,"id":148,"obj":"btn","x":365,"y":225,"w":50,"h":50,"toggle":false,"text":"\uE51B","text_font":32,"mode":"break","align":1,"radius":15,"text_color":"#2C3E50","border_color":"#2C3E50"}
{"page":2,"id":119,"obj":"btn","x":425,"y":165,"w":50,"h":50,"toggle":false,"text":"\uE594","text_font":32,"mode":"break","align":1,"radius":15,"text_color":"#2C3E50","border_color":"#2C3E50"}
{"page":2,"id":120,"obj":"btn","x":425,"y":225,"w":50,"h":50,"toggle":false,"text":"\uE599","text_font":32,"mode":"break","align":1,"radius":15,"text_color":"#2C3E50","border_color":"#2C3E50"}
{"page":2,"id":121,"obj":"label","x":223.5,"y":91,"w":70,"h":22,"text":"Offline","text_font":22,"align":1,"text_color":"#2C3E50"}
{"page":2,"id":124,"obj":"label","x":223.5,"y":210,"w":70,"h":22,"text":"Offline","text_font":22,"align":1,"text_color":"#2C3E50"}
{"page":2,"id":127,"obj":"label","x":223.5,"y":133,"w":70,"h":22,"text":"Offline","text_font":22,"align":1,"text_color":"#2C3E50"}
{"page":2,"id":130,"obj":"label","x":223.5,"y":253,"w":70,"h":24,"text":"Offline","text_font":22,"align":1,"text_color":"#2C3E50"}
{"page":2,"id":133,"obj":"label","x":245.5,"y":64,"w":24,"h":26,"text":"\uE50F","text_font":24,"align":1,"text_color":"#ff0000"}
{"page":2,"id":136,"obj":"label","x":245.5,"y":183,"w":24,"h":26,"text":"\uE50F","text_font":24,"align":1,"text_color":"#ff0000"}
{"page":2,"id":139,"obj":"label","x":245.5,"y":109,"w":24,"h":24,"text":"\uE58E","text_font":24,"align":1,"text_color":"#0000ff"}
{"page":2,"id":142,"obj":"label","x":245.5,"y":228,"w":24,"h":24,"text":"\uE58E","text_font":24,"align":1,"text_color":"#0000ff"}
{"page":2,"id":149,"obj":"btn","x":615,"y":75,"w":58,"h":60,"toggle":false,"text":"\uE5A8","text_font":50,"border_side":0,"bg_color":"#2C3E50","text_color":"#FFFFFF"}
{"page":2,"id":150,"obj":"btn","x":715,"y":75,"w":58,"h":60,"toggle":false,"text":"\uE5A8","text_font":50,"border_side":0,"bg_color":"#2C3E50","text_color":"#FFFFFF"}
{"page":2,"id":151,"obj":"label","x":625,"y":145,"w":70,"h":22,"text":"00.0°C","text_font":22,"align":0,"text_color":"#ff0000"}
{"page":2,"id":152,"obj":"label","x":625,"y":169,"w":70,"h":22,"text":"00.0°C","text_font":22,"align":0,"text_color":"#0000ff"}
{"page":2,"id":153,"obj":"label","x":596,"y":142,"w":24,"h":26,"text":"\uE50F","text_font":24,"align":0,"text_color":"#ff0000"}
{"page":2,"id":154,"obj":"label","x":596,"y":166,"w":24,"h":26,"text":"\uE50F","text_font":24,"align":0,"text_color":"#0000ff"}
{"page":2,"id":155,"obj":"label","x":625,"y":194,"w":70,"h":22,"text":"00%","text_font":22,"align":0,"text_color":"#0000ff"}
{"page":2,"id":156,"obj":"label","x":596,"y":191,"w":24,"h":26,"text":"\uE58E","text_font":24,"align":0,"text_color":"#0000ff"}
{"page":2,"id":157,"obj":"label","x":625,"y":218,"w":75,"h":22,"text":"00.0mm","text_font":22,"align":0,"text_color":"#2C3E50"}
{"page":2,"id":158,"obj":"label","x":596,"y":215,"w":24,"h":26,"text":"\uE58C","text_font":24,"align":0,"text_color":"#2C3E50"}
{"page":2,"id":159,"obj":"label","x":725,"y":145,"w":70,"h":22,"text":"00.0°C","text_font":22,"align":0,"text_color":"#ff0000"}
{"page":2,"id":160,"obj":"label","x":725,"y":169,"w":70,"h":22,"text":"00.0°C","text_font":22,"align":0,"text_color":"#0000ff"}
{"page":2,"id":161,"obj":"label","x":696,"y":142,"w":24,"h":26,"text":"\uE50F","text_font":24,"align":0,"text_color":"#ff0000"}
{"page":2,"id":162,"obj":"label","x":696,"y":166,"w":24,"h":26,"text":"\uE50F","text_font":24,"align":0,"text_color":"#0000ff"}
{"page":2,"id":163,"obj":"label","x":725,"y":194,"w":70,"h":22,"text":"00%","text_font":22,"align":0,"text_color":"#0000ff"}
{"page":2,"id":164,"obj":"label","x":696,"y":191,"w":24,"h":26,"text":"\uE58E","text_font":24,"align":0,"text_color":"#0000ff"}
{"page":2,"id":165,"obj":"label","x":725,"y":218,"w":75,"h":22,"text":"00.0mm","text_font":22,"align":0,"text_color":"#2C3E50"}
{"page":2,"id":166,"obj":"label","x":696,"y":215,"w":24,"h":26,"text":"\uE58C","text_font":24,"align":0,"text_color":"#2C3E50"}
{"page":2,"id":167,"obj":"label","x":525,"y":346,"w":70,"h":22,"text":"00.0°C","text_font":22,"align":0,"text_color":"#ff0000"}
{"page":2,"id":168,"obj":"label","x":525,"y":370,"w":70,"h":22,"text":"00%","text_font":22,"align":0,"text_color":"#0000ff"}
{"page":2,"id":169,"obj":"label","x":496,"y":343,"w":24,"h":26,"text":"\uE50F","text_font":24,"align":0,"text_color":"#ff0000"}
{"page":2,"id":170,"obj":"label","x":496,"y":367,"w":24,"h":26,"text":"\uE58E","text_font":24,"align":0,"text_color":"#0000ff"}
{"page":2,"id":171,"obj":"label","x":525,"y":394,"w":70,"h":22,"text":"00km","text_font":22,"align":0,"text_color":"#2C3E50"}
{"page":2,"id":172,"obj":"label","x":496,"y":393,"w":24,"h":26,"text":"\uE59D","text_font":24,"align":0,"text_color":"#2C3E50"}
{"page":2,"id":173,"obj":"label","x":525,"y":418,"w":75,"h":22,"text":"00.0mm","text_font":22,"align":0,"text_color":"#2C3E50"}
{"page":2,"id":174,"obj":"label","x":496,"y":415,"w":24,"h":26,"text":"\uE58C","text_font":24,"align":0,"text_color":"#2C3E50"}
{"page":2,"id":175,"obj":"btn","x":515,"y":280,"w":58,"h":60,"toggle":false,"text":"\uE5A8","text_font":50,"border_side":0,"bg_color":"#2C3E50","text_color":"#FFFFFF"}
{"page":2,"id":176,"obj":"label","x":625,"y":346,"w":70,"h":22,"text":"00.0°C","text_font":22,"align":0,"text_color":"#ff0000"}
{"page":2,"id":177,"obj":"label","x":625,"y":370,"w":70,"h":22,"text":"00%","text_font":22,"align":0,"text_color":"#0000ff"}
{"page":2,"id":178,"obj":"label","x":596,"y":343,"w":24,"h":26,"text":"\uE50F","text_font":24,"align":0,"text_color":"#ff0000"}
{"page":2,"id":179,"obj":"label","x":596,"y":367,"w":24,"h":26,"text":"\uE58E","text_font":24,"align":0,"text_color":"#0000ff"}
{"page":2,"id":180,"obj":"label","x":625,"y":394,"w":70,"h":22,"text":"00km","text_font":22,"align":0,"text_color":"#2C3E50"}
{"page":2,"id":181,"obj":"label","x":596,"y":393,"w":24,"h":26,"text":"\uE59D","text_font":24,"align":0,"text_color":"#2C3E50"}
{"page":2,"id":182,"obj":"label","x":625,"y":418,"w":75,"h":22,"text":"00.0mm","text_font":22,"align":0,"text_color":"#2C3E50"}
{"page":2,"id":183,"obj":"label","x":596,"y":415,"w":24,"h":26,"text":"\uE58C","text_font":24,"align":0,"text_color":"#2C3E50"}
{"page":2,"id":184,"obj":"btn","x":615,"y":280,"w":58,"h":60,"toggle":false,"text":"\uE5A8","text_font":50,"border_side":0,"bg_color":"#2C3E50","text_color":"#FFFFFF"}
{"page":2,"id":185,"obj":"label","x":725,"y":346,"w":70,"h":22,"text":"00.0°C","text_font":22,"align":0,"text_color":"#ff0000"}
{"page":2,"id":186,"obj":"label","x":725,"y":370,"w":70,"h":22,"text":"00%","text_font":22,"align":0,"text_color":"#0000ff"}
{"page":2,"id":187,"obj":"label","x":696,"y":343,"w":24,"h":26,"text":"\uE50F","text_font":24,"align":0,"text_color":"#ff0000"}
{"page":2,"id":188,"obj":"label","x":696,"y":367,"w":24,"h":26,"text":"\uE58E","text_font":24,"align":0,"text_color":"#0000ff"}
{"page":2,"id":189,"obj":"label","x":725,"y":394,"w":70,"h":22,"text":"00km","text_font":22,"align":0,"text_color":"#2C3E50"}
{"page":2,"id":190,"obj":"label","x":696,"y":393,"w":24,"h":26,"text":"\uE59D","text_font":24,"align":0,"text_color":"#2C3E50"}
{"page":2,"id":191,"obj":"label","x":725,"y":418,"w":75,"h":22,"text":"00.0mm","text_font":22,"align":0,"text_color":"#2C3E50"}
{"page":2,"id":192,"obj":"label","x":696,"y":415,"w":24,"h":26,"text":"\uE58C","text_font":24,"align":0,"text_color":"#2C3E50"}
{"page":2,"id":193,"obj":"btn","x":715,"y":280,"w":58,"h":60,"toggle":false,"text":"\uE5A8","text_font":50,"border_side":0,"bg_color":"#2C3E50","text_color":"#FFFFFF"}
{"page":2,"id":194,"obj":"label","x":12,"y":285,"w":190,"h":25,"text":"Ventilateur Salon","text_font":16,"align":1,"text_color":"#2C3E50"}
{"page":2,"id":195,"obj":"btn","x":5,"y":315,"w":50,"h":50,"text":"\uE374","text_font":48,"mode":"break","align":1,"radius":15,"text_color":"#0000ff","border_color":"#2C3E50","bg_color":"#2C3E50"}
{"page":2,"id":196,"obj":"btn","x":67,"y":315,"w":70,"h":50,"text":"00","text_font":32,"mode":"break","align":1,"radius":15,"text_color":"#000000","border_color":"#2C3E50"}
{"page":2,"id":197,"obj":"btn","x":150,"y":315,"w":50,"h":50,"text":"\uE415","text_font":48,"mode":"break","align":1,"radius":15,"text_color":"#ff0000","border_color":"#2C3E50","bg_color":"#2C3E50"}
{"page":2,"id":198,"obj":"btn","x":305,"y":285,"w":50,"h":110,"toggle":true,"text":"\uE210","text_font":32,"mode":"break","align":1,"radius":15,"text_color":"#2C3E50","border_color":"#2C3E50","bg_color1":"#2C3E50","text_color1":"#fffb00"}
{"page":2,"id":199,"obj":"btn","x":365,"y":285,"w":50,"h":50,"toggle":true,"text":"\uE456","text_font":32,"mode":"break","align":1,"radius":15,"text_color":"#2C3E50","border_color":"#2C3E50","bg_color1":"#2C3E50","text_color1":"#fffb00"}
{"page":2,"id":200,"obj":"btn","x":425,"y":285,"w":50,"h":50,"toggle":true,"text":"\uE32A","text_font":32,"mode":"break","align":1,"radius":15,"text_color":"#2C3E50","border_color":"#2C3E50","bg_color1":"#2C3E50","text_color1":"#fffb00"}
{"page":2,"id":201,"obj":"btn","x":365,"y":345,"w":50,"h":50,"toggle":false,"text":"\uE04D","text_font":32,"mode":"break","align":1,"radius":15,"text_color":"#2C3E50","border_color":"#2C3E50"}
{"page":2,"id":202,"obj":"btn","x":425,"y":345,"w":50,"h":50,"toggle":false,"text":"\uE054","text_font":32,"mode":"break","align":1,"radius":15,"text_color":"#2C3E50","border_color":"#2C3E50"}
{"page":2,"id":203,"obj":"label","x":12,"y":370,"w":180,"h":25,"text":"Offline","text_font":16,"align":1,"text_color":"#2C3E50"}
{"page":2,"id":204,"obj":"btn","x":232,"y":345,"w":50,"h":50,"toggle":false,"text":"\uE51B","text_font":32,"mode":"break","align":1,"radius":15,"text_color":"#2C3E50","border_color":"#2C3E50"}
{"page":2,"id":205,"obj":"btn","x":232,"y":285,"w":50,"h":50,"text":"00","text_font":32,"mode":"break","align":1,"radius":15,"text_color":"#000000","border_color":"#2C3E50"}
{"page":2,"id":206,"obj":"btn","x":7,"y":410,"w":188,"h":25,"text":"Alertes","text_font":22,"mode":"break","align":1,"radius":15,"text_color":"#2C3E50","border_color":"#2C3E50","bg_color":"#2C3E50"}
{"page":2,"id":207,"obj":"label","x":213,"y":410,"w":258,"h":25,"text":"Aucune","text_font":22,"mode":"crop","align":1,"text_color":"#2C3E50"}
{"page":2,"id":208,"obj":"label","x":128,"y":130,"w":100,"h":25,"text":"pourcent","text_font":16,"align":1,"text_color":"#2C3E50"}
{"page":2,"id":209,"obj":"label","x":128,"y":250,"w":100,"h":25,"text":"pourcent","text_font":16,"align":1,"text_color":"#2C3E50"}
{"page":2,"id":210,"obj":"label","x":2,"y":130,"w":62,"h":25,"text":"timer","text_font":16,"align":1,"text_color":"#2C3E50"}
{"page":2,"id":211,"obj":"label","x":2,"y":250,"w":62,"h":25,"text":"timer","text_font":16,"align":1,"text_color":"#2C3E50"}
{"page":2,"id":212,"obj":"label","x":475,"y":45,"w":140,"h":25,"text":"Maintenant","text_font":16,"align":1,"text_color":"#2C3E50"}
{"page":2,"id":213,"obj":"btn","x":515,"y":75,"w":58,"h":60,"toggle":false,"text":"\uE5A8","text_font":50,"border_side":0,"bg_color":"#2C3E50","text_color":"#FFFFFF"}
{"page":2,"id":214,"obj":"label","x":525,"y":145,"w":70,"h":22,"text":"00.0°C","text_font":22,"align":0,"text_color":"#ff0000"}
{"page":2,"id":215,"obj":"label","x":525,"y":169,"w":70,"h":22,"text":"00%","text_font":22,"align":0,"text_color":"#0000ff"}
{"page":2,"id":216,"obj":"label","x":496,"y":142,"w":24,"h":26,"text":"\uE50F","text_font":24,"align":0,"text_color":"#ff0000"}
{"page":2,"id":217,"obj":"label","x":496,"y":166,"w":24,"h":26,"text":"\uE58E","text_font":24,"align":0,"text_color":"#0000ff"}
{"page":2,"id":218,"obj":"label","x":525,"y":194,"w":70,"h":22,"text":"00km","text_font":22,"align":0,"text_color":"#2C3E50"}
{"page":2,"id":219,"obj":"label","x":496,"y":191,"w":24,"h":26,"text":"\uE59D","text_font":24,"align":0,"text_color":"#2C3E50"}
{"page":2,"id":220,"obj":"label","x":525,"y":218,"w":75,"h":22,"text":"spd","text_font":22,"align":0,"text_color":"#2C3E50"}
{"page":2,"id":221,"obj":"label","x":496,"y":215,"w":24,"h":26,"text":"\uF39D","text_font":24,"align":0,"text_color":"#2C3E50"}
{"page":3,"comment":" ---- Infos ----"}
{"page":3,"id":1,"obj":"btn","x":0,"y":0,"w":800,"h":32,"text":"Infos","text_font":28,"bg_color":"#2C3E50","text_color":"#FFFFFF","radius":0,"border_side":0}
{"page":3,"id":2,"obj":"label","x":3,"y":40,"h":40,"w":60,"text":"IP:","text_font":26,"text_color":"#2C3E50"}
{"page":3,"id":3,"obj":"label","x":34,"y":40,"h":40,"w":180,"text":"adressip","text_font":26,"text_color":"#2C3E50"}
{"page":3,"id":4,"obj":"label","x":3,"y":80,"h":40,"w":60,"text":"SSID:","text_font":26,"text_color":"#2C3E50"}
{"page":3,"id":5,"obj":"label","x":60,"y":80,"h":40,"w":180,"text":"ssidbox","text_font":26,"text_color":"#2C3E50"}
{"page":3,"id":6,"obj":"label","x":3,"y":120,"h":40,"w":90,"text":"UPTIME:","text_font":26,"text_color":"#2C3E50"}
{"page":3,"id":7,"obj":"label","x":95,"y":120,"h":40,"w":250,"text":"uptimebox","text_font":26,"text_color":"#2C3E50"}
{"page":3,"id":8,"obj":"label","x":3,"y":160,"h":40,"w":100,"text":"VERSION:","text_font":26,"text_color":"#2C3E50"}
{"page":3,"id":9,"obj":"label","x":108,"y":160,"h":40,"w":250,"text":"version","text_font":26,"text_color":"#2C3E50"}
Code du openhasp.yaml
  plate01:
    objects:
      - obj: "p0b1"
        properties:
          "text": "{{ as_timestamp(now()) | timestamp_custom('%H:%M %d/%m/%y') }}"
      - obj: "p0b2"
        properties:
          "text": "{{ states('sensor.temperature_humidity_sensor_sejour_temperature') |float(0) |round(1)}}°C"
      - obj: "p0b3"
        properties:
          "text_color": >
             {% if -40 <= state_attr('openhasp.plate01','rssi') |int(0) %}
             green
             {% elif -41 > state_attr('openhasp.plate01','rssi') |int(0) >= -60 %}
             yellow
             {% elif -61 > state_attr('openhasp.plate01','rssi') |int(0) >= -70 %}
             orange
             {% else %}
             red
             {% endif %}
      - obj: "p0b9"
        properties:
          "text": "{{ states('sensor.temperature_humidity_sensor_exterieur_av_temperature') |float(0) |round(1)}}°C"
      - obj: "p1b4"  # light-switch toggle button entrée
        properties:
          "val": '{{ 1 if states("light.lumieres_entree") == "on" else 0 }}'
          "text": '{{ "\uE6E8" if is_state("light.lumieres_entree", "on") else "\uE335" | e }}'
        event:
          "up":
            - service: homeassistant.toggle
              entity_id: "light.lumieres_entree"
      - obj: "p1b6"  # light-switch toggle button cuisine
        properties:
          "val": '{{ 1 if states("light.0x00158d0002e75493") == "on" else 0 }}'
          "text": '{{ "\uE6E8" if is_state("light.0x00158d0002e75493", "on") else "\uE335" | e }}'
        event:
          "up":
            - service: homeassistant.toggle
              entity_id: "light.0x00158d0002e75493"
      - obj: "p1b8"  # light-switch toggle button spot cuisine
        properties:
          "val": '{{ 1 if states("light.spots_cuisine") == "on" else 0 }}'
          "text": '{{ "\uE6E8" if is_state("light.spots_cuisine", "on") else "\uE335" | e }}'
        event:
          "up":
            - service: homeassistant.toggle
              entity_id: "light.spots_cuisine"
      - obj: "p1b10"  # light-switch toggle button hotte
        properties:
          "val": '{{ 1 if states("light.lumieres_hotte_aspirante") == "on" else 0 }}'
          "text": '{{ "\uE6E8" if is_state("light.lumieres_hotte_aspirante", "on") else "\uE335" | e }}'
        event:
          "up":
            - service: homeassistant.toggle
              entity_id: "light.lumieres_hotte_aspirante"
      - obj: "p1b12"  # light-switch toggle button Salle a M.
        properties:
          "val": '{{ 1 if states("light.0x00158d0007b079f0") == "on" else 0 }}'
          "text": '{{ "\uE6E8" if is_state("light.0x00158d0007b079f0", "on") else "\uE335" | e }}'
        event:
          "up":
            - service: homeassistant.toggle
              entity_id: "light.0x00158d0007b079f0"
      - obj: "p1b14"  # switch toggle button Chat auto
        properties:
          "val": '{{ 1 if states("automation.chat_porte_arriere") == "on" else 0 }}'
          "click": "{{ 'false' if (is_state('automation.chat_porte_arriere','unavailable') or is_state('automation.chat_porte_arriere','unknown')) else 'true' }}"
          "opacity": "{{ 120 if (is_state('automation.chat_porte_arriere','unavailable') or is_state('automation.chat_porte_arriere','unknown')) else 255 }}"
        event:
          "up":
            - service: automation.toggle
              entity_id: "automation.chat_porte_arriere"
      - obj: "p1b16"  # switch toggle button Led matrrix
        properties:
          "val": '{{ 1 if states("light.wled") == "on" else 0 }}'
          "click": "{{ 'false' if (is_state('light.wled','unavailable') or is_state('light.wled','unknown')) else 'true' }}"
          "opacity": "{{ 120 if (is_state('light.wled','unavailable') or is_state('light.wled','unknown')) else 255 }}"
        event:
          "up":
            - service: homeassistant.toggle
              entity_id: "light.wled"
      - obj: "p1b20"  # light-switch toggle button Spot S
        properties:
          "val": '{{ 1 if states("light.0x540f57fffe0b7675") == "on" else 0 }}'
          "text": '{{ "\uE6E8" if is_state("light.0x540f57fffe0b7675", "on") else "\uE335" | e }}'
        event:
          "up":
            - service: homeassistant.toggle
              entity_id: "light.0x540f57fffe0b7675"
      - obj: "p1b22"  # light-switch toggle button Séjour
        properties:
          "val": '{{ 1 if states("light.0x00158d0007b04489") == "on" else 0 }}'
          "text": '{{ "\uE6E8" if is_state("light.0x00158d0007b04489", "on") else "\uE335" | e }}'
        event:
          "up":
            - service: homeassistant.toggle
              entity_id: "light.0x00158d0007b04489"
      - obj: "p1b18"  # light-switch toggle button Salon
        properties:
          "val": '{{ 1 if states("light.0x00158d0007b0454d") == "on" else 0 }}'
          "text": '{{ "\uE6E8" if is_state("light.0x00158d0007b0454d", "on") else "\uE335" | e }}'
        event:
          "up":
            - service: homeassistant.toggle
              entity_id: "light.0x00158d0007b0454d"
      - obj: "p1b24"  # light-switch toggle button Led Salon
        properties:
          "val": '{{ 1 if states("light.wled_2") == "on" else 0 }}'
          "text": '{{ "\uE6E8" if is_state("light.wled_2", "on") else "\uE335" | e }}'
        event:
          "up":
            - service: homeassistant.toggle
              entity_id: "light.wled_2"
      - obj: "p1b26"  # light-switch toggle button Led Table
        properties:
          "val": '{{ 1 if states("light.led_salon_tuya_local") == "on" else 0 }}'
          "text": '{{ "\uE6E8" if is_state("light.led_salon_tuya_local", "on") else "\uE335" | e }}'
        event:
          "up":
            - service: homeassistant.toggle
              entity_id: "light.led_salon_tuya_local"
      - obj: "p1b29"
        properties:
          "text": "{{ states('sensor.energy_home_cout_daily') |float(0) |round(2)}}€"
      - obj: "p1b31"
        properties:
          "text": "{{ states('sensor.energy_home_total_daily') |float(0) /1000 |round(2)}}kWh"
      - obj: "p1b33"
        properties:
          "text": "{{ states('sensor.zlinky_current_summation_derived_one_minute') |int(0)}}W"
      - obj: "p1b34"
        properties:
          "text": >
             {% if states('select.energie_quotidienne_home') == "hp" -%}
             {{ "HP" }}
             {% else -%}
             {{ "HC" }}
             {% endif -%}
          "text_color": "{{ '#ff0000' if is_state('select.energie_quotidienne_home', 'hp') else '#009900' }}"
      - obj: "p1b36"  # light-switch toggle button Lampe pc
        properties:
          "val": '{{ 1 if states("switch.switch_pc_tuya_local") == "on" else 0 }}'
          "text": '{{ "\uE6E8" if is_state("switch.switch_pc_tuya_local", "on") else "\uE335" | e }}'
        event:
          "up":
            - service: homeassistant.toggle
              entity_id: "switch.switch_pc_tuya_local"
      - obj: "p2b109"
        properties:
          "text": >
             {% if state_attr('climate.versatile_thermostat_sejour', 'hvac_action') == "idle" %}
             {{ "inactif" }}
             {% elif state_attr('climate.versatile_thermostat_sejour', 'hvac_action') == "heating" %}
             {{ "chauffe" }}
             {% else %}
             {{ "éteint" }}
             {% endif %}
      - obj: "p2b110"
        properties:
          "text": >
             {% if state_attr('climate.versatile_thermostat_salon', 'hvac_action') == "idle" %}
             {{ "inactif" }}
             {% elif state_attr('climate.versatile_thermostat_salon', 'hvac_action') == "heating" %}
             {{ "chauffe" }}
             {% else %}
             {{ "éteint" }}
             {% endif %}
      - obj: "p2b111"
        event:
          "up":
            - service: script.thermostat_sejour_down_temp
              data:
                climate_id: climate.versatile_thermostat_sejour
                value: 0.1
      - obj: "p2b112"
        properties:
          "text": "{{ state_attr('climate.versatile_thermostat_sejour','temperature') |float(0) }}"
          "text_color": "{{ '#ff0000' if is_state('climate.versatile_thermostat_sejour', 'off') else '#008000' }}"
      - obj: "p2b113"
        event:
          "up":
            - service: script.thermostat_sejour_up_temp
              data:
                climate_id: climate.versatile_thermostat_sejour
                value: 0.1
      - obj: "p2b114"
        event:
          "up":
            - service: script.thermostat_salon_down_temp
              data:
                climate_id: climate.versatile_thermostat_salon
                value: 0.1
      - obj: "p2b115"
        properties:
          "text": "{{ state_attr('climate.versatile_thermostat_salon','temperature') |float(0) }}"
          "text_color": "{{ '#ff0000' if is_state('climate.versatile_thermostat_salon', 'off') else '#008000' }}"
      - obj: "p2b116"
        event:
          "up":
            - service: script.thermostat_salon_up_temp
              data:
                climate_id: climate.versatile_thermostat_salon
                value: 0.1
      - obj: "p2b121"
        properties:
          "text": "{{ states('sensor.0xa4c138e08a32a900_temperature') |float(0) |round(1)}}°C"
      - obj: "p2b124"
        properties:
          "text": "{{ states('sensor.temperature_humidity_sensor_sejour_temperature') |float(0) |round(1)}}°C"
      - obj: "p2b127"
        properties:
          "text": "{{ states('sensor.0xa4c138e08a32a900_humidity') |float(0) |round(0)}}%"
      - obj: "p2b130"
        properties:
          "text": "{{ states('sensor.temperature_humidity_sensor_sejour_humidity') |float(0) |round(0)}}%"
      - obj: "p2b145"  # switch climate
        properties:
          "val": '{{ 1 if states("climate.versatile_thermostat_sejour") == "heat" else 0 }}'
          "text": '{{ "\uE438" if is_state("climate.versatile_thermostat_sejour", "heat") else "\uEAD7" | e }}'
        event:
          "up":
            - service: script.climate_sejour_toggle
      - obj: "p2b143"
        event:
          "up":
            - service: climate.set_preset_mode
              data:
                preset_mode: none
              target:
                entity_id: climate.versatile_thermostat_sejour
      - obj: "p2b144"
        event:
          "up":
            - service: timer.start
              target:
                entity_id: timer.climate_sejour
      - obj: "p2b117"
        event:
          "up":
            - service: climate.set_preset_mode
              data:
                preset_mode: eco
              target:
                entity_id: climate.versatile_thermostat_sejour
      - obj: "p2b118"
        event:
          "up":
            - service: climate.set_preset_mode
              data:
                preset_mode: comfort
              target:
                entity_id: climate.versatile_thermostat_sejour
      - obj: "p2b146"  # switch climate
        properties:
          "val": '{{ 1 if states("climate.versatile_thermostat_salon") == "heat" else 0 }}'
          "text": '{{ "\uE438" if is_state("climate.versatile_thermostat_salon", "heat") else "\uEAD7" | e }}'
        event:
          "up":
            - service: script.climate_salon_toggle
      - obj: "p2b147"
        event:
          "up":
            - service: climate.set_preset_mode
              data:
                preset_mode: none
              target:
                entity_id: climate.versatile_thermostat_salon
      - obj: "p2b148"
        event:
          "up":
            - service: timer.start
              target:
                entity_id: timer.climate_salon
      - obj: "p2b119"
        event:
          "up":
            - service: climate.set_preset_mode
              data:
                preset_mode: eco
              target:
                entity_id: climate.versatile_thermostat_salon
      - obj: "p2b120"
        event:
          "up":
            - service: climate.set_preset_mode
              data:
                preset_mode: comfort
              target:
                entity_id: climate.versatile_thermostat_salon
      - obj: "p2b149" # Current weather icon j0
        properties:
          "text": >
             {% if states('sensor.meteo_xxxx_j0') == "clear-night" -%}
             {{ "\uE594" }}
             {% elif states('sensor.meteo_xxxx_j0') == 'cloudy' -%}
             {{ "\uE590" }}
             {% elif states('sensor.meteo_xxxx_j0') == 'fog' -%}
             {{ "\uE591" }}
             {% elif states('sensor.meteo_xxxx_j0') == 'hail' -%}
             {{ "\uE592" }}
             {% elif states('sensor.meteo_xxxx_j0') == 'lightning' -%}
             {{ "\uE593" }}
             {% elif states('sensor.meteo_xxxx_j0') == 'lightning-rainy' -%}
             {{ "\uE67E" }}
             {% elif states('sensor.meteo_xxxx_j0') == 'partlycloudy' -%}
             {{ "\uE595" }}
             {% elif states('sensor.meteo_xxxx_j0') == 'pouring' -%}
             {{ "\uE596" }}
             {% elif states('sensor.meteo_xxxx_j0') == 'rainy' -%}
             {{ "\uE597" }}
             {% elif states('sensor.meteo_xxxx_j0') == 'snowy' -%}
             {{ "\uE598" }}
             {% elif states('sensor.meteo_xxxx_j0') == 'snowy-rainy' -%}
             {{ "\uE67F" }}
             {% elif states('sensor.meteo_xxxx_j0') == 'sunny' -%}
             {{ "\uE5A8" }}
             {% elif states('sensor.meteo_xxxx_j0') == 'windy' -%}
             {{ "\uE59D" }}
             {% elif states('sensor.meteo_xxxx_j0') == 'windy-variant' -%}
             {{ "\uE59E" }}
             {% elif states('sensor.meteo_xxxx_j0') == 'unavailable' -%}
             {{ "\uE156" }}
             {% else -%}
             {{ "\uE5A8" }}
             {% endif -%}
      - obj: "p2b150" # Current weather icon j1
        properties:
          "text": >
             {% if states('sensor.meteo_xxxx_j1') == "clear-night" -%}
             {{ "\uE594" }}
             {% elif states('sensor.meteo_xxxx_j1') == 'cloudy' -%}
             {{ "\uE590" }}
             {% elif states('sensor.meteo_xxxx_j1') == 'fog' -%}
             {{ "\uE591" }}
             {% elif states('sensor.meteo_xxxx_j1') == 'hail' -%}
             {{ "\uE592" }}
             {% elif states('sensor.meteo_xxxx_j1') == 'lightning' -%}
             {{ "\uE593" }}
             {% elif states('sensor.meteo_xxxx_j1') == 'lightning-rainy' -%}
             {{ "\uE67E" }}
             {% elif states('sensor.meteo_xxxx_j1') == 'partlycloudy' -%}
             {{ "\uE595" }}
             {% elif states('sensor.meteo_xxxx_j1') == 'pouring' -%}
             {{ "\uE596" }}
             {% elif states('sensor.meteo_xxxx_j1') == 'rainy' -%}
             {{ "\uE597" }}
             {% elif states('sensor.meteo_xxxx_j1') == 'snowy' -%}
             {{ "\uE598" }}
             {% elif states('sensor.meteo_xxxx_j1') == 'snowy-rainy' -%}
             {{ "\uE67F" }}
             {% elif states('sensor.meteo_xxxx_j1') == 'sunny' -%}
             {{ "\uE5A8" }}
             {% elif states('sensor.meteo_xxxx_j1') == 'windy' -%}
             {{ "\uE59D" }}
             {% elif states('sensor.meteo_xxxx_j1') == 'windy-variant' -%}
             {{ "\uE59E" }}
             {% elif states('sensor.meteo_xxxx_j1') == 'unavailable' -%}
             {{ "\uE156" }}
             {% else -%}
             {{ "\uE5A8" }}
             {% endif -%}
      - obj: "p2b151"
        properties:
          "text": "{{ state_attr('sensor.meteo_xxxx_j0','temperature') }}°C"
      - obj: "p2b152"
        properties:
          "text": "{{ state_attr('sensor.meteo_xxxx_j0','templow') }}°C"
      - obj: "p2b155"
        properties:
          "text": "{{ state_attr('sensor.meteo_xxxx_j0','humidite') }}%"
      - obj: "p2b157"
        properties:
          "text": "{{ state_attr('sensor.meteo_xxxx_j0','precipitation') |float(0) |round(0)}}mm"
      - obj: "p2b159"
        properties:
          "text": "{{ state_attr('sensor.meteo_xxxx_j1','temperature') }}°C"
      - obj: "p2b160"
        properties:
          "text": "{{ state_attr('sensor.meteo_xxxx_j1','templow') }}°C"
      - obj: "p2b163"
        properties:
          "text": "{{ state_attr('sensor.meteo_xxxx_j1','humidite') }}%"
      - obj: "p2b165"
        properties:
          "text": "{{ state_attr('sensor.meteo_xxxx_j1','precipitation') |float(0) |round(0) }}mm"
      - obj: "p2b105"
        properties:
          "text": "{{ state_attr('sensor.meteo_sxxxx_h0','heure') }}H"
      - obj: "p2b106"
        properties:
          "text": "{{ state_attr('sensor.meteo_xxxx_h1','heure') }}H"
      - obj: "p2b122"
        properties:
          "text": "{{ state_attr('sensor.meteo_xxxx_h2','heure') }}H"
      - obj: "p2b175" # Current weather icon h0
        properties:
          "text": >
             {% if states('sensor.meteo_xxxx_h0') == "clear-night" -%}
             {{ "\uE594" }}
             {% elif states('sensor.meteo_xxxx_h0') == 'cloudy' -%}
             {{ "\uE590" }}
             {% elif states('sensor.meteo_xxxx_h0') == 'fog' -%}
             {{ "\uE591" }}
             {% elif states('sensor.meteo_xxxx_h0') == 'hail' -%}
             {{ "\uE592" }}
             {% elif states('sensor.meteo_xxxx_h0') == 'lightning' -%}
             {{ "\uE593" }}
             {% elif states('sensor.meteo_xxxx_h0') == 'lightning-rainy' -%}
             {{ "\uE67E" }}
             {% elif states('sensor.meteo_xxxx_h0') == 'partlycloudy' -%}
             {{ "\uE595" }}
             {% elif states('sensor.meteo_xxxx_h0') == 'pouring' -%}
             {{ "\uE596" }}
             {% elif states('sensor.meteo_xxxx_h0') == 'rainy' -%}
             {{ "\uE597" }}
             {% elif states('sensor.meteo_xxxx_h0') == 'snowy' -%}
             {{ "\uE598" }}
             {% elif states('sensor.meteo_xxxx_h0') == 'snowy-rainy' -%}
             {{ "\uE67F" }}
             {% elif states('sensor.meteo_xxxx_h0') == 'sunny' -%}
             {{ "\uE5A8" }}
             {% elif states('sensor.meteo_sxxxx_h0') == 'windy' -%}
             {{ "\uE59D" }}
             {% elif states('sensor.meteo_xxxx_h0') == 'windy-variant' -%}
             {{ "\uE59E" }}
             {% elif states('sensor.meteo_xxxx_h0') == 'unavailable' -%}
             {{ "\uE156" }}
             {% else -%}
             {{ "\uE5A8" }}
             {% endif -%}
      - obj: "p2b167"
        properties:
          "text": "{{ state_attr('sensor.meteo_xxxx_h0','temperature') }}°C"
      - obj: "p2b168"
        properties:
          "text": "{{ state_attr('sensor.meteo_xxxx_h0','humidite') }}%"
      - obj: "p2b171"
        properties:
          "text": "{{ state_attr('sensor.meteo_xxxx_h0','wind') }}km"
      - obj: "p2b173"
        properties:
          "text": "{{ state_attr('sensor.meteo_xxxx_h0','precipitation') }}mm"
      - obj: "p2b184" # Current weather icon h1
        properties:
          "text": >
             {% if states('sensor.meteo_xxxx_h1') == "clear-night" -%}
             {{ "\uE594" }}
             {% elif states('sensor.meteo_xxxx_h1') == 'cloudy' -%}
             {{ "\uE590" }}
             {% elif states('sensor.meteo_xxxx_h1') == 'fog' -%}
             {{ "\uE591" }}
             {% elif states('sensor.meteo_xxxx_h1') == 'hail' -%}
             {{ "\uE592" }}
             {% elif states('sensor.meteo_xxxx_h1') == 'lightning' -%}
             {{ "\uE593" }}
             {% elif states('sensor.meteo_xxxx_h1') == 'lightning-rainy' -%}
             {{ "\uE67E" }}
             {% elif states('sensor.meteo_xxxx_h1') == 'partlycloudy' -%}
             {{ "\uE595" }}
             {% elif states('sensor.meteo_xxxx_h1') == 'pouring' -%}
             {{ "\uE596" }}
             {% elif states('sensor.meteo_xxxx_h1') == 'rainy' -%}
             {{ "\uE597" }}
             {% elif states('sensor.meteo_xxxx_h1') == 'snowy' -%}
             {{ "\uE598" }}
             {% elif states('sensor.meteo_xxxx_h1') == 'snowy-rainy' -%}
             {{ "\uE67F" }}
             {% elif states('sensor.meteo_xxxx_h1') == 'sunny' -%}
             {{ "\uE5A8" }}
             {% elif states('sensor.meteo_xxxx_h1') == 'windy' -%}
             {{ "\uE59D" }}
             {% elif states('sensor.meteo_xxxx_h1') == 'windy-variant' -%}
             {{ "\uE59E" }}
             {% elif states('sensor.meteo_xxxx_h1') == 'unavailable' -%}
             {{ "\uE156" }}
             {% else -%}
             {{ "\uE5A8" }}
             {% endif -%}
      - obj: "p2b176"
        properties:
          "text": "{{ state_attr('sensor.meteo_xxxx_h1','temperature') }}°C"
      - obj: "p2b177"
        properties:
          "text": "{{ state_attr('sensor.meteo_xxxx_h1','humidite') }}%"
      - obj: "p2b180"
        properties:
          "text": "{{ state_attr('sensor.meteo_xxxx_h1','wind') }}km"
      - obj: "p2b182"
        properties:
          "text": "{{ state_attr('sensor.meteo_xxxx_h1','precipitation') }}mm"
      - obj: "p2b193" # Current weather icon h2
        properties:
          "text": >
             {% if states('sensor.meteo_xxxx_h2') == "clear-night" -%}
             {{ "\uE594" }}
             {% elif states('sensor.meteo_xxxx_h2') == 'cloudy' -%}
             {{ "\uE590" }}
             {% elif states('sensor.meteo_xxxx_h2') == 'fog' -%}
             {{ "\uE591" }}
             {% elif states('sensor.meteo_xxxx_h2') == 'hail' -%}
             {{ "\uE592" }}
             {% elif states('sensor.meteo_xxxx_h2') == 'lightning' -%}
             {{ "\uE593" }}
             {% elif states('sensor.meteo_xxxx_h2') == 'lightning-rainy' -%}
             {{ "\uE67E" }}
             {% elif states('sensor.meteo_xxxx_h2') == 'partlycloudy' -%}
             {{ "\uE595" }}
             {% elif states('sensor.meteo_xxxx_h2') == 'pouring' -%}
             {{ "\uE596" }}
             {% elif states('sensor.meteo_xxxx_h2') == 'rainy' -%}
             {{ "\uE597" }}
             {% elif states('sensor.meteo_xxxx_h2') == 'snowy' -%}
             {{ "\uE598" }}
             {% elif states('sensor.meteo_xxxx_h2') == 'snowy-rainy' -%}
             {{ "\uE67F" }}
             {% elif states('sensor.meteo_xxxx_h2') == 'sunny' -%}
             {{ "\uE5A8" }}
             {% elif states('sensor.meteo_xxxx_h2') == 'windy' -%}
             {{ "\uE59D" }}
             {% elif states('sensor.meteo_xxxx_h2') == 'windy-variant' -%}
             {{ "\uE59E" }}
             {% elif states('sensor.meteo_xxxx_h2') == 'unavailable' -%}
             {{ "\uE156" }}
             {% else -%}
             {{ "\uE5A8" }}
             {% endif -%}
      - obj: "p2b185"
        properties:
          "text": "{{ state_attr('sensor.meteo_xxxx_h2','temperature') }}°C"
      - obj: "p2b186"
        properties:
          "text": "{{ state_attr('sensor.meteo_xxxx_h2','humidite') }}%"
      - obj: "p2b189"
        properties:
          "text": "{{ state_attr('sensor.meteo_xxxx_h2','wind') }}km"
      - obj: "p2b191"
        properties:
          "text": "{{ state_attr('sensor.meteo_xxxx_h2','precipitation') }}mm"
      - obj: "p2b195"
        event:
          "up":
            - service: fan.decrease_speed
              data:
                percentage_step: 5
              target:
                entity_id: fan.mi_smart_standing_fan_2
      - obj: "p2b196"
        properties:
          "text": "{{ state_attr('fan.mi_smart_standing_fan_2','percentage') |int(0)}}"
          "text_color": "{{ '#ff0000' if is_state('fan.mi_smart_standing_fan_2', 'off') else '#008000' }}"
      - obj: "p2b197"
        event:
          "up":
            - service: fan.increase_speed
              data:
                percentage_step: 5
              target:
                entity_id: fan.mi_smart_standing_fan_2
      - obj: "p2b198"  # switch ventilateur
        properties:
          "val": '{{ 1 if states("fan.mi_smart_standing_fan_2") == "on" else 0 }}'
        event:
          "up":
            - service: homeassistant.toggle
              entity_id: fan.mi_smart_standing_fan_2
      - obj: "p2b199"  # ventilateur oscille
        properties:
          "val": '{{ 1 if state_attr("fan.mi_smart_standing_fan_2","oscillating") == "true" else 0 }}'
        event:
          "up":
            - service: script.ventilateur_oscille_toggle
      - obj: "p2b200"  # ventilateur nature
        properties:
          "val": '{{ 1 if state_attr("fan.mi_smart_standing_fan_2","mode") == "nature" else 0 }}'
        event:
          "up":
            - service: script.ventilateur_nature_toggle
      - obj: "p2b201"  # ventilateur gauche
        event:
          "up":
            - service: fan.set_direction
              data:
                direction: reverse
              target:
                entity_id: fan.mi_smart_standing_fan_2
      - obj: "p2b202"  # ventilateur droite
        event:
          "up":
            - service: fan.set_direction
              data:
                direction: forward
              target:
                entity_id: fan.mi_smart_standing_fan_2
      - obj: "p2b203"
        properties:
          "text": "{{ states('fan.mi_smart_standing_fan_2') }}"
      - obj: "p2b204"  # ventilateur timer
        event:
          "up":
            - service: xiaomi_miio_fan.fan_set_delay_off
              data:
                entity_id: fan.mi_smart_standing_fan_2
                delay_off_countdown: 60
      - obj: "p2b205"
        properties:
          "text": "{{ state_attr('fan.mi_smart_standing_fan_2','delay_off_countdown') |int(0)}}"
          "text_color": "{{ '#ff0000' if is_state('fan.mi_smart_standing_fan_2', 'off') else '#008000' }}"
      - obj: "p2b206"
        properties:
          "text": "Alerte météo {{states('sensor.11_weather_alert')}}"
          "text_color": >
             {% if states('sensor.11_weather_alert') == "Jaune" -%}
             {{ "yellow" }}
             {% elif states('sensor.11_weather_alert') == 'Orange' -%}
             {{ "orange" }}
             {% elif states('sensor.11_weather_alert') == 'Rouge' -%}
             {{ "red" }}
             {% else -%}
             {{ "green" }}
             {% endif -%}
      - obj: "p2b207"
        properties:
          "text": >
             {% if states.sensor['11_weather_alert'] is not none %}
             {% if states('sensor.11_weather_alert') != 'Vert' %}
             {%- for attr, value in states.sensor['11_weather_alert'].attributes.items() -%}
             {%- if value in ['Jaune', 'Orange', 'Rouge'] -%}
             {{ "\uE026" }} {{ attr }}
             {%- endif %}
             {%- endfor %}
             {% else %}
             {{ "\uE12C" }} Aucunes alertes
             {% endif %}
             {% endif %}
      - obj: "p2b208"
        properties:
          "text": "{{ state_attr('climate.versatile_thermostat_sejour','power_percent') |int(0) }}%"
      - obj: "p2b209"
        properties:
          "text": "{{ state_attr('climate.versatile_thermostat_salon','power_percent') |int(0) }}%"
      - obj: "p2b210"
        properties:
          "text": "{{ states('sensor.timer_climate_sejour_minutes') |int(0) |round(0) }}min"
      - obj: "p2b211"
        properties:
          "text": "{{ states('sensor.timer_climate_salon_minutes') |int(0) |round(0) }}min"
      - obj: "p2b213" # Current weather icon Now
        properties:
          "text": >
             {% if states('weather.xxxxx') == "clear-night" -%}
             {{ "\uE594" }}
             {% elif states('weather.xxxxx') == 'cloudy' -%}
             {{ "\uE590" }}
             {% elif states('weather.xxxxx') == 'fog' -%}
             {{ "\uE591" }}
             {% elif states('weather.xxxxx') == 'hail' -%}
             {{ "\uE592" }}
             {% elif states('weather.xxxxx') == 'lightning' -%}
             {{ "\uE593" }}
             {% elif states('weather.xxxxx') == 'lightning-rainy' -%}
             {{ "\uE67E" }}
             {% elif states('weather.xxxxx') == 'partlycloudy' -%}
             {{ "\uE595" }}
             {% elif states('weather.xxxxxx') == 'pouring' -%}
             {{ "\uE596" }}
             {% elif states('weather.xxxxxx') == 'rainy' -%}
             {{ "\uE597" }}
             {% elif states('weather.xxxxx') == 'snowy' -%}
             {{ "\uE598" }}
             {% elif states('weather.xxxxx') == 'snowy-rainy' -%}
             {{ "\uE67F" }}
             {% elif states('weather.xxxxx') == 'sunny' -%}
             {{ "\uE5A8" }}
             {% elif states('weather.xxxx') == 'windy' -%}
             {{ "\uE59D" }}
             {% elif states('weather.xxxx') == 'windy-variant' -%}
             {{ "\uE59E" }}
             {% elif states('weather.xxxxx') == 'unavailable' -%}
             {{ "\uE156" }}
             {% else -%}
             {{ "\uE5A8" }}
             {% endif -%}
      - obj: "p2b214"
        properties:
          "text": "{{ state_attr('weather.xxxxxx','temperature') }}°C"
      - obj: "p2b215"
        properties:
          "text": "{{ state_attr('weather.xxxxx','humidity') }}%"
      - obj: "p2b218"
        properties:
          "text": "{{ state_attr('weather.xxxxx','wind_speed') |float(0) |round(0) }}km"
      - obj: "p2b220"
        properties:
          "text": "{{ states('sensor.direction_vent_xxxxx') }}"
      - obj: "p3b3"
        properties:
          "text": >
             {% if state_attr("openhasp.plate01","ip") == None %}
             {{ "Wait" }}
             {% else %}
             {{ state_attr("openhasp.plate01","ip") }}
             {% endif%}
      - obj: "p3b5"
        properties:
          "text": >
             {% if state_attr("openhasp.plate01","ssid") == None %}
             {{ "Wait" }}
             {% else %}
             {{ state_attr("openhasp.plate01","ssid") }}
             {% endif%}
      - obj: "p3b7"
        properties:
          "text": >
             {% set uptime = state_attr('openhasp.plate01','uptime') | int(0) %}
             {% set jours = (uptime / 86400) | int(0) %}
             {%- if jours > 0 -%}
               {{ jours }} jours, {{ (uptime - (jours * 86400)) | int(0) | timestamp_custom('%H:%M:%S', false) }}
             {%- else -%}
               {{ uptime | int(0) | timestamp_custom('%H:%M:%S', false) }}
             {%- endif -%}
      - obj: "p3b9"
        properties:
          "text": >
             {% if state_attr("openhasp.plate01","version") == None %}
             {{ "Wait" }}
             {% else %}
             {{ state_attr("openhasp.plate01","version") }}
             {% endif%}
Pour la météo (intégration météo france ), j’ai créer des sensors template pour J0 ( Aujourd’hui ) et J+1 ( Demain) , H0 ( heure en cours) H+1 H+2 et des trigger template pour récupérer les forecasts ( qui sont supprimer depuis le 04/2024 ) . Code a mettre dans votre configuration.yaml ou dans votre fichier template.yaml si vous avez découper votre configuration:
template:
  - sensor:
      - name: Météo xxxx H0
        unique_id: meteo_xxxx_h0
        state: "{{ state_attr('sensor.weather_forecast_heure_xxxx','forecast')[0].condition | default(0) }}"
        attributes: 
          heure: "{{ as_timestamp(state_attr('sensor.weather_forecast_heure_xxxx','forecast')[0].datetime) | int(0) | timestamp_custom('%H') }}"
          temperature: "{{ state_attr('sensor.weather_forecast_heure_xxxx','forecast')[0].temperature | float(0) }}"
          humidite: "{{ state_attr('sensor.weather_forecast_heure_xxxx','forecast')[0].humidity | int(0) }}"
          wind: "{{ state_attr('sensor.weather_forecast_heure_xxxx','forecast')[0].wind_speed | int(0) }}"
          precipitation: "{{ state_attr('sensor.weather_forecast_heure_xxxx','forecast')[0].precipitation | int(0) }}"
        availability:  "{{ states('sensor.weather_forecast_heure_xxxx') not in ['unknown', 'unavailable', 'none'] }}"
      - name: Météo xxxx H1
        unique_id: meteo_xxxx_h1
        state: "{{ state_attr('sensor.weather_forecast_heure_xxxx','forecast')[1].condition | default(0) }}"
        attributes: 
          heure: "{{ as_timestamp(state_attr('sensor.weather_forecast_heure_xxxx','forecast')[1].datetime) | int(0) | timestamp_custom('%H') }}"
          temperature: "{{ state_attr('sensor.weather_forecast_heure_xxxx','forecast')[1].temperature | float(0) }}"
          humidite: "{{ state_attr('sensor.weather_forecast_heure_xxxx','forecast')[1].humidity | int(0) }}"
          wind: "{{ state_attr('sensor.weather_forecast_heure_xxxx','forecast')[1].wind_speed | int(0) }}"
          precipitation: "{{ state_attr('sensor.weather_forecast_heure_xxxx','forecast')[1].precipitation | int(0) }}"
        availability:  "{{ states('sensor.weather_forecast_heure_xxxx') not in ['unknown', 'unavailable', 'none'] }}"
      - name: Météo xxxx H2
        unique_id: meteo_xxxx_h2
        state: "{{ state_attr('sensor.weather_forecast_heure_xxxx','forecast')[2].condition | default(0) }}"
        attributes: 
          heure: "{{ as_timestamp(state_attr('sensor.weather_forecast_heure_xxxx','forecast')[2].datetime) | int(0) | timestamp_custom('%H') }}"
          temperature: "{{ state_attr('sensor.weather_forecast_heure_xxxx','forecast')[2].temperature | float(0) }}"
          humidite: "{{ state_attr('sensor.weather_forecast_heure_xxxx','forecast')[2].humidity | int(0) }}"
          wind: "{{ state_attr('sensor.weather_forecast_heure_xxxx','forecast')[2].wind_speed | int(0) }}"
          precipitation: "{{ state_attr('sensor.weather_forecast_heure_xxxx','forecast')[2].precipitation | int(0) }}"
        availability:  "{{ states('sensor.weather_forecast_heure_xxxx') not in ['unknown', 'unavailable', 'none'] }}"
      - name: Météo xxxx J0
        unique_id: meteo_xxxx_j0
        state: "{{ state_attr('sensor.weather_forecast_jour_xxxx','forecast')[0].condition | default(0) }}"
        attributes: 
          temperature: "{{ state_attr('sensor.weather_forecast_jour_xxxx','forecast')[0].temperature | float(0) }}"
          templow: "{{ state_attr('sensor.weather_forecast_jour_xxxx','forecast')[0].templow | float(0) }}"
          humidite: "{{ state_attr('sensor.weather_forecast_jour_xxxx','forecast')[0].humidity | int(0) }}"
          precipitation: "{{ state_attr('sensor.weather_forecast_jour_xxxx','forecast')[0].precipitation | float(0) }}"
        availability:  "{{ states('sensor.weather_forecast_jour_xxxx') not in ['unknown', 'unavailable', 'none'] }}"
      - name: Météo xxxx J1
        unique_id: meteo_xxxx_j1
        state: "{{ state_attr('sensor.weather_forecast_jour_xxxx','forecast')[1].condition | default(0) }}"
        attributes: 
          temperature: "{{ state_attr('sensor.weather_forecast_jour_xxxx','forecast')[1].temperature | float(0) }}"
          templow: "{{ state_attr('sensor.weather_forecast_jour_xxxx','forecast')[1].templow | float(0) }}"
          humidite: "{{ state_attr('sensor.weather_forecast_jour_xxxx','forecast')[1].humidity | int(0) }}"
          precipitation: "{{ state_attr('sensor.weather_forecast_jour_xxxx','forecast')[1].precipitation | float(0) }}"
        availability:  "{{ states('sensor.weather_forecast_jour_xxxx') not in ['unknown', 'unavailable', 'none'] }}"
  - trigger:
      - platform: time_pattern
        hours: /1
      - platform: homeassistant
        event: start
    action:
      - service: weather.get_forecasts
        data:
          type: daily
        target:
          entity_id: weather.xxxx
        response_variable: daily
    sensor:
      - name: Weather Forecast Jour xxxx
        unique_id: weather_forecast_jour_xxxx
        state: "{{ daily['weather.xxxx'].forecast[0].condition }}"
        attributes:
          forecast: "{{ daily['weather.xxxx'].forecast }}"
        availability:  "{{ states('weather.xxxx') not in ['unknown', 'unavailable', 'none'] }}"
  - trigger:
      - platform: time_pattern
        hours: /1
      - platform: homeassistant
        event: start
    action:
      - service: weather.get_forecasts
        data:
          type: hourly
        target:
          entity_id: weather.xxxx
        response_variable: hourly
    sensor:
      - name: Weather Forecast Heure xxxx
        unique_id: weather_forecast_heure_xxxx
        state: "{{ hourly['weather.xxxx'].forecast[0].condition }}"
        attributes:
          forecast: "{{ hourly['weather.xxxx'].forecast }}"
        availability:  "{{ states('weather.xxxx') not in ['unknown', 'unavailable', 'none'] }}"
Pour la direction du vent, j’utilise un template. Créer un template du UI et coller y le code dans la parti Modèle d'état:
{% set direction = ['N','NNE','NE','ENE','E','ESE','SE','SSE','S','SSO','SO','OSO','O','ONO','NO','NNO','N'] %}
{% set degree = state_attr('weather.xxxxx', 'wind_bearing')|int(0) %}
{% if degree > 1 %}
  {{ direction[((degree+11.25)/22.5)|int(0)] }}
{% else %}
  {{ "\uE156" }}
{% endif %}
Pour pallier au Sonoff NS panel ou autre, un peu cher a mon gout vous avez c’est solution pour une trentaine d’euros.
Le modèle Elecrow WZ8048C070 , est pris en charge dans OpenHASP ( depuis la v0.7.0-rc12 ) , sous le nom de Crowpanel 7". Fonctionne bien pour moi. ESP32 display-7.0 Inch HMI Display 800x480 RGB TFT LCD Touch Screen Compatible with Arduino/LVGL
Le modèle Sunton 8048S070C ( capacitive touch ). Ca fonctionne bien chez moi.
ESP32-S3 IHM 8M PSRAM 16M Flash Ardu37LVGL WIFI et Bluetooth 7.
Je mettrais a jour le post, avec un peu plus d’information. N’hésiter pas a demander des renseignements.
Bonne journée.
EDIT 12/04/24:
Ajout du modèle Elecrow 7inch WZ8048C070, dans la dernière version d’openHASP Nightly.












