Aller au contenu

[Topic de travail] Modules Virtuels et Scènes à migrer en QuickApps


Messages recommandés

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

et surtout le statut des batteries des modules

tu as utilisé un truc du genre :

self:addInterfaces({"battery"})

 

Posté(e)

oui tout à fait.

Enfin pas avec "self" parce que c'est ce que j'ai fait au début comme un c.. et ça a immédiatement ajouté une batterie sur le module parent ! Pas bon (puisqu'il est alimenté sur secteur USB)

Donc il faut le faire sur child: juste après sa création. En même temps qu'on lui ajoute des setVariable, qu'on lui définie son unité, etc etc.

 

Bon bah voilà, les noeud morts ça fonctionne, c'est juste génial :D

 

Simulation de panne de l'anémomètre :

 

image.thumb.png.1ed3dd017e476bc1f7a273e79e537b7c.png

 

Et vue sur la page principale :

 

image.thumb.png.be59a150db4dfcddc62f87833fae1254.png

PS : les 0.1mm de pluie c'est quand je suis allé bouger le pluviomètre pour faire remonter au moins une valeur, car sinon c'est un peu la sècheresse en ce moment.

Et le vent n'est produit que par ma bouche sur l'anémomètre, car il est sur mon bureau.

On fait ce qu'on peut pour tester....

 

 

Évidemment le retour à la vie du module est tout aussi instantané avec l'opération inverse :

child:updateProperty("dead", false)

 

J'arrête là pour ce soir :)

 

  • Like 2
Posté(e)

donc en résumé seilf.variable est visible dans le QA parents et si enfants ils y ont accès

 

par contre : variable = "toto" c'est vu par tout le monde parent et enfants ?

 

@lazer cela te convient il ?

-- Generic device type have no default actions to handle
-- double click par MPRINFO
-- https://www.domotique-fibaro.fr

function QuickApp:onInit()
    self:debug("onInit")
    self.DoubleClic = os.time()
end
function QuickApp:Reboot()
      self:DoubleClick()
          local http = net.HTTPClient({ timeout = 2000 })
    local payload = {recovery=false}
    return http:request("http://localhost/api/service/reboot",{
    options={ 
        headers = {
            ["content-type"] = "application/json;charset=UTF-8",
            ["Authorization"] = "Basic YWRtaW46YWRtaW4=",              
            ["X-Fibaro-Version"] = "2"
        }, 
        method = "POST",
        data =  json.encode(payload)
        }
    })
end

function QuickApp:buttonclick()
      self:DoubleClick()
 end


function QuickApp:confirmDoubleClick(msg, duree, time, NomBouton)
    if time < self.DoubleClic + duree then
       self:updateView(NomBouton, "text", " ")
       self.DoubleClic = self.DoubleClic - duree*60*1000
       return true 
    else
       self.DoubleClic = os.time()
       self:updateView(NomBouton, "text", msg)
       fibaro.setTimeout(duree*1000, function() 
          self:updateView(NomBouton, "text", " ")
       end)
       return false
    end
end

function QuickApp:DoubleClick()
     local message = "Ré-appuyer pour confirmer"  -- le message de confirmation
     local duree = 5                             -- la durée max entre 2 clique (en seconde)
     local NomBouton = "button"                   -- ID du bouton qui doit avoir un double clic
     local time = os.time()
     if ( self:confirmDoubleClick(message, duree, time, NomBouton) ) == true then
        self:updateView("label1", "text", "Double clic")
        self:start()
     end
end

 

Posté(e)

Les variables globales, c'est le mal, il n'y a quasiment jamais besoin de les utiliser.

Un programmeur doit normalement restreindre le plus possible la portée de ses variables, à son strict nécessaire : bloc, fonction, classe.

 

@mprinfo désolé pas le courage de relire ton code maintenant.... et ni même demain car je n'ai jamais su lire de code sans couleur, tu pourrais au moins mettre le champ LUA quand tu codes le code sur le forum, ça aide ;)

 

Posté(e)
il y a 1 minute, Lazer a dit :

Les variables globales, c'est le mal, il n'y a quasiment jamais besoin de les utiliser.

marrant ce que tu dis, sur le HC2 j'avais plusieurs dizaines de VG.

Là sur le HC3, j'en ai 4.

Vive les QA...

Posté(e)

Attention à ne pas confondre les variables globales au sens de la HC2 et de la HC3.

 

Et les variables globales au sein d'un script/programme (donc une scène, un VD, un QA)

 

La confusion est facile.

 

Mais ma remarque reste valable dans tous les cas : Un programmeur doit normalement restreindre le plus possible la portée de ses variables, à son strict nécessaire : bloc, fonction, classe.

 

Posté(e)

avant la couleur etait automatique pour le code lua en plus ce que je colle est en couleur

-- Generic device type have no default actions to handle
-- double click par MPRINFO
-- https://www.domotique-fibaro.fr

function QuickApp:onInit()
    self:debug("onInit")
    self.DoubleClic = os.time()
end
function QuickApp:Reboot()
      self:DoubleClick()
          local http = net.HTTPClient({ timeout = 2000 })
    local payload = {recovery=false}
    return http:request("http://localhost/api/service/reboot",{
    options={ 
        headers = {
            ["content-type"] = "application/json;charset=UTF-8",
            ["Authorization"] = "Basic YWRtaW46YWRtaW4=",              
            ["X-Fibaro-Version"] = "2"
        }, 
        method = "POST",
        data =  json.encode(payload)
        }
    })
end

function QuickApp:buttonclick()
      self:DoubleClick()
 end


function QuickApp:confirmDoubleClick(msg, duree, time, NomBouton)
    if time < self.DoubleClic + duree then
       self:updateView(NomBouton, "text", " ")
       self.DoubleClic = self.DoubleClic - duree*60*1000
       return true 
    else
       self.DoubleClic = os.time()
       self:updateView(NomBouton, "text", msg)
       fibaro.setTimeout(duree*1000, function() 
          self:updateView(NomBouton, "text", " ")
       end)
       return false
    end
end

function QuickApp:DoubleClick()
     local message = "Ré-appuyer pour confirmer"  -- le message de confirmation
     local duree = 5                             -- la durée max entre 2 clique (en seconde)
     local NomBouton = "button"                   -- ID du bouton qui doit avoir un double clic
     local time = os.time()
     if ( self:confirmDoubleClick(message, duree, time, NomBouton) ) == true then
        self:updateView("label1", "text", "Double clic")
        self:start()
     end
end

punaise j avais jamais vu on peut choisir le type de code

 

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

Attention à ne pas confondre les variables globales au sens de la HC2 et de la HC3.

 

Et les variables globales au sein d'un script/programme (donc une scène, un VD, un QA)

c'est bien clair... :) 

Modifié par jjacques68
Posté(e)
Il y a 2 heures, Lazer a dit :

Évidemment le retour à la vie du module est tout aussi instantané avec l'opération inverse :


child:updateProperty("dead", false)

 

J'arrête là pour ce soir :)

J'adore c'est cool tu t’éclates :60:

 

Tu devrais aimer ceci alors:

 

image.png.100beb8164763bb3823ec9e74cf3047c.png

 

Message personnalisé

QA:log("Waiting...")

Effacement du message personnalisé

QA:log("")

 

image.png.420504d17292a4a9aef22be8c86c7fb9.png

 

Message personnalisé affiché 2 secondes puis raz

QA:log("Please wait...", 2000)

 

image.png.e5ce3476ec034f7760d6596ff9e5ce5d.png

 

Message "transfer OK" affiché 2 secondes puis raz.

QA:log("Transfer_was_OK", 2000)

 

image.png.428fbd3476f0d37a26f97894aa4eea54.png

 

Message "failed" affiché 5 secondes puis raz

QA:log("ZWave_Send_Failed", 5000)

 

Voici comment j'ai intégré cela dans ma librairie perso:

-- Name: log
-- Arg1: message [string] The message to display
-- Arg2: time [number] (option) The time in ms after reset log
_ENV._logTimeoutID = 0
function QuickAppSdk:log(message, ms)
    local status, err = pcall(function()
        clearTimeout(_ENV._logTimeoutID)
        self.baseRef:updateProperty("log", tostring(message or ""))
        if (ms ~= nil) then
            assert(tonumber(ms), "log(arg1, arg2, arg3), invalid 'ms' argument, " .. ms .. " is not a number")
            _ENV._logTimeoutID = setTimeout(function()  
                self.baseRef:updateProperty("log", "")
                end, ms)
        end
    end)
    -- error
    if not status then
        self:logger("error", "log: ", err)
    end
end

Enfin bref tu comprends l'idée ;)

 

  • Like 4
Posté(e)

@BenjyNet

Finalement j'ai trouvé un moyen super simple (mais basique) de faire remonter la Teleinfo (depuis l'Eco-Devices) dans DomoCharts. Il suffit pour cela d'utiliser un QA de type Power Sensor :

 

image.png.deab07ffbb4eac011e7c5005d2518a5e.png

 

J'ai mis l'unité en VA car c'est l'information que remonte le compteur.
 

A partir de là c'est un Device standard, donc la valeur est récupérée par DomoCharts et envoyée dans la base de données.

 

Par contre, c'est basique parce que ça ne prend pas en compte les tranches horaires (HC/HP, EJP, Tempo)

 

Posté(e)

Moi j'ai un QA unfi à te faire tester pour avoir ton retour. C'est un QA fait à partir du code du forum officiel

Envoyé de mon BLA-L29 en utilisant Tapatalk

Posté(e)

1.jpg.f8826fe95d6c0725c0d1cd95c5d4bcaa.jpg

Liste les devices au démarrage

2.jpg.24bc6dff240e536c3df37376ac08ff26.jpg

Ajoute la dernière adresse IP connu (Le setvariable ne ce fait que si l'adresse IP est différente)

4.jpg.d9884907367c7dbccf110e3be3539a43.jpg

 

Affiche la version du contrôleur est si connecté

si la mac est affichée le device n'est pas présent

si l'ip est afficher le device est présent

5.jpg.5f82ecf6eea5639093af456ae572859e.jpg

 

il me reste améliorer le contrôle de l'adresse mac

Pour le moment je fais une concaténation afin d'avoir la même chaine que le QA original

 

Posté(e)

@lazer

dernier version

vérification MAC : Ok

mise a jour de la valeur OK

 

Amélioration du traçage 

 

Affichage des erreurs dans les étiquettes

  • connections
  • Mac adresse
1.jpg.1ce93e8d56b2c816b0fb2670ee9fbd12.jpg

 

 

Posté(e) (modifié)
Le 24/05/2020 à 23:07, Lazer a dit :

J'avoue ça fait peur, je ne me suis pas encore lancé non plus.

Je sors de nul part pour dire que j'ai abandonné.

Je n'ai rien réussi à faire... Ça m'a tellement saoulé que j'ai failli commander une HC3 juste pour avoir l'impression de perdre moins de temps.

J'ai ensuite eu la présence d'esprit de me dire que 500-600€ pour quelque chose que je n'utiliserai pas, c'était pas top. Le jour où il y en aura à 200€, prévenez-moi :60:

Débuguez bien ça s'il-vous-plaît, que je ne sois pas trop emm**** quand je débarquerai... En attendant, je reste avec une HC2 totalement fonctionnelle :P

 

NB: Si vous avez un tuyau sans trop de prise de tête pour la simulation, promis, je m'y mettrai :D

Modifié par J3R3M
  • Like 1
Posté(e)

Je continue à mettre à jour la première page.

 

Prochains partages (QuickApp terminés... le temps de faire les tutos) :

- QuickApp pour JPI (passerelle d'envoi de SMS/MMS sur smartphone Android)

- QuickApp Netatmo Weather Station (version améliorée de celui qui est sur le market et auquel j'ai contribué)

 

J'ai commencé le QuickApp Synology Surveillance Station...

 

Posté(e)

Pour le netatmo ce que je reproche à celui du market c'est qui crée des childs alors que l'on a pas le périphérique
Exemple le module extérieur que je n'ai plus suite à une chute de 3m je suis obligé de supprimer des lignes pour que cela fonctionne

Envoyé de mon BLA-L29 en utilisant Tapatalk

Posté(e)

Bizarre ton truc

tu testeras la nouvelle version, normalement il ne crée par les childs pour un module qui n'est pas connecté. J'ai testé avec le pluviomètre et l'anémomètre, mais pas avec la sonde température extérieure (car elle fonctionne toujours chez moi)

 

Bon au pire tu cliques sur la poubelle pour supprimer les childs en trop, c'est pas la mort, c'est plus simple que de modifier des lignes de code LUA ou importe N fois le même module virtuel comme on faisait sur la HC2.

×
×
  • Créer...