Julien Lemare Posté(e) le 14 septembre 2015 Signaler Posté(e) le 14 septembre 2015 Voici ma petite et très fine contribution à ce super forum, grâce à qui j'apprend pas mal de choses ! Je me suis beaucoup aidé d'un post du fofo et par la suite j'ai adapté ce qui existait pour répondre plus à mon besoin : Thanks pépite !! http://www.domotique-fibaro.fr/index.php/topic/4147-pr%C3%A9vision-m%C3%A9t%C3%A9o/?hl=%2Bprevision+%2Bmeteo - ici mon appart avec la maison de mes parents (car j'aime bien comparer au bord de mer) Dans l'utile, j'ai appart + lieu de travail ^^, J'ai quelques améliorations en vue, et je travail déjà dessus : - Étoffer le Module Virtuel avec d'autres informations. 1 ère maj - Vocalisation des données, dans un premier temps, température mini et maxi suivi de l'état du ciel. - Intégration d'un service météo pour l'international. - Notification via le centre FIBARO (http://blogjulienl.com/2015/09/08/homecenter-popupservice-publish/) - Conseil sur les habits à porter ainsi que les accessoires a prendre (parapluie, etc ...) - Enregistrement des données pour faire des comparaisons avec l'extérieur et l'intérieur. Pour l'instant je pense à thingSpeak ( il faut dire que je connais que celui ci ^^ ) 1 ère maj J'essaierai de commenter un maximum, pour d'une part me rappeler et d'autre part me faire corriger si j'ai mal compris. Si il y a des corrections à faire je suis preneur, car j'apprend à peine le LUA et j'avoue être FAN ^^, Ci joint la V.1
Julien Lemare Posté(e) le 15 septembre 2015 Auteur Signaler Posté(e) le 15 septembre 2015 - Remise à plat du code - Ajout de valeurs - Enregistrement des valeurs prévues avec thingspeak J'ai 3 ville pour ma part ;-) Appartement Boulot Maison de bord de mer Il suffit juste de vous rendre sur google map pour connaitre votre possition. Attention à bien respecter la typo de lat et lng. Ligne 8 : local response, status, errorCode = HC2:GET("/services/json/lat=49.09lng=2.160"); local date = os.date("%d/%m/%y %H:%M") -- Mise à jour de l'horodatage de la Mise à jour fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Labelmaj.value", date); HC2 = Net.FHttp("www.prevision-meteo.ch",80); -- Connection au site local response, status, errorCode = HC2:GET("/services/json/lat=48.5017lng=1.3513"); --Appel du fichier JSON (changer la latitude et longitude). Possible de faire automatiquement en récupérant celle renseigner dans la config HC2. Pas dispo ici. if (tonumber(errorCode) == 0) -- Pas d'erreur then jsonTable = json.decode(response); -- Création d'une table local tempactuelle=(jsonTable.current_condition.tmp); -- Toutes les (variables) local sont propres au module virtuel. VD. Il suffit de se référer au document officiel (API) : http://www.prevision-meteo.ch/uploads/pdf/recuperation-donnees-meteo.pdf local tempmini=(jsonTable.fcst_day_0.tmin); local tempmaxi=(jsonTable.fcst_day_0.tmax); local cond=(jsonTable.current_condition.condition); local windext=fibaro:getValue(3, "Wind"); -- Pour mémo, le 3 est l'ID des infos en haut à droite de votre interface web. Wind, Humidity et Temperature. Le dernier est à vérifier car je ne me souvient plus ^^, local humidite=fibaro:getValue(3, "Humidity"); local sunrise=(jsonTable.city_info.sunrise); local sunset=(jsonTable.city_info.sunset); local rafale=(jsonTable.current_condition.wnd_gust); local direction=(jsonTable.current_condition.wnd_dir); local miniprev=(jsonTable.fcst_day_1.tmin) local maxiprev=(jsonTable.fcst_day_1.tmax) local condprev=(jsonTable.fcst_day_1.condition) fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Labelactuelle.value", tempactuelle.. " °c"); -- A partir du moment où nous avons nos local, je les écrit toutes sur l'étiquette adéquate. fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Labeltempmini.value", tempmini.. " °c"); fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Labeltempmax.value", tempmaxi.. " °c"); fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label7.value", cond.. ""); fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Labelvent.value", windext.. " km/h"); fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Labelhumi.value", humidite.. " %"); fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label8.value", "Granville"); fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label23.value", "Granville"); fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Labelsunrise.value", sunrise.. ""); fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Labelsunset.value", sunset.. ""); fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Labelrafale.value", rafale.. " km/h"); fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Labeldirection.value", direction.. ""); fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Labelminiprev.value", miniprev.. " °c"); fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Labeltempmaxiprev.value", maxiprev.. " °c"); fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Labelcondprev.value", condprev.. ""); -- Ceci est valable pour les 3 boutons : Appartement, Bureau, Granville. end Ensuite pour l'enregistrement des valeurs, ici extérieure et salon. Il faut juste vous créer un compte, se faire 2 graphes et rentrer votre Key API éciture (WRITE) "key=5JYUD4J4FMYEQ52S&field1=" Vous pouvez changer cette clef en 1 clic ^^, thingspeak = Net.FHttp('api.thingspeak.com') local temperext=fibaro:getValue(3, "Temperature"); local temperint=fibaro:getValue(20, "value"); payload = "key=5JYUD4J4FMYEQ52S&field1=".. temperext.."&field2=".. temperint response, status, errorCode = thingspeak:POST('/update', payload) Le refresh : Toutes les heures à XXh30 je refresh l'appart et Toutes les heures à XXh00 je sauvegarde les températures. while true do local minute = os.date("%M") -- j'ouvre une variable local qui sera égale à la minute en cour, par exemple pour 15:36.25sec. minute sera égale à 36 fibaro:debug("heure OS : " ..minute) -- affichage pour vérification if minute == "30" then fibaro:call(fibaro:getSelfId(), "pressButton", "19") -- refresh appartement end if minute == "00" then fibaro:call(fibaro:getSelfId(), "pressButton", "28") end fibaro:sleep(59*1000) end
Messages recommandés