Ich habe mir kürzlich von Aldi den Medion 18500 Saugroboter zugelegt. Mit der Fernbedienung kann man ihn aber nur jeden Tag zu einer selbst festzulegenden Zeit starten - also recht unflexibel.
Aber wozu gibt es FHEM, Arduinos und IR um dem abzuhelfen - hier meine derzeitige Quick&Dirty Lösung, welche ein Signal per FHEM (433MHz) an einen Arduino schickt und dieser dann den IR-Code an den Saugroboter sendet.
Eigentlich braucht man nur das CLEAN-Signal - ich habe aber dennoch mal die anderen IR-Codes ausgelesen.
Da hier auch noch ein Philips Saugroboter (glaube FC8710) verfügbar war, sind auch dessen IR-Codes im Code nutzbar.
/*
receives at 433 MHz and sends IR codes
MEDION:
Encoding: NEC - 32 bits
UP: 2AA55AA => 00001 on => 5441
DOWN: 2AA6699 => 00001 off => 5444
LEFT: 2AA33CC => 00011 on => 5377
RIGHT: 2AA44BB => 00011 off => 5380
SPOT: 2AA7788 => 00111 on => 5121
EDGE: 2AA9966 => 00111 off => 5124
CLEAN: 2AA22DD => 01111 on => 4097
HOME: 2AA8877 => 01111 off => 4100
https://www.roboter-forum.com/index.php?user-post-list/62804-giovanne/
PHILIPS:
Encoding: NEC - 32 bits
UP: 3F49867
DOWN: 3F4A05F
LEFT: 3F4807F
RIGHT: 3F4C03F
POWER: 3F4609F
HOME: 3F4708F
RZEIT: 3F4E01F
Z-MODE: 3F48877
P-MODE: 3F448B7
W-MODE: 3F4C837
RANDOM: 3F4B04F
*/
#include <RCSwitch.h>
#include <IRremote.h>
#define DEBUG
//#define PHILIPS
#define RF_PIN 0
#define BLINK_PIN LED_BUILTIN
unsigned long time = 0;
int value = 0;
RCSwitch mySwitch = RCSwitch();
IRsend irsend; // SEND PIN is 3
void setup() {
Serial.begin(9600);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(BLINK_PIN, LOW); // turn the LED off
mySwitch.enableReceive(RF_PIN); // Receiver on interrupt 0 => that is pin #2
}
void loop() {
if (mySwitch.available()) {
if ((mySwitch.getReceivedValue() == value) && (millis()-time < 250)) {
#ifdef DEBUG
Serial.print(F("received same value 250ms too fast - ignore it! - "));
#endif
value = 0;
} else {
value = mySwitch.getReceivedValue();
time = millis();
}
if (mySwitch.getReceivedProtocol() != 1) {
#ifdef DEBUG
Serial.print(F("Unknown protocol - "));
#endif
value = 0;
}
digitalWrite(BLINK_PIN, HIGH); // turn the LED on (HIGH is the voltage level)
switch (value) {
// CLEAN
case 4097:
#ifdef DEBUG
Serial.println(F("sending IR code for CLEAN"));
#endif
#ifdef PHILIPS
irsend.sendNEC(0x3F4609F, 32);
#else
irsend.sendNEC(0x2AA22DD, 32);
#endif
break;
// HOME
case 4100:
#ifdef DEBUG
Serial.println(F("sending IR code for HOME"));
#endif
#ifdef PHILIPS
irsend.sendNEC(0x3F4708F, 32);
#else
irsend.sendNEC(0x2AA8877, 32);
#endif
break;
// UP
case 5441:
#ifdef DEBUG
Serial.println(F("sending IR code for UP"));
#endif
#ifdef PHILIPS
irsend.sendNEC(0x3F49867, 32);
#else
irsend.sendNEC(0x2AA55AA, 32);
#endif
break;
// DOWN
case 5444:
#ifdef DEBUG
Serial.println(F("sending IR code for DOWN"));
#endif
#ifdef PHILIPS
irsend.sendNEC(0x3F4A05F, 32);
#else
irsend.sendNEC(0x2AA6699, 32);
#endif
break;
// LEFT
case 5377:
#ifdef DEBUG
Serial.println(F("sending IR code for LEFT"));
#endif
#ifdef PHILIPS
irsend.sendNEC(0x3F4807F, 32);
#else
irsend.sendNEC(0x2AA33CC, 32);
#endif
break;
// RIGHT
case 5380:
#ifdef DEBUG
Serial.println(F("sending IR code for RIGHT"));
#endif
#ifdef PHILIPS
irsend.sendNEC(0x3F4C03F, 32);
#else
irsend.sendNEC(0x2AA44BB, 32);
#endif
break;
// SPOT
case 5121:
#ifdef DEBUG
Serial.println(F("sending IR code for SPOT"));
#endif
#ifdef PHILIPS
irsend.sendNEC(0x3F448B7, 32);
#else
irsend.sendNEC(0x2AA7788, 32);
#endif
break;
// EDGE
case 5124:
#ifdef DEBUG
Serial.println(F("sending IR code for EDGE"));
#endif
#ifdef PHILIPS
irsend.sendNEC(0x3F4C837, 32);
#else
irsend.sendNEC(0x2AA9966, 32);
#endif
break;
default:
#ifdef DEBUG
Serial.println(F("Unknown encoding"));
#endif
break;
}
mySwitch.resetAvailable();
digitalWrite(BLINK_PIN, LOW); // turn the LED off
}
}
Meine FHEM-Definitionen:
define IT_UP_DOWN IT 00000FFFF0 0F F0
setuuid IT_UP_DOWN 5d99f402-f33f-cfff-05a6-6c3b573a9e21dc84
attr IT_UP_DOWN IODev SIGduino
attr IT_UP_DOWN eventMap on:UP off:DOWN
attr IT_UP_DOWN room Wohnzimmer
define IT_LEFT_RIGHT IT 00000FFF00 0F F0
setuuid IT_LEFT_RIGHT 5d99f442-f33f-cfff-ca32-91ee771aac1ff178
attr IT_LEFT_RIGHT IODev SIGduino
attr IT_LEFT_RIGHT eventMap on:LEFT off:RIGHT
attr IT_LEFT_RIGHT room Wohnzimmer
define IT_SPOT_EDGE IT 00000FF000 0F F0
setuuid IT_SPOT_EDGE 5d99f462-f33f-cfff-72ef-91317352ca67a9dd
attr IT_SPOT_EDGE IODev SIGduino
attr IT_SPOT_EDGE eventMap on:SPOT off:EDGE
attr IT_SPOT_EDGE room Wohnzimmer
define IT_CLEAN_HOME IT 00000F0000 0F F0
setuuid IT_CLEAN_HOME 5d99f47a-f33f-cfff-0670-00c4108da5bbf7e5
attr IT_CLEAN_HOME IODev SIGduino
attr IT_CLEAN_HOME eventMap on:CLEAN off:HOME
attr IT_CLEAN_HOME room Wohnzimmer