Aller au contenu

Messages recommandés

Posté(e)

Merci Nico de t'interesser à mon problème n’étant pas trop au top dans se domaine merci de développer stp 

Posté(e)
Il y a 2 heures, JossAlf a dit :

Et tu aurais une astuce pour allumer ou éteindre toutes les lumières du salon ou de la cuisine ?

On aurait une phrase générique du style « éteindre les lumières de la cuisine » qui se baserait sur le nom de la pièce et sur le type lampe des modules.

 

Perso, j'ai fait des scènes. 

 

Éteins toutes les lumières, lumière salon à 50%, ferme les volets côté sud, etc.. 

 

Tout est possible ! 

Posté(e) (modifié)

Une question me viens à l’éprit :22:

Dans l'url du IFTTT http://<login>:<password>@<adresse>/api/scenes/<id du scenario>/action/start faut il y mettre le login et password de l'administrateur ou le login et password de l''utilisateur ? je crois avoir lu quelque chose à ce sujet ^_^

D'avance merci :D

 

 

Modifié par Diuck
Posté(e)

@j-psy : oui j’ai ce genre de scènes. On peut même utiliser une fonction. Mais l’idée est d’avoir une phrase générique : Ok Google Éteindre #lumiere #NomDeLaPiece


Envoyé de mon iPhone en utilisant Tapatalk

Posté(e)

Je n'ai pas eu le temps de lire l'intégralité du post, mais est-ce que quelqu'un à essayé les raccourcis de Google Home?

 

C'est hyper pratique! Plutôt que de créer autant de IFTTT que d'action à faire, cela vient en complément du script "Jarvis".

Cela permet de dire "Ok Google Armageddon" ce qui lance l'action que l'on a paramétré dans Google Home (ex: Ok Google Jarvis fermer volets salon).

On peut en paramétrer autant que l'on veut.

https://support.google.com/googlehome/answer/7382893?hl=fr

Posté(e)
Il y a 2 heures, JossAlf a dit :

@j-psy : oui j’ai ce genre de scènes. On peut même utiliser une fonction. Mais l’idée est d’avoir une phrase générique : Ok Google Éteindre #lumiere #NomDeLaPiece


Envoyé de mon iPhone en utilisant Tapatalk

 

J'y travaille

Posté(e)
Il y a 5 heures, JossAlf a dit :

@j-psy : oui j’ai ce genre de scènes. On peut même utiliser une fonction. Mais l’idée est d’avoir une phrase générique : Ok Google Éteindre #lumiere #NomDeLaPiece


Envoyé de mon iPhone en utilisant Tapatalk

 

Il y a 2 heures, Steven a dit :

 

J'y travaille

 

Je sens qu'on vas s'éclater avec ce Google Home.. 

Posté(e)

Voilà

 

tout ce passe ici :

 

local allLightRoom = {"allume", "éteins", "les lumières"}
local allBlindRoom = {"ouvre", "ferme", "les volets"}
 

"allume" permet de faire un turnOn, "éteins" un turnOff ... "les lumières" est le mot magique, le reste de la phrase va permettre de trouver la pièce.

 

Exemple :

"OK Google Jarvis allume toutes les lumières du salon" .. ma pièce s'appelle Salon

"OK Google Jarvis éteins les lumières des chambres" .. ma pièce s'appelle Chambres(et oui, je sais c'est pas logiques mais c'est LES chambres des enfants)

"OK Google Jarvis allume les lumières du sandwich de l'entrée" .. ma pièce s'appelle Entrée

 

Je ne peux pas tester pour les stores, je n'en ai pas, mais j'ai préparé le code.

 

A vous de paramétrer selon vos préférences/habitudes

 

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

-- ========================================================== --
-- Script pour IFTT (Google Assistant + Webhooks
-- input     : "javis $"
-- webhooks  : https://<login>:<password>@<url>/api/scenes/<id scenario>/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 mot_cle_separateur = "et"
local allLightRoom = {"allume", "éteins", "les lumières"}
local allBlindRoom = {"ouvre", "ferme", "les volets"}

local synonymes = {
  ["ouvre le portail"] 		= "Portail action",
  ["diminue le chauffage"] 	= "Chauffage -1",
  ["augmente le chauffage"] = "Chauffage +1",
  ["éteins le jardin"] 		= "éteins la terrasse",
  ["allume le jardin"] 		= "allume la terrasse",
  ["chauffage automatique"] = "chauffage automatic",
  ["ouvre les volets"] 		= "brise-soleil ░ Ouvrir",
  ["ferme les volets"] 		= "brise-soleil Fermer ▓",
  ["stop les volets"] 		= "brise-soleil stop",
  ["allume la télé"] 		  = "allume la télévision",
  ["éteins la télé"] 		  = "éteins la télévision",
  ["voir le garage"] 		  = "imperihome 2",
  ["voir l'entrée"] 		  = "imperihome 3",
  ["dodo"] 					      = "bonne nuit",
  ["mais tf 1"]				    = "Freebox TV 1",
  ["mais france 2"]			  = "Freebox TV 2",
  ["mais france 3"]			  = "Freebox TV 3",
  ["mais m 6"]				    = "Freebox TV 6",
  ["capture caméra salon"]  = function() fibaro:call(158, "sendPhotoToUser", 2) end,
  ["capture caméra terrasse"] = function() fibaro:call(203, "sendPhotoToUser", 2) end,
  ["capture caméra entrée"] = function() fibaro:call(156, "sendPhotoToUser", 2)end,
  ["quelle est la température intérieure"] = function() fibaro:call(163, "pressButton", 2) end,
  ["quelle est la température extérieure"] = function() fibaro:call(163, "pressButton", 4) end,
}

-- 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 _, v in ipairs(device.properties.rows) do
    	for _, 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

function manageRoom(mode, option, phrase) 
  	local roomid = findRoomName(phrase:gsub(option[1], ""):gsub(option[2], ""):gsub(option[3], ""))
  	local devices = api.get("/devices/?property="..mode.."&enabled=true&visible=true&roomID="..roomid)
	for _, v in ipairs(devices) do
      if (mode == "isLight") then 
        if (phrase:match(option[1])) then
          fibaro:call(v.id, "turnOn")
        elseif (phrase:match(option[2])) then
          fibaro:call(v.id, "turnOff")
        end
      else
        if (phrase:match(option[1])) then
          fibaro:call(v.id, "open")
        elseif (phrase:match(option[2])) then
          fibaro:call(v.id, "close")
        end        
      end
	end
end

function getRooms()
	local rooms = {}
	for _, v in ipairs(api.get("/rooms")) do rooms[string.lower(v.name)] = v.id end
	return rooms
end

function findRoomName(name)
	local rooms = getRooms()
	for k,v in pairs(rooms) do
   		if (name:match(k)) then return v end
	end
	return -1
end

function split(text)
   local sep = " " .. mot_cle_separateur .. " "
   local tx = text
   local t = {}
   while (tx:find(sep)) do
      local pos = tx:find(sep)
      table.insert(t, tx:sub(1, pos))
      tx = tx:sub(pos+sep:len(), tx:len())
   end
   if (tx:len() > 0) then table.insert(t, tx) end
   return t
end

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

-- Recherche une action a effectuer --
if (action) then 
    local actions = split(string.lower(replaceChar(trim(action))))
  	local occurence = number or 1
  	for j = 1, occurence do
      for i = 1, #actions do
        liliCommand = trim(actions[i])
        fibaro:debug("Utilisé : " .. liliCommand)
        if (liliCommand:match(allLightRoom[3])) then manageRoom("isLight", allLightRoom, liliCommand) return end
        if (liliCommand:match(allBlindRoom[3])) then manageRoom("isBlind", allBindRoom, liliCommand) return end
        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 k = 1, #devices do
            thisDone, n = doDevice(devices[k], liliCommand)
            if (thisDone) then 
                name = n 
                done = true
            end
        end
        if (not done) then
            local scenes = api.get("/scenes")
            for k = 1, #scenes do
                thisDone, n = doScene(scenes[k], 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 k = 1, #devices do
                thisDone, n = doVirtual(devices[k], liliCommand)
                if (thisDone) then 
                    name = n 
                    done = true
                end
            end
        end
        if (done) then
            fibaro:debug("Device reconnue : " .. name)
        end
      end
    end
end

 

  • Like 2
  • Upvote 1
Posté(e) (modifié)

@JossAlf @Steven @j-psy @Lazer 

 

Merci de m'avoir apporté votre aide,J'ai enfin réussi à configurer mon router ce qui me permet de profiter de JARVIS :60: 

Encore MERCI !! :18:

Modifié par Diuck
  • Upvote 1
Posté(e)

Super Diuck

 

Bon moi j'ai un problème, Google Home ce n'est pas WAF du tout !!! Elle est jalouse que je parle à une autre femme ... et comme elle ne veut pas lui parler, dans sa tête ça doit être une concurrente :o

 

  • Like 1
Posté(e)

Allez hop je vais coder un ptit truc pour éteindre la pizza dans le salon. Cherchez pas, y a que  @Steven, le méchant trop trop’fort qui allume les sandwich de l’entrée avec ses cordes vocales qui peut me comprendre :P

  • Upvote 1
Posté(e)

Jarvis à beaucoup de mal avec les Wall plug ! il ne veux pas les allumer et quand j'ai de la chance il va en éteindre 1/5 il en est quoi pour vous  ? 

 

Posté(e)

Tu as regardé le debug ? Compare ce que Google home comprend et ce que tu écris dans les champs lili.

Exemple : Mets la télé ~ mais la télé


Envoyé de mon iPhone en utilisant Tapatalk

Posté(e)
Il y a 13 heures, Diuck a dit :

J'ai enfin réussi à configurer mon router

tu n'as plus qu'à partager ;-)

 

En parlant de lilli, ca meriterait peut-etre un petit tuto dans la HomeCenter pour les nuls ;-) J'en fais partie ;-) Jamais joué avec

Posté(e)
Il y a 4 heures, JossAlf a dit :

Tu as regardé le debug ? Compare ce que Google home comprend et ce que tu écris dans les champs lili.

Exemple : Mets la télé ~ mais la télé


Envoyé de mon iPhone en utilisant Tapatalk

Salut :12:@JossAlf 

 

Oui bien sur regarde ma copie d’écran 

Capture.PNG

Capture2.PNG

Posté(e)
Il y a 2 heures, pepite a dit :

tu n'as plus qu'à partager ;-)

 

En parlant de lilli, ca meriterait peut-etre un petit tuto dans la HomeCenter pour les nuls ;-) J'en fais partie ;-) Jamais joué avec

Salut pepite :12:

Je ferais ça ce soir 

Posté(e)

Merci ;-) comme ca, l'info sera coomplète, GH +IFTTT + lilli de notre HC2 ;-)

Et il n'y aura plus qu'à ;-) à l'arrivée de la bête ;-)

Posté(e) (modifié)

@Diuck Ah mince ! Normalment tu devrais avoir une ligne supplémentaire avec le nom du Device reconnu quand ça fonctionne .

 

Regarde mon debug :

J'ai fais exprès de donner un ordre bidon (j'ai pas de commande lili "Allumer la lumière salon" mais j'ai bien la commande "allumer la lumière blanche")

- Les 2 premières lignes correspondent à un échec (comme toi il ne trouve pas de device correspondant à "Allumer la lumière salon")

 

- Les 3 dernières lignes fonctionnent car la HC2 a bien trouvé le device "Lumière Blanche" qui correspond à la commande lili "allumer la lumière blanche"

 

5a03091fd536d_Capturedcran2017-11-0814_38_50.png.0b708812a5bf38cfc01f92b428e73313.png

 

Je ne sais as où ça coince ... Tu n'aurais pas un espace à la fin de tes commandes lili ? -> "allume le salon   " ≠ "allume le salon"

Modifié par JossAlf
×
×
  • Créer...