Verrouiller une gamelle

Bonjour,

J’utilise le plugin et les gamelles connectées depuis quelques semaines, un grand merci pour ce travail.

Existe-t-il un moyen de verrouiller une gamelle ou de désaffecter un chat à un appareil via le plugin ?

J’ai un chat qui est un sacré goinfre et je dois lui donner des rations matin et soir. Je me demandais si il y avait un moyen d’utiliser cette gamelle en la remplissant plus que nécessaire en cas d’absence prolongée et faire un scénario avec comme action de l’empêcher d’ouvrir la gamelle en cas de dépassement de sa ration ou de le supprimer des animaux autorisés à y manger pour plusieurs heures.

Sinon je vais devoir me tourner vers un distributeur de repas automatiques avec la possibilité que d’autres chats lui volent.

Merci d’avance pour vos réponses

A ma connaissance il n’existe pas de telles commandes (contrairement aux chatières) mais en fait nous ne connaissons de l’API que ce que des utilisateurs ont découvert puisqu’il n’existe pas de document décrivant l’API et les commandes disponibles. Je vais chercher sur le web s’il y a eu des progrès dans ce domaine.
Un autre problème que tu aurais serait de calculer la quantité de nourriture consommée par ton goinfre en totalisant la quantité pour chaque repas. Je n’ai pas essayè de faire çà pour le moment donc je ne sais pas si c’est simple ou pas.

Merci de ta réponse. Si tu as le temps d’y jeter un oeil si ton temps libre le permet ce serait très utile.

Je fais un calcul via un scénario totalisant les repas sur une journée et sur une semaine pour chacun de mes chats. Je peux maîtriser mes courbes puisque celles de l’application mobile ne permettent pas de supprimer des points suite à des essais ou des imprécisions de mesure …

C’est assez simple à faire. J’ai un scénario qui tourne toutes les minutes et qui compare les dates de dernier repas pour déterminer si il y a eu un nouveau repas si les valeurs sont différentes, ensuite dans un autre scénario j’additionne les retours des 2 bols dans une variable, et à chaque nouveau repas je continue. Tous les jours à minuit je réinitialise cette variable.

Avec ça je peux savoir à quel moment le chat a atteint sa dose, à l’imprécision prête que je n’ai la quantité qu’après la fin de son repas donc si il fait la pelleteuse je ne pourrais pas lui fermer la gamelle sur la tête. Mais ça a la limite c’est pas un drame.

Je pense que si tu pouvais communiquer tes scénarios çà pourrait aider d’autres utilisateurs.
Personnellement pour le moment je n’en ai pas l’usage aucun de mes deux chats n’est boulimique, le persan m’inquiète un peu car il maigrit bien que mangeant toujours la même quantité et souffre souvent de diarrhées mais le veto ne lui trouve rien. Depuis 5 jours j’essaie des probiotiques.

J’ai fait ça rapidement, je suis persuadé qu’il y a moyen de faire ça beaucoup plus propre.

Le scénario pour déterminer si il y a eu un nouveau repas :


En exécution automatique toutes les minutes. Il faut cependant initialiser une première valeur de repas, d’où l’action grisée que j’ai utilisé à la toute première exécution du scénario. Si la valeur enregistrée est différente de celle lue alors j’active une variable et à la prochaine lecture du programme je la remet à zéro et je change la date du dernier repas. Cette variable me sert de déclencheur pour le second scénario.

Le scénario de la quantité de croquettes par jour et semaine.


L’exécution est sur la variable précédente ou à minuit pile. Pour celui-ci j’utilise des variables J-1, J-2, J-3 … dans lesquels je décale les valeurs d’une place si il est minuit (entre 00:00 et 00:05, mon chat a compris que ça faisait planter le scénario si il mangeait à 23:59) et je remets la variable J à zéro. J’ai une variable « Calcul » qui est l’addition des retours des 2 bols ( *(-1) pour un résultat positif) que j’additionne à la variable J (avec une condition que la valeur doit être supérieure à 0.2g, parfois le chat ouvre la gamelle sans y toucher et je reçois des notifications pour me dire qu’il a mangé 0.05g).

La variable ration_J est un ajout de la variable calcul à elle même et la variable ration_S est la même chose sauf que je la remets à zéro une fois par semaine.

Si il est lundi minuit, je remets les valeurs des différents jours à zéro en plus ainsi que la variable ration_S.

Je m’envoie un message avec la quantité de croquettes mangées. J’historise la variable Ration_J et Ration_S dans un virtuel pour faire de belles courbes.

1 « J'aime »

Bon j’ai fait des tas d’essais et pour les distributeurs de nourriture les animaux autorisés se trouvent un peu de la même manière que pour les chatières. Sauf que pour les chatières on a 2 valeurs

{"profile":3} = définir comme un animal non autorisé à sortir
{"profile":2} = définir l'animal comme autorisé à sortir

Mais dans tous les cas si l’animal a une valeur pour son « profile » çà veut dire qu’il est reconnu pour la chatière
Et pour les distributeurs de nourriture je ne trouve que des valeurs 2 pour l’animal autorisé à manger et une réponse du style

{"error":{"device":["deviceTag.not_found"]}}

si l’animal n’est pas autorisé à manger
J’ignore si pour l’interdire il faut mettre une valeur 3 ou alors le « désapprendre » du distributeur (mais comment ?). Je dois faire plus d’essais.

J’ai fait des essais. J’arrive bien à autoriser un animal sur un distributeur de nourriture en lui créant un tag profile. Par contre pour le moment je n’arrive pas a le « dés-autoriser » car n’importe quelle valeur que je mette dans le profile (2, 3, 0) il reste autorisé. je pense qu’il faudrait que j’arrive à supprimer son tag mais je n’y arrive pas.
EDIT : bon je crois que j’ai compris il faut tout simplement faire une requête DELETE pour supprimer le tag et non pas PUT comme je le faisais, dans le fond c’est logique.
Dès que je trouve le temps je code et je publie une nouvelle version avec ajout de 2 commandes pour le distributeur pour assigner et retirer un animal (j’ai regardé et c’est les termes dans l’app : assigner et retirer donc je vais prendre les mêmes).

2 « J'aime »

Merci beaucoup d’avoir pris ce temps, tu vas répondre à un vrai besoin de gamelle exclusive et portionnée. Je me ferai un plaisir d’essayer ça et te faire un retour. :slight_smile:

Bon j’ai publié une version beta avec ces nouvelles commandes.
Je teste encore un peu et je passerai en stable. Je ne voudrais pas que des pauvres minous se désespèrent devant leur distributeur qui ne s’ouvre plus :smiley:
Note : il faut faire une synchro pour que les nouvelles commandes apparaissent dans les distributeurs.

Je viens de faire quelques essais de la béta.
Les commandes fonctionnent bien, je regarde sur l’application mobile en même temps, les fonctions assigner et retirer fonctionnent bien, mais même si le chat est bien autorisé, la gamelle ne s’ouvre plus. J’ai du supprimer le profil du chat et le recréer pour que ça remarche.

Et ça ne le fait que si je supprime et réassigne le chat via les commandes du plugin, si je le fais via l’application ça fonctionne.

Heureusement que tu as testé avec le chat je n’avais que testé que dans l’application mobile je voyais bien le chat assigné et retiré.
J’ai dans un tiroir un badge pour simuler un chat virtuel. Je vais faire des essais avec ce badge pour comprendre ce qui ne va pas.
EDIT chez moi çà semble bien marcher : j’ai fait 2 petits scénarios un qui ajoute le chat virtuel avec la commande Assigner animal et un qui l’enlève avec la commande Retirer animal et quand je teste avec mon badge j’ai bien le résultat attendu : après le scénario pour ajouter le badge provoque bien l’ouverture de la gamelle, si j’exécute le scénario pour enlever la gamelle ne s’ouvre plus, si j’exécute à nouveau le scénario pour ajouter la gamelle s’ouvre bien.
Je me demande pourquoi çà ne marche pas chez toi.
EDIT2 : Je viens de penser à un truc il y a une différence entre mon test et ta situation moi j’ajoute le chat virtuel à la gamelle du persan donc il y a maintenant 2 chats assignés puis le le retire et il n’y a plus que le persan alors que toi tu retire et ajoute le seul chat assigné à cette gamelle. Je vais refaire un test en simulant ton cas

Effectivement, je viens de faire l’essai avec un médaillon également et ça marche normalement.

Maintenant que sa majesté a eu son repas je testerai demain en conditions réelles.

J’ai fait plus d’essais et il me semble qu’il y a un problème dans un cas précis : s’il n’y a aucun chat attribué au distributeur et si on essaie d’en attribuer un par la commande du plugin il apparait bien comme atrtibué dans l’app smartphone mais la gamelle ne s’ouvre pas.
Par contre s’il y a déjà un chat d’attribué et si on en attribue un second par le plugin çà marche. Franchement je ne sais pas ce qui bloque.
Je pense que la seule solution serait de sniffer ce que l’app smartphone envoie pour voir en quoi c’est différent de ce que je fait dans mon code.
Hélas ce genre de manip je ne l’ai fait qu’une fois il y a pas mal de temps guidé par un autre utilisateur sur l’ancien forum Jeedom. je vais voir si je retrouve comment faire.
Mais en attendant dis moi si tes tests confirment les miens.

Effectivement tu as du mettre le doigt sur le problème.

Hier pour les essais en réel la gamelle ne s’ouvrait plus au moment du repas du soir, donc à la nouvelle attribution après suppression du matin. J’ai fait quelques essais avec le médaillon dans la foulée et le résultat était le même. Puis à force ça s’est mis à remarcher, surement que j’avais attribué le chat via le scénario et j’avais laissé le médaillon attribué, je n’avais pas fait le lien.

En attendant je vais contourner le problème en attribuant le médaillon en permanence à la gamelle pour que le chat soit toujours le « 2ème » a être ajouté ou supprimé de la gamelle.

Si tu es sur Windows, tu peux utiliser Fiddler pour cela. Il faut lancer l’outil, puis déclarer l’adresse IP du PC et le port de Fiddler comme proxy sur le smartphone. Toutes les requêtes vers les serveurs surepet transiteront par l’outil de capture et tu pourras voir comment elles sont construites.

La partie la plus compliquée et d’autoriser les connexions SSL/TSL au travers du PC (il faut déclarer le certificat de Fiddler comme « de confiance » pour pouvoir déchiffrer le trafic chiffré.

Si tu as besoin d’un coup de main, tu peux me MP.

K.

Hello @kimagure c’est toi qui m’avait guidé pour faire çà je croyais que c’était sur l’ancien forum mais en fait c’était sur celui ci.

Je vais réinstaller Fiddler (j’ai changé d’ordi depuis) et voir si j’ai besoin d’aide ou pas j’ai retrouvé le pdf que tu avais envoyé à cette époque.

Hier j’ai laissé mon programme tourner avec le médaillon attribué à la gamelle en permanence, et ce matin sans trop faire attention mon chat était en train de manger, ce qui veut dire qu’il n’y a eu aucun problème.

Le scénario a bien bossé, d’ailleurs je faisais mon calcul de quantité de minuit à minuit dans un autre scénario, et j’autorisais deux portions à mon chat de 7h à 19h et 19h à 7h. Ce qui veut dire que si il n’avait pas mangé sa ration et verrouillé la gamelle avant minuit … sa quantité mangée retombait à zéro et il pouvait repartir pour une nouvelle ration complète jusqu’à 7h. Heureusement que c’est pas un surdoué.

J’ai refait un scénario complet incluant le calcul pour les plages voulues, je l’essaye et je le posterai pour ceux que ça intéresse.

Bonjour à tous,

Après une semaine de tests je reviens pour confirmer que tout marche très bien tant qu’effectivement un chat est toujours affecté à la gamelle. J’ai donc laissé le médaillon fourni avec l’appareil et que je n’utilise pas affecté comme un chat pour pouvoir supprimer et réaffecter mon vrai chat.

Pour ce qui est du programme, je l’ai étoffé avec beaucoup d’alertes textes, des calculs etc … Le voici et je vous donne des explications sur le principe :

Déjà il faut garder le 1er scénario que j’ai détaillé dans le post 5, où je compare les dates de repas chaque minute pour obtenir une variable de « nouveau repas » qui me déclenche donc ce scénario là. Je le déclenche également tous les jours à 7h00 et 19h00.

En premier des cases actions non utilisées pour forcer des valeurs en cas de test.

J’ai décidé que la portion du matin serait donnée à partir de 7h00 et celle du soir à partir de 19h00. Donc déjà le scénario démarre par regarder quelle heure il est.

A 7h00 j’ai une variable « COMPENSATION_MATIN » qui correspond à la portion du matin - la différence entre ce qui a été mangé la veille au soir et la portion normalement programmée. Le fait de n’avoir la quantité mangée qu’à la fin du repas fait que pour 30g de ration le chat peut en manger 35g, j’ai donc fait le choix de lui retirer ces 5g de trop à la prochaine ration. A l’inverse si il ne mange pas tout il pourra en avoir plus le soir.
Ensuite je l’attribue à la gamelle pour que celle-ci puisse s’ouvrir.

Je fais la même chose à 19h00 en compensant avec la ration mangée le matin si jamais il y a eu un écart.

Je calcule la quantité mangée en additionnant les retours de poids des bols *(-1) pour une valeur positive.

Si la valeur en retour est supérieure à 0.2g (parfois le chat ouvre la gamelle sans y manger et je reçois des repas de 0.05g), alors je rajoute ça à la variable de quantité quotidienne et puis je regarde en fonction de la plage horaire si le total est supérieur ou égal à sa ration. Si non, je m’informe de la quantité mangée, si oui, je retire le chat de la gamelle. Il vient de terminer son repas jusqu’à 19h00 ou 7h00 du matin selon.

L’écart du soir est égal à la quantité mangée sur la journée, - la ration du matin - la ration du soir. Si il devait manger 2x35g et qu’il en a mangé 75g sur la journée, la variable est égale à 5.

J’ai fait le choix de lire les valeurs de « portion » de la gamelle pour modifier les calculs, j’aurai pu utiliser un virtuel Jeedom et c’est surement ce que je ferais à l’avenir.


Autre sujet là dessus, il reste un petit point à perfectionner qui est ma façon de détecter les nouveaux repas.

Admettons que si un chat mange à 19h00m02s, il va falloir 58s pour que le scénario se remette en route et déclenche le calcul. Ensuite ce même scénario doit se remettre en route pour faire redescendre la variable à 0, donc un repas peut se faire toutes les 2 minutes grand maximum et en 1m01s si les planètes sont bien alignées.

Sauf que j’ai déjà eu le cas où un chat mange, se fait perturber par un autre chat, s’éloigne assez pour que la gamelle se referme, et y revient quelques instants plus tard. Là je ne vais récupérer que l’information du premier repas via mes scénarios.

Est-ce que quelqu’un a une idée pour faire mieux que ma technique, ou @vedrine penses-tu qu’il soit possible de remonter une info de « nouveau repas » ?

Je pense que pour çà il faudrait traiter la « timeline » qui donne la suite de tous les événements mais pour le moment je ne l’ai pas fait, j’ai juste fait des petits scripts de test en php pour voir ce que çà retournait mais je ne l’ai pas intégré au plugin car les données retournées sont complexes et il faudrait faire le tri entre les mouvements d’animaux par les chatière, les remplissages de gamelles, les repas, les remplissages de fontaine, les boissons. Ceci dit autant que je me souvienne il y a un projet sur Github qui traite la timeline

1 « J'aime »