Aller au contenu
Sowliny

HC3 - ...getValue(id, value) sur un module (prise) débranché

Recommended Posts

Bonsoir à tous,  je sèche...

 

Je recherche le moyen de vérifier l'état (brachée au secteur, ou pas) d'une prise, en l'occurence une Aeon SmartSwitch.

 

En effet, la fonction fibaro.getValue(id,"value") me renvoie "true" (ou "Off" selon le cas) même si la prise est débranchée du secteur (renvoi de son dernier état connu).

Bien, mais le PAF est à zéro (Programmer Acceptance Factor)...

 

Je recherche le moyen (au pire) de savoir si le module est connu comme "disconnected" dans la HC3.

 

Si ça se trouve, c'est bête comme chou et je connais certainement la réponse, mais je boucle sans fin, malgré des recherches tous azimuts.

Un p'tit coup de barre peut-être...

 

Merci d'avance si quelqu'un peut m'aiguiller !

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

C'est loin d'être simple....

 

Le getValue() n'interroge pas le module, mais uniquement son dernier état connu dans la base de données de la HC3.

 

Dans les grandes lignes, voici les 4 pistes que je te propose :

  • oublier ton idée, le Z-Wave n'est pas fait pour ça... on ne doit pas "pinguer" un module en continu comme on le ferai sur un réseau IP, au risque de saturer le réseau Z-Wave
  • si vraiment tu t'obstines :
    • faire un "polling" du module, tu peux le forcer via l'API de la box (pour obtenir la méthode, tu fais F12 pour obtenir les outils de dev de ton navigateur, et tu regardes l'URL et les données envoyées au moment où tu cliques sur ce bouton dans la box)
    • attendre quelques secondes
    • au bout d'un certain temps, voire même d'un temps certain, si la box n'arrive pas à communiquer avec le module parce qu'il est débranché, elle le marque en dead (dans ses propriétés accessibles dans son JSON via l'API)
    • lire cette valeur dead et faire ton scénario si le module est débranché
  • se souvenir que mon premier conseil d'oublier ton idée était... une bonne suggestion :D
  • si finalement tu persistes dans ton obstination, surtout ne tente pas de communiquer avec le module trop souvent.... idéalement il faut que ce polling soit au moins aussi lent que le polling global enregistré dans la box (et plus y'a de modules sur le réseau, plus le polling est allongé, voir supprimée (et hop, retour au point n°1 !!! ))

 

  • Like 2

Partager ce message


Lien à poster
Partager sur d’autres sites

si ton objectif final est de savoir si une prise est alimentée en courant, il existe ce module, qui en cas de perte et retour de courant (par association) peut agir sur un autre (l'éteindre ou l'allumer) et donc tu peux savoir s'il y a du courant

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci à tous pour ces infos !

 

Mon idée de départ n'était pas bien sur de pinguer ce module à tout va, mais "simplement" de tester l'état "de vie" de ce module en cas de non-réponse à un ordre (turnOn/turn/Off) donné.

J'effectue en cas de discordance entre l'état demandé (turnOn par exemple) et l'état résultant après l'émission de l'ordre, une boucle limitée à trois réitérations de cet ordre, à 3 secondes d'intervalle chacunes.

Ca fonctionne bien si il y a discordance, mais si le module est H.S. (par exemple, ou non alimenté) ma fonction se basera donc sur l'état connu par la HC3.

 

Je vais donc suivre le sage conseil de @Lazer et mettre cette fonction en veilleuse (j'ai visité aussi le lien sur la prise Nodon - intéressant).

Je vais aussi suivre la piste du marquage en "dead" - et aussi celle du marquage "déconnecté" par la HC3.

 

Ci-dessous, l'icône résultant de l'absence d'alimentation d'un FGK - même icône pour la prise Aeon SmartSwitch.

 

48720966_IcneHC3dconnect.png.bcd2fd54ad4ed6fe0bf6fcbcf41201dd.png

 

Merci encore pour vos réponses !

 

Modifié par Sowliny
eclaircissement des mes explications

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui justement ça c'est l’icône d'un nœud mort = dead

Partager ce message


Lien à poster
Partager sur d’autres sites

il traine sur le forum un VD qui détecte les modules morts

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci à toi, Lazer.

 

Je reconnais humblement que j'ai encore (beaucoup) de lacunes (par exemple le json m'est étranger - mais je vais m'y mettre !).

Je n'avais pas fait la relation "déconnecté" et dead - mais je pense que ça n'aurait pas tardé... :2:.

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci Jojo !

 

Je vais de ce pas voir ce VD !

Partager ce message


Lien à poster
Partager sur d’autres sites

Je ne suis pas certain que le VD soit encore d'actualité, il date des tous débuts de la HC2.... l'API a pas mal évoluée depuis.

 

Le JSON d'un module tu peux le récupérer via l'API grâce à l'URL suivante sur l'adresse IP de ta box (remplacer 150 par l'ID de ton module) :

/api/devices/150

 

Tu récupères quelque chose qui ressemble à ça, avec la propriété "dead" qui nous intéresse (en bas de ma capture) :

{
	"id": 150,
	"name": "Eco-Devices",
	"roomID": 219,
	"view": [
		{
			"type": "json"
		}
	],
	"type": "com.fibaro.powerSensor",
	"baseType": "com.fibaro.multilevelSensor",
	"enabled": true,
	"visible": true,
	"isPlugin": true,
	"parentId": 0,
	"viewXml": true,
	"configXml": false,
	"interfaces": [
		"energy",
		"power",
		"quickApp"
	],
	"properties": {
		"apiVersion": "1.1",
		"categories": [
			"other"
		],
		"dead": false,
		"deadReason": "",

 

En LUA, tu peux aller récupérer tout le JSON grâce à api.get("/devices/150") ou directement la valeur qui t'intéresse via fibaro:getValue(150, "dead")

 

Pour forcer un polling, comme dit c'est un peu plus technique, il faut utiliser les outils de dév de ton navigateur web pour récupérer l'appel qui est fait à l'API (ce n'est pas officiellement documenté)

Par exemple je l'ai déjà fait dans une scène sur la HC2 ça ressemble à ça (il faut au préalable connaitre l'ID du module parent du module que tu veux interroger) :

		local postURL = 'http://127.0.0.1:11111/api/devices/' .. parentId .. '/action/poll'
		local httpClient = net.HTTPClient()
		httpClient:request(postURL, {
			success = function(response)
				if response.status == 200 or response.status == 202 then
					fibaro:debug("Poll device OK")
				else
					fibaro:debug('<span style="color:red;">Error : status='..tostring(response.status)..'</span>')
				end
			end,
			error = function(err)
				fibaro:debug('<span style="color:red;">Error : '..err..'</span>')
			end,
			options = {
				method = 'POST'
			}
		})

 

Partager ce message


Lien à poster
Partager sur d’autres sites

c'est à partir d'ici

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

×