[Résolu] Condition de temperature sur déclenchement de scenario


#1

Salut la compagnie !
Au passage il est vraiment chouette le film sur l’installation de Mathieu, ça donne des idées. Bravo les gars !
Alors de mon côté je me casse la tête sur le déclenchement d’un scenario en fonction de la température d’un capteur. C’est tout simple, j’ai un scenario basé sur une cron rule pour démarrer le radiateur de la salle de bain tous les matins et tous les soirs : ça marche très bien. L’hiver no problemo, vue qu’il fait 15 degrès dans la maison, trouver 25 dans la salle de bain c’est intéressant. (Alors c’est le moment je pense de préciser que l’on a à faire à un vieux radiateur qui n’a pas de sonde de température et qui chauffe tant qu’il est sous tension). Du coup vous comprenez que de trouver 25 degrès le matin dans la salle de bain alors qu’il fait 22 degrès dans la maison, c’est moins confortable. Alors je me suis dit que ça sera pas mal de pouvoir rajouter à mon scénario une condition de température. Schématiquement ça serait :

  • Etape 2,3 : Déclenchement horaire (cron rule)
  • Etape 4 : Si la température de mon capteur (ou bien la valeur de mon devicetype) est supérieure (ou inférieure ou égale) à une valeur donnée
  • Etape 5 : Alors j’allume mon radiateur par exemple

Quelqu’un saurait faire ou pourrait m’expliquer où on peut rajouter des conditions ? Il semblerait que ce soit au niveau de la table statetype, mais le champs de l’UUID me pose déjà souci.

Voilà, j’ai essayé d’être précis et exhaustif, merci à vous tous pour votre aide.

Gaëtan


#2

Si j’ai bien compris, tu veux juste rajouter une condition pour empêcher la mise en route de ton radiateur quand il fait 22°C (ou autre consigne) dans la maison ?

Ca rejoint ma requête :
[NEED YOUR FEEDBACK] Développement features

Mais sinon, je serais toi, je ferais en script.
Du coup, tu règles une alarme (réveil) en cron, tu fais un scénario avec déclenchement sur alarme et après tu exécutes ton script créé pour tester ta température et mettre en marche le chauffage s’il faut.


#3

Merci pour ta réponse,
Euh en fait le script pour la température, c’est du python basé sur ADA_fruit qui envoie la température via l’API HTTP, et ce script je l’ai mis en crontab du user pi :scream:
-> Ouais je sais c’est vraiment crad, mais j’ai un DHT22 pluggé direct sur le RasPi, je suis encore en phase de test, je n’ai pas su m’en sortir via javascript…

Du coup je vais jeter un oeil au lien que tu mas donné.


#4

Oulalala…

Pas tout compris.
Ta température est gérée dans Gladys mais issue d’un script python externe qui lui envoie la valeur en HTTP ?
Et cette valeur est rafraîchit en CRON ?

Pour ce qui est de mon lien, c’est juste une demande de fonctionnalité. :slight_smile:


#5

A que coucou ! ^^

Je comprend pas ou est le problème @lbsk31 :thinking:
Il te suffit de créer un scénario dans l’UI…

Tu lui met la condition que tu souhaite et si elle est verifié tu lui met comme action d’allumer ton radiateur. Tu fait la même chose avec la condition inverse pour l’éteindre.

Pourquoi tu veux toucher à la table ? Évite de faire ça car c’est un coup à tout péter :stuck_out_tongue:


#6

je pense qu’il veut mettre plusieurs conditions dans un même scénario.


#7

Je pense pas que ça soit une très bonne idée de mettre plusieurs condition dans un seul scénario… c’est un coup a se retrouver avec des comportements bizarre !

Il suffit de créer plusieurs petits scénarios…


#8

Mouais… Un encadrement de température ça pourrait être bien…


#9

A ce moment là, faudrait pouvoir les linker dans l’interface pour pouvoir s’y retrouver.


#10

Un encadrement de température ? Comment ça ?

Ah tu veux les regrouper ? Genre en créant des catégories dans lesquels les ranger ?


#11

bah genre mise en route du chauffage entre 15°C et 22 °C dans la pièce. Permettre une certaine latence (peut être pas autant).

Exactement !


#12

Houla vous allez vite !

En fait je voudrais que à 5h du matin le radiateur démarre SI la température est inférieure à 20°C.
Voilà, c’est tout.
Si je fait 2 scenarios, le radiateur va démarrer et s’éteindre de suite, c’est pas cool…
Merci de vous intéresser au sujet.


#13

Il te suffit de faire un scénario qui va se déclencher sur une alarme cron tout les matin à 5h et tu lui met comme condition si inférieur a 20°c ! Et si la condition est vérifié il allume le radiateur.

Pourquoi ? Si tu fait un second scénario avec comme condition si supérieure ou égal à 23°c ton radiateur ne s’éteindra que quand il fera 23°c dans la pièce :slight_smile:


#14

Je me suis mal exprimé : si je fait 2 scenar (1 avec 5h et 1 avec 20°) alors, qu’est-ce qui empêche le radiateur de démarrer si la température est inférieure à 20° ?
Aah noooooon !! Je viens de comprendre :
Je fait un premier scenar qui déclenche à 5h et qui déclenche un second scenar qui checke la température > 20° !
Je teste ça et fait un retour… Merci les gars !


#15

Pas du tout.

Au préalable, tu crées un script qui check la température et exécute l’ordre de chauffer si consigne non atteinte.

Tu fais un réveil (alarme à 5h), ton scénario associé à cette alarme (il se déclenchera donc à 5h) avec au final une execution du script : ca fait donc qu’un seul scénario.

Le problème reste pour monitorer ta température et lui dire d’arrêter quand temp atteinte et reprendre quand temp descendu. Amon avis tout est jouable dans le script mais c’est pas mon dada. Faut voir avec les pros.

Mais est-ce que Gladys à la main sur ton radiateur ou bien c’est le script python ?
Si Gladys peut actionner le radiateur, je pense que c’est encore plus simple que ça, c’est comme @MathieuA te l’a dit


#16

OK. Alors pour être plus précis, voilà mon script python qui check la température et je ne sais pas comment le convertir en javascript, je ne sais pas utiliser les librairies adafruit en javascript :disappointed_relieved:

#l'import des libs 
import sys
import Adafruit_DHT
 #pour faire les req HTTP en python 
import requests
#Quelques variables
sensor = Adafruit_DHT.AM2302
pin = 4
#Récupération des valeurs de capteur
humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
#Envoi de la requête avec la température
if temperature is not None:
    reqParm = {'value': temperature, 'devicetype': '29', 'token': '[GLADYS_TOKEN]'}
    r = requests.get('http://[IP_GLADYS]:8080/devicestate/create',params=reqParm)
    r.status_code
else:
    print('Failed to get reading. Try again!')
    sys.exit(1)

#17

Mais noooooon :rofl:

Tu créer une alarme cron qui se déclenche tout les matins à 5h dans l’onglet Réveil.
Ensuite tu va dans l’onglet scénario et tu créer un nouveau scénario, tu lui donne un nom, dans catégorie tu choisis Alarme ensuite dans déclencheur du choisis Quand une alarme se déclenche et tu sélectionne ton alarme cron qui tu as créé juste avant.
Tu lui met pas de condition et dans action tu choisis Exécuter un script.

Dans ton script tu met =>

let tempDevice = {
     id: 1
}

let radDevice = {
     id: 1,
     value: 1
}

// On récupère les infos concernant le devicetype température
gladys.deviceType.getById(tempDevice)
     .then(function(deviceType){
         // On check si la dernière valeur est inférieur ou égal a 20
         // Et si c'est le cas on fait appel a la fonction exec qui elle va demarrer le radiateur

         if(deviceType.lastValue <= 20) exec()
     })
     
function exec(){
    gladys.deviceType.exec(radDevice)
}

Evidemment les id sont a remplacer par les tiens ^^


#18

Le souci étant de remettre en route le chauffage quand la température est tombée dans la journée ou alors de maintenir la température sur une durée (Si c’est un comportement que tu désires @lbsk31)
Là, ça va vérifier à 5h du matin, se mettre en route pour atteindre la température (genre vers 6h) et le chauffage va se couper pour redescendre au départ, voir plus bas (genre à 8h, ce sont des suppositions, je connais pas ta maison hein) et ça attendra 5h du matin le lendemain pour revérifier.

Mais apparemment, tu as une remontée de température dans Gladys via un device en HTTP. Donc ton radiateur est commandé par Gladys ?
Pourquoi ne pas faire deux scénarios basé sur ton device température qui va commander en continu via les scénarios ton radiateur et t’assurer d’avoir une température constante dans ta pièce, toute la journée ?


#19

OK ok ok c’est bon n’en jetez plus. Merci d’avoir joué !
Merci à tout les 2, vous m’avez fait progresser dans ma réflexion.
En fait dans la salle de bain je ne veux le radiateur que entre 5h et 7h le matin et entre 19h et 20h le soir, et le reste de la journée et de la nuit, on s’en cogne : ça je savais le faire.
Ce que je voulais ajouter c’est que à 5h si la température est de 17° alors, Gladys n’allume pas le radiateur. Et maintenant ça marche (au passage concernant le devicetype radiateur, le nom de paramètre id est ‘devicetype’ et non ‘id’
A tchao bonsoir !


#20

Pour les suivants, j’ai un peu retouché le script :

let tempDevice = {
     id: 29
};
let radDevice = {
     devicetype: 13,
     value: 1
};
let consigne = 17 ;
  console.log(consigne);
  // On récupère les infos concernant le devicetype température
gladys.deviceType.getById(tempDevice)
     .then(function(deviceType){
         // On check si la dernière valeur est inférieur ou égal a 20
         // Et si c'est le cas on fait appel a la fonction exec qui elle va demarrer le radiateur
         if(deviceType.lastValue <= consigne) {
             console.log(deviceType.lastValue);
             console.log(radDevice);
             gladys.deviceType.exec(radDevice) ;
         }
     });