eric_le_belge Posté(e) le 4 janvier 2020 Signaler Posté(e) le 4 janvier 2020 Bonjour à tous, Pour mon premier vrai script LUA j'ai créé un mini-module météo, et pour cela j'ai adapté des pépites trouvées sur le net pour créer l'équivalent d'une fonction CASE. Le principe est simple, on passe 2 arguments, d'abord ce que l'on cherche, puis le tableau dans lequel on fait la recherche. Peu importe ce qui se trouve dans ce tableau, cela peut être une phrase (ici c'est le cas), une instruction à exécuter... Cela fonctionne bien, mais je coince sur un truc. Lors de la création de mon tableau liste_meteo, tout fonctionne tant que je n'ai qu'un mot, un chiffre ou un caractère. Mais si j'essaie de mettre une phrase, ça bug. Ici le but est de traduire la météo anglaise en français, mais je bloque sur Mostly Cloudy. J'ai essayé avec guillemets, avec le symbole [], mais rien à faire. Question bis: fibaro:debug est utile lors du debug, mais est-il possible d'afficher un message lors de l'exécution dans la petite fenêtre de 4 lignes en haut de l'interface web ? --[[ %% autostart %% properties %% events %% globals --]] local function switch(choix,listedechoix) -- accepte aussi bien les nombres que les caractères ou chaine en argument choix -- choix = élement recherché -- listedechoix: liste d'arguments construits selon l'exemple ci-dessous -- retour: chaine retour définie dans le tableau if listedechoix[choix] then listedechoix[choix]() else listedechoix["default"]() end return retour end local Jour = fibaro:getValue(1,"sunriseHour") local Nuit = fibaro:getValue(1,"sunsetHour") local Temperature = api.get('/weather')['Temperature'] local Conditions = api.get('/weather')['WeatherCondition'] local Humidite = api.get('/weather')['Humidity'] local Vent = api.get('/weather')['Wind'] local temin = "" local meteo = "" local min_temp = tonumber(fibaro:getGlobalValue('minimum_temp')) local listemeteo = { clear = function ( ) retour = "Dégagé" end, cloudy = function ( ) retour = "Nuageux" end, --Mostly cloudy = function ( ) retour = "Très Nuageux" end, rain = function ( ) retour = "Pluie" end, default = function ( ) retour = Conditions end, }; -- ------------------------------------------------------------------------------- -- Code principal -- ------------------------------------------------------------------------------- fibaro:debug("Mise à jour de la météo") if (min_temp > tonumber(Temperature)) then fibaro:setGlobal('minimum_temp',tonumber(Temperature)); min_temp = tonumber(Temperature); end -- mise en forme des résultats temin = string.format("%2.1f",min_temp); Temperature = string.format("%2.1f",Temperature); Vent = string.format("%2.0f", Vent); -- Traduction de la météo meteo = switch(Conditions,listemeteo) -- mise à jour des affichages fibaro:call(fibaro:getSelfId(),"setProperty","ui.Leve.value",Jour); fibaro:call(fibaro:getSelfId(),"setProperty","ui.Couche.value",Nuit); fibaro:call(fibaro:getSelfId(),"setProperty","ui.Temp.value","Min "..temin.." / Actuelle "..Temperature.."°c"); fibaro:call(fibaro:getSelfId(),"setProperty","ui.Conditions.value",meteo); fibaro:call(fibaro:getSelfId(),"setProperty","ui.Humidite.value",Humidite .. "%"); fibaro:call(fibaro:getSelfId(),"setProperty","ui.Vent.value",Vent .. "km/h"); -- mise en sommeil pour 30 minutes fibaro:sleep(18000000); En espérant avoir été clair... Eric
eric_le_belge Posté(e) le 4 janvier 2020 Auteur Signaler Posté(e) le 4 janvier 2020 Je me réponds à moi-même... Voila le bon code local listemeteo = { clear = function ( ) retour = "Dégagé" end, cloudy = function ( ) retour = "Nuageux" end, ["Mostly Cloudy"] = function ( ) retour = "Très Nuageux" end, rain = function ( ) retour = "Pluie" end, default = function ( ) retour = Conditions end, }; Prochaine étape, remplacer le module météo par un appel externe, mais là faut que je potasse json...
jjacques68 Posté(e) le 4 janvier 2020 Signaler Posté(e) le 4 janvier 2020 je suis ton sujet, mais j‘ai du mal à comprendre ce que tu cherches à faire...
eric_le_belge Posté(e) le 4 janvier 2020 Auteur Signaler Posté(e) le 4 janvier 2020 En globalité ou uniquement sur la fonction ? Globalité c'est un Vd météo pas bien compliqué. La fonction switch est simple: tu construits un tableau avec tes éléments, et une ligne défaut. tu appelles la fonction switch avec l'élement cherché et le tableau Si l'élément est trouvé, switch retourne la valeur de la 2ème colonne du tableau, sinon switch retourne la valeur de défaut. ici je traduis la météo en anglais vers le français.
jjacques68 Posté(e) le 4 janvier 2020 Signaler Posté(e) le 4 janvier 2020 ah oui ok je comprends maintenant. PS : je mettrais partout les ["..."] pour les éléments de la liste, pour une question de lisibilité du code
pepite Posté(e) le 7 janvier 2020 Signaler Posté(e) le 7 janvier 2020 Le 04/01/2020 à 17:14, eric_le_belge a dit : est-il possible d'afficher un message lors de l'exécution dans la petite fenêtre de 4 lignes en haut de l'interface web ? Bonjour, Je ne sais plus vraiment pour la petite fenetre, mais t peux envoyer des notifications à la HC2 Regarde cela
Messages recommandés