MAM78 Posté(e) le 18 février 2017 Signaler Posté(e) le 18 février 2017 (modifié) Vous trouverez ci-dessous une version adaptée de Waze Calculator écrit à l'origine par @Krikroff cf. Lien : https://www.domotique-fibaro.fr/topic/6362-hc2-waze-calculator/ L'adaptation permet d'avoir de 1 à 3 itinéraires différents par trajet, avec les données suivantes : Point de départ Point d'arrivée Heure de départ De 1 à 3 (nouveautés) itinéraires avec les indications suivantes : Temps de trajet Horaire d'arrivée Routes/Axes principaux de l'itinéraire Indicateur (! Péage) (nouveautés) , si l'itinéraire passe par une voie à péage (afin de choisir son itinéraire toute connaissance de cause) Cette fonctionnalité passe par le service de trafic et de navigation communautaire WAZE (https://www.waze.com/fr/). Exemple d'affichage : Le principe du script est très simple : 1 scène pour interroger l’ API Waze pour tous les trajets paramétrés autant de VD qui seront mis à jour par la scène indiquée ci-dessus 1 - Installation Importer sur votre HC2 le vd HC2 Waze Calculator VD Itinéraire 3 V1.1.1.vfib.json (Créer autant de VD que vous aurez de Trajets) Créer sur le HC2 une scène "Waze Calculator Itin" dans laquelle vous copier le contenu du fichier suivant : HC2 Waze Calculator Scene Itinéraire 3 V1.1.5.lua puis passer au paramétrage. 2 - Paramétrage Comme indiqué précédemment, vous pouvez créer autant de trajets que vous souhaitez. Au début du code de la Scène vous trouverez une déclaration de variable "params" dans laquelle vous aller définir : modetrace (soit égale à true ou false) qui permet suivre dans le fenêtre de debug l'avancement du traitement avec des trajets et itinéraires modedebug (soit égale à true ou false) qui permet suivre dans le fenêtre de debug l'avancement les étapes du traitement dans le code et les messages d'erreurs. et pour chaque trajet les paramètres suivants : nom du trajet (à titre indicatif) id du vd cible (module virtuel cible qui va recevoir les résultats de la recherche des itinéraires pour le trajet) Nom du point de départ (va remonter comme indication dans le VD), longitude et latitude Nom du point d'arrivée (va remonter comme indication dans le VD), longitude et latitude (Pour trouver les coordonnées GPS, latitude et longitude il existe les services : www.coordonnees-gps.fr, www.torop.net/coordonnees-gps.php, www.gpsfrance.net) TimeOut (durée en millième de secondes, correspondant au temps nécessaire pour que la requête s'execute sur le site de Waze. A adapter selon les recherches) pollingMS (intervalle d'interrogation du site Waze) NbIti (nombre d'itinéraires que vous souhaitez remontés sur le VD, entre 1 et 3 maxi, il se peut que la scène remonte un nombre d'itinéraire inférieur au nombre que vous avez demandé. Ceci est dépendant de ce que le site de Waze génère comme itinéraires selon vos paramètres) Dans l'exemple ci-dessous, il y a 3 trajets (Trajet 1 Aller, Trajet 2 Retour, Trajet Lille), qui remontes chacun 3 itinéraires qui vont mettre à jours 3 VD (157, 158, 159) -------------------------------------------------------------------- -- USER DATA ------------------------------------------------------- -------------------------------------------------------------------- local modetrace = true local modedebug = true local params = { { name = "Trajet 1 Élysée -> Guignol", virtualDeviceId = 157, from = { name = "Palais de l'Élysée", x = 2.3167538999999806, -- longitude y = 48.8704156 -- latitude }, to = { name = "Théâtre Guignol", x = 2.311747670173645, -- longitude y = 48.86977710077997 -- latitude }, pollingMs = 1*60*1000, TimeOut = 5000, NbIti = 3 }, { name = "Trajet 1 Paris -> Strasbourg", virtualDeviceId = 158, from = { name = "Paris", x = 2.311747670173645, -- longitude y = 48.86977710077997 -- latitude }, to = { name = "Strasbourg", x = 7.746523700000012, -- longitude y = 48.5830972 -- latitude }, pollingMs = 1*60*1000, TimeOut = 7000, NbIti = 3 }, { name = "Trajet Paris -> Lille", virtualDeviceId = 159, from = { name = "Paris, 1 rue de Lille", x = 2.332467299999962, -- longitude y = 48.8576502 -- latitude }, to = { name = "Lille, 1 rue de Paris", x = 3.0652202999999645, -- longitude y = 50.6368413 -- latitude }, pollingMs = 1*60*1000, TimeOut = 7000, NbIti = 3 } } 3 - Si comme chez-moi votre MV plante avec un message du genre : Il s'agit d'un un bug de l'API dans la HC2 (qui a déjà été signalé à Fibaro). Je vous suggère de contourner l'erreur : Installer la scène WatchDog qui va relancer votre scène automatiquement. Elle est disponible ici : https://www.domotique-fibaro.fr/topic/6472-watchdog-pour-scã¨nes-et-modules-virtuels/ Ajouter la ligne suivante dans la section User variables dans la déclaration de la variable watchlog local watchdog = { {type = "Scene", id = 21, match = {text="", interval=0}, no_match = {text=""}, count=1, restart=true, notification = {}} -- Waze Calculator multi-itinéraires } Ajouter à votre code WatchDog la fonction Restart2 (de @Titof_44) ci-dessous juste avant la fonction Restart -- -- function Restart2 de @Titos_44 qui permet de faire une stop/start pour relancer une scène qui a planté avec un message de type Error (en rouge) -- function Restart2(type, id, restart, notification) Message("blue", 'Restart2 '..type..'('..id..')') local httpClient = net.HTTPClient() httpClient:request("http://127.0.0.1:11111/api/sceneControl?id="..id.."&action=stop") Message("green", type.."("..id..") successfully stop") fibaro:sleep(1000) httpClient:request("http://127.0.0.1:11111/api/sceneControl?id="..id.."&action=start") Message("green", type.."("..id..") successfully restarted") end Ajout de l'appel de la fonction restant2 dans la fonction restart entre les 2 lignes (if restant and restant == true) et (--save VD/Scene) comme illustré ci-dessous : if restart and restart == true then -- Ajout restart2 MAM78 if type:lower() == "scene" then Restart2(type, id, restart, notification) end -- Fin ajout restart2 MAM78 -- Save VD/Scene Attention de bien paramétrer votre scène Waze Calculator itin avec (Max. running instances = 1) et (Run scene = Manual) 4 - Icône Modifier l'icône de vos VD et votre scène 5 - Fichiers sources Fichier du vd: HC2 Waze Calculator VD Itinéraire 3 V1.1.1.vfib.json Fichier de la scène: HC2 Waze Calculator Scene Itinéraire 3 V1.1.5.lua 6 - Change Log : 28/02/2017 : Ajout d'explications dans le Tuto : comment modifier la scène WatchDog pour y ajouter la fonction restart2 de @Titof_44 27/02/2017 : Nouvelle version de la scène V1.1.5 - Désactivation des modes trace + quelques motifs de formes et indication comment contourner lors la scène bug. (voir ci-dessous au point 3) 20/02/2017 : Nouvelle version de la scène V1.1.4 - Ajout d'un mode debug pour suivre l'avancement des étapes et des erreurs dans le traitement (cf. variable : modedebug ) 19/02/2017 : Nouvelle version de la scène V1.1.3 - Ajout d'un mode trace pour suivre l'execution du traitement (cf. variable : modetrace ) 19/02/2017 : Nouvelle version de la scène V1.1.2 - correction du message d'erreur LuaEnvironment: /opt/atlassian/bamboo-agent.. (peut-être ?) 18/02/2017 : Nouvelle version de la scène V1.1.1 - correction sur messages d'erreurs 18/02/2017 : Nouvelle version du VD V1.1.1 - réduction du libellé des itinéraires pour laisser plus de place aux textes des itinéraires. 7 - Remerciements à @Krikroff pour avoir initié cette fonction Waze Calculator qui est vraiment géniale à @Moicphil pour son icône tip-top à @Lazer, @Sakkhho, @Steven, @pepite pour m'avoir aidé au debuging et à @Titof_44 pour sa scène WatchDog Modifié le 28 février 2017 par MAM78 Nouvelle version de la scène - Ajout d'un mode trace 5
pepite Posté(e) le 18 février 2017 Signaler Posté(e) le 18 février 2017 Super, a tester :-) Belle adaptation du VD d un patron
Sakkhho Posté(e) le 18 février 2017 Signaler Posté(e) le 18 février 2017 (modifié) oui bravo. J'avais le meme besoin mais pas réussi à faire en sorte qu'il évite le péage, donc l'alternative de calculer 3 itinéraires est top Edit : j'ai mis la scene en route mais j'ai un [DEBUG] 08:41:06: parsing error au debut, mais sans gêner l'executer de la scene tu sais dire ? Modifié le 18 février 2017 par Sakkhho
Sakkhho Posté(e) le 18 février 2017 Signaler Posté(e) le 18 février 2017 (modifié) un check toutes les 5mns serait suffisant à mon avis. c'est le pooling qu'il faut modifier c'est ca ? pollingMs = 5*60*1000 EDIT : ok, c'est bien ca. Peut être plus explicite sur le poste 1 , car au lieu de durée des traitements c'est plutôt intervalle d'interrogation du site waze Donc c 'est tout bon, reste juste le "parsing error" au lancement pour être nickel. merci encore Modifié le 18 février 2017 par Sakkhho
Sakkhho Posté(e) le 18 février 2017 Signaler Posté(e) le 18 février 2017 par moment ca bug - mais ca doit être à cause du site waze [DEBUG] 11:00:56: Get data error = Operation canceled [DEBUG] 11:01:09: Get data error = Operation canceled [DEBUG] 11:01:22: Get data error = Bad file descriptor [DEBUG] 11:01:35: Get data error = Operation canceled
Sakkhho Posté(e) le 18 février 2017 Signaler Posté(e) le 18 février 2017 ouch merchant bug là [ERROR] 14:54:17: LuaEnvironment: /opt/atlassian/bamboo-agent/xml-data/build-dir/HC-LE99-JOB1/LuaEngine/vendor/avhttp/avhttp/impl/http_stream.ipp:2247: void avhttp::http_stream::handle_skip_crlf(const MutableBufferSequence&, Handler, boost::shared_array, const boost::system::error_code&, std::size_t) [with MutableBufferSequence = boost::asio::mutable_buffers_1; Handler = boost::function; std::size_t = unsigned int]: Assertion `crlf[0] == '\r' && crlf[1] == '\n'' failed.
MAM78 Posté(e) le 18 février 2017 Auteur Signaler Posté(e) le 18 février 2017 Effectivement, j'avais également quelques erreurs dans les logs. Concernant les erreurs : parsing error, il s'agit d'erreur code p.status 503 ou 500 donc liée à une indisponibilité du serveur Waze. J'ai mis un message plus explicite "Erreur d'indisponibilité du serveur Waze" Get data error = Operation canceled et Get data error = Bad file descriptor, il s'agit d'une anomalie sur la fonction de traitement des erreurs. Un repositionnement de la fonction semble avoir corrigé les erreurs. Modification du premier post sur la description de la variable "pollingMs". Il s'agit bien de l'intervalle d'interrogation du site waze. @Sakkhho Merci pour tes commentaires et tests. Si tu veux je viens de déposer une nouvelle version de le scène qui devrait corriger une bonne partie des erreurs. Voici la nouvelle version. Je dépose celle-ci également dans le premier post. HC2 Waze Calculator Scene Itinéraire 3 V1.1.1.LUA 1
Sakkhho Posté(e) le 18 février 2017 Signaler Posté(e) le 18 février 2017 j'ai mis en place la nouvelle version, je te dirai d'ailleurs ceci est inutile if (fibaro:countScenes() > 1) then fibaro:abort() end maintenant on a le nb d'instance dans le parametrage des scenes
Sakkhho Posté(e) le 18 février 2017 Signaler Posté(e) le 18 février 2017 ca semble bugger autant, mais c'est message d'erreur la scene ne s'est pas mis à jour depuis 19h15
Sakkhho Posté(e) le 18 février 2017 Signaler Posté(e) le 18 février 2017 la scene s'arrete chez toi aussi ? mon watchdog tente de la relancer sans cesse
MAM78 Posté(e) le 19 février 2017 Auteur Signaler Posté(e) le 19 février 2017 Oui effectivement, je cherche d'où pourrait venir l'erreur
MAM78 Posté(e) le 19 février 2017 Auteur Signaler Posté(e) le 19 février 2017 Je pense avoir trouvé l'erreur du message d'erreur LuaEnvironment: /opt/atlassian/bamboo-agent.. (peut-être ?) Nouvelle version de la scène V1.1.2. cf. fichier : HC2 Waze Calculator Scene Itinéraire 3 V1.1.2.LUA
MAM78 Posté(e) le 19 février 2017 Auteur Signaler Posté(e) le 19 février 2017 J'ai ajouté dans la partie déclaration de variable USER DATA une variable que vous pouvez modifier, il s'agit de la variable : modetrace (soit égale à true ou false) qui permet suivre dans le fenêtre de debug l'avancement du traitement avec des commentaires Nouvelle version de la scène V1.1.3. cf. fichier : HC2 Waze Calculator Scene Itinéraire 3 V1.1.3.LUA
Arbu-jl Posté(e) le 19 février 2017 Signaler Posté(e) le 19 février 2017 C'est parfait. Fonctionne super bien Merci
Sakkhho Posté(e) le 19 février 2017 Signaler Posté(e) le 19 février 2017 toujours un méchant bug qui fait tout planter [ERROR] 11:27:15: LuaEnvironment: /opt/atlassian/bamboo-agent/xml-data/build-dir/HC-LE99-JOB1/LuaEngine/vendor/avhttp/avhttp/impl/http_stream.ipp:2247: void avhttp::http_stream::handle_skip_crlf(const MutableBufferSequence&, Handler, boost::shared_array, const boost::system::error_code&, std::size_t) [with MutableBufferSequence = boost::asio::mutable_buffers_1; Handler = boost::function; std::size_t = unsigned int]: Assertion `crlf[0] == '\r' && crlf[1] == '\n'' failed.
MAM78 Posté(e) le 19 février 2017 Auteur Signaler Posté(e) le 19 février 2017 (modifié) A l'aide des expert du forum ? Est-ce l'un de vous pourrait me dire d'où pourrait provenir l'erreur ci-dessus. Elle est générée par l'instruction suivante ? http:request(query, { options = { method = 'GET', headers = {["Content-Type"] = "application/json"}, data = body}, success = function(p) Est-ce qu'il est possible de detecter cette erreur sans que cela fasse planter la Scène ? Je me pose la question suivante : cette instruction n'a pas de parenthèse et de crochet de fin tout de suite après celle-ci (idem que sur le code de @Krikroff) Cette parenthèse et crochet de fin arrive qu'après l'ensemble des instruction de traitement du résultat de la requête http. Est-ce normal ? Modifié le 19 février 2017 par MAM78
Krikroff Posté(e) le 19 février 2017 Signaler Posté(e) le 19 février 2017 J'ai déjà remonté l'info à Fibaro pour correction dans une prochaine build... Sans rentrer dans les détails c'est en rapport avec la solution utilisée par Fibaro pour l'intégration continue...Il y a selon moi encore des problèmes de stabilité avec les sockets Envoyé de mon iPhone en utilisant Tapatalk
MAM78 Posté(e) le 19 février 2017 Auteur Signaler Posté(e) le 19 février 2017 merci pour ton retour @Krikroff Ca ne vient donc pas du code de la scène Est-ce qu'il est possible soit : de detecter cette erreur pour l'intercepter et éviter que cela fasse planter la Scène ? de contourner celle-ci en codant la requête d'une autre façon ?
Sakkhho Posté(e) le 19 février 2017 Signaler Posté(e) le 19 février 2017 j'ai pas en tete que la scene de Krikroff plantait. tu as testé ? mais j'ai supprimé cette scene car 1 itinéraire le matin c'est celui avec peage tout le temps donc inutile
MAM78 Posté(e) le 19 février 2017 Auteur Signaler Posté(e) le 19 février 2017 (modifié) Idem pour moi, c'est bien pour ça que j'ai voulu faire cette adaptation Est-ce que l'utilisation de Watchdog permettait de contourner le PB le moment le problème afin que la scène soit relancée régulièrement ? Modifié le 19 février 2017 par MAM78
Sakkhho Posté(e) le 19 février 2017 Signaler Posté(e) le 19 février 2017 ben le watchdog de @Lazer devrait la relancée, mais ca marche pas.
MAM78 Posté(e) le 19 février 2017 Auteur Signaler Posté(e) le 19 février 2017 (modifié) Je viens d'installer Watchdog et effectivement, j'ai le même problème que toi @Sakkhho La scène est portant bien arrêtée et malgré l'indication suivante dans le débugueur de Watchdog : [DEBUG] 20:27:12: Check : type=Scene id=18 [DEBUG] 20:27:12: Scene(18) 0 running instance [DEBUG] 20:27:12: Restart Scene(18) [DEBUG] 20:27:12: Scene(18) successfully restarted [DEBUG] 20:27:12: Notification : Watchdog : Scene "Waze Calculator Itin" (18) a été redémarré Elle ne redémarre pas Est-ce que tu aurais une idée d'où vient le problème ? @Lazer Modifié le 19 février 2017 par MAM78
Lazer Posté(e) le 19 février 2017 Signaler Posté(e) le 19 février 2017 Ca ressemble au bug de la sauvegarde des scènes, qui existe depuis la 4.100, déjà relevé pour la scène GEA.
MAM78 Posté(e) le 20 février 2017 Auteur Signaler Posté(e) le 20 février 2017 il y a une heure, Lazer a dit : Ca ressemble au bug de la sauvegarde des scènes, qui existe depuis la 4.100, déjà relevé pour la scène GEA. T'aurais pas une idée pour corriger ou contourner le problème ? Ca fais des heures que je recherche une solution et commence à tourner en rond. C'est quoi le problème de la sauvegarde de scènes dans GEA ?
Messages recommandés