Die Nachrichten-Erzeugungsroutine "wbus_msg_send()"
- NOCH NICHT FERTIG -
Hintergrund
Über den W-Bus können Steuerbefehle gesendet, Laufzeit- oder Konfigurationsparameter abgefragt werden. Dies erfolgt in Form einer dem W-Bus Protokoll entsprechenden Datenstruktur, welche seriell über den W-Bus versendet wird. Die Datenstruktur enthält dabei nicht nur den Befehl und mögliche Nutzdaten, sondern auch Protokollinformationen die zum Routing der Nachricht und deren Datenintegrität dienen.
Anstelle diese Datenstruktur jedesmal vorab in einem Bytearray selbst zu kodieren wollen wir eine Funktion dafür einsetzen. Zudem soll die Funktion die erzeugte Nachricht auch gleich versenden. Dementsprechend ist der Rückgabewert der Funktion entweder ERFOLG (=Nachricht wurde versendet) oder FEHLER (=bei der Übertragung wurde ein Fehler festgestellt).
Umsetzung
int wbus_msg_send(byte addr_from, byte addr_to, byte cmd, byte *data, byte dlen) { byte frame[32] = { }; byte *p = frame; *p++ = wbus_addr(addr_from, addr_to); *p++ = 4 + dlen; *p++ = cmd; for (; dlen!=0;dlen--) { *p++ = *data++; } *p = wbus_checksum(frame); }
Verwendung
// Start heater for 30 minutes byte from = 0x0F; // Our own W-Bus address byte to = 0x04; // W-Bus address of heating device byte cmd = 0x23; // W-Bus command for "start parking heater" byte data[1] = { 0x1E }; // heater runtime should be 30 mins if (wbus_msg_send(from, to, cmd, data) != 0) { print("Error sending frame via W-Bus\n"); }
// Stop heater byte from = 0x0F; // Our own W-Bus address byte to = 0x04; // W-Bus address of heating device byte cmd = 0x23; // W-Bus command for "start parking heater" if (wbus_msg_send(from, to, cmd, null) != 0) { print("Error sending frame via W-Bus\n"); }