Dysfonctionnement "va se coucher"


#1

Salut ! je rencontre un problème qui n’es pas systématique mais qui est récurrent, concernant l’évent quand je me couche.

Lors que je dis gladys que je vais dormir, les scénarios se déclenchent normalement, et je vois bien que je part dormir dans les Events :


(deux fois ici, mais ça ne change rien, j’ai recommencé pour les tests)

Par contre, mon détecteur de mouvement qui dois vérifier que je ne suis pas couché pour allumer les lumières me vois toujours éveillé :

(async () => { //détection mouvement par le GPIO V2

const asleep = await gladys.house.isUserAsleep({house: 1, user: 1});
console.log((asleep));
})();

J’ai simplifié ici mon code pour le test. Bien que le dernier événement enregistré soit “va se coucher” quand j’exécute ce script, FALSE s’affiche dans la console…
Pour corriger mon pb, il faut que j’aille dans une box indiquer que je suis bien couché :
image

Maintenant true s’affiche dans la console à l’exécution du script, et mon éclairage ne se déclenche plus… (j’ai un nouvel évenement “va se coucher” dans la liste.

Pour parler à gladys j’utilise SNIPS. Mais le problème est identique quand j’utilise télégram. De plus, il ne dois pas venir des moyens de com’ car l’évent s’affiche bien :thinking:

Des idees ? :slight_smile:


#2

Hello @jojolll, alors le problème est double :stuck_out_tongue:

Dans le cas de Telegram

En fait quand tu dis à Gladys “je vais me coucher”, elle créé un événement comme par exemple:

 {
    datetime: 2019-03-02T07:36:15.000Z,
    value: null,
    user: 1,
    house: null,
    room: null,
    eventtype: 4,
    id: 285027,
    createdAt: 2019-03-02T07:36:15.000Z,
    updatedAt: 2019-03-02T07:36:15.000Z
}

Comme tu peux voir, l’attribut “house” est à null car Gladys n’a aucune indication dans quelle maison tu es allé te coucher…

Je le conçois c’est pas super logique de devoir indique à Gladys que tu vas te coucher dans une maison en particulier, là ce que tu veux c’est juste l’information que tu dors je pense. Une bonne idée de comportement à changer pour la v4 :slight_smile:

Pour fixer ça pour l’instant, deux méthodes:

  • Soit tu précise dans ton message Telegram une maison, genre si ta maison s’appelle “maison” dans Gladys, dis “Je vais me coucher maison” (c’est con je sais :grin:)
  • Soit tu adaptes ton script pour ne pas prendre en compte la maison, exemple:
(async () => {
const rows = await gladys.utils.sql(`
SELECT user.*,
      ( 
        SELECT eventtype.code
        FROM event 
        JOIN eventtype ON event.eventtype = eventtype.id
        WHERE 
        ( eventtype.code = 'going-to-sleep' OR eventtype.code = 'wake-up' )
        AND user = user.id 
        ORDER BY datetime DESC LIMIT 1 ) AS lastHouseEvent
      FROM user 
      WHERE user.id = 1
      HAVING lastHouseEvent = 'going-to-sleep'`)
const asleep = (rows.length > 0);
console.log(asleep);
})();

Dans le cas de SNIPS

Dans le cas de SNIPS, c’est un peu différent je pense que le problème est double.

Je ne sais pas si le module SNIPS envoie un user en particulier lorsque tu parles à Gladys (@piznel si tu as des informations là dessus). En gros dans le cas de SNIPS je pense pas qu’on puisse savoir qui dit “je vais me coucher” et donc quel utilisateur doit être marqué comme “au lit”


#3

Salut ! Merci de ces précisions, pour la simplicité je lui dirais que “je vais me coucher maison” :rofl:.

Côté SNIPS, gladys dois bien avoir l’information :

Ici on lui indique en param que le hotword “hey snips” est attribué à l’user 1. Dans mon cas je n’ai qu’un utilisateur, mais théoriquement je crois qu’on peux en ajouter d’autres avec des wakewords différents :slight_smile:


#4

Attention il faut que ta maison s’appelle maison! :stuck_out_tongue:

Ah c’est génial ça! :slight_smile: Je savais pas. C’est top


#5

C’est bien le cas :smile:

J’en profite pour te poser une autre question sur SNIPS. aurais-tu une piste pour que gladys comprenne les requêtes d’alarmes ? SNIPS est un peu spécial, car tous les nombres sont sous forme de texte. Si je souhaite mettre l’alarme “dans deux heures” c’est tout bon
image
Ici le slot date est faux il à compris 2h de l’aprem, mais gladys réponds bien “alarme… 13h20” comme je le souhaite.

par contre si je dis “alarme demain 17h” :


Mauvaise pioche gladys n’a même pas répondu et snips a reconnu une durée ?!.. on oublie

Bon c’est pas ce que je voulais, j’essaie avec 8h30 demain :


Ici réponse OK champ time OK mais alarme activée pour demain à midi et non à 8h30.
Gladys interprète “demain” comme son %TIME% et donc prends 12h par défaut je suppose ^^ mais reste le problème que ce n’est pas ma requête :disappointed_relieved:


#6

Je ne saurais pas te répondre là dessus désolé, je ne sais pas comment snips fonctionne en interne ^^ pose ta question sur le sujet SNIPS :slight_smile:


#7

J’avais déjà fais ça ^^ Jean-Phillipe m’a répondu ceci :

A priori c’est pas plus compliqué que ça c’est vraiment juste que SNIPS envoie du text et pas des nombres. Du coup tu pense qu’il est mieux de l’intégrer au brain, ou plutôt qu’il faudrait le faire côté module ? :wink:


#8

Je pense que c’est plus à Gladys dans le brain. Dans Gladys 4 on change de librairie pour faire ça, on passe à node-nlp et voilà les entitées disponibles =>

On pourra en rajouter au besoin!