Aller au contenu

Messages recommandés

Posté(e) (modifié)

Network Monitor

Version 2.12

 

 

Ce Quick App pour HC3 permet de surveiller des équipements sur le réseau (local et Internet), et d'envoyer des notifications en cas de problème détecté.

Cela va bien au-delà du simple ping réseau, car ce QuickApp permet de vérifier le bon fonctionnement des services (envoi d'une requête, et vérification de la réponse)

 

Il s'agit de la v2, car il fait suite au Module Virtuel Network Monitor v1.x initialement développé pour HC2.

 

Screenshot peu esthétique, en espérant que Fibaro propose rapidement de personnaliser l'apparence visuelle des QA. Cependant, ce n'est pas son rôle premier, l'objectif est bien de recevoir des notifications instantanées en cas de souci détecté :

 

Screenshot-QA-Network-Monitor.png.0b992da220dab872c83ac2ad21e4e652.png

 

 

Configuration :

 

Importer le QuickApp (fichier fqa) de façon habituelle sur la box HC3, puis changer les paramètres suivants dans l'onglet Variables :



Screenshot-QA-Network-Monitor-Variables.png.be53f9d352f808f32c4711a6ff6d6cf0.png

  • Notif_Users : ID ou Nom des utilisateurs à qui envoyer un email en cas d'échec d'envoi du SMS, séparés par des virgules. La liste des utilisateurs peut être récupérée dans le panneau Accès de la HC3, ou directement via l'API /api/users. Par exemple : Asterix, Obelix
  • Notif_Mobiles : ID ou Nom des smartphones à qui envoyer une notification Push en cas d'échec d'envoi du SMS, séparés par des virgules. La liste des mobiles peut être récupérée via l'API /api/iosDevices. Par exemple : Nokia 3310, iPhone 42
  • Notif_SMS : Nom du QuickApp et nom de sa fonction qui sera appelée pour exécuter un code LUA externe, par exemple envoyer un SMS, ou un mesage via Telegram, ou autre service de notification.

 

Ensuite, aller dans l'onglet "Modifier et prévisualiser", puis cliquer sur le bouton "Modifier" afin d'entrer dans l'éditeur LUA.

Il faut éditer le tableau DEVICES dans le fichier CONFIG.

 

Screenshot-QA-Network-Monitor-Config.thumb.png.2a1984430b5d834ffc39e78b9c183d1c.png

 

Exemple :

DEVICES = {
  {name = "Serveur SSH"                   , address = "192.168.1.1"  , port =   22, protocol = "tcp"  , timeout =  1, senddata = nil , retdata = "OpenSSH", retry = 1, interval =   30, notification = {"push", "email"       }, vg = nil, conditions = nil},
  {name = "Ubiquiti Unifi AP-AC-Pro"      , address = "192.168.1.2"  , port =   22, protocol = "tcp"  , timeout =  1, senddata = nil , retdata = "SSH"    , retry = 1, interval =   60, notification = {"push", "email", "sms"}, vg = nil, conditions = nil},
  {name = "Ubiquiti Unifi Switch"         , address = "192.168.1.3"  , port =   22, protocol = "tcp"  , timeout =  1, senddata = nil , retdata = "SSH"    , retry = 1, interval =   60, notification = {"push", "email"       }, vg = nil, conditions = nil},

  {name = "Ubiquiti Unifi Controller"     , address = "192.168.1.4"  , port = 8443, protocol = "https", timeout =  2, url = "/manage/account/login" , retcode = 200, retdata = "UniFi Network"          , retry = 1, interval = 60, notification = {"push", "email",      }, vg = nil, conditions = nil},
  {name = "Ubiquiti EdgeRouter"           , address = "192.168.1.5"  , port =  443, protocol = "https", timeout =  1, url = "/"                     , retcode = 200, retdata = "EdgeRouter"             , retry = 1, interval = 30, notification = {                 "sms"}, vg = nil, conditions = nil},
  {name = "Switch Cisco"                  , address = "192.168.1.6"  , port =   80, protocol = "http" , timeout =  1, url = "/"                     , retcode = 200, retdata = "cisco"                  , retry = 1, interval = 30, notification = {"push", "email", "sms"}, vg = nil, conditions = nil},
  {name = "Switch Netgear GS105Ev2"       , address = "192.168.1.7"  , port =   80, protocol = "http" , timeout =  1, url = "/login.cgi"            , retcode = 200, retdata = "NETGEAR"                , retry = 1, interval = 60, notification = {"push", "email"       }, vg = nil, conditions = nil},
  {name = "Switch Netgear GS108Tv2"       , address = "192.168.1.8"  , port =   80, protocol = "http" , timeout =  1, url = "/"                     , retcode = 200, retdata = "NETGEAR"                , retry = 1, interval = 60, notification = {"push", "email"       }, vg = nil, conditions = nil},
  {name = "HP ProLiant Remote Access Card", address = "192.168.1.9"  , port =   80, protocol = "http" , timeout =  1, url = "/login.html"           , retcode = 200, retdata = "Remote Access Card"     , retry = 1, interval = 60, notification = {        "email"       }, vg = nil, conditions = nil},
  {name = "HP ProLiant Gen8 ILO"          , address = "192.168.1.10" , port =  443, protocol = "https", timeout =  1, url = "/"                     , retcode = 200, retdata = "iLO"                    , retry = 1, interval = 60, notification = {        "email"       }, vg = nil, conditions = nil},
  {name = "VMware ESXi"                   , address = "192.168.1.11" , port =  443, protocol = "https", timeout =  1, url = "/"                     , retcode = 200, retdata = "VMware ESXi"            , retry = 1, interval = 60, notification = {"push", "email", "sms"}, vg = nil, conditions = nil},
  {name = "Onduleur Eaton 5P"             , address = "192.168.1.12" , port =   80, protocol = "http" , timeout =  1, url = "/"                     , retcode = 200, retdata = "Network Management Card", retry = 1, interval = 60, notification = {"push", "email"       }, vg = nil, conditions = nil},
  {name = "Synology DiskStation"          , address = "192.168.1.13" , port = 5000, protocol = "http" , timeout =  5, url = "/"                     , retcode = 200, retdata = "DiskStation"            , retry = 1, interval = 30, notification = {"push", "email", "sms"}, vg = nil, conditions = nil},
  {name = "Serveur Web Apache"            , address = "192.168.1.14" , port =   80, protocol = "http" , timeout =  1, url = "/"                     , retcode = 200, retdata = "Apache"                 , retry = 1, interval = 60, notification = {        "email"       }, vg = nil, conditions = nil},
  {name = "GCE Eco-Devices"               , address = "192.168.1.15" , port =   80, protocol = "http" , timeout =  1, url = "/index1.htm"           , retcode = 200, retdata = "Eco Devices"            , retry = 1, interval = 30, notification = {"push", "email", "sms"}, vg = nil, conditions = nil},
  {name = "GCE IPX800 v4"                 , address = "192.168.1.16" , port =   80, protocol = "http" , timeout =  1, url = "/user/index2.htm"      , retcode = 200, retdata = "IPX800"                 , retry = 1, interval = 30, notification = {"push", "email", "sms"}, vg = nil, conditions = nil},
  {name = "Caméra Hikvision"              , address = "192.168.1.17" , port =   80, protocol = "http" , timeout =  1, url = "/doc/page/login.asp"   , retcode = 200, retdata = "login"                  , retry = 1, interval = 30, notification = {"push", "email", "sms"}, vg = nil, conditions = nil},
  {name = "Caméra Foscam"                 , address = "192.168.1.18" , port =   88, protocol = "http" , timeout =  1, url = "/"                     , retcode = 200, retdata = "IPCam Client"           , retry = 1, interval = 60, notification = {"push", "email", "sms"}, vg = nil,
                                            conditions = {  vg = "Vacances" , operator = "==", value = "0"},
                                          },
  {name = "JPI SMS Gateway"               , address = "192.168.1.19" , port = 8080, protocol = "http" , timeout = 10, url = "/JPI/"                 , retcode = 200, retdata = "JPI"                    , retry = 6, interval = 30, notification = {"push", "email"       }, vg = nil,
                                            conditions = {  vg = "Monitor_JPI" , operator = "==", value = "0"},
                                          },
  {name = "FHEM"                          , address = "192.168.1.20" , port = 8083, protocol = "http" , timeout =  1, url = "/fhem"                 , retcode = 401, retdata = ""                       , retry = 1, interval = 30, notification = {"push", "email", "sms"}, vg = nil, conditions = nil},
  {name = "HA Bridge"                     , address = "192.168.1.21" , port =   80, protocol = "http" , timeout =  1, url = "/#!/"                  , retcode = 200, retdata = "HA Bridge"              , retry = 1, interval = 60, notification = {"push", "email"       }, vg = nil, conditions = nil},
  {name = "Google"                        , address = "www.google.fr", port =   80, protocol = "http" , timeout =  1, url = "/"                     , retcode = 200, retdata = "Recherche Google"       , retry = 1, interval =  1, notification = {                 "sms"}, vg = nil, conditions = nil},
  {name = "Yamaha MusicCast"              , address = "192.168.1.22" , port =   80, protocol = "http" , timeout =  1, url = "/YamahaExtendedControl", retcode = 200, retdata = "response_code"          , retry = 1, interval = 60, notification = {        "email"       }, vg = nil, conditions = nil},
  {name = "Projecteur Epson EH-TW9300"    , address = "192.168.1.23" , port =   80, protocol = "http" , timeout =  1, url = "/"                     , retcode = 404, retdata = "Not Found"              , retry = 1, interval = 60, notification = {        "email"       }, vg = nil,
                                            conditions = {  vg = "Vacances" , operator = "==", value = "1"},
                                          },
  {name = "Nvidia Shield TV"              , address = "192.168.1.24" , port = 8008, protocol = "http" , timeout =  1, url = "/"                     , retcode = 404, retdata = ""                       , retry = 1, interval = 60, notification = {        "email"       }, vg = nil,
                                            conditions = {  operator = "any", conditions = {
                                                { profil = "" , operator = "==", value = "Vacances"},
                                                { operator = "all", conditions = {
                                                    { vg = "Chauffage", operator = "==", value = "Été"},
                                                    { operator = "any", conditions = {
                                                        { profil = "", operator = "==", value = "Nuit"},
                                                        { profil = "", operator = "==", value = "Absent"}
                                                      }
                                                    }
                                                  }
                                                }
                                              }
                                            }
                                          },
}

Cela risque d'être peu lisible sur votre écran, dans ce cas il faut utiliser l'ascenseur horizontal pour faire défiler, ou alors insérer des sauts de lignes)

Cependant j'aime bien cette présentation qui se rapproche d'un tableau et est parfaitement lisible sur un grand écran.

 

Ce QuickApp est relativement complexe à paramétrer, car les options pour DEVICES sont nombreuses :

  • name : obligatoire : string : Nom de l'équipement qui apparaitra dans la notification
  • address : obligatoire : string : Adresse IP ou nom DNS de l'équipement à monitorer
  • port : facultatif si protocole http/https | obligatoire si protocole tcp : Port TCP. Dans le cas des connexions HTTP et HTTPS, si ce n'est pas spécifié, le port par défaut sera utilisé (80 pour HTTP, et 443 pour HTTPS)
  • protocol : obligatoire : string : "http" | "https" | "tcp" : ces 3 protocoles sont supportés. Le mode tcp est un mode raw, c'est à dire que les données sont lues/écrites telles quelles sur la socket.
  • login : facultatif si protocole http/https | inutile si protocole tcp : string : Nom d'utilisateur à utiliser dans l'en-tête de la connexion HTTP/HTTPS.
  • password : facultatif si protocole http/https | inutile si protocole tcp : string : Mot de passe à utiliser dans l'en-tête de la connexion HTTP/HTTPS.
  • timeout : facultatif : integer : Valeur par défaut = 1 seconde : Durée autorisée de la connexion en secondes avant réponse du client. Doit être augmenté si le client met trop de temps à répondre.
  • url : obligatoire si protocole http/https | inutile si protocole tcp : string : URL de la page Web à charger
  • retcode : obligatoire si protocole http/https | inutile si protocole tcp : integer : code de retour HTTP attendu (200 la plupart du temps)
  • senddata : inutile si protocole http/https | facultatif si protocole tcp : string : chaine de caractère à envoyer lors de l'établissement de la connexion TCP. Cela peut être nécessaire pour certains équipements qui n'envoient pas de réponse avant d'avoir reçu une instruction.
  • retdata : facultatif : string : chaine de caractère recherchée dans la réponse
  • retry : facultatif : integer : valeur par défaut = 1 : nombre de tentatives de connexion à effectuer. Augmenter cette valeur peut être utile pour certains équipements dont la connexion est instable, notamment via Wi-Fi.
  • delay : facultatif : integer : valeur par défaut = 0 : délay en seconde avant d'effectuer une nouvelle tentative de connexion. Augmenter cette valeur peut être utile si l'équipement met un certain temps avant d'être de nouveau joignable après une déconnexion.
  • interval : facultatif : integer : valeur par défaut = 1 minute : intervalle en minutes entre 2 vérifications. J'ai testé jusqu'à 1440 minutes, soit 24 heures.
  • notification : obligatoire : table : "push" | "email" | "sms" | "vg" | "service" : type de notification à envoyer, configurée préalablement.
  • vg : facultatif : string : nom facultatif d'une variable globale à incrémenter, celle-ci sera automatiquement créée si nécessaire. Elle est remise à 0 dès que l'appareil surveillé est de nouveau disponible.
  • conditions : facultatif : table : permet d'annuler le monitoring d'un équipement particulier en fonction de conditions sur des variables globales. Les conditions sont combinables avec des instructions booléennes "any" (= or) et "all" (= and). La syntaxe est inspirée du moteur de triggers des scènes sur HC3. On peut utiliser des conditions de vg ou de profil.

 

Téléchargement :

 

Modifié par Lazer
  • Like 5
  • Thanks 1
Posté(e)

Et un QA de moins à faire la liste diminue doucement
Comme le passage sur hc3 n'est pas pour demain je pense que l'on aura juste à faire la migration des devices zwave le jour où on fera la migration

Envoyé de mon BLA-L29 en utilisant Tapatalk

  • 7 mois après...
Posté(e)

@lazer

J'ai essayé ton quickapp car j'utilisais la version Hc2, et c'est aussi un exemple pour apprendre les QA

Il fonctionne parfaitement sauf que dans la version HC2 on avait la possibilité de mettre le user/passwd pour certain device 

Dans mon cas cela me gène pour le test d'anciennes caméra dlink et pour un serveur.

Pour le moment j'ai mis 401 comme code retour ( Unauthorized ) qu'en penses tu ?

Posté(e)

L'utilisateur et le mot de passe ?
Euh... J'ai pas souvenir de ça... tu es certain que tu n'utilisais pas une version que tu avais customisé ?

 

Cela dit, l'idée n'est pas bête, je l'ajouterai dans une prochaine version :)


En attendant, oui tu peux tester le code de retour... 401 est le code qu'on reçoit le plus souvent quand le login est incorrect/manquant. C'est ce que j'utilise en tout cas chez moi.

Posté(e)

Ok  tu as raison ( évidement)

je tourne sur la version 1.10 de Novembre 2015 et j'ai modifié 

 -- ["Service Name"]         = { IP Address   ,  Port, Protocol, Data to send,     Expected Rc,     Expected data,             Retry,    {Notification methods},  user,      pwd    },

 

Comme j'ai démarré en Novembre 2015 avec la HC2  j'ai du me sentir un peu novice pour proposer une modification mais j'ai ajouté dans l'en-tête 

--------------------------------------------------
-- Sur le travail de :
-- Module  : Network Monitor
-- Author  : Lazer with contribution of JM13
-- Version : 1.10
-- Date    : November 2015
--------------------------------------------------

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

Hello,

Superbe outils, et compliqué pour un vieux :) 

 

J'ai beaucoup d'alerte sur Google, ça me dit que je n'ai pas de connexion mais j'en ai vraiment une.

Du coup pas mal de notifs en ce sens alors que je suis sur The Internet :D 

 

Je ne sais pas trop quoi faire...

Pareil sur les 2 NAS, j'en ai un chez qui tout va bien et l'autre de notifs.

Je ne comprends pas toutes les commandes aussi :D 

{name = "Google", address = "www.google.fr", port = 80, protocol = "http", timeout = 1, url = "/", retcode = 200, retdata = "Recherche Google", retry = 1, interval = 1, notification = {"push","email"}, vg = nil, conditions = nil},
Posté(e)

C'est ta connexion Internet qui est trop lente ou instable, ça m'a fait le coup quand je suis passé d'Orange à Free (et là tu comprends la différence de prix....)

 

Il faut que tu augmentes le timeout et le nombre de retry, par exemple pour Google tu mets :

- timeout = 10

- retry = 10

Et là tu seras tranquille, si Networrk Monitor t'avertit que Google est injoignable, c'est que tu as une vraie panne Internet depuis 10*10 = 100 secondes

 

Idem pour ton second NAS, s'il est trop vieux / trop lent, il faut augmenter les valeurs pour rendre Network Monitor moins sensible.

  • Like 1
Posté(e) (modifié)

humm tu veux dire que mon ping de 1ms et mes 898 mb/s c'est de la daube ? :lol:

Pour le nas j'ai trouvé la panne, lol j'avais oublié qu'il était éteint de 00h00 à 4h30 mouarf !

 

Bon, je vais essayer les réglages que tu me conseil.

 

EDIT : je pense qu'il y a de l'instabilité, 3 pannes déjà dans tous le quartier. Maintenant la fibre tient le coup mais certainement avec des instabilités en effet !

C'est la nuit, rien dans la journée.

Modifié par Domodial
Posté(e)

Moi aussi chez Free j'ai un bon ping et de bons débits, comme chez Orange, mais ça c'est en apparence.

Ou plus précisément en situation de benchmark, sur un serveur Speedtest qui a été sélectionné car étant proche de chez toi, sur le même réseau (le réseau de Free)

 

En pratique, session de surf, j'ai régulièrement des latences, notamment quand je consulte un nouveau site.

Cela peut avoir plusieurs origines, des serveurs DNS qui sont lents à aller chercher l'adresse, des routeurs qui sont lents à calculer une nouvelle route, de mauvais accords de peering avec les réseaux des autres opérateurs. Et sur ce dernier points, Free est connu pour être très mauvais.... les problèmes avec Youtube par exemple, n'ont jamais été résolu. Même si en général ça fonctionne bien, il arrive régulièrement que je n'arrive pas à charger une vidéo, surtout aux heures de pointes, genre début de soirée. Et 1 heure après, comme par hasard, ça marche, chargement instantané même en 2160p.

Chez Orange, je n'avais aucun de ces problèmes, mais l'abonnement était 2 fois plus cher... alors forcément, le réseau derrière n'est pas le même.

 

Bref, Network Monitor a été conçu, avec tous ses paramètres, pour être adaptés à chaque cas d'usage.

En ce qui concerne un serveur éteint la nuit, ou pendant les vacances, tu peux aussi utiliser les conditions dans le dernier champ pour exclure temporairement un appareil du monitoring grâce aux variables globales. J'ai donné des exemples dans le tuto.

  • 5 mois après...
Posté(e)

@Lazer

J'ai parfois des devices http qui ne répondent pas ( ex: Caméras ) , mais quelques secondes plus tard, interrogés par un navigateur ils sont OK.

J'ai donc passé le retry de 1 à 3 mais il me semble que ce retry est immédiat donc sans effet dans ce cas.

Est-ce qu'il te semble correct que pour essayer j'ajoute un délai de 5 secondes dans le setTimeout du retry  ( vers la ligne 516 ) 

Posté(e)

Il me semblait avoir mis un délai entre 2 retry de 1 seconde, mais apparemment ce n'est pas le cas (ça devait l'être sur HC2)

 

Chez moi j'ai certains appareils avec jusqu'à 8 retry.

Mais attention, tu as aussi un paramètre timeout sur lequel il faut jouer. J'ai jusqu'à 10 secondes pour certains appareils qui sont trop lents à répondre. La plupart des exemples donnés en haut de page ont un timeout de 1 seconde, ce qui est trop court.

 

Donc si on met 8 retry avec un timeout de 10 seconde, ça laisse quand même 80 secondes à l'appareil pour se réveiller, ça devrait être large, sinon c'est que tu as un autre souci.

 

Le numéro de ligne peut varier selon ta config, donc si tu veux faire la modif pour ajouter un délai entre 2 retry, voici le bloc concerné, il y a 2 lignes setTimeout() à modifier : remplacer le 0 par 5000.

			-- New try
			if device.protocol == "tcp" then
				fibaro.setTimeout(0, function() self:connectTCP(device, try+1) end)
			elseif device.protocol == "http" or device.protocol == "https" then
				fibaro.setTimeout(0, function() self:requestHTTP(device, try+1) end)
			else
				self:error("Unknown protocol :", device.protocol)
			end

 

  • Thanks 1
Posté(e)

Mise en ligne de la version 2.12 :

  • Ajout des options login et password facultatives et utilisables avec les connexions HTTP et HTTPS (demande de @henri-allauch)
  • Ajout de l'option delay facultative utilisable en cas de retry > 1 (demande de @henri-allauch)
  • L'option conditions permet dorénavant de filtrer sur profil en plus de vg
  • Messages en langue française/anglaise
  • Correctifs et améliorations diverses

 

Téléchargement du QuickApp complet dans le tuto, ou bien des fichiers individuels à copier/coller manuellement.

Attention, en cas de mise à jour du QA v2.0 existant, il faudra créer les fichiers manuellement, et créer les 3 nouvelles Variables Notif_xxx dans l'onglet dédié du QuickApp.

 

  • Like 5
Posté(e)

@Lazer

Cela ne porte pas spécialement sur Network Monitor mais c'est en préparant sa mise à jour que je me pose la question .

 

Avant tu écrivais par exemple 

function QuickApp:checkDevice(device) et tu appelait la fonction self:checkDevice(device) et c'est l'exemple que j'utilisait dans tout mes QA.

 

Maintenant  tu écris

local checkDevice

checkDevice = function(self, device) et l'appel se fait par  checkDevice(self, device)

 

Je suppose qu'il y a des raisons. Peut-tu en dire plus. Rigueur d'écriture ? Portée de la fonction ? Utilisation de la mémoire ? ...

 

Désolé mais à 72 ans je capte plus comme avant ...

Merci pour ton aide

 

 

Posté(e)

Cette fonction est maintenant en local, et n'est donc plus membre de la classe QuickApp, c'est pour qu'elle ne soit plus exportée en dehors du QA lui-même. Donc il n'est plus possible de l'exécuter depuis un autre QA/Scène.

J'essaie maintenant de faire en sorte que seules les fonctions qui ont besoin d'être accessibles de l'extérieur le soient effectivement. Pas les autres.

Je trouve cela plus propre, et surtout ça évite qu'un petit malin exécute des fonctions à tort et à travers et viennent se plaindre de dysfonctionnements du QA. Cela n'est pas encore arrivé, mais sait-on jamais.

  • Like 1
Posté(e)

J'ai installé manuellement la nouvelle version en ajoutant les fichiers nécessaires.

Question sur

notification = {"push", "email", "sms"}

En principe je n'utilise pas notification SMS mais uniquement email.

J'ai installé les variables Notif_Users Notif_Mobiles et Notif_SMS pour ne pas avoir de : warninfg Variable Notif_xxx not found

 

Mais  pour Notif_SMS   IdQA:MyFunction   cette fonction doit  s'occuper de faire sa propre notification pour dire le SMS n'a pas fonctionné ?  mais reçois t'elle en paramètre un texte ?

 

Que préconises-tu si on n'a pas de fonction prévu  j'ai mis "false" et donc il me dit naturellement

[07.10.2021] [07:54:48] [WARNING] [QA_NETWORKMONITOR_29]: Empty notification "false" quickapp id[07.10.2021] [07:54:48] [WARNING] [QA_NETWORKMONITOR_29]: Empty notification "false" quickapp method

Posté(e) (modifié)

Effectivement, j'ai oublié de préciser la syntaxe de la fonction externe appelée pour envoyer un SMS ou toute autre notification (Telegram, etc)

 

Syntaxe de la variable : Nom_du_Quickapp=fonction_a_appeler

 

Quand elle sera appelée, cette fonction recevra 2 arguments :

  • 1er argument : message d'erreur. Exemple : Impossible de se connecter à Synology DiskStation
  • 2nd argument : détail du message d'erreur. Exemple : Operation canceled

Par SMS, je n'envoie que le message d'erreur sans le détail, mais tu fais comme tu veux.

 

Perso j'utilise le QuickApp JPI (partagé sur le forum) pour envoyer les SMS via un vieux smartphone Android.

Je configure la variable du QA Network Monitor comme ceci :

Notif_SMS = "JPI=sendSMS"


Du coup, le prototype de la fonction qui va devoir envoyer le SMS ressemble à quelque chose comme ça (en reprenant le nom sendSMS de mon exemple JPI) :

function QuickApp:sendSMS(message, detail)
	-- Dans le cas de JPI je n'exploite que le contenu de l'argument message afin d'alléger le contenu du SMS
end

Évidemment tu peux nommer la fonction comme ça te plait.

 

Modifié par Lazer
  • Thanks 1
  • 1 mois après...
Posté(e)

@Lazer Par curiosité pourquoi

 

    QuickApp.version = 2.12
    QuickApp._VERSION = "2.12"

 

une fois en number et une fois en string ?

à priori tu l'utilise pour information dans le message trace d'initialisation mais QuickApp.version ou QuickApp._VERSION ont t'il d'autres usages au sens Fibaro ?

Posté(e)

Au sens Fibaro ça n'a aucune importance, c'est juste ma tambouille interne.

J'ai trouvé logique d'avoir :

- une variable version sous forme de "number", car il est facile de comparer cette valeur lors du démarrage du QA et ainsi vérifier la bonne version de la librairie (oui parce qu'en fait j'utilise ce principe dans toutes mes librairies dépendantes)

- une variable _VERSION sous forme de "string", car il est plus facile à afficher à l'écran lors d'un self:debug(), sans avoir besoin de mettre en forme avec string.format()... d'ailleurs, doit-on afficher avec le formatage 2.10 ou 2.1 ? Avec une string, pas de question à se poser. Surtout si demain je décide de créer la version 2.125 par exemple (sur 3 digits donc)

 

Pour en revenir au sens Fibaro, même si ça n'a aucune importance, je n'ai quand même par sorti ça de nul part, je me suis inspiré de ce que Fibaro a fait.

Voir sur le topic suivant :

_VERSION = "Lua 5.3"
json._VERSION = "1.3.4"

=> ce sont des strings.

 

 

 

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

Je viens d'installer ce QA qui fonctionne parfaitement !
Juste une question sur les notifications : est-ce possible de mettre le message dans une VG ?
Je crois comprendre que oui mais le mode d'emploi n'est pas complet :)


Envoyé de mon M2012K11AG en utilisant Tapatalk

Posté(e)

Euh non, mais pourquoi tu veux mettre le message dans une VG ?

Si tu veux envoyer à un QuickApp pour faire du TTS, du Telegram, du SMS, ou que sais-je, tu peux utiliser la variable du QA Notif_SMS en précisant le nom du QA cible, et sa fonction. Le message sera passé en paramètre de la fonction.

 

Le paramètre vg dans chaque ligne correspond à une VG qui sera incrémentée de 1.
Par exemple, si ça fait 10 fois que Google ne répond plus, la variable contient 10, j'ai une règle GEA qui reboote la Freebox via le Wall Plug.

Posté(e)

C'est juste que j'ai une scène qui gère mes envois de push. C'est un des premiers trucs que j'ai mis en place sur ma HC3, quand je débutait. Je sais que c'est pas top, je vais essayer de changer de système pour passer via un QA.
Après, dans ton guide, j'ai vu "VG" dans la liste des paramètres de notification, donc j'ai cru que cela marcherait pour mon système.
T'embête pas, pas de besoin de modifier ton QA pour moi.

Envoyé de mon M2012K11AG en utilisant Tapatalk

×
×
  • Créer...