Aller au contenu

Lazer

Administrateur
  • Compteur de contenus

    25 935
  • Inscription

  • Dernière visite

  • Jours gagnés

    1 262

Tout ce qui a été posté par Lazer

  1. Lazer

    Clap Clap

    au collège, en cours de technologie, j'avais bricolé un tel module. Tout content de le ramener chez moi, je le branche, je joue avec la soirée, c'est cool. Le lendemain, je suis retourné à l'école, je soir en revenant la lumière était allumée. Depuis il traine au fond d'un tiroir (ou à la poubelle, je ne sais plus, ça fait des années que je ne l'ai pas revu). Ce sont des gadgets pour épater les potes, mais ce n'est pas fiable du tout. L'avantage avec la domotique, c'est que tu peux te servir des conditions (présence, etc) pour décider d'allumer effectivement la lumière ou non..... mais sans ça, la détection du clac de base est vraiment trop aléatoire
  2. non mais la sonde de température du ZXT 120 ne remonte pas la température régulièrement, c'est un fait connu et reconnu Cela n'en fait pas un mauvais module pour autant, sa fonction première est de piloter une clim, et il le fait très bien, pour peu qu'on arrive àconfigurer le bon code pour sa propre clim. J'ai eu un premier modèle que j'ai du faire remplacer en garantie (problème de "batterie" bien qu'il était alimenté sur secteur). Le remplaçant fonctionne tous les jours depuis plusieurs mois, c'est ultra fiable, j'en suis super content
  3. Lazer

    Cluster Hc2 - Redondance

    oui tout à fait chris6783 @yuhe tu n'étais même pas obligé de lire/écrite la clé entière. Seule la recopie du contenu du répertoire "backups" de la clé suffit (avec l'explorateur de fichiers standard de ton OS), normalement tout le reste est identique.
  4. j'ai l'impression que les autocollants sont génériques, et ne sont pas spécifique à Diagral.... mais rien de certain. De toutes façons, la marque est parfaitement visible si tu as une sirène extérieure.
  5. Si la boite est déjà posée, découpe avec outil multifonction (type Fein) Si la boite n'est pas encore posée, découpe avec un outil type Dremel Ensuite, si le mur est en béton/parpaing/brique, un coup de perfo dedans et c'est réglé. PS : le fer à souder, t'as pas intérêt de toucher les fils :/ et puis ça pollue grave !
  6. > il y a plusieurs version du FGMS-001 ou c'est juste le firmware qui change à l'interieur? Pas clair, il y a au moins le firmware qui change, je ne sais pas dire si le hardware a évolué ou pas > Ce firmware peut il etre mis a jour? Le firmware PEUT être mis à jour Mais, nous ne POUVONS pas mettre à jour le firmware Subtile nuance J'ai les tout premiers modèles, acheté la 1ère semaine de leur commercialisation, et ils fonctionnent très bien. Les erreurs rencontrées par les un et les autres sont avant-tout des problèmes de configuration..... il y a tellement de paramètre, qu'il faut relire plusieurs fois la doc pour comprendre.
  7. Sur la VM Debian, création d'une page Web eco.html servie par Apache contenant un JSON basique (issu d'un Eco-Devices) : {"product":"Eco-devices","T1_PTEC":"HC..","T1_PAPP":1560,"T1_HCHP":11861401,"T1_HCHC":9250490,"T2_PTEC":"----","T2_PAPP":0,"T2_BASE":0,"INDEX_C1":3371475,"INDEX_C2":2829685} . Sur la HC2, création d'un VD avec un bouton contenant le code suivant : -- Test de charge fibaro:debug("Starting loop...") local selfID = fibaro:getSelfId() local ip = fibaro:get(selfID, 'IPAddress') local port = fibaro:get(selfID, 'TCPPort') local i = 0 while i < 1000 do local WEB = Net.FHttp(ip, tonumber(port)) local response, status, errorCode = WEB:GET("/eco.html?i="..tostring(i)) if tonumber(errorCode) == 0 and tonumber(status) == 200 and response ~= nil and response ~= "" then fibaro:debug("i="..i.." memory="..collectgarbage("count")) else fibaro:debug("Erreur : i="..i) end i = i + 1 --WEB = nil --collectgarbage("collect") end fibaro:debug("Loop finished") . Après enregistrement du VD, sous Linux, on récupère le PID du process associé au VD : root@fghc2:~# ps -ef | grep "PluginManager 15" root 1754 1 0 16:21 ? 00:00:00 /opt/fibaro/PluginManager 15 startMainLoop 0 0 ... De base, ce VD a déjà 26 descripteurs de fichiers ouverts : root@fghc2:~# ls /proc/1754/fd | wc -l 26 . On lance le test en appuyant sur le bouton du VD. Dans la fenêtre de debug : [DEBUG] 16:34:41: Starting loop... [DEBUG] 16:34:41: i=0 memory=32.888671875 [DEBUG] 16:34:41: i=1 memory=33.0341796875 [DEBUG] 16:34:41: i=2 memory=33.181640625 [DEBUG] 16:34:41: i=3 memory=33.3271484375 [DEBUG] 16:34:41: i=4 memory=33.474609375 ... [DEBUG] 16:34:43: i=992 memory=50.4111328125 [DEBUG] 16:34:43: i=993 memory=50.564453125 [DEBUG] 16:34:43: i=994 memory=50.7158203125 [DEBUG] 16:34:43: i=995 memory=50.869140625 [DEBUG] 16:34:43: i=996 memory=51.0205078125 Cela s'arrête brusquement à la 997ème itération, sans jamais arriver au message "Loop Finished". L’exécution est très rapide, cela ne prend que 2 secondes (donc environ 500 requêtes http par seconde, le LUA est décidément un langage très rapide, bien plus que le Shell). L'occupation mémoire du moteur LUA reste très contenue, ne montant qu'à 51 ko. Sous Linux, on observe l'apparition d'un core dump : root@fghc2:~# ls -l /core -rw------- 1 root root 9261056 Jan 19 16:21 /core Cela s'exécute tellement vite que je n'ai pas le temps de monitorer le nombre de fichiers ouverts, mais de toute évidence on atteint la fameuse limite de 1024 fixée par le ulimit du système (26 + 997 = 1023). Dans le code LUA, j'ai mis en commentaire les 2 lignes suivantes à la fin de la boucle while : WEB = nil collectgarbage("collect") Si on les décommente et qu'on relance le test, on constate que la RAM utilisée par le moteur LUA n'augmente pas et se limite à 30 ko. En revanche les performances sont bien inférieures, car on force le garbage collector à tourner à chaque passage dans la boucle. Mais surtout, le nombre de descripteurs de fichiers atteint quand même 1024, occasionnant quand même le crash du VD avant de terminer la boucle : [DEBUG] 16:21:25: Starting loop... [DEBUG] 16:21:25: i=0 memory=32.9609375 [DEBUG] 16:21:25: i=1 memory=30.333984375 [DEBUG] 16:21:25: i=2 memory=30.365234375 [DEBUG] 16:21:25: i=3 memory=30.365234375 ... [DEBUG] 16:21:27: i=993 memory=30.369140625 [DEBUG] 16:21:27: i=994 memory=30.369140625 [DEBUG] 16:21:27: i=995 memory=30.369140625 [DEBUG] 16:21:27: i=996 memory=30.369140625 . Enfin, si on sort la ligne local WEB = Net.FHttp(...) de la boucle while, pour le positionner avant d'entrer dans la boucle, il n'y a qu'un seul socket TCP utilisé durant tout le script, donc la boucle s'exécute parfaitement. Je suis allé à 10'000 itérations sans faire broncher la box, et c'est encore plus rapide (car il n'y a pas besoin de rouvrir un socket à chaque passage dans la boucle, opération de loin la plus longue sur la totalité des instructions présentes) Conclusion de ce test : Cela se confirme, on a donc bien une limitation à 1024 fichiers ouverts par chaque process (chaque VD, Scène, Plugin étant dans des process séparés). Avec ce petit benchmark; volontairement violent, on atteint en 2 seconde la limite, et donc le crash (core dump) du process lié au module virtuel. Le test suivant sera de faire un bench un peu plus représentatif de nos modules virtuels que nous utilisons couramment. C'est à dire d'exploiter la Main Loop et son sleep() de 3 seconde à chaque passage dans la boucle. Cela laissera le temps de monitorer les descripteurs de fichiers ouverts au niveau Linux, et de voir si la main loop ouvre les sockets plus vite que la pile TCP/IP les libère.
  8. Comme je le disais, la config Apache est ultra standard (/etc/apache2/sites-available/default) : <VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/> Options FollowSymLinks MultiViews IncludesNOEXEC AllowOverride All Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> Alias /doc/ "/usr/share/doc/" <Directory "/usr/share/doc/"> Options MultiViews FollowSymLinks AllowOverride None Order deny,allow Deny from all Allow from 127.0.0.0/255.0.0.0 ::1/128 </Directory> # ProxyRequests On ProxyPass /api http://127.0.0.1:11111/api retry=0 Options +Includes AddType text/html .html AddOutputFilter INCLUDES .html </VirtualHost> La seule ligne intéressante, c'est le ProxyPass. Le process HCServer écoute bien sur le port 11111 : root@fghc2:~# netstat -aep | grep LISTEN | grep 11111 tcp 0 0 *:11111 *:* LISTEN root 4485 1350/HCServer . Je fais le test en LUA dès que possible. Par contre je suis en train de penser que mon test d'hier soir n'est pas représentatif du bug rencontré sur Homebirdge. Car je me suis contenté de surveiller le crash des process, mais le problème est différent avec Homebirdge ; apparemment, plus aucun ordre Z-Wave ne passe, donc ce n'est pas tout à fait pareil....
  9. t'as un 486 DX2 66 MHz ? :huh: :huh:
  10. Non Apache c'est bien les process httpd classiques, indépendants des développements Fibaro. Idem pour PHP. Je regarderai la conf demain, mais c'est du relativement standard de mémoire. HCServer c'est le processus principal de la box (en C compilé, donc on ne sais pas ce qu'il y a dedans). C'est un espèce d'ordonnanceur, qui va communiquer vers les process Z-Wave, le DB Updater, les VD, Scène, Plugins, etc... Ce HCServer est notamment responsable de l'API, pour rappel tout passe par l'API (nos scripts, nos commande LUA de type fibaro;call(...) setvalue(...) etc et aussi l'interface Web, les applis mobiles, etc). L'API est disponible via l'URL /api sur le port 11111 en localhost uniquement (proxy Apache local), et c'est le process HCServer qui écoute sur ce port, donc c'est lui qui traite toutes les requêtes. Lors de mon test de charge aujourd'hui, c'était bien le process HCServer qui était logiquement responsable de la majorité du %User CPU (et un peu de %Syst, car il fait des appels systèmes aussi) En effet pour Homebridge c'est assez mystérieux.... je ne l'utilise pas, mais il faudrait monitorer la box (en root bien sà»r) durant toute la phase de fonctionnement, jusqu'au crash. J'envisage 2 cas possible : - une augmentation d'un paramètre, qui finit par mener au crash (à priori on a exclu les sockets TCP et la RAM avec le test d'aujourd'hui, mais on est peut être passé à coté d'un autre paramètre critique) - le chaos, c'est à dire un développement anarchique purement Fibaro, qui fait que le bug se produit de façon aléatoire. Les requêtes répétées de Homebridge ne font qu'augmenter la probabilité d'occasionner ce bug. Mon test d'aujourd'hui également, peut être qu'en le laissant tourner une journée complète ça finirait par arriver.
  11. Du coup, je propose de réinitialiser le compteur de message de Pascaldu54 à0. Vous êtes tout d'accord bien sûr ?
  12. Test violent depuis un Linux : une requête http toutes les 30ms vers /api/devices : while [ 1 ] do curl --silent -u admin:password http://192.168.x.y/api/devices > /dev/null done A la louche, ça fait donc environ 30 requêtes à seconde. J'ai laissé tourné environ 10 minutes..... soit plus de 18000 requêtes HTTP ! Sur la HC2, le nombre de connexions en TIME_WAIT monte assez vite, puis se stabilise : root@fghc2:~# netstat -a | grep TIME_WAIT | wc -l 4188 root@fghc2:~# netstat -a | grep TIME_WAIT | wc -l 4232 root@fghc2:~# netstat -a | grep TIME_WAIT | wc -l 4075 root@fghc2:~# netstat -a | grep TIME_WAIT | wc -l 4622 root@fghc2:~# netstat -a | grep TIME_WAIT | wc -l 4338 Coté client (ma VM Debian), on a sensiblement le même nombre de TIME_WAIT. Aucun process n'a crashé, et en particulier le HCServer qui est responsable des 503 Unavailable Error : root@fghc2:~# screen -ls There are screens on: 1386.LILIServer (01/14/2016 06:26:47 PM) (Detached) 1383.Zwave (01/14/2016 06:26:47 PM) (Detached) 1335.Router (01/14/2016 06:26:43 PM) (Detached) 1327.RemoteAccess (01/14/2016 06:26:43 PM) (Detached) 1348.HCServer (01/14/2016 06:26:43 PM) (Detached) 1330.DbUpdater (01/14/2016 06:26:43 PM) (Detached) 1256.GPIOServer (01/14/2016 06:26:36 PM) (Detached) 7 Sockets in /var/run/screen/S-root. L'utilisation en RAM est totalement stable durant ce test (version 4.063 Beta) : root@fghc2:~# free -m total used free shared buffers cached Mem: 993 470 522 0 61 233 -/+ buffers/cache: 175 817 Swap: 243 0 243 Après : root@fghc2:~# free -m total used free shared buffers cached Mem: 993 469 523 0 61 231 -/+ buffers/cache: 176 816 Swap: 243 0 243 Bref, on peut y aller niveau charge sur l'API, la HC2 encaisse sans souci. Donc on en revient toujours au même : les crashs ne sont pas dus à une charge excessive, puisque notre HC2 ne fait rien en temps normal (charge CPU moyenne très largement inférieure à 10%, plutôt proche du pourcent.....) Demain je ferai le test inverse, en utilisant la HC2 comme client http. Il faut que je monte un Apache sur ma VM pour donner un peu de données à ingurgiter à la HC2. Si tu as une idée d'un autre test que je peux faire, c'est le moment
  13. Lazer

    Jeedom

    mprinfo est parti mais voici Pascaldu54, pro-jeedom
  14. Lazer

    Lenteur Forum

    C'est moi ou le forum est ànouveau très lent en ce moment ?
  15. Si j'ai le temps ce soir, j'essaierai de monter une maquette avec ma HC2 de test et mon serveur Xeon en face.... test de requêtes http massives dans un sens, puis dans l'autre, afin de voir si on arrive àcrasher la HC2.
  16. J'ajoute que Fibaro utilise lui-même massivement l'API http pour ses propres besoins.... donc entre ça et mes propres scripts LUA, en fin de compte il n'est pas étonnant d'avoir autant de TIME-WAIT, qui signifie que les sockets sont bien fermées.
  17. Non les ESTABLISHED sont bien fermées systématiquement. J'ai plus de ESTABLISHED dues àmes connexions SSH qu'aux connexions Web, c'est dire ! Au moins les sockets sont bien fermées àchaque fois qu'on sort de la boucle LUA.
  18. root@fghc2:~# ulimit -Ha core file size (blocks, -c) unlimited data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 16382 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) unlimited cpu time (seconds, -t) unlimited max user processes (-u) unlimited virtual memory (kbytes, -v) unlimited file locks (-x) unlimited Apparemment, les TIME_WAIT ne sont pas un souci, on reste sur des valeurs assez faibles : http://vincent.bernat.im/fr/blog/2014-tcp-time-wait-state-linux.html Il semble que les TIME_WAIT sont supprimés au bout de 1 à4 minutes, donc vu que j'ai plusieurs VD qui font plusieurs Net.FHTTP(), ce n'est pas aberrant.
  19. Limites systèmes : root@fghc2:~# ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 16382 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) unlimited virtual memory (kbytes, -v) unlimited file locks (-x) unlimited Je viens de comparer avec une installation par défaut de Debian 6, c'est exactement pareil, donc FIbaro n'a rien modifié. Effectivement, je pense que tu as mis le doit sur un point intéressant...; open files = 1024 et regarde ça : root@fghc2:~# netstat -a | grep TIME_WAIT | wc -l 1101 Faut que j’identifie les sockets pour voir par quels process ils sont ouverts....
  20. je t'avoue que j'ai jamais pensé àsurveiller les sockets. J'ai étudié l'utilisation mémoire des process, ainsi que le nombre de thread (plusieurs centaines, en augmentation continue pour un seul process, làaussi il y a un problème) Ca serait intéressant que j'étudie également les sockets.... Mais la pile TCP/IP est censée les fermer comme tu le fais remarquer.
  21. j'ai eu des plantages avec plus de 50 % de RAM libre. Et les plantages peuvent arriver sur tout : VD, Scène, voire process principal (HC Serveur), et pourtant tout cela est dans des process différents au niveau OS LInux. Les crash que j'ai observé sont des core dump, très aléatoire (entre 3h après le reboot de la box, et plusieurs mois après le reboot) donc ce n'est pas une conséquence d'une grande utilisation de la RAM, sinon le process ne planterait pas et la RAM utilisée augmenterait, de même que le swap (paging space). A noter de plus que l'utilisation RAM d'un process de type VD, Scène, ou Plugin, augmente rapidemment pour atteindre son régime de croisière, puis se stabilise autour d'une valeur nominale (modérée), qui varie légèrement en fonction du déclenchement du garbage collector. Le Garbage Collector est très bien décrit dans les docs LUA, je ne me souviens plus bien de l’intervalle, mais tu peux retrouver l'info facilement, et même le déclencher manuellement si tu veux. -- Appeler manuellement le garbage collector collectgarbage("collect") Tu peux aussi surveiller la consommation mémoire : -- getCurrentMemoryUsed() return total current memory in use by lua interpreter in kilobytes -- collectgarbage("count") permet de vérifier la "gestion de la mémoire". -- Attention Le Mainloop et les boutons sont des Sandbox (bacs à sable), le collectgarbage("count") retourne uniquement la mémoire utilisée par le script dans le sandbox. getCurrentMemoryUsed = (function() return collectgarbage("count"); end) Si tu veux aller plus loin, root ta box, surveille les process et la RAM globale du système, et tu verras que tu ne peux rien faire. C'est codé avec les pieds, on est obligé de faire avec. J'ai contourné le problème avec un watchdog (dans ma signature) qui relance les VD/Scènes quand ils plantent à tord (core dump) ou à raison (erreur de syntaxe LUA).
  22. Lazer

    Création D'icones

    Sujet déplacé, merci de ne pas poster dans la section pour les nuls, réservé aux tutos. Essaye le format PNG, je ne pense pas que le JPEG soit accepté.
  23. Concernant la stabilité, j'ai des VD qui tournent en boucle infinie, et qui ne plantent pas, que je libère la connexion HTTP ou pas (j'ai testé dans les 2 cas). Donc je ne pense pas que cela ait un impact sur la stabilité de la box. Comme je l'avais déjà précisé ailleurs, notre code LUA est exécuté par l'interpréteur LUA, qui est une librairie standard, non développée par Fibaro. Et jusqu'à preuve du contraire, le LUA est un langage robuste, avec un garbage collecteur efficace, qui rattrape nos erreurs de programmation. Les instabilités de la HC2 ne sont pas dues à nos quelques centaines de lignes en LUA, mais à ce qu'à développé FIbaro. Certainement des fuites mémoires non maitrisées.... auxquelles nous ne pouvons rien faire.
  24. PS : tu ne peux pas poster de nouveau sujet dans la section pour les Nuls, surement pour ça que tu n'as pas eu de réponse.... d'ailleurs je viens d'y trouver ton sujet, que je vais supprimer car tu as créé un nouveau topic. Idéalement, il faut fermer la connexion Net.FHTTP, mais c'est vrai qu'on ne le fait pas systématiquement.... car le Garbage Collector du LUA fait le ménage à intervalle régulier. Si tu veux forcer la libération de mémoire, tu peux affecter nil à la variable : local HC2 = Net.FHttp("127.0.0.1", 11111) -- blah blah blah HC2 = nil
  25. méchant les pompiers te diront qu'ils préfèrent pourtant le bois au métal.... car la réaction du bois en cas d'incendie est plus prévisible que les structures métalliques, qui s'effondrent sans prévenir.
×
×
  • Créer...