Aller au contenu

Probléme avec fonction sur HC3


mprinfo

Messages recommandés

C'est avec les vieux pot qu'on fait la meilleure soupe

Je viens d'éteindre l'ordinateur car autrement je vais y passer la nuit
En plus demain réveil 6h00

Je test ça demain en rentrant du travail

Merci de votre aide
@jjacques68 demain je te donnerai un exemple

Envoyé de mon BLA-L29 en utilisant Tapatalk

Lien vers le commentaire
Partager sur d’autres sites

il y a 16 minutes, jjacques68 a dit :

mais il est où le problème ?

un tostring dans le fibaro.setGlobalVariable(NomVG, tostring(Valeurs)) et un trigger= sourceTrigger non déclaré dans le code mais peut être un bout qui manquait.

output de la console :

[11.05.2020] [22:23:09] [DEBUG] [SCENE223]: lever : 06:17
[11.05.2020] [22:23:09] [DEBUG] [SCENE223]: Coucher : 21:24
[11.05.2020] [22:23:09] [DEBUG] [LA BOX A DÉMARRÉ LE 11/05/2020 A 22:23]
[11.05.2020] [22:23:09] [DEBUG] [SCENE13]: ok
[11.05.2020] [22:23:09] [DEBUG] [SCENE13]: ok
[11.05.2020] [22:23:09] [DEBUG] [SCENE13]: ok
[11.05.2020] [22:23:09] [DEBUG] [SCENE223]: Jour_Nuit 22:23
[11.05.2020] [22:23:09] [DEBUG] [FUNCTION UPDATEJOURNUIT]
[11.05.2020] [22:23:09] [DEBUG] [LEVER SOLEIL : 06:17 - COUCHER SOLEIL : 21:24]
[11.05.2020] [22:23:09] [DEBUG] [BOUCLE PRINCIPALE]
[11.05.2020] [22:23:09] [DEBUG] [BOUCLE PRINCIPALE 1]
[11.05.2020] [22:23:09] [DEBUG] [VALEUR DU SLEEP 1 MN]
[11.05.2020] [22:24:09] [DEBUG] [BOUCLE PRINCIPALE 1]
[11.05.2020] [22:24:09] [DEBUG] [VALEUR DU SLEEP 1 MN]
[11.05.2020] [22:25:09] [DEBUG] [BOUCLE PRINCIPALE 1]
[11.05.2020] [22:25:09] [DEBUG] [VALEUR DU SLEEP 1 MN]
[11.05.2020] [22:26:09] [DEBUG] [BOUCLE PRINCIPALE 1]
[11.05.2020] [22:26:09] [DEBUG] [VALEUR DU SLEEP 30 MN]

Mais impossible d'arrêter le code le while doit le faire partir en sucette ...

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

je viens de rallumer l'ordi

 

oui plus d'herreur

 

par contre je vois rien dans le debug

  fibaro.debug("boucle principale")
while true do
  fibaro.debug("boucle principale 1")
fibaro.debug(string.format("Valeur du Sleep %s mn",j))

c'est pas normal

Lien vers le commentaire
Partager sur d’autres sites

ça doit faire quoi ? Bon on verra la suite plus tard car l'heure du dodo sonne pour les vieux :)

EDIT:

Si tu as la HC2 tu pourrais faire un print de son debug? histoire de m'aider à comprendre ce que ce bout doit sortir?

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

idem vient de crasher la box :) mais je pige pas trop ce que ça doit faire au bout du bout, plus chercher l'erreur qu'a piger ce que doit faire ce code. Mais on ne baisse pas les bras ça progresse :)

EDIT:

Si on stop la scène la box finie par redonner la main.

Mais un print du debug de la hc2 aiderait vraiment si tu as ça en stock histoire de voire les valeurs que ça doit retourner.

dans les variables j'ai :

image.thumb.png.b41919a55994300a92548c066dfff0f2.png

et

image.thumb.png.165f3fb6821bad4defda5779980c5492.png

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

oui t’inquiéte je lâche pas comme cela

 

voici l'explication c'est vieux j'avais fais le code et @steven me corrigé

 

Attention c'est dangereux le do while true a utilisé que si on maitrise car c'est une boucle infini

 

 

Lien vers le commentaire
Partager sur d’autres sites

Lol Fibaro bloque des choses essentiels pour coder intelligemment alors qu’un while est le plus dévastateur pour le support

 

 

Envoyé de mon iPhone en utilisant Tapatalk

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

oui, j'ai eu de très mauvaises expérience avec les while true do...

vaut mieux utiliser les setTimeout...

 

et je veux pas être lourd... mais quand on utilise le commande fibaro.debug() dans une scène, il faut saisir 2 arguments minimum 

Le premier est le "tag" de la scène...

fibaro.debug("Le_nom_de_la_scène_ou_autre", blablabla)

 

Modifié par jjacques68
  • Like 1
Lien vers le commentaire
Partager sur d’autres sites

Lol Fibaro bloque des choses essentiels pour coder intelligemment alors qu’un while est le plus dévastateur pour le support

 

 

Envoyé de mon iPhone en utilisant Tapatalk

Punaise c'est nul cela

Ça fait des années qu'elle tourne sur hc2 sans soucis

Après comme déjà c'est dangereux cette boucle

Sur hc2 j'ai seulement 2 scènes comme cela

 

Après il y a plus simple fibaro à du piquer mon idée ça maintenant on peut faire cela avec les déclencheurs sunset est sunrise

 

 

 

Envoyé de mon BLA-L29 en utilisant Tapatalk

 

 

 

Lien vers le commentaire
Partager sur d’autres sites

C'est bon elle tourne impeccable

 

@krikroff toi tu te rappelles de la bonne époque ou il n'y avait de de setTimeout() ou un gros slips de plus de 30mn avait de forte chance de faire planter la box ben cette scène elle date de cette époque :D

 

voici le code a priori fonctionnel après avec la HC3 on peut dire que c'est plutôt obsolète comme scène

 

-- Nom des Variables Globales
local VGJourNuit = "Jour_Nuit"
local VGLeverSoleil = "SoleilLever"
local VGCoucherSoleil = "SoleilCoucher"
-- Minutes de décalages par rapport au lever du soleil
local TLever = {-60, -45, -30, -20, -10, 10, 20, 30}
-- Minutes de décalages par rapport au Coucher du soleil
local TCoucher = {-109, -30, -20, -10, 10, 20, 30, 45, 60}

local tag ="Scene21"

-- Id du téléphone
--local IdTel = fibaro:getGlobal("TelPascal")

--************ Ne rien modifier en dessous de cette ligne ************
----------------------------------------------------------------------
-- Envoi d'un Push pour avertir que le box à démarrer ou redémarrer --
----------------------------------------------------------------------
function EnvoiPush(Message)
         fibaro.trace(tag, Message)
         --fibaro:call(IdTel, "sendPush", Message)
end
-- -----------------------------------------------------------------
--       Vérification Variable Globale et création si besoin      --  
-- -----------------------------------------------------------------
function VerifVG(nom, valeur, enumValeur, lecture)
    if (fibaro.getGlobalVariable(nom) == "") then -- Test si la variable existe
       local data = {
                name = nom,
                value = valeur,
                readOnly = false,
                isEnum = false
             }
       --------------------------------------------------------------
       -- si lecture = oui alors la variable sera en lecture seule
       --------------------------------------------------------------
       if lecture == "read" then
          data.readOnly = true
       end
       --------------------------------------------------------------
       -- si la variable est une variable enumeree
       --------------------------------------------------------------
	   if (type(enumValeur) ~= "nil") then
           data.value = enumValeur[1]
		   data.isEnum = true
           data.enumValues = enumValeur
	   end    
       --------------------------------------------------------------
       -- creation de la variable a partir de la table "data"
       -------------------------------------------------------------
       --fibaro.debug(tag, (json.encode(data)))
       api.post("/globalVariables/", data)
       fibaro.debug(tag, "la variable : ", nom, "a ete cree")
    end
end
----------------------------------------------------------------------
--                   Mise a jour d une variable global              --
----------------------------------------------------------------------
function UpdateVG(NomVG, Valeurs)
        if (fibaro.getGlobalVariable(NomVG) == nil) then
            UpdateVG(NomVG, Valeurs)
        end
           fibaro.trace(tag, "Mise a jour de la Variable Globale : "..NomVG.." = "..Valeurs)
           fibaro.setGlobalVariable(NomVG, tostring(Valeurs))
end
----------------------------------------------------------------------
--           Vérification de l heure et mise à jour                 --
--                de la variable si nécessaire                      --
----------------------------------------------------------------------
function UpdateJourNuit(NomVG, heure)
        local valeurs = "Nuit"
        -- test si on est le jour ou la nuit
        if (heure >= leverSoleil) and (heure < coucherSoleil) then
           valeurs = "Jour"
	    end
        fibaro.trace(tag, string.format("Lever Soleil : %s - Coucher Soleil : %s", leverSoleil, coucherSoleil))
        UpdateVG(NomVG, valeurs) -- mise a jour de la VG Jour_Nuit
end
----------------------------------------------------------------------
--          Compare les tables Lever et coucher du soleil           --
--                   avec sunrisehour et sunsethour                 --
----------------------------------------------------------------------
function LeverCoucher(NomVG, TableNom, SunRiseSet, JourNuit)
        for index, v in ipairs(TableNom) do
           if (os.date("%H:%M", os.time()+v*-60)) == SunRiseSet then
              UpdateVG(NomVG, v)
              if v == 0 then
                 --fibaro.debug(tag, "il fait : "..JourNuit)
                 UpdateVG(VGJourNuit, JourNuit)
              end
           end
        end
end
----------------------------------------------------------------------
--           Conversion Date format texte en format Date            --
----------------------------------------------------------------------
function ConvertionDate(NomDate)
         
          -- on extrait l'heure et minute (%d+) est un digit
         local heure, minute = string.match(NomDate, "(%d+):(%d+)") 
         -- On récupère l'heure et date actuelle sous forme de tableau
         local TableDate = os.date("*t")
         -- On modifie l'heure et les minutes
         TableDate.hour = heure
         TableDate.min = minute
         -- Nous pouvons maintenant exploiter "MonHeure" comme une vrai date
         local MonHeure = os.time(TableDate)
         return (MonHeure)
end

---------------------------------------------------------------------------- 
--           Calcul la valeur du Sleep en fonction des Max et Mini        --
--                       des Tables Lever et Coucher                      --
----------------------------------------------------------------------------
function calculPause(j, heure, minilever, maxilever, minicoucher, maxicoucher)
         --fibaro.debug(tag, "Heure Actuelle : "..heure)
         -- mini et max lever
         local heurelever = ConvertionDate(leverSoleil)
         local heureleverMini = (os.date("%X", heurelever+(minilever*60)))
         local heureleverMaxi = (os.date("%X", heurelever+(maxilever*60)))
         --fibaro.debug(tag, "heure Lever Soleil Mini : "..heureleverMini.." - Maxi : "..heureleverMaxi)
         -- mini et max coucher
         local heurecoucher = ConvertionDate(coucherSoleil)
         local heurecoucherMini = (os.date("%X", heurecoucher+(minicoucher*60)))
         local heurecoucherMaxi = (os.date("%X", heurecoucher+(maxicoucher*60)))
         --fibaro.debug(tag, "heure Coucher Soleil Mini : "..heurecoucherMini.." - Maxi : "..heurecoucherMaxi)
         if heure >= heureleverMini and heure < heureleverMaxi 
            or heure >= heurecoucherMini and heure < heurecoucherMaxi then
            j=1
         end
         return (j)
end
-- ===================================================================
-- ==        Nous avons fini la préparation de notre code           ==
-- ==            Nous pouvont  Exécuter le programme                ==
-- ==         Script réaliser par MPRINFO  Version 5.00B            ==
-- ==             Grand Merci à STEVEN pour son aide                ==
-- ===================================================================

----------------------------------------------------------------------
--   Envoi d'un Push pour donner la date et l'heure de démarrage    --
----------------------------------------------------------------------
EnvoiPush(string.format("La box a démarré le %s a %s", os.date("%d/%m/%Y"), os.date("%R")))

----------------------------------------------------------------------
--          Versification si les variables globales existe           --
--              et Création ou Modification si Besoin               --
----------------------------------------------------------------------
VerifVG(VGJourNuit, "Jour", {"Jour", "Nuit"})
VerifVG(VGLeverSoleil, "0")
VerifVG(VGCoucherSoleil, "0")

----------------------------------------------------------------------
-- Mise a jour de la variable VG Jour_Nuit au Démarrage de la Box   --
--        Ou lors de la sauvegarde de la scène                      --
----------------------------------------------------------------------
leverSoleil = fibaro.getValue(1, "sunriseHour")
coucherSoleil = fibaro.getValue(1, "sunsetHour")
UpdateJourNuit (VGJourNuit, os.date("%H:%M", os.time()))

---------------------------------------------------------------------
--    Trie des Tables et récupération des valeurs min et maximum   --
---------------------------------------------------------------------
-- Traitement de la Table TLever
table.insert(TLever, 1, 0) -- ajout de 0 mn dans la table
table.sort(TLever)
local MiniLever = ((TLever[1]-30))
local MaxiLever = ((TLever[#TLever]+1))
-- Traitement de la Table TChoucher
table.insert(TCoucher, 1, 0) -- ajout de 0 mn dans la table
table.sort(TCoucher)
local MiniCoucher = ((TCoucher[1]-30))
local MaxiCoucher = ((TCoucher[#TCoucher]+1))

----------------------------------------------------------
--- Boucle loop
----------------------------------------------------------
function loop(refresh)
    local j = 30
    local osHeure = os.date("%H:%M", os.time())
    leverSoleil = fibaro.getValue(1, "sunriseHour")
    coucherSoleil = fibaro.getValue(1, "sunsetHour")
    LeverCoucher(VGLeverSoleil, TLever, leverSoleil, "Jour")
    LeverCoucher(VGCoucherSoleil, TCoucher, coucherSoleil, "Nuit")
    j = calculPause(j, osHeure, MiniLever, MaxiLever, MiniCoucher, MaxiCoucher)
    --fibaro.debug(tag, string.format("Valeur du Sleep %s mn",j))
    -- Pause en fonction de la valeur de j
    -- fibaro.debug(tag, "Valeur de la pause : "..j)
    fibaro.setTimeout(j*60*1000, function() 
        loop(j)
    end)
end
    -- Boucle principale
    local j = 0
    loop(j)

 

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

j'ai plusieurs petite question

 

dans un QA

 

c'est quoi la différence entre

 

self.variable

et

variable

 

c'est un méthode pour déclarer la variable en globale ?

 

Si je créé un QA en Generic device on change l'icone comment ?

1.jpg.6d3c548d44699bf8ef1239bd891b1bb5.jpg

 

car le je vois pas comment faire

 

@krikroff

 

j'ai une question sur les function peut on les mètrent dans scème est les appelés avec un QA ou une scène est récupérer la ou les valeurs ensuite je faisais comme cela sous dbases4 cela évite de répéter les fonctions

 

merci pour vos réponse

Lien vers le commentaire
Partager sur d’autres sites

pour l'icône pas encore.

 

pour l'appel de fonction dans les scènes

fibaro.call(ID_QA,"Ma_Fonction")

pour la récupération de valeur de retour, on en a déjà discuté, pas encore... du moins pas sans usine à gaz...

en attendant passer par une VG de retour, peut aider

pour l'usine à gaz : (suis pas fan, jamais essayé)

https://forum.fibaro.com/topic/49113-hc3-quickapps-coding-tips-and-tricks/?tab=comments#comment-201165

 

 

pour la variable, j'ai aussi remarqué que ça pouvait marché sans le "self."

Après comme le QA est une "mini" classe, c'est presque de la POO... si j'ose dire...

donc c'est plus "propre"...

n'hésitez pas à me corriger !! :) 

Modifié par jjacques68
  • Like 1
Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...