domotruc / jMQTT

Jeedom plugin to interface as a client with an MQTT broker.
16 stars 8 forks source link

[feature] Remonter battery ou batterie dans le core #102

Open Gis70 opened 4 years ago

Gis70 commented 4 years ago

Bonjour,

Tous d'abord merci pour ce plugin. J'ai basculé tout mon xiaomi sur zigbee2mqtt.

Serait il possible de remonter les infos nommées battery ou batterie dans le core comme le font certains plugin ? merci.

Gis70 commented 4 years ago

Voilà en attendant un fix via scénario :

https://community.jeedom.com/t/remonte-de-linformation-des-batteries-avec-le-plugin-mqtt/21467

BadWolf42 commented 3 years ago

Hello,

Y'a-t-il des avancées sur ce sujet ?

Voici une version plus "light" du code présent sur Community (parcours uniquement des équipements jMQTT et moins de logs) :

$batterie = "battery";
$eqLogics = eqLogic::byType('jMQTT', true);

foreach($eqLogics as $eqLogic)
{  
  try {
    // si la commande n'existe pas, une exception sera levée
    $cmd = cmd::byString('#' . $eqLogic->getHumanName() . '['. $batterie .']#');

    $scenario->setLog('Mise à jour du niveau de batterie de ' . $eqLogic->getHumanName());
    $batteryPercent = $cmd->execCmd();
    $batteryDateTimeValue = $cmd->getCollectDate();
    $eqLogic->batteryStatus($batteryPercent, $batteryDateTimeValue);
  } catch (Exception $e) {
    // pas de commande
    //$scenario->setLog( 'Exception: '.$e->getMessage()); // DEBUG
  }
}

A ajouter dans un bloc "code" d'un scenario lancé, par exemple, toutes les heures.

kwetnico commented 3 years ago

Hello,

Y'a-t-il des avancées sur ce sujet ?

Voici une version plus "light" du code présent sur Community (parcours uniquement des équipements jMQTT et moins de logs) :

$batterie = "battery";
$eqLogics = eqLogic::byType('jMQTT', true);

foreach($eqLogics as $eqLogic)
{  
  try {
    // si la commande n'existe pas, une exception sera levée
    $cmd = cmd::byString('#' . $eqLogic->getHumanName() . '['. $batterie .']#');

    $scenario->setLog('Mise à jour du niveau de batterie de ' . $eqLogic->getHumanName());
    $batteryPercent = $cmd->execCmd();
    $batteryDateTimeValue = $cmd->getCollectDate();
    $eqLogic->batteryStatus($batteryPercent, $batteryDateTimeValue);
  } catch (Exception $e) {
    // pas de commande
    //$scenario->setLog( 'Exception: '.$e->getMessage()); // DEBUG
  }
}

A ajouter dans un bloc "code" d'un scenario lancé, par exemple, toutes les heures.

Super ça fonctionne très bien merci !