Closed jschmer closed 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.
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
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%.
Okay, also muss percentage wohl noch etwas intelligenter werden. Gucke ich mir an und deine Windows-Patches auch.
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!
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'