LarsMichelsen / pmatic

Python API for Homematic. Easy to use.
https://larsmichelsen.github.io/pmatic/
GNU General Public License v2.0
34 stars 23 forks source link

Parameter-Parsing klappt nicht für Paramter mit Einheit % und Typ float #6

Closed jschmer closed 8 years ago

jschmer commented 8 years ago

Das Gerät HM-TC-IT-WM-W-EU macht wieder Probleme:

Es hat einen Parameter 'HUMIDITY' in Kanal 1 mit folgender spec: Parameter HUMIDITY Typ: integer Zugriffsart: o lesend o über Ereignisse Minimaler Wert: 0 Maximaler Wert: 99 Einheit: %

aber auch diesen Parameter in Kanal 2: Parameter ACTUAL_HUMIDITY Typ: float Zugriffsart: o lesend o über Ereignisse Minimaler Wert: 0.0 Maximaler Wert: 99.0 Einheit: %

Aktuell wird für Parameter mit EInheit '%' immer die Klasse 'ParameterPERCENTAGE' ausgewählt. Bei der Umwandlung der Values via _transform_attributes tritt dann folgender ValueError auf:

Traceback (most recent call last): File "C:\Program Files (x86)\JetBrains\PyCharm Community Edition 5.0.3\helpers\pydev\pydevd.py", line 2407, in globals = debugger.run(setup['file'], None, None, is_module) File "C:\Program Files (x86)\JetBrains\PyCharm Community Edition 5.0.3\helpers\pydev\pydevd.py", line 1798, in run launch(file, globals, locals) # execute the script File "C:/Projects/Py/pmatic/playground.py", line 48, in print(" ", channel.name, channel.address, channel.summary_state) File "C:/Projects/Py/pmatic\pmatic\entities.py", line 350, in summary_state for title, value in sorted([ (v.name, v) for v in self.values.values() if v.readable ]): File "C:/Projects/Py/pmatic\pmatic\entities.py", line 213, in values self._init_value_specs() File "C:/Projects/Py/pmatic\pmatic\entities.py", line 243, in _init_value_specs self._values[param_id] = cls(self, param_spec) File "C:/Projects/Py/pmatic\pmatic\params.py", line 60, in init self._init_attributes(spec) File "C:/Projects/Py/pmatic\pmatic\params.py", line 78, in _init_attributes val = trans_func(val) File "C:/Projects/Py/pmatic\pmatic\params.py", line 398, in MIN = lambda v: int(v)+1, ValueError: invalid literal for int() with base 10: '0.000000'

LarsMichelsen commented 8 years ago

Hey cool, funktioniert pmatic unter Windows etwa vernünftig?

Ich hatte ParameterPERCENTAGE() erst vor Kurzem für alle Parameter eingeführt, die % als Unit haben. Das habe ich gemacht, damit man einfach die 0-99% in 1-100% umwandeln kann

Die aktuelle ParameterPERCENTAGE() basiert auf ParameterINTEGER und kann daher nicht mit floats umgehen. Man muss wohl doch zwischen type=float + unit=% und type=int + unit=% unterscheiden.

jschmer commented 8 years ago

Funktioniert fast, nötige fixes findest du hier: 55e7e379e9df0852220d40b18aa82674830634f2 Sind allerdings nur schnell reingehackt damits schnell läuft, deswegen noch kein Pull Request :) Eine Auflistung der Geräte und dessen Channels bzw. summary_states läuft damit ohne Probleme durch.

Der Manager funktioniert allerdings nicht, da ein paar python module nur unter unix verfügbar sind. Beispielsweise fehlt folgendes modul: pmatic\manager.py:56: in from grp import getgrnam E ImportError: No module named grp

jschmer commented 8 years ago

Noch eine Anmerkung zu ParameterPERCENTAGE: Es gibt auch einen Parameter mit min=0 und max=100 bei dem Gerät HM-Sen-Wa-Od: Parameter FILLING_LEVEL Typ: integer Zugriffsart: o lesend o über Ereignisse Minimaler Wert: 0 Maximaler Wert: 100 Einheit: %

Mit der +1 Anpassung bei den Min/Max Werten haben wir dann einen Bereich von 1-101%.

LarsMichelsen commented 8 years ago

Okay, also muss percentage wohl noch etwas intelligenter werden. Gucke ich mir an und deine Windows-Patches auch.

LarsMichelsen commented 8 years ago

Sieht so aus, als ob es das mit dem Percentage einfach nicht wert bzw. ein echter Denkfehler war. Habs gerade rückgängig gemacht.

jschmer commented 8 years ago

Denke auch dass es so besser sein wird. Danke für die schnelle Umsetzung und den Windows patches!