
jjacques68
Membres confirmés-
Compteur de contenus
4 349 -
Inscription
-
Dernière visite
-
Jours gagnés
39
Tout ce qui a été posté par jjacques68
-
merciiiiiii !
-
et c'est volontaire ?
-
aaaaah encore un truc étrange : on a pas le même résultat pour la commande suivant que l'on soit dans une scène ou dans un QA : fibaro.getGlobalVariable("") dans une scène, on a bien la valeur de la VG. Mais dans un QA on a la valeur + je pense, le TimeStamp de la dernière modification
-
Après avoir mis la box en mode apprentissage, il faut que tu fasses une manipulation sur le module que tu veux inclure : Triple appui sur le bouton B (quoique j'ai des modules qui sont pris au premier appui)
-
oui oui bravo à eux ! et pour les dirigeants, dans toute leur splendeur, no comment.
-
oui moi j’ai la chance d’être dans une maison avec jardin, donc je peux tenir aussi. j’ai la HC3 qui va beaucoup m’occuper après ce sera ménage jardinage... mais après...
-
mouai j’ai l’impression que les gens ne vont, pas tenir longtemps. je constate, par rapport au premier jour, de plus en plus de mouvements.
-
nan pas du tout. ça craint. ça craint sur tous les plans.
-
c’est un peu pareil...
-
ben j’aurai bien aimé moi, mais la boîte a pas voulu.
-
ah nan pas de télé travail !!!
-
et bien j’ai fais des essais, et si la socket tombe, le tableau à l’air de garder les infos, car je les vois arriver dès que je remets le serveur en route. elles apparaissent bien en premier. et le tableau continue à stocker les données suivantes. ben écoute je pense que ça va le faire comme ça... je vais surveiller ça sur le long. là j’ai continué à migrer d’autres device. Suis loin d’avoir fini... merci pour ton aide précieuse @Krikroff
-
bon c'est fait, c'était pas la mort à faire... ça à l'air ok. mais je suis sceptique sur l'appel de la méthode "send", que j'ai peut-être trop souvent inséré dans le code... si tu as 5 minutes, peux tu y jeter un oeil ? merciiii ! --------------------------------------------------------------------------------------- -- 12/03/2020 - V1 : permet d'envoyer les infos des device vers Display Soft -- 19/03/2020 - V2 : utilise un tableau pour faire du FIFO --------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------- function QuickApp:onInit() self:debug("onInit") self:setVariable("Status", "0") self:updateProperty("value", false) self.ip = self:getVariable("IP") self.port = tonumber(self:getVariable("Port")) self.sock = net.TCPSocket() self.ListElement = {} self:connect() end --------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------- function QuickApp:connect() self.sock:connect(self.ip, self.port, { success = function() self:setVariable("Status", "1") self:updateProperty("value", true) self:debug("OPEN - connected") self:waitForResponseFunction() self:send() end, error = function(err) self:setVariable("Status", "0") self.sock:close() self:debug("OPEN ERROR - "..err) fibaro.setTimeout(500, function() self:connect() end) end, }) end --------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------- function QuickApp:close() self.sock:close() self:updateProperty("value", false) end --------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------- function QuickApp:waitForResponseFunction() self.sock:read({ success = function(data) self:debug("RX - "..data) self:waitForResponseFunction() end, error = function(err) self:setVariable("Status", "0") self:debug("READ ERROR - "..err) self.sock:close() fibaro.setTimeout(200, function() self:connect() end) end }) end --------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------- function QuickApp:send() if self:getVariable("Status") == "1" then if self.ListElement[1] then self.sock:write(self.ListElement[1].."\r", { success = function() table.remove(self.ListElement,1) if #self.ListElement > 0 then self:send() end end, error = function(err) self:setVariable("Status", "0") self:debug("WRITE ERROR - "..err) self.sock:close() fibaro.setTimeout(200, function() self:connect() end) end }) end end end --------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------- function QuickApp:AddElement(element) if element ~= "" then table.insert(self.ListElement,element) self:send() end end
-
oui j'ai compris. bon ben y a plus cas.
-
une VG avec les data séparées par un séparateur ? tant que la VG est <> "" on traite un par un ? La scène n'envoie pas directement sur la socket, mais rempli cette VG ? (super... en lua ... )
-
@Krikroff tu avais raison, c'est la commande "read" qui permet de détecter une déconnexion : "End of file". La reconnexion est donc quasi immédiate (1 seconde max). sauf que si une commande write est envoyée pendant ce temps, c'est la merde total. pas réussi à empêcher d'une manière propre le "write" si plus de connexion. la seule chose qui me fait qqch de stable, c'est : d'avoir créé une variable "Status" dans le QA, qui prend 1 ou 0 selon le status de la socket. Alors attention, surtout pas passer la variable à 0 dans la méthode "close". ça prend trop de temps de traitement. Il faut la mettre à 0 dès qu'on intercepte l'erreur. je teste, avant de faire le "write", le status de cette variable. si 1 j'envoie, si 0 j'envoie pas, le paquet est perdu ! j'ai essayé de mettre, juste avant la commande write: while self:getVariable("Status") == 0 do fibaro.sleep(100) end mais dans le cas où Status = 0, le QA se fige, pas de crash, pas d'erreur, rien ! Dommage ça m'aurait évité de perdre des paquets... punaise, j'utilise des sockets partout au boulo entre les automates et des PC pour récupérer des données !! jamais vu ça !! Voici le code, si qqun a une solution !! je suis preneur ! function QuickApp:onInit() self:setVariable("Status", "0") self:debug("onInit") self.ip = "192.168.2.8" self.port = tonumber("2000") self.sock = net.TCPSocket() self:connect() end function QuickApp:connect() self.sock:connect(self.ip, self.port, { success = function() self:setVariable("Status", "1") self:debug("OPEN - connected") self:waitForResponseFunction() end, error = function(err) self:setVariable("Status", "0") self.sock:close() self:debug("OPEN ERROR - "..err) fibaro.setTimeout(2000, function() self:connect() end) end, }) end function QuickApp:close() self.sock:close() end function QuickApp:waitForResponseFunction() self.sock:read({ success = function(data) self:debug("RX - "..data) self:waitForResponseFunction() end, error = function(err) self:setVariable("Status", "0") self:debug("READ ERROR - "..err) self.sock:close() fibaro.setTimeout(200, function() self:connect() end) end }) end function QuickApp:send(strToSend) if self:getVariable("Status") == "1" then self.sock:write(strToSend.."\n", { success = function() --self:debug("TX - "..strToSend) end, error = function(err) self:setVariable("Status", "0") self:debug("WRITE ERROR - "..err) self.sock:close() fibaro.setTimeout(200, function() self:connect() end) end }) end end
-
idem en passant par une VG
-
bon ben mon principe de sémaphore ne fonctionne pas. Manque de réactivité entre le changement d'état du QA et la scène...
-
alors : je pense avoir identifié le problème : j'ai une scène qui m'envoie tous les "value" des device sur la socket. en gros, pour chaque device, elle appelle la méthode "send" du QA. Si au premier appelle, j'ai un soucis de socket, celle-ci va donc se reconnecter. MAIS ! la scène ne réfléchit pas elle ! elle continuer d'envoyer les "value", donc de faire des "send" alors que le premier est encore entrain d'essayer d'ouvrir la socket ! le deuxième va faire de même ! ça me met un bordel terrible ! en même temps, dis comme ça, ça semble tout à fait logique et cohérant. Donc il faut que je trouve le moyen de mettre la scène en pause tant que la socket n'est pas OK. Je vais essayer de prendre la propriété "value" du QA (qui est à false si pas de socket) pour faire une sorte de sémaphore pour la scène...
-
ben moi j'inclus tous mes modules sans passer par un logiciel. Il faut que tu trouves l'adresse IP de la HC3, et tu te rends sur sa page via un navigateur. à ben voilà, c'est ce que viens de dire @mprinfo y a peut-être le logiciel Fibaro Finder qui peut t'aider à trouver l'IP... (je sais plus s'il s'appele comme ça.)
-
punaise là ça m’énerve. demain je recommence à 0. vais créé un nouveau QA et je vais utiliser le soft packetsender pour essayer de comprendre pas à pas ce qu’il se passe. mais j’ai un sérieux doute sur la gestion des socket.
-
tout à fait, c’est ce que la fonction est censée faire; mais j’ai un doute.
-
ben c’est ce que me retourne la fonction read. après je sais pas si c’est le debug, ou un message de la socket
-
attention je l’ai pas mis juste après le write, elle est en "thread" dans une fonction à côté. elle tourne dans son coin.
-
parce qu’elle me fait perdre toute stabilité de la socket. je parle pas de la reconnexion là, je parle bien quand tout est (normalement ok) elle me retourne "opération annulée". j’ai l’impression qu’on peu pas lire et écrire simultanément, comme dans leur exemple.