FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Meister_Petz am 09 Januar 2015, 16:55:18

Titel: Olympia Protect Alarmanalge mit Arduino schalten
Beitrag von: Meister_Petz am 09 Januar 2015, 16:55:18
!!! ACHTUNG: ALLES OHNE GEWÄHR !!!

Moin,

habe ein bisschen mit dem Arduino rumgespielt und hab mir gedacht, es wäre doch schön wenn man damit auch die vorhandene Alarmanlage schalten könnte...

Was soll geschalten werden:
- alles was der Handsender kann
- 1x Alarmsensor (einer von den Drecks... Fenstersensoren)
damit man in FHEM ein Alarmsignal an die Alarmanlage senden kann
- 1x Warnsensor
damit man ein Warnsignal schicken kann (Feuermelder, Temperatur,...)

Also alles aufgeschraubt:

Fenstersensor:
Die Sensoren funktionieren im Orginalzustand nur wenn sie grad Lust haben. Müssen evtl. öfter ausgelöst werden, damits klappt,... Einen Schalter statt dem Magnetschalter anzuklemmen funktioniert genau so wenig.
Aber: Bei der Gelegenheit habe ich bemerkt, wenn man den linken (siehe Bild) Kontakt des Magnetschalters mit GND verbindet, gibts immer einen Alarm. Wahrscheinlich ist es ein Kurzschluss... aber es klappt... immer und immer wieder!
Nachtrag: Die Fenstersensoren lösen auch zuverlässig aus, wenn sie nur Strom bekommen => noch einfach zu schalten! ;-)

Hochwassersensor:
Der muss allerdings mit dem Schaltkontakt geschalten werden.

Handsender:
So motiviert, habe ich den Handsender zerlegt und auch hier kann man mit GND schalten.

Achja... bei weiteren Tests ist mir dann aufgefallen, dass sowohl Handsender als auch Sensoren mit den 5V des Arduino klar kommen ;-)

Und das ist dabei heraus gekommen:
(http://www.services4u.de/forumfiles/Olympia-Protect-mit-Arduino-schalten.png)

- Und zwischen mein Schalt "Minus"(PIN auf LOW) habe ich vorsichtshalber LEDs gepackt
- den Wassermelder habe ich noch nicht getestet, aber ein zweiter Fenstersensor funktioniert an der Stelle
Nachtrag: getestet und wie auf dem Bild verdrahtet

Falls jemand dazu was sagen möchte: Kritik und Ideen erwünscht

  char val; // Data received from the serial port
 
  // Handsender
  int sendVCCon      = 2; // Batterie Plus
  int sendSigPanic   = 3; // Panic Alarm
  int sendSigOn      = 4; // Alarmanlage scharf schalten
  int sendSigOff     = 5; // Ausschalten
  int sendSigHome    = 6; // zu Hause Modus
 
  // Fenstersensor
  int fsSig1   = 7;
 
  // Alarmsensor (Wasserstandssensor)
  int wsSig   = 10;
  int wsSigVCC   = 11;
 

  void setup() {
    pinMode(sendSigOff, OUTPUT);
    pinMode(sendSigOn, OUTPUT);
    pinMode(sendSigHome, OUTPUT);
    pinMode(sendSigPanic, OUTPUT);
    pinMode(sendVCCon, OUTPUT);
 
    pinMode(fsSig1, OUTPUT);
   
    pinMode(wsSig, OUTPUT);
    pinMode(wsSigVCC, OUTPUT);


    digitalWrite(sendSigOff, LOW);
    digitalWrite(sendSigOn, LOW);
    digitalWrite(sendSigHome, LOW);
    digitalWrite(sendSigPanic, LOW);
    digitalWrite(sendVCCon, LOW);
 
    digitalWrite(fsSig1, LOW);
   
    digitalWrite(wsSig, LOW);
    digitalWrite(wsSigVCC, LOW);

    Serial.begin(9600);


void loop() {
  if (Serial.available()) { // If data is available to read,
    val = Serial.read(); // read it and store it in val
  }
  //################################
  // Handsender
  // Alarm aus
  if (val == 'F') {
     // Erst alle Handsenderknöpfe auf HIGH weil sie auf LOW auslösen würden (alle gleichzeitig)
     digitalWrite(sendSigOff, HIGH); //
     digitalWrite(sendSigOn, HIGH);
     digitalWrite(sendSigHome, HIGH);
     digitalWrite(sendSigPanic, HIGH);
     delay(1000); // warten bis alle kapiert was los ist
     
     // Strom auf den Handsender
     digitalWrite(sendVCCon, HIGH);
     delay(2000); // warten bis alle Bauteile Strom haben (die Zeit war so ein bisschen trial and error)
     
     // Signal senden
     digitalWrite(sendSigOff, LOW);
     delay(2000);
     
     Serial.println("OFF");
     val = 0;   
  }
  // Alarm ON
  if (val == 'O') {
     // Erst alle Handsenderknöpfe auf HIGH weil sie auf LOW auslösen würden (alle gleichzeitig)
     digitalWrite(sendSigOff, HIGH); //
     digitalWrite(sendSigOn, HIGH);
     digitalWrite(sendSigHome, HIGH);
     digitalWrite(sendSigPanic, HIGH);
     delay(1000); // warten bis alle kapiert was los ist
     
     // Strom auf den Handsender
     digitalWrite(sendVCCon, HIGH);
     delay(2000); // warten bis alle Bauteile Strom haben (die Zeit war so ein bisschen trial and error)
     
     // Signal senden
     digitalWrite(sendSigOn, LOW);
     delay(2000);
     
     Serial.println("On");
     val = 0;   
  }
  // Zu Hause Modus
  if (val == 'H') {
     // Erst alle Handsenderknöpfe auf HIGH weil sie auf LOW auslösen würden (alle gleichzeitig)
     digitalWrite(sendSigOff, HIGH); //
     digitalWrite(sendSigOn, HIGH);
     digitalWrite(sendSigHome, HIGH);
     digitalWrite(sendSigPanic, HIGH);
     delay(1000); // warten bis alle kapiert was los ist
     
     // Strom auf den Handsender
     digitalWrite(sendVCCon, HIGH);
     delay(2000); // warten bis alle Bauteile Strom haben (die Zeit war so ein bisschen trial and error)
     
     // Signal senden
     digitalWrite(sendSigHome, LOW);
     delay(2000);
     
     Serial.println("Home");
     val = 0;   
  }
  // Panikalarm
  if (val == 'P') {
     // Erst alle Handsenderknöpfe auf HIGH weil sie auf LOW auslösen würden (alle gleichzeitig)
     digitalWrite(sendSigOff, HIGH); //
     digitalWrite(sendSigOn, HIGH);
     digitalWrite(sendSigHome, HIGH);
     digitalWrite(sendSigPanic, HIGH);
     delay(1000); // warten bis alle kapiert was los ist
     
     // Strom auf den Handsender
     digitalWrite(sendVCCon, HIGH);
     delay(2000); // warten bis alle Bauteile Strom haben (die Zeit war so ein bisschen trial and error)
     
     // Signal senden
     digitalWrite(sendSigPanic, LOW);
     delay(2000);
     
     Serial.println("Panik");
     val = 0;   
  }
  // Silent Modus
  if (val == 'S') {
     // Erst alle Handsenderknöpfe auf HIGH weil sie auf LOW auslösen würden (alle gleichzeitig)
     digitalWrite(sendSigOff, HIGH); //
     digitalWrite(sendSigOn, HIGH);
     digitalWrite(sendSigHome, HIGH);
     digitalWrite(sendSigPanic, HIGH);
     delay(1000); // warten bis alle kapiert was los ist
     
     // Strom auf den Handsender
     digitalWrite(sendVCCon, HIGH);
     delay(2000); // warten bis alle Bauteile Strom haben (die Zeit war so ein bisschen trial and error)
     
     // Signal senden - bei Silent müssen On und Home gleichzeitig gedrückt/geschaltet werden
     digitalWrite(sendSigOn, LOW);
     digitalWrite(sendSigHome, LOW);
     delay(2000);
     
     Serial.println("OFF");
     val = 0;   
  }

  //################################
  // Fenstersensor(en) auslösen
  if (val == '1') {
     // Strom auf den Fenstersensor löst bei mir zuverlässig aus
     digitalWrite(fsSig1, HIGH);
     delay(2000);
     Serial.println("FS1");
     val = 0;   
  }
 
  //################################
  // Hochwassersensor auslösen
  if (val == '2') {
     // Schalter deaktivieren
     digitalWrite(wsSig, HIGH);
     delay(2000);
     // Strom auf Sensor
     digitalWrite(wsSigVCC, HIGH);
     delay(2000);
     // Schalter auslösen
     digitalWrite(wsSig, LOW);
     delay(2000);
     Serial.println("WS");
     val = 0;   
  }
  // alles aus
  else {
     digitalWrite(sendSigOff, LOW);
     digitalWrite(sendSigOn, LOW);
     digitalWrite(sendSigHome, LOW);
     digitalWrite(sendSigPanic, LOW);
     digitalWrite(sendVCCon, LOW);
     
     digitalWrite(fsSig1, LOW);
     digitalWrite(wsSig, LOW);
     digitalWrite(wsSigVCC, LOW);
     
  }
 
 
  delay(100); // Wait 100 milliseconds for next reading
}
[/size]