Aller au contenu

Yams - Yet Another Meteo Station


sebcbien

Messages recommandés

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
Lien vers le commentaire
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
Lien vers le commentaire
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)
Lien vers le commentaire
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
Lien vers le commentaire
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

Lien vers le commentaire
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.

Lien vers le commentaire
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 ;)

Lien vers le commentaire
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.  
Lien vers le commentaire
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.

Lien vers le commentaire
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
Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...