Virtuel et script python

Bonjour à tous

Je vous sollicite pour m’aider à remonter une valeur via un raspberry et capteur à ultrason vers mon jeedom.

Voici la partie du code pyhton qui doit me remonter ma valeur:

payload = {'plugin': 'virtual', 'apikey': 'APIKEYVIRTUAL' , 'type': 'event' , 'id': '44' , 'value': distance}
    r = requests.post("https://DNS JEEDOM/core/api/jeeApi.php?

Mais je n’ai rien qui remonte sur mon virtuel, avez vous des idées?

merci par avance pour vos retours.

1 « J'aime »

Bonjour,

Peut être le « ? » En trop dans l’URL et visiblement pas besoin de spécifier le plugin dans le payload.

Un post qui en parle : Script python module waveshare hat rpi AD DA analogique voltage input output - #11 par jeanlegrand

URL = "http://192.168.1.XX/core/api/jeeApi.php"
    API_KEY    = "S08znpCn9GPj9ncNHMkKF3YG9BILLP8g"
        ADC_Value = ADC.ADS1256_GetAll()
        DATA={'apikey' : API_KEY , 'type' : 'virtual' , 'id' : '3055', 'value' : (ADC_Value[0]*5.0/0x7fffff) }
        response = requests.post(URL, params=DATA)

Bonjour,

Attention il faut connaître la version de jeedom, en 4.2 les paramètres ont un peu changé et il faut bien avoir le plug-in et utiliser la clé du plug-in

Voir changelog de la 4.2 et article sur le blog pour plus de détails

@Marcellinio44

Quel est le résultat de la requête ?
Code http et body?
Vous pouvez afficher l’objet r

Hello @Mips
Alors je suis bien en 4.2.14, j’ai bien vu qu’il y avait du changement mais je ne vois pas comment l’intégrer?

J’utilise bien la clé api du plugin virtuel mais j’ai une erreur jeedom :
jeeEvent : Vous n’êtes pas autorisé à effectuer cette action, IP : XX.XX.XXX.XXX

J’ai suivis ce tuto :

Voici le github :
https://bitbucket.org/MattHawkinsUK/rpispy-misc/raw/master/python/ultrasonic_2.py

Donc je parlais du changelog ici: https://doc.jeedom.com/fr_FR/core/4.2/changelog?theme=light#4.2%20%3A%20Sécurité
et le lien vers l’article sur le blog s’y trouve et est celui-ci: Introduction Jeedom 4.2 : la sécurité – Jeedom – Le Blog

et donc je cite ce qu’il faut faire:

En api http vous pouviez indiquer un nom de plugin en type, ce n’est plus possible. Le type correspondant au type de la demande (scenario, eqLogic, cmd, etc.) doit correspondre au plugin. Par exemple pour le plugin virtuel vous aviez type=virtual dans l’url il faut maintenant remplacer par plugin=virtual&type=event

Donc à priori le payload affiché ici est correcte pour votre version du core.

Le problème c’est que vous ne donnez qu’un extrait de code mais il manque un bout…
vous assignez un objet à la variable payload et ensuite vous faite un post sur jeeApi mais il y a probablement la suite de la ligne de code en dessous car la ligne n’est pas complète, la parenthèse est ouverte…
donc en l’état j’ignore si le payload est bien envoyé avec la requête mais je suppose que oui?

Vérifiez également que la clé api du plugin virtuel est bien activé pour l’ip xxx

Pourquoi avoir masqué cette ip d’ailleurs? c’est un ip privé ou public?
Montrez-nous la config des clé api, est-elle activé? en mode localhost? ip blanche?

J’ai modifié du coup en ceci :

 while True:
    distance = measure_average()
    print("Distance : {0:5.1f}".format(distance))
    payload = {'apikey': 'apikeyvirtuel' , 'type': 'virtual&type=event' , 'id': '44' , 'value': distance}
    r = requests.post("https://dnsjeeedom.link/core/api/jeeApi.php", params=payload)
    time.sleep(2)

Vérifiez également que la clé api du plugin virtuel est bien activé pour l’ip xxx

Je confirme qu’elle est bien activé, dans accès api virtuel elle est sur activé.

Pourquoi avoir masqué cette ip d’ailleurs? c’est un ip privé ou public?

C’est une IP public

mais non justement, c’était bon:

pour le plugin virtuel vous aviez type=virtual dans l’url il faut maintenant remplacer par plugin=virtual&type=event

edit: enfin là on a un truc hybride:

c’est pas bon du tout ca, ca n’ira pas:

'type': 'virtual&type=event'

Ok je viens de modifier

 print("Distance : {0:5.1f}".format(distance))
    payload = {'plugin':'virtual&type=event' , 'apikey':'xxx' ,  'id':'44' ,  'value':distance}
    r = requests.post("https:/xxx.jeedom.link/core/api/jeeApi.php", params=payload)
    time.sleep(2)

Non, ce n’est pas bon, si c’est un post il ne faut pas spécifier les paramètres comme cela, vous devez mettre ceci selon moi:

payload = {'plugin':'virtual', 'type':'event' , 'apikey':'xxx' ,  'id':'44' ,  'value':distance}

ce que vous aviez au premier post en fait

C’est parfait :+1: ça fonctionne.
mais du coup sa ne fonctionnait pas avant (sur mon 1er post) qu’est ce qui aurait changé?

Je ne sais pas;
la clé api incorrecte?
aviez-vous bien passé le payload en paramètre?

Ok merci en tout cas pour votre temps et votre aide

1 « J'aime »

Ah si je reviens vers vous pour savoir comment je pourrai automatiser le démarrage du script a chaque démarrage du RPI?

En effet la méthode décrite dans le blog ne fonctionne pas chez moi
J’ai mis ceci dans le rc.local

# By default this script does nothing.
sudo python /home/pi/ultrasonic_2.py.original

Le script est dans le plugin script?

Dans un scénario, vous pouvez utiliser #start# en déclencheur (voir doc scénario, cela lancera le scénario au démarrage de jeedom) et utiliser la commande de votre équipement script dans celui-ci

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.