Aller au contenu

Aide sur QuickApp pour IPX800 V4


Messages recommandés

Posté(e) (modifié)

Hello,

 

Je cherche à obtenir la valeur d'une entrée analogique sur l'IPX800 v4. Quand j'essaie :

function QuickApp:onInit()
self.http = net.HTTPClient({timeout=3000})
    --self.http:request("http://admin:password@192.168.0.4:80/api/xdevices.json&?key=apikey&GetAn=1",
    self.http:request("http://admin:password@192.168.0.4:80/api/xdevices.json&?key=apikey&Get=A",
       {
        options = {
      
    --        headers = {['Authorization']='Basic '..self:getVariable("password")},
            method = 'GET'
        },  
        success = function(response)
        local analog = response.data
        self:debug("analog =", analog)
        self:updateView("LBL_State", "text", analog)

Je récupère ça :

[07.01.2021] [17:14:35] [DEBUG] [QUICKAPP313]: analog = { "product": "IPX800_V4", "status": "Success", "A1": 32514, "A2": 0, "A3": 0, "A4": 0 }

La valeur qui m'intéresse est celle derrière "A1", j'ai fait plusieurs essais, dont celui-ci :

local analog = string.find(response.data, "A1")
        self:debug("analog =", analog)

Mais la valeur que je récupère est celle-ci :

[07.01.2021] [17:15:49] [DEBUG] [QUICKAPP313]: analog = 64

Une idée?

Modifié par Lazer
Sujet déplacé et renommé
Posté(e)

Quelque chose dans ce genre là :

success = function(response)
	local jsonTable = json.decode(response.data)
	self:debug("A1 = ", jsonTable.A1)
	self:updateView("LBL_State", "text", jsonTable.A1)
end,

 

Posté(e)

Merci Lazer, ça fonctionne parfaitement.

Je ne suis pas un ouf de la programmation tu l'auras compris, mais ce qui est cool avec la HC et ce forum c'est qu'on en apprend tous les jours!

J'ai une autre question cependant : j'ai écris ce code dans la fonction OnInit du QA, comment je peux faire pour qu'il soit interprété à fréquence régulière? Est-ce que ça prend beaucoup de ressources (à la HC3 et sur le réseau) et est-ce cohérent si je veux par exemple une mise à jour à la seconde? 

 

Posté(e)

Le onInit est là uniquement pour l'initialisation, il n'est pas censé servir à interroger un périphérique.

Il faut mettre en place un mécanisme de boucle qui est appelée à intervalle régulier avec fibaro.settimeout().

 

Regarde dans le doc il y a un exemple :

https://manuals.fibaro.com/home-center-3-quick-apps/

 

Attention, 1s c'est beaucoup trop court (surcharge de la HC3 et surtout de l'IPX800 en fasse), et de plus totalement inutile.

En général, on fait plutôt une interrogation toutes les 60 secondes, c'est une bonne moyenne.

 

Si tu veux creuser plus, il y a déjà pas mal de QuickApps partagés sur le forum dont tu peux t'inspirer

Posté(e)

Merci pour ton retour et tes conseils. J'ai mis une interrogation à 60 sec. et tout fonctionne nickel!

L'objectif était pour moi d'apprendre à récupérer une valeur analogique de l'Ipx, j'ai cru comprendre qu'il étais possible que ce soit l'IPX qui pousse la (ou les) valeur(s) analogiques vers la HC3 sur un évènement (horaire par exemple), je pense que ça doit être plus pertinent d'envoyer toutes les valeurs analogiques lors d'un push que d'interroger l'IPX sans cesse, Non? Je vais faire des tests, et revenir probablement avec d'autres questions! 

Encore merci!

Posté(e)

Oui le Push est plus pertinent (plus efficient surtout, en terme d'utilisation des ressources).

 

Par exemple : partisan de .rump => Putch => Capitole

Oup's, pas de politique :police:

 

Sérieux, le Push est adapté aux événements ponctuels, comme par exemple une entrée numérique (capteur qui passe de l'état ouvert à fermé, lumière allumée/éteinte, etc)

En plus, cela est pertinent, car on connait immédiatement le changement d'état, pour agir en conséquence.

Ex : mouvement => allumage auto de la lumière.

 

Mais pas dans le cas d'une valeur analogique, qui par définition même, n'a pas de valeur finie, elle est perpétuelle variation parmi une infinité de valeur.

Vu que l'IPX800 mesure les entrées analogique plusieurs fois par secondes, tu imagines le nombre de push du délire !!

En plus, cette info n'est pas pertinente, jamais on a besoin de savoir en temps-réel que la température/humidité/luminosité vient de varier d'un 1/4 de poil de c....heveux.
 

A la limite, tu peux te faire des triggers, des seuils (avec histérésis) sur l'IPX800 qui vont déclencher un push vers la HC3 en cas de dépassement de valeur analogique au delà d'un certain seuil.

Là ça peut être utile, par exemple si la température passe en dessous de 19°C => Allumage du chauffage.

Mais est-ce bien pertinent ?

Je veux dire, avec un polling régulier de 60s, au pire, tu connaitra le passage de la température sous le seuil avec 60s de retard, ce qui ne change en rien l'inertie de la maison et le temps de réchauffer la température.

J'avoue ne pas connaitre d'exemples pour lesquels un push immédiate d'une valeur analogique serait indispensable.

 

 

Mon avis, le mieux c'est polling pour les valeurs analogiques, et push pour les valeurs binaires.

Mais bien sûr, ça n'empêche pas de faire également du polling pour les valeurs binaires, comme je le fais dans mon futur QuickApp. L'avantage, c'est de récupérer quoi qu'il arrive les valeurs binaires, même si le push n'a pas eu lieu grâce à l'intervention de la police (oup's, encore.....)

  • Like 1
Posté(e)

Je pense que n'ai pas compris la question ?

 

Il faut déclarer autant de push qu'il y a d'information à remonter... donc ça devient vite fastidieux si y'a des dizaines d'infos à remonter

Posté(e) (modifié)
il y a 11 minutes, Lazer a dit :

Je pense que n'ai pas compris la question ?

mouai j'ai l'impression à chaque fois que je parle de ça que personne ne voit ce dont je parle :) 

 

voilà ce que j'ai chez moi (V3 !!!)

 

49781315-C797-4E45-8638-2A58290F9C70.thumb.jpeg.a7b3dca2157d186bdd3bba535236aa0b.jpeg

 

du coup sur le socket je récupère ça

Citation

I=10110000000000000000000000000000&O=00111100000000000000... ... ...

 

du coup j'ai déclaré aucun retour dans les push des IN/OUT.

A chaque changement d'une IN, OUT, COUNTER, ... je reçois cette trame avec les valeurs à jour.

Ensuite je mets les child à jours.

Modifié par jjacques68
Posté(e) (modifié)

Ah oui OK, je n'y étais pas du tout !

 

Je pensais aux connexions Push par HTTP dans la discussion.

 

Je me souviens qu'on en avait parlé il y a quelques temps du M2M avec les sockets TCP (qui n'est pas du WebSockets, attention à ne pas confondre)

Mais déjà que notre ami a du mal à faire 1 requête HTTP et récupérer la valeur, là tu vas définitivement le noyer :lol:

 

Mais la connexion M2M n'a rien à avoir avec du Push, puisque tu dois ouvrir une socket TCP permanente vers l'IPX800, en échange de quoi celui-ci retourne une trame à chaque changement d'état.

Je n'ai pas essayé sur l'IPX800 v4, je ne sais même pas si c'est disponible, je n'ai jamais vu cet écran.

Enfin, je précise, le M2M existe, pour envoyer des commandes, ou pour lire des valeurs (en mode polling à intervalle régulieer), mais ce que je ne sais pas, c'est si l'IPX800 v4 envoie immédiatement une trame en cas de changement d'état (appelons-le Fake-Push :D )

 

EDIT pour préciser :

Sur l'IPX800 v4, on peut ouvrir la socket pour le M2M, mais la case à cocher "send data on status change" n'existe pas, ni la sélection des inputs/outputs.

(tient d'ailleurs, étonnant ce texte en anglais pour un produit franco-français)

Tu remarqueras d'ailleurs que les entrées analogiques n'y sont pas, c'est logique, en vertu de ce que j'ai expliqué hier un peu plus haut sur la page.

 

Modifié par Lazer
Posté(e)

:) tout à fait,  mais c'est vachement pratique !!

bon, la fonction qui extrait les données de la trame reçue, pour mettre à jour les child est vraiment ... "moche" :)

foutu traitement de chaîne de caractères... en lua c'est pfffff :(

Posté(e)
il y a 10 minutes, Lazer a dit :

Tu remarqueras d'ailleurs que les entrées analogiques n'y sont pas, c'est logique, en vertu de ce que j'ai expliqué hier un peu plus haut sur la page

si si elles y sont, c'est juste que j'ai tronqué lors du copié/collé.

Mais justement, je serais curieux de savoir ce que ça donne, vu ton explication plus haut.

J'imagine que ça doit bombarder sévère sur la socket...

Je peux pas le tester, je n'ai rien sur les input analogique.

Posté(e)

Ah ouais, bizarre

Parce que quand je regarde mon IPX800 v4, les entrées analogiques peuvent changer plusieurs fois par seconde, par exemple quand la température est entre 5.5 et 5.6°C comme c'est juste le cas maintenant.

Il faut pouvoir configurer un hystérésis afin de ne pas flooder de messages.

Posté(e)
il y a 16 minutes, Lazer a dit :

(tient d'ailleurs, étonnant ce texte en anglais pour un produit franco-français)

j'ai un vieux souvenir qui traîne dans ma tête... je crois...

 

quand j'avais voulu utilisé cette option, il me semble que ça ne marchait pas.

J'avais contacté GCE, et il me semble qu'ils m'avaient envoyé un firmware, ou m'ont fait télécharger sur leur wiki un nouveau firmware.

L'IHM avait complètement changé...

 

c'était en mars, pendant le confinement, ou je débutait avec la HC3... :) 

Posté(e)
il y a 5 minutes, Lazer a dit :

Ah ouais, bizarre

voilà la trame complète : 

 

I=10110000000000000000000000000000&

O=00111110000000000000000000000000&

A0=0&A1=0&A2=0&A3=0&A4=0&A5=0&A6=0&A7=0&A8=0&A9=0&A10=0&A11=0&A12=0&A13=0&A14=0&A15=0&

C1=2093786&C2=8388608&C3=0&C4=0&C5=67108864&C6=58720256&C7=0&C8=8388608

Posté(e)

Bonjour à vous, désolé d'avoir quitté ce topic je suis souvent en déplacement!

D'accord avec toi Lazer sur la fréquence des push (et dans le fond, aussi sur l'extension .rump ;-), mais mon souhait serait de faire du suivi énergétique avec la HC3 (délestage, alignement des consommations sur une production photovoltaïque etc.), et je me renseigne et fait des tests avant d'acquérir le bon matériel..

 

Sur l'IPX, il est possible d'ajouter de quoi mesurer mes consommations (pinces amp.) et production (extension x400 CT + bridge). Le problème est que l'IPX ne fait pas d'historisation, et je comptais sur la HC3 pour prendre le relais (si cela est possible, je n'ai toujours pas croisé cette superbe interface avec des courbes et tout et tout, qui nous est présentée avant d'acheter la HC3, mais ça c'est un autre problème et j'imagine que ça va apparaitre prochainement..). Mon problème est que si je veux faire un suivi de consommation, il me faut un retour de l'IPX quasi-instantanément des entrées analogiques (courant et tensions) afin de pouvoir valoriser cela en consommation. Il me faut de la réactivité également si il est question de faire du délestage à partir de la HC3.

Il semble que le M2M puisse envoyer des trames comme jjacques68 en parle, mais je ne sais pas si c'est valable sur un status_change, mais si cela est le cas est-ce que ça sous-entendrait que l'IPX peut informer en temps réel la HC3?

 

Voilà ce qui est dit sur la doc de l'IPX :
"Enfin, les requêtes de l'API M2M devront être effectuées après une connexion TCP client (port 9870 par défaut). Cette connexion ne sera cependant possible qu'après l'activation du M2M (menu « http://IPX800_V4/admin/m2m.htm »). Un message « key=apikey » devra ensuite être envoyé afin de s'authentifier. Chaque message sera porteur d'une seule commande."

image.thumb.png.2a5e1c78b171912b60032232b2c212af.png

(je précise qu'apparemment la mesure de courant vient renseigner les Entrée analogiques virtuelles)..

 

Une autre solution à l'IPX+X400 serait un Eco-device RT2, plus coûteux, mais faisant de l'historisation. Je pourrais donc me contenter de récupérer (push mais avec une fréquence de 60s) les données de consommations calculées par l'Ecodevice + push sur hystéresis quand j'ai besoin de réactivité (délestage par ex.).

 

Des avis éclairés?

 

Posté(e)

Je pense que tu devrais regarder mon nouveau QuickApp, qui adresse le sujet des pinces ampèremétriques en permettant d'associer la consommation aux modules dans la HC3.

 

D'ailleurs je vais faire de ce pas les captures d'écran pour mettre à jour le tuto avec le Push (états binaires, mais aussi consommation des tores)

 

 

 

Posté(e)

Voilà un QA qui a l'air vraiment cool!

Je n'avais pas vu que tu avais mis ça en ligne, je vais dès que j'ai un peu de temps regarder ça, et essayer de comprendre le code!

 

Merci beaucoup!!

×
×
  • Créer...