[résolu] Python : mettre à jour valeur custom sensor

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
higgins91
Messages : 669
Inscription : 17 nov. 2016, 11:06

[résolu] Python : mettre à jour valeur custom sensor

Message par higgins91 »

Bonjour,
j'ai un "custom sensor" sur lequel je voudrais afficher un nombre qui est la hauteur d'eau dans a cuve de récupération d'eau de pluie.

Pour avoir la hauteur d'eau, j'utilise un bout de code en Python ( http://www.raspberrypi-spy.co.uk/2016/1 ... ng-module/ ) avec un capteur à ultra son.
Dans ce code, je voudrais rajouter tout simplement une ligne du genre

Code : Tout sélectionner

http://192.168.192.31:8080/json.htm?type=command&param=udevice&idx=76&nvalue=0&svalue=distance
pour mettre à jour mon affichage. Le problème c'est que "distance" est généré dans le script et j'ai beau chercher et essayer je n'y arrive pas.

j'ai essayé pas mal de bout de code présent sur le forum ou ailleurs mais soit j'ai un syntaxe error (donc je corrige) soit il ne se passe rien dans domoticz (pas d'erreur lors de l'execution du script, pas de changement de valeur et pas de trace dans les log domoticz) J'ai essayé aussi avec login/mdp dans l'URL

tentatives:

Code : Tout sélectionner

curl='http://192.168.192.31:8080/json.htm?type=command&param=udevice&idx=76&nvalue=0&svalue='+str(distance)

Code : Tout sélectionner

requete='http://192.168.192.31:8080/json.htm?type=command&param=udevice&idx=76&nvalue=0&svalue='+str(distance)
r=requests.get (requete)

Code : Tout sélectionner

#!/usr/bin/python
# -*- coding: utf-8 -*-

import json
import requests
import string

from requests.auth import HTTPBasicAuth
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# les parametres de Domoticz
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
domoticz_ip='192.168.192.31'
domoticz_port='8080'
user=''
password=''
val='46'
periph_idx=76

############### fin des parametres #############################

# l URL Domoticz pour le widget virtuel
json_url_text1='/json.htm?type=command&param=udevice&idx='
json_url_text2='&nvalue=0&svalue='

def maj_widget(domoticz_idx,val):
        requete='http://'+domoticz_ip+':'+domoticz_port+json_url_text1+domoticz$
        print requete
        r=requests.get(requete)
        #print (r)

domoticz_idx=str(periph_idx)
maj_widget (domoticz_idx,val)

merci pour votre aide !
Dernière modification par higgins91 le 03 juil. 2017, 20:53, modifié 1 fois.
Dz version : 2024.7
Rpi 4 avec dongle téléinfo, GPIO pour le moment !
higgins91
Messages : 669
Inscription : 17 nov. 2016, 11:06

Re: Python : mettre à jour valeur custom sensor

Message par higgins91 »

bon après quelques heures de scripts et tentatives en tout genre, je suis tombé sur une config qui marche:

Code : Tout sélectionner

#!/usr/bin/python
# ultrasonic_1.py
# Measure distance using an ultrasonic module
#
# Import required Python libraries
from __future__ import print_function
import time
import RPi.GPIO as GPIO
#import domoticz
import requests

# Use BCM GPIO references instead of physical pin numbers
GPIO.setmode(GPIO.BCM)

# Define GPIO to use on Pi
GPIO_TRIGGER = 20
GPIO_ECHO    = 21

# Speed of sound in cm/s at temperature
temperature = 20
speedSound = 33100 + (0.6*temperature)

print("Ultrasonic Measurement")
print("Speed of sound is",speedSound/100,"m/s at ",temperature,"deg")

# Set pins as output and input
GPIO.setup(GPIO_TRIGGER,GPIO.OUT)  # Trigger
GPIO.setup(GPIO_ECHO,GPIO.IN)      # Echo

# Set trigger to False (Low)
GPIO.output(GPIO_TRIGGER, False)

# Allow module to settle
time.sleep(0.5)

# Send 10us pulse to trigger
GPIO.output(GPIO_TRIGGER, True)
# Wait 10us
time.sleep(0.00001)
GPIO.output(GPIO_TRIGGER, False)
start = time.time()

while GPIO.input(GPIO_ECHO)==0:
  start = time.time()

while GPIO.input(GPIO_ECHO)==1:
  stop = time.time()

# Calculate pulse length
elapsed = stop-start

# Distance pulse travelled in that time is time
# multiplied by the speed of sound (cm/s)
distance = elapsed * speedSound

# That was the distance there and back so halve the value
distance = distance / 2

# Reset GPIO settings
GPIO.cleanup()

import urllib

urllib.urlopen("http://le_nom_utilisateur:le_mot_de_passe@192.168.192.31:8080/json.htm?type=command&param=udevice&idx=76&nvalue=0&svalue="+str(distance))

print("Distance : {0:5.1f}".format(distance))
le truc était de mettre le nom d'utilisateur et le mot de passe dans l'URL mais pas en format <xx:yy> mais xx:yy@

voila ça servira surement à d'autres!!
Dz version : 2024.7
Rpi 4 avec dongle téléinfo, GPIO pour le moment !
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: [résolu] Python : mettre à jour valeur custom sensor

Message par papoo »

merci pour l'astuce
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
Répondre