Ich habe seit 1 Woche eine Vitocal 250-A in Betrieb. Ich versuche mit PyViCare Version 2.34.1 Daten zu bekommen. Ich habe client ID, email und passwort eingetragen, bekomme aber folgende Fehlermeldung :
circuit = t.gateway[0] #select heating circuit
^^^^^^^^^
AttributeError: 'Gateway' object has no attribute 'gateway'
Kann mir jemand weiterhelfen, bzw. weiß warum dieser Fehler auftritt?
Danke!
Gelöst! Gehe zu Lösung.
Moin, ich denke das Beispiel ist (noch) falsch.
Viessmann hat vor ca einem Jahr die Reihenfolge der Devices auf der API geändert.
device = vicare.devices[0]
device(0) greift hier auf das Gateway zu, und das hat keine Circuits. Versuch es mal mit device 1
Wo hast du denn diesen Parameter gefunden? Der jeweilige Heizkreislauf würde doch mit:
circuit = t.circuits[0] -> sind bei mir die Heizkörper oder
circuit = t.circuits[1] -> ist bei mir die Fußbodenheizung
definiert.
Versuch doch mal das "Basic Usage" Beispiel auf der Seite PyViCare
Habe ich versucht, mit dem Beispiel source code auf der GitHub Seite :
-------------------------------------------------------------------
import sys
import logging
from PyViCare.PyViCare import PyViCare
client_id = "INSERT CLIENT ID"
email = "email@domain"
password = "password"
vicare = PyViCare()
vicare.initWithCredentials(email, password, client_id, "token.save")
device = vicare.devices[0]
print(device.getModel())
print("Online" if device.isOnline() else "Offline")
t = device.asAutoDetectDevice()
print(t.getDomesticHotWaterConfiguredTemperature())
print(t.getDomesticHotWaterStorageTemperature())
print(t.getOutsideTemperature())
print(t.getRoomTemperature())
print(t.getBoilerTemperature())
print(t.setDomesticHotWaterTemperature(59))
circuit = t.circuits[0] #select heating circuit
print(circuit.getSupplyTemperature())
print(circuit.getHeatingCurveShift())
print(circuit.getHeatingCurveSlope())
print(circuit.getActiveProgram())
print(circuit.getPrograms())
print(circuit.getCurrentDesiredTemperature())
print(circuit.getDesiredTemperatureForProgram("comfort"))
print(circuit.getActiveMode())
print(circuit.getDesiredTemperatureForProgram("comfort"))
print(circuit.setProgramTemperature("comfort",21))
print(circuit.activateProgram("comfort"))
print(circuit.deactivateComfort())
burner = t.burners[0] #select burner
print(burner.getActive())
compressor = t.compressors[0] #select compressor
print(compressor.getActive())
------------------------------------------------------------------------------
hier der komplette output :
E3_TCU10_x07
Online
Traceback (most recent call last):
File "H:\Progs\Programming Tools\Python3.12\pyvicare_basic.py", line 16, in <module>
print(t.getDomesticHotWaterConfiguredTemperature())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'Gateway' object has no attribute 'getDomesticHotWaterConfiguredTemperature'
Hier habe ich nichts auskommentiert oder geändert, ausser meine login Daten. Ich bekomme als Kommunikationmodul E3_TCU10_x07 und die Meldung "Online". Also bekomme ich eine Antwort, doch dann gibt es die Fehlermeldung. Ich habe keine Ahnung wo das Objekt "Gateway" herkommt.
Das ist doch schonmal gut. Deine Anlage antwortet auf:
print(device.getModel()) print("Online" if device.isOnline() else "Offline")
Die Kommunikation funktioniert also grundsätzlich. Die "Gültigkeit" der PyViCare Befehle ist natürlich stark von der jeweiligen Heizungsanlage abhängig. Wenn du eine Fehlermeldung bekommst kennt Deine Anlage diesen Wert nicht. Kommentiert den Befehl mit '#' aus und starte das Programm neu und wiederhole das Ganze bis du keine Fehlermeldungen bekommst oder kein Befehl mehr übrig bleibt. Mit Postman bin ich nicht warm geworden, darum habe ich jeden einzelnen t.get* oder circuit.get* Befehl ausprobiert und alle Nieten auskommentiert, ebenso mit den set Befehlen.
Moin, ich denke das Beispiel ist (noch) falsch.
Viessmann hat vor ca einem Jahr die Reihenfolge der Devices auf der API geändert.
device = vicare.devices[0]
device(0) greift hier auf das Gateway zu, und das hat keine Circuits. Versuch es mal mit device 1
Einafch mal:
device = vicare.devices[0]
t = device.asAutoDetectDevice()
print(t)
device = vicare.devices[1]
t = device.asAutoDetectDevice()
print(t)
einfügen, den Rest auskommentieren und schauen was ausgegeben wird.