Hier meine XML’s XMLS.zip (2.14 KB)
Für 20A5, 20AB, 2048
Es handelt sich dabei nur um die Daten die auch wirklich funktionieren und Werte liefern!
Ach ja wenn Werte ins Negative rutschen gibt es ein Problem mit der Version von Coyote. Hier mal ne Lösung für das Außentemperaturproblem:
ich nutze auch das Script von Coyote. Vielen dank für die Mühe.
Ich lese momentan eine Vitotronic 200 KW2 damit aus ( ID 2098 ) und erstelle mir momentan die XML Datei dazu.
Jetzt meine Frage, wie lasst ihr die Abfragen über den Seriellen Port laufen. Ich habe gemerkt wenn ich alle Kommandos in einem Script durchlaufen lasse kommt recht schnell das PHP timeout.
Im moment Kaskadiere ich die Abfragen eine nach der anderen durch, heißt ich deaktiviere das eigene Ereignis und aktiviere das nächste. Ist recht mühsam aber scheint soweit zu funktionieren.
Und da kommt auch gleich meine nächste Frage zu dem Thema.
Ich habe mir nu mal eine weile lang die werte aufgezeichnet und mit Highcharts ausgeplottet, und ich habe gemerkt das es sehr oft zu Fehlwerten kommt.
zb. die Speichertemperatur springt ab und zu mal auf 128 Grad oder eine Sammelstörung kommt mal sporadisch.
Hallo
bei mir lag es daran, dass nur ein Teil übertragen wird, aber das Script dann aus dem halben Teil + dem Antwort Byte einen falschen Wert ermittelt. Ich habe die Abfrage dahin gehend geändert, dass die Werte vor Auswertung im Script geprüft wird, ob ein Antwortbyte von der Heizungsanlage mit dabei ist. Wenn das der Fall ist wird die Anfrage verworfen. Ich hänge morgen früh mal die PHP bei!
Ähnliche Probleme hatte ich auch.
Habe meine Scripts vom Postnochmal erweitert.
Nun wird auch das Timeout richtig ausgewertet. Damit geht die Abfrage im Gut-Fall schneller. Bei mir ist ca. innerhalb von 3 Sekunden die Antwort da. Ich frage 7 Werte ab, das dauert ca. 20 Sekunden und liegt innerhalb des PHP-Timeouts.
Ebenso kann man nun statt der VariablenID auch 0 übergeben, damit wird der Wert in der Funktion zurückgegeben und man kann eine Fehlerbehandlung machen (siehe Viessmann_Send.ips.php). Die Funktion von Bastian für negative Temperaturen hab ich mit eingebaut, auch wenn ich das momentan nicht brauche.
Ebenso gibt es nun einen Fehlerzähler, der bei jedem erkannten Fehler hochgezählt wird. Den kann man auswerten. Ich habe ungefähr 10 Fehler pro Tag, was bei 3360 Abfragen pro Tag ok ist.
Nun mal eine ganz doofe Frage … ich schäm mich schon fast dafür.
Kann mir jemand Quick & Dirty erklären wie aus einer F3 01 49,9 °C werden ? Hab den ganzen Nachmittag gegoogelt wie ein Irrer … ich komm einfach nicht drauf. Ich hab mir Hex to Decimal Converter angeschaut … wenn ich den Hex Wert F3 01 eingebe dann kommt da in Dezimal 62209 raus. Ich kapiers einfach net auch das Script leuchtet mir noch net ganz ein.
ich habe auch lange wie ein Irrer an den HexWerten gewerkelt, daher auch mein Script für negative Werte. Mit 2 Bytes (2x 8 Bit = 16 Bit) ist es eigentlich schlecht negative Werte darzustellen, daher schickt die Viessmann Therme also den größten Wert raus. Ein Wort = 16 Bits / man kann auch sagen Integer 65535 (2x256).
P.S. Allerdings funktioniert diese Funktion nur bis -25,5°C, da ich das highByte mit FF Abfrage, wird es kälter sinkt dieser HighByte auf FE, das ist dann die Temperatur von -25,6°C bis -51°C usw.
Evtl müsste die If Abfrage so lauten:
if ($highByte >= 245)
Damit wäre diese Funktion immer erfüllt selbst bei 0 Kelvin Dann würde die Antwort der Heizung so aussehen (haben dann eher Supraleiter) F5 54 => (65536 - ((245*265)+84))/10 *-1 = 273,1°C oder 0° Kelvin
ich versuche momentan das Script für das KW Protokoll umzuschreiben, bin aber auf ein Problem mit den Integerwerten gestoßen.
Ich bekomme die Hex Antwort der Heizung : 33 D5 01 00
Der Integerwert sollte 120115 sein.
hat jemand ne Ahnung wie genau das zum Umrechnen ist ? Kleine Kniffelaufgabe xD … ich bin schon gescheitert, habe auch nicht aus dem Script rauslesen können wie genau die Mathematische Formel dafür ist.
Hallo zusammen,
die Integer und Hexzahlen sind doch komplett identisch.
120115dez entspricht 01D533 in hex
und 060BD2B3 ist 101437200 Sekunden und damit 28177,26 Stunden.
Ich versteh jetzt das Problem nicht?