LarsMichelsen / pmatic

Python API for Homematic. Easy to use.

Home Page:https://larsmichelsen.github.io/pmatic/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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

jschmer opened this issue · comments

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'

commented

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.

Funktioniert fast, nötige fixes findest du hier: 55e7e37
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

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%.

commented

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

commented

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

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