mprinfo Posté(e) le 23 janvier 2022 Auteur Signaler Posté(e) le 23 janvier 2022 Nouvelle version 1.10 Ajout d'un bouton pour le reboot de l'udm correction du crash qu QA toutes les 60 mm Ajout du X-CSRF-Token indispensable pour les POST et les PUT Corrections de bugs mineurs Fichier QA : UDM_Pro_V1.10.fqa 2
TonyC Posté(e) le 24 janvier 2022 Signaler Posté(e) le 24 janvier 2022 Merci Monsieur @mprinfo C'est dowlnloadé et installé et ça marche nickel !
mprinfo Posté(e) le 24 janvier 2022 Auteur Signaler Posté(e) le 24 janvier 2022 @tonyC parfait j'ai un QA pour faire un On/Off sur un port POE si tu veux 1
Lazer Posté(e) le 24 janvier 2022 Signaler Posté(e) le 24 janvier 2022 Pourquoi un QA ? Si je peux me permettre, 2 suggestions : - ajouter une fonction au QA existant qui prend 2 paramètres : numéro du port, et statut true/false. Comme ça elle peut être appelée depuis n'importe où, et même depuis des boutons que tu ajoutes dans le QA existant - encore mieux faire des modules enfants de type binarySwitch => intégration native HC3
mprinfo Posté(e) le 24 janvier 2022 Auteur Signaler Posté(e) le 24 janvier 2022 @lazer bien sur que tu peux te permettre et surtout n'hésite pas J'y ai pensé, je voulais mettre des childs pour switcher les ports POE et aussi des childs pour la consommation de chaque POE active Le probléme c'est que j'ai beaucoup de mal avec les childs, avec les class j'y comprends rien Ensuite ce QA est au niveau de l'OS unifi je n’interroge pas le controleur. Donc si une personne qui n'a pas d'udm ça rend la chose plus compliqué l'autre soucis si tu as plusieurs switch POE il faut gérer tout cela c'est pas insurmontable mais çà commence a être chaud Pour modifier un port POE il faut récupérer le profil de tout les ports du switch puis ensuite faire un PUT et la les childs pour un même switch serait intéressant En plus on doit via l'adresse mac du switch récupérer le ID_profil afin d'avoir l'url pour le PUT voila le code pour faire cela - By MPRInfo -- Version 0.20-- UDM Pro SE et UDM Pro gestion des ports POE-- Date 24/01/2022-------------------------------------------------------------------------------------------------------------------------- connection au controleueur et recupération du cookie ------------------------------------------------------------------------------------------------------------------------function QuickApp:loginUnifi()if self.cookie == nil then self.http:request("https://"..self.controller..":443/api/auth/login", { options = { checkCertificate = false, method = 'POST', headers = {["content-type"] = "application/json",}, data = json.encode({['username'] = self.login,['password'] = self.password})}, success = function(response)--print("status = ", response.status)--print("response",json.encode(response.data))--print("['Set-Cookie'] = ", response.headers['Set-Cookie'])--print("['X-CSRF-Token'] = ", response.headers['X-CSRF-Token'])if response.status == 200 then self.cookie = response.headers['Set-Cookie'] self.CSRF = response.headers['X-CSRF-Token'] self:trace("X-CSRF-Token = ", self.CSRF)--self:debug("loginUnifi() Connecté")--self:debug("Cookie = ", self.cookie)endend, error = function(error) self:error("loginUnifi() Erreur: ", json.encode(error))end})endend-------------------------------------------------------------------------------------------------------------------------- Mise a jour du profil des ports------------------------------------------------------------------------------------------------------------------------function QuickApp:SaveProfilPorts()--print("----------------------------------------------------------- SaveProfilPorts()")local dataProfil = {["port_overrides"] = self.POE_Profiles}if self.cookie ~= nil then self.http:request(self.URL.."rest/device/"..self.id, { options = { checkCertificate = false,--method = 'POST', method = 'PUT', headers = {["content-type"] = "application/json",["Accept"] = "application/json",['Cookie'] = self.cookie,['X-CSRF-Token']=self.CSRF}, data = json.encode(dataProfil)}, success = function(response)--print("sucess", json.encode(response))--print("response.status", response.status)end, error = function(error) self.cookie = nil self:error("SaveProfilPorts() échoué: ", json.encode(error))end})end end-------------------------------------------------------------------------------------------------------------------------- Recupération du profil des ports POE------------------------------------------------------------------------------------------------------------------------function QuickApp:LoadProfilPorts()--print("----------------------------------------------------------- LoadProfilPorts()")if self.cookie ~= nil then self.http:request(self.URL.."stat/device", { options = { checkCertificate = false, method = 'GET', headers = {["content-type"] = "application/json",["Accept"] = "application/json",['Cookie'] = self.cookie}}, success = function(response) --print("response.status", response.status)--print(json.encode(response.data))if response.status == 200 thenlocal POE_Port = tonumber(self:getVariable("Port_POE"))local POE_Profil = json.decode(response.data)if POE_Profil['meta']['rc'] == "ok" then -- Si reponse OK--self:trace("Nombres devices UNIFI : "..#POE_Profil["data"])for i=1,#POE_Profil["data"] do -- Scan des devices UNIFI-- Recherche du profil du Switch avec la MAC if POE_Profil["data"][i]["mac"] == self:getVariable("MAC_Switch") then -- Recherche du profil du Switch avec la MAC--self:trace(i.." - "..POE_Profil["data"][i]["mac"].." - "..POE_Profil["data"][i]["ip"]) self.id = POE_Profil["data"][i]["device_id"] -- ID du profile du switch self:trace("Nombres ports Switch : "..#POE_Profil["data"][i]["port_overrides"])-- si auto alors off sinon auto alors auto if POE_Profil["data"][i]["port_overrides"][POE_Port]["poe_mode"] == "auto" then POE_Profil["data"][i]["port_overrides"][POE_Port]["poe_mode"] = "off" self:trace(POE_Profil["data"][i]["ip"].." - Port POE : "..POE_Port.." - Off") self:updateProperty("value", false)else POE_Profil["data"][i]["port_overrides"][POE_Port]["poe_mode"] = "auto" self:trace(POE_Profil["data"][i]["ip"].." - Port POE : "..POE_Port.." - Auto") self:updateProperty("value", true)end--print(POE_Profil["data"][i]["port_overrides"][POE_Port]["port_idx"]) self.POE_Profiles = POE_Profil["data"][i]["port_overrides"] -- Recupération du profil (tout les ports) endend self:SaveProfilPorts()endendend, error = function(error) self.cookie = nil self:error("LoadProfilPorts() échoué: ", json.encode(error))end})end end-------------------------------------------------------------------------------------------------------------------------- boucle principale ------------------------------------------------------------------------------------------------------------------------function QuickApp:mainLoop()--- frequency self.frequency = self:getVariable("frequency") assert(self.frequency ~= "", "la fréquence n'est pas définie") self.frequency = tonumber(self.frequency) assert(self.frequency ~= nil, "la fréquence n'est pas un nombre")--- login self.login = self:getVariable("login")--- password self.password = self:getVariable("password")--- IP URL self.controller = self:getVariable("IP_UDM_Pro") self.URL = "https://"..self.controller..":443".."/proxy/network/api/s/default/" self.http = net.HTTPClient({ timeout = 3000 }) self:loginUnifi() fibaro.setTimeout(4*1000, function() self:LoadProfilPorts()end) fibaro.setTimeout(self.frequency * 1000/30, function()--self:mainLoop()end)end----------------------------------------------------------------------------------------------------------------------- Initialisation du QA---------------------------------------------------------------------------------------------------------------------function QuickApp:onInit()-- __TAG = "QA_UDM_Pro_POE_" .. plugin.mainDeviceId self:updateProperty("log", "Port: "..self:getVariable("Port_POE"))end----------------------------------------------------------------------------------------------------------------------- Gestion des bouton turnOn et turnOff---------------------------------------------------------------------------------------------------------------------function QuickApp:turnOn()--self:debug("binary switch turned on") self:updateProperty("value", true) self:mainLoop()endfunction QuickApp:turnOff()--self:debug("binary switch turned off") self:updateProperty("value", false) self:mainLoop() end
TonyC Posté(e) le 25 janvier 2022 Signaler Posté(e) le 25 janvier 2022 Il y a 23 heures, mprinfo a dit : @tonyC parfait j'ai un QA pour faire un On/Off sur un port POE si tu veux C'est top ça ! A que oui que je suis intéressé, à quand la v2 Plus sérieusement, je veux bien que tu me files ta version même si elle doit être customisé, pour l'instant ça fera le job. L'ubiquiti à commencé à faire des petits chez moi tous les switch y sont passés je vais même tester leur cam, j'en reçois une demain pour tester, si ça fonctionne bien je réfléchirai même à renouveler le parc, enfin mollo quand même car à 500 boules la cam ça pique un peu.
mprinfo Posté(e) le 25 janvier 2022 Auteur Signaler Posté(e) le 25 janvier 2022 @toniyC voila pour le QA UDM_Pro_-_POE_On_OFF_v0.3.fqa Attention c'est une version stable mais qui n'a aucune vérification en cas d'erreur, a voir aussi pour la mise a jour de l'affichage la fonction On/off ce fait via la fonction inversement donc si auto -> off et si off -> auto j'ai pas fais un filtre sur le numéro de port sur l'udm ils sont dans l'ordre donc a voir si cela fonctionne sur un switch poe enfin si c'est le bon port qui est actionné pour pouvoir modifier un port il faut passé par un profils "port_overrides" donc on récupère une table sur le switch"port_overrides" On modifie la valeur "poe_mode" sur auto ou off La je n'ai fais que pour un port mais pour un même switch on pourrait faire une table avec plusieurs ports Il faut aussi récupère Id_profils du switch car on en aura besoin pour l'url du PUT Pour les caméras je préfère rester chez hikvision même si les prix on augmenté chez aliexpress et surveillance station de plus le QA de @lazer et pas trop mal J'ai vu je sais plus ou que l'udm qu'avec un nombre important de caméra avait tendance à ramer. Il faudrait voir avec @krikroff qui a il me semble des caméras unifi. Moi j'attends un bon prix sur un switch USW-48-Pro Poe ou alors je prendrais un 48 ports non poe et un petit switch unifi poe a voir au niveau de la consommation électrique le plus avantageux des 2
TonyC Posté(e) le 25 janvier 2022 Signaler Posté(e) le 25 janvier 2022 Merci pour le Qa @mprinfo, je vais l'adapter car mes POE ne sont pas ce de l'UDM mes ceux du USW-24-Pro + ceux d'un autre switch dans le garage. Question caméra, je n'en n'ai pas des centaines, aucune à l'intérieur et 6 à l'extérieur il m'en faudrait un 7ème. Donc ça reste raisonnable question charge sur l'UDM qui doit je pense pouvoir en encaisser plus. Actuellement je suis chez Dahua, j'aime vraiment la qualité, mais j'en ai déjà cramé 3 avec des mises à jour dont une hier, je ne sais jamais si j'ai acheté des versions chinoises ou pour le marché extérieur. Et manque de peau parfois je suis trompu Il y a bien des astuces lorsqu'elles sont brickées pour les réanimer, a l'occase faudrait que je pige comment ça marche. En tout cas merci beaucoup pour le partage, je te tiendrai au jus pour te dire si j'arrive à piloter quelque chose avec ma conf.
mprinfo Posté(e) le 25 janvier 2022 Auteur Signaler Posté(e) le 25 janvier 2022 Aucun soucis pour les switchs poe il faut juste mettre l'adresse mac du switch le QA fait le resteJ'ai juste un doute sur l'ordre des ports dans la table. Donc si c'est pas le bon port qui s'active j'ai déjà la solution Envoyé de mon BLA-L29 en utilisant Tapatalk 1
mprinfo Posté(e) le 25 janvier 2022 Auteur Signaler Posté(e) le 25 janvier 2022 Par contre si tu t'y connais en childs tu pourrais ajouter un child avec la consommation du port sa serait topÇa fait trop longtemps que j'ai pas touché au lua est je ne me sens pas capable de faire un code assez propre pour les childs Envoyé de mon BLA-L29 en utilisant Tapatalk
TonyC Posté(e) le 25 janvier 2022 Signaler Posté(e) le 25 janvier 2022 Si tout est déjà prévu pour gérer des switches externes c'est cool ! J'ai déjà mis en œuvre des QAs avec childs, je regarderai pour forker une version avec. Faudra juste pas être trop pressé, en ce moment je fais le minimum syndical question HA, j'ai crashé une hc3 slave il y 3 semaines et j'ai même pas encore tout remonté, je suis une grosse feignasse Mais promis je vais regarder ça ! 1
mprinfo Posté(e) le 25 janvier 2022 Auteur Signaler Posté(e) le 25 janvier 2022 Pour tes switches tu as utilisé le sfp+ pour les relier ?Moi je vais sûrement prendre des sfp+ fibre car à priori c'est 5w de moins par modules Envoyé de mon BLA-L29 en utilisant Tapatalk
TonyC Posté(e) le 25 janvier 2022 Signaler Posté(e) le 25 janvier 2022 (modifié) Non pour l'instant c'est un sable câble ethernet. le switch est un meuble dans le salon qui a des portes coulissantes je n'ai pas de module sfp pour tester mais j'ai peur qu'ils soient trop longs et qu'ils gênent la coulisse des porte du meuble. Je vais construire une extension qui devrait commencer en septembre ou octobre, je vais y prévoir un endroit pour y mettre tout mon fatras, mais c'est pas gagné car va falloir tout recâbler, je pleur déjà. Sinon j'ai commencé à tester le QA, alors la commande du port 1 pilote le port 10, ça ma directement coupé le switch sur lequel il y a la HC3 master lorsque je mets un autre port que le 1, jai un plantage du QA. Pas grave c'est déjà une bonne base, je regarde comment c'est fait mais avoir une doc ça aiderait quand même un peu, je json retourné est juste immense !!! Modifié le 25 janvier 2022 par TonyC
mprinfo Posté(e) le 25 janvier 2022 Auteur Signaler Posté(e) le 25 janvier 2022 C'est normal tu as beaucoup de devices unifiLa on récupère toutes les donnés du matos unifiRegarde comment je filtre à niveau de la macSi tu mets un print i tu auras l'index de ton switchPour l'histoire du mauvais port c'est assez simple à résoudre. J'avais justement un doute sur ce type d'erreurAutrement tu copies le json sous notepad est tu le mets en forme avec json.viewAutrement je ferai cela demain soirEnvoyé de mon BLA-L29 en utilisant Tapatalk
TonyC Posté(e) le 25 janvier 2022 Signaler Posté(e) le 25 janvier 2022 Oui c'est très lisible jusqu'à l'isolement du switch par sa mac, c'est un peu après que je coince pour l'instant mais je commence à mettre mon nez dedans, bon c'est pas dit que je ne sois pas au même niveau dans 1 semaine
mprinfo Posté(e) le 25 janvier 2022 Auteur Signaler Posté(e) le 25 janvier 2022 Après je récupère id du profil pour le mettre à url du putEnsuite je récupère le table profil des portsJe sais plus le nom exact La table contient autant de table que le nombres de ports du switchÀ l'intérieur de chaque table tu as les infos du portSimple quoi Envoyé de mon BLA-L29 en utilisant Tapatalk
mprinfo Posté(e) le 25 janvier 2022 Auteur Signaler Posté(e) le 25 janvier 2022 C'est cette table que je converti en json pour le put self.POE_Profiles = POE_Profil["data"](i) ["port_overrides"]
TonyC Posté(e) le 25 janvier 2022 Signaler Posté(e) le 25 janvier 2022 (modifié) Je pige pas l'histoire du profile en fait, tu as très probablement raison de l'utiliser, mais pourquoi ne pas passer directement de ma mac aux ports ? puis idem dans le put. Modifié le 25 janvier 2022 par TonyC
mprinfo Posté(e) le 25 janvier 2022 Auteur Signaler Posté(e) le 25 janvier 2022 Par la mac tu peux juste faire un refresh de portLa on doit fait un dépassement de profil comme sur l'interface graphique du contrôleur d'ailleurs Envoyé de mon BLA-L29 en utilisant Tapatalk
TonyC Posté(e) le 25 janvier 2022 Signaler Posté(e) le 25 janvier 2022 Bon suis pas rendu Je vais tracer le code pour mieux capter la logique, t'as l'air d'y avoir déjà consacré pas mal de temps et là j'ai quelques trains de retard. Je lâche pas l'affaire l
mprinfo Posté(e) le 25 janvier 2022 Auteur Signaler Posté(e) le 25 janvier 2022 je viens d'allumer mon ordi voila la table [{ "poe_mode": "auto", "op_mode": "switch", "autoneg": true, "name": "Port 1", "port_idx": 1, "full_duplex": false, "port_security_mac_address": [], "portconf_id": "61e19e1edfde79156707c912", "speed": 10 }, { "poe_mode": "off", "op_mode": "switch", "autoneg": true, "name": "Port 2", "port_idx": 2, "full_duplex": true, "port_security_mac_address": [], "portconf_id": "61e19e1edfde79156707c912", "speed": 1000 }, { "poe_mode": "auto", "name": "Port 3", "port_idx": 3, "portconf_id": "61e19e1edfde79156707c912", "op_mode": "switch", "full_duplex": true, "autoneg": true, "speed": 1000 }, { "poe_mode": "auto", "name": "Port 4", "port_idx": 4, "portconf_id": "61e19e1edfde79156707c912", "op_mode": "switch", "full_duplex": true, "autoneg": true, "speed": 1000 }, { "poe_mode": "auto", "name": "Port 5", "port_idx": 5, "portconf_id": "61e19e1edfde79156707c912", "op_mode": "switch", "full_duplex": true, "autoneg": true, "speed": 100 }, { "poe_mode": "auto", "name": "Port 6", "port_idx": 6, "portconf_id": "61e19e1edfde79156707c912", "op_mode": "switch", "full_duplex": true, "autoneg": true, "speed": 100 }, { "poe_mode": "auto", "name": "Port 7", "port_idx": 7, "portconf_id": "61e19e1edfde79156707c912", "op_mode": "switch", "full_duplex": true, "autoneg": true, "speed": 100 }, { "poe_mode": "auto", "op_mode": "switch", "autoneg": true, "name": "Port 8", "port_idx": 8, "full_duplex": true, "port_security_mac_address": [], "portconf_id": "61e19e1edfde79156707c912", "speed": 100 }, { "name": "Port 9", "port_idx": 9, "speed": 1000, "op_mode": "switch", "portconf_id": "61e19e1edfde79156707c912", "full_duplex": true, "autoneg": true }, { "name": "SFP+ 1", "port_idx": 10, "speed": 1000, "op_mode": "switch", "portconf_id": "61e19e1edfde79156707c912", "full_duplex": true, "autoneg": true }, { "name": "SFP+ 2", "port_idx": 11, "speed": 1000, "op_mode": "switch", "portconf_id": "61e19e1edfde79156707c912", "full_duplex": true, "autoneg": true } ] 1
mprinfo Posté(e) le 25 janvier 2022 Auteur Signaler Posté(e) le 25 janvier 2022 Oui au départ je suis parti sur la même logique que toi mais aprés pas mal de lecture j'ai compris le truc moi je me prends pas la tête je récupére la table je traite les données a modifier et je la renvoie avec un put Je sais pas si on peut juste envoyer la table d'une seul port mais a priori je dirais non vu les traces que j'avais dans le debug de firefox j'ai aussi eu un peu de mal avec l'udm car par rapport au controleur il faut ajouté au header de la requête ["content-type"] = "application/json" Pour les get le cookie suffit par contre pour les post il faut en plus le ['X-CSRF-Token'] pour le recyclage des ports c'est plus simple data = json.encode({["cmd"]="power-cycle",["mac"]=MAC_Adresse,["port_idx"]=3}) --recyclage port 1
mprinfo Posté(e) le 25 janvier 2022 Auteur Signaler Posté(e) le 25 janvier 2022 Donc pour ton soucis de port il faut faire un test sur cette valeur qui contient le numéro du port "port_idx": 9, 1
TonyC Posté(e) le 25 janvier 2022 Signaler Posté(e) le 25 janvier 2022 ah oui pas mal en effet, l'avais pas vu. Merci pour le tuyau. Fallait pas redémarrer ta machine, fait tard et demain y'a boulot. Bonne nuit @mprinfo et merci, y'a encore quelques coup de tourne vis à donner, mais ça va vraiment m'aider à sauver quelques bons watts mine de rien, ça consomme pas mal toutes ces cam. Le 24 POE bouffe 65w il alimente grâce au POE++ un autre switch POE sur lequel j'ai 1 cam + l'interphone. Il alimente également 2 AP + 2 autre switch non POE et toutes les autre cam. Bref en coupant le cam dans la journée lorsque onest présent c'est à dire tout le temps maintenant, pas de raison de laisser tout ce beau monde tourner pour rien. Je devrait descendre significativement la conso je pense. A Suivre
TonyC Posté(e) le 25 janvier 2022 Signaler Posté(e) le 25 janvier 2022 Yep je ne voyais pas de comparaison sur le port, je rajouterai ça déjà, pour jouer avec.
Messages recommandés