Aller au contenu

Messages recommandés

Posté(e) (modifié)

Ca y'est je me suis lancé avec le travail de Steven :60:

 

Dit Google

Jarvis Allume le plafond

D'accord, Jarvis allume plafond

 

Et ça ne s'allume pas :lol:

 

Quand je regarde dans l'activité IFTTT ça me dit : Applet skipped (avec comme commande "allume plafond")

Bon j'ai compris ce que cela veut dire, mais dans un langage naturel ils entendent quoi par là ?

 

Modifié par Domodial
Posté(e)

Bon, j'ai fini par réussir à faire fonctionner le bouzin.

Problème dans l'URL (méchant Steven :D ) qui m'a induit en erreur avec www.xxx.xxxx.xxx

En fait c'est domodial.net (sans www) dans mon cas.

 

Maintenant ma coquine de lumière s'allume, par contre elle ne s'éteind pas :D

Et pis le coup des raccourcis "Home" chez moi ça ne fonctionne pas...

 

Super boulot Steven comme d'hab !! MERCI !!

Posté(e) (modifié)

hum y'a des trucs à comprendre lol

Si je passe la commande "éteind" ça ne fonctionne pas.

Mais "éteins" ça fonctionne ! :lol:

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

Les raccourcis pour modifier l'ordre ne fonctionnent toujours pas.

Ca c'est chiant car la nenette me dit : ha y'a un bug.

Modifié par Domodial
Posté(e)

En fait je met les mêmes.

 

Dans la configuration du Steven Script j'utilise "Allume plafond"

Et dans le raccourcis je dit : "Allume le plafond" ou "Allumer le plafond" Alors l'assistant dit : allume plafond

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

Si tu as déjà ces phrases dans les commandes lilli, tu n'as pas besoin de les noter, cela n'est utile que si tu souhaites mettre des synonymes. 

 

Pour les volets, je dois tester car je n'en ai pas donc pas encore testé chez moi. 

 

@jjacques68 C'est l'appel à mon VD Imperihome qui fait parler une tablette qui n'a rien à voir avec le Google Home. 

Ok dans les commandes lili du dimmer j'ai allume et éteins mais si je veux faire varier, tu le gères de quelle façon ?

Posté(e)

Ca fonctionne chez toi ? Car il ne se passe rien sur mon dimmer et dans le debug il me dit que c'est introuvable.

 

 

[DEBUG] 23:36:23: [{"action":" augmente la lumière des spot TV"}]
[DEBUG] 23:36:23: Utilisé : augmente la lumière spot tv
[DEBUG] 23:36:25: Introuvable

Posté(e)

Oui, je ne t'aurai pas fourni un script sans l'avoir essayé d'abord :P

 

Le principe est simple, si le script détecte le mot "augmente" ou "diminue", ensuite il essaie il parcoure tous les devices de type dimable (c'est peut-être là que cela coince) et fait un matching entre le nom des devices et celui dicté dans la phrase.

 

Je prend en compte les devices de type : com.fibaro.multilevelSwitch ... pourrais-tu regarder le type de tes spot tv ?

 

S'il ne sont pas du même type, le plus simple est de modifier la ligne suivante pour tester.

 

for _, v in ipairs(api.get("/devices?type=com.fibaro.multilevelSwitch")) do lights[string.lower(v.name)] = v.id end

 

En supprimant ce qui est indiqué en rouge. Cela sera un peu moins performant mais sûr de trouver ton module.

 

  • Like 1
Posté(e)

Perso, je créerais un synonyme avec

 

["allume led"]  = function() fibaro:call(<ID_LED>, "turnOn") end,

["éteins led"]  = function() fibaro:call(<ID_LED>, "turnOff") end,

Posté(e)

Oui, je savais bien qu'il fallait ouvrir quelques possibilités car cela ne pouvait pas fonctionner à 100% ... En réalité, j'ai aussi des RGBW et j'ai aussi constaté qu'il n'y avait pas de commande lili :2:

 

Tu sais que tu peux aussi faire ainsi pour piloter un module virtuel :

Par exemple, je souhaite appuyer sur le bouton "Eteindre" de mon VD "Chauffage".

 

Alors je mets :

 

["éteins le chauffage"] = "Chauffage Eteindre"

Posté(e)

Excellent

 

Envoi moi le "type" de ton FGD212, c'est juste une ligne de code a adapter dans mon script comme cela tout le monde pourra en profiter.

 

https://<ip_hc2>/api/devices/<ID_DU_MODULE>  et recherche le mot "type":"

Posté(e)
Il y a 17 heures, Steven a dit :

Oui, je savais bien qu'il fallait ouvrir quelques possibilités car cela ne pouvait pas fonctionner à 100% ... En réalité, j'ai aussi des RGBW et j'ai aussi constaté qu'il n'y avait pas de commande lili :2:

 

Tu sais que tu peux aussi faire ainsi pour piloter un module virtuel :

Par exemple, je souhaite appuyer sur le bouton "Eteindre" de mon VD "Chauffage".

 

Alors je mets :

 

["éteins le chauffage"] = "Chauffage Eteindre"

 

Super Steven !

J'ai essayé et mes leds fonctionnent superbement bien :D

 

Pour le VD il faut que je fasse ce que tu me dit pour le Dodo (qui coupera tout quand envie de dodo :D )

  • Upvote 1
Posté(e)

Salut Steven,

 

Voici le type :

 

"type":"com.fibaro.FGD212"
"baseType":"com.fibaro.multilevelSwitch"

 

Posté(e)

Lol, moi j'ai ceci : 

"type":"com.fibaro.multilevelSwitch","baseType":"com.fibaro.binarySwitch"

Bref, le plus simple de est faire ce que j'ai mentionné sur ce post : 

 

 

  • Upvote 1
Posté(e) (modifié)
Le 06/11/2017 à 05:03, Steven a dit :

Allez, petite mise à jour du script Jarvis.

 

Ma fille de 7 ans voulait pouvoir dire "Jarvis allume la lumière du salon ET éteints la lumière de la cuisine"

J'ai donc ajouté un petit morceau de code qui découpe les instructions en me basant sur le ET.

 

Je souhaitais augmenter le chauffage de 2 degrés sans avoir à dire deux fois "Jarvis augmente le chauffage"

J'ai donc créer un deuxième applet qui reçoit la même chose que le premier + un numéro. Je peux maintenant dire "Jarvis augmente le chauffage 2 fois"

 

Voici donc le 2ème applets $

:

4851810611.png

 

32988506111.png

 

36233106112.png

 

Et le scénario modifié


--[[
%% 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 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 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


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 k, 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 (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
    end
end

salut @Steven

 

je comprend pas tres bien

 

local mot_cle_separateur = "et"

local synonymes = {
  ["ouvre le portail"]         = "Portail action",

 

faut il remplacer ET par jarvis

 

et je comprend pas tres bien les synonymes

 

faut il metre la meme phrase dans LILI

 

voici mon debug quand je dit: ok google jarvis eteins la cuine

 

 

[DEBUG] 22:39:24: null
[DEBUG] 22:39:37: [{"action":" éteins la cuisine"}]
[DEBUG] 22:39:37: Utilisé : éteins la cuisine

 

et comme notification que je recois de IFTT

Applet run: if you say"jarvis $", then make a web request eteins la cuisine 

 

et 

Le 06/11/2017 à 05:03, Steven a dit :

 

 

Modifié par 971jmd
×
×
  • Créer...