Medion 18500 / Philips FC8710 Saugroboter fernsteuern

Begonnen von dad401, 17 November 2019, 16:46:49

Vorheriges Thema - Nächstes Thema

dad401

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
--
aktuelles FHEM auf einem RPI3 mit
HM-MOD-RPI-PCB, CUL868, nanoCUL (868MHz), Signalduino (433MHz), SignalESP (433 MHz) zur Nutzung folgender Systeme:
FS20/Homematic/IT-Steckdosen/OW/Sonstiges