!!! 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]