Hallo Jens Ja stimmt, habe auch nochmals nachgeschaut, der LON Bus verbindet die diversen Steuermodule, welchen ich jedoch (noch) nicht abfragen will. Das mit dem An- und Abmelden habe ich auch so in meiner Erinnerung. Jedoch brauch ich es dann eventuell später noch, da ich die benötigten Werte momentan nur auf der Tastatur der Heizung abfragen kann. Das von uns gemeinte Steuergerät ist an den Appl-Klemmen angeschlossen, ein Pin scheint nur Masse zu haben und der Andere eben die Spannung mit kurzen Signalunterbrüchen für die Daten. Habe jetzt mal meine Elektronik lauffähig mit der Heizung und dem PC Verbunden und versuche jetzt mal mit einem kleinen C-Programm die Daten rauszurechnen... Habe erst mal eine Schleife programmiert, die den Status vom Paralellport 1 Million mal abfragt, geht aber schnell vorbei mit C... Mit Visual Basic liest mein 1.2GHz AMD Laptop gerade mal 193000 Werte in 10s, der uralte 700er P3 mit Mandriva-Linux macht die Million abfragen (aber eben in C) in ca. 4 Sekunden. So was bekomm ich momentan Angezeigt (Ausschnitt): 000101111111111111111111111111111111111 000000000000000000000000000000000000000000000000000000000000000000000 111111111111111111111111111111111111111111111111111111111111111111111 111111111111111111111111111111111111111111111111111111111111111111111 1110000000000000000000000000000000000 49309 Einer von insgesamt 1000000 Werten in 4 Sekunden Die einzelne 0 in dem Beispiel nehme ich an ist nicht zu berüchsichtigen, wird gerade in der Umschaltphase nicht sauber gelesen haben. Jetzt mal versuchen die Daten zu komprimieren und in Brauchbare Bits und Bytes umzuwandeln und dann hoffe ich etwas Brauchbares rauszukriegen... Also bis bald, melde dann wenn ich weitergekommen bin Gruss Marcel
|
Hallo zusammen, leider kann ich zu Eurer Diskussion nichts beitragen - wollte nur kurz bei Euch was zwischenfragen... Ich habe eine Fernbedienung von Viessmann FB 5210 zur Steuerung meiner Heizungsanlage und suche hierfür einen (zweiten) Wandsockel, da ich nicht immer in den Keller möchte, um Parameter zu ändern. 1. Meint ihr, dass es die gleiche Fernbedienung ist, wie die, von der ihr redet (Windhager). Vielleicht lässt´s Viessmann im Auftrag herstellen. 2. Weiß jemand, wo ich so einen Wandsockel herbekommen könnte? Danke und Gruß, Bernhard
|
Inzwischen bin ich sogar soweit, dass ich die Heizung fernsteuern kann. War ein ziemliches Stück Arbeit... In meinem Fall habe ich zwei Heizkreise und habe deshalb einen externen UART-Adapter mit zwei Kanälen für das serielle Protokoll verwendet (UM-FT2232H von www.elv.de). Den UART-Adapter habe ich via USB-Port an einen Raspi angeschlossen. Wenn nur einen Kanal benötigt wird, ginge das bestimmt auch direkt über den seriellen Port direkt auf dem Raspi. Die Daten logge ich in eine Influx-Datenbank auf dem Raspi und stelle sie via eine Grafana-Dashboard grafisch dar. Die Steuerung habe ich in Java (eigentlich in Kotlin) implementiert. Ich veröffentliche wohl "demnächst" allen Source-Code auf Github. Hier aber schon mal die wichtigsten Infos: RS-232 Netzwerkprotokoll: commPort.setSerialPortParams(4800, DATABITS_8, STOPBITS_1, PARITY_NONE)Achtung, noch was Wichtiges zur Elektronik: Da der FB5210-Datenbus mit etwa 10.8V arbeitet, der Raspi (und auch der FT2232H) aber nur max. 3.3V verträgt, muss man mit einem Spannungsteiler erst noch die Spannung runterteilen. CRC8-Parameter: Polynom: 0xD5, Init-Wert: 0x0, Input-Reflection: ja, Output-Reflection: ja, XOR-Out: 0x0Jedes Ticket auf der Busleitung fängt mit 0x10 0x02 an und endet mit 0x10 0x03. Das letzte Byte for dem Ende (0x10 0x03) enthält die Checksumme. Diese umfasst alles nach der Startsequenz (0x10 0x02) bis vor die Checksumme. Enthält der Datenstrom selber ein 0x10-Byte, so wird dieses Escaped indem es zweimal hintereinander gesendet wird (0x10 0x10). Zahlenwerte ( Temperaturen) im Datenstrom werden meist als 2-Byte-Werte mal 100 dargestellt. Beispielsweise 0x06C2 = 1730 / 100 = 17.3 (°C) Im Folgenden die Start-Bytes der meisten Tickets. Danach folgen oft Steuerbytes oder Zahlenwerte nach dem oben beschriebenen 2-Byte-Muster. // Gesendet vom Bedienmodul (BD_MD) ACK_BD_MD = (0x9B, 0x7F, 0x05, 0x02, 0x83, 0xE7, 0x00) // complete ticket, without checksum (0x5C) TEMP_BD_MD = (0x9B, 0x7F, 0x05, 0x02, 0x83, 0xF7, 0x00, 0x06, 0x21, 0x0A) // Antwort auf Kommando 0x21 TIME_BD_MD = (0x9B, 0x7F, 0x05, 0x02, 0x83, 0xF7, 0x00, 0x06, 0x25, 0x08) // Antwort auf Kommando 0x25
// Gesendet vom Controller // Das zweite Byte 0x05 heisst vielleicht "erbitte Antwort", denn nur diese Tickets werden beantwortet PUMPEN = (0x92, 0x05, 0x7F, 0x03, 0x02, 0x67, 0x08, 0x20, 0x06) // scheint vom UML zu kommen ASK_RAUM = (0x92, 0x05, 0x7F, 0x03, 0x02, 0x77, 0x07, 0x21, 0x00, 0x05) // complete ticket - Ask Raumtemp & Betriebsmodus -> dieses Ticket kommt immer genau bevor die Raumtemp kommt) TEMP_IST = (0x92, 0x05, 0x7F, 0x03, 0x02, 0x67, 0x08, 0x22, 0x0A) TEMP_SOLAR = (0x92, 0x05, 0x7F, 0x03, 0x02, 0x67, 0x08, 0x23, 0x0A) TEMP_SOLL = (0x92, 0x05, 0x7F, 0x03, 0x02, 0x67, 0x08, 0x24, 0x0C) ASK_TIME = (0x92, 0x05, 0x7F, 0x03, 0x02, 0x77, 0x07, 0x25, 0x00, 0xA8) // complete ticket UML_PARAMS = (0x92, 0x05, 0x7F, 0x03, 0x02, 0x67, 0x08, 0x26, 0x0C) // kommen vom UML C1 // Nicht quittierte Tickets BRENNER = (0x92, 0x00, 0x7F, 0x03, 0x02, 0x67, 0x08, 0x02, 0x04) // brennersteuerung KESSEL = (0x92, 0x00, 0x7F, 0x03, 0x02, 0x67, 0x08, 0x03, 0x05) // Bei den folgende Tickets habe ich keine Ahnung wozu sie gut sind _770704 = (0x92, 0x00, 0x7F, 0x03, 0x02, 0x77, 0x07, 0x04, 0x00, 0x54) // complete ticket TICK _77070E = (0x92, 0x00, 0x7F, 0x03, 0x02, 0x77, 0x07, 0x0E, 0x00, 0xA4) // complete ticket TACK _030504 = (0x91, 0x00, 0x7F, 0x03, 0x02, 0x03, 0x05, 0x04, 0x00, 0x12) // complete ticket tick _03050E = (0x91, 0x00, 0x7F, 0x03, 0x02, 0x03, 0x05, 0x0E, 0x00, 0xE2) // complete ticket tack
// Zeit verstellen: // Bedienmodul meldet sich neu an (offenbar) mit FF FF (nicht immer) // Dann kommt irgendwann mal Bedienmodus 9002 (bei fix Tag -> C002) (nicht immer) // Heizung antwortet mit 92 05 7F 03 02 77 07 25 00 A8 (erfrage Zeit) // Bedienmodul dann mit 9B 7F 05 02 83 F7 00 06 25 08 00 00 00 00 17 19 06 06 AF // wobei 17: Stunde (23), 19: Minute (25), 06: Sekunde, 06: Wochentag (Samstag)So, das wären auf die Schnelle mal die wichtigsten Infos. Ich will meinen Source-Code noch etwas "öffentlichkeitstauglich" machen und dann werde ich ihn offiziell auf Github bereitstellen. Mischa
|