Aller au contenu
sebcbien

Yams - Yet Another Meteo Station

Recommended Posts

Bonjour,

 

Je crée ce petit fil pour publier mes modifications du plugin météo de Steven.

 

Voici à  quoi ça ressemble:

 

Voici la version de Steven: (chez moi le mm de pluie ne fonctionnent pas)

http://www.domotique-fibaro.fr/index.php/topic/1211-support-gea/page-220#entry92618

572857prevision.png

 

Et voici ma version modifiée qui pousse les résultats dans 3 Variables Globales (à  créer) afin de pouvoir être utilisées ailleurs comme par exemple dans GEA.

voici le fichier du VD:

Prévision_Météo.vfib

et le screenshot:

317136061115182223.jpg

 

Pour la configuration, il suffit donc de créer les 3 VG non prédéfinies:

Meteo_Lendemain
Meteo_Actuelle
Meteo_Actuelle_Jou

et de mettre le nom de la ville ici:

local ville = "bruxelles"

Voici le code principal pour info:

local ville = "bruxelles"
local Meteo_Actuelle_Local = " "
local Meteo_Lendemain_Local = " "
local Meteo_Actuelle_Journee_Local = " "
local dateTag = os.date("%H:%M", os.time())

-- ================================== --
local URL = Net.FHttp("www.prevision-meteo.ch")
response, status, errorCode = URL:GET("/services/json/" .. ville)
local jsonTable = json.decode(response)

local lieu = jsonTable.city_info.name .. " ["..jsonTable.city_info.elevation.. "m]"
local current = jsonTable.current_condition.condition -- conditions actuelle
local current_journee = jsonTable.fcst_day_0.condition -- conditions générale de la journée
local temp = jsonTable.current_condition.tmp .. "°C ["..jsonTable.fcst_day_0.tmin .. "°/" .. jsonTable.fcst_day_0.tmax.."°]"
local Meteo_Day = jsonTable.fcst_day_0.day_long
local Meteo_Time = "["..jsonTable.current_condition.hour.."]"

local pluie = 0
local snow = false
for k, v in pairs(jsonTable.fcst_day_0.hourly_data) do
  if (tonumber(v.APCPsfc) > 0) then pluie = pluie + tonumber(v.APCPsfc) 
  fibaro:debug("Pluie à  "..k.." - Total du jour: "..pluie.."mm")
  end
  if v.ISSNOW == 1 then
  snow = true
  fibaro:debug("K: "..k.." = !! NEIGE !!")
  end 
end
pluie = pluie .. " "
if (snow) then pluie = pluie .. "!! NEIGE !!" end

local id = fibaro:getSelfId()
fibaro:call(id, "setProperty", "ui.Label1.value", lieu)
fibaro:call(id, "setProperty", "ui.Label2.value", current_journee)
fibaro:call(id, "setProperty", "ui.Label3.value", current)
fibaro:call(id, "setProperty", "ui.Label4.value", temp)
fibaro:call(id, "setProperty", "ui.Label5.value", pluie.." mm")

Meteo_Actuelle_Local = Meteo_Time.." Météo Actuelle: "..current.." T°: "..temp.." Pluie: "..pluie.." mm"
fibaro:setGlobal("Meteo_Actuelle", Meteo_Actuelle_Local)
fibaro:debug(dateTag .." "..Meteo_Actuelle_Local)
Meteo_Actuelle_Journee_Local = Meteo_Time.." Météo de ce "..Meteo_Day..": "..current_journee.." T°: "..temp.." Pluie: "..pluie.." mm"
fibaro:setGlobal("Meteo_Actuelle_Jou", Meteo_Actuelle_Journee_Local)
fibaro:debug(dateTag .." "..Meteo_Actuelle_Journee_Local)

current = jsonTable.fcst_day_1.condition
temp = "["..jsonTable.fcst_day_1.tmin .. "°/" .. jsonTable.fcst_day_1.tmax.."°]"
Meteo_Day = jsonTable.fcst_day_1.day_long
pluie = 0
snow = false
for k, v in pairs(jsonTable.fcst_day_1.hourly_data) do
  if (tonumber(v.APCPsfc) > 0) then pluie = pluie + tonumber(v.APCPsfc) 
  fibaro:debug("Pluie à  "..k.." - Total du jour: "..pluie.."mm")
  end
  if v.ISSNOW == 1 then
  snow = true
  fibaro:debug("K: "..k.." = !! NEIGE !!")
  end 
end
pluie = pluie .. " "
if (snow) then pluie = pluie .. "!! NEIGE !!" end

fibaro:call(id, "setProperty", "ui.Label6.value", current)
fibaro:call(id, "setProperty", "ui.Label7.value", temp)
fibaro:call(id, "setProperty", "ui.Label8.value", pluie.." mm")

Meteo_Lendemain_Local = Meteo_Time.." Météo de demain "..Meteo_Day..": "..current.." T°: "..temp.." Pluie: "..pluie.." mm"
fibaro:setGlobal("Meteo_Lendemain", Meteo_Lendemain_Local)
fibaro:debug(dateTag .." ".. Meteo_Lendemain_Local)

Et pour finir, voici le code GEA pour exploiter tout ceci:

Je l'ai écrit de cette manière qu'il n'y a pas de push si on n'est pas à  la maison et uniquement une seule fois par jour chaque météo (du jour et du lendemain)

- la météo du jour est poussée sur le smartphone au matin au moment ou on désactive le mode nuit pour savoir le temps lorsque l'on s'habille)

- la météo du lendemain est poussée le soir au retour sur le smartphone afin de savoir le temps du lendemain pour préparer les vêtements des enfants avant de les mettre au lit.

afin de me passer de VG, j'ai ajouté un petit délai, donc mettre ça en fin de liste GEA

local estAt_Home = {"Global", "PresentState", "At_Home"}
local estAway = {"Global", "PresentState", "Away"}
local est_AtHome_Or_Kids_Sleeping = {"Global", "PresentState", "Kids_Sleeping|At_Home"}

---------------------METEO----------------------
-- Météo soir 10 min après retour maison (away pendant plus de 30 minutes)
  isLongAwayOff = false
GEA.add(estAway, 30*60, "", {{"function",function() isLongAwayOff = true end}})
GEA.add({estAt_Home,{"Global!", "Meteo_Lendemain", ""},{"function",function() return isLongAwayOff end}}, 10*60, "#value[2]#",{{"Time", "17:00", "20:30"},{"Portable", id["PHONE_SEB"]},{"Portable", id["PHONE_GG"]},{"function",function() isLongAwayOff=false end}})
------------------------------
-- Météo matin Instantanée au changement de presentState
GEA.add({est_AtHome_Or_Kids_Sleeping}, -1, "",{{"function",function() fibaro:debug("  ------- waiting 1 s for PrevisousState dependent actions ------") end},{"function",function() fibaro:sleep(1100) end}}) 
GEA.add({est_AtHome_Or_Kids_Sleeping,{"Global!", "Meteo_Actuelle_Jou", ""},{"Global", "PreviousState", "Night_All_Off"}}, -1, "#value[2]#",{{"Portable", id["PHONE_SEB"]},{"Portable", id["PHONE_GG"]}})
-- !!!!!!!!!!! LES ACTIONs instantanées placées CI DESSOUS AURONT UN DELAI DE 1,1 A CHAQUE CHANGMENT de PresentState = à  At_Home ou Kids_Sleepin !!!!!!!!!! -------------    

La variable globale previousState est définie par la scène ci-dessous, qui permet au script de savoir dans quel état se trouvait la maison juste avant le changement de la VG PresentState

Pour cela il faut crée une VG PreviousState (de préférence prédéfinie)

Connaitre l'état précédent de la maison peut être utile a de nombreuses occasions dont ici la météo.

Mais je l'utilise aussi pour différencier si la maison est au réveil ou au passage en mode nuit etc.

Ce n'est pas nécessaire donc mais utile pour une meilleure domotisation avec moins de notifications inutiles, actions à  réaliser manuellement.

--[[
%% properties
%% globals
PresentState
--]]
local This_Instance_State = fibaro:getGlobalValue("PresentState");
fibaro:debug(os.date("%a %d/%m", os.time()).." new start with PresentState = " .. This_Instance_State);
while This_Instance_State == fibaro:getGlobalValue("PresentState") do
  fibaro:sleep(1000);
  --fibaro:debug("waiting with this instance = "..This_Instance_State)
end

fibaro:setGlobal("PreviousState", This_Instance_State);
fibaro:debug(os.date("%a %d/%m", os.time()).." Exit With PreviousState set at: ".. This_Instance_State);
  • Upvote 2

Partager ce message


Lien à poster
Partager sur d’autres sites

Super ;-)

 

Je joue le fainenant, peux-tu partager le VD stp ? Suis pret : variables créées.

Jolie Gestion avec GEA.

 

Etonnant le nom ;-) YAMS

:60:

Partager ce message


Lien à poster
Partager sur d’autres sites

Ouuupppssss .... ;-)

 

edit: c'est fait :-)

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci

 

Sympa ta gestion dans le main loop. en secs ou en mins "instance.every" ?

 

Vais pas m'en servir pour ce VD, je vais jouer avec GEA avec un matin et un soir ;-) mais je le garde de cote.

 

MERCI

Partager ce message


Lien à poster
Partager sur d’autres sites

effectivement le main loop est de toute beuté...

 

 

Mais c'est maitre @steven qui l'a fait  :13:

Partager ce message


Lien à poster
Partager sur d’autres sites

mes respects toujours au maitre ;-)

 

Tu sais si c'est en secs ou en mins alors ?

Partager ce message


Lien à poster
Partager sur d’autres sites

30 = 30 minutes

 

ce qui est rigolo c'est qu'il se lance une fois, puis ensuite toutes les heures pile, heures 30 etc.

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour et merci pour cet excellent VD en espèrent que les prévisions se rapprochent de la réalité  :rolleyes: .

je voudrait stoker la valeur de la prévision pluie du jour même dans une variable pour l'utiliser dans ma gestion de l'arrosage .

comment faire? je sèche là  

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Tu dois simplement stocker la variable pluie (au niveau de la ligne qui calcule le total du jour) dans une variable globale

Sent from my Note4

 

edit: de retour sur mon pc, je peux te donner le No de la ligne:

Tu peux faire un setGlobal de la variable pluie juste après la ligne 30 (avant qu'elle ne soit mise en forme).

exemple:

fibaro:setGlobal("Pluie__Actuelle", pluie)

Partager ce message


Lien à poster
Partager sur d’autres sites

en espèrant que les prévisions se rapprochent de la réalité  :rolleyes: .

 

J'espère aussi ... et ce n'est pas facile pour le moment car il ne pleut pas... j'ai donc un peu travaillé à  l'aveugle.

A confirmer donc

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

au top,

 

Bon auj, j'ai recu la meteo d'hier ;-)

je jette un oeil ;-)

Partager ce message


Lien à poster
Partager sur d’autres sites

au top,

 

Bon auj, j'ai recu la meteo d'hier ;-)

je jette un oeil ;-)

 

A "cause" de (ton) gea ou alors les VG ne sont pas bien "remplies" ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour, Excusez moi pour cette question débile... Je ne sais pas quoi faire avec les deux derniers morceaux de codes. J'ai créer les 3 variables dans le panneau de variables comme mentionné en amont et importé aussi le VD, il fonctionne bien je vois bien la méteo du jour et le prévisionnel. Merci pour votre aide, je débute...

 

Autre question pour la création de variable prédéfinies PresentState et PreviousState que mettre dans "valeur" ?

 

Merci

Partager ce message


Lien à poster
Partager sur d’autres sites

PresentState me permet de savoir dans quel mode est ma maison et de l'utiliser un peu partout, par exemple dans gea: http://www.domotique-fibaro.fr/index.php/topic/2143-showroom-configs-gea/#entry27457

Mais ce sont mes etats, pour mes besoins...

A toi de définir les iens, comment les nommer et les utiliser.

ici le derner script ça me permet de savoir quel est l'état actuel de la maison et l'état précédent.

je peux donc pousser la météo sur les smartphone uniquement au réveil quand on désactive l'alarme.C'est un plus, ce n'est pas obligatoire.

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci bien pour ce complément.

 

Comment je pourrais faire pour que :

 

1- chaque soir à  20h je puisse recevoir une notification push sur mon iphone avec la météo du lendemain.

2- chaque matin à  07h je puisse recevoir une notification push sur mon iphone avec la météo du jour.

 

Il faut coder a la main ou ce serait possible avec le mode scène bloc ?

 

Merci ;)

Partager ce message


Lien à poster
Partager sur d’autres sites

Très facile avec gea avec les options {time,...,...}

Sinon en.mode block je ne pense pas que l'on peut envoyer le contenu d'une vg via un push

Sent from my Note4

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour, voici l'icone que j'utilise.

 

post-826-0-85319100-1447418053_thumb.png

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci pour tout ou doit toi mettre le dernier script  :j'ai ajouté un petit délai, donc mettre ça en fin de liste GEA  merci je suis un newbie j'essaye de comprendre.

Partager ce message


Lien à poster
Partager sur d’autres sites

Explique nous ce que tu veux faire, j'ai pas suivi le fil depuis le début.

Mets du code si tu en as pour qu'on puisse te répondre

Partager ce message


Lien à poster
Partager sur d’autres sites

Je suis le tuto :

 

 

Et pour finir, voici le code GEA pour exploiter tout ceci:

Je l'ai écrit de cette manière qu'il n'y a pas de push si on n'est pas à  la maison et uniquement une seule fois par jour chaque météo (du jour et du lendemain)

- la météo du jour est poussée sur le smartphone au matin au moment ou on désactive le mode nuit pour savoir le temps lorsque l'on s'habille)

- la météo du lendemain est poussée le soir au retour sur le smartphone afin de savoir le temps du lendemain pour préparer les vêtements des enfants avant de les mettre au lit.

afin de me passer de VG, j'ai ajouté un petit délai, donc mettre ça en fin de liste GEA

  1.  
  2. local estAt_Home = {"Global", "PresentState", "At_Home"}
  3. local estAway = {"Global", "PresentState", "Away"}
  4. local est_AtHome_Or_Kids_Sleeping = {"Global", "PresentState", "Kids_Sleeping|At_Home"}
  5.  
  6. ---------------------METEO----------------------
  7. -- Météo soir 10 min après retour maison (away pendant plus de 30 minutes)
  8. isLongAwayOff = false
  9. GEA.add(estAway, 30*60, "", {{"function",function() isLongAwayOff = true end}})
  10. GEA.add({estAt_Home,{"Global!", "Meteo_Lendemain", ""},{"function",function() return isLongAwayOff end}}, 10*60, "#value[2]#",{{"Time", "17:00", "20:30"},{"Portable", id["PHONE_SEB"]},{"Portable", id["PHONE_GG"]},{"function",function() isLongAwayOff=false end}})
  11. ------------------------------
  12. -- Météo matin Instantanée au changement de presentState
  13. GEA.add({est_AtHome_Or_Kids_Sleeping}, -1, "",{{"function",function() fibaro:debug(" ------- waiting 1 s for PrevisousState dependent actions ------") end},{"function",function() fibaro:sleep(1100) end}})
  14. GEA.add({est_AtHome_Or_Kids_Sleeping,{"Global!", "Meteo_Actuelle_Jou", ""},{"Global", "PreviousState", "Night_All_Off"}}, -1, "#value[2]#",{{"Portable", id["PHONE_SEB"]},{"Portable", id["PHONE_GG"]}})
  15. -- !!!!!!!!!!! LES ACTIONs instantanées placées CI DESSOUS AURONT UN DELAI DE 1,1 A CHAQUE CHANGMENT de PresentState = à  At_Home ou Kids_Sleepin !!!!!!!!!! -------------
  16.  

Partager ce message


Lien à poster
Partager sur d’autres sites

bizarrement j'ai importé le VD, crée les 3 VGs et j'ai une erreur quand je click sur refresh

(j'ai laissé bruxelles pour le moment)

[ERROR] 09:23:13: line 10: Expected value but found T_END at character 1

EDIT : j'ai changé de ville et c'est bon :-) il aime pas les belges.

Partager ce message


Lien à poster
Partager sur d’autres sites

J'aime bien ce VD pour ça mise en page et pour les VGs, adopté

J'ai rajouté la gestion des icônes comme dans le module météo du fofo ici

 

à  savoir

--Affichage des icones en fonction des conditions météo
local icone = {
  ["Ensoleillé"] = 1057, --numéro icone à  renseigner
  ["Nuit claire"] = 1079,
  ["Ciel voilé"] = 1063,
  ["Nuit légèrement voilée"] = 1082,
  ["Faibles passages nuageux"] = 1069,
  ["Nuit bien dégagée"] = 1078,
  ["Brouillard"] = 1062,
  ["Stratus"] = 1090,
  ["Stratus se dissipant"] = 1091,
  ["Nuit claire et stratus"] = 1080,
  ["Eclaircies"] = 1066,
  ["Nuit nuageuse"] = 1083,
  ["Faiblement nuageux"] = 1067,
  ["Fortement nuageux"] = 1070,
  ["Averses de pluie faible"] = 1059,
  ["Nuit avec averses"] = 1075,
  ["Averses de pluie modérée"] = 1061,
  ["Averses de pluie forte"] = 1060,
  ["Couvert avec averses"] = 1064,
  ["Pluie faible"] = 1088,
  ["Pluie forte"] = 1089,
  ["Pluie modérée"] = 1092,
  ["Développement nuageux"] = 1065,
  ["Nuit avec développement nuageux"] = 1077,
  ["Faiblement orageux"] = 1068,
  ["Nuit faiblement orageuse"] = 1081,
  ["Orage modéré"] = 1084,
  ["Fortement orageux"] = 1071,
  ["Averses de neige faible"] = 1058,
  ["Nuit avec averses de neige faible"] = 1076,
  ["Neige faible"] = 1072,
  ["Neige modérée"] = 1074,
  ["Neige forte"] = 1073,
  ["Pluie et neige mêlée faible"] = 1085,
  ["Pluie et neige mêlée modérée"] = 1087,
  ["Pluie et neige mêlée forte"] = 1086
}

-- Détermination de l'icône associée à  la condition
local Num_Icone = icone[current_journee]
fibaro:call(fibaro:getSelfId() , "setProperty", "currentIcon", Num_Icone)
  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

×