Page 1 sur 1

Requests time out

Publié : 22 nov. 2019, 12:47
par espagne1988
Salut les gars,

Je viens vers vous car je suis dans l'impasse,
J'essaie de faire un thermostat avec des commandes JSON en utilisant le module requests.

Lorsque je veux allumer ou éteindre ma chaudiere, le module requests tombe en time out. (Aussi bien en python qu'en python3)
Je ne comprends vraiment pas car la commande r = requests.get("") est utilisée dans d'autres scripts et cela fonctionne parfaitement.

Pouvez-vous m'aiguiller ?

Code : Tout sélectionner

#!/usr/bin/python3
# -*- coding: latin-1 -*-

# basé sur le script Adafruit et adapté pour Domoticz

import os
import sys
from requests.auth import HTTPBasicAuth
import datetime   
import time
import requests
import chardet
import json


############# Parametres ################################# 

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# les parametres de Domoticz
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

domoticz_ip='192.168.1.8'
domoticz_port='8080'
user=''
password=''

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# les parametres de l'heure 
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

heure = datetime.datetime.now().strftime('%H,%M') # control des minutes et secondes
print(heure)
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Récupère la température de chez Clémence
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

url = 'http://192.168.1.8:8080/json.htm?type=devices&rid=27'
Response = requests.get(url)

if(Response.ok): #Récupère la temperature de l'idx 27
    result = json.loads(Response.content.decode(chardet.detect(Response.content)["encoding"]))
    print (result['result'][0]['Temp'])
    ClemTemp=str(result['result'][0]['Temp'])
    print("la temperature dans la chambre de Clem est de " + ClemTemp + "°C")

############# Fin des parametres ################################# 


# Thermostat

if heure >= "10,00" and heure <= "23,00":
	if ClemTemp <= "18.0":
		print("Démarrage de la chaudière")
		r = requests.get("http://lamaisondeju.ddns.net:8080/json.htm?type=command&param=setsetpoint&idx=15&setpoint=21")
	elif ClemTemp >= "19.0":
		print("Arret de la chaudiere")
		r = requests.get ("http://lamaisondeju.ddns.net:8080/json.htm?type=command&param=setsetpoint&idx=15&setpoint=17")	
	else: 
		print("Il fait bon dans sa chambre")
		
else: 
	print("il n'est pas l'heure")

	
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~	
#Next step 
Voici un printscreen de mon erreur :
Image

Merci d'avance

Re: Requests time out

Publié : 22 nov. 2019, 15:53
par froglock30
Salut,

Pour interroger les devices Domoticz j'ai fait ça :

Un script python "time"

Code : Tout sélectionner

import DomoticzEvents as DE
lBallonHaut = float(DE.Devices["Ballon Haut"].n_value_string) # pour récupérer la température de mon ballon tampon
lChaudiereAllumee = DE.Devices["Chaudière ON/OFF"].n_value_string # Pour récupérer le status de mon interrupteur chaudière

#Pour allumer la chaudière 
DE.Command("Chaudière ON/OFF", "On")
# Pour éteindre 
DE.Command("Chaudière ON/OFF", "Off")
L'interrupteur est un module zWave (fibaro) contact sec qui déclenche la chauffe de la chaudière

J'ai mis mon script complet la : viewtopic.php?f=17&t=9113

L'avantage c'est que l'on passe par un module domoticz (les lectures sont immédiates et les "ordres" très rapide aussi)

Re: Requests time out

Publié : 22 nov. 2019, 20:22
par espagne1988
Merci pour ta réponse, mais je n'ai jamais réussi à importer le module domoticz :x connais tu la commande ?

froglock30 a écrit : 22 nov. 2019, 15:53 Salut,

Pour interroger les devices Domoticz j'ai fait ça :

Un script python "time"

Code : Tout sélectionner

import DomoticzEvents as DE
lBallonHaut = float(DE.Devices["Ballon Haut"].n_value_string) # pour récupérer la température de mon ballon tampon
lChaudiereAllumee = DE.Devices["Chaudière ON/OFF"].n_value_string # Pour récupérer le status de mon interrupteur chaudière

#Pour allumer la chaudière 
DE.Command("Chaudière ON/OFF", "On")
# Pour éteindre 
DE.Command("Chaudière ON/OFF", "Off")
L'interrupteur est un module zWave (fibaro) contact sec qui déclenche la chauffe de la chaudière

J'ai mis mon script complet la : viewtopic.php?f=17&t=9113

L'avantage c'est que l'on passe par un module domoticz (les lectures sont immédiates et les "ordres" très rapide aussi)

Re: Requests time out

Publié : 23 nov. 2019, 08:03
par froglock30
Salut,

A force de recherche sur les forums, c'est pas le domoticz qu'il faut importer mais le DomoticzEvents (avec les majuscules) l'exemple par défaut lorsque tu créé le script est faux (surement obsolète) par contre ceux que tu trouve dans le sous dossier de domoticz sont bon.

Tu peux les trouvez dans le sous dossier ci-dessous

./domoticz/var/scripts/python

Fred

Code : Tout sélectionner

 # script_device_demo
import DomoticzEvents as DE

DE.Log("Python: Changed: " + DE.changed_device.Describe())

if DE.changed_device_name == "Test":
    if DE.Devices["Test_Target"].n_value_string == "On":
        DE.Command("Test_Target", "Off")

    if DE.Devices["Test_Target"].n_value_string == "Off":
        DE.Command("Test_Target", "On")

DE.Log("Python: Number of user_variables: " + str(len(DE.user_variables)))

# All user_variables are treated as strings, convert as necessary
for key, value in DE.user_variables.items():
    DE.Log("Python: User-variable '{0}' has value: {1}".format(key, value))

# Description of Device_object should go here...

Code : Tout sélectionner

 # script_time_demo
 import DomoticzEvents as DE

if DE.is_daytime:
    DE.Log("Python: It's daytime!")

if DE.is_nighttime:
    DE.Log("Python: It's nighttime!")

DE.Log("Python: Sunrise in minutes: " + str(DE.sunrise_in_minutes))
DE.Log("Python: Sunset in minutes: " + str(DE.sunset_in_minutes))
DE.Log("Python: Minutes since midnight: " + str(DE.minutes_since_midnight))

Re: Requests time out

Publié : 08 déc. 2019, 10:37
par espagne1988
J'ai réussi a by-passer mon time out en utilsant les commandes :

Code : Tout sélectionner

url = "http://192.168.1.8:8080/json.htm?type=devices&rid=27"
		Response = requests.get(url)
		if(Response.ok):
			result = json.loads(Response.content.decode(chardet.detect(Response.content)["encoding"]))
			#print (result['result'][0]['Temp'])
			TempClem=str(result['result'][0]['Temp'])
			ClemTemp=float(TempClem)