[PARTAGE] micropython installation esp8266 esp32 et dialogue jeedom sans plugin

Bonjour,

[Edit] En rédigeant ce post, j’ai finalement résolu ma difficulté. Je laisse tout de même ma solution pour ceux qui serait confrontés aux mêmes problèmes. Mais est ce la bonne façon de faire ?

j’essaie de passer de ESPeasy vers un truc un peu plus souple et ton tuto µpython est bienvenue. Mais que serait l’apprentissage d’un nouveau langage sans son lot de petites difficultés … :slight_smile:
Je suis en v1.12 sur Wemos D1.
Du coup je rame un peu avec l’utilisation de la fonction SendAjeedom à l’étape 4:

  • Création du fichier fonctionjd.py + correction de la parenthèse à la fin du print("La valeur :" ... )
  • Ajout de SendAjeedom(1889,85) à la fin du main.py
    Et j’ai ça en retour:
Le wifi est connecté
envoi valeur au virtuel jeedom
Traceback (most recent call last):
  File "main.py", line 24, in <module>
NameError: name 'SendAjeedom' isn't defined

Donc j’ajoute un from fonctionjd import SendAjeedom en debut de main.py.
Je déplace le import urequests dans fonctionjd.py
Et je mets des ' à ma commande SendAjeedom('1889','85')

=> Et voilà, avec toutes ces entorses au tuto, tout fonctionne finalement :smirk:

1 « J'aime »

En voilà une bonne nouvelle. :+1:

oui c’était la bonne méthode.
from fonctionjd import SendAjeedom
pour que le main connaisse la fonction :upside_down_face:

Question: Faut forcément reseter l’ESP (ctrl+D) à chaque fois qu’on load un nouveau .py ?.

Allez, j’attaque le OLED SSD1306 :nerd_face:

Ben oui il vaut mieux l’interpréteur travail en mémoire donc il ne sais pas si tu a uploader de nouveaux fichiers …

tu peut aussi le faire software en ligne

>>> from system import reset
>>> reset()
1 « J'aime »

Bonjour,

Le tuto explique les echanges entre ESP et jeedom:

  • Envoi de données à un virtuel Jeedom
  • Extraire des données de Jeedom

mais j’aurais besoin d’envoyer des données vers l’ESP (pour afficher sur OLED).
Comment faire ça simplement (pas MQTT, pas de requete de lecture en boucle vers virtuel)?

Au passage, qq petites corrections si je peux me permettre, dans le tuto initial
En python 3

pip3 install esptool

Pas de / entre tty et USB0

esptool.py --port /dev/ttyUSB0 erase_flash
esptool.py --port /dev/ttyUSB0--baud 460800 write_flash

Pas d’espace entre USB0 et baud

/dev/ttyUSB0 --baud 460800 write_flash --flash_size=detect 0 esp8266-version_téléchargé.bin

J’ai basculé sur Thonny IDE: ça gère le WebREPL, ça permet de voir l’arborescence de ses fichiers et d’exécuter ses fichiers sans reseter l’ESP à chaque fois. Y aussi un mode debug (pas à pas) mais malheureusement non fonctionnel avec micropython.

Merci les corrections on été faite

Tu à aussi visual studio code avec Pymakr VSC Package
Qui fonctionne encore mieux que Thonny …

1 « J'aime »

Pour ça il te faut faire un mini serveur web qui écoute un port .
Faire une requette http depuis jeedom avec les paramètres correspondant a ce que ton oled doit afficher.
Je te conseil l’esp32 qui par le biais de tread ne sera pas bloqué en l’attente d’une connexion http.

ça ressemble un peut à ça

OK c’est ce que j’imaginais mais je pensais qu’il y aurai plus simple.
Faut que je vois la notion de thread…

Ça c’est un super truc sur les esp32, a ne pas raté.

Bonjour
D’abord merci pour cette description, détaillée et expliquée.
Mais j’ai un soucis avec ma version :
J’ai modifier le programme, car je n’ai pas installé l’utilitaire WEBREPL, afin de garder l’accès avec le PC pour la programmation.

from network import WLAN,STA_IF
from time import sleep
import urequests

Wifi Maison

ssid =‹ xxx ›
mot_de_passe = ‹ xxx ›

ipjd =« xx.xx.xx.21 »
apijd=« xxxx »

la fonction

def SendAjeedom(idvirtuel,valeur):
# construction de l’url
url = « http:// »
url += ipjd
url += « /core/api/jeeApi.php?plugin=virtual&apikey= »
url += apijd
url += « &type=virtual&id= »
url += idvirtuel
urls = url + « &value= »
urls += valeur
# Envoi de la valeur a la commande info du virtuel
retour=urequests.get(urls).text
print(« La valeur : » + valeur + " a été envoyer a la commande " + idvirtuel + " de jeedom")
print("Via l’url : " + urls )
print("Retour de Cmd : " + retour)
tmp=urequests.put(url).text
print("Valeur lue : "+ tmp)
print("Via l’url : " + url )
return

WLAN(STA_IF).active(1)
WLAN(STA_IF).connect(ssid, mot_de_passe)

print("Attente du réseau WiFi " , ssid )
at=0
while not WLAN(STA_IF).isconnected(): #Boucle infinie d’attente de connexion wifi
sleep(1)
af='Attente wifi ’ + str(at)
print(af)
at+=1
pass

print("Le wifi est connecté : ",WLAN(STA_IF).ifconfig()[0])

idvirtuel=« 41 »

SendAjeedom(idvirtuel,« 2 »)

Si j’envoie cette requete :
http://xx.xx.xx.21/core/api/jeeApi.php?plugin=virtual&apikey=xxxx&type=virtual&id=41&value=2
J’ai cette réponse :
Vous n’êtes pas autorisé à effectuer cette action, IP : xx.xx.xx.28 (l’IP de la carte ESP32).

Si j’envoie cette requete :
http://xx.xx.xx.21/core/api/jeeApi.php?apikey=xxxx&type=cmd&id=41
J’ai cette réponse :
18
Qui correspond au contenu de mom plugging virtuel, 18° Température extérieur.

Je précise que je débute en MycroPython et en Jeedom.
Je pense que coté ESP32 c’est correct car j’ai les mêmes réactions en utilisant un navigateur pour envoyer les ordres http.

Coté Jeedom j’ai eu beaucoup de mal à configurer le plugging.
A quoi correspond plugin=virtual est-ce le nom du plugging ? je ne pense pas.
A quoi correspond type=virtual est-ce le nom du plugging ? je ne pense pas.

Dans mon cas le Plugging s’appelle esp32 et la commande Cmd avec pour id=41

Je pense qu’il faut autoriser dans Jeedom un accès externe mais je ne sais pas comment faire.

Merci d’avance, si tu peux prendre le temps de m’aider.

1 « J'aime »

Bonjour,

Ca fait 1an que j’ai pas remis les mains dans mon code micropython, et la semaine derniere je me suis dit qu’il serait plus sûr de changer mes clef API general par celles du plugin vituel. Et j’ai eu le même soucis que toi, et j’étais à 2 doigts de faire appel à la communauté, mais finalement avec ces commande ça marche:
Pour la lecture d’une info ou exécuter une commande:
http://IP_Jdom/core/api/jeeApi.php?plugin=virtual&type=event&apikey=Clef_API_Virtuel&type=cmd&id=xx

Pour l’écriture d’une valeur:
http://IP_Jdom/core/api/jeeApi.php?plugin=virtual&type=event&apikey=Clef_API_Virtue&id=xx&value=yy

Cette requete utilise la clef API general, et il faut mieux éviter de l’utiliser.

Merci pour cette précision.

J’ai testé :
Pour la lecture d’une info ou exécuter une commande:
http://IP_Jdom/core/api/jeeApi.php?plugin=virtual&type=event&apikey=Clef_API_Virtuel&id=xx &type=cmd

Pour l’écriture d’une valeur:
http://IP_Jdom/core/api/jeeApi.php?plugin=virtual&type=event&apikey=Clef_API_Virtue&id=xx &value=yy

et comme cela fonctionne j’ai regroupé en une seule fonction :

urlvirtuel = « http:// »+IP_Jdom+"/core/api/jeeApi.php?plugin=virtual&type=event&apikey="=+Clef_API_Virtuel+"&id="

def virtuel(idvirtuel,valeur):
if valeur :
# Envoi une commande d’ecriture au virtuel
urls = urlvirtuel + idvirtuel + « &value= » + valeur
else :
# Envoi une commande info ou la lecture au virtuel
urls = urlvirtuel + idvirtuel + « &type=cmd »
retour=urequests.get(urls).text
print(« La valeur : » + valeur + " a été envoyer a la commande " + idvirtuel + " de jeedom")
print("Via l’url : " + urls )
print("Réponse en retour : " + retour)
return retour

Si valeur != «  » alors c’est une écriture sinon c’est une commande ou une lecture.
Les print sont juste pour la mise au point.