Modul für Buderus Wärmepumpe WPS

Begonnen von mike3436, 15 Januar 2016, 22:57:21

Vorheriges Thema - Nächstes Thema

mike3436

Im ersten Beitrag sind mehrere Code-Versionen angehängt, und die letzte Version findet man im SVN (https://svn.fhem.de/fhem/trunk/fhem/FHEM/26_KM273.pm).
Ob das Modul weiterhilft ist eher fraglich, da es speziell für eine bestimmte Baureihe (bis ca. 2014) der Buderus/Junkers WP funktioniert, die komplett nur mit CAN arbeitet. Bei dieser WP können alle ca. 2500 Parameter als Liste mit ASCII Bezeichner aus der Steuerungseinheit ausgelesen werden, was schon für die Interpretation der einzelnen CAN-Objekte ziemlich von Vorteil war. Wenn nur die CAN-Anbindung interessant ist, dann reicht meiner Meinung nach die USBTin Dokumentation auf der Seite von Thomas Fischl.
KNX Hausautomatisierung, RPi mit FHEM, Jeelink + LaCrosse, HM_LAN + KeyMatic, Somfy IO Rollladen mit Tahoma und KLF200, Buderus WPS mit USBTin und KM200

hbrockmann

Zitat von: mike3436 am 11 Januar 2018, 23:42:02
Mit der nachfolgenden Formel lässt sich der CAN-Wert in eine Temperatur umrechnen:
f( x ) = 105.81916402086969 - 0.28577699398241035 x + 0.00035619134104995136 x^2 - 2.0925659550495e-7x^3
bei der anwendung der formel zur umrechnung der temperaturen habe ich irgendwie einen blackout..

könnte da evtl. noch mal jemand genauer drauf eingehen?

wir haben bisher z.b. diese ausgelesenen daten von junkers ste/m geräten für warscheinlich die vorlauftemp und die aussentemp:
VL (2023-01-02 11:09:47.650287) can0 RX - - 08000270 [2] 01 F5     >dec  501      >Display: 26,0°C
AT (2023-01-02 11:10:48.614992) can0 RX - - 08004270 [2] 02 90     >dec  656      >Display: 12,0°C


danke, gruß
hardy

mike3436

#182
Die Formel scheint mir recht simpel - die langen Nachkommastellen sind aber etwas übertrieben und kommen aus einer online Polynomberechnung.
x ist der CAN-Wert:
01 F5  = 0x01F5 = 501 -> 25,7°C
02 90  = 0x0290 = 656 -> 12,5°C
In Excel bzw. LibreOffice sieht das so aus:
KNX Hausautomatisierung, RPi mit FHEM, Jeelink + LaCrosse, HM_LAN + KeyMatic, Somfy IO Rollladen mit Tahoma und KLF200, Buderus WPS mit USBTin und KM200

hbrockmann

danke, das hat mir schon weiter geholfen..

mike3436

Gegebenenfalls noch interessant:
eine genauere Linearisierung als das Polynom 3. Ordnung (+-0.3°C) ergibt sich mit dem Polynom 5.Ordnung (+-0.1°C)
Die Funktion läst sich mittels 'Trendlinie' oder RGP Funktion in Excel bzw. OpenOffice Calc ermitteln.

f(x) = − 5,63141E-13 x⁵ + 1,53737E-09 x⁴ − 1,7745E-06 x³ + 0,00108586 x² − 0,4378966 x + 116,88035

Basierend auf folgenden Werten:
827   -5
783   0
734   5
681   10
625   15
569   20
512   25
456   30
405   35
356   40
313   45
271   50
236   55
205   60
178   65
150   70
130   75

Die Tabelle wurde ermittelt aus den verschiedenen Sensortemperaturen:
08000270  GT1_TEMP
08004270  GT2_TEMP
08008270  GT3_TEMP
08010270  GT6_TEMP
08014270  GT8_TEMP
08018270  GT9_TEMP
0801C270  GT10_TEMP
08020270  GT11_TEMP

Die hohen Temperaturen um 70° kommen nicht so oft vor, so dass die emittelten Werte für die Tabelle hier eher leicht daneben liegen können.
KNX Hausautomatisierung, RPi mit FHEM, Jeelink + LaCrosse, HM_LAN + KeyMatic, Somfy IO Rollladen mit Tahoma und KLF200, Buderus WPS mit USBTin und KM200

hbrockmann

#185
thx.. wollte grade mal die neue formel testen..


edit:
erst klappte es nicht, jetzt ja..
ich hatte für das minus irgendwie ein zeichen drin, was wie ein minus aussah, aber scheinbar keins war..
Zitatconst f4 = buffer.readUInt16BE(0);
value = (-5.63141E-13 * f4 * f4 * f4 * f4 * f4) + (1.53737E-09 * f4 * f4 * f4 * f4) - (1.7745E-06 * f4 * f4 * f4) + (0.00108586 * f4 * f4) - (0.4378966 * f4) + 116.88035;
value = Math.round(value * 10 ) / 10;
hiermit klappt es jetzt im iobroker problemlos..


ach ja, die einmalige abfrage der kompletten register aus der anlage, geht das nur über dein modul im fhem oder kann man das auch vom raspi auf der kommandozeile ohne fhem ausführen?

mike3436

Zitatach ja, die einmalige abfrage der kompletten register aus der anlage, geht das nur über dein modul im fhem oder kann man das auch vom raspi auf der kommandozeile ohne fhem ausführen?
Die Abfrage auf der Kommandozeile geht nur zum Testen wie unter https://www.mikrocontroller.net/topic/380549 dokumentiert.
Ohne weitreichende Programmierkenntnisse ist das Lesen und Auswerten aber recht kompliziert, da es sich um eine Binärstruktur handelt.

Ich würde eher dazu raten FHEM zu installieren und die CAN-Kommunikation im KM273 Modul anzupassen.
Allein um die dann erst automatisch laufenden Abfrageprozesse in dein Projekt übernehmen zu können.
Ich kann die meine Liste (WPS 2013) auch zumailen
KNX Hausautomatisierung, RPi mit FHEM, Jeelink + LaCrosse, HM_LAN + KeyMatic, Somfy IO Rollladen mit Tahoma und KLF200, Buderus WPS mit USBTin und KM200

hbrockmann

habe fhem jetzt mal installiert (iobroker dann beendet)
den mykm273 installiert, aber der bleibt leider im status "disconnected"

ein ttyacm0 habe ich bei mir scheinbar nicht?
/dev/ttyACM0@115200

habe es dann mal testweise mit dem bei mir vorhandenen
/dev/ttyAMA0@115200
probiert, aber auch weiterhin disconnected

verbaut ist ein
https://www.reichelt.de/raspberry-pi-zero-shield-rs485-can-hat-mcp2515-rpiz-shd-rs485-p242794.html?PROVID=2788&gclid=EAIaIQobChMI_rb4yNPC_AIVltF3Ch0AyQwVEAQYASABEgI4ovD_BwE

mike3436

Die Software im modul 26_KM273.pm basiert auf dem USBTin modul.
Ich habe mir die CAN-HAT dokumentation mal angeschaut, werde aber nicht ganz schlau aus den Beispielen in c oder pyton.
Man kann die Hardware wohl über RS485 ansprechen, was der Anbindung des USBTin entspräche - hier sehe ich aber keine Beispiele mit CANId, DLC und Daten.
Vielleich sickst du mir mal, wie du aktuell das Interface über die Commandline ansprichst
KNX Hausautomatisierung, RPi mit FHEM, Jeelink + LaCrosse, HM_LAN + KeyMatic, Somfy IO Rollladen mit Tahoma und KLF200, Buderus WPS mit USBTin und KM200

emblitz

#189
Hallo mike3436:

ich habe nun auch deine neueste Formel (5.Ordnung) im IOBroker ausprobiert und wollte mich für diese tolle Leistung bedanken und eine kurze Rückmeldung geben.
Die Formel rechnet nun bis auf -0,1° an den Displawert der Junkers STM 60-1 WP. Geht da noch mehr? :-)
Die Formel der 3.Ordnung war bereits -0,2°C genau.

Top.
Vielen Dank!

LG emblitz

hbrockmann

#190
Zitat von: mike3436 am 12 Januar 2023, 20:20:13
Die Software im modul 26_KM273.pm basiert auf dem USBTin modul.
Ich habe mir die CAN-HAT dokumentation mal angeschaut, werde aber nicht ganz schlau aus den Beispielen in c oder pyton.
Man kann die Hardware wohl über RS485 ansprechen, was der Anbindung des USBTin entspräche - hier sehe ich aber keine Beispiele mit CANId, DLC und Daten.
Vielleich sickst du mir mal, wie du aktuell das Interface über die Commandline ansprichst
wenn die can-utils installiert sind
sudo apt install can-utils
über die commandline mit folgendem befehl abfragen:
candump -tz can0

da kommt dann folgende ausgabe:
pi@raspi2b:~ $ candump -tz can0
(000.000000)  can0  08150401   [2]  00 00
(000.033646)  can0  00050200   [1]  00
(000.226940)  can0  08018180   [1]  01
(000.424514)  can0  08018200   [2]  01 FA
(000.459587)  can0  01FFC401   [7]  17 01 0C 04 16 0F 02
(000.655451)  can0  00054200   [1]  00
(001.082367)  can0  000F0401   [1]  00
(001.102598)  can0  08114401   [2]  00 00
(001.225713)  can0  09FFC180   [2]  00 83
(001.278205)  can0  00048200   [1]  00
(001.425814)  can0  0801C200   [2]  02 21
(001.703718)  can0  00078401   [1]  01
(001.900778)  can0  00044200   [1]  00
(002.202072)  can0  08174401   [2]  01 E0
(002.224493)  can0  08018180   [1]  01
(002.326883)  can0  00080401   [2]  00 EB
(002.422122)  can0  08020200   [2]  02 20
(002.524039)  can0  0003C200   [1]  00
(002.948949)  can0  00084401   [1]  00
(003.146288)  can0  00038200   [1]  00
(003.223265)  can0  09FFC180   [2]  00 83
(003.306600)  can0  08148401   [2]  00 00
(003.423884)  can0  08058200   [1]  01
(003.571914)  can0  0008C401   [1]  00
...

mike3436

Ich weis nicht, ob ich eine gleichartige CAN Anbindung mit dem USBtin hinbekomme, so dass ich die Implementierung ins FHEM modul hinzufügen kann.
Ich habe mir vorsichtshalber mal das Raspberry Pi Zero Shield bei Reichelt bestellt.
Wenn ich was neues habe, melde ich mich.
KNX Hausautomatisierung, RPi mit FHEM, Jeelink + LaCrosse, HM_LAN + KeyMatic, Somfy IO Rollladen mit Tahoma und KLF200, Buderus WPS mit USBTin und KM200

mike3436

ZitatDie Formel rechnet nun bis auf -0,1° an den Displawert der Junkers STM 60-1 WP. Geht da noch mehr? :-)
Die Formel der 3.Ordnung war bereits -0,2°C genau.
Was soll da mehr gehen - die Auflösung der Digitalwerte gibt ja nicht mehr her als ca. 0.1°C.
Und wenn man die Werte GT1..GT11 haben will, kann man sie ja direkt linearisiert abfragen, wenn man die CAN-Register kennt.
Die CAN-Register basieren aber auf einer Tabelle, die abhängig von der Softwareversion der WPS leicht variiert.
Bei mir ist z.B. GT3_TEMP: Senden read Id=04AA7FE0, Antwort von Id 0CAA7FE0 ist len=2 data="01 9B" = 411 = 41.1°C
KNX Hausautomatisierung, RPi mit FHEM, Jeelink + LaCrosse, HM_LAN + KeyMatic, Somfy IO Rollladen mit Tahoma und KLF200, Buderus WPS mit USBTin und KM200

mike3436

#193
Eine neue Version 0018 habe ich online gestellt. Hiermit kann jetzt eine TCP/IP Verbindung zum socketcand Service aufgebaut werden um mit einer Buderus Heizung zu kommunizieren. Ein direktes Einbinden des linux-can Interfaces ohne diesen Umweg war mir nicht ohne größeren Aufwand möglich, da perl die Kommunikation nicht direkt Unterstützt, und ich so ein c-Modul hätte schreiben müssen. Ich hatte mir die Elster-Kommunikation unter https://forum.fhem.de/index.php/topic,42248.0.html schon angesehen, aber diese ist nach meinen Recherchen zu hardwarenah für die Aufgabe programmiert, um das Modul für die Buderus/Junker Anbindung zu benutzen. Das socketcand Modul ist aber gut für die Aufgabe verwendbar, da die TCP/IP Schnittstelle recht gut dokumentiert ist.

Die Definition der Schnittstelle erfolgt dann über IPAdresse+Port des Raspi's auf dem das socketcand Modul installiert und aktiviert ist
#define myKM273 KM273 192.168.178.74:29536

Aktuelle Einschränkungen:
- Baudrate muss vorher auf 125kBit gesetzt werden
- nur can0 kann verwendet werden
- 127.0.0.1 als IP funktioniert nicht

Installation socketcand:

# autoconf is needed to build socketcand
sudo apt-get install -y autoconf
# clone & build sources
git clone https://github.com/linux-can/socketcand.git
cd socketcand
./autogen.sh
./configure
make
make install



Manuelle Aktivierung:
In /etc/socketcand.conf muss can0 als interface eingetragen/hinzugefügt werden
Erst Bitrate setzen und aktivieren, dann socketcand Interface starten

sudo ip link set can0 type can bitrate 125000 restart-ms 100
sudo ip link set up can0
sudo socketcand -v -i can0


Test von beliebigem Rechner (auch aus 2. Shell auf gleichem Rechner, wenn socketcand manuell gestartet wurde):
Windows:
telnet 192.168.178.74 29536
meldet < hi > aber bricht bei Eingabe ab

bei Linux funktioniert das besser und man kann die Kommandos < open can0 > und < rawmode > absetzen, wonach Daten kommen sollten:
nc 192.168.178.74 29536
< hi >< open can0 >
< ok >< rawmode >
< ok >< frame 0C73BFE0 1674761579.628256 5427 >< frame 0C743FE0 1674761579.643284 4030 >


siehe auch:
https://github.com/linux-can/socketcand
https://media.readthedocs.org/pdf/python-can/develop/python-can.pdf

In der python-can Dokumentation wird auch die Installation des socketcand beschrieben
KNX Hausautomatisierung, RPi mit FHEM, Jeelink + LaCrosse, HM_LAN + KeyMatic, Somfy IO Rollladen mit Tahoma und KLF200, Buderus WPS mit USBTin und KM200

hbrockmann

#194
danke, hab jetzt doch noch früher eine ersatz sd-card gefunden..
fhem neu rauf, socketcand, konfiguriert..

defmod myKM273 KM273 192.168.0.101:29536
#   DEF        192.168.0.101:29536
#   DeviceName 192.168.0.101:29536
#   DeviceType TCP
#   FD         12
#   FUUID      63deb7cb-f33f-9d4c-8393-28d608651a23a9c3
#   NAME       myKM273
#   NOTIFYDEV  global
#   NR         44
#   NTFY_ORDER 50-myKM273
#   PARTIAL   
#   STATE      opened
#   TYPE       KM273
#   VERSION    0018
#   eventCount 38163
#   READINGS:
#     2023-02-04 21:00:42   state           opened
#
setstate myKM273 opened
setstate myKM273 2023-02-04 21:00:42 state opened


wenn ich das modul km273 einbinde, schwankt die statusanzeige extrem schnell zwischen "opened" und "disconnected", soll das so sein?

2023-02-04 21:03:53 KM273 myKM273 DISCONNECTED
2023-02-04 21:03:53 KM273 myKM273 CONNECTED
2023-02-04 21:03:53 KM273 myKM273 DISCONNECTED
2023-02-04 21:03:53 KM273 myKM273 CONNECTED
2023-02-04 21:03:53 KM273 myKM273 DISCONNECTED
2023-02-04 21:03:53 KM273 myKM273 CONNECTED
2023-02-04 21:03:53 KM273 myKM273 DISCONNECTED
2023-02-04 21:03:53 KM273 myKM273 CONNECTED

da kommen hunderte einträge in kürzester zeit..



bei Linux funktioniert das besser und man kann die Kommandos < open can0 > und < rawmode > absetzen, wonach Daten kommen sollten:
nc 192.168.0.101 29536
< hi >< open can0 >
< ok >< rawmode >
< ok >< frame 0C73BFE0 1674761579.628256 5427 >< frame 0C743FE0 1674761579.643284 4030 >


bis zum hi kommt er noch, nach eingabe "< open can0 >" kommt nur noch (also kein ok danach)
< hi >< open can0 >
< error could not open bus >