GithubHelp home page GithubHelp logo

Comments (26)

doudz avatar doudz commented on August 18, 2024

il apparait que certains équipements fournissent le % mais pas les XIAOMI d'où la nécessité de calculer d'après le voltage de la pile

from jeedom-plugin-zigate.

llaumgui avatar llaumgui commented on August 18, 2024

Yes, c'est ce que j'ai compris.
Mais la méthode de calcul est différentes entre les plugins. Et certaines personnes trouve que celle d'abeille est plus juste: https://www.jeedom.com/forum/viewtopic.php?p=641876#p641876 & https://www.jeedom.com/forum/viewtopic.php?p=643033#p643033

from jeedom-plugin-zigate.

doudz avatar doudz commented on August 18, 2024

j'ai regardé comment fait Abeille :
3.1V = 100%
2.7V = 0%
linéaire entre les 2

lib python actuel:
3.2V = 100%
0.9x3.2 soit 2.88 = 0%
linéaire entre les 2

from jeedom-plugin-zigate.

doudz avatar doudz commented on August 18, 2024

Si qqn à les sources du plugin Xiaomi pour comparer

from jeedom-plugin-zigate.

llaumgui avatar llaumgui commented on August 18, 2024

Le sujet est sensible là bas aussi: https://www.jeedom.com/forum/viewtopic.php?p=456691#p456691

from jeedom-plugin-zigate.

doudz avatar doudz commented on August 18, 2024

Oui , il ne faut pas oublier que le pourcentage c'est une estimation pour le confort de l'utilisateur car il n'y a pas de jauge dans la pile...
il faut savoir aussi que le voltage dépend de la température et de la consommation donc le pourcentage peut varier et plus ou moins durant la journée

from jeedom-plugin-zigate.

llaumgui avatar llaumgui commented on August 18, 2024

Yes, la question est de benchmarcké les 3 solutions et voir la meilleure VS les spécificité du fabriquant.

from jeedom-plugin-zigate.

llaumgui avatar llaumgui commented on August 18, 2024

Du coup dans tous les cas, c'est pas le plugin mais le daemon Python qui fait le calcul ?

from jeedom-plugin-zigate.

doudz avatar doudz commented on August 18, 2024

Oui

from jeedom-plugin-zigate.

llaumgui avatar llaumgui commented on August 18, 2024

Je ferme car côté Python.

from jeedom-plugin-zigate.

doudz avatar doudz commented on August 18, 2024

à voir, actuellement je considère que le % évolue de façon linéaire en fonction de la tension mais en réalité ce n'est pas le cas
image

from jeedom-plugin-zigate.

llaumgui avatar llaumgui commented on August 18, 2024

Mais @doudz le calcul n'est pas ici: https://github.com/Jeedom-Zigate/jeedom-plugin-zigate/blob/master/core/class/zigate.class.php#L121 ? Ou alors c'est le fallback lorsque le daemon ne le remonte pas ?

from jeedom-plugin-zigate.

doudz avatar doudz commented on August 18, 2024

Ah effectivement, j'ai répliqué le calcul qui est fait dans la lib python directement dans le plugin, j'avais oublié ce point.
Le but était de pouvoir faire le calcul sans faire d'échange entre Jeedom et le démon.
Je ne sais si c'est une bonne idée car ça fait double emploi et finalement les transferts entre jeedom et le démon sont assez rapide donc ce bout de code pourrait être modifier pour interroger directement la lib python

from jeedom-plugin-zigate.

llaumgui avatar llaumgui commented on August 18, 2024

Je suis en train de lire / documenter / comprendre le code.
Pour moi c'est plus un fallback vu qu'il fait un $percent = $this->getProperty('battery_percent'); avant ?

Car si on récupère directement depuis la lib, ça doit remonter avec les autres propriétés ?

from jeedom-plugin-zigate.

doudz avatar doudz commented on August 18, 2024

Non pas vraiment getProperty('battery_percent') permet d'avoir le pourcentage de batterie dans le cas où l'équipement zigbee le propose, ce qui n'est pas le cas de XIAOMI par exemple (en fait je n'ai jamais vu ce cas encore). Si la valeur n'existe pas alors on l'estime.

La lib python fait exactement la même chose, on regarde si la valeur battery_percent existe, sinon on la calcule

from jeedom-plugin-zigate.

doudz avatar doudz commented on August 18, 2024

C'est pour ça qu'il faudrait peut-être modifier la fonction du plugin pour interroger la lib au lieu de faire le calcul dans le plugin, ça évite d'avoir 2 codes identiques à maintenir.

Dans un premier tu peux aussi simplement modifier le code dans le plugin pour avoir un calcul juste et dans un 2e temps je modifierai le code python pour avoir le même fonctionnement.

from jeedom-plugin-zigate.

llaumgui avatar llaumgui commented on August 18, 2024

De toute façon la méthode n'est appelée que pour la création (_create_command), donc le cout en appel de lib va pas être énorme...

from jeedom-plugin-zigate.

llaumgui avatar llaumgui commented on August 18, 2024

Du coup, pour récupérer depuis la lib il me sufferais de faire un :

zigate::callZiGate('get_device_from_addr', [$addr]);

Et toi faut que tu rajoute un battery_percent lorsqu'il est pas présent ?

from jeedom-plugin-zigate.

doudz avatar doudz commented on August 18, 2024

Attention, le code n'est pas appelé uniquement à la création, mais à chaque fois que l'attribut battery est mis à jour
la fonction update_command (appelé lorsqu'un attribut est mis à jour) utilise aussi la fonction _create_command, l'intérêt est d'avoir un seul et même code pour créer et mettre à jour une commande

from jeedom-plugin-zigate.

llaumgui avatar llaumgui commented on August 18, 2024

OK. Mais tu me confirmes que pour le moment battery_percent n'est pas systématiquement remonté par

zigate::callZiGate('get_device_from_addr', [$addr]);

from jeedom-plugin-zigate.

doudz avatar doudz commented on August 18, 2024

Non il n'est pas remonté

from jeedom-plugin-zigate.

llaumgui avatar llaumgui commented on August 18, 2024

Ok, donc faut le mieux est de laisser comme ça. Attendre la modification côté lib Python et le récupérer. Comme ça on sera uniforme.

from jeedom-plugin-zigate.

doudz avatar doudz commented on August 18, 2024

Ou alors modifier le démon pour ajouter une fonction permettant de récupérer la valeur
Exemple :
zigate::callZiGate('get_device_battery_percent', [$addr]);
Et dans le démon ajouter après la ligne 97 :

elif hasattr(self, action):
    func = getattr(self, action)
    response['result'] = func(*args)

et toujours dans la classe JeedomHandler ajouter la fonction get_device_battery_percent


def get_device_battery_percent(self, addr):
    device = z.get_device_from_addr(addr)
    return device.battery_percent

from jeedom-plugin-zigate.

llaumgui avatar llaumgui commented on August 18, 2024

Mais n'est-ce pas à la lib de remonter des choses de manières régulières ? De palier au fait que Xiaomi ne remonte pas de % ?
Plutôt qu'au plugin de supporter ceci ?

from jeedom-plugin-zigate.

doudz avatar doudz commented on August 18, 2024

XIAOMI remonte uniquement le voltage de la batterie et c'est pour l'utilisateur final qu'on souhaite afficher le pourcentage
Donc pour moi il est normal que lorsque la lib (la zigate) indique que le voltage a changé, le plugin recalcule le pourcentage.
Et dans un souci de cohérence du résultat, le plugin demande à la lib python de faire le calcul (au lieu de faire le calcul comme actuellement)

from jeedom-plugin-zigate.

llaumgui avatar llaumgui commented on August 18, 2024

Ce mettre en phase avec ce commit: doudz/zigate@cb550a6

from jeedom-plugin-zigate.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.