
Nikko
Membres confirmés-
Compteur de contenus
278 -
Inscription
-
Dernière visite
-
Jours gagnés
4
Tout ce qui a été posté par Nikko
-
Bonjour, Voilà j'ai ouvert un topic avec les 2 scènes: http://www.domotique-fibaro.fr/index.php/topic/8641-backup-via-scene-lua/ A cause de vous j'ai loupé le défilé à la TV
-
Bonjour, Voici un résumé sur la réalisation/suppression de backups via des scènes en Lua. La création/suppression de backup s'effectue en temps normal sur l'interface du HomeCenter à la page Diagnostiques/Sauvegarde et restauration. Le code donné dons les 2 scènes n'est pas des plus optimisé; cela constitue juste une base. EDIT (03/12/2016): Mise à jour avec l'api pour les versions >=4.101; voir plus loin: (https://www.domotique-fibaro.fr/topic/8641-backup-via-scene-lua/?do=findComment&comment=146362) Les Commandes de l'API La récupération au format JSON de la liste des backups se fait à l'addresse http://HC2/api/settings/backups Pour Créer un Backup on utilise l'addresse http://HC2/api/settings/backups avec une requète de type en POST avec les paramètres action et description. Pour Supprimer un Backup, on utilise l'addresse http://HC2/api/settings/backups?id=xx (où xx est le numéro de backup). La requète est de type DELETE avec comme paramètre id=xx => Comme les urls de l'api vont être appelées depuis des scènes lua, l'ip de la box utilisée sera 127.0.0.1 (port 11111) => En cas d'appel sur l'ip LAN de la box (Ex: http://192.168.0.100/api/settings/backups) , il faudra en plus transmettre l'authentification dans la requète. Attention: Lors de la création de Backup, "tout le reste" est suspendu; de même après que le backup soit effectué, le moteur Z-Wave et d'autres services redémarrent. Donc en cas de planification , privilégier la nuit, là ou l'activité ZWave, scénarios, est faible/inexistante. Scène de création d'un backup Exemple de Scène de création d'un Backup, avec notification vers portable: --[[ %% properties %% events %% globals --]] -- ID des mobiles,tablettes pour notification local portable = { 385,378 } -- Message Descriptif du Backup local descriptif = 'Backup du '..os.date("%d/%m/%y - %HH%M") function sendPush(message) if #portable > 0 then for _,v in ipairs(portable) do fibaro:call(v,'sendPush', message) end end end local url = 'http://127.0.0.1:11111/api/settings/backups' local httpClient = net.HTTPClient() httpClient:request(url , { success = function(response) if tonumber(response.status) == 201 then print("Backup Created at " .. os.date()) sendPush(descriptif .. ' effectué') else print("Error " .. response.status) sendPush('Erreur lors de la création du Backup') end end, error = function(err) print('error = ' .. err) end, options = { method = 'POST', headers = { ["content-type"] = 'application/x-www-form-urlencoded;' }, data = 'action=create&description='..descriptif } }); Depuis la page des backups, on peut vérifier que la scène fonctionne: Pour les utilisateurs de GEA, on peut déclencher cette sauvegarde le 1er samedi de chaque mois par exemple: -- Fonction déterminant si nous sommes le 1er samedi du mois function isFirstSaturday() local t = os.date('*t') return ( t['day'] < 8 and t['wday'] == 7 ) end -- Backup le 1er samedi du mois GEA.add({"Function",function() return isFirstSaturday() end} , 30 , "Backup Mensuel du HC2" , {{"Time","01:00","01:01"},{"Scenario", 12}}) . Scène de suppression d'un backup Exemple de Scene Lua pour réaliser la suppression du backup le plus ancien: --[[ %% properties %% events %% globals --]] -- Flag dryrun; Si true, la requete sur api pour effacer le backup n'est pas effectuée local dryrun = true -- Récupération de la list des backups local backups = api.get('/settings/backups') -- Vérification de présence Backup if (backups and type(backups == 'table') and #backups > 0) then if #backups > 1 then print(#backups .. ' Backups présents') else print('1 Backup présent') end for i in ipairs(backups) do fibaro:debug('ID: '..backups[i]['id']..' | TIMESTAMP: '..backups[i]['timestamp']..' | DESCRIPTION: '..backups[i]['description']) end else print('Pas de backup ou erreur lors de la récupération de la liste') fibaro:abort() end -- Pour chaque Backup on stock le timestamp de la date de réalisation dans une table -- On classe ensuite les timestamps par ordre croissant local timestamp = {} for i in ipairs(backups) do table.insert(timestamp, backups[i]['timestamp']) end table.sort(timestamp) -- Le 1er timestamp de la table est le plus petit donc le plus ancien en epochtime -- Dans la table de backup on recherche le backup ayant ce timestamp local id = false for i in ipairs(backups) do if (tonumber(backups[i]['timestamp']) == tonumber(timestamp[1])) then id = backups[i]['id'] end end if id then print("ID du backup le plus ancien: "..id) else print("Erreur lors de la récupération de l'ID") fibaro:abort() end -- Requete via API pour effacer le backup le plus ancien if not dryrun then local url = 'http://127.0.0.1:11111/api/settings/backups?id='..id local httpClient = net.HTTPClient() httpClient:request(url , { success = function(response) if tonumber(response.status) == 200 then print("Backup deleted at " .. os.date()) else print("Error " .. response.status) end end, error = function(err) print('error = ' .. err) end, options = { method = 'DELETE', headers = { ["content-type"] = 'application/x-www-form-urlencoded;' }, data = 'id='..id } }); end . Cette Scène produit le debug suivant: Nicolas
- 67 réponses
-
- 12
-
-
@pepite Voici le script un peu modifié pour tenir compte uniquement du timestamp des backups, et supprimer le plus ancien: --[[ %% properties %% events %% globals --]] -- Flag dryrun; Si true, la requete sur api pour effacer le backup n'est pas effectuée local dryrun = true local backups = api.get('/settings/backups') -- Vérification de présence Backup if (backups and type(backups == 'table') and #backups > 0) then print(#backups .. ' Backups présents') for i in ipairs(backups) do fibaro:debug('ID: '..backups[i]['id']..' | TIMESTAMP: '..backups[i]['timestamp']..' | DESCRIPTION: '..backups[i]['description']) end else print('Pas de backup ou erreur lors de la récupération de la liste') fibaro:abort() end -- Pour chaque Backup on stock le timestamp de la date de réalisation dans une table -- On classe ensuite les timestamps par ordre croissant local timestamp = {} for i in ipairs(backups) do table.insert(timestamp, backups[i]['timestamp']) end table.sort(timestamp) -- Le 1er timestamp de la table est le plus petit donc le plus vieux en epochtime -- Dans la table de backup on recherche le backup ayant ce timestamp local id = false for i in ipairs(backups) do if (tonumber(backups[i]['timestamp']) == tonumber(timestamp[1])) then id = backups[i]['id'] end end if id then print("ID du backup le plus ancien: "..id) else print("Erreur lors de la récupération de l'ID") fibaro:abort() end -- Requete via API pour effacer le backup le plus vieux if not dryrun then local url = 'http://127.0.0.1:11111/api/settings/backups?id='..id local httpClient = net.HTTPClient() httpClient:request(url , { success = function(response) if tonumber(response.status) == 200 then print("Backup deleted at " .. os.date()) else print("Error " .. response.status) end end, error = function(err) print('error = ' .. err) end, options = { method = 'DELETE', headers = { ["content-type"] = 'application/x-www-form-urlencoded;' }, data = 'id='..id } }); end Il y a certainement plus simple|propre mais c'est une solution qui semble fonctionnelle. A voir si ça peut (te) servir
-
Salut, Je ne savais pas que Temperature pouvait être un trigger. J'aurais laissé value. Evite peut être aussi les commentaires dans l'entete, Il me semble que par moment ça peut mettre le bronx. ton fibaro:debug('Abort') à mettre avant le fibaro:abort() (ton problème ne vient pas de là .
-
@pepite: Pour supprimer un backup, il faut utiliser une requete DELETE avec l'id du backup à supprimer. Ce qu'il faut c'est récupérer la liste des backups depuis l'api (cf plus haut), puis celui qui a l'id le plus haut est le dernier backup réalisé (donc le plus récent) Ce que je peux te proposer pour supprimer le dernier backup: --[[ %% properties %% events %% globals --]] local table = api.get('/settings/backups') if (table and type(table == 'table') and #table > 0) then print(#table .. ' Backups présents') else print('Pas de backup ou erreur lors de la récupération de la liste') fibaro:abort() end local id = table[1]['id'] print('ID du backup le plus récent: '..id) local url = 'http://127.0.0.1:11111/api/settings/backups?id='..id local httpClient = net.HTTPClient() httpClient:request(url , { success = function(response) if tonumber(response.status) == 200 then print("Backup deleted at " .. os.date()) else print("Error " .. response.status) end end, error = function(err) print('error = ' .. err) end, options = { method = 'DELETE', headers = { ["content-type"] = 'application/x-www-form-urlencoded;' }, data = 'id='..id } }); Attention: Je suppose que lors de la conversion json/table, le classement des élements croissants dans la table correspondent aux elements json décroissant. Pour bien faire, il faudrait tout reclasser en utilisant l'ID voire même le timestamp. Mais là pas le temps. Le script est donc à sécuriser mais cela peut faire une base. Nicolas
-
Salut @Jojo, Pour Récupérer en JSON la liste des backup: http://HC2/api/settings/backups Pour créer un backup, même url, mais en POST avec les paramètres action et description. Pour créer un backup via une scène lua tu peux donc faire: --[[ %% properties %% events %% globals --]] local portable = 385 local message = 'Backup du '..os.date("%d/%m/%y - %HH%M") local url = 'http://127.0.0.1:11111/api/settings/backups' local httpClient = net.HTTPClient() httpClient:request(url , { success = function(response) if tonumber(response.status) == 201 then print("Backup Created at " .. os.date()) fibaro:call(portable,'sendPush', message .. ' effectué') else print("Error " .. response.status) fibaro:call(portable,'sendPush', 'Erreur lors de la création du Backup') end end, error = function(err) print('error = ' .. err) end, options = { method = 'POST', headers = { ["content-type"] = 'application/x-www-form-urlencoded;' }, data = 'action=create&description='..message } }); Après que le backup soit effectué, le moteur ZWave semble redémarrer, donc en cas de planification (via GEA par exemple), privilégier la nuit Nicolas
-
Salut Lazer, Oui tu avais déjà très bien détaillé tout ceci dans le topic usb recovery; Mais justement, ce que j'aimerai pouvoir faire c'est justement un recovery. Enfin bref en cas de soucis pouvoir revenir à une config origine, car aujourd'hui le système fonctionne encore à peu près mais en cas de pépin, je suis mal.... Pour le serial de la clé je l'avais déjà fait quand ma clé donnait des signes de faiblesse il y a quelques mois :-)
-
Le problème est qu'il faut la clé d'origine. Une copie de ma clé sur une autre clé revient au même que ton image sur une autre clé (aux backup près). Je tenterai cette nuit de la copier. Je vais envoyer un mail au support fibaro mais je connais déjàplus ou moins la réponse....
-
Salut Jojo, Je passe régulièrement mais il est vrai qu'en ce moment je passe plus de temps dehors que devant mon pc Oui avec une autre clé (sur laquelle est installée ton image) le système boot correctement. Je n'ai pas de copie du rep backup car en fait je compte à l'avenir repartir de 0 donc ce n'est pas grave. De plus je sais que ma clé d'origine à des soucis de secteurs defectueux. (genre si je lance un dd pour un dump la vitesse de lecture est tellement faible que cela dure des heures et des heures). Bref ma clé n'est pas loin de trepasser. Le truc c'est que une fois que le système (debian) s'amorce je peux rebrancher ma clé et le système la voit. J'ai tout de même essayé plusieurs options dans le BIOS mais idem
-
Bonjour, J'ai un problème avec ma clé USB depuis quelques mois mais là il faut vraiment que je me penche dessus, car dernièrement avec les quelques erreurs 503 c'est devenu ingérable.... Je m'explique: Ma clé USB pose problème lors du boot de la HC2; en effet lorsque la clé est branchée et que je démarre la box, le système reste bloqué sur l'écran du POST: la clé USB "freeze" la partie USB. Par contre dès que j'enlève la clé, le post se termine, le kernel se charge, se décompresse et le système commence à booter. Dès lors je peux brancher ma clé et là tout roule..... C'est vraiment tout l'USB qui se bloque, car pendant mes manip un clavier usb est également banché et tant que la clé est connectée (avant chargement du système) tout freeze...dès que je la débranche le système repart...... J'ai également essayé un démarrage complet de la box sur une autre clé USB (avec l'image complète fournie par @jojo) et là pas de soucis Ce qui est vraiment bloquant: * c'est qu'en cas de reboot, du coup le système ne démarre pas; Je dois être au cul de la box, débrancher la clé, mettre sous tension, et quand la 4eme led s'allume je branche la clé..... * je ne peux donc pas non plus accéder à un éventuel recovery. Avez vous déjà été confronté à ce problème? Merci Nicolas
-
bah qu'elle est inutile En fait je ne sais pas; la différence entre l'avoir ou non c'est que tu vas avoir une notification comme quoi le plugin n'est pas bien configuré. Dans l'absolu je ne sais pas à quoi elle sert; perso je préfère ne pas l'avoir car depuis le panneau de controle satel ça fait tâche
-
Dans le cadre intégration où tu as mis 80, remet le port par défaut (7094) et dans la fibaro, tu renseignes le même port (7094)
-
Salut, Le port 80 en intégration alors que déjà utilisé en www je ne suis pas sà»r que cela apprécie. Si tu modifies le port intégration, n'oublie pas de mettre le même du coté de ton plugin sur la HC2. Le cable série entre ETHM-1 et INTEGRA est bien connecté? Autre chose (de mêmeoir il me semble que j'avais eu un soucis), l'utilisateur que tu utilises pour fibaro a t il bien assez de droit ?
-
Bonjour, Il n'y a pas que la partition à créer, il faut aussi configurer la carte ethm (intégration, port,..) Krikoff avait fait un tuto pas à pas: http://www.domotique-fibaro.fr/index.php/topic/2901-installation-satel-integra/ "Le chargement se fait": tu entends quoi par là ? la barre de progression s'incrémente? Tu retrouves tes zones/sorties? De mon coté lorsque je modifie la config alarme, après rafraichisssement, je me déconnecte + rafraichissment page
-
Pour la CA-64 O-ROC c'est idem pour les sorties ( http://www.satel.pl/fr/download/instrukcje/ca64o_io_fr_0309.pdf ) Par contre pour l'alim c'est différent, ce n'est pas la carte qui la fournira àla sirène
-
-
Les NO et NC signifient Normally Open et Normally Close, le Cx étant le commun. Cela va servir sur tes sorties 5 à8 car présence de relais. Sur la O-ROC, de C1 àC4 ce sont des sorties OC. Les borniers NO1/4 et NC1/4 sont inutilisés.
-
Bonjour, Tu as le schema sur la doc de la sirene: https://www.satel.pl/fr/download/instrukcje/sp4002_io_fr_1209.pdf Pour l'alimentation de la sirène tu utilises le +12/COM qui vient de ta CA-64. Pour les signalisations STO sur C0 et STA sur C1 par exemple. Puis normallement sous DLOADX, Polarité inversée (dans ce cas on enleve les cavaliers PLO et PLA) Nicolas
-
Bonjour, Depuis plusieurs versions je rencontre aussi ces déconnections. Je n'ai pas noté exactement depuis laquelle puisque je peux rester plusieurs dizaines de jours sans que cela n'arrive (je dirai aux alentours de de la v4.050). Le problème vient vraiment de la partie soft. Mon réseau étant toujours le même, depuis la v3..... Il faudrait que je reprenne une installation complète (config usine -> Upgrade dernière version puis installation plugin), c'est ce que j'avais fait pour le passage en v4... Nicolas
-
Bonjour, Bonne Année et meilleurs voeux à tous :60: :60:
-
@olinet: Il faut utiliser Inverse: GEA.add(id["Porte_Bu"], -1, "" ,{{"Inverse"},{"turnOff", id["Lum_Bu"]}})
- 12 330 réponses
-
- 1
-
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
@jompa68: If you want to send a push when the plug is turning off you should use Inverse in Parameters: -- Send a Push when TurnOff GEA.add(id["kaffebryggare"], -1, "Plug turned off", {{"Inverse"},{"Portable", id["iPhoneJonny"]},{"Portable", id["iPhoneMona"]}})
- 12 330 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
@Jompa68: power+ isn't a condition. You have to write: GEA.add({"Sensor+", id["kaffebryggare"], 50}, 40*60, "", {{"turnOff", id["kaffebryggare"]}}) Moreover you have to chek your id and GEA.isVersionFour Nicolas
- 12 330 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
Et les espaces avant absent et present tu veux pas les enlever car c'est moyen....(l12 et l17). En lua " Present" est différent de "Present". (Dans ton post précédent) EDIT: --[[ %% autostart %% properties %% globals Maison --]] --- LOCAL Maison local estPresent = {"Global", "Maison", "Present"} local estAbsent = {"Global", "Maison", "Absent"} GEA.add({id["PORTE_ENTREE"], estPresent}, -1, "Porte entrée fermé le #date# à #time#", {{"Inverse"}, {"Portable", MobileId["PHONE_BERNARD"]}}) Non Ici c'est id["PORTE_ENTREE"] le déclencheur pas ta VG donc dans l'entete tu dois avoir xx value où xx est l'id porte entree...
- 12 330 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :