IR-Code der Wamsler-Pelletofen-Fernbedienung
Ich besitze einen Pelletofen der Firma Wamsler, genauer gesagt einen Westminster Quattro 6. Dieser Ofen kann über eine IR-Fernbedienung “programmiert” werden, sprich es können Parameter wie Solltemperatur, Timer, Lüftergeschwindigkeit usw. eingestellt werden und zuguterletzt der Ofen natürlich ein- und ausgeschaltet werden. Ich möchte diese Funktionen jedoch aus der Ferne steuern können – beispielsweise den Ofen von der Arbeit aus vorheizen.
Dafür bietet die Firma Wamsler zwar ein WiFi-Modul mit Cloudanbindung an, aber dieses kann ich nicht nur nicht in meine private Hausautomatisierung integrieren, es weist auch einige weitere gravierende Nachteile auf, die mich bewogen haben, das Gerät nicht einzusetzen. Zu den eben erwähnten Gründen zählt unter anderem, dass die Identifikation nur über eine numerische Hardware-ID erfolgt, ohne Passwortschutz. Finde ich die Hardware-ID eines anderen WiFi-Moduls heraus, kann ich diesen steuern – ein eklatanter Sicherheitsmangen. Abgesehen davon sind rund 150€ für ein ESP-Modul auf einer Platine mit 3 LEDs in einem Gehäuse ohne CE-Kennzeichnung eine Fars.
Daher habe ich mich entschlossen, mit das Übermittlungsprotokoll der Fernbedienung genauer anzusehen und bin über die Variation alles einstellbaren Parameter zu folgender Liste gekommen:
area | explenation | calculation | unit |
---|---|---|---|
bit 0 to 1 | currently unknown | ||
bit 2 | timer “auto” | 1 = true, 0 = false | |
bit 3 | stove on / off | 1 = on, 0 = off | |
bit 4 | “turbo” mode on / off | 1 = on, 0 = off | |
bit 5 to 7 | blower level | 1 + binToDec; 6 = AUTO | |
bit 8 | “econo” mode on / off | 1 = on, 0 = off | |
bit 9 | currently unknown | ||
bit 10 to 15 | temperature | 7 + binToDec | °C |
bit 16 to 20 | timer 1 ON hour | binToDec | hours |
bit 21 to 23 | timer 1 ON minute | binToDec * 10 | minutes |
bit 24 to 28 | timer 1 OFF hour | binToDec | hours |
bit 29 to 31 | timer 1 OFF minute | binToDec * 10 | minutes |
bit 32 to 36 | timer 2 ON hour | binToDec | hours |
bit 37 to 39 | timer 2 ON minute | binToDec * 10 | minutes |
bit 40 to 44 | timer 2 OFF hour | binToDec | hours |
bit 45 to 47 | timer 2 OFF minute | binToDec * 10 | minutes |
bit 48 to 49 | currently unknown, maybe part of 50..55 | ||
bit 50 to 55 | hour of day | binToDec | hours |
bit 56 to 57 | currently unknown, maybe part of 59..64 | ||
bit 59 to 63 | minute of day | binToDec | minutes |
bit 64 | timer 1 ON active | 1 = true, 0 = false | |
bit 65 | timer 1 OFF active | 1 = true, 0 = false | |
bit 66 | timer 2 ON active | 1 = true, 0 = false | |
bit 67 | timer 1 OFF active | 1 = true, 0 = false | |
bit 68 to 71 | custom checksum | see below |
Um nun eigene Telegramme zu erstellen habe ich eine C++-Klasse geschrieben, über die alle Parameter festgelegt werden können und am Ende ein valides Telegramm auswerfen kann.
#pragma once
#include <string>
#include <iostream>
class telegram
{
public:
//Variablen
int OnOff = 0;
int AUTOTimer = 0;
int Turbo = 0;
int Econo = 0;
int timer1onActive = 0;
int timer1offActive = 0;
int timer2onActive = 0;
int timer2offActive = 0;
//Funktionen, Set
bool setBlowerLevel(int level = 0);
bool setTemperature(int temperature = 20);
bool setTimer1on(int hour = 0, int minute = 0);
bool setTimer1off(int hour = 0, int minute = 0);
bool setTimer2on(int hour = 0, int minute = 0);
bool setTimer2off(int hour = 0, int minute = 0);
bool setTime(int hour = 0, int minute = 0);
//Funktionen, Output
std::string toString();
private:
bool data[72] = { 0 };
bool calcTelegram();
bool calcPruefsumme();
};
Der entsprechende Programmcode und ein Beispiel ist auch schon auf Github zu finden. Nächster Schritt wird nun, einen Arduino-kompatiblen Mikrocontroller mit RTC als Sender zu programmieren und eine entsprechende Web-Schnittstelle zur Verfügung zu stellen. Wenn es soweit ist, wird dieser Artikel aktualisiert.