Aller au contenu

Messages recommandés

Posté(e)

Bonjour à  tous,

 

Je suis en train de réfléchir sur un module virtuel qui me donnerait (en appuyant sur un bouton) en temps réel le classement des 10 appareils (Wall plug, module, etc..) qui consommeraient le plus.

 

Cela me permettrait  de vérifier quels sont les appareils qui sont allumés et quel est leur consommation et ce depuis mon smartphone et non depuis un Ipad ou un PC.

 

Si vous avez des idées sur la marche à  suivre ou si vous avez déjà  quelques choses qui ressemble à  cela, je suis preneur  :D.

 

Autrement si des membres sont intéressés on peut essayer de faire quelques choses en commun.

 

Bonne journée à  tous.

 

 

Posté(e)

Tu devras utiliser l' API pour recéper un json avec toutes les données filtrées, et utiliser tout cela pour mettre à  jour ton device, rien d'insurmontable ;). Je test actuellement la version Alpha 3.901 donc je ne peut pas tester cela aujourd'hui.

 

Bonne idée ;)

Posté(e) (modifié)
Et voilà  le virtual device tout prêt à  télécharger.
 
C'était une bonne idée, et j'ai appris plein de trucs sur la manipulation des tableaux ce soir :)
 

screenshot virtual device top10power

--
-- This virtual device displays top ten power consumption
-- Author : Lazer
-- Date : March 2014
--

-- User variables
local maxNodeID = 100

-- System variables
local devices = {}
local j=1
local selfID = fibaro:getSelfId()

-- Search for power consumption
for i = 1, maxNodeID do
	if string.find(fibaro:get(i, 'unitSensor'), "W") ~= nil or string.find (fibaro:get(i, 'unit'), "W") ~= nil then
		if fibaro:getType(i) == "multi_level_sensor" then
			deviceValue = fibaro:getValue(i, "value")
		else
			deviceValue = fibaro:getValue(i, "valueSensor")
		end
		devices[j] = {i, tonumber(deviceValue)}
		j = j + 1
	end
end

-- Sort table from highest to lowest
table.sort(devices, function(a, return a[2]>b[2] end)

-- Display results
for i = 1, 10 do
	if devices[i][2] > 0 then
		fibaro:debug(i .. " id=" .. devices[i][1] .. " - Value=" .. devices[i][2] .. " - Name=" .. fibaro:getName(devices[i][1]) .. " " .. fibaro:getRoomNameByDeviceID(devices[i][1]) )
		fibaro:call(selfID, "setProperty", "ui.Label"..tostring(i)..".value", fibaro:getName(devices[i][1]) .. " (" .. fibaro:getRoomNameByDeviceID(devices[i][1]) .. ") : " .. devices[i][2] .. "W" )
    else
		fibaro:call(selfID, "setProperty", "ui.Label"..tostring(i)..".value", "")
	end
end

.

 

Note : La nouvelle version de ce module est maintenue par @jojo sur le nouveau sujet de discussion : [Tuto Energie] Top 10 Power

Top_10_Power.vfib

Modifié par Lazer
  • Upvote 5
Posté(e)

je n'aurais je pense pas eu la même approche mais le résultat est la: GOOD JOB :)

Posté(e)

Ca aurait été plus galère avec l'API car il faut jouer avec le json.decode.

Tandis que là  j'ai juste récupéré le bout de code utilisé dans les graphiques de temp/hygro/conso.

 

C'est vraiment le tri du tableau qui m'a donné du fil à  retordre... m'enfin maintenant c'est bon :)

Posté(e)

Merci à  Lazer pour ce travail si rapide et correspondant à  l'idée que je me faisais de ce module virtuel. Merci également à  tous ceux qui ont bien voulu répondre. 

 

Dans le même souci de vérification et de contrôle des Wall plug etc je me demandais si il ne serait pas possible d'avoir un bouton pour les désactiver, du moins désactiver celui que l'on voudrait. Un bouton on off en face de chacun des 10 id afin de délester si besoin.

 

 

Un peu comme un délesteur dynamique. 

 

Merci encore une fois, il est installé et fonctionne à  merveille.

 

Dois-je mettre résolu ?

 

A bientôt.

Posté(e)

Je ne crois pas qu'il soit possible de mettre un bouton à  coté du label dans un module virtuel.

 

Une solution de contournement serait de mettre un bouton en dessous de chaque label, mais ça va surcharger l'affichage et faire moche.

Je ne sais pas si en v4 il sera possible d'améliorer le layout des modules virtuels, mais pour le moment c'est un peu trop limité.

Sinon pour faire ce que tu veux faire, il faudrait se tourner vers une page en PHP/HTML hébergée sur un serveur Web externe (NAS, ...). Mais ça ne sera pas intégré au HC2.

 

Pour le sujet résolu, c'est toi qui voit ;)

Posté(e)

j'ai un petit soucis, il ne me reconnait que un wall plug et une lumière, il n'affiche que le plus consommateur d'une catégorie? ou il pourrait m'afficher 10 wall plug, (si j'en avait dix) ?

Posté(e)

Je n'ai pas ce souci, le module virtuel me montre 7 wall plugs et 2 autres appareils. Attention toutefois au nombre max de nods indiqué ici :

 

Je pense qu'il faut augmenter ce nombre si tu as beaucoup de modules.

 

Est-ce bien cela Lazer ?

 

  1. local maxNodeID = 100
Posté(e)

non, j'en ai pas tant que çà , mais il affiche que deux retours, un wall plug et une lumiere alors que j'en ai une dizaines, dont 3 wall plug. 

Posté(e)

Alors, après vérification plus poussée, il semble que certains de mes wall plugs ne soient pas pris en compte non plus. Là  ou c'est étrange, c'est que ceux sont des wall plug. Je me demande si le code ne plante pas dans la vérification d'un module en particulier et donc le ferais arrêter dans le début ? C'est vrai que perso j'ai au moins 30 wall plugs et que je n'ai jamais vu plus de 9 numéros renseignés sur la liste.

 

Laser, aurais-tu une idée ? Faut-il extraire un module de la liste des nods pour éviter une requête quelque part ? ou peut être même préciser la liste des nods à  vérifier ?

Posté(e)

En effet, il faut bien augmenter la variable maxNodeID en fonction de vos besoins. D'ailleurs, ce week-end je viens de dépasser cette limite chez moi.

 

En ce qui concerne l'affichage des modules, le script devrait normalement tout prendre en compte sans se limiter à  quelques uns.

 

Essayez d'ouvrir la fenêtre de Debug et de copier/coller l'affichage ici. Si il y a un bug, ça apparaitra surement.

Posté(e)

@ Lazer : 340 modules en tout genre et cela fonctionne parfaitement après vérification d'un module AEON DSB05 qui faisait planter le code.

 

@Frederic : Après vérification, le code fonctionne bien, mais il m'a fallu exclure et ré inclure 1 module (DSB05) et en réactiver 1 (ST814). Donc ok de mon coté.

 

Ce qui est bien, c'est que je ne pouvais plus utiliser le toolkit de Krikroff à  cause apparemment de ce DSB05 et que maintenant tout est rentré dans l'ordre.  :60:

Posté(e)

H.S: @Arnaud78, c'était quoi le problème avec le Toolkit et le DSB05 ?

Posté(e)

H.S. @Krikroff : Le DSB05 faisait planter le script de Lazer, une fois exclu et réinstallé, tout est rentré dans l'ordre. Par contre, le ST814 en ID:36 faisait planter le toolkit. Lorsque je lançais la recherche des appareils, je scrollais la liste et juste avant de faire apparaître le ST814, il y avait un crash. J'ai simplement triple cliqué sur le bouton d'activation afin de lui faire reconnaître sa position et tout est ok maintenant. Je ne sais pas trop l'expliquer car je ne pense pas qu'il y ait de rapport mais bon. Cela faisait des semaines que je ne pouvais plus utiliser le toolkit... Donc maintenant c'est  :D

  • 2 semaines après...
Posté(e)

J'ai du oublier un truc tout bête, mais j'ai importé le module en l'état et ça ne marche pas chez moi..

quand je passe en mode debug j'ai : 
[ERROR] 11:02:54: line 29: attempt to compare number with nil

 

La ligne 29 étant : 
table.sort(devices, function(a,B) return a[2]>b[2] end)

 

merci par avance de votre aide :)

Posté(e)

je suis désolé electone77, je n'ai pas la réponse à  ta question.

 

pour revenir sur mon problème sur la page précédente, c’était bien le problème du paramètre 

local maxNodeID = 100

 j'ai fait l'amalgame entre nombre de device et d'ID, donc en augmentant ce paramètre, tout est rentré dans l'ordre  ;)

Posté(e)

Tu dois avoir un device qui renvoie une valeur NULL au lieu de renvoyer sa consommation.

Tu peux essayer de remplacer les lignes 23 et 24 :

devices[j] = {i, tonumber(deviceValue)}
j = j + 1

Par :

if  deviceValue ~= nil then
 devices[j] = {i, tonumber(deviceValue)}
 j = j + 1
end
  • 11 mois après...
Posté(e)

Vous commencez à  me connaître ... Dès que je trouve un module sympa, j'essaie de le rendre encore plus sympa ...

J'ai donc adapté le module Top 10 Power de Lazer.

Il tourne toutes les 1 minutes (paramétrable dans le champ TCP Port du VD), fait un total de la consommation de tous les modules découverts et affiche une icône en fonction de la consommation actuelle (par rapport à  une consommation totale paramétrable).

Ce module fonctionne pour la v3.x, mais n'est pas encore compatible ave c la v4.x (un peu de patience SVP)

post-1320-0-68673300-1426182802_thumb.jpg

post-1320-0-44530000-1426182803_thumb.jpg

Top_10_Power_v2.0.vfib

 

Les icones :

post-1320-0-76162500-1426182919_thumb.png

post-1320-0-06173500-1426182920_thumb.png

post-1320-0-43365800-1426182920_thumb.png

post-1320-0-75305400-1426182920_thumb.png

post-1320-0-14184300-1426182921_thumb.png

 

  • Upvote 1
Invité
Ce sujet ne peut plus recevoir de nouvelles réponses.
×
×
  • Créer...