Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

visu Plugin: Fixed 'False' bug discovered by psilo #25

Merged
merged 6 commits into from
Apr 23, 2016
Merged

visu Plugin: Fixed 'False' bug discovered by psilo #25

merged 6 commits into from
Apr 23, 2016

Conversation

msinn
Copy link
Member

@msinn msinn commented Apr 19, 2016

No description provided.

msinn and others added 6 commits April 19, 2016 10:10
- extended README.md of hue plugin
Develop update from smarthomeNG:Develop
…develop

* 'develop' of https://github.com:/msinn/smarthomeNG: (22 commits)
  removed some debug messages from plugin
  add Pull request 18, 19 and some system values in env. items
  - enabled smarttv plugin for new logging system
  - enabled wol plugin for new logging system
  multiknx merge from encbladexp
  every module in lib has now its own logger
  logging.yaml wird wieder ignoriert
  bugfix for http listener
  updated DWD and tankerkoenig plugin to new logging system
  enabled new logging system for eta_pu and avm plugin
  - tankerkoenig-plugin: further text correction in readme
  more info in readme
  - small bugfix for keys - readme updated
  logging refactored, add etc/logging.yaml file for configuration
  systemair modbus plugin v0.1
  - special bugfix reported by beta tester - updated version to 0.914
  ultra comfort function: initializes callmonitor items in case they are empty (from get_calllist function)
  added calendar class type (e.g. private) decoding to ical plugin; further enocean documentation
  Layout fixes to readme
  small modifications to documentation
  ...
@cstrassburg
Copy link
Member

cstrassburg commented Apr 20, 2016

Kennst Du aus smarthome.py die Funktion string2bool() ?
def string2bool(self, string): if isinstance(string, bool): return string if string.lower() in ['0', 'false', 'n', 'no', 'off']: return False if string.lower() in ['1', 'true', 'y', 'yes', 'on']: return True else: return None
Vielleicht sollte man sie auch eher irgendwo in /lib/tools unterbringenn aber es gibt sie und wird verwendet. Das Thema Properties kann man dann einheitlich behandeln.

@psilo909
Copy link
Contributor

fände ich gut, würde mein avm plugin dann auch anpassen

@msinn
Copy link
Member Author

msinn commented Apr 20, 2016

Ja,

ich war vor einiger Zeit als ich ein Plugin für mich schrieb darüber gestolpert. Da die Funktionen jedoch nicht dokumentiert waren war ich am zweifeln, ob die Funktionen als allgemeines API für Plugins zur Verfügung stehen, oder nur für den smarthome core und evtl. ohne Ankündigung modifiziert werden.
Ich bin dafür solche Funktionen zu nutzen. Dafür müssen wir sie aber als "stabiles API" dokumentieren. Ich fände es gut dafür eine Art smarthome Programmers Guide zu erstellen, in dem eine Reihe von Eckpunkten definiert werden.

In diesem Programmers Guide könnten auch Leitlinien zur Definition und Validierung von Properties niedergeschrieben werden.

Ich bin z.B. nicht glücklich mit der Art wie im originalen visu Plugin der Parameter smartvisu_dir implementiert wurde. So wie der Parameter genutzt wird, hat er zwei unterschiedliche Datentypen:

  • Boolean False, fals nicht gefiniert
  • String mit Pfadnamen, wenn definiert.

Dabei würde eine Standard-Validierung nicht helfen, weil unter anderem der Boolean Wert True kein sinnvoller/gültiger Wert für diesen Parameter ist.

Wenn wir entsprechende Guidelines erstellen, würde ich das Plugin entsprechend umbauen, wobei wir sehen müssen, wie wir dabei mit der Rückwärtskompatibilität umgehen.

@msinn
Copy link
Member Author

msinn commented Apr 21, 2016

Ich fände es gut, dabei auch gleich noch eine Funktion string2int() zu ergänzen. Häufig wird einfach in der Form self.log_telegrams = int(log_telegrams) gewandelt. Wenn dann jemand in der conf einen nichtnumerischen Wert einträgt, schmeisst das plugin gleich eine exception.

@ohinckel
Copy link
Member

👍 fuer Vereinheitlichung. Veilleicht kann man diese Sachen noch weiter vereinheitlichen, so dass es nur eine Stelle gibt, an der Typen umgewandelt werden. Dabei habe ich auch noch die Sachen in items.py im Blick. Dort gibt es diverse _cast_xyz() Funktionen.

Abgesehen davon, wuerde ich auch gerne eine Basis-Klasse fuer Plugins haben, die z.B. auch solche Sachen wrappen koennte. Der eigentliche Grund dafuer ist, dass Plugins ziemlich flexibel sind und nicht standardisiert. Es gibt eine zentrale Stelle, mit der man z.B. den Start-Prozess fuer ein Plugin implementiert oder den Stopp-Prozess. Teilweise werden auch Scheduler registriert, die z.B. bei mehrfacher Verwendung eines Plugins Probleme machen, da der Name dann nicht mehr unique ist (oder das Plugin behandelt das explizit - waere aber was, was vereinheitlicht werden sollte; siehe z.B. auch PR #81, wo das schon z.B. fuer das SML-Plugin implementiert ist).

@ohinckel
Copy link
Member

Noch was zu:

Wenn dann jemand in der conf einen nichtnumerischen Wert einträgt, schmeisst das plugin gleich eine exception.

Ich faende es gut, wenn das einen Fehler produziert, da man nur so erkennen kann, dass die Konfiguration falsch ist. Wenn ein numerischer Wert konfigurierbar ist, sollte das auch ein numerischer Wert sein (oder etwas, was zu einem numerischen Wert konvertiert werden kann).

@msinn
Copy link
Member Author

msinn commented Apr 22, 2016

Ich habe auch nicht gefordert keinen Fehler zu produzieren. Ein sauberer Log Eintrag ist hier der richtige Weg. Eine Exception zu schmeissen halte ich jedoch für verheerend.

@msinn
Copy link
Member Author

msinn commented Apr 23, 2016

Was ist denn nun? Ich habe keine Idee was ich tun soll.

Es gibt keine Richtlinien um Parameter Validierung in Plugins zu machen nach der ich das Plugin umstellen kann.

Andererseits hängt der Bugfix wegen der von mir gewählten Art der Validierung nun seit 4 Tagen und scheint vor sich hin zu gammeln. Er wird weder gemerged noch geclosed.

@psilo909
Copy link
Contributor

ich hätte auch gerne eine lsg... würde ggf auf die string2bool umsteigen. in den configparametern sollte imho dann aber nur True und False erlaubt sein.

@psilo909
Copy link
Contributor

ps: ich könnte auf merge drücken, hätte aber gerne eine von allen akzeptierte lsg...

@msinn
Copy link
Member Author

msinn commented Apr 23, 2016

Ich baue es um, nachdem wir eine allgemeine Lösung haben.

Ich finde es im Moment nur etwas irritierend, dass ein Parameter Handling, dass auch in anderen Plugins aktuell genutzt wird, und dass ich im Visu Plugin für andere Parameter bereits vor diesem PR genutzt habe, nun verhindert, dass ein Bugfix eingespielt wird.

Wir sollten die Grundsatz Diskussion (und Lösung) ein wenig vom "Tagesgeschäft" trennen, sonnst kann bald kein PR mehr umgesetzt werden.

@psilo909
Copy link
Contributor

muss gestehen ich habe den pr bisher weil ich selber am coden war nicht angesehen. bin aber auch nicht alleine hier ;-) schaus morgen frueh gleich an. bin aktuell leider nur am mobilgeraet online. keine boese absicht oder so. schlicht zeitmangel

@cstrassburg cstrassburg merged commit 169da0c into smarthomeNG:develop Apr 23, 2016
@cstrassburg
Copy link
Member

War keine Absicht mit dem PR, dachte der ist schon merged.

@msinn
Copy link
Member Author

msinn commented Apr 23, 2016

Danke! :-)

Der nächste PR (Weiterentwicklung) kommt morgen.

cstrassburg added a commit that referenced this pull request Dec 10, 2016
visu Plugin: Fixed 'False' bug discovered by psilo
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants