Aller au contenu

Recommended Posts

Network Monitor

Version 2.0

 

 

Voici un Quick App pour HC3 permettant 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, 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 :

 

Après téléchargement et import du QuickApp, modifier la variable QuickApp.config dans la section "User Variables" au début du code LUA.

Exemple :

--
-- User variables
--
QuickApp.config = {

	notifications = {
		email = {                        -- Email notification
			users = {                      -- /api/users
				"Lazer"
			},
			title = "HC3 Network Monitor",
		},
		push = {                         -- Push notification
			mobiles = {                    -- /api/iosDevices
				"Pixel 2 XL",
				"Google Pixel C",
			},
		},
		sms = {                          -- SMS notification
			quickapp = {                   -- /devices?interface=quickApp
				id     = "SMS",
				method = "sendSMS",
			},
		},
		vg = {                           -- Global Variable notification
			names = {                      -- /api/globalVariables/
				"Notification"
			}
		}
	},

	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 = {
																									{	vg = "Vacances" , operator = "==", value = "1"},
																									{	operator = "all", conditions = {
																											{	vg = "Saison", operator = "==", value = "Eté"},
																											{	operator = "any", conditions = {
																													{	vg = "Nuit"     , operator = "==", value = "1"},
																													{	vg = "Absence"  , operator = "==", value = "1"}
																												}
																											}
																										}
																									}
																								}
																							}
																						},
	},

}

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 sont nombreuses :

 

  • notifications
    • email :
      • users : integer | string : liste séparée par des virgules des utilisateurs à qui envoyer un email. Il faut renseigner soit l'ID de l'utilisateur, soit son nom, informations accessibles via /api/users
    • push :
      • mobiles : integer | string : liste séparée par des virgules des mobiles à qui envoyer une notification Push. Il faut renseigner soit l'ID du mobile, soit son nom, informations accessibles via /api/iosDevices
    • sms :
      • quickapp : QuickApp qui sera appelé pour éxecuter un code LUA externe, par exemple envoyer un SMS, ou un mesage via Telegram, ou autre service de notification.
        • id : integer | string : ID ou nom du QuickApp, informations accessibles via /api/devices?interface=quickApp
        • method : string : nom de la fonction à appeler dans le QuickApp
    • vg :
      • names : string : liste séparée par des virgules des variables globales qui contiendront le message de notification, informations accessibles via /api/globalVariables

 

  • devices
    • 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.
    • 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.
    • 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.

 

Téléchargement :

 

 

  • Like 3

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

×