Aller au contenu
Dragoniacs

[HC3] Gestion du lapin Karotz

Recommended Posts

Bonjour à tous,

 

Je vous partage une première version de mon QuickApp qui donne vie à mon lapin préféré :)

J'ai intégré une fonction qui existait à part sur la HC2 : la modification de la couleur de la LED en fonction d'un écart de température extérieur / intérieur.

Cette fonction n'est de base pas activée, il faut passer une variable à true dans le code du fichier "MAIN" App_Temperature = true

 

1° Installez le QuickApp

Disponible ici -> OpenKarotz.fqa

 

2° Paramétrez vos variables:

IP_Karotz : l'addresse de votre lapin, en format 192.168.x.xxx

TTS : si besoin de faire des essais de la fonction, vous pouvez mettre du texte ici.

Capteur_Interne : ID du capteur intérieur pour la comparaison de température

Capteur_Externe : ID du capteur extérieur pour la comparaison de température

 

3° Plus de paramètres sont accessibles dans le fichier "main"

-- VARIABLES UTILISATEUR

Icone_ON = 1015 -- si vous voulez mettre une icône spécifique lorsque le lapin est en fonctionnement

Icone_OFF = 1016 -- icone pour le lapin en mode "off"

Icone_Temp = 1017 -- icône pour le lapin en mode "affichage écart de température"

App_Temperature = true -- "true" active la fonction d'affichage de l'écart de température, sinon, laissez en "false"

 

4° Pour faire parler le lapin 

Rien de plus simple, faites appel à la méthode de cette manière : fibaro.call(124,"onTTS","le texte que le lapin doit prononcer")

(dans cet exemple, 124 est l'ID du QuickApp lapin)

 

5° Utilisation des RFID

Depuis l'interface de votre lapin, paramétrez l'action du RFDI choisi en type "URL" est précisez :

NAME : MON_ACTION

URL : http://192.168.1.xxx/api/callAction   (IP de votre HC3)

PARAMETERS : deviceID=124&name=onMON_ACTION   (ID = ID de votre QA Lapin / onMON_ACTION sera la méthode à appeler que vous allez ajouter dans le code du fichier "main")

USER : xxxx@xxxxx.xxx (utilisateur ayant accès à la HC3 et au QA du lapin)

PASSWORD : xxxxxx (le mot de passe de cet utilisateur)

 

De retour dans le code du QA de votre lapin, vous pouvez maintenant ajouter le contenu de la méthode "onMON_ACTION" pour définir ce que le lapin devra faire lors de l'utilisation du RFID.

Petit exemple de code que mes enfants adorent :

 

function QuickApp:onVOITURE()
    -- Actions en fonction de l'heure
    self:onRandom()
    local time = os.date("%H:%M")
 
    if time <= "12:00" then
    local texte = "Bonjour les enfants ! Vous avez bien dormi ?"
    self:onTTS(texte)
    end
 
    if time > "12:00" and time < "18:30" then 
    local texte = "Bonjour les enfants ! Amusez vous bien et soyez sages !"
    self:onTTS(texte)
    end
 
    if time >= "18:30" and time < "19:00" then
    local texte = "Les enfants, c'est bientôt l'heure d'aller au bain !"
    self:onTTS(texte)
    end
 
    if time >= "19:00" and time < "19:30" then
    local texte = "Vous êtes déjà passés au bain vous ? Je sens encore de la boue !"
    self:onTTS(texte)
    end
 
    if time >= "19:30" and time < "20:30" then
    local texte = "Les enfants, je crois qu'il est bientôt l'heure d'aller au lit !"
    self:onTTS(texte)
    end
 
    if time >= "20:30" then
    local texte = "Que faites vous là ? Vous ne dormez pas ? Allez hop, au lit les pirates !"
    self:onTTS(texte)
    end
 
end

 

Vous pouvez aussi passer des paramètres depuis votre RFID, en ajoutant des paramètres. 

Exemple, pour faire parler le lapin directement depuis une sollicitation d'un RFID

URL : http://192.168.1.xxx/api/callAction   (IP de votre HC3)

PARAMETERS : deviceID=124&name=onTTS&arg1="Bonjour à tous, je suis un super lapin !" 

 

 

Evolution à venir : soigner un peu plus l'interface avec du texte au dessus des slider en lieu et place des gros labels.

 

Modifié par Dragoniacs
  • Like 5

Partager ce message


Lien à poster
Partager sur d’autres sites

C'est clair .... Whaou que de chemin parcouru depuis Hier :bravo:

 

Premier code HC3 pour le Lapin, Félicitation, pour ma part c'est clair il me faut une HC3.

 

Et hop une citation sur le Blog du lapin.

 

-----------------

Le Lapin prêt pour Fibaro HC3

Un grand merci à Dragoniacs du forum Domotique-Fibaro pour la création d’un module spécifique pour la HC3.

Profitez en et allez voir ce travail, le projet est cours, il va encore évoluer profitez en !!

 

----------

 

 

Modifié par Massalia
  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Et moi qui me disais que j'étais peut-être l'un des derniers à avoir l'un des ces 'ti lapin dans la famille, et qu'il (elle, c'est une fille ;)) pourrait être "le thème" mon premier QA... :unsure: :rolleyes:

 

Non... je ne suis pas déçu, super content, au contraire ! :60: Merci

 

Je teste de ce pas !

Et je m'exercerai aux QA plus tard...

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour,

 

Sauf erreur, le bouton TTS (qui doit faire prononcer au lapin le texte de la variable TTS du QA) ne fonctionne pas, et fait crasher le QA, qui se relance ensuite (et le lapin fait faire un tour à ses oreilles). Je vois dans la console :

 

[09.03.2021] [19:03:55] [TRACE] [QA_KAROTZ_31]: UIEvent: {"elementName":"btnTTS","values":[],"eventType":"onReleased","deviceId":31}

[09.03.2021] [19:03:55] [DEBUG] [QA_KAROTZ_31]: ./include/main.lua:65: attempt to concatenate a table value (field 'TTS')

[09.03.2021] [19:03:55] [ERROR] [QUICKAPP31]: QuickApp crashed

[09.03.2021] [19:03:55] [ERROR] [QUICKAPP31]: Unknown error occurred: handleJsonRpc

[09.03.2021] [19:04:00] [TRACE] [QA_KAROTZ_31]: QuickApp OpenKarotz - Initialization

[09.03.2021] [19:04:01] [DEBUG] [QA_KAROTZ_31]: onAction: {"deviceId":31,"args":[],"actionName":"onReset"}

[09.03.2021] [19:04:01] [DEBUG] [QA_KAROTZ_31]: onAction: {"deviceId":31,"args":[],"actionName":"onSPEED"}

 

Par contre, aucun soucis pour le faire parler depuis le QA GEA, avec la ligne suivante :

 

GEA.add(true0"test TTS OpenKarotz", {"QuickApp", id["MonOpenKarotz"], "onTTS""Bonjour. Je suis la voix de votre HC3 !"}, "test TTS OpenKarotz")
 

Suis-je le seul ? Bon, après rien de très grave, parce que l'usage principal (voire unique) est depuis d'autre QA ou scènes :)

 

Edit: le code qui pose problème :

 

function QuickApp:onTTS(message)
    self.TTS = self:getVariable("TTS")
    if message ~= nil then self.TTS = message end
    tools:Message("debug","Enonciation de la phrase : "..self.TTS)
    local voice = "1"
    self.TTS = string.gsub(self.TTS, "\n""\r\n")
    self.TTS = string.gsub(self.TTS, "([^%w %-%_%.%~])"
        function (c) return string.format("%%%02X", string.byte(c)) end)
    self.TTS = string.gsub(self.TTS, " ""+")
    local URL = "http://"..self.IP_KAROTZ.."/cgi-bin/tts?voice="..voice.."&text="..self.TTS:gsub(" ""+").."&nocache=0"
    if (self.TTS ~= ""then self:sendKarotz(URL) end
end

 

Sauf erreur, l'idée est que ce soit le même code qui soit exécuté lorsque appelé depuis l'extérieur, ou lors d'un clic sur le bouton interne du QA (avec l'usage de la variable TTS). Mais dans le cas interne, le

self:getVariable("TTS")

 renvoie une table (et non un string) qui pose problème à la concaténation avec "Enonciation de la phrase : " pour le message de debug, et pour le gsub 2 lignes après, etc...

 
 
Modifié par Bebitoo

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci pour le rapport d'erreur.

Je vois ce qui pose problème. Effectivement cela ne bloque pas le fonctionnement mais c'est moche.

Je regarde ça et je publie un correctif ASAP.

Partager ce message


Lien à poster
Partager sur d’autres sites
Le 09/03/2021 à 19:13, Bebitoo a dit :

Bonjour,

 

Sauf erreur, le bouton TTS (qui doit faire prononcer au lapin le texte de la variable TTS du QA) ne fonctionne pas, et fait crasher le QA, qui se relance ensuite (et le lapin fait faire un tour à ses oreilles). Je vois dans la console :

 

[09.03.2021] [19:03:55] [TRACE] [QA_KAROTZ_31]: UIEvent: {"elementName":"btnTTS","values":[],"eventType":"onReleased","deviceId":31}

[09.03.2021] [19:03:55] [DEBUG] [QA_KAROTZ_31]: ./include/main.lua:65: attempt to concatenate a table value (field 'TTS')

[09.03.2021] [19:03:55] [ERROR] [QUICKAPP31]: QuickApp crashed

[09.03.2021] [19:03:55] [ERROR] [QUICKAPP31]: Unknown error occurred: handleJsonRpc

[09.03.2021] [19:04:00] [TRACE] [QA_KAROTZ_31]: QuickApp OpenKarotz - Initialization

[09.03.2021] [19:04:01] [DEBUG] [QA_KAROTZ_31]: onAction: {"deviceId":31,"args":[],"actionName":"onReset"}

[09.03.2021] [19:04:01] [DEBUG] [QA_KAROTZ_31]: onAction: {"deviceId":31,"args":[],"actionName":"onSPEED"}

 

Par contre, aucun soucis pour le faire parler depuis le QA GEA, avec la ligne suivante :

 

GEA.add(true0"test TTS OpenKarotz", {"QuickApp", id["MonOpenKarotz"], "onTTS""Bonjour. Je suis la voix de votre HC3 !"}, "test TTS OpenKarotz")
 

Suis-je le seul ? Bon, après rien de très grave, parce que l'usage principal (voire unique) est depuis d'autre QA ou scènes :)

 

Edit: le code qui pose problème :

 

function QuickApp:onTTS(message)
    self.TTS = self:getVariable("TTS")
    if message ~= nil then self.TTS = message end
    tools:Message("debug","Enonciation de la phrase : "..self.TTS)
    local voice = "1"
    self.TTS = string.gsub(self.TTS, "\n""\r\n")
    self.TTS = string.gsub(self.TTS, "([^%w %-%_%.%~])"
        function (c) return string.format("%%%02X", string.byte(c)) end)
    self.TTS = string.gsub(self.TTS, " ""+")
    local URL = "http://"..self.IP_KAROTZ.."/cgi-bin/tts?voice="..voice.."&text="..self.TTS:gsub(" ""+").."&nocache=0"
    if (self.TTS ~= ""then self:sendKarotz(URL) end
end

 

Sauf erreur, l'idée est que ce soit le même code qui soit exécuté lorsque appelé depuis l'extérieur, ou lors d'un clic sur le bouton interne du QA (avec l'usage de la variable TTS). Mais dans le cas interne, le

self:getVariable("TTS")

 renvoie une table (et non un string) qui pose problème à la concaténation avec "Enonciation de la phrase : " pour le message de debug, et pour le gsub 2 lignes après, etc...

 
 

Bonsoir.

J'ai le même problème. Avez-vous résolu le bug ?

J'ai essayé de mon coté : mais je ne m'en sors pas.

Merci.

Partager ce message


Lien à poster
Partager sur d’autres sites

Je n'ai pas résolu le bug. Mais en réalité avec les QA on n'a pas besoin de ce bouton. Je pense publier une V2 qui ne l'intégrera pas

Envoyé de mon RMX1993 en utilisant Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites
Il y a 23 heures, Dragoniacs a dit :

Je n'ai pas résolu le bug. Mais en réalité avec les QA on n'a pas besoin de ce bouton. Je pense publier une V2 qui ne l'intégrera pas

Envoyé de mon RMX1993 en utilisant Tapatalk
 

Merci.

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour @manuxenon,

 

Oui, j'ai résolu ce point pour moi, en même temps que j'ai un peu modifié le QA de @Dragoniacs pour le prendre en main et le mettre "à ma sauce" (et du coup, les noms des méthodes et variables du code ci-dessous ne correspondent peut-être pas au QA original - mais ce sont les principes qui importent).

 

Comme le dit @Dragoniacs, le cas d'usage n°1 est d'appeler le code TTS depuis... n'importe où :)Pour cela, le QA du lapin expose une fonction Parler qui prend en argument la phrase à prononcer :

function QuickApp:Parler(phrase)
    self:setVariable("TTS", phrase) -- mémorisation de la phrase à prononcer
    self:openKarotzTTS(phrase)
end

et que l'on appelle, depuis GEA par exemple, avec :

  GEA.add(true, 0, push, {"QuickApp", id["Lapinou"], "Parler", "G.E.A. est actif sur votre HC3"}, "Démarrage GEA")

Et pour les tests ou vérification de bon fonctionnement (cas d'usage n°2), le QA du lapin dispose d'un bouton configuré pour appeler une fonction onParler lorsque relâché, dont le code est :

function QuickApp:onParler()
    -- on récupère le contenu de la variable TTS, pour la faire prononcer...
    phrase = self:getVariable("TTS")
    self:Parler(phrase)
end

J'ai donc :

  • cas d'usage n°2  = clic sur bouton du QA : onParler, qui récupère la valeur courante de la variable TTS, pour la passer en argument de Parler.
  • cas d'usage n°1 = TTS depuis n'importe où Parler qui, pour info ou analyse/debug si besoin, mémorise la phrase passée en argument dans la variable TTS (oui, c'est ridicule dans le cas d'usage 2 : elle y est déjà :)), puis appelle la fonction "interne" pour faire prononcer la phrase au lapin sous OpenKarotz (nécessite la construction de l'URL tts de OpenKarotz, raison pour laquelle je l'ai nommé OpenKarotzTTS).

Le code de OpenKarotzTTS (largement inspiré de celui de @Dragoniacs - encore merci :)) :

function QuickApp:openKarotzTTS(text2speech)
    tools:Message("trace", text2speech)
    -- voice
    voice = "1"
    -- text
    text = text2speech
    text = string.gsub(text, "\n", "\r\n")
    text = string.gsub(text, "([^%w %-%_%.%~])",
        function (c) return string.format("%%%02X", string.byte(c)) end)
    text = string.gsub(text, " ", "+")
    -- cache
    nocache = 0 -- ToDo: utiliser le cache ?
    -- URI
    local URI = "tts?voice="..voice.."&text="..text.."&nocache="..nocache
    -- appel
    self:openKarotz(URI)
end

 

Modifié par Bebitoo

Partager ce message


Lien à poster
Partager sur d’autres sites

×