Aller au contenu

Messages recommandés

Posté(e)

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 :D

 

1.jpg.f509db86c35ea67e8a02f4c2dac1beda.jpg

 

Fichier QA : UDM_Pro_V1.10.fqa

 

  • Like 2
Posté(e)

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

Posté(e)

@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

 

 

 

Posté(e)
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.

 

Posté(e)

@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 :P

 

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

 

 

Posté(e)

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.

Posté(e)

Aucun soucis pour les switchs poe il faut juste mettre l'adresse mac du switch le QA fait le reste
J'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

  • Like 1
Posté(e)

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

Posté(e)

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 !

  

  • Like 1
Posté(e)

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

Posté(e) (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é par TonyC
Posté(e)

C'est normal tu as beaucoup de devices unifi

La on récupère toutes les donnés du matos unifi

Regarde comment je filtre à niveau de la mac
Si tu mets un print i tu auras l'index de ton switch

Pour l'histoire du mauvais port c'est assez simple à résoudre. J'avais justement un doute sur ce type d'erreur

Autrement tu copies le json sous notepad est tu le mets en forme avec json.view

Autrement je ferai cela demain soir

Envoyé de mon BLA-L29 en utilisant Tapatalk

Posté(e)

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 :)

 

 

Posté(e)

Après je récupère id du profil pour le mettre à url du put
Ensuite je récupère le table profil des ports
Je 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 port
Simple quoi

Envoyé de mon BLA-L29 en utilisant Tapatalk

Posté(e) (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é par TonyC
Posté(e)

Par la mac tu peux juste faire un refresh de port

La 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

Posté(e)

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 :60:l

Posté(e)

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
    }
]

 

  • Like 1
Posté(e)

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

 

  • Thanks 1
Posté(e)

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 :)

×
×
  • Créer...