Recherche informations pour Miiocli

Bonjour à tous

je cherches à récupérer des infos sur 2 équipements XIAOMI (distributeur d’eau et de croquettes) qui ne sont pas intégrés dans les plugins existants

je retrouve bien les 2 devices :

sudo miiocli discover
[sudo] Mot de passe de jeedom : 
INFO:miio.miioprotocol:Sending discovery to <broadcast> with timeout of 5s..
INFO:miio.miioprotocol:  IP 192.168.1.62 (ID: 1bde7fa5) - token: b'ffffffffffffffffffffffffffffffff'
INFO:miio.miioprotocol:  IP 192.168.1.63 (ID: 1be58e80) - token: b'ffffffffffffffffffffffffffffffff'

j’arrive à consulter les infos pour l’un des 2

jeedom@JeedomAtlas:~$ sudo miiocli device --ip 192.168.1.63 --token xxx info
Model: mmgg.feeder.fi1
Hardware version: esp8266
Firmware version: 2.1.3
jeedom@JeedomAtlas:~$ miiocli device --ip 192.168.1.62 --token xxx info
ERROR:miio.miioprotocol:Got error when receiving: timed out
Error: No response from the device

mais je n’arrive pas à trouver la commande pour voir les status

j’ai essayé ca :

miiocli petwaterdispenser --ip 192.168.1.63 --token xxx status

WARNING:miio.device:Found an unsupported model 'mmgg.feeder.fi1' for class 'PetWaterDispenser'. If this is working for you, please open an issue at https://github.com/rytilahti/python-miio/
WARNING:miio.miot_device:Unable to find mapping for mmgg.feeder.fi1, falling back to mmgg.pet_waterer.s1
ValueError: 0 is not a valid OperatingMode

mais la class ne semble pas lui plaire, comment savoir celle à utiliser ?

elle est peut être pas implémentée dans miiocli ?

il n’y a pas de class générique ?

merci

Que donne la commande :

miiocli genericmiot --ip 192.168.1.63 --token xxx status

[EDIT] : j’ai l’impression que tu te trompes d’équipement car il semble avoir trouvé au vu des logs de ta dernière commande ton distributeur de nourriture (mmgg.feeder.fi1) alors que tu indiques qu’il s’agit du distributeur d’eau

Bonjour merci pour la réponse
Je vais tester demain la commande

.63 c’est pour l’eau, .62 pour les croquettes

j’ai testé la commande, il ne connait pas « genericmiot »

quand je fais un miiocli --help, ce terme n’est pas la liste

et avec l’IP 62, ce n’est pas mieux avec le mot clé : petwaterdispenser

jeedom@JeedomAtlas:~$ miiocli petwaterdispenser --ip 192.168.1.62 --token xxx status
ERROR:miio.miioprotocol:Got error when receiving: timed out
Error: No response from the device

je poursuis mes recherches…

j’ai trouvé cet article, très intéressant : A guide how to communicate with MIOT devices -> Plugin? · Issue #901 · rytilahti/python-miio · GitHub

je retrouve 2 entrées dans : http://miot-spec.org/miot-spec-v2/instances?status=all

{« status »:« released »,« model »:« mmgg.feeder.fi1 »,« version »:1,« type »:« urn:miot-spec-v2:device:pet-feeder:0000A06C:mmgg-fi1:1 »,« ts »:1662356451}

{« status »:« debug »,« model »:« mmgg.feeder.fi1 »,« version »:2,« type »:« urn:miot-spec-v2:device:pet-feeder:0000A06C:mmgg-fi1:2 »,« ts »:1662358753}

si je test : https://miot-spec.org/miot-spec-v2/instance?type=urn:miot-spec-v2:device:pet-feeder:0000A06C:mmgg-fi1:1

j’obtiens bien le json

et je peux voir une des commandes que j’aimerais récupérer, le niveau du distributeur :

"iid":2,
"type":"urn:miot-spec-v2:service:pet-feeder:00007847:mmgg-fi1:1",
"description":"Pet Feeder",
"properties":[
{
"iid":1,
"type":"urn:miot-spec-v2:property:fault:00000009:mmgg-fi1:1",
"description":"Device Fault",
"format":"uint8",
"access":[
"read",
"notify"
],
"value-list":[
{
"value":0,
"description":"No Faults"
},
{
"value":1,
"description":"OK"
},
{
"value":3,
"description":"Error"
},
{
"value":5,
"description":"Timeout"
}
]
},
{
"iid":5,
"type":"urn:miot-spec-v2:property:feeding-measure:00000080:mmgg-fi1:1",
"description":"Feeding Measure",
"format":"uint8",
"access":[
],
"value-range":[
1,
30,
1
]
},
{
"iid":6,
"type":"urn:miot-spec-v2:property:pet-food-left-level:0000010E:mmgg-fi1:1",
"description":"Pet Food Left Level",
"format":"uint8",
"access":[
"read",
"notify"
],
"value-list":[
{
"value":0,
"description":"Normal"
},
{
"value":1,
"description":"Low"
},
{
"value":2,
"description":"Empty"
}
]
}

je test la commaned :

miiocli -d device --ip 192.168.1.63 --token xxx raw_command get_properties « [{‹ did ›: ‹ MYDID ›, ‹ siid ›: 2, ‹ piid ›: 6 }] »

mais ca ne remonte toujours cette même réponse à 0, peut importe le piid que je met

Running command raw_command
[{'did': 'MYID', 'siid': 2, 'piid': 6, 'code': 0, 'value': 0}]

concernant le distributeur d’eau, j’avais un tocken erroné

j’arrive bien à avoir le « status » sur cet équipement avec le device : petwaterdispenser

jeedom@JeedomAtlas:~$ sudo miiocli petwaterdispenser --ip 192.168.1.62 --token xxxx status
WARNING:miio.device:Found an unsupported model 'mmgg.pet_waterer.wi11' for class 'PetWaterDispenser'. If this is working for you, please open an issue at https://github.com/rytilahti/python-miio/
WARNING:miio.miot_device:Unable to find mapping for mmgg.pet_waterer.wi11, falling back to mmgg.pet_waterer.s1
On: 0
Mode: OperatingMode.Normal
LED on: False
Lid up: False
No water: False
Time without water: 0:00:00
Pump blocked: False
Error detected: False
Days before cleaning left: 5 days, 0:00:00
Cotton filter live left: 12 days, 0:00:00
Sponge filter live left: 12 days, 0:00:00
Location: null
Timezone: 127

quand la fontaine est en action, j’ai :

On: 0
Mode: OperatingMode.Normal
LED on: False
Lid up: False
No water: False
Time without water: 0:00:00
Pump blocked: False
Error detected: True
Days before cleaning left: 5 days, 0:00:00
Cotton filter live left: 12 days, 0:00:00
Sponge filter live left: 12 days, 0:00:00
Location: null
Timezone: 127

quand elle est arrêtée :

On: 0
Mode: OperatingMode.Normal
LED on: False
Lid up: False
No water: False
Time without water: 0:00:00
Pump blocked: False
Error detected: False
Days before cleaning left: 5 days, 0:00:00
Cotton filter live left: 12 days, 0:00:00
Sponge filter live left: 12 days, 0:00:00
Location: null
Timezone: 127

la seule chose qui change, c’est le Error detected, à true quandl a fontaine est ON et àFalse, quand elle est arrêtée, étrange mais pourquoi pas

le No water:, fonctionne bien =True quand il n’y a plus d’eau, False quand il y en as

le Time without water: 0:01:00 se met bien à jour également

déjà, comment pourrais-je récupérer ce paramètre dans jeedom ?

j’ai le plugion XIAOMI HOME mais ce module ne semble pas implémenté

j’ai réussit à me faire un virtuel avec la récupération des infos

image

Comment je peux faire la même chose avec le distributeur de croquette, sachant que pour lui, je n’ai pas le device correspondant, la commande :
sudo miiocli petwaterdispenser --ip 192.168.1.63 --token 772bd77834abbee5905c9e7a71719a18 status

il est possible d’ajouter un device avec le JSON ?

Bonjour, voici un exemple de bout de scenario que j’utilise pour récupérer les infos de mon distributeur de croquettes. C’est le même que le tien

Et la commande a exécuter pour la distribution d’une ration par exemple :
miiocli genericmiot --ip 192.168.0.31 --token xxxxxxxa32af7bb820b34149fe call pet-feeder:pet-food-out

Bonjour

merci pour la réponse

le soucis, c’est que je n’ai pas de genericmiot dans les commande miiocli

j’ai pu récupérer quelques infos avec cette commande :

miiocli device --ip 192.168.1.63 --token xxx raw_command get_properties « [{"did": "fault", "siid": 2, "piid": 1}, {"did": "feedtotal", "siid": 4, "piid": 2}, {"did": "foodstatus", "siid": 4, "piid": 7}, {"did": "dryertime", "siid": 7, "piid": 1}, {"did": "clearnserve", "siid": 8, "piid": 1}, {"did": "PetFoodLeftLevel", "siid": 2, "piid": 6}, {"did": "doorstatus", "siid": 4, "piid": 9}] »

avec le code :

//Niveau
$tags = $scenario->getTags();

#$output = shell_exec("miiocli --output json -d device --ip 192.168.1.63 --token 772bd77834abbee5905c9e7a71719a18 raw_command get_properties \"[{'did': 'PetFoodLeftLevel', 'siid': 2, 'piid': 6}]\"");

$output = shell_exec("miiocli --output json -d device --ip 192.168.1.63 --token xxx raw_command get_properties \"[{'did': 'fault', 'siid': 2, 'piid': 1}, {'did': 'feedtotal', 'siid': 4, 'piid': 2}, {'did': 'foodstatus', 'siid': 4, 'piid': 7}, {'did': 'dryertime', 'siid': 7, 'piid': 1}, {'did': 'clearnserve', 'siid': 8, 'piid': 1}, {'did': 'PetFoodLeftLevel', 'siid': 2, 'piid': 6}, {'did': 'doorstatus', 'siid': 4, 'piid': 9}]\"");

$resultat_data = json_decode($output, true);

if (json_last_error() !== JSON_ERROR_NONE) {
    $scenario->setLog("Erreur JSON : " . json_last_error_msg());
} else {
    $scenario->setLog("Le JSON est valide et bien formé.");
}

// DEBUG
//$scenario->setLog("DEBUG: OUTPUT=".$output);
//$scenario->setLog("DEBUG: RESULTAT_DATA=".print_r($resultat_data));

$tags['#fault#'] = $resultat_data[0]['value'];
$tags['#feedtotal#'] = $resultat_data[1]['value'];
$tags['#foodstatus#'] = $resultat_data[2]['value'];
$tags['#dryertime#'] = $resultat_data[3]['value'];
$tags['#clearnserve#'] = $resultat_data[4]['value'];
$tags['#PetFoodLeftLevel#'] = $resultat_data[5]['value'];
$tags['#doorstatus#'] = $resultat_data[6]['value'];

$scenario->setTags($tags);
$scenario->setTags($output);

merci pour les exemples de codes

Bonjour,

Tu arrives déjà à récupérer les infos c’est un bon début !

Pour l’absence de genericmiot cela vient peut être de la version de miiocli installée :

miiocli --version
donne chez moi :
miiocli, version 0.6.0.dev0

A creuser de ce côté là potentiellement.

Oui :slight_smile:

C’est une version qui a du s’installer avec le plugin XIAOMI

et c’est peut être pas propre :frowning:

jeedom@JeedomAtlas:~$ sudo miiocli --version
Traceback (most recent call last):
  File "/usr/local/bin/miiocli", line 8, in <module>
    sys.exit(create_cli())
  File "/usr/local/lib/python3.7/dist-packages/miio/cli.py", line 66, in create_cli
    return cli(auto_envvar_prefix="MIIO")
  File "/usr/local/lib/python3.7/dist-packages/miio/click_common.py", line 51, in __call__
    return self.main(*args, **kwargs)
  File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 1077, in main
    with self.make_context(prog_name, args, **extra) as ctx:
  File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 943, in make_context
    self.parse_args(ctx, args)
  File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 1644, in parse_args
    rest = super().parse_args(ctx, args)
  File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 1408, in parse_args
    value, args = param.handle_parse_result(ctx, opts, args)
  File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 2400, in handle_parse_result
    value = self.process_value(ctx, value)
  File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 2362, in process_value
    value = self.callback(ctx, self, value)
  File "/usr/local/lib/python3.7/dist-packages/click/decorators.py", line 509, in callback
    ) from None
RuntimeError: 'miio' is not installed. Try passing 'package_name' instead.

Si c’est la version du plugin xiaomi et vu que celui-ci n’a pas bougé depuis 2022 elle doit être plus vieille.

Personnellement j’ai installé une version de miiocli moi-même et je suis sur du DIY. Compte tenu que tu es sur une atlas et que je ne maitrise pas trop les logiques d’installation de paquet sur ce matériel et les éventuels effets de bord je ne peux pas te conseiller d’en faire de même.

Le plugin mi-robot installe aussi une version je crois. Mais il faut peut être executer les commande depuis un chemin spécifique pour y faire appel. A voir avec le dev du plugin s’il peux te dire comment lancer des comamdnes en SSH ?

c’est pas très grave, c’est surtout la remonté des infos qui m’intéresse

je vais refaire des tests, mais hier, je levé le capot du distributeur de croquettes, mais la variable n’a jamais changée, je ne sais pas si elle sont toutes fonctionnelles.

merci pour ton aide

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.