Aller au contenu

Fibaro Hc2 Vd Sonos Remote: Télécommande Pour Diffuseur Sonos


Krikroff

Messages recommandés

  • 4 semaines après...

Ce ne sont pas mes codes, ils sont déjà  dans les pages précédentes,

Message 547 page 28

Message 592 page 30

Message 655 page 33

Et aussi en page 1

 

Did ça te dérangerait de nous refaire une synthèse avec ton code que tu utilises ?

 

Je modifierais le post 1 en complétant avec ton code pour exemple.

 

Merci

Lien vers le commentaire
Partager sur d’autres sites

Non, pas de problème, voici les trois codes à  adapter à  vos Id.

 

Code de PITP2 pour annoncer la température dans la scène.

Il faut juste changer l'id en fonction de votre module remontant la température.

--[[
%% properties
 
 
%% globals
--]]
 
 
-- 408 is the Virtual Device ID
-- 28 is the Process button ID
local sid, bid = 811, 28
-- Create TTS params object
local ValeurTemp = fibaro:getValue(61, "value")
local degre = string.gsub(ValeurTemp, '[,]' , ' degret ')
local degre = string.gsub(degre, '[.]' , ' degret ')
local degre = string.gsub(degre, '[-]' , ' moins ')
local notification = "Il fait " .. degre .. " dans le salon "
fibaro:debug(notification)
local params = {
  -- TTS Message
 
  message = notification,  
  duration = 'auto', -- Duration: "auto", xx seconds
  language = "fr-FR", -- Language: fr-FR
  volume = 23 -- 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)

Code de @i-magin pour annoncer la valeur d'une variable.

--[[
%% properties
%% globals
--]]
 
 
local sid, bid = 813, 28
-- Create TTS params object
local couleur = fibaro:getGlobalValue("le nom de ta variable")
local notification = ("La couleur de demain sera "..couleur.." Bonne journée")
fibaro:debug(notification)
local params = {
  -- TTS Message
 
  message = notification,  
  duration = 'auto', -- Duration: "auto", xx seconds
  language = "fr-FR", -- Language: fr-FR
  volume = 23 -- 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)

Code de @13013, (optimisé par @jojo) pour annoncer la date du jour, la température extérieure (j'ai changé l'Id correspondant à  ma sonde) et la météo (je n'ai pas changé le 3, qui apparemment correspond à  la météo).

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

Une petite question pour la partie TTS...

J'ai installé le VD: ok.

Mais où renseigne t-on la variable voiceRssApiKey ?

 


Installation :

 

A partir de la version 1.0.0 beta:

 

3. Pour utiliser la fonction TTS VoiceRSS il faut une API Key, pour l'enregistrement (gratuit) c'est ici http://www.voicerss.org/registration.aspx

4. Renseigner la variable voiceRssApiKey avec la clé, choisir un niveau de qualité sonore pour la generation avec voiceRssSoundQuality: low, medium, high

UserParams = {
  -- Voice RSS API Key (Free Registration: http://www.voicerss.org/registration.aspx)
  voiceRssApiKey = "000000000000000000000000000",
  -- Sound quality: low, medium, high
  voiceRssSoundQuality = "medium"
}

 

Merci de vos retours ;)

Lien vers le commentaire
Partager sur d’autres sites

Bonjour

Il ce trouve en bas du module virtuel post-1332-0-34759700-1457773695_thumb.png

Apres tu vas sur l'onglet avancer et tu descend tout en bas au bouton process et tu met ton api key

post-1332-0-17372900-1457773837_thumb.png

Mais avant il faut t'enregistré sur le site de voicerss

Voilà

Lien vers le commentaire
Partager sur d’autres sites

Bonjour Did,

 

A quoi correspond tes ID?

 

local sid, bid = 811, 16

 

dans ta scène de température intérieur, car quand je lance le debug, j'ai bien la température qui apparait mais le TTS n'est pas joué par ma Sonos

Lien vers le commentaire
Partager sur d’autres sites

Hello relis bien le tuto de la page 1

Local sid = 811 ce chiffre est le n° du virtuel device sonos que tu trouve dans la barre d'adresse du navigateur

Et le bid= 16 c'est le bouton du virtuel device

Lien vers le commentaire
Partager sur d’autres sites

pour plusieurs notifications dans une même scène, comment vous y prendriez vous ?

 

Testé sans succès ...

     
    --[[
    %% properties
    138 value
    143 value
    %% events
    %% globals
    --]]
     
     
    local sid, bid = 417, 28
    local LightMarie = 143;
    local LightMael = 138;
    local EtatLightMarie = fibaro:getValue(LightMarie, "value");
    local EtatLightMael = fibaro:getValue(LightMael, "value");

    -- Create TTS params object
    local notification 

    if (EtatLightMarie == "1") then 
        notification = "Lumière Marie allumée";
    elseif (EtatLightMarie == "0") then 
        notification = "Lumière Marie éteinte";
    elseif  (EtatLightMael == "1") then 
        notification = "Lumière Maà«l allumée";
    elseif (EtatLightMael == "0") then 
        notification = "Lumière Maà«l éteinte";
    end

    fibaro:debug(notification)
    local params = {
      -- TTS Message
     
      message = notification,  
      duration = 'auto', -- Duration: "auto", xx seconds
      language = "fr-FR", -- Language: fr-FR
      volume = 15 -- 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)

Merci de vos avis et conseils ;)

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...