Aller au contenu
sebcbien

Say It S.a.r.a.h. & Sonos

Recommended Posts

Voici un VD qui permet d'appeler facilement les fonctions TTS des 3 actuellement disponibles:

 

KAROTZ

SONOS (via le VD de @krikroff )

S.A.R.A.H.

 

Avantages:

- sans passer par une Variable Globale

- Et avec historisation des 10 derniers messages

 

Voir exemple d'utilisation plus bas pour GEA.

 

Exemples pour S.A.R.A.H. et SONOS:

 

2016-09-27_19-40-08.png   2016-09-27_23-01-20.png

 

Exemple Gea:

local TTS_Sarah = {"VirtualDevice", id2["S_A_R_A_H__SAY_IT"], 1}
local TTS_Sonos = {"VirtualDevice", id2["SONOS_SAY_IT"], 1}

ensuite:

{"Label", id2["SONOS_SAY_IT"], "Message", "Bonjour, enclenchement du chauffage du ré de chaussée"},TTS_Sonos,

ou

{"Label", id2["S_A_R_A_H_SAY_IT"], "Message", "Bonjour, enclenchement du chauffage du ré de chaussée"},TTS_Sarah,


Voici la partie config du bouton et le VD générique est attaché ci-dessous.

-- Say It Copyright Sébastien Jauquet 2016
-- V 1.0.0 28/09/2016
-------------------------------------------
-- HOW TO USE THIS VD:
-- Rename the name of the label (Say It XXXXXX !), NOT the ID !!!
-- Rename the name of the VD (XXXXX Say It !)
-- Fill Ip Address and port in the VD settings
-- Port: usualy 8080 for SARAH and 80 for KAROTZ
-- Un-comment one of the three line below depending of the device you want to control
local TTS_Device = "sarah"
--local TTS_Device = "karotz"
--local TTS_Device = "sonos"
local id2 = { SONOS_REMOTE = 2124 } -- enter Krikroff sonos VD id

------- NO USER MOD BELOW -------------------------------
local selfId = fibaro:getSelfId()
local SARAH_KAROTZ_Ip = fibaro:get(selfId, "IPAddress")
local port = fibaro:get(selfId, "TCPPort")
function urlencode(s)
 if (s) then 

.... blablabla

icônes:

 

post-826-0-76220500-1475093432_thumb.png

 

post-826-0-36113400-1475093468_thumb.png

 

post-826-0-41865700-1475093509_thumb.png

post-826-0-26696100-1475010015_thumb.png

post-826-0-96157600-1475010105_thumb.png

XXXXXX_Say_It_!.vfib

  • Upvote 5

Partager ce message


Lien à poster
Partager sur d’autres sites

Et vous voulez un pour Karotz aussi j'imagine?!? ;)

Sent from my Note4

Partager ce message


Lien à poster
Partager sur d’autres sites

Excellent ;) merci

À si juste une petite correction pour la prochaine version, Ré de chaussée ça n'existe pas , par contre Rez de chaussée oui ;)

Partager ce message


Lien à poster
Partager sur d’autres sites

Yeah, le come back de @Sebcbien ;-)

 

Tu peux partager le code du bouton stp ? Comme d'hab pour ma culture, pour ma progression LUA ;-)

 

En fait tu lis le LABEL ;-) la speciale sans VG :-)

 

MERCI MERCI

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Voilà , je vous ai créé un VD générique à  personnaliser pour les 3 TTS configurés.

Voir le mode d'emploi dans le bouton.

À personaliser donc:

2 rename

1 upload d'icône

1 ip et un port à  configurer (uniquement pour Karotz ou SARAH)

 

Fait à  l'arrache, pas trop testé mais ça a l'air de fonctionner.  :D

 

Enjoy

Partager ce message


Lien à poster
Partager sur d’autres sites

Excellent ;) merci

À si juste une petite correction pour la prochaine version, Ré de chaussée ça n'existe pas , par contre Rez de chaussée oui ;)

Je te rassure, mon orthographe n'est pas si mauvaise :P  :P  :P 

Si j'écris rez il me le prononce mal, donc je triche un peu ;) 

Sent from my Note4

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

EN

 

like this?

local TTS_Sonos = {"VirtualDevice", VD["SONOS_SAY_IT"], 1}
GEA.add(true, 60, "",{{"Time", "06:47", "06:48"},{"Label", VD["SONOS_SAY_IT"], "Message", "Godmorgon Jonny"},TTS_Sonos}})

Partager ce message


Lien à poster
Partager sur d’autres sites

yes, should work.

Here is one of mine:

  GEA.add({"Sensor+", id2["TV___AMPLI"], 150}, 180*60, "TV Allumée depuis #duration# (#value# Watt)",{
	{"Portable", id["PHONE_SEB"]},
	{"Label", id2["SONOS_SAY_IT"], "Message", "Télévision allumée depuis 3 heures. La consomation est de #value# Watt"},TTS_Sonos
	}) 
  • Upvote 2

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut,

 

Dans ta ligne GEA pour le Label, il ne récuperer pas "#duration#" ?

 

je vais jeter un oeil au bouton hihii

Partager ce message


Lien à poster
Partager sur d’autres sites

Si mais je l'ai enlevé, c mieux les messages courts et la personne dans la pièce sais normalement que la TV est allumée depuis longtemps et aussi la duration n'est pas prononçable.

Sent from my Note4

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

EN

 

Hi @sebcbien

i have added my Musaic player VD to your great Say It VD. Here are the code i use

 

-- Say It Copyright Sébastien Jauquet 2016
-- V 1.0.0 28/09/2016
-------------------------------------------
-- HOW TO USE THIS VD:
-- Rename the name of the label (Say It XXXXXX !), NOT the ID !!!
-- Rename the name of the VD (XXXXXX Say It !)
-- Add an ICON to this button
-- Fill Ip Address and port in the VD settings
-- Port: usualy 8080 for SARAH and 80 for KAROTZ
-- Un-comment one of the three line below depending of the device you want to control
local TTS_Device = "musaic"
--local TTS_Device = "karotz"
--local TTS_Device = "sonos"
--local TTS_Device = "musaic"
local id2 = { SONOS_REMOTE = 298 } -- enter Krikroff sonos VD id

------- NO USER MOD BELOW -------------------------------
local selfId = fibaro:getSelfId()
local SARAH_KAROTZ_Ip = fibaro:get(selfId, 'IPAddress')
local port = fibaro:get(fibaro:getSelfId(), "TCPPort")
function urlencode(s)
 if (s) then
   s = string.gsub (s, "\n", "\r\n")
   s = string.gsub (s, "([^%w ])",
   function (c) return string.format ("%%%02X", string.byte(c)) end)
   s = string.gsub (s, " ", "+")
 end
 return s
end
local msg = fibaro:getValue(selfId, "ui.Message.value")
local msg2 = fibaro:getValue(selfId, "ui.Message2.value")
local msg3 = fibaro:getValue(selfId, "ui.Message3.value")
local msg4 = fibaro:getValue(selfId, "ui.Message4.value")
local msg5 = fibaro:getValue(selfId, "ui.Message5.value")
local msg6 = fibaro:getValue(selfId, "ui.Message6.value")
local msg7 = fibaro:getValue(selfId, "ui.Message7.value")
local msg8 = fibaro:getValue(selfId, "ui.Message8.value")
local msg9 = fibaro:getValue(selfId, "ui.Message9.value")

fibaro:debug(os.date("%d/%m ")..msg)

if (TTS_Device == "sonos") and (msg ~= "") then
	-- 2124 is the Virtual Device ID
	-- 28 is the Process button ID
	local sid, bid = id2["SONOS_REMOTE"], 28
	-- Create TTS params object
	local params = {
	  -- TTS Message
	  message = msg,  
	  duration = 'auto',	-- Duration: "auto", xx seconds
	  language = "sv-SE",	-- Language: fr-FR
	  volume = 45			-- 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)
end

if (TTS_Device == "karotz") and (msg ~= "") then
	local voice = "alice"
	Karotz = Net.FHttp(SARAH_KAROTZ_Ip, port)
	response = Karotz:GET("/cgi-bin/tts?engine=3&text="..msg:gsub(" ", "+").."&nocache=0")
	if (string.find(response, "played\":\"0"))
	then
		fibaro:log("OK")
	else
		fibaro:debug("ERROR")
	end
end

if (TTS_Device == "sarah") and (msg ~= "") then
	msg = urlencode(msg)
	Sarah = Net.FHttp(SARAH_KAROTZ_Ip, port)
	payloademon = "http://"..SARAH_KAROTZ_Ip.."/sarah/sonos?sonos_tts="..msg
	response, status, errorCode = Sarah:GET(payloademon)
end

if (TTS_Device == "musaic") and (msg ~= "") then
	-- Virtual device ID and button ID
	local vdID, btnID = 393, 21
	-- Create TTS params object
	local message = msg
	-- Send TTS parameters to variable
	fibaro:setGlobal("musaicTTS", message)
	fibaro:call(vdID, "pressButton", btnID)
end

fibaro:call(selfId, "setProperty", "ui.Message10.value", msg9)
fibaro:call(selfId, "setProperty", "ui.Message9.value", msg8)
fibaro:call(selfId, "setProperty", "ui.Message8.value", msg7)
fibaro:call(selfId, "setProperty", "ui.Message7.value", msg6)
fibaro:call(selfId, "setProperty", "ui.Message6.value", msg5)
fibaro:call(selfId, "setProperty", "ui.Message5.value", msg4)
fibaro:call(selfId, "setProperty", "ui.Message4.value", msg3)
fibaro:call(selfId, "setProperty", "ui.Message3.value", msg2)
fibaro:call(selfId, "setProperty", "ui.Message2.value", os.date("%d/%m %H:%M:%S")..": "..msg)

 

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Y aurait pas le même pour Audio Station sur NAS Synology ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Recherche sur le forum, je crois me souvenir avoir vu passer un sujet pour lier la HC2 à Air-play

Partager ce message


Lien à poster
Partager sur d’autres sites

Je viens de faire fonctionner deux TTS SARAH différents sur deux SONOS différents :-)

Pratique pour les annonces vocales localisées !

Partager ce message


Lien à poster
Partager sur d’autres sites
Mes notes:
 
1 dupliquer le dossier SARAH / SARAH2
2 adapter les scripts de démarage, la deuxième session n'a besoin que du serveur pour fonctionner apparement je mets 10 secondes entre les deux lancements (au reboot)
3 modifier le custom.prop de C:\SARAH2\server\app\data\
    - modifier le port (j'ai mis 8081, le premier SARAH étant sur 8080)
    - modifier le port remote (8889 au lieu de 8888)
exemple:
{
  "debug": false,
  "bot": {
    "name": "S.A.R.A.H. 2 SDB",
    "tagline": "Self Actuated Residential Automated Habitat",
    "answers": "Oui|Je m'en occupe|Voilà|C'est fait",
    "version": "4.0"
  },
  "http": {
    "root": "",
    "port": 8081,
    "ip": "XXX.XXX.XXX.XXX ",
    "remote": "http://XXX.XXX.XXX.XXX :8889",
    "upload": "E:\\Dropbox\\Public\\[FIXME]\\",
    "timeout": 4000,
    "proxy": "",
    "phantom": ""
  },
4 dans C:\SARAH2\client\  modifier custom.ini:
exemple:
[bot]
; Client identifier
id=SARAH2
5 lancer le serveur avec le script de lancement standard
6 aller dans la configuration: http://XXX.XXX.XXX.XXX:8081/portal/config et vérifier que les valeurs sont bonnes
7 modifier le plugin sonos (entrepôt/roulette de config/documentation/configuration) et choisir le sonos voulu pour cette deuxième instance
8 dans Type d'export, utiliser la valeur "une seule enceinte"
9 valider et redémarrer SARAH
10 dupliquer mon VD et le faire pointer vers la même IP mais avec le port 8081
 
Maintenant en fonction de la présence, de l'heure, des mouvements, je peux faire mes annonce ou il faut
j'ai également rajouté la radio dans la SDB au réveil en fonction des heures et présences, ainsi que l'auto off (mais avec mon Jeedom)
 
 
  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Soiree de sebcbien et de quelques scenes et astuces:-)

Envoyé de mon Nexus 5X en utilisant Tapatalk

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

×