Aller au contenu

Voir Si Une Lumière Est Allumée Et Tout Éteindre


neliger

Recommended Posts

@pepite merci le test de STEVEN sert a savoir combien de temps mets la HC2 pour écrire et lire une variable globale c'est une sorte de BENCH il fais cela pour essayer d'optimiser son code sur la HC2

Lien vers le commentaire
Partager sur d’autres sites

il faudrait demander a neliger si il veut pas le mettre dans le 1 post

Autrement on peut ouvrir un nouveau sujet avec le bon code et demander aux admin de mettre ce sujet dans le bistro

on dial dans le bistro et on mets le sujet a jour ensuite ça évite les erreurs

Lien vers le commentaire
Partager sur d’autres sites

Oui ça serait plus logique de mettre àjour le code du post original.

@mprinfo, j'ai trouvé un technique pour créer une variable globale mais c'est via l'API.

Lien vers le commentaire
Partager sur d’autres sites

Merci Gazous c'est pour quand je partage des VD car pas toujours simple a ce qu'il soit portable

je suis un bille avec l'api mais si tu me donnes code je pense arrivé a me débrouiller :D

 

Si neliger ne peut pas modifier le post car en ce moment je sais qu'il n'a pas trop le temps on peut recrée un nouveau sujet ca sera simple ca il y a un faute de frappe dans le titre

On dit que l'idée de départ et de néliger et on post le bon code par contre on continue ici pour discuter a l'améliorer et je veux bien demander a un admin de déplacer le sujet dans le bistrot

 

@megabubu je suis pas d'accord avec toi un personne de nul c'est quelqu'un qui n'essaie pas donc c'est pas ton cas

Lien vers le commentaire
Partager sur d’autres sites

Oui, vous pouvez faire cela.

 

Je manque de temps, en effet, et ne pensais pas que ce léger module susciterais cette attention.

 

De mon côté, je pense plutôt partir dans le développement de plug-in, si c'est l'avenir de la contribution sur Home Center, et cela me permettra peut-être de faire des choses bien plus complexes et complètes.

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

@pepite

 

Soit tu fais une recherche par nom grâce à  if valeur.name == "ton nom de module" (test que j'effectue pour palier le islight qui ne fonctionne pas à  cause de la V4.040). J'en avais parlé au début du tuto.

 

Soit avec if valeur.type ==  "com.fibaro.FGWP101"

 

Ces conditions de test sont également à  rajouter dans le code, si ça t' intéresses je peux le faire.

 

J'ai testé le code en shintant le islight et ça semble fonctionner (il y avait un tite erreur). ;)

Modifié par trainkill666
Lien vers le commentaire
Partager sur d’autres sites

Un petit retour de mon côté après quelques jours d'utilisation.

Je remarque que mon script se bloque régulièrement au bout de quelques heures.

Tout d'un coup, il ne tourne plus et quand je l'édite et sauvegarde ça repart.

Comme si la boucle se bloquait àun moment donné.

J'ai fait le test en retirant le While true pour qu'il tourne toutes les 3s via le fonctionnement natif de la main loop, pareil.

J'ai aussi tout passé dans une fonction pour l'appeler en pcall et c'est toujours pareil.

Je ne sais pas ce qui peut le bloquer ainsi.

Une idée ?

Lien vers le commentaire
Partager sur d’autres sites

@trainkill : t'as teste avec quoi alors comme code ?

avec le nom j'ai l'impression que ce serait plus fiable, on connait nos modules ;-) mais a discuter.

 

@Gazous, je me demande si cela ne vient pas de la boucle, pe en la mettant dans un bouton type "rafraichir" et ne mettre que dans le mainloop un "pressbutton" toutes les x minutes

Lien vers le commentaire
Partager sur d’autres sites

J'ai songé àcela mais ce qui me gêne c'est que l'appuis sur le bouton génère un changement de l'icône indésirable àchaque occurence.

J'ai d'autres modules qui tournent en permanence et n'ont pas ce problème. Je vais creuser pour voir ce qui bloque...

Lien vers le commentaire
Partager sur d’autres sites

ca change l'icone meme si tout est allume ou tout eteint ?

 

 

Au fait, vous savez que Steven avait deja fait un code semblable avec une petite fonction puis appel de la fonction ;-) ? et tres lisible. A tester avec les exclusions souhaitees et autres

 

je vous mets le bout de code que j'ai trouve, et si modif, ne pas oublier de demander l'autorisation ;-)

function turnIt(mode)
  -- On parcours les 350 premiers modules
  for i = 1, 1000 do
    -- Si un module est de type Eclairage
    local ret = fibaro:get(i, 'isLight')
    if (type(ret) == "string" and string.find(ret, "1" )) then
        -- On l'allume ou l'éteint
        fibaro:call(i, mode)
    end
  end
end
 
turnIt("turnOn")
--turnIt("turnOff")

Lien vers le commentaire
Partager sur d’autres sites

J'ai refait tout le code à  ma façon cet après-midi (après une interminable petite sieste), 100% fonctionnel, par contre je n'ai pas eu le temps de mettre les commentaires sur le code.

 

Ma façon de raisonner (suis gaucher donc un peu bizarre :P ) :

 

->Plutôt que d'essayer de lister l'éclairage avec islight, puis de supprimer ce qui ne doit pas l'être, autant mettre seulement les noms exactes des éclairages (j'ai énormément de FGS221 qui ne servent pas à  l'éclairage), c'est beaucoup plus simple (sauf pour ceux qui ont un château ;) ).

 

-> J'ai séparé le listage de mise à  jour des modules du reste. On ne change pas de modules d'éclairage tous les jours, donc inutiles de charger la mémoires pour rien. Il suffira de cliquer sur "mise à  jour" après actualisation du listage des modules par nom pour la V1 ou choix du mot clé pour la V2. De plus comme c'est nous qui complétons la liste, elle ne change pas entre-temps.

 

V1 du bouton "Mise à  jour": liste complétée manuellement.

ou

V2 :du bouton "Mise à  jour : recherche automatique par mot clé des modules.

 

 

 

IL faut créer un module virtuel nommé "Eclairage général" (c'est un exemple :) ) avec :

-> 1 bouton nommé "Arrêt" (ne pas oublié d'y mettre l'icône représentant l'éclairage éteint).

-> 1 bouton nommé "Mise à  jour" (également avec un joli icône pour éviter 10 secondes de carré bleu le temps de la mise à  jour de celui-ci).

 

Voici le code (je ne sais pas ajouter directement le module  -_- , si il y a un volontaire pour m'expliquer) :

 

"Arrêt"

--fonction arrêt éclairage
local verifeclairage = function(liste)
	for index,valeur in ipairs(liste) do
		if tonumber(fibaro:getValue(valeur, "value")) > 0 then fibaro:call(valeur, "turnOff") end
	end	
end
-----------------------------------------------------------------------------	
--récupération des IDS des modules à  éteindre		
local listeclairage = json.decode((fibaro:getGlobal("listeclairage")))
--éteint les modules
verifeclairage(listeclairage)

"Mise à  jour" V1 avec la liste des modules complétée manuellement :

local HC2 = Net.FHttp("127.0.0.1", 11111)
local reponse = HC2:GET("/api/devices")
local resultat = json.decode(reponse)
--fonction recherche modules
local recherche = function (correspondance)
local listeobtenue = {}
    for index, valeur in ipairs(resultat) do
        if correspondance[valeur.name] ~= nil then table.insert(listeobtenue, valeur.id) end
    end
    return listeobtenue
end
----------------------------------------------------------------------------
--liste des modules d'éclairage
local listemodules = {
["Eclairage Bureau"] = 1,
["Eclairage Chambre"] = 2,
["Eclairage Couloir"] = 3,
["Eclairage Cuisine"] = 4,
["Eclairage Hall"] = 5,
["Eclairage Salon"] = 6,
["Eclairage SdB"] = 7
}
--création de la liste
fibaro:setGlobal("testeclairage",json.encode(recherche(listemodules)))

ou

"Mise à  jour" V2 avec listage automatique par mot clé :

local HC2 = Net.FHttp("127.0.0.1", 11111)
local reponse = HC2:GET("/api/devices")
local resultat = json.decode(reponse)
--fonction recherche modules
local recherche = function (correspondance)
local listeobtenue = {}
    for index, valeur in ipairs(resultat) do
        if (valeur.name):find(correspondance) and valeur.type ~= "virtual_device" then table.insert(listeobtenue, valeur.id) end
    end
    return listeobtenue
end
----------------------------------------------------------------------------
--création de la liste
fibaro:setGlobal("testeclairage",json.encode(recherche("Eclairage")))

Main Loop :

-----------------------------------------------------------------------------
--Trainkill666
-----------------------------------------------------------------------------
-- Identiants des icônes
local iconearret, iconemarche = 1020, 1019
 -- Intervalle de mise à  jour automatique (en secondes)
local IntervalleMAJ = 10
-----------------------------------------------------------------------------
--création de la liste des éclairages
local listeclairage = json.decode((fibaro:getGlobal("listeclairage")))
--vérification des états
local listeactif = 1
for index,valeur in ipairs(listeclairage) do
    if tonumber(fibaro:getValue(valeur, "value")) > 0 then listeactif = 2 end
end    
-- Mise à  jour de l'icône
local choixicone = {iconearret, iconemarche }
fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", choixicone[listeactif])
-- Attente de la prochaine mise à  jour automatique
fibaro:sleep(IntervalleMAJ*1000)
Lien vers le commentaire
Partager sur d’autres sites

@megabubu :

 

Tu as essayé celui que je viens de poster ?

 

En modifiant le code de neliger précédemment je n'avais pas fait attention,

on a tous commis la même erreur (Gazous également).

J'y ai pensé en recommençant tout à  partir de zéro.

Il s'agit d'un Main Loop, il tourne déjà  en boucle, donc le

while true do

end

et totalement inutile.

Seul le

fibaro:sleep()

suffit.

Peut-être est-ce la cause du plantage de son programme.

Ou le chargement toutes les 10 secondes de la liste des modules par l'api.

J'avais un problème identique dans un module virtuel de vérification des noeuds mort toutes les 30 secondes.

 

 

PS : commentaire inutile donc barré sur le while true do, Gazous en a parlé quelques posts avant. Il faut que je pense à  lire les posts précedents ;)  .

Modifié par trainkill666
  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

Pas grave c'est pas toujours facile de relire tout les messages.

J'ai refais un test de mon côté et toujours un blocage au bout de 2h environ.

Je crois que c'est l'appel àl'API qui bloque, je ne vois que cela.

Je vais faire d'autres essais avec un code différent et reviens si j'ai un mieux.

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...