Aller au contenu

Rechercher dans la communauté

Affichage des résultats pour les étiquettes 'hc3'.



Plus d’options de recherche

  • Rechercher par étiquettes

    Saisir les étiquettes en les séparant par une virgule.
  • Rechercher par auteur

Type du contenu


Forums

  • Bienvenue
    • Nouveau ? Présentez-vous
    • Le bistrot
    • Mon installation domotique
    • Annonces et suggestions
  • La Home Center et ses périphériques
    • La Home Center pour les nuls
    • HC 2 & Lite
    • HC 3
    • Modules Fibaro
    • Modules Z-wave
    • Périphériques et matériels autres
    • Plugins
    • Quick App
    • Multimédia (audio, vidéo ...)
    • Chauffage et Energie
    • Actionneurs & Ouvrants (Portail, volets, piscines, ...)
    • Eclairage
    • Applications Smartphones et Tablettes
  • Autres solutions domotiques
    • Box / Logiciel
    • Modules Nice (433 & 866 MHz)
    • Modules Zigbee
    • GCE Electronics
    • Modules Bluetooth Low Energy
  • Objets connectés
    • Les Assistants Vocaux
    • Netatmo
    • Philips Hue
    • DIY (Do It Yoursel)
  • Sécurité
    • Sécurité (Alarmes, Caméras, Portiers)
    • Alarmes
    • Caméras
    • Portiers
    • Serrures
  • Informatique / Réseau
    • Tutoriels
    • Matériels Réseaux
    • Matériels Informatique
    • NAS
    • Virtualisation
  • Les bonnes affaires
    • Sites internet
    • Petites annonces

Rechercher les résultats dans…

Rechercher les résultats qui…


Date de création

  • Début

    Fin


Dernière mise à jour

  • Début

    Fin


Filtrer par nombre de…

Inscription

  • Début

    Fin


Groupe


Jabber


Skype


Ville :


Intéret :


Version

27 résultats trouvés

  1. Bonjour à tous, Quelques mots au sujet de ma prise en main de la HC3. Tout d'abord, bien suivre la procédure initiale jusqu'au bout, afin de paramétrer le compte, les accès réseaux (éthernet et wifi), etc.. Au sujet de l'interface, quelle fluidité par rapport à la HC2 ! Fini le "flash" blanc entre chaque changement de "page" et les petits points bleus qui tournent en rond. Il va falloir aussi "réapprendre une nouvelle interface, avec une disposition et une philosophie différentes (mais on s'y fait assez vite). Par contre il existe de nouvelles "pages" telles que "Climat", "Jardin", "Profil", qui sont je pense à la fois un apport de nouvelles options et une redistribution des anciennes. Dans le genre, exit l'onglet "Panneaux", et par exemple celui des "Notifications". Apres quelques tests, les notifications (push) s'écrivent directement dans le code (sauf découverte ultérieure). Un peut déroutante également, la zone "Lua", avec à gauche une partie "Déclarations" et à droite une partie "Code". Si je ne me trompe, la partie "Déclaration" doit correspondre à l'ancien entête des scènes ( --[ ... ]-- ) ? Pour taper un peu sur le sempiternel "copper" promotionnel au sujet des LED's de facade, hé ben non ! Y'en a une qui reste(ra) rouge : celle dédiée à "l'installateur Fibaro" - agaçant... J'ai essayé de m'y coller. Hélas non ! Il faut un vrai compte d'installateur. Au sujet cette fois des icônes, toujours en 128 x 128 (j'aurais espéré 512...) Maintenant au taf ! Pas question d'importer le contenu de ma HC2 "brut de forge". Il va falloir un remaniement complet des scènes je pense (sauf si l'importation fait le transcodage). Je m'explique : getGlobalValue() devient getGlobalVariable() ! Dans le même veine : fibaro:getGlobal... devient fibaro.getGlobal... Il doit sûrement y avoir d'autres "subtilités" de ce genre. A toutes fins utiles, le lien vers le manuel Fibaro dédié au Lua "spécial" HC3 : https://manuals.fibaro.com/home-center-3-lua-scenes/ Photo de famille pour finir...
  2. ericl78

    Imperihome

    Bonjour La société qui possède imperihome "Ziblue" est en faillite ! Aujourd'hui, avec ma HC2, j'utilise à fond ce produit pour contrôler ma domotique; Avez vous des infos si tout de même Imperihome va être mis à jour ou pas ? J'ai envoyer un email en posant la question à l'éditeur, si j'ai des news, je posterai. J'ai essayé tout de même dans le cas ou, mais rien à faire, Imperihome ne se connecte pas à nos HC3 A plus
  3. Barelle

    Quick App - Ecodevice v1

    Quick App - Ecodevice v1 Gestion de la consommation en kWh, de la puissance en VA Pour les abonnements de type BASE, HPHC, EJP, TEMPO. Permet l’affichage de la puissance apparente, de l’énergie consommée durant la dernière minute, l’heure en cours, la journée en cours, le mois et l’année. Permet également d’afficher les coûts pour la journée, le mois et l’année. Ne possédant qu’un abonnement HPHC, je suis preneur des résultats de tests pour les autres abonnements, afin de vérifier la bonne adéquation entre la théorie et la pratique. Limites : les cumuls de consommation et les coûts ne sont calculés que pour T1, par défaut les unités de C1 sont en m3 ou litres et celles de C2 en kWh ; une éventuelle future version permettra peut-être de les personnaliser. Problèmes rencontrés : L’indigence de la documentation ; Le swagger qui plante régulièrement (get/plugins/getView par exemple) ; Les unités ne sont affichées qu’en lettres capitales et quand un child est agrandi, elles disparaissent ; Curieusement les childs apparaissent dans l’application portable et pas le QA. Configuration pour le fonctionnement Celle-ci est effectuée par la définition de variables (attention au respect des majuscules et minuscules) : ipEcodevices : adresse IP de l'Eco-Devices <========= OBLIGATOIRE debug : pour tracer plus copieusement le déroulement du programme (true ou false) Préférences Il s'agit de choix concernant les types de données que l'on souhaite afficher : refreshDelay : intervalle de relevé des mesures en secondes (60 recommandé et par défaut) iconId : numéro de l'icône à attribuer au QA et oui, on peut attribuer une icône à un child mais pas au QA globalVarName : nom de la variable globale utilisée pour mémoriser les valeurs d'index afin d’en permettre l’accès à une scène ou un autre QA toBeDisplayed : compteurs à afficher sous forme de liste (par exemple : T1,C1,C2) par le QA CoutKW<abonnement> : sous la forme d'une liste des coûts TTC des kWh comme ci-dessous (cf. https://www.kelwatt.fr/prix/edf) : - CoutKWBASE : 0.1587 - CoutKWHPHC : 0.1781,0.1337 (dans l'ordre HP,HC) - CoutKWEJP : 0.1506,0.3100 (dans l'ordre HN,HPM) - CoutKWTEMPO : 0.1531,0.1242,0.1738,0.1392,0.6371,0.1488 (dans l'ordre HPJB,HCJB,HPJW,HCJW,HPJR,HCJR) CoutAnnuel<abonnement> : le coût annuel TTC de l'abonnement comme ci-dessous (exemple : valeurs de juin 2020 pour une puissance de 9 kVA), si non défini, les coûts ne tiendront pas compte du prix de l’abonnement : - CoutAnnuelBASE : 143.64 - CoutAnnuelHPHC : 163.44 - CoutAnnuelEJP : 141.96 - CoutAnnuelTempo : 160.08 childs : liste de childs à lancer sous forme de liste (par exemple : T1kWhJour,C1,C2) voir chapitre ci-après. displayChilds : si les childs doivent être affichés (true ou false) Les "childs" Comme il faut bien découvrir, je me suis laché… Même si la gestion des quatre types d’abonnement est à l’origine de l’inflation. Il va de soi que je n’ai pas pris le temps de tout tester, merci de vos retours Les valeurs possibles pour la liste de la variable "childs" sont : Compteur T1 : T1VA = T1 puissance, T1WhActuel = Conso. actuelle, T1WhHeure = Conso. heure, T1kWhJour = Conso. jour, T1kWhMois = Conso. mois, T1kWhAnnee = Conso. année, Consommation abonnement BASE par période * BASEHeure = Conso. BASE heure, * BASEJour = Conso. BASE jour, * BASEMois = Conso. BASE mois, * BASEAnnee = Conso. BASE année, Coûts abonnement BASE par période * BASEJourEuro = Coût BASE jour, * BASEMoisEuro = Coût BASE mois, * BASEAnneeEuro = Coût BASE année, Consommation abonnement HPHC par période * HPHeure = Conso. HP heure, * HPJour = Conso. HP jour, * HPMois = Conso. HP mois, * HPAnnee = Conso. HP année, * HPHeure = Conso. HP heure, * HCJour = Conso. HC jour, * HCMois = Conso. HC mois, * HCAnnee = Conso. HC année, Coûts abonnement HPHC par période * HPJourEuro = Coût HP jour, * HPMoisEuro = Coût HP mois, * HPAnneeEuro = Coût HP année, * HCJourEuro = Coût HC jour, * HCMoisEuro = Coût HC mois, * HCAnneeEuro = Coût HC année, Consommation abonnement EJP par période * EJPHNHeure = Conso. EJPHN heure, * EJPHNJour = Conso. EJPHN jour, * EJPHNMois = Conso. EJPHN mois, * EJPHNAnnee = Conso. EJPHN année, * EJPHPMHeure = Conso. EJPHPM Heure, * EJPHPMJour = Conso. EJPHPM jour, * EJPHPMMois = Conso. EJPHPM mois, * EJPHPMAnnee = Conso. EJPHPM année, Coûts abonnement EJP par période : * EJPHNJourEuro = Coût EJPHN jour, * EJPHNMoisEuro = Coût EJPHN mois, * EJPHNAnneeEuro = Coût EJPHN année, * EJPHPMJourEuro = Coût EJPHPM jour, * EJPHPMMoisEuro = Coût EJPHPM mois, * EJPHPMAnneeEuro= Coût EJPHPM année, Consommation abonnement TEMPO par période : * HPJBHeure = Coût HPJB heure, * HPJBJour = Coût HPJB jour, * HPJBMois = Coût HPJB mois, * HPJBAnnee = Coût HPJB année, * HCJBHeure = Coût HCJB heure, * HCJBJour = Coût HCJB jour, * HCJBMois = Coût HCJB mois, * HCJBAnnee = Coût HCJB année, * HPJWheure = Coût HPJW heure, * HPJWJour = Coût HPJW jour, * HPJWMois = Coût HPJW mois, * HPJWAnnee = Coût HPJW année, * HCJWHeure = Coût HCJW heure, * HCJWJour = Coût HCJW jour, * HCJWMois = Coût HCJW mois, * HCJWAnnee = Coût HCJW année, * HPJRHeure = Coût HPJR heure, * HPJRJour = Coût HPJR jour, * HPJRMois = Coût HPJR mois, * HPJRAnnee = Coût HPJR année, * HCJRHeure = Coût HCJR heure, * HCJRJour = Coût HCJR jour, * HCJRMois = Coût HCJR mois, * HCJRAnnee = Coût HCJR année, Coûts abonnement TEMPO par période : * HPJBJourEuro = Coût HPJB jour, * HPJBMoisEuro = Coût HPJB mois, * HPJBAnneeEuro = Coût HPJB année, * HCJBJourEuro = Coût HCJB jour, * HCJBMoisEuro = Coût HCJB mois, * HCJBAnneeEuro = Coût HCJB année, * HPJWJourEuro = Coût HPJW jour, * HPJWMoisEuro = Coût HPJW mois, * HPJWAnneeEuro = Coût HPJW année, * HCJWJourEuro = Coût HCJW jour, * HCJWMoisEuro = Coût HCJW mois, * HCJWAnneeEuro = Coût HCJW année, * HPJRJourEuro = Coût HPJR jour, * HPJRMoisEuro = Coût HPJR mois, * HPJRAnneeEuro = Coût HPJR année, * HCJRJourEuro = Coût HCJR jour, * HCJRMoisEuro = Coût HCJR mois, * HCJRAnneeEuro = Coût HCJR année. Compteur T2 : T2VA = T2 puissance, T2WhActuel = T2 Conso. actuelle, T2WhHeure = T2 Conso. heure, T2kWhJour = T2 Conso. jour, T2kWhMois = T2 Conso. mois, T2kWhAnnee = T2 Conso. année, Compteur C1 : C1Index = C1 Index, C1Actuel = C1 Conso. actuelle, C1Heure = C1 Conso. heure, C1Jour = C1 Conso. jour, C1Mois = C1 Conso. mois, C1Annee = C1 Conso. année, Compteur C2 : C2Index = C2 Index, C2Actuel = C2 Conso. actuelle, C2Heure = C2 Conso. heure, C2Jour = C2 Conso. jour, C2Mois = C2 Conso. mois, C2Annee = C2 Conso. année, Le QA version 0.600 : Eco-Devices.fqa
  4. CharlesO

    Panneau d'arrosage sur HC3

    Bonjour a tous petit question svp comment marche le panneau d'arrosage dans la HC3 je n'arrive pas a ajouter un module la bas svp help merci
  5. 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é : 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 : Network_Monitor_v2.0.fqa
  6. @jjacques68 pourquoi tu utilise une autorisation dans le headers ? la KeyAPI suffit pour actionner les relais enfin sur mon RT2 cela fonction tu as oubliés de dire qu'il fallait faire une scène sur ipx ou ecodevice afin que le push soit exécuter j'ai eu du mal car je ne maitrise pas encore mon nouveau jouet Pour le Qa il faut utiliser un type binary senor ---
  7. Voici 2 petits scripts LUA pour explorer les objets accessibles dans les QuickApps et les Scènes sur HC3. Quand on développe, il est toujours intéressant de découvrir des variables et fonctions non documentées, ou voir quelles fonctions sont disponibles dans les QuickApps ou dans les Scènes car il y a pas mal de différences. Cela permettra aussi de suivre les ajouts de fonctions par Fibaro au fur et à mesure des nouveaux firmwares. Les résultats donnés dans ce post sont été obtenus avec le firmware 5.031.33 QuickApps Créer un QA avec un seul bouton pour lancer l'exécution du code : function QuickApp:browse(racine, tableau) local variables, functions, objects = {}, {}, {} for k, v in pairs(tableau) do if type(v) == "table" then if v ~= _G then local variables2, functions2, objects2 = self:browse(racine .. k .. ".", v) for i = 1, #variables2 do variables[#variables+1] = variables2[i] end for i = 1, #functions2 do functions[#functions+1] = functions2[i] end for i = 1, #objects2 do objects[#objects+1] = objects2[i] end end elseif type(v) == "function" then functions[#functions+1] = racine .. k .. '()' elseif type(v) == "string" then variables[#variables+1] = racine .. k .. ' = "' .. v .. '"' elseif type(v) == "number" then variables[#variables+1] = racine .. k .. ' = ' .. tostring(v) elseif type(v) == "integer" then variables[#variables+1] = racine .. k .. ' = ' .. tostring(v) elseif type(v) == "boolean" then variables[#variables+1] = racine .. k .. ' = ' .. tostring(v) else objects[#objects+1] = racine .. k .. " => " .. type(v) end end table.sort(variables) table.sort(functions) table.sort(objects) return variables, functions, objects end function QuickApp:onButtonClic(event) self:trace("") local variables, functions, objects = self:browse("", _G) self:trace("Variables :") for _, v in ipairs(variables) do self:debug(v) end self:trace("Fonctions :") for _, v in ipairs(functions) do self:debug(v) end self:trace("Objets :") for _, v in ipairs(objects) do self:debug(v) end self:debug("Terminé") end function QuickApp:onInit() end Résultat : Variables : _VERSION = "Lua 5.3" __TAG = "QuickApp152" json._COPYRIGHT = "Copyright (c) 2007-2017 Thomas Harning Jr. " json._DESCRIPTION = "LuaJSON : customizable JSON decoder/encoder" json._VERSION = "1.3.4" json.decode.simple.array.allowEmptyElement = false json.decode.simple.array.trailingComma = true json.decode.simple.calls.allowEmptyElement = false json.decode.simple.calls.allowUndefined = false json.decode.simple.calls.trailingComma = true json.decode.simple.number.exp = true json.decode.simple.number.frac = true json.decode.simple.number.hex = false json.decode.simple.number.inf = true json.decode.simple.number.nan = true json.decode.simple.object.allowEmptyElement = false json.decode.simple.object.identifier = true json.decode.simple.object.number = true json.decode.simple.object.trailingComma = true json.decode.simple.others.allowUndefined = true json.decode.simple.others.null = false json.decode.simple.others.undefined = false json.decode.simple.strings.additionalEscapes = false json.decode.simple.strings.badChars = "" json.decode.simple.strings.strict_quotes = false json.decode.strict.array.allowEmptyElement = false json.decode.strict.array.trailingComma = false json.decode.strict.calls.allowEmptyElement = false json.decode.strict.calls.allowUndefined = false json.decode.strict.calls.trailingComma = true json.decode.strict.initialObject = true json.decode.strict.nothrow = false json.decode.strict.number.exp = true json.decode.strict.number.frac = true json.decode.strict.number.hex = false json.decode.strict.number.inf = false json.decode.strict.number.nan = false json.decode.strict.object.allowEmptyElement = false json.decode.strict.object.identifier = false json.decode.strict.object.number = false json.decode.strict.object.trailingComma = false json.decode.strict.others.allowUndefined = false json.decode.strict.strings.additionalEscapes = false json.decode.strict.strings.badChars = " " json.decode.strict.strings.strict_quotes = true json.decode.strict.unicodeWhitespace = true json.decode.util.DecimalLpegVersion = 1.0 json.encode.default.number.inf = true json.encode.default.number.nan = true json.encode.default.others.allowUndefined = true json.encode.default.strings.encodeSet = "\"/%z-" json.encode.default.strings.xEncode = false json.encode.strict.initialObject = true json.encode.strict.number.inf = false json.encode.strict.number.nan = false json.encode.strict.others.allowUndefined = false json.encode.strict.strings.encodeSet = "\"/%z-" json.encode.strict.strings.xEncode = false logger.DEBUG = 1 logger.ERROR = 4 logger.FATAL = 5 logger.INFO = 2 logger.TRACE = 0 logger.WARNING = 3 math.huge = inf math.maxinteger = 9223372036854775807 math.mininteger = -9223372036854775808 math.pi = 3.1415926535898 plugin.mainDeviceId = 152 utf8.charpattern = "[-�-�][�-�]*" Fonctions : __assert_type() __fibaroSleep() __fibaroUseAsyncHandler() __fibaro_add_debug_message() __fibaro_get_device() __fibaro_get_device_property() __fibaro_get_devices() __fibaro_get_global_variable() __fibaro_get_room() __fibaro_get_scene() __print() __ternary() api.delete() api.get() api.post() api.put() assert() bit32.arshift() bit32.band() bit32.bnot() bit32.bor() bit32.btest() bit32.bxor() bit32.extract() bit32.lrotate() bit32.lshift() bit32.replace() bit32.rrotate() bit32.rshift() class() clearInterval() clearTimeout() collectgarbage() configure() error() fibaro.__houseAlarm() fibaro.alarm() fibaro.alert() fibaro.call() fibaro.callGroupAction() fibaro.clearTimeout() fibaro.debug() fibaro.emitCustomEvent() fibaro.error() fibaro.get() fibaro.getDevicesID() fibaro.getGlobalVariable() fibaro.getIds() fibaro.getName() fibaro.getRoomID() fibaro.getRoomName() fibaro.getRoomNameByDeviceID() fibaro.getSectionID() fibaro.getType() fibaro.getValue() fibaro.profile() fibaro.scene() fibaro.setGlobalVariable() fibaro.setTimeout() fibaro.sleep() fibaro.trace() fibaro.useAsyncHandler() fibaro.wakeUpDeadDevice() fibaro.warning() getHierarchy() ipairs() json.array() json.decode.decode() json.decode.getDecoder() json.decode.simple.object.setObjectKey() json.decode.simple.strings.decodeUnicode() json.decode.strict.object.setObjectKey() json.decode.strict.others.null() json.decode.strict.others.undefined() json.decode.strict.strings.decodeUnicode() json.decode.util.denied() json.decode.util.get_invalid_character_info() json.decode.util.setObjectKeyForceNumber() json.decode.util.unexpected() json.encode.default.array.isArray() json.encode.default.others.null() json.encode.default.others.undefined() json.encode.encode() json.encode.getEncoder() json.encode.strict.array.isArray() json.encode.strict.others.null() json.encode.strict.others.undefined() json.null() json.util.InitArray() json.util.IsArray() json.util.buildCall() json.util.clone() json.util.decodeCall() json.util.doOptionMerge() json.util.isCall() json.util.merge() json.util.null() json.util.printValue() json.util.undefined() logger.debug() logger.error() logger.fatal() logger.getLevel() logger.info() logger.log() logger.setLevel() logger.trace() logger.warning() math.abs() math.acos() math.asin() math.atan() math.atan2() math.ceil() math.cos() math.cosh() math.deg() math.exp() math.floor() math.fmod() math.frexp() math.ldexp() math.log() math.log10() math.max() math.min() math.modf() math.pow() math.rad() math.random() math.randomseed() math.sin() math.sinh() math.sqrt() math.tan() math.tanh() math.tointeger() math.type() math.ult() next() onAction() onUIEvent() os.clock() os.date() os.difftime() os.exit() os.time() pairs() pcall() plugin.createChildDevice() plugin.deleteDevice() plugin.getChildDevices() plugin.getDevice() plugin.getProperty() plugin.restart() print() property() rawlen() select() setInterval() setTimeout() string.byte() string.char() string.dump() string.find() string.format() string.gmatch() string.gsub() string.len() string.lower() string.match() string.pack() string.packsize() string.rep() string.reverse() string.split() string.starts() string.sub() string.unpack() string.upper() super() table.concat() table.insert() table.move() table.pack() table.remove() table.sort() table.unpack() tonumber() tostring() type() unpack() utf8.char() utf8.codepoint() utf8.codes() utf8.len() utf8.offset() xpcall() Objets : Device => userdata Hierarchy => userdata QuickApp => userdata QuickAppBase => userdata QuickAppChild => userdata core.EventTarget => userdata json.decode.simple.strings.escapeCheck => userdata json.decode.strict.strings.escapeCheck => userdata json.decode.util.ascii_ignored => userdata json.decode.util.ascii_space => userdata json.decode.util.comment => userdata json.decode.util.comments.c => userdata json.decode.util.comments.cpp => userdata json.decode.util.hex => userdata json.decode.util.hexpair => userdata json.decode.util.identifier => userdata json.decode.util.unicode_ignored => userdata json.decode.util.unicode_space => userdata mqtt.Client => userdata mqtt.ConnectReturnCode => userdata mqtt.QoS => userdata net.HTTPClient => userdata net.TCPSocket => userdata quickApp => userdata Scènes Créer une scène LUA en exécution manuelle avec ce code : local function browse(racine, tableau) local variables, functions, objects = {}, {}, {} for k, v in pairs(tableau) do if type(v) == "table" then if v ~= _G and v ~= _ENV and v ~= __index and k ~= "__index" then local variables2, functions2, objects2 = browse(racine .. k .. ".", v) for i = 1, #variables2 do variables[#variables+1] = variables2[i] end for i = 1, #functions2 do functions[#functions+1] = functions2[i] end for i = 1, #objects2 do objects[#objects+1] = objects2[i] end end elseif type(v) == "function" then functions[#functions+1] = racine .. k .. '()' elseif type(v) == "string" then variables[#variables+1] = racine .. k .. ' = "' .. v .. '"' elseif type(v) == "number" then variables[#variables+1] = racine .. k .. ' = ' .. tostring(v) elseif type(v) == "integer" then variables[#variables+1] = racine .. k .. ' = ' .. tostring(v) elseif type(v) == "boolean" then variables[#variables+1] = racine .. k .. ' = ' .. tostring(v) else objects[#objects+1] = racine .. k .. " => " .. type(v) end end table.sort(variables) table.sort(functions) table.sort(objects) return variables, functions, objects end fibaro.trace(tag, "") local variables, functions, objects = browse("", _ENV) fibaro.trace(tag, "Variables :") for _, v in ipairs(variables) do fibaro.debug(tag, v) end fibaro.trace(tag, "Fonctions :") for _, v in ipairs(functions) do fibaro.debug(tag, v) end fibaro.trace(tag, "Objets :") for _, v in ipairs(objects) do fibaro.debug(tag, v) end fibaro.debug(tag, "Terminé") Résultat : Variables : fibaro.version = "1.0.0" json._version = "0.1.0" math.huge = inf math.maxinteger = 9223372036854775807 math.mininteger = -9223372036854775808 math.pi = 3.1415926535898 sceneId = 10 sourceTrigger.id = 2 sourceTrigger.property = "execute" sourceTrigger.type = "user" tag = "Scene10" Fonctions : api.delete() api.get() api.post() api.put() assert() error() fibaro.alarm() fibaro.alert() fibaro.call() fibaro.callGroupAction() fibaro.debug() fibaro.emitCustomEvent() fibaro.error() fibaro.get() fibaro.getAllDeviceIds() fibaro.getDevicesID() fibaro.getGlobalVariable() fibaro.getIds() fibaro.getName() fibaro.getRoomID() fibaro.getRoomName() fibaro.getRoomNameByDeviceID() fibaro.getSectionID() fibaro.getType() fibaro.getValue() fibaro.homeCenter.climate.setClimateZoneToManualMode() fibaro.homeCenter.climate.setClimateZoneToScheduleMode() fibaro.homeCenter.climate.setClimateZoneToVacationMode() fibaro.homeCenter.notificationService.publish() fibaro.homeCenter.notificationService.remove() fibaro.homeCenter.notificationService.update() fibaro.homeCenter.popupService.publish() fibaro.homeCenter.systemService.reboot() fibaro.homeCenter.systemService.suspend() fibaro.profile() fibaro.scene() fibaro.setGlobalVariable() fibaro.setTimeout() fibaro.sleep() fibaro.trace() fibaro.wakeUpDeadDevice() fibaro.warning() ipairs() json.decode() json.encode() math.abs() math.acos() math.asin() math.atan() math.atan2() math.ceil() math.cos() math.cosh() math.deg() math.exp() math.floor() math.fmod() math.frexp() math.ldexp() math.log() math.log10() math.max() math.min() math.modf() math.pow() math.rad() math.random() math.randomseed() math.sin() math.sinh() math.sqrt() math.tan() math.tanh() math.tointeger() math.type() math.ult() net.HTTPClient.new() net.HTTPClient.request() next() os.date() os.time() pairs() pcall() print() select() string.byte() string.char() string.dump() string.find() string.format() string.gmatch() string.gsub() string.len() string.lower() string.match() string.pack() string.packsize() string.rep() string.reverse() string.sub() string.unpack() string.upper() table.concat() table.insert() table.move() table.pack() table.remove() table.sort() table.unpack() tonumber() tostring() type()
  8. jjacques68

    Récupérer le label d'un bouton

    Hello ! Tout est dans le titre Vous savez comment récupérer le libellé d'un bouton ou d'un label sur une HC3 ? merciiiiiii !
  9. TonyC

    HC3 - 5.031.33 - 28/05/2020

    Changelog : (je vais le mettre un peu en forme ds qlqs minutes) ... Access Dark Theme - come to the dark side! Possibility to switch active theme automatically based on sunrise and sunset. Alarm Added column with zone ID and missing labels. Block Scenes Option to set time for which triggering device has not changed its state. Shorter loading time for items in the drop-down lists. Dashboard Displaying camera image preview on the right sidebar. Displaying both temperatures on the device tile for thermostat in auto or away mode. Enlarged area on the device tile which opens the right sidebar. Possibility to control slats of rollerShutter devices from the right sidebar. Displaying device ID on the right sidebar. Displaying humidity measured by humidifier on the device tile. Devices Temperature history charts for temperature sensors in device Advanced tab. Smoke history charts for FIBARO smoke sensors in device Advanced tab. Added possibility not to hide included devices when creating linked device. Possibility of moving to hidden device from linked devices family view. Support for Dome Siren (DMS01). Support for Dome Water Main Shut-Off (DMWV1). Support for Eurotronics Spirit TRV. Support for Sensative Strips Comfort. Support for Sensative Strips Drip. Early Access Features Support for Nice mono-directional devices using Flor and Opera communication protocols. Displaying Nice devices on system dashboard with control from the right sidebar. Nice devices available as actors in scenes and profiles. General Deactivated possibility of changing time zone when using manual time setting. Improved readability of current system configuration report. Improved layout and readability of the map displayed in Location. Lua Scenes Added HTTP and HTTPS clients support. Other Swagger and full-screen console available in remote access. Default console filters applied automatically depending on from where has been opened. Quick Apps Displaying generic and custom device view together on the right sidebar. Autocompletion of used functions and variables. Asynchronous sending of actions to prevent blocking the interface by awaiting requests. Added fibaro.clearTimeout function. Added three thermostat device types (auto, cool, heat). Plugins Support for IP Cameras using Digest authentication. Recovery Mode Eight new languages (de, fr, es, it, nl, no, sv, cs). Scenes Copied or converted scene keeps the same running mode as source scene. Scene view is expanded after its copying or converting. Added column with scene ID. Bug fixes: Backup Backup is not saved if its name contains special characters. Block Scenes No conditions and actions for FIBARO Walli Roller Shutter (FGWREU-111). Redundant fields in Philips Hue plugin blocks. Dashboard Multi-digit values do not fit the device tile and display incorrectly. No weather data when using external weather provider. Devices Sprinkler linked device is assigned to Lights category instead of Climate. Lua Scenes Function fibaro.getGlobalVariable does not work properly. Notifications E-mail notifications are sent to previous admin after transferring role to another user. Rejecting \n, \t and ' in notifications content. Other Time in backups, diagnostics, notifications, and general settings ignores set time zone. User can see events from devices without sufficient access rights. Plugins Incorrect state of devices belonging to Philips Hue plugin. Cannot remove YR Weather plugin. Quick Apps Incorrect operation of autocompletion. Switching to https results in console errors when using localhost (127.0.0.1). Code of large Quick App disappears after performing update. Update No reboot after performing update in some cases. Trying to install downloaded update in some cases results in error 502. Z-Wave Energy data is not removed from all endpoints of the device.
  10. Bonjour, Je m'interroge sur la mention [ERROR] fréquemment rencontrée dans la fenêtre de débogage. En voici un exemple : [19.06.2020] [12:02:34] [ERROR] [SCENE33]: Ce libellé apparaît semble-t'il après chaque déclenchement de trigger (qui lance une scène - même très basique, du style on/off d'un module) Sauf erreur de ma part, je pense qu'il ne s'agit pas d'une "erreur" proprement dite, mais du signalement conséquent au lancement d'une scène déjà en "activité". La scène est correctement lancée et exécutée. Avez- vous une interprétation différente ?
  11. Moicphil

    Intégration des caméras IP sur HC3

    Salut J'ai essayé d'ajouter une des caméras sur la HC3 mais j'ai pas de flux qui apparaît. Étrange car l'URL donnée par la HC3 avec l'ip et mes crédentials sont OK, j'ai bien la vidéo ! C'est correct chez vous ?
  12. Bonjour, Je possède un portail coulissant avec un moteur CAME BK74. J'arrive à le controler sans probleme avec un FGS 222 pour ouverture totale et partielle. En revanche je n'arrive pas à récuperer son état en utilisant un SMART IMPLANT FGBS 222. J'ai bien identifié les contacts de fin de course (ressort) qui me donne une tension AC de 13V entre les bornes F et FC lorque le portail est fermé, pas de tension lorsqu'il fonctionne et une tension de 13V AC entre F et FA. Comment est ce que peux récupérer cette information avec le smart implant ? Est ce possible ou dois je utiliser un détecteur d'ouverture filaire à la place des contacts de fin de course ? Pas mal de schéma circulent mias je pense qu'ils ne sont pas bons car le IN du FGBS001 ou FGBS 222 accepte soit un contact sec soit du courant DC. Merci pour votre aide précieuse.
  13. jjacques68

    Interval Polling

    Hello ! Faut-il suivre les recommandations ? il me semble que sur la HC2, c'était automatique non ?
  14. Quick App - Monitoring Nas Synology Je vous propose un QA pour le monitoring de la HC3. Ce QA a été encore une fois réalisé avec l'aide de mon neveu (et oui je suis en train de la convertir). Il peut certainement être optimisé mais il fait le job. Je n'ai pas rencontré de bug. Vous pouvez le modifier et l'améliorer à votre guise. Il a les mêmes fonctions que celui de la HC2 dont on s'est largement inspiré. Utilisation : -- Créer deux variables "IPAddress" & "TCPPort" -- Renseigner votre "LOGIN" et votre "PASSWORD" -- Pour la fonction WOL, utiliser le QA WOL de Fibaro et appellé-le avec la commande: -- ==> fibaro.call(ID, "turnOn") EDIT: Voir le Header EDIT: Nouvelle version du QuickApp - Monitoring Nas Synology. Ajout des boutons pour l'éjection des disques durs connectés en USB sur les NAS. J'ai ajouté 4 boutons. Je pense que cela sera suffisant. Pour en ajouter d'autres, il suffit de suivre les commentaires dans la partie "FONCTION EJECT USB" du code. Les boutons se nomment USB Disk 1 à 4. Lorsque l'un des disques est déconnecté, les boutons se déplacent vers la gauche ( USB Disk 1 / USB Disk 2/ USB Disk 3/ No Disk ==> On élève le USB Disk 2 ==> / USB Disk 1 / USB Disk 3/ No Disk / No Disk). Je n'ai pas rencontré de bug. Le code: -- QuickApp Monitoring Nas Synology pour Fibaro HC3 -- Generic device type have no default actions to handle -- HISTORIQUE -- Adapté de https://www.domotique-fibaro.fr/topic/5682-synology-monitoring/ -- v2.4 (29/08/2015 - jojo) : première version -- merci à Krikroff, Lazer, Steven, mprinfo, FDP2 -- v2.41 (02/09/2015 - jojo) : slider pour double click -- V1.0 (14/05/2020) pour Home Center 3 par fredokl et Maxime pour le site www.domotique-fibaro.fr -- V1.1 (15/05/2020) pour Home Center 3 par fredokl et Maxime pour le site www.domotique-fibaro.fr -- Ajout du push pour avertir que le serveur n'est plus connecté. Ligne 409 de ce code -- V1.2 (27/05/2020) pour Home Center 3 par fredokl et Maxime pour le site www.domotique-fibaro.fr -- Transformation du QA en "com.fibaro.genericDevice" à la place de "Commutateur binaire" -- Ajout des icônes "serveur allumé" et "serveur éteint" -- V1.3 (29/05/2020) pour Home Center 3 par fredokl et Maxime pour le site www.domotique-fibaro.fr -- Ajout des boutons "Eject Disk" -- Changement rafraîchissement automatique (toute les minutes ==> Check tout le NAS et toutes les 10 secondes ==> Check les Disk USB) -- Améliorations du code -- Lien topic: https://www.domotique-fibaro.fr/topic/14308-quick-app-monitoring-serveur-nas-synology/ -- Utilisation: -- La connexion au NAS se fait par HTTP -- Créer deux variables "IPAddress" & "TCPPort" -- Renseigner votre "LOGIN" et votre "PASSWORD" -- Pour la fonction WOL, utiliser le QA WOL de Fibaro et appellé-le avec la commande: -- ==> fibaro.call(ID, "turnOn") -- Vous pouvez le modifier et l'améliorer à votre guise. ------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------- -- PARAMÈTRES UTILISATEUR -- ------------------------------------------------------------------------------------------- -- System variables function QuickApp:onInit() __TAG = "QA_"..plugin.mainDeviceId.."_DS 416 PLAY" self:trace("==========================================") self:debug("onInit") -- User configurable variables self.login = "login" -- votre login DSM self.password = "Password" -- votre mot de psse DSM self.ip = self:getVariable('IPAddress'); self.port = self:getVariable('TCPPort'); self.http = net.HTTPClient({ timeout = 10000 }) self.diskusblistid = {} self.diskusblistname = {} self.API_AUTH_ERROR_CODE = { [0] = "Sans erreur.", [100] = "Erreur inconnue.", [101] = "Compte non spécifié.", [400] = "Mot de passe invalide.", [401] = "Compte désactivé.", [402] = "Permission refusée.", [403] = "Unique mot de passe non spécifié.", [404] = "Autentification erronée." }; self.API_RECORD_ERROR_CODE = { [400] = "Exécution ratée.", }; self.nbmsg = 0 self.timerOn = false self.isCheckin = false self.nbCheck = 0 self:autoCheck() end -------------------------------------------------------------------------------------- -- WAKE ON LAN -------------------------------------------------------------------------------------- function QuickApp:uiWoLOnR() fibaro.call(47, "turnOn") end -------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------- -- == NE RIEN MODIFIER À PARTIR D'ICI == -------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------- -- FONCTION GETRequest: Connexion GET -------------------------------------------------------------------------------------- function QuickApp:GETRequest(payload, callBack) --self:trace("Commande GETRequest") local url = "http://" ..self.ip ..":" ..self.port ..payload self.http:request(url, { options= { headers= { ["Connection"] = "keep-alive", ["Accept"] = "application/json" }, method = "GET" }, success = function(response) self.nbmsg = self.nbmsg + 1 if callBack then callBack(response.data) end end, error = function(message) self:trace("error:" ..json.encode(message)) self.nbmsg = 0 self.timerOn = false end }) end -------------------------------------------------------------------------------------- -- FONCTION EJECT USB -------------------------------------------------------------------------------------- -- Refresh USB Disk function QuickApp:refreshUSBdisk() payload = "/webapi"..self.cgiUsed_sys.."?api="..self.apiStorage_usb.."&version=1&method=list&_sid="..self.SID; self:GETRequest(payload, function(data) jsonTable = json.decode(data); if jsonTable.success == true then local devices = jsonTable.data.devices self.diskusblistid = {} self.diskusblistname = {} for k,v in pairs(devices) do table.insert(self.diskusblistid, v.dev_id) table.insert(self.diskusblistname, v.dev_title) end self:trace("refreshUSBdisk") self:updateView("btn6", "text", self:getDiskName(self.diskusblistname[1])) -- Pour ajouter des boutons copier la ligne puis self:updateView("btn7", "text", self:getDiskName(self.diskusblistname[2])) -- changer les id pour ajouter des disks. self:updateView("btn8", "text", self:getDiskName(self.diskusblistname[3])) -- Pour supprimer un boutons ==> supprimer une ligne self:updateView("btn9", "text", self:getDiskName(self.diskusblistname[4])) --self:updateView("btn10", "text", self:getDiskName(self.diskusblistname[5])) -- Exemple bouton en plus self:trace("==========================================") end end) end -- Eject USB Disk en fonction du diskID et refresh juste après function QuickApp:ejectUSBdisk(diskID) payload = "/webapi"..self.cgiUsed_sys.."?api="..self.apiStorage_usb.."&version=1&method=eject&dev_id="..diskID.."&_sid="..self.SID; self:GETRequest(payload, function(data) jsonTable = json.decode(data); if jsonTable.success == true then self:trace("==========================================") self:trace("Disk: "..diskID.." éjecté") self:refreshUSBdisk() end end) end -- Affiche des noms sur les boutons function QuickApp:getDiskName(text) local res= "No Disk " if text then res = text end return res end -- Eject Disk vérification présence disk function QuickApp:ejectDisk(numero) local diskID = self.diskusblistid[numero] if diskID then self:CheckConnect( function() if self.isCheckin == false then self.isCheckin = true self:DoAction(function () self:ejectUSBdisk(diskID) end, 2) end end) end end -- Boutons Eject Disk function QuickApp:uiEject1OnP(event) self:ejectDisk(1) end function QuickApp:uiEject2OnP(event) self:ejectDisk(2) end function QuickApp:uiEject3OnP(event) self:ejectDisk(3) end function QuickApp:uiEject4OnP(event) self:ejectDisk(4) end --function QuickApp:uiEject5OnP(event) self:ejectDisk(5) end -- Ajouter ligne pour commande bouton -------------------------------------------------------------------------------------- -- AUTHORISATION CONNEXION NAS -------------------------------------------------------------------------------------- function QuickApp:DoAction(action, nbmsgtotal) --self:trace("Test avant ok connected") self.timerOn = true -- API & informations disponibles payload = "/webapi/query.cgi?api=SYNO.API.Info&method=Query&version=1&query=SYNO.API.Auth" self:GETRequest(payload, function (data) jsonTable = json.decode(data) self.version = jsonTable.data["SYNO.API.Auth"].maxVersion if self.version >= 2 then self:trace("Version API Synology OK") self.pathAuth = jsonTable.data["SYNO.API.Auth"].path self.cgiUsed_cpu_mem = "/entry.cgi" self.cgiUsed_sys= self.cgiUsed_cpu_mem self.cgiUsed_temp = self.cgiUsed_cpu_mem self.cgiUsed_vols = self.cgiUsed_cpu_mem self.apiUsed_cpu_mem = "SYNO.Core.System.Utilization" self.apiUsed_temp_system = "SYNO.Core.System" self.apiUsed_sys= self.apiUsed_temp_system; self.apiUsed_temp_disk = self.apiUsed_temp_system self.apiUsed_vols = self.apiUsed_temp_system self.apiMethod_cpu_mem="get" self.apiMethod_temp = "info" self.apiMethod_vols = self.apiMethod_temp self.apiStorage_usb= "SYNO.Core.ExternalDevice.Storage.USB" if self.version < 6 then self.cgiUsed_cpu_mem = "/dsm/system_loading.cgi" self.cgiUsed_sys="/dsm/system.cgi"; self.cgiUsed_temp = "/dsm/info.cgi" self.cgiUsed_vols = "/dsm/volume.cgi" self.apiUsed_cpu_mem = "SYNO.DSM.SystemLoading" self.apiUsed_temp_system = "SYNO.DSM.Info" self.apiUsed_temp_disk = "" self.apiUsed_vols = "SYNO.DSM.Volume" self.apiMethod_cpu_mem = "getinfo" self.apiMethod_temp = self.apiMethod_cpu_mem self.apiMethod_vols = "list" self.apiUsed_sys="SYNO.DSM.System"; end end self:GetSid_Send(action) self:timer(nbmsgtotal + 2) end) end -------------------------------------------------------------------------------------- -- FONCTION GetInfo: RÉCUPÉRATION DES DONNÉES -------------------------------------------------------------------------------------- function QuickApp:GetInfo(onlyDisk) self.timercount = 1000 if onlyDisk == false then -- CPU info du DSM payload = "/webapi"..self.cgiUsed_cpu_mem.."?api="..self.apiUsed_cpu_mem.."&version=1&method="..self.apiMethod_cpu_mem.."&type=current&_sid="..self.SID; self:GETRequest(payload, function (data) jsonTable = json.decode(data); if jsonTable.success == true then info_cpu = jsonTable.data.cpu; load_mem = jsonTable.data.memory.real_usage; self:trace("Memory: "..load_mem.."%"); info_cpu_memory = "Memory: "..load_mem.."% "; load_cpu = 0; if (self.version < 6) then load_cpu = info_cpu.user*100; else load_cpu = info_cpu.other_load+info_cpu.system_load+info_cpu.user_load; end self:trace("CPU: "..load_cpu.."%") info_cpu_memory = info_cpu_memory.."CPU: "..load_cpu.."%"; self:updateView("lbl3", "text", "Memoire: " ..load_mem .."% " .."CPU: " ..load_cpu .."%") self:trace("==========================================") end end) -- Info Température Système info du DSM payload = "/webapi"..self.cgiUsed_temp.."?api="..self.apiUsed_temp_system.."&version=1&method="..self.apiMethod_temp.."&_sid="..self.SID; self:GETRequest(payload, function (data) jsonTable = json.decode(data); if jsonTable.success == true then if jsonTable.data.sys_temp ~= nil then temp_system = "Température du Système: " ..jsonTable.data.sys_temp.."°C"; else temp_system = "Système: N/A"; end self:trace(temp_system); self:updateView("lbl4", "text", temp_system) end end) -- Info Température des disques -- Prépare string temp_disks = ""; payload = "/webapi"..self.cgiUsed_temp.."?api="..self.apiUsed_temp_disk.."&version=2&method="..self.apiMethod_temp.."&type=storage&_sid="..self.SID; self:GETRequest(payload, function (data) jsonTable = json.decode(data); if jsonTable.success == true then local disk_tab = jsonTable.data.hdd_info; for nb = 1, #disk_tab do temp_disks = temp_disks..disk_tab[nb].diskno..": "..disk_tab[nb].temp.."°C "; end self:trace("Température des Disques: "..temp_disks); self:updateView("lbl5", "text", temp_disks) end end) -- Info taille des disques -- Prépare string vols_load = ""; payload = "/webapi"..self.cgiUsed_vols.."?api="..self.apiUsed_vols.."&version=1&method="..self.apiMethod_vols.."&type=storage&_sid="..self.SID; self:GETRequest(payload, function (data) jsonTable = json.decode(data); if jsonTable.success == true then local vols_tab = jsonTable.data.vol_info; for nb = #vols_tab, 1, -1 do used_size_vol = vols_tab[nb].used_size; total_size_vol = vols_tab[nb].total_size; occupied_size = self:round(used_size_vol / total_size_vol * 100); vols_load = vols_load..vols_tab[nb].name..": "..occupied_size.."% "; end self:trace("Taille des Volumes: "..vols_load); self:updateView("lbl6", "text", vols_load) end end) end --Refresh button disk self:refreshUSBdisk() -- Affichage IP Serveur self:trace("IP Serveur ", "Serveur connecté: " ..self.ip ..":" ..self.port) self:updateView("lbl1", "text", "Serveur connecté: " ..self.ip ..":" ..self.port) end -------------------------------------------------------------------------------------- -- FONCTION POUR ARRONDIR LES POURCENTAGES -------------------------------------------------------------------------------------- function QuickApp:round(num) local a = math.floor(num*100 + 0.5)/ 100; return a,string.format("%.2f",a); end -------------------------------------------------------------------------------------- -- DÉCONNEXION -------------------------------------------------------------------------------------- function QuickApp:Disconnect() payload = "/webapi/"..self.pathAuth.."?api=SYNO.API.Auth&method=Logout&version=2&session=DSM&_sid="..self.SID; self:GETRequest(payload, function()end); end -------------------------------------------------------------------------------------- -- TIMER -------------------------------------------------------------------------------------- function QuickApp:timer(nbmsgtotal) if self.timerOn then if self.nbmsg < nbmsgtotal then fibaro.setTimeout(2000, function() self:timer(nbmsgtotal) end) else self:Disconnect() self.nbmsg = 0 self.timerOn = false self.isCheckin = false end end end -------------------------------------------------------------------------------------- -- REFRESH -------------------------------------------------------------------------------------- function QuickApp:autoCheck() self.nbCheck = self.nbCheck + 1 if self.nbCheck%6 == 0 or self.nbCheck == 1 then onlyDisk = false nbOperation = 5 else onlyDisk = true nbOperation = 1 end self:CheckAll(onlyDisk, nbOperation) fibaro.setTimeout(1000*10, function() self:autoCheck() end) --10 secondes end -------------------------------------------------------------------------------------- -- VÉRIFICATION DE TOUS LES ÉLÉMENTS -------------------------------------------------------------------------------------- function QuickApp:CheckAll(onlyDisk, nbOperation) self:CheckConnect( function() if self.isCheckin == false then self.isCheckin = true self:DoAction(function () self:GetInfo(onlyDisk) end, nbOperation) end end) heure = os.date("%H:%M:%S") date = os.date("%d/%m") dateheure = string.format(" %s à %s", date, heure) self:updateView("lbl7", "text", "Dernière vérification: "..dateheure) end -------------------------------------------------------------------------------------- -- CRÉATION D'UN NOUVEAU SID ET ENVOI DES COMMANDES -------------------------------------------------------------------------------------- function QuickApp:GetSid_Send(callBack) payload = "/webapi/"..self.pathAuth.."?api=SYNO.API.Auth&method=Login&version=2&account="..self.login.."&passwd="..self.password.."&session=DSM&format=sid"; self:GETRequest(payload, function (data) jsonTable = json.decode(data); if jsonTable.success == true then self.SID = jsonTable.data.sid; callBack() end end) end -------------------------------------------------------------------------------------- -- BOUTON RAFRAÎCHISSEMENT -------------------------------------------------------------------------------------- function QuickApp:uiCheckOnR(event) self:CheckAll(false, 5) end -- Check Connect function QuickApp:CheckConnect(callBack) self.tcp = net.TCPSocket({timeout = 1000}) self.tcp:connect(self.ip, tonumber(self.port), { success = function() self:trace("Check Connect OK") self:updateView("lbl2", "text", "Serveur: Allumé") fibaro.setGlobalVariable("Syno_Status1", "1") self:updateProperty("deviceIcon", 1042) -- Mettre ici le code pour l'icone allumé self.tcp:close() if callBack then callBack() end end, error = function(message) self:trace("erreur " ..message) self:updateProperty("deviceIcon", 1043) -- mettre ici le code pour l'icone éteint self:updateView("lbl1", "text", "Serveur connecté: N/A") self:updateView("lbl2", "text", "Serveur: Éteint") self:updateView("lbl3", "text", "Mémoire: N/A") self:updateView("lbl4", "text", "Température Système: NA") self:updateView("lbl5", "text", "Température diques: N/A") self:updateView("lbl6", "text", "Volume des disques: N/A") fibaro.setGlobalVariable("Syno_Status1", "0") -------------------------------------------------------------------------------------- -- ENVOI PUSH TOUTES LES DIX MINUTES -------------------------------------------------------------------------------------- if self.nbCheck%60 == 0 then fibaro.alert("push", {26}, "NAS Synology DS 416 Play est éteint: " ..os.date("%H:%M:%S")) end end }) end -------------------------------------------------------------------------------------- -- REDÉMARRAGE DU DISK STATION -------------------------------------------------------------------------------------- -- Bouton Reboot function QuickApp:uiRebootOnP(event) self:CheckConnect( function() if self.isCheckin == false then self.isCheckin = true self:DoAction(function () self:Reboot() end, 1) end end) end -- Code Reboot function QuickApp:Reboot() payload = "/webapi"..self.cgiUsed_sys.."?api="..self.apiUsed_sys.."&version=1&method=reboot&_sid="..self.SID; self:GETRequest(payload, function(data) jsonTable = json.decode(data); if jsonTable.success == true then self:trace("Redémarrage Disk Station Synology OK"); end end) end -------------------------------------------------------------------------------------- -- ARRÊT DU DISK STATION -------------------------------------------------------------------------------------- -- ShutDown the disk station function QuickApp:uiShutdownOnP(event) self:CheckConnect( function() if self.isCheckin == false then self.isCheckin = true self:DoAction(function () self:ShutDown() end, 1) end end) end function QuickApp:ShutDown() payload = "/webapi"..self.cgiUsed_sys.."?api="..self.apiUsed_sys.."&version=1&method=shutdown&_sid="..self.SID; self:GETRequest(payload, function(data) jsonTable = json.decode(data); if jsonTable.success == true then self:trace("Le Disk Station s'est arrêté"); end end) end -------------------------------------------------------------------------------------- -- FIN DU CODE -- -------------------------------------------------------------------------------------- QuickApp: QA-NAS_Synology.fqa Icônes:
  15. mprinfo

    Scene HC3 - Alerte Demarrage Box

    Scene HC3 - Alerte Demarrage Box Cette scene est indispensable pour être alerté lors d'un démarrage de votre HC3. Type d'alerte : Push Mail Trace Dans : DÉCLARATIONS (Conditions/Déclencheurs) copier ce code { type = "se-start", property = "start", operator = "==", value = true, isTrigger = true } Dans ACTIONS copier ce code local tag = "Demarrage HC3" local heure = os.date("%R") local date = os.date("%d/%m/%Y") local data = api.get("/settings/info") local Version = data.softVersion local Serial = data.serialNumber local Message = string.format("Votre %s version %s à demarrée le %s à %s", Serial, Version, date, heure) fibaro.alert("push", {2}, Message) fibaro.alert("email", {2}, Message) fibaro.trace(tag, Message) On enregistre est c’est OK
  16. fredokl

    QuickApp - Remote Denon

    Quick App - Remote Denon Voici un QA pour piloter un amplificateur Audio-Vidéo de la Marque DENON. Il est calibré selon mes besoins mais vous pouvez ajouter facilement les fonctions que vous souhaitez sur votre amplificateur. Avec mon neveu (et oui encore lui) nous sommes parti du Vd réalisé par @sebcbien sur le forum pour les amplificateur MARANTZ qui est une filiale de DENON. Les codes sont presque tous les mêmes. Les commandes passent par Telnet (port 23 par défaut). Le QA n'est peut-être pas parfait mais je n'ai pas eu de bugs. Vous pouvez le modifier et l'améliorer à votre convenance. Pour le paramètrage, tout est expliqué dans le header. Code: -------------------------------------------------------------------------------------------------------------------------------------- -- QuickApp Amplificateur Audio-Vidéo DENON AVR-X3200W -- Commutateur binaire -- HISTORIQUE -- Adapté de https://www.domotique-fibaro.fr/topic/3263-telecommande-pour-marantz-sr6008-et-similaires-5008-7008-etc/?tab=comments#comment-46332 -- V3.2 (10/01/2015) Remote Marantz de SebcBien -- HC3 Version: -- V1.0 (14/05/2020) Remote Denon pour Home center 3 par fredokl et Maxime pour le site www.domotique-fibaro.fr -- Utilistaion : -- La connexion à l'amplifivateur Audio-Vidéo se fait par TELNET (port:23 par défaut) -- Créer les variables "ip" & "port" -- Ajouter les commandes que vous souhaitez dans la partie "RÉGLAGES UTILISATEUR" -- Toutes les modifications se font dans la partie "RÉGLAGES UTILISATEUR" -- À l'excepter des noms des appareils que vous utilisez chez vous -- ==> voir QuickApp:onDataReceived(data) -- ==> VOS APPAREILS ICI -- Vous pouvez le modifier et l'améliorer à votre guise. -------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------- -- PARAMÈTRES UTILISATEUR -- -------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------- QuickApp._VERSION = "1.0" function QuickApp:onInit() __TAG = "QA_"..plugin.mainDeviceId.."DENON" self:trace("DEBUT ========================================================") self.ip = self:getVariable("ip") self.port = tonumber(self:getVariable("port")) self:setVariable("mute", "0") self.sock = net.TCPSocket() -- création d'une instance TCPSocket self.isOn = false self.isconnected = false self:connect() self.pollingTime = 1000*60 -- 1min self:refresh() end -------------------------------------------------------------------------------------------------------------------------------------- -- ON & OFF -------------------------------------------------------------------------------------------------------------------------------------- function QuickApp:turnOn() self:debug("Turn On") self:sendCommand("PWON") self:getinfo() end function QuickApp:uibtnonOnReleased(event) self:turnOn() end function QuickApp:turnOff()self:debug("Turn off") self:sendCommand("PWSTANDBY") self:getinfo() end function QuickApp:uibtnoffOnReleased(event) self:turnOff() end -------------------------------------------------------------------------------------------------------------------------------------- -- Boutons de volume -------------------------------------------------------------------------------------------------------------------------------------- function QuickApp:uibtnvol30OnReleased(event) self:SetVol(30) self:getinfo() end function QuickApp:uibtnvol40OnReleased(event) self:SetVol(40) self:getinfo() end function QuickApp:uibtnvol50OnReleased(event) self:SetVol(50) self:getinfo() end function QuickApp:uibtnvol60OnReleased(event) self:SetVol(60) self:getinfo() end function QuickApp:uibtnmuteOnOff(event) if self:getVariable("mute") == "0" then self:setVariable("mute","1") self:sendCommand("MUON") self:updateProperty("value", true) self:getinfo() elseif self:getVariable("mute") == "1" then self:setVariable("mute", "0") self:sendCommand("MUOFF") self:updateProperty("value", false) self:getinfo() end end -------------------------------------------------------------------------------------------------------------------------------------- -- FORMATS SONORS -------------------------------------------------------------------------------------------------------------------------------------- function QuickApp:uiddOnReleased(event) self:debug("Dolby Digital") self:sendCommand("MSDOLBY DIGITAL") self:getinfo() end function QuickApp:uidtsOnReleased(event) self:debug("DTS") self:sendCommand("MSDTS SURROUND") self:getinfo() end function QuickApp:ui7chstOnReleased(event) self:debug("7 Canaux Stereo") self:sendCommand("MSMCH STEREO") self:getinfo() end -------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------- -- NE RIEN TOUCHER À PARTIR D'ICI -- -------------------------------------------------------------------------------------------------------------------------------------- -- VOLUME & SLIDER -------------------------------------------------------------------------------------------------------------------------------------- function QuickApp:SetVol(value) if value < 10 then value = "0" ..value end self:sendCommand("MV" ..tostring(value)) self:trace("Volume", value) end function QuickApp:uivolumeOnChanged(event) local value = event.values[1] self:SetVol(value) self:getinfo() end -------------------------------------------------------------------------------------------------------------------------------------- -- REQUÊTE HTTP -------------------------------------------------------------------------------------------------------------------------------------- function QuickApp:getinfo() self:sendCommand("PW?") -- Power self:sendCommand("SI?") -- source self:sendCommand("MS?") -- format sono self:sendCommand("MV?") -- volume end function QuickApp:uigetinfo() self:getinfo() end function QuickApp:sendCommand(strToSend) local command = strToSend .."\r" self.sock:write(command, { success = function() -- fonction qui sera déclenchée lorsque les données seront correctement envoyées --self:trace("data sent" ..command) end, error = function(err) -- fonction qui sera déclenchée en cas d'erreur de transmission de données self:trace("error while sending data") end }) end -- méthode pour lire les données du socket -- puisque la méthode elle-même a été bouclée, elle ne doit pas être appelée depuis un autre emplacement que QuickApp:connect() function QuickApp:waitForResponseFunction() self.sock:read({ -- lire un paquet de données depuis le socket success = function(data) self:onDataReceived(data) -- traitement des données reçues self:waitForResponseFunction() -- lecture en boucle des données end, error = function() -- une fonction qui sera appelée en cas d'erreur lors de la tentative de réception de données, par ex. déconnexion d'un socket self:trace("response error") self.sock:close() -- socket fermé fibaro.setTimeout(5000, function() self:connect() end) -- tentative de reconnexion (toutes les 5 secondes) end }) end -- méthode pour ouvrir une connexion TCP. -- si la connexion réussit, la boucle de lecture des données sera appelée QuickApp:waitForResponseFunction () function QuickApp:connect() self.sock:connect(self.ip, self.port, { -- connexion à l'appareil avec l'adresse IP et le port spécifiés success = function() -- la fonction sera déclenchée si la connexion est correcte self:trace("connected") self.isconnected = true self:waitForResponseFunction() -- lancement d'une "boucle" de lecture de données end, error = function(err) -- une fonction qui sera déclenchée en cas de connexion incorrecte, par ex. timeout self.sock:close() -- fermeture du socket self:warning("connection error") self:updateView("lblSource", "text", "Source: N/A") self:updateView("lblSur", "text", "Format Sonor: N/A") self:updateView("lblVolStat", "text", "Volume: N/A") self:updateView("Slidervolume", "value", "0") fibaro.setTimeout(5000, function() self:connect() end) -- tentative de reconnexion (toutes les 5 secondes) end, }) end -- fonction de gestion des données lues -- normalement c'est là que les données rapportées par l'appareil seront traitées function QuickApp:onDataReceived(data) --self:trace("onDataReceived", data) power = string.find(data, "PW.") volume = string.find(data, "MV%d") formatsonor = string.find(data, "MS.") source = string.find(data, "SI.") if power then if string.sub(data, 3, #data - 1) == "STANDBY" then self.isOn = false self:updateView("lblSource", "text", "Source: N/A") self:updateView("lblSur", "text", "Format Sonor: N/A") self:updateView("lblVolStat", "text", "Volume: N/A") self:updateView("Slidervolume", "value", "0") self:updateProperty("value", false) else self.isOn = true self:updateProperty("value", true) end end if self.isOn then if volume then local statSliderVol = string.sub(data, 3, #data-1) if string.len(statSliderVol) == 3 then statSliderVol = string.sub(statSliderVol, 1, 2) end self:updateView("lblVolStat", "text", "Volume: " ..statSliderVol .." %") self:updateView("Slidervolume", "value", statSliderVol) -- updating the text for 'Slidervolume'. end if formatsonor then self:updateView("lblSur", "text", "Mode Surround: " ..string.sub(data, formatsonor + 2)) self:trace("Mode Surround: " ..string.sub(data, formatsonor + 2)) end if source then source = string.sub(data, source + 2) sourcetable = { -- VOS APPAREILS ICI ------------------------------------------- MPLAY = "APPLE TV4", --SAT/CBL = "FREEBOX", --A VERIFIER SUR AMPLI ET PC BD = "PS4", TV = "TV SONY" -- VOS APPAREILS ICI ------------------------------------------- } translatesource = sourcetable[string.sub(source, 1, #source -1)] if translatesource == nil then translatesource = source end self:updateView("lblSource", "text", "Appareil connecté: " ..translatesource) self:trace("Appareil connecté: " ..translatesource) self:trace("FIN ========================================================") end end end -------------------------------------------------------------------------------------------------------------------------------------- -- REFRESH -------------------------------------------------------------------------------------------------------------------------------------- -- fonction refresh du QA function QuickApp:refresh() if self.isconnected then self:getinfo() end fibaro.setTimeout(self.pollingTime, function() self:refresh() end) -- looping part end -------------------------------------------------------------------------------------------------------------------------------------- -- FIN DU CODE -- -------------------------------------------------------------------------------------------------------------------------------------- QuickApp: QA-DENON.fqa Icônes On & Off:
  17. Quick App - Chauffage Fil Pilote Qubino Bonjour, Voici un QA pour le pilotage du chauffage avec un Qubino Fil Pilote. Je n'ai pas ré-inventé la roue mais simplement inspiré l'un des VD trouvé sur le forum pour la HC2. Pour cette version j'utilise une variable globale (Chauffage_Salon). Le paramétrage est très simple, il suffit de changer l'ID de votre module Qubino FP ainsi que sa valeur en fonction de vos envies. Code: -- QA de gestion pour un chauffage électrique en fil pilote 6 ordres piloté par un module Qubino -- Fonnctionne avec une Variable Globale qu'il faut créer (pas de création automatique de la VG pour le moment) -- VG = Chauffage_Salon {Confort, Confort-1, Confort-2, Éco, Hors-Gel, Arrêt} -- Créé par fredokl pour le forum www.domotique-fibaro.fr -- Version: 1.0 function QuickApp:onInit() self:debug("onInit") __TAG = "QA_"..plugin.mainDeviceId.."Chauffage Salon" -- Mise à jour variable sur label local ModeCh = fibaro.getGlobalVariable("Chauffage_Salon") self:updateProperty("Temperature", ModeCh) self:updateView("lblMode", "text", "Le chauffage du Salon est en mode ".. ModeCh) self:TemperatureSalon() end -- Température du Salon function QuickApp:TemperatureSalon(event) local tempSalon = fibaro.getValue(34, "value") -- Capteur température self:updateProperty("Temperature", tempSalon) self:updateView("lblTemp", "text", "La température du Salon est de ".. tostring(tempSalon) .." C°") self:debug("Température du Salon ".. tostring(tempSalon) .." C°") -- Rafraîchissement toutes les 15 minutes fibaro.setTimeout(1000 * 60 * 15, function() self.TemperatureSalon() end) end -- Mode Confort function QuickApp:uiConfortOnR(event) fibaro.call(62, "setValue", 99) fibaro.setGlobalVariable("Chauffage_Salon", "Confort") self:debug("Chauffage en mode Confort") self:onInit() end -- Mode Confort-1 function QuickApp:uiConfort_1OnR(event) fibaro.call(62, "setValue", 41) fibaro.setGlobalVariable("Chauffage_Salon", "Confort-1") self:debug("Chauffage en mode Confort-1") self:onInit() end -- Mode Confort-2 function QuickApp:uiConfort_2OnR(event) fibaro.call(62, "setValue", 31) fibaro.setGlobalVariable("Chauffage_Salon", "Confort-2") self:debug("Chauffage en mode Confort-2") self:onInit() end -- Mode Éco function QuickApp:uiEcoOnR(event) fibaro.call(62, "setValue", 21) fibaro.setGlobalVariable("Chauffage_Salon", "Éco") self:debug("Chauffage en mode Éco") self:onInit() end -- Mode Hors-Gel function QuickApp:uiHGOnR(event) fibaro.call(62, "setValue", 11) fibaro.setGlobalVariable("Chauffage_Salon", "Hors-Gel") self:debug("Chauffage en mode Hors-Gel") self:onInit() end -- Mode Arrêt function QuickApp:uiArretOnR(event) fibaro.call(62, "setValue", 0) fibaro.setGlobalVariable("Chauffage_Salon", "Arrêt") self:debug("Chauffage à l'arrêt") self:onInit() end Bien entendu ce code peut être modifié selon vos désirs. QuickApp: QA-Chauffage_FP.fqa
  18. jjacques68

    HC3 - 5.030.45 - 09/04/2020

    What's new: Backup Sorting backups by creation date. Block Scenes New block in Time category - Date range. Hints for blocks in the form of tooltips for what they are used for. Removed hidden devices from the drop-down lists. Conditions and actions for FIBARO RGBW 2 device (FGRGBW-442). Conditions and actions for FIBARO Intercom device (FGIC-001). Conditions (zones, inputs, outputs) and actions (zones, outputs) for Satel Alarm plugin. Climate Changed the default mode from Auto to Heating for manually added climate zones. Dashboard Drag and drop the device to the room name on the left to move it there. Icon indicating alarm status in the header with a redirection to list of zones. Current thermostat mode displayed on the device tile. Control of thermostat type devices from the right sidebar. Control of colorController type devices from the right sidebar. More possibilities to control rollerShutter type devices from the right sidebar. Changed the ON/OFF switch from toggle switch to 2-buttons switch on the right sidebar. Displaying alarm zones to which the sensor belongs and their states on the right sidebar. Closing the right sidebar by clicking outside its area. Devices Input/output mode configuration for FIBARO RGBW device (FGRGBWM-441). Protection against adding an existing or pending association. Changed range and precision of offset for value measured by temperature sensor. Favourite roller blind position configurable from device settings. Displaying parameter values greater than 999 with additional space. Possibility to force polling for device with switched off polling interface. More effective navigation through device list using the tabulator. Notification from heatDetector and rainDetector devices available for activation. Console log for requesting neighbours when adding a Z-Wave device. Support of excluding from climate panel for a specified time for all types of thermostats. Support for MCOHome MH7H-EH and MH7H-WH version 2.7. Support for MCOHome MH8-FC and MH8-FC4 version 3.2. Support for MCOHome MH9-CO2-WA and MH9-CO2-WD version 2.4. Support for MCOHome MH10-PM2.5-WA and MH10-PM2.5-WD version 2.3. Support for MCOHome MH-F500 version 1.2. Support for MCOHome MH-3900 version 1.9. Support for MCOHome MH-3928 version 1.3. Support for MCOHome MH7-WB version 4.2. Support for MCOHome A8-9 version 6.2. Support for Aeotec Siren 6 and Doorbell 6 version 1.4. Support for Aeotec Heavy Duty Switch version 3.28. Support for HeatIt Push2, Push4, Push8 version 1.26. Sound Switch CC support. General Report of current system configuration generated as a printout. History Marking today's date in the calendar (also applies to notifications). Lua Scenes New 'duration' condition - time in seconds for which the device has not changed state. New 'anyValue' operator - any change of device value. Notifications Displaying notifications of backup and update errors. Other Brand new console/debugger, common for Z-Wave communication, scenes and Quick Apps. Searching by the name of entry in the console. Filtering entries in the console by selected tag and/or type. Full-screen view of the console available as a separate page. Notifications in toasts during the addition/deletion/configuration of Z-Wave devices. Unified display of slider values within the interface. Protection against user access to unconfigured gateway. Changed LED indication on the gateway after adding/deleting a Z-Wave device. Improved stability of Wi-Fi connection. Completing and improving translations. Plugins Improved configuration of Philips Hue plugin. Added button for reloading configuration of Satel Alarm plugin keeping unchanged IDs. Profiles Removed hidden devices and hidden scenes from the list. Added manual mode of climate zones control. Quick Apps Added MQTT client support. Possibility to create slave devices. Editing code of controls in main device editor. Conversion of added Quick Apps to new format (migrating controls to separate functions). Documentation - https://manuals.fibaro.com/home-center-3-quick-apps Marketplace - https://marketplace.fibaro.com/items?kind=quick_app Scenes Activity of the run button depending on scene restart settings. Toast notification when trying to restart a running scene. Sorting scenes by name or type. Bug fixes: Alarm Scene protected from running during the alarm is performed. Block Scenes Role of the rollerShutter does not affect the list of available actions. Using the Sunrise/sunset block prevents the scene from saving. Calendar is displayed in wrong place and does not fit the screen. Redundant fields in FIBARO Intercom device blocks. Condition of running a scene using Satel Alarm disappears after reloading the page. Push notifications are always sent to all users instead of selected ones. Cameras IP camera image preview is visible in the interface from the Installer App. Climate Setpoint is not applied to a device without support for Auto mode. Activating manual or vacation mode always sets a zone in Auto mode. Unified sets of temperature colours in climate panel and displayed on thermostat icon. Dashboard Order of rooms in the list does not match the order from settings. Icon of the colorController type device is displayed incorrectly. Devices Device list does not always load after refreshing the page. FIBARO Heat Controller (FGT-001) does not support Off and FullPower modes. Inconsistent display of thermostats on the main screen and in device settings. Incorrect parameters after changing the role or key type of FIBARO RGBW device. Interface does not load after migration from HC2/HCL due to no support of some thermostats. History Linked device state change is not displayed on the list. Lua Scenes No support for fibaro.getDevicesID function. Network Access Point switches off by itself after several hours. Other LED state on the gateway does not change during addition/deletion of Z-Wave device. Drop-down list does not close and overlaps when another one is being opened. Unified content and appearance of e-mails sent from the gateway. Quick Apps Modified Quick App view is not saved. No support of special characters and emojis in Quick App view. No view update in device edit window after using self:updateView. Double checkbox section in device Advanced tab. Scenes Incorrect operation of reporting unsaved changes. No window for entering PIN code when trying to run a PIN-protected scene.
  19. Quick App - Mettre a jour un QA tout les jours a 0h00 voici un bout de code pour mettre a jour un QuickApp tout les jours a minuit function QuickApp:onInit() self:debug("onInit") self.refresh = 0 -- Boucle principale self:loop(self.refresh) end ---------------------------------------------------------- --- Boucle loop ---------------------------------------------------------- function QuickApp:loop(refresh) local JourHeure = os.date("*t") local refresh = 24*60 if JourHeure.hour ~= 0 and JourHeure.min ~= 0 then refresh = ((23-JourHeure.hour)*60)+60-JourHeure.min end self:trace("Le QA a été mise a jour : Prochane mise a jours dans ",refresh,"mn") self:demmarrefonction()--------------on met ici la fonction qui démmarre le QA fibaro.setTimeout(refresh * 60 * 1000, function() self:loop(refresh) end) end
  20. Noyde

    QuickApp Color controller

    Bonjour, J'ai un souci avec les QuickApp de type color controler. Lorsque j'utilise le slider de l'app mobile ou les couleurs favorites je n'arrive pas à récupérer le code "rgbw" complet, seulement le "r". Par contre si je fait un call: fibaro.call(134, "setColor", "204,75,194,0") Avez-vous une idée? Merci d'avance.
  21. fredokl

    QuickApp - FreeSms

    Bonjour à tous, Voici un QuickApp pour pouvoir envoyer des sms avec un compte Free Mobile. Le code est adapté de celui de @Krikroff pour la HC2. Je me suis fait aider par mon neveu qui maitrise le code beaucoup mieux que moi. Il fonctionne parfaitement. Il est libre de modification et d'amélioration. Code: -- FREESMS pour Fibaro HC3 -- Le code suivant a été adapté sur celui-ci de Krikroff du forum www.domotique-fibaro.fr -- Adaptation par fredokl pour www.domotique-fibaro.fr -------------------------------------------------------- -- Paramètres utilisateur -------------------------------------------------------- local username = "IDENTIFIANT FREE" local password = "CLÉ IDENTIFICATION" -------------------------------------------------------- -- Paramètrages des boutons avec les messages à envoyer -------------------------------------------------------- function QuickApp:uimsg1OnR(event) self:debug("Message 1") self:sendmsg("Hello World!") end function QuickApp:uimsg2OnR(event) self:debug("Message 2") self:sendmsg("Salut le Monde!") end function QuickApp:uimsg3OnR(event) self:debug("Message 3") self:sendmsg("Tout va bien?") end function QuickApp:uimsg4OnR(event) self:debug("Message 4") self:sendmsg("Moi ça va.") end function QuickApp:uimsg5OnR(event) self:debug("Message 5") self:sendmsg("Bye bye!") end -------------------------------------------------------- -- Ne rien modifier sous cette ligne -------------------------------------------------------- function QuickApp:sendmsg(message) self:debug("Envoi du message") self:setVariable("FreeSMS", message) self:updateProperty("value", true) local query = string.format("user=%s&pass=%s&msg=%s", username, password, message) self:sendCommand(query) end function QuickApp:sendCommand(query) local message = self:getVariable("FreeSMS") local url = "https://smsapi.free-mobile.fr/sendmsg" url = url .. "?" .. query self:debug("Envoi de la commande:", url) self.http:request(url, { options= { headers= { ["Connection"] = "keep-alive", }, method = "POST" }, success = function(response) self:controle_status(response.status) end, error = function(message) self:debug("error:", message) end }) self:debug("Fin de commande") end -------------------------------------------------------- -- Liste des codes retour HTTP de Free Mobile -------------------------------------------------------- local code_retour = { [200]=" - Le SMS a été envoyé sur votre mobile", [400]=" - Un des paramètres obligatoires est manquant", [402]=" - Trop de SMS ont été envoyés en trop peu de temps", [403]=" - Le service n’est pas activé sur l’espace abonné, ou login / clé incorrect", [500]=" - Erreur côté serveur. Veuillez réessayez ultérieurement" } -------------------------------------------------------- -- Fonction contrôle du code retour HTTP Free Mobile -------------------------------------------------------- function QuickApp:controle_status(status) if Contains(code_retour, tonumber(status)) then self:debug(os.date() .. ' - status = ' .. status .. (code_retour[tonumber(status)])) end end function Contains(table, valeur) for key,value in pairs(table) do if (key == valeur) then return true end end return false end function QuickApp:onInit() self.http = net.HTTPClient({ timeout = 2000 }) self:setVariable("FreeSMS","") self:debug("onInit") end Utilisation: Remplir les champs par identifiant Free Mobile et votre clé d'identification ----------------------------------------------------- -- Paramètres utilisateur ----------------------------------------------------- local username = "IDENTIFIANT FREE" local password = "CLÉ IDENTIFICATION" Créer autant de boutons que souhaité ----------------------------------------------------- -- Paramètrages des boutons avec les messages à envoyer ----------------------------------------------------- function QuickApp:uimsg1OnR(event) self:debug("Message 1") self:sendmsg("Hello World!") end Voilà, c'est mon premier code officiel sur le forum je crois. Soyez indulgent. Je vous joints le fichier complet à adapter en fonction de vos besoins. FreeSMS.fqa
  22. https://www.ebay.fr/itm/FIBARO-FGHC3-Home-Center-3-Bedienfeld/353058037812?hash=item5233e62034:g:DsIAAOSwiI1en6Gm
  23. Sowliny

    Envoi de push... sur HC3

    Bonjour à toutes et tous, Je suis en train de refondre toutes mes scènes et plus particulièrement mes fonctions. L'une d'elles me sert pour l'envoi des push. J'ai effectué des tests tout fonctionnait - et depuis peu (maj en 5.030.45 en cause ?)b plus aucun push ne passe... ! J'utilise bien sûr la nouvelle syntaxe : fibaro.alert("push", {25}, "Hello Woolf !") J'ai vainement recherché des pistes dans les topics mais rien ne m'a permis de résoudre ce problème. Y a s'il une petite idée ? Merci d'avance
  24. Krikroff

    HC3 - 5.021.11

    A venir... What's new: Block Scenes Actions on the LED ring for FIBARO Walli series devices. Actions for Z-Wave thermostats. Cameras Redirecting to camera configuration after adding. Possibility of setting a custom icon. Climate Indicating the active mode of climate schedule. Dashboard Controlling the binarySwitch, multilevelSwitch and rollerShutter devices from the right sidebar. Displaying the current set temperature on the thermostat icon. Collapsing/expanding the rooms side menu. Devices Z-Wave removing mode available from the list of all devices. Displaying the battery level under the battery icon on the device list. Changed the default humidity range to 40-50%. Consistent configuration of various types of linked devices. Support for pending and failed associations. Support for the black box of FIBARO Heat Controller (FGT-001). Support for FIBARO RGBW Controller 2 (FGRGBW-442). Support for Z-Wave locks. Support for Z-Wave thermostats. Support for wind and rain sensors. General Downloading the current location of the gateway in https connection mode. Lua Scenes Possibility to download a scene trigger using the sourceTrigger object that triggered the scene. Added functions os.time, os.date and fibaro.sleep. Migration from HC2/HCL "Finish migration" button on the welcome screen restoring backup transferred from HC2/HCL. Network Disabled the possibility to turn off the Wi-Fi during the first configuration. Other Shorter loading time of device and room lists. Added loaders for loading lists in settings. Consistent display of entries in the debugger (Lua, Quick Apps) and the Z-Wave console. Collapsing/expanding the settings side menu. Added Czech language. Plugins Fixes and improvements regarding the Satel plugin. Integration of Satel alarm partitions with the FIBARO alarm. Profiles Display and control of climate zones. Display and control of alarm zones. Added icons related to weather and temperature. Quick Apps Added new device types: com.fibaro.genericDevice and com.fibaro.weather. Recovery Mode Displaying the inactive system version. Progress bar when uploading a local file. Displaying the time remaining to automatic reboot of the gateway. Rooms Indicating the default room on the list of rooms. VoIP Added the functionality description. Bug fixes: Access No refresh after synchronizing users. Remote support cannot be enabled via remote access. Backup The "restore with version" option does not download the correct software version. Instead of the selected local backup, the latest local backup is always restored. Number of scenes in backup is always equal 0. Block Scenes Unable to enter the time in the delay block. Lists of rooms and sections do not load. Active "run scene" button despite unsaved changes. Selected triggers disappear after reloading page. No suitable options for the type com.fibaro.barrier. Redundant fields in blocks for RGBW devices. No condition values displayed for Central Scene controllers. Forcing the watering from the scene causes a system error. Missing translations. Cameras Cannot display the advanced tab. Image path is composed incorrectly and the camera image is not displayed. Invalid default image refresh time. Climate Incorrect limits of minimum and maximum temperature. Zone temperature is not displayed in manual mode. Restarting the gateway when any partition is in Hold mode causes a system error. Dashboard Search does not work properly if entered a dot in the search box. Devices Unable to reconfigure a device added in security mode. No device polling button if polling is globally enabled. Doubled message about unsaved changes in device parameters. Errors in displaying the energy consumption of the device. No advanced settings section for Z-Wave locks. Changing the role of RGBW device requires page refresh to display properly. No icons for several types of sensors connected to the FIBARO Smart Implant. Cannot set the minimum and maximum RGBW slider value. Cannot reset advanced parameters to the default values. Invalid redirection to associated device. The Advanced tab is not displayed when added a scene with Central Scene event. USB powered device is marked as a battery device. The user added icon has an invalid path. Changing the device name is not applied in the notifications. Lack of support for the FIBARO Smart Implant device. Incorrect support of the Danfoss RS device. Diagnostics Unable to download the device template. Garden Setting is not displayed correctly on the days that the schedule does not apply to. Incorrect operation of sprinklers in a sequence. Lua Scenes Incorrect loading of the scene editor view. Errors in displaying the debugger. Network Changing the IP address or addressing mode does not work properly. Access Point is inactive after the recovery procedure. Notifications No filtering by type and priority. Notifications for linked devices do not work. Other Checkboxes do not display correctly when viewing on a tablet. Inconsistent icons and buttons on warning popups. Plugins Philips Hue devices are set to default light values after switching off and on. No weather data displayed on the YR Weather plugin preview tab. Quick Apps New device is always assigned to the default room. The ID of an existing item changes when adding a new item. The device view is not updating. No code scrolling possibility. Importing an unassigned device results in an error. Visual fixes. Recovery Mode The restore, repair and switch actions do not display statuses. Visual fixes. Rooms The section name does not change when you close the window. Update Retrying to download the update return an error. Z-Wave Unable to close the adding controller window. The mesh reconfiguration for the Z-Wave devices does not work. ... and many more!
  25. jjacques68

    [HC3] QuickApps pour IPX800 v3

    Pour ceux que ça intéresse : Les QA prennent tous leurs sens avec un IPX, c'est génial !! je partage : Principe ultra simple : Le QA permet de piloter la sortie de l'IPX. Le retour d'état de la sortie se fait via les messages PUSH de l'IPX. DANS LA HC3 : - il faut créer un utilisateur spécifique pour que l'IPX puisse se connecter à la HC3 (et prendre autre chose que le super user...) - il faut créer un QA avec comme type rôle Binary Swicth. - vous choisissez les icones qui vont bien, les différents réglages de notifications, la pièce, ... - Vous lui donnez un type (lights, sprinkler, ...) - vous créez 3 variables dans le QA : IP = adresse IP de l'IPX password = user:password encodé en base 64 (celui permettant de se connecter sur l'IPX) IpxOutNumber=N° de la sortie que vous voulez qu'il pilote - vous créez un label avec comme nom "LBL_State" (permettra de récupérer les éventuels messages d'erreur) et dans le code vous insérez cela : function QuickApp:onInit() self:debug("onInit") end ------------------------------------------------------------------------------------- -- Méthodes pouvant être appelées de partout ------------------------------------------------------------------------------------- function QuickApp:turnOn() self:Switch(self:getVariable("IpxOutNumber"),1) end function QuickApp:turnOff() self:Switch(self:getVariable("IpxOutNumber"),0) end ------------------------------------------------------------------------------------- -- Function pour actionner la sortie défini dans la variable ------------------------------------------------------------------------------------- function QuickApp:Switch(Num,State) self.http = net.HTTPClient({timeout=3000}) self.http:request("http://"..self:getVariable("IP").."/preset.htm?set"..Num.."="..State, { options = { headers = {['Authorization']='Basic '..self:getVariable("password")}, method = 'GET' }, success = function(response) self:updateView("LBL_State", "text", tostring(response.data)) end, error = function(err) self:updateView("LBL_State", "text", tostring(err)) end }) end ------------------------------------------------------------------------------------- -- Function pour réceptionner le retour d'état de la sortie ------------------------------------------------------------------------------------- function QuickApp:ReceiveState(status) self:debug(status) if status == 1 then self:updateProperty("value", true) else self:updateProperty("value", false) end end Dans l'IPX : les messages push de chaque sortie seront sous la forme : /api/callAction?deviceID=284&name=ReceiveState&arg1=1 en rouge = adresse IP de la HC3 en vert = le user:mot_de_passe (en clair) pour se connecter à la HC3 (avec l'utilisateur créé plus haut) en jaune = l'ID du QA que vous avez créé il ne faut pas oublier, dans la gestion des accès de la HC3, d'autoriser le user, créé spécifiquement plus haut, à utiliser le QA !!! pour piloter le QA depuis une scène en LUA : --pour le pilotage fibaro.call(284, "turnOn") --pour connaitre son status fibaro.getValue(284, "value") Divers : Pour créé rapidement d'autres QA, il suffit d'exporter le QA qui vient d'être créé (fichier .fqa) et de l'importer pour passer à une autre sortie. Il faudra alors, modifier la variable "IpxOutNumber" du QA. Attention de penser au droits d'accès pour ce nouveau QA du coup... Fichier DEMO : Demo_IPX.fqa
×