Aller au contenu

Messages recommandés

Posté(e) (modifié)
Il y a 9 heures, jjacques68 a dit :

chez moi je fais


["alarme"] = function() fibaro:call(147, "pressButton", 1) end

ou 147 est l’ID du VD en question et 1 est le n° du bouton dans le VD (= numéro de l’objet dans le VD... les labels sont aussi des objets...)

@jjacques68 merci pour ton retour mais cela ne fonctionne pas de mon coté.

 

Il y a 9 heures, jjacques68 a dit :

tu peux créer un user spécifique à l’utilisation dans la HC2 et lui donner l’accès que à la scène qui doit exécuter les ordres.

c’est pas le top mais ça réduit les risques...

et c’est ce user que tu utilises dans la recettes d’IFTTT. du coup pas besoin de communiquer le super user.

oui c'est ce que j'ai fait un user unique pour GH et IFTTT avec un accès très limité. j'ai aussi fait un reverse proxy avec mon syno sous les conseils de @Lazer.

Modifié par soulac
Posté(e)

@jjacques68 comme convenu

 

--[[
%% properties
%% events
%% globals
--]]

-- ========================================================== --
-- Script pour IFTT (Google Assistant + Webhooks)
-- input     : "jarvis $"
-- webhooks  : https://<login>:<password>@<adresse>:443/api/scenes/40/action/start
--   method  : post
--   content : application/json
--   body    : {"args":[{"action":" {{TextField}}"}]}
-- ========================================================== --
-- Ce script va comparer le texte énoncé à l'assistant
-- avec les phrases contenues dans les champs liliCommand
-- Il va d'abord chercher dans les modules puis les scénarios
-- et finir par les modules virtuels
-- Pour les modules virtuels il suffit d'énoncer le nom
-- du VD suivis du libellé du bouton, ex : "Chauffage Manuel"
-- ========================================================== --

-- Les synonymes permettent de remplacer des énoncés à la volée.
-- Si par exemple vour avez une phrase lili "allume le chauffage"
-- et que vous souhaitez aussi pouvoir dire "active le chauffage"
-- il suffit d'ajouter :
--     ["active le chauffage"] = "allume le chauffage",
-- Vous pouvez aussi lier des phrases avec de boutons de VD
-- Exemple ["ouvre le portail"] = "Portail action",
-- va donc cliquer sur le bouton "action" du VD "Portail".
-- Il est aussi possible de créer ses propres function
-- Exemple : 
--    ["capture camera salon"] = function() 
--			fibaro:call(<id camera>, "sendPhotoToUser", <id user>)	
--	   end,
local synonymes = {
  ["alarme"] 		    = function() fibaro:call(291, "pressButton", 1) end,
  ["ouvre le portail"] 		= "Portail action",
}

-- Remplacement des caractères spéciaux --
function replaceChar(s)
  local sprime = s:gsub("à ", "à"):gsub("é", "é"):gsub("è", "è"):gsub("î", "î"):gsub("ô", "ô"):gsub("û", "û"):gsub("ù", "ù"):gsub("ê", "ê"):gsub("â","â"):gsub(" ' ", "'")
  return sprime
end

function trim(s)
	return (s:gsub("^%s*(.-)%s*$", "%1"))
end

-- Compare 2 chaines de caractères --
function isEqual(s1, s2)
  s1 = string.lower(s1)
  s2 = string.lower(s2)
  return s1 == s2 or replaceChar(s1) == replaceChar(s2)
end

-- Recherche un module correspondant --
-- et effectue l'action nécessaire   --
function doDevice(device, liliCommand)
	if (device.properties.liliOnCommand) then
    	if (isEqual(device.properties.liliOnCommand, liliCommand)) then
      		fibaro:call(device.id, "turnOn")
      		return true, device.name
    	elseif (isEqual(device.properties.liliOffCommand, liliCommand)) then
      		fibaro:call(device.id, "turnOff")
      		return true, device.name
      	end
    end
    return false
end

-- Recherche une scène correspondante --
-- et effectue l'action nécessaire    --
function doScene(scene, liliCommand)
  if (isEqual(scene.liliStartCommand, liliCommand)) then
    fibaro:startScene(scene.id)
    return true, scene.name
  elseif (isEqual(scene.liliStopCommand, liliCommand)) then
    fibaro:killScenes(scene.id)
    return true, scene.name
  end
  return false
end

-- Recherche un module correspondant --
-- et effectue l'action nécessaire   --
function doVirtual(device, liliCommand)
  	local fullname = device.name .. " "
  	for k, v in ipairs(device.properties.rows) do
    	for j, w in ipairs(v.elements) do 
          if (w.caption) then
              if (isEqual(fullname .. w.caption, liliCommand)) then
                  fibaro:call(device.id, "pressButton", w.id)
                  return true, fullname .. w.caption
              end
          end
      	end
    end
    return false
end


-- Lecture des paramètres de cette scène --
local params = fibaro:args()
fibaro:debug(json.encode(params))
local action = nil
if (params) then
	for k, v in ipairs(params) do
		if (v.action) then action = v.action end
	end
end

-- Recherche une action a effectuer --
if (action) then 
  	liliCommand = string.lower(replaceChar(trim(action)))
    fibaro:debug("Utilisé : " .. liliCommand)
    if (synonymes[liliCommand]) then 
      liliCommand = synonymes[liliCommand] 
      if (type(liliCommand) == "function") then
      	liliCommand()
      	return
      end
    end
	local name = "< none >"
  	local done = false
	local devices = api.get("/devices?&enabled=true")
    for i = 1, #devices do
    	thisDone, n = doDevice(devices[i], liliCommand)
        if (thisDone) then 
			name = n 
      		done = true
    	end
    end
  	if (not done) then
    	local scenes = api.get("/scenes")
        for i = 1, #scenes do
    		thisDone, n = doScene(scenes[i], liliCommand)
        	if (thisDone) then 
				name = n 
      			done = true
    		end
  		end
    end
  	if (not done) then
    	local devices = api.get("/devices?type=virtual_device&enabled=true")
        for i = 1, #devices do
    		thisDone, n = doVirtual(devices[i], liliCommand)
        	if (thisDone) then 
				name = n 
      			done = true
    		end
  		end
    end
  	if (done) then
    	fibaro:debug("Device reconnue : " .. name)
  	end
end

 

Posté(e) (modifié)

Essaye cette scène, c'est celle que j'utilise, j'ai simplement supprimé mes ordres et remplacé par le tien :

 

C'est quasi identique à celle que tu as, mais sans passer par les commandes lili...

 

Il faut juste que tu sois sûr que le VD que tu appelles à bien l'ID 291 et que le bouton que actionnes soit bien le premier objet du VD.

 

--[[
%% properties
%% events
%% globals
--]]

local ActionOk = false
local Debug = true

--tableau de toutes les actions possibles
local ListAction = {
	
  	["alarme"] = function() fibaro:call(291, "pressButton", 1) end,

}


--fonction d'affichage Debug--------------------------------------------------------------
function AfficheDebug(msg, color, debug)
	if debug == true then --si debug activé
		if msg and color then --si y a un message et une couleur
			print("<font color ='"..color.."'>"..msg.."</font>")
		else --sinon erreur
			print("<font color ='orange'>Error in function AfficheDebug</font>")
		end
	end
end

--remplace les caractères spéciaux : à é è ê '--------------------------------------------
function ReplaceChar(s)
	local Char = {
    	-- 3 caractères à détecter
		{" ' ", "'"}, {" â ", "'"},
    	-- 2 caractères à détecter
		{"é", "é"},	{"à©", "é"},	{"è", "è"},	{"à¨","è"},		{"î", "î"},
		{"ô", "ô"},	{"û", "û"},	{"ù", "ù"},	{"ê", "ê"},	{"â","â"},
    	--1 caractère à détecter
		{"Ã", "à"},
	}
	
	for i,v in pairs(Char) do
		s = string.gsub(s, v[1], v[2])
	end
  
	return s
end

--???????----------------------------------------------------------------------
function Trim(s)
	return (s:gsub("^%s*(.-)%s*$", "%1"))
end

--corrige l'ortographe de "étein" (t-d-s-dre-et 1)--------------------------------------------
function CheckEtein(s)

	local Res = ""
  	local Output = ""
	local Pattern = {"éteint", "éteindre", "et 1", "est à", "et à%s"}
	
	for k,v in pairs(Pattern) do
    
		Res = string.match(s, v) --cherche le pattern, str = pattern trouvé

    	if Res then
      		Output = "éteins "
      		Output = Output..string.sub(s,string.len(Res)+2)
      		return Output
		end
    
	end
	
	--sinon return l'argument
	return s  
end


--corrige les espaces autour du "-"-----------------------------------------------------
function DelDash(s)
	i, j = string.find(s, "-")
	if i then
		return string.sub(s,1,i-2).."-"..string.sub(s,i+2)
	else
		return s
	end
end

----------------------------------------------------------------------------------------
--main
----------------------------------------------------------------------------------------

-- Lecture des arguments de la scène (voir IFTTT)
local params = fibaro:args()
local action = nil
local number = 0
if (params) then
	for k,v in ipairs(params) do
		if (v.action) then action = v.action end --recupère l'action
    	if (v.number) then action = action.." "..tostring(v.number) end --recupère le nombre si y a
	end
end

if action then
    --enchaine les fonctions de traitement de chaine
    action=DelDash(CheckEtein(string.lower(ReplaceChar(Trim(action)))))

    --recherche et execute l'action en fonction de l'argument
    for ordre,func in pairs(ListAction) do
        if action == ordre then 
            AfficheDebug(os.date("%d/%m/%Y - %H:%M : ").."action lancée : "..action, "white", Debug)
            func() --execute l'action
            ActionOk = true
        end		
    end

    --si action inconnue alors debug.
    if ActionOk == false then
        AfficheDebug(os.date("%d/%m/%Y - %H:%M : ").."action inconnue : "..action, "red", true)
    end
 end

 

Modifié par jjacques68
Posté(e) (modifié)

@jjacques68 super cela fonctionne à merveille.

 

Petite question j'ai vue dans les pages précédentes que l'on pouvait ne plus utiliser "Ok Google jarvis" pour appeler une commande et juste avoir "Ok Google".

Si oui comment peut on faire.

 

Merci encore pour la scène qui fonctionne comme je le souhaite. 

Juste une petite chose dans le débug j'ai ceci est ce normal ?

 

 

[DEBUG] 15:40:43: 2019-01-19 15:40:43.905139 [ fatal] Unknown exception: /opt/fibaro/scenes/169.lua:50: attempt to index local 's' (a nil value)

Modifié par soulac
Posté(e) (modifié)

Cette erreur n'est pas normal, d'après le code que je t'ai envoyé, il s'agit de la ligne 50, donc la fonction "Trim".

Elle ne reçoit pas de valeur... ???

pas normal ça !

Ce qui veut dire que toutes les les fonctions qui corrigent la chaine de caractères de ton ordre semblent ne pas fonctionner !

 

Tu as fait un copier/coller du code ? c'est tout ?

Modifié par jjacques68
Posté(e)

Pour ne pas utiliser le mot clé "jarvis" :

 

Dans l'application google home :

 

allé dans "Paramètres" - "Plus de paramètres" - onglet "Assistant" - "Routines" - bouton "+" :

Choisir "Ajouter de commandes" et saisir la commande que tu veux. Exemple "Allume la lumière du salon".

 

Enregistrer et  "Ajouter une action" et saisir "jarvis allume la lumière du salon".

puis ajouter.

 

Maintenant quand tu donnes cet ordre, le GH va automatiquement ajouter "jarvis" sans que tu l'ai dis.

Malheureusement, il faut le faire un par un pour toutes les commandes vocales que tu souhaites.

Posté(e)
il y a 32 minutes, jjacques68 a dit :

Cette erreur n'est pas normal, d'après le code que je t'ai envoyé, il s'agit de la ligne 50, donc la fonction "Trim".

Elle ne reçoit pas de valeur... ???

pas normal ça !

Ce qui veut dire que toutes les les fonctions qui corrigent la chaine de caractères de ton ordre semblent ne pas fonctionner !

 

Tu as fait un copier/coller du code ? c'est tout ?

Bon je pense que c est normal j ai l erreur qd je lance la scène après plus rien je vois que les actions de google home

Posté(e)

Je viens de modifier le code fourni ci-dessus :

 

Ajout de ligne 102 :

if action then

et à la dernière ligne :

end

et donc plus d'erreur situ lances la scènes manuellement.

En gros il se passe rien si tu lances manuellement.

Posté(e)

Ok parfait super

 

Pr les routines parfait aussi tout fonctionne tu es un chef.

Juste une petite question mon GH me répond jarvis et l action on peut enlever jarvis dans la réponse de GH ?

 

Sinon je vais abuser mais avec la scène peut on avoir une valeur d une température d un module.

Je m expliqué je souhaiterais avoir la température de mon salon du module qui est l oeil de fibaro.

Posté(e) (modifié)

Ta réponse du GH se fait dans IFTTT, tu as du paramétrer cette réponse.

Dans mon cas j'ai juste mis "oké".

 

Recevoir une information (température ou autre valeur) dans la réponse, me semble impossible...

On en avait déjà parlé qqpart dans ce topic...

En tout cas si c'est possible, je sais pas comment faire, et c'est vrai que ça intéresserait aussi...

Mais j'y crois pas.

Modifié par jjacques68
  • 1 mois après...
Posté(e)

Bonjour a tous, 

 

 

Voila en quete 'info sur google home je me demandais ceci :

 

si j’achète plusieurs google home es ce que je peut demander a google home ( salon) de diffuser une music dans une autre pièce tout en restant dans mon salon ? 

 

Merci 

Posté(e)

ok super Merci et pour ce qui est de la Belgique google home ne pose pas de problème ? car a ce que j'ai lu apparemment il ne serais pas sorti officiellement ? 

Posté(e)

J'en ai 2 (et suis en Belgique), et ils fonctionnent bien pour ce que j'en fait (pas de la muqique) 

Posté(e)
Le 14/01/2019 à 12:54, speckery a dit :

question conne, mais maintenant que Google home intègre pleinement et en francais Fibaro, pourquoi utilisez vous encore la passerelle ifttt?

Bon mis a part que j'ai un gros soucis de rafraîchissement des scenes, ca tourne plutot pas mal non?

@speckery, Tu dit pleinement, les volets sont intégrés a GH ?

Posté(e)
Le 14/07/2018 à 17:40, 971jmd a dit :

bonjour a tous

 

j'ai peut être trouvée une solution pour faire parler notre google home avec une phrase de notre choix 

 

mai je n'y arrive pas :mellow:

 

voici quel que lien si vous voulez essayer 

 

https://github.com/noelportugal/google-home-notifier

 

 

 

 

 

 

je mets de l'ordre dans mes mails, alors pardon si je me répète.

La solution pour faire parler Google Home est dans ma signature

Posté(e)

Bonjour à tous,

 

Pour ma part, j'ai bien réussi à lier mon compte Fibaro ID. Mais ensuite, je ne vois que ma sirène d'une autre marque...

J'ai détecteur de fuite, présence, commande de volet, détecteur de fumé chez moi mais je ne vois rien sous Google Home.

La commande vocal ''ok, google parler à fibaro ne fonctionne pas non plus''.

 

Je me retrouve un peu bête...

Posté(e)

hello

 

c'est pas une science exacte l'intégration de la HC au google home... moi j'ai plein de scènes qui n'apparaissent pas, c'est la croix et la bannière pour arriver a les faire apparaître... c'est assez aléatoire... un coup je délie le compte fib a la GH, un coup je redémarre les 2, un coup je recrée la scene... des fois rien ne se passe et 2 mois apres la scene apparait pour je ne sais quelle raison... franchement c'est le bordel pour mettre a jour la google home a chaque fois qu'on crée un new device ou scene...

Posté(e)
il y a une heure, speckery a dit :

hello

 

c'est pas une science exacte l'intégration de la HC au google home... moi j'ai plein de scènes qui n'apparaissent pas, c'est la croix et la bannière pour arriver a les faire apparaître... c'est assez aléatoire... un coup je délie le compte fib a la GH, un coup je redémarre les 2, un coup je recrée la scene... des fois rien ne se passe et 2 mois apres la scene apparait pour je ne sais quelle raison... franchement c'est le bordel pour mettre a jour la google home a chaque fois qu'on crée un new device ou scene...

Merci pour retour.

 

Je ne sais pas si je suis rassuré mais je ne suis pas le seul :1:

La magie de la domotique FIBARO...

Posté(e)

Les capteurs c'est "normal"

les volets c'est "normal" (raisons de sécurité)

 

Ce qu'on peut piloter, ce sont tous les autres actionneurs : dimmers, switchs (donc ta sirène)

 

Malheureusement pas de VD.

×
×
  • Créer...