-
Compteur de contenus
26 087 -
Inscription
-
Dernière visite
-
Jours gagnés
1 302
Tout ce qui a été posté par Lazer
-
Je me permet d'intervenir, mais jamais de la vie tu ne vas couper l'alimentation générale de ta PAC via un relai, tu va tuer le compresseur en un rien de temps. Les PAC ça détester les coupures de courant. L'idée, c'est que le module relai ne serve qu'à piloter le circuit de contrôle. Et là les courants sont très faibles, le circuit de puissance ne passe pas par là. Je ne connais pas ta PAC, et en l'absence de schéma c'est difficile de se prononcer, mais il faut intervenir sur les fils de pilotage On/Off, surtout pas sur l'alimentation de la PAC. Et ce n'est pas toujours possible, sur ma PAC (modèle très basique) il n'y a pas de contact de contrôle, le pilotage se fait donc par infrarouge (avec la télécommande d'origine, ou via un module domotique Z-Wave Remotec)
-
Tu as raison @jojo et il faut mettre un limiteur de courant pour protéger le relai et ainsi allonger la durée de vie du module : https://www.amazon.fr/gp/product/B01DUHKQQ2/ Il faut le brancher en série entre la sortie Q du module, et le transformateur. Mais ça reste la meilleure solution, ainsi le transformateur ne sera pas alimenté 99% du temps, c'est plus écologique, meilleur pour le porte-feuille, et prolonge la durée de vie du transformateur (puisqu'il ne sera pas alimenté 99% du temps)
-
Ton pavé est un peu indigeste, mais j'ai bien l'impression que ton problème n'a rien à voir avec les interrupteurs mono et bistables. Le mieux est de faire le test dans interrupteur du tout, depuis la box domotique (Jeedom dans ton cas) Si le relai se ferme puis s'ouvre après 1s, c'est que tu as mal réglé la mesure de consommation et la temporisation. En effet, ce module détecte la mesure de courant du moteur, pour ouvrir les relais. Or là, il n'y a pas de consommation du tout (enfin si, mais négligeable) car on passe par des relais. Je ne me souviens plus de tête, mais il y a des paramètres pour ça. Regarde le topic, le sujet a certainement été évoqué. Autre chose : je n'utilise plus du tout ce montage, remplacé un temps par un module VRT-IP, puis définitivement par un Qubino Flush Shutter DC qui est juste parfait pour cet usage.
- 134 réponses
-
- DIY
- Volet roulant
-
(et 2 en plus)
Étiqueté avec :
-
Bienvenue sur le forum
-
@Yohan @Moicphil Vous savez ?
-
Home Center 3 présentée au CES 2020
Lazer a répondu à un(e) sujet de eric_le_belge dans Annonces et suggestions
Oui tu nous avait dit déjà. Moi je suis toujours sur l'organe memoriel de naissance. -
Home Center 3 présentée au CES 2020
Lazer a répondu à un(e) sujet de eric_le_belge dans Annonces et suggestions
Bah je vais les inclure pardi ! On verra bien.... et puis d'ici là Fibaro aura peut être fait évoluer les choses. -
Home Center 3 présentée au CES 2020
Lazer a répondu à un(e) sujet de eric_le_belge dans Annonces et suggestions
Oui j'ai même hésité à le mentionner... c'est la patient zéro. En Alsace comme par hasard -
Home Center 3 présentée au CES 2020
Lazer a répondu à un(e) sujet de eric_le_belge dans Annonces et suggestions
Bon en tout cas moi va pas falloir trop que je traine, mon HC2 a un cancer de la barrette RAM. Elle commence les plantages aléatoires, quand j'ai de la chance c'est juste un VD redémarré par le Watchdog, mais quand j'ai moins de chance c'est le HCServer (le process principal) entrainant la célèbre erreur 503. Heureusement que j'ai un watchdog externe sur mon NAS pour redémarrer la box. Si la tumeur se développe trop vite, je la passerai sur la table d'opérations pour procéder à l'ablation de la barrette en dégénérescence, mais pour l'instant ça a l'air de tenir, un coup de watch-chimio-dog-thérapie une fois tous les 15 jours en moyenne et elle repart. Mon objectif est toujours de migrer sur HC3 avant l'automne (début de la saison de chauffage où il y a le plus de scénarios qui s'enclenchent) -
Network Monitor Version 2.12 Ce Quick App pour HC3 permet de surveiller des équipements sur le réseau (local et Internet), et d'envoyer des notifications en cas de problème détecté. Cela va bien au-delà du simple ping réseau, car ce QuickApp permet de vérifier le bon fonctionnement des services (envoi d'une requête, et vérification de la réponse) Il s'agit de la v2, car il fait suite au Module Virtuel Network Monitor v1.x initialement développé pour HC2. Screenshot peu esthétique, en espérant que Fibaro propose rapidement de personnaliser l'apparence visuelle des QA. Cependant, ce n'est pas son rôle premier, l'objectif est bien de recevoir des notifications instantanées en cas de souci détecté : Configuration : Importer le QuickApp (fichier fqa) de façon habituelle sur la box HC3, puis changer les paramètres suivants dans l'onglet Variables : Notif_Users : ID ou Nom des utilisateurs à qui envoyer un email en cas d'échec d'envoi du SMS, séparés par des virgules. La liste des utilisateurs peut être récupérée dans le panneau Accès de la HC3, ou directement via l'API /api/users. Par exemple : Asterix, Obelix Notif_Mobiles : ID ou Nom des smartphones à qui envoyer une notification Push en cas d'échec d'envoi du SMS, séparés par des virgules. La liste des mobiles peut être récupérée via l'API /api/iosDevices. Par exemple : Nokia 3310, iPhone 42 Notif_SMS : Nom du QuickApp et nom de sa fonction qui sera appelée pour exécuter un code LUA externe, par exemple envoyer un SMS, ou un mesage via Telegram, ou autre service de notification. Ensuite, aller dans l'onglet "Modifier et prévisualiser", puis cliquer sur le bouton "Modifier" afin d'entrer dans l'éditeur LUA. Il faut éditer le tableau DEVICES dans le fichier CONFIG. Exemple : DEVICES = { {name = "Serveur SSH" , address = "192.168.1.1" , port = 22, protocol = "tcp" , timeout = 1, senddata = nil , retdata = "OpenSSH", retry = 1, interval = 30, notification = {"push", "email" }, vg = nil, conditions = nil}, {name = "Ubiquiti Unifi AP-AC-Pro" , address = "192.168.1.2" , port = 22, protocol = "tcp" , timeout = 1, senddata = nil , retdata = "SSH" , retry = 1, interval = 60, notification = {"push", "email", "sms"}, vg = nil, conditions = nil}, {name = "Ubiquiti Unifi Switch" , address = "192.168.1.3" , port = 22, protocol = "tcp" , timeout = 1, senddata = nil , retdata = "SSH" , retry = 1, interval = 60, notification = {"push", "email" }, vg = nil, conditions = nil}, {name = "Ubiquiti Unifi Controller" , address = "192.168.1.4" , port = 8443, protocol = "https", timeout = 2, url = "/manage/account/login" , retcode = 200, retdata = "UniFi Network" , retry = 1, interval = 60, notification = {"push", "email", }, vg = nil, conditions = nil}, {name = "Ubiquiti EdgeRouter" , address = "192.168.1.5" , port = 443, protocol = "https", timeout = 1, url = "/" , retcode = 200, retdata = "EdgeRouter" , retry = 1, interval = 30, notification = { "sms"}, vg = nil, conditions = nil}, {name = "Switch Cisco" , address = "192.168.1.6" , port = 80, protocol = "http" , timeout = 1, url = "/" , retcode = 200, retdata = "cisco" , retry = 1, interval = 30, notification = {"push", "email", "sms"}, vg = nil, conditions = nil}, {name = "Switch Netgear GS105Ev2" , address = "192.168.1.7" , port = 80, protocol = "http" , timeout = 1, url = "/login.cgi" , retcode = 200, retdata = "NETGEAR" , retry = 1, interval = 60, notification = {"push", "email" }, vg = nil, conditions = nil}, {name = "Switch Netgear GS108Tv2" , address = "192.168.1.8" , port = 80, protocol = "http" , timeout = 1, url = "/" , retcode = 200, retdata = "NETGEAR" , retry = 1, interval = 60, notification = {"push", "email" }, vg = nil, conditions = nil}, {name = "HP ProLiant Remote Access Card", address = "192.168.1.9" , port = 80, protocol = "http" , timeout = 1, url = "/login.html" , retcode = 200, retdata = "Remote Access Card" , retry = 1, interval = 60, notification = { "email" }, vg = nil, conditions = nil}, {name = "HP ProLiant Gen8 ILO" , address = "192.168.1.10" , port = 443, protocol = "https", timeout = 1, url = "/" , retcode = 200, retdata = "iLO" , retry = 1, interval = 60, notification = { "email" }, vg = nil, conditions = nil}, {name = "VMware ESXi" , address = "192.168.1.11" , port = 443, protocol = "https", timeout = 1, url = "/" , retcode = 200, retdata = "VMware ESXi" , retry = 1, interval = 60, notification = {"push", "email", "sms"}, vg = nil, conditions = nil}, {name = "Onduleur Eaton 5P" , address = "192.168.1.12" , port = 80, protocol = "http" , timeout = 1, url = "/" , retcode = 200, retdata = "Network Management Card", retry = 1, interval = 60, notification = {"push", "email" }, vg = nil, conditions = nil}, {name = "Synology DiskStation" , address = "192.168.1.13" , port = 5000, protocol = "http" , timeout = 5, url = "/" , retcode = 200, retdata = "DiskStation" , retry = 1, interval = 30, notification = {"push", "email", "sms"}, vg = nil, conditions = nil}, {name = "Serveur Web Apache" , address = "192.168.1.14" , port = 80, protocol = "http" , timeout = 1, url = "/" , retcode = 200, retdata = "Apache" , retry = 1, interval = 60, notification = { "email" }, vg = nil, conditions = nil}, {name = "GCE Eco-Devices" , address = "192.168.1.15" , port = 80, protocol = "http" , timeout = 1, url = "/index1.htm" , retcode = 200, retdata = "Eco Devices" , retry = 1, interval = 30, notification = {"push", "email", "sms"}, vg = nil, conditions = nil}, {name = "GCE IPX800 v4" , address = "192.168.1.16" , port = 80, protocol = "http" , timeout = 1, url = "/user/index2.htm" , retcode = 200, retdata = "IPX800" , retry = 1, interval = 30, notification = {"push", "email", "sms"}, vg = nil, conditions = nil}, {name = "Caméra Hikvision" , address = "192.168.1.17" , port = 80, protocol = "http" , timeout = 1, url = "/doc/page/login.asp" , retcode = 200, retdata = "login" , retry = 1, interval = 30, notification = {"push", "email", "sms"}, vg = nil, conditions = nil}, {name = "Caméra Foscam" , address = "192.168.1.18" , port = 88, protocol = "http" , timeout = 1, url = "/" , retcode = 200, retdata = "IPCam Client" , retry = 1, interval = 60, notification = {"push", "email", "sms"}, vg = nil, conditions = { vg = "Vacances" , operator = "==", value = "0"}, }, {name = "JPI SMS Gateway" , address = "192.168.1.19" , port = 8080, protocol = "http" , timeout = 10, url = "/JPI/" , retcode = 200, retdata = "JPI" , retry = 6, interval = 30, notification = {"push", "email" }, vg = nil, conditions = { vg = "Monitor_JPI" , operator = "==", value = "0"}, }, {name = "FHEM" , address = "192.168.1.20" , port = 8083, protocol = "http" , timeout = 1, url = "/fhem" , retcode = 401, retdata = "" , retry = 1, interval = 30, notification = {"push", "email", "sms"}, vg = nil, conditions = nil}, {name = "HA Bridge" , address = "192.168.1.21" , port = 80, protocol = "http" , timeout = 1, url = "/#!/" , retcode = 200, retdata = "HA Bridge" , retry = 1, interval = 60, notification = {"push", "email" }, vg = nil, conditions = nil}, {name = "Google" , address = "www.google.fr", port = 80, protocol = "http" , timeout = 1, url = "/" , retcode = 200, retdata = "Recherche Google" , retry = 1, interval = 1, notification = { "sms"}, vg = nil, conditions = nil}, {name = "Yamaha MusicCast" , address = "192.168.1.22" , port = 80, protocol = "http" , timeout = 1, url = "/YamahaExtendedControl", retcode = 200, retdata = "response_code" , retry = 1, interval = 60, notification = { "email" }, vg = nil, conditions = nil}, {name = "Projecteur Epson EH-TW9300" , address = "192.168.1.23" , port = 80, protocol = "http" , timeout = 1, url = "/" , retcode = 404, retdata = "Not Found" , retry = 1, interval = 60, notification = { "email" }, vg = nil, conditions = { vg = "Vacances" , operator = "==", value = "1"}, }, {name = "Nvidia Shield TV" , address = "192.168.1.24" , port = 8008, protocol = "http" , timeout = 1, url = "/" , retcode = 404, retdata = "" , retry = 1, interval = 60, notification = { "email" }, vg = nil, conditions = { operator = "any", conditions = { { profil = "" , operator = "==", value = "Vacances"}, { operator = "all", conditions = { { vg = "Chauffage", operator = "==", value = "Été"}, { operator = "any", conditions = { { profil = "", operator = "==", value = "Nuit"}, { profil = "", operator = "==", value = "Absent"} } } } } } } }, } Cela risque d'être peu lisible sur votre écran, dans ce cas il faut utiliser l'ascenseur horizontal pour faire défiler, ou alors insérer des sauts de lignes) Cependant j'aime bien cette présentation qui se rapproche d'un tableau et est parfaitement lisible sur un grand écran. Ce QuickApp est relativement complexe à paramétrer, car les options pour DEVICES sont nombreuses : name : obligatoire : string : Nom de l'équipement qui apparaitra dans la notification address : obligatoire : string : Adresse IP ou nom DNS de l'équipement à monitorer port : facultatif si protocole http/https | obligatoire si protocole tcp : Port TCP. Dans le cas des connexions HTTP et HTTPS, si ce n'est pas spécifié, le port par défaut sera utilisé (80 pour HTTP, et 443 pour HTTPS) protocol : obligatoire : string : "http" | "https" | "tcp" : ces 3 protocoles sont supportés. Le mode tcp est un mode raw, c'est à dire que les données sont lues/écrites telles quelles sur la socket. login : facultatif si protocole http/https | inutile si protocole tcp : string : Nom d'utilisateur à utiliser dans l'en-tête de la connexion HTTP/HTTPS. password : facultatif si protocole http/https | inutile si protocole tcp : string : Mot de passe à utiliser dans l'en-tête de la connexion HTTP/HTTPS. timeout : facultatif : integer : Valeur par défaut = 1 seconde : Durée autorisée de la connexion en secondes avant réponse du client. Doit être augmenté si le client met trop de temps à répondre. url : obligatoire si protocole http/https | inutile si protocole tcp : string : URL de la page Web à charger retcode : obligatoire si protocole http/https | inutile si protocole tcp : integer : code de retour HTTP attendu (200 la plupart du temps) senddata : inutile si protocole http/https | facultatif si protocole tcp : string : chaine de caractère à envoyer lors de l'établissement de la connexion TCP. Cela peut être nécessaire pour certains équipements qui n'envoient pas de réponse avant d'avoir reçu une instruction. retdata : facultatif : string : chaine de caractère recherchée dans la réponse retry : facultatif : integer : valeur par défaut = 1 : nombre de tentatives de connexion à effectuer. Augmenter cette valeur peut être utile pour certains équipements dont la connexion est instable, notamment via Wi-Fi. delay : facultatif : integer : valeur par défaut = 0 : délay en seconde avant d'effectuer une nouvelle tentative de connexion. Augmenter cette valeur peut être utile si l'équipement met un certain temps avant d'être de nouveau joignable après une déconnexion. interval : facultatif : integer : valeur par défaut = 1 minute : intervalle en minutes entre 2 vérifications. J'ai testé jusqu'à 1440 minutes, soit 24 heures. notification : obligatoire : table : "push" | "email" | "sms" | "vg" | "service" : type de notification à envoyer, configurée préalablement. vg : facultatif : string : nom facultatif d'une variable globale à incrémenter, celle-ci sera automatiquement créée si nécessaire. Elle est remise à 0 dès que l'appareil surveillé est de nouveau disponible. conditions : facultatif : table : permet d'annuler le monitoring d'un équipement particulier en fonction de conditions sur des variables globales. Les conditions sont combinables avec des instructions booléennes "any" (= or) et "all" (= and). La syntaxe est inspirée du moteur de triggers des scènes sur HC3. On peut utiliser des conditions de vg ou de profil. Téléchargement : Nouvelle installation : Network_Monitor_v2.12.fqa Mise à jour : Fichier main : Network Monitor v2.12.lua Fichier CONFIG : Network Monitor - Config Tuto.lua Fichier tools : Library - tools v2.20.lua Fichier Notifications : Library - Notifications v2.2.lua
-
Home Center 3 présentée au CES 2020
Lazer a répondu à un(e) sujet de eric_le_belge dans Annonces et suggestions
ça on est bien d'accord De toute façon l'éditeur Web LUA proposé par Fibaro est tellement limité (même si largement mieux que celui de la HC2) mais par contre, tu perds tout le reste depuis la dernière sauvegarde : inclusion des modules Z-Wave, réglage des paramètres des modules, organisation des modules dans les pièces, historique des températures et consommations (même si là encore j’externalise tout sur DomoCharts), la dernière mise à jour de firmware, etc.... Après ça ne m'est pas arrivé en situation "normale" quand même, j'avais tout de même développé avec mes pieds des QA et Scènes, on voit le résultat ! Cela dit on peut imaginer un QA qui fonctionne apparemment bien, mais suite à une condition non prévue, part en boucle infinie et fait planter la box. Le soir (ou le matin...), l'utilisateur aura une drôle de surprise en retrouvant sa box à une version antérieure. Coté positif : la box sera fonctionnelle (c'est peut être mieux que la fameuse erreur 503 et les "boules bleues de la mort"), surtout si on est à distance sans possibilité d'intervenir manuellement sur le bouton Recovery. -
Home Center 3 présentée au CES 2020
Lazer a répondu à un(e) sujet de eric_le_belge dans Annonces et suggestions
OK Mais moi j'en ai bien eu des plantages. Boucle while true do dans une scène qui tourne en boucle sans fin (à cause d'une erreur d'interface chaise clavier), le box ne répond plus, et elle reboote automatiquement au bout de quelques minutes. Ce qui me fait dire qu'il y a un bien un watchdog qui surveille et redémarre automatiquement. Comme dans les dernières versions de la HC2 d'ailleurs. Cela dit, comme pour mon problème de plantage de QA qui fait cracher la box que j'ai remonté il y a quelques jours (s'ensuit un recovery automatique sur la dernière sauvegarde), je trouve dommage que Fibaro se contente de faire rebooter la box (et procéder à un recovery si reboot en boucle) plutôt que de tenter d'isoler le QA/Scène problématique. Il faudrait une sorte de démarrage en mode sans-échec comme sur les vieilles versions de Windows, afin de redémarrer et laisser la possibilité à l'utilisateur de supprimer manuellement le QA/Scène fautif. Parce que le recovery automatique, franchement c'est dangereux.... déjà rien que le reboot automatique c'est pas top. -
Home Center 3 présentée au CES 2020
Lazer a répondu à un(e) sujet de eric_le_belge dans Annonces et suggestions
Dans ce cas attends que les QA développés par la communauté arrivent. -
Home Center 3 présentée au CES 2020
Lazer a répondu à un(e) sujet de eric_le_belge dans Annonces et suggestions
Je n'aurais pas dit ça.... Je pense plutôt que Fibaro détecte quand une scène ne répond pas au bout de X minutes (ce qui est le cas avec un while true do) alors le watchdog provoque un reboot de la box, par sécurité. Alors effectivement la philosophie des scènes a complètement changé par rapport à ce qu'on a connu sur HC2. Mais il faut dire qu'on avait donné beaucoup d'importance aux scènes à cause des limitations des Modules Virtuels. Sur HC3, d'origine on a des Quick Apps beaucoup plus évolués, nous permettant de limiter l'usage des scènes à un vrai rôle de scénario pur => si événement, alors action. Espérons quand même que cela évolue et qu'on retrouve un peu plus de liberté sur les scènes.... ne serait-ce que pour faire fonctionner la scène-super-scénario GEA. @Sowliny je pense quand même que tu as un souci avec ta box... une scène ou un QA qui fait n'importe quoi et consomme tout ton CPU. Je n'ai jamais rencontré de problème de saturation de coeurs sur mon HC3, ils sont même très très bas. J'avais posé un graph déjà. -
Bienvenue sur le forum
-
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()
-
"circuit imprimé" facile - plaques à bandes (ou trous)
Lazer a répondu à un(e) sujet de Sowliny dans DIY (Do It Yoursel)
Quand on sait qu'on a pas mal de ce genre de petits projets DIY à venir, il faut tout commander sur Aliexpress. Les délais de livraison peuvent être ultra longs (jusqu'à 2 mois et demi pendant le confinement...) mais les tarifs sont imbattables. Sinon c'est plutôt 15 jours / 1 mois en moyenne (avec un record à 9 jours dans mon historique) RS et Farnell c'est pour les pros, commande unitaire pour du prototypage, livré le lendemain, mais c'est juste hors de prix.... -
"circuit imprimé" facile - plaques à bandes (ou trous)
Lazer a répondu à un(e) sujet de Sowliny dans DIY (Do It Yoursel)
Suffit de l'imprimer en 3D https://www.thingiverse.com/thing:2144441 L'afficheur 7 segments n'est pas cher parce qu'il est tout nu. L'objectif c'est de concevoir tout ce qui va autour. Sinon il existe des afficheurs plus cher avec leur propre boitier. -
"circuit imprimé" facile - plaques à bandes (ou trous)
Lazer a répondu à un(e) sujet de Sowliny dans DIY (Do It Yoursel)
J'en étais sûr, j'ai même failli te conseiller V33 ton Acajou -
"circuit imprimé" facile - plaques à bandes (ou trous)
Lazer a répondu à un(e) sujet de Sowliny dans DIY (Do It Yoursel)
Oui c'est sûr, mais ce n'est pas le seul boitier que j'ai fait, et puis ça sert à plein de choses. Au final la boitier coute environ 1€ à produire, c'est à dire rien du tout. Cherche "Vernis Tropicalisation" sur Amazon, y'a plein de bombes -
"circuit imprimé" facile - plaques à bandes (ou trous)
Lazer a répondu à un(e) sujet de Sowliny dans DIY (Do It Yoursel)
Hum, @Sowliny tu as édité ton message plus haut. Autant je suis parfaitement en phase sur la lute contre les petites bêtes, autant je ne suis pas d'accord sur la lute contre l'humidité. Il faut tropicaliser le circuit si tu veux le protéger, c'est la seule solution fiable... c'est pas pour rien que c'est pratiqué dans l'industrie. Une bonne couche de vernis, c'est imparable (et ça protège mêmes des petites bêtes en prime... dès fois qu'elles arrivent finalement par rentrer) -
"circuit imprimé" facile - plaques à bandes (ou trous)
Lazer a répondu à un(e) sujet de Sowliny dans DIY (Do It Yoursel)
Même en ayant une boite étanche, tu n'empêcheras pas l'humidité d'oxyder les pistes de cuivres non protégées. Il vaut mieux tropicaliser le circuit avec un vernis. Pour moi, la boite étanche hermétique sert à 2 choses : - empêcher les petites bêtes de rentrer dedans (qui font court-circuit) - empêcher l'eau (la pluie) de rentrer dedans (qui fait cout-circuit également) D'ailleurs "étanche" ne veut rien dire. Étanche dans l'absolu, ça n'existe pas. C'est étanche à certaines conditions. Tout cela est standardisé par les normes de protection IP. Sinon pour un boitier propre, il faut se mettre à l'impression 3D, pour se faire des ouvertures propres au 1/10 de millimètre près Exemple, non étanche car il y a volontairement des ouïes de ventilation (il y a un module Qubino pour volet roulant avec son alimentation 24V dedans). Fixation par vis dans inserts métalliques en laiton (donc vissable/dévissable à volonté)... sur la photo on voit que les vis ne sont pas positionnées. Connexion électrique propre avec prise C7 et cordon standard sur le coté. -
Pour les diodes à l'extinction, je t'avoue que je ne sais pas trop... je n'éteins jamais ma box (onduleur, région parisienne, orages rares)
-
La configuration usine de la HC2, c'est d'être en DHCP. Cette adresse statique 192.168.81.1 est celle qui est forcée lors qu'on démarre la box en Recovery par un appui long sur le bouton arrière (par opposition à l'appui court) Cela est utile par exemple quand on ne sait pas interroger son serveur DHCP pour connaitre l'IP attribuée, ou qu'elle a été forcée en IP statique sur une IP inconnue (cas typique de la box achetée d'occasion) Rappel : Quand tu as arrêté ta box, tu es passé par l'interface Web/API, ou via un appui sur le bouton ? Même question pour le redémarrage, as-tu bien fait un appui court uniquement ? C'est une piste. Si par contre tu as bien fait un appui court pour l'arrêt et le redémarrage, alors il y a un mystère.
-
Sur IPX800 v4 et EDRT2 tu n'as pas besoin d'authentification pour interroger l'API, tout passe par le keyapi=xxx passé en paramètre dans l'URL.