13013 Posté(e) le 29 décembre 2015 Signaler Posté(e) le 29 décembre 2015 @did, code épuré pour un bouton VD. local currentDate = os.date("*t"); local cond = fibaro:getValue(3, "WeatherConditionConverted"); local tempext = figaro:getValue(63, "value"); -- température extérieure local degre = string.gsub(tempext, '[,]' , ' degré ') local degre = string.gsub(degre, '[.]' , ' degré ') local degre = string.gsub(degre, '[-]' , ' moins ') local jour =""; if( os.date("*t").wday == 2 ) then jour = "Lundi"; end if( os.date("*t").wday == 3 ) then jour = "Mardi"; end if( os.date("*t").wday == 4 ) then jour = "Mercredi"; end if( os.date("*t").wday == 5 ) then jour = "Jeudi"; end if( os.date("*t").wday == 6 ) then jour = "Vendredi"; end if( os.date("*t").wday == 7 ) then jour = "Samedi"; end if( os.date("*t").wday == 1 ) then jour = "Dimanche"; end local mois =""; if( os.date("*t").month == 1 ) then mois = "janvier"; end if( os.date("*t").month == 2 ) then mois = "fevrier"; end if( os.date("*t").month == 3 ) then mois = "mars"; end if( os.date("*t").month == 4 ) then mois = "avril"; end if( os.date("*t").month == 5 ) then mois = "mai"; end if( os.date("*t").month == 6 ) then mois = "juin"; end if( os.date("*t").month == 7 ) then mois = "juillet"; end if( os.date("*t").month == 8 ) then mois = "aout"; end if( os.date("*t").month == 9 ) then mois = "septembre"; end if( os.date("*t").month == 10) then mois = "octobre"; end if( os.date("*t").month == 11) then mois = "novembre"; end if( os.date("*t").month == 12) then mois = "décembre"; end local condfr =""; if( cond == "clear" ) then condfr = "clair"; end if( cond == "cloudy" ) then condfr = "nuageux"; end if( cond == "rain" ) then condfr = "pluvieux"; end if( cond == "snow" ) then condfr = "neigeux"; end if( cond == "storm" ) then condfr = "tempete"; end if( cond == "fog" ) then condfr = "brouillard"; end -- 534 is the Virtual Device ID -- 28 is the Process button ID local sid, bid = 534, 28 -- Create TTS params object local params = { -- TTS Message message = "Bonjour a vous. Nous sommes le "..jour .." "..currentDate.day .." "..mois ..". Le thermomètre extérieur est a "..degre ..", et le temps est "..condfr ..". ", duration = 'auto', -- Duration: "auto", xx seconds language = "fr-FR", -- Language: fr-FR volume = 40 -- Volume } local _f = fibaro local _x ={root="x_sonos_object",load=function(b)local c=_f:getGlobalValue(b.root)if string.len(c)>0 then local d=json.decode(c)if d and type(d)=="table"then return d else _f:debug("Unable to process data, check variable")end else _f:debug("No data found!")end end,set=function(b,e,d)local f=b:load()if f[e]then for g,h in pairs(d)do f[e][g]=h end else f[e]=d end;_f:setGlobal(b.root,json.encode(f))end,get=function(b,e)local f=b:load()if f and type(f)=="table"then for g,h in pairs(f)do if tostring(g)==tostring(e or"")then return h end end end;return nil end} -- Make a request to the remote to process params object instantly _x:set(tostring(sid), { tts = params }) _f:call(sid, "pressButton", bid) Reste a changer le texte du message. 3
Did Posté(e) le 29 décembre 2015 Signaler Posté(e) le 29 décembre 2015 Encore mieux, rien à modifier. Merci @13013, ça marche.
jojo Posté(e) le 29 décembre 2015 Signaler Posté(e) le 29 décembre 2015 c'est génial ton truc !. Je rajouterais bien l'heure du moment de l'annonce
13013 Posté(e) le 29 décembre 2015 Signaler Posté(e) le 29 décembre 2015 @jojo, Comme on a deja déclaré la variable au debut local currentDate = os.date("*t"); il suffit de rajouter dans le message ceci par exemple: Il est "..currentDate.hour.." heure "..currentDate.min.." minute.
jojo Posté(e) le 29 décembre 2015 Signaler Posté(e) le 29 décembre 2015 Merci, je vois à l'instant ton code, et je l'avais trouvé entre temps. Je me suis permis de le modifier un petit peu pour optimiser les if -- 239 is the Virtual Device ID -- 28 is the Process button ID local sid, bid = 239, 28 local cond = fibaro:getValue(3, "WeatherConditionConverted"); local tempext = fibaro:getValue(33, "value"); -- température extérieure fibaro:debug ("Température extérieure : "..tempext) local degre = string.gsub(tempext, '[,]' , ' degré ') local degre = string.gsub(degre, '[.]' , ' degré ') local degre = string.gsub(degre, '[-]' , ' moins ') local currentDate = os.date("*t") local jourL = {"Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"} local jour = jourL[currentDate.wday] fibaro:debug ("Jour : "..jour) local moisL = {"janvier", "février", "mars", "avril", "mai", "juin", "juillet", "aout", "septembre", "octobre", "novembre", "décembre"} local mois = moisL[currentDate.month] fibaro:debug ("Mois : "..mois) local condfr =""; if( cond == "clear" ) then condfr = "clair"; end if( cond == "cloudy" ) then condfr = "nuageux"; end if( cond == "rain" ) then condfr = "pluvieux"; end if( cond == "snow" ) then condfr = "neigeux"; end if( cond == "storm" ) then condfr = "tempete"; end if( cond == "fog" ) then condfr = "brouillard"; end fibaro:debug ("Conditions météorologiques : "..condfr) fibaro:debug ("Création du TTS") -- Create TTS params object local params = { -- TTS Message message = "Bonjour a vous. Nous sommes le "..jour .." "..currentDate.day .." "..mois .. ". Il est ".. currentDate.hour .." heure et ".. currentDate.min .." minutes. ".. "Le thermomètre extérieur est a "..degre .. ", et le temps est "..condfr ..". ", duration = 'auto', -- Duration: "auto", xx seconds language = "fr-FR", -- Language: fr-FR volume = 40 -- Volume } local _f = fibaro local _x ={root="x_sonos_object",load=function(b)local c=_f:getGlobalValue(b.root)if string.len(c)>0 then local d=json.decode(c)if d and type(d)=="table"then return d else _f:debug("Unable to process data, check variable")end else _f:debug("No data found!")end end,set=function(b,e,d)local f=b:load()if f[e]then for g,h in pairs(d)do f[e][g]=h end else f[e]=d end;_f:setGlobal(b.root,json.encode(f))end,get=function(b,e)local f=b:load()if f and type(f)=="table"then for g,h in pairs(f)do if tostring(g)==tostring(e or"")then return h end end end;return nil end} -- Make a request to the remote to process params object instantly _x:set(tostring(sid), { tts = params }) _f:call(sid, "pressButton", bid) Maintenant, je vais essayé de voir si une scène ne pourrait pas capté que le sono a ddémarré suite à une alarme définie par Sonos, pour qu'il fasse cette annonce. Ce serait top ... 1
13013 Posté(e) le 29 décembre 2015 Signaler Posté(e) le 29 décembre 2015 pas de souci au contraire, les tables sont mieux que les IF.
i-magin Posté(e) le 29 décembre 2015 Signaler Posté(e) le 29 décembre 2015 Surtout pour les fêtes, on y passe du temps 2
cocolabombe0 Posté(e) le 29 décembre 2015 Signaler Posté(e) le 29 décembre 2015 @jojo j'ai copier et modifié les deux id et fonctionne parfaitement.
Yohan Posté(e) le 30 décembre 2015 Signaler Posté(e) le 30 décembre 2015 Merci 13013 pour le code et àjojo pour l'optimisation. Par contre lorsque je lance le TTS, l'annonce se déroule sans problème mais àla fin, elle recommence par un 'Bonjour àv" puis se coupe sans terminer le "vous". On dirait qu'elle répète le TTS mais ça coupe à"Vous". Vous avez le même soucis ?
13013 Posté(e) le 30 décembre 2015 Signaler Posté(e) le 30 décembre 2015 @yohan, j'avais le même soucis répétition deux ou trois fois avec la V0.08 mais avec la V0.01 peut être que la durée auto y fait quelque chose.A la création d'autre tts j'ai une répétition du premier mot mais c'est aléatoire. Envoyé de mon iPhone en utilisant Tapatalk
Sakkhho Posté(e) le 30 décembre 2015 Signaler Posté(e) le 30 décembre 2015 Les présélections correspondent à "Mes stations de radio" dans "Radio via TuneIn" idem chez moi, j'ai présélectionné des radios, mais ça joue rien .. si je sélectionne la radio par l'app sonos elle joue si je change par le VD, j'ai bien le retour Play radio 2 command was sent mais ça fait rien, je reste sur la radio en cours une idée ? le TTS fonctionne bien par contre, et la source repart après la lecture du TTS
i-magin Posté(e) le 30 décembre 2015 Signaler Posté(e) le 30 décembre 2015 Voir ICI et ICI à propos de "la liste de ses radios préférées sous SONOS" d'une part, mais aussi pour le problème des radios qui ne "démarrent pas après sélection depuis le module virtuel" (elles sont bien sélectionnées mais le play ne s'effectue pas)
Sakkhho Posté(e) le 30 décembre 2015 Signaler Posté(e) le 30 décembre 2015 oups désolé pas vu. merci mais pour le PLAY qui ne se fait pas ; faut patienter ou il ne va jamais passer ? que j'attends un peu ça passe pas, et si je fais play ça démarre de suite.
i-magin Posté(e) le 30 décembre 2015 Signaler Posté(e) le 30 décembre 2015 Pas de problème.... @Krikroff pourrait peut-être indiquer cette précision dans son 1er post
i-magin Posté(e) le 30 décembre 2015 Signaler Posté(e) le 30 décembre 2015 mais pour le PLAY qui ne se fait pas ; faut patienter ou il ne va jamais passer ? que j'attends un peu ça passe pas, et si je fais play ça démarre de suite. Pour l'instant et pour certaines radios le "play" ne s'effectue pas... Je change la sélection de radio de ma PLAY:1 de sdb depuis une télécommande Octan Remote et je constate le problème sur certaines radios Ce qui m'oblige à appuyer sur la touche Play du Sonos... il faudrait que j'essaye d'ajouter dans mon script un call du bouton 7 (PLAY) du VD de @Krikroff après 4 secondes environ ..... En attendant une nouvelle version de @Krikroff ?
Sakkhho Posté(e) le 30 décembre 2015 Signaler Posté(e) le 30 décembre 2015 ok compris, comme je voulais lancer la radio au reveil, je ferai cet appuie avec GEA et je fixerai aussi le volume sonore ... pour garder le WAF merci
i-magin Posté(e) le 30 décembre 2015 Signaler Posté(e) le 30 décembre 2015 Merci @Sakkhho Je devais modifier mon script depuis 15 jours et puis.... bref, je viens de le faire et le problème est contourné
jojo Posté(e) le 30 décembre 2015 Signaler Posté(e) le 30 décembre 2015 j'utilise l'appli Sono (sur MAC, Android, ...) pour configurer mon Sonos comme réveil; c'est c'est facile. Comme je voudrais qu'au réveil il me donne le message avec la météo, ... (du TTS) et ensuite la radio, je ne peut pas utiliser l'appli standard Sonos. Je pensais alors àcréer une entrée dans Google Calendar pour cela, qui lancerait un VD, qui lui même lancerait le TTS puis la radio. Ca devrait fonctionner, mais cela me semble fort lourd. Avez-vous d'autres idées de mise en oeuvre ?
Lazer Posté(e) le 30 décembre 2015 Signaler Posté(e) le 30 décembre 2015 Tu dois pouvoir faire ça avec un VD GEA Alarm (comme ça tu peux régler l'heure de réveil directement depuis l'appli Fibaro en choisissant l'heure sur le VD) Ensuite, GEA s'occupe de l'annonce TTS puis de la lecture. C'est juste une idée..... j'ai pas encore mis en oeuvre 1
jojo Posté(e) le 30 décembre 2015 Signaler Posté(e) le 30 décembre 2015 TRES bonne idée, je n'ai encore jamais essayé GEA alame, ce sera l'occasion
Sakkhho Posté(e) le 31 décembre 2015 Signaler Posté(e) le 31 décembre 2015 bonjour, y a t il un moyen de récupérer l'état de la sonos (Stopped par exemple) pour repasser le son à une certaine valeur et éviter ensuite au redémarrage d'avoir un son super fort si on s'est un peu lâcher avant de partir :-) je pense à garder mon WAF à 100% moi
13013 Posté(e) le 31 décembre 2015 Signaler Posté(e) le 31 décembre 2015 Une scene que j'ai mis dans ma salle d'eau qui lorsque j'allume la lumière (fgd212) met en route ma Play1 sur une radio deja présélectionné. Mais surtout règle le son a un volume raisonnable (desfois que l'on se soit "lâché"). --[[ %% properties 153 value %% globals --]] local startSource = fibaro:getSourceTrigger(); local Maintenant = os.date( "*t" ) --de 7h a 21h59 lumière a 100% et musique sinon lumière 30% sans musique if ( ( Maintenant['hour'] >=7 and Maintenant['hour'] <=21 ) ) then if ( ( tonumber(fibaro:getValue(153, "value")) > 0 ) or startSource["type"] == "other" ) then fibaro:call (153, 'setValue' , '100');-- plafonnier fibaro:call(172, "setSlider", "15", "12");--volume preregler a 12 sonos setTimeout(function() fibaro:call(172, "pressButton", "7");--sonos play end, 1000) end else if ( tonumber(fibaro:getValue(153, "value")) > 0 ) then fibaro:call (153, 'setValue' , '30') end end if ( ( tonumber(fibaro:getValue(153, "value")) == 0 and fibaro:getValue(172, "ui.lblDebug.value") == "Play")) then fibaro:call(172, "pressButton", "9") --sonos stop end Ce sont des scene que j'ai fait a la va vite, toute optimisation est la bien venue.
Sakkhho Posté(e) le 31 décembre 2015 Signaler Posté(e) le 31 décembre 2015 j'ai remarqué que l'on ne peut pas passer trop rapidement des commandes au Sonos. tu as aussi ce comportement ? (le timeout 1000 est là pour cela ?) perso ce que j'ai fait, je rajoute une VG qui reprends l'état de 'STATE' _f:setGlobal("EtatPlaybar",a) et avec GEA, si STATE est à Stopped, pendant 15 minutes, alors je fixe le son à 10 GEA.add ({"Global", "EtatPlaybar", "Stopped"}, 15*60, "",{{"Slider", id["SONOS_REMOTE"], 15, 10}})
13013 Posté(e) le 31 décembre 2015 Signaler Posté(e) le 31 décembre 2015 oui le timeout permet de passer les commandes lentement, sinon comme tu l'a remarqué c'est trop rapide. J'ai le meme problème avec du stream + TTS. Je pense que je vais m'intéresser au GEA. mais avant, @ i-magin, je vais me remettre a table. 1
Sakkhho Posté(e) le 2 janvier 2016 Signaler Posté(e) le 2 janvier 2016 bizarre ce matin j'ai un bug main loop : [DEBUG] 10:16:28: Unable to process data, check variable [ERROR] 10:16:28: line 106: attempt to index local 'e' (a nil value) kesako ?
Messages recommandés