-
Compteur de contenus
390 -
Inscription
-
Dernière visite
-
Jours gagnés
8
Tout ce qui a été posté par OJC
-
On va essayer de faire ça dans l'ordre... Qu'est-ce que tu as comme retour dans response pour l'URL SMS ? D'ailleurs, fait comme ça : local reponse, error = SMS:GET('/sendsms?user=jeremy&password=abcdefg&phone=0612345678&text=test'); Et fais voir ce que ça donne comme retours.
-
Salut ! Tu peux donner un exemple de l'url que tu cherches à envoyer (pas avec des données réelles, mais avec des données réalistes) ?
-
@wojtas810 Est-ce que tu peux mettre ici le résultat de fibaro:getGlobalValue('x_sonos_object') stp ?
-
@MAM78 Pour ce qui est de la conversion HSL <> RGB, tu devrais trouver ton bonheur ici, dans le fichier /colors-8.05.26/lua/colors.lua, les fonctions suivantes : ----------------------------------------------------------------------------- -- Converts an HSL triplet to RGB -- (see http://homepages.cwi.nl/~steven/css/hsl.html). -- -- @param h hue (0-360) -- @param s saturation (0.0-1.0) -- @param L lightness (0.0-1.0) -- @return an R, G, and B component of RGB ----------------------------------------------------------------------------- function hsl_to_rgb(h, s, L) h = h/360 local m1, m2 if L<=0.5 then m2 = L*(s+1) else m2 = L+s-L*s end m1 = L*2-m2 local function _h2rgb(m1, m2, h) if h<0 then h = h+1 end if h>1 then h = h-1 end if h*6<1 then return m1+(m2-m1)*h*6 elseif h*2<1 then return m2 elseif h*3<2 then return m1+(m2-m1)*(2/3-h)*6 else return m1 end end return _h2rgb(m1, m2, h+1/3), _h2rgb(m1, m2, h), _h2rgb(m1, m2, h-1/3) end ----------------------------------------------------------------------------- -- Converts an RGB triplet to HSL. -- (see http://easyrgb.com) -- -- @param r red (0.0-1.0) -- @param g green (0.0-1.0) -- @param b blue (0.0-1.0) -- @return corresponding H, S and L components ----------------------------------------------------------------------------- function rgb_to_hsl(r, g, b) --r, g, b = r/255, g/255, b/255 local min = math.min(r, g, b) local max = math.max(r, g, b) local delta = max - min local h, s, l = 0, 0, ((min+max)/2) if l > 0 and l < 0.5 then s = delta/(max+min) end if l >= 0.5 and l < 1 then s = delta/(2-max-min) end if delta > 0 then if max == r and max ~= g then h = h + (g-b)/delta end if max == g and max ~= b then h = h + 2 + (b-r)/delta end if max == b and max ~= r then h = h + 4 + (r-g)/delta end h = h / 6; end if h < 0 then h = h + 1 end if h > 1 then h = h - 1 end return h * 360, s, l end Il faut juste que tu convertisses ta valeur hue retournée par l'ampoule sur une base 360° puisque si j'ai bien compris, l'API Philips Hue utilise 0-65535 pour l'angle hue. De même, la saturation et la luminosité sont normalement un pourcentage (0-100) là où l'API Philips Hue, si je ne me trompe pas, utilise l'intervalle 0-255.
-
@SimonT C'est-à-dire (version application Sonos) d'ajouter le Play:5 de ta salle de bains au groupe du Play:5 relié à la TV ?
-
@Krikroff Elles sont sûrement très bien, comme ton VD d'ailleurs qui est particulièrement impressionnant au niveau du codage , mais le plaisir de coder un truc soi-même n'est pas négligeable . De plus, ce que je veux précisément ce n'est pas uniquement un VD, mais une ligne de code (je n'ai pas parlé du nombre de caractères ) qui permette d'interagir avec les Sonos indifféremment depuis un VD ou une scène et ce de manière simple, sur le même principe que ce que j'ai fait pour les Yeelights. En l'état, j'ai un objet qui me permet d'accéder à toutes les fonctions offertes par node-sonos-http-api (y compris les plus récentes de la branche master comme la gestion des graves et aigus, outre quelques petites modifs persos comme le SetLoudness) avec la même commande : sonos:call([zone name], [action], {[param 1]}, {[param 2]}, etc.] Avec en plus un contrôle des paramètres pour suppléer la légèreté de la gestion d'erreurs du node qui se contente quasi-systématique de retourner une erreur 500 ou, plus rarement, un joli message d'erreur absolument incompréhensible à la javascript... Bref, un truc qui permettra facilement à toute personne le souhaitant (y compris moi) de faire son/ses propres VD et scènes adaptés à la configuration de son système Sonos et à l'utilisation qu'il en fait.
-
@wojtas810 A quel endroit se manifeste l'erreur ? Dans le debug du main loop ? d'un bouton ? lequel ?
-
Oui Mais ce que je suis en train de faire, c'est un objet pour faciliter l'utilisation de node-sonos-http-api, ce qui signifie que ce n'est pas l'objet lui-même qui est censé traiter le retour mais l'utilisateur final. Donc, du coup, j'ai retenu le principe de passer en paramètre la fonction devant être exécutée lorsque request() a reçu la réponse du serveur. PS @Yohan : Au fait, avant il était possible dans un post de changer la police, ce qui était bien pratique... Pourquoi l'option a-t-elle été supprimée ?
-
@Krikroff Au final, j'ai l'impression que ton morceau de code fait double emploi avec net.HTTPClient puisque la fonction request() permet déjà de déclencher l'exécution d'une ou deux fonctions (success et error). Je pense que vouloir supprimer l'asynchronicité d'une librairie qui est spécifiquement conçue pour l'être n'est tout simplement pas possible...
-
Merci beaucoup @Krikroff, je vais voir comment adapter ça à ce que je veux faire.
-
Au final, j'ai fait comme ça, même si ce n'est pas totalement satisfaisant : getdata=function(f,u) local socket=net.HTTPClient() socket:request(u,{success=function(r)f(r)end,error=function(r)f(r)end,options={method='GET'}}) socket=nil end catch=function(r) if not r then getdata(catch,'http://x.x.x.x:xxxx/action') else print('response = ',x) end end catch() Si les pros du lua ont une meilleure idée ??
-
Bonjour, Je rencontre un souci lié à l'asynchronicité de net.HTTPClient(). Comment faire patienter le script le temps que les données arrivent, sachant que j'ai besoin de les faire 'sortir' (donc le traitement ne peut pas de faire à l'intérieur de net.HTTPClient()) ? En gros, avoir le même résultat que dans un VD avec Net.FHttp() : j'appelle une fonction qui fait un socket:request() et qui me retourne response. J'ai essayé (sans grande conviction) avec un fibaro:sleep(), mais bien sûr ça ne marche pas... Auriez-vous une idée ?
-
C'est en bonne voie, le VD Sonos TTS Remote est déjà converti et opérationnel avec node-sonos-http-api. Le VD Sonos Manager est aussi bien avancé (tout ce qui est sur l'image est totalement fonctionnel) : Je vais avancer encore encore un peu avant de publier tout ça, avec peut-être un tuto pour l'installation de node-sonos-http-api
-
Oui, il y a une version docker d'après ce que j'ai vu
-
Je confirme, c'est vraiment top =) Certes, ça rajoute un tiers, mais c'est là qu'on voit les limites : 1. du Lua pour gérer ce genre de truc 2. de cette foutue HC2 qui ne permet pas d'installer des services tiers Cela dit, ça marche sur n'importe quelle machine, et il y a même une image toute prête pour le Pi. Moi j'ai un serveur debian qui tourne H24, donc pas de soucis. TTS à la seconde, prise en charge avancée de spotify, apple musique... possibilité de faire une recherche deezer (ça ça m'intéresse) ou même dans la librairie (donc on peut coupler ça avec un webdav pour explorer la librairie musicale et lancer une chanson précise), etc. J'ai déjà modifié ce VD pour fonctionner avec, et je vais voir pour faire un truc plus complet similaire au VD de @Krikroff.
-
P... Je viens de tomber sur ce truc node-sonos-http-api que je suis en train de tester... Le TTS avec VoiceRSS sort du Sonos dans la seconde !! Et aucun souci de playlist qui saute
-
Je me suis permis d'apporter quelques petites modifications à la fonction _x qui permet de piloter le VD depuis n'importe quelle scène où VD, pour une utilisation simplifiée : local _x ={root="x_sonos_object",_f=fibaro,sonos=function(b,n)local t,f={},b:load() for i,j in pairs(f)do if j.zpStatus then if n==j.zpStatus.zoneName then return tostring(i) end end end end,load=function(b)local c=b._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 b._f:debug("Unable to process data, check variable")end else b._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;b._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,btn=function(b,i,n)local c,r=0,api.get("/devices/"..tostring(i))["properties"]["rows"] local x=#r for a=1,x do local y=#r[a].elements for b=1,y do c=c+1 if n==r[a].elements[b].name then return c end end end b._f:debug("Unable to locate button "..n..", check virtual device "..i);return nil end,call=function(b,n,w,x,y,z)local i=b:sonos(n);if w:match("//") then b:set(i,{stream={stream=w,source=x,duration=y,volume=z}})else b:set(i,{tts={message=w,language=x,duration=y,volume=z}}) end b._f:call(tonumber(i),"pressButton",b:btn(i,"Process"))end} La fonction à utiliser est : --Pour faire un TTS : _x:call("Nom du Sonos", message, [language], [duration], [volume]) --Pour faire un stream : _x:call("Nom du Sonos", url du stream, [source], [duration], [volume]) Le nom du Sonos à indiquer est le nom du 'vrai' Sonos, pas le nom du VD Sonos Remote.
-
Renommer les boutons, c'est facile. En revanche, cela veut dire actualiser la page web ou recharger les informations réseau pour les app mobiles. Pas sûr que ça en vaille le coup...
-
Est-ce que 'Sonos Remote' apparaît dans la première étiquette de ton VD ? Si non, clique sur un des deux boutons flèches. Je m'aperçois au passage que je n'ai pas prévu de fonction pour caler le VD sur le premier Sonos au moment de l'installation... EDIT = Oublie. Ton volume est à zéro d'après ce que je vois dans x_sonos_object : "tts":{"message":"Favori numéro 2.","duration":"auto","language":"fr-FR","volume":0}
-
Un p'tit WallPlug fait l'affaire
-
Essaie ça : Sonos_TTS_Remote.vfib
-
@Titof_44 Tu peux virer la ligne, elle ne sert que pour le debug et la scène marche très bien sans.
-
Fait voir un print(fibaro:getGlobalValue("x_sonos_object")). C'est quelle version du VD Sonos Remote que tu as ?
-
Tu as bien une variable globale x_sonos_object avec le VD de @Krikroff ? Tu as quelque chose dans le debug du main loop ? Je comprends pas, ça fait deux fois que je supprime ma VG, elle est recréée sans pb ??
-
Bizarre... Essaie avec ça dans le Main Loop : --[[ Sonos TTS Remote v. 1.1.0 - Copyright 2018 Olivier Meyer This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses></http:>. --]] --[[ Versions Notes 1.0.0 Initial release --]] if not (_f) then _f = fibaro _f:debug("Starting Sonos TTS Remote...") _i = _f:getSelfId() jT = json.decode(_f:getGlobalValue("HomeTable")) icon = _f:getValue(_i, "deviceIcon") if (type(_f:getGlobalValue("x_sonos_tts")) == "nil") then api.post("/globalVariables", {name="x_sonos_tts", isEnum=0}) end local x_sonos_tts = {remote = _i, sonos = {}} local x_sonos_object = json.decode(_f:getGlobalValue("x_sonos_object")) for i,j in pairs(x_sonos_object) do table.insert(x_sonos_tts.sonos, {id = i, name = _f:getName(tonumber(i))}) end _f:setGlobal("x_sonos_tts", json.encode(x_sonos_tts)) _f:debug(json.encode(x_sonos_tts)) end local sid = jT.VD[string.gsub(string.gsub(_f:getValue(_i,"ui.lblSonos.value"),":","")," ","")] local title = _f:getValue(sid,"lblTitle") or "" if string.find(_f:getValue(_i,"log") or "","Transmission") == nil then if string.find(title,"voicerss") == nil then if _f:getValue(_i,"currentIcon") ~= icon then _f:call(_i, "setProperty", "ui.favo.value", "") _f:call(_i, "setProperty", "currentIcon", icon) end end end