GSM сигнализация M590+Arduino
- Войдите на сайт для отправки комментариев
Вс, 27/11/2016 - 19:13
Здравствуйте. Я новичек в этом деле, только начинаю программировать.
нашел на просторах интернета скетч для GSM сигнализации вот здесь: http://mysku.me/blog/ebay/43282.html. Переделал его под себя, имеется:
- Arduino nano v3 (ATmega168);
- герконовый датчик отрытия двери, возможно 2;
- GSM модуль Neowey M590;
вообщм что у меня получилось:
В файл SoftwareSerial.h (C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\SoftwareSerial\src\SoftwareSerial.h) необходимо внести изменения
было так:
#define _SS_MAX_RX_BUFF 64
стало так:
#define _SS_MAX_RX_BUFF 192
скетч:
#include <SoftwareSerial.
#include <EEPROM.h>
SoftwareSerial mySerial(2, 3); //На этих пинах подключен модем RX, TX
#define RLed 10 // Красный светодиод
#define BLed 11 // Синий светодиод
#define GLed 12 // Зеленый светодиод
#define AlarmPin 9 // Выход "тревожного" пина, при срабатывании датчика на этом пине устанавливается сигнал высокого уровня на время указанное в переменной AlarmInterval, по умолчанию 60 секунд.
#define DoorPin 7 // Номер входа, подключенный к датчику
int8_t DoorState = 0; // Переменная для хранения состояния датчика
int8_t DoorFlag = 1;
int8_t RLedState = LOW;
int8_t GLedState = LOW;
int8_t BLedState = LOW;
unsigned long previousAlarmMillis = 0;
uint16_t AlarmInterval = 60; // Секунд до отключения "тревожного" пина.
unsigned long previousMillis = 0;
uint16_t interval = 100;
uint8_t ch = 0;
int8_t sendsms = 1; //Отправка смс: 1 - включена, 0 - выключена. Глобальный параметр отправки сообщений. Управляется через смс командами SmsOn и SmsOff.
int8_t AlarmRing = 1; //Звонок: 1 - включен, 0 - выключен. Звонить на первый номер массива AlarmPhone при срабатывании датчика. Управляется через смс командами RingOn и RingOff.
int8_t guard = 1; //Охрана: 1 - включена, 0 - выключена. Если включена, будут отправляться смс при срабатывании датчиков
int8_t sendsmscaller; //Переменная для отправки смс о снятии или установки на охрану пользователям которые отсутствуют в массиве AlarmPhone
int8_t LedTestOn = 0;
int8_t LedOn = 1;
String val = "";
String RingPhone = "";
String LastEvent = "System: auto guard on";
int8_t ModemID = 0;
const char* AllowPhone[] = {"79******", "79******"}; //Номера которым разрешено управлять охраной. На первый номер будут отправляться смс монитора порта (для отладки)
int8_t CountPhone = sizeof(AllowPhone) / sizeof(AllowPhone[0]);
const char* AlarmPhone[] = {"79******", "79******"}; //Номера для отправки смс при срабатывании датчиков и о снятии или установки на охрану. На первый номер будет осуществляться вызов если AlarmRing = 1;
int8_t CountAlarmPhone = sizeof(AlarmPhone) / sizeof(AlarmPhone[0]);
/*
EEPROM Data:
№ ячейки - значение;
0 - если записана не 1, то необходимо затереть часть памяти eeprom'a и восстановить стандартную конфигурацию.
10 - sendsms = 1; //Отправка смс: 1 - включена, 0 - выключена. Глобальный параметр отправки сообщений. Управляется через смс командами SmsOn и SmsOff.
11 - AlarmRing = 1; //Звонок: 1 - включен, 0 - выключен. Звонить на первый номер массива AlarmPhone при срабатывании датчика. Управляется через смс командами RingOn и RingOff.
12 - LedTestOn = 0;
13 - LedOn = 1;
14 - guard =1; //Охрана: 1 - включена, 0 - выключена. Если включена, будут отправляться смс при срабатывании датчиков
*/
void setup() {
Serial.begin(9600);
//EEPROM.update(0, 255); //reset config;
eepromconfig();
pinMode(RLed, OUTPUT);
pinMode(GLed, OUTPUT);
pinMode(BLed, OUTPUT);
digitalWrite(RLed, HIGH);
digitalWrite(GLed, HIGH);
digitalWrite(BLed, HIGH);
digitalWrite(RLed, LOW);
delay(500);
digitalWrite(RLed, HIGH);
digitalWrite(GLed, LOW);
delay(500);
digitalWrite(GLed, HIGH);
digitalWrite(BLed, LOW);
delay(500);
digitalWrite(BLed, HIGH);
pinMode(DoorPin, INPUT);
pinMode(AlarmPin, OUTPUT);
digitalWrite(AlarmPin, LOW);
InitModem();
}
void loop() {
if (LedTestOn == 0) digitalWrite(BLed, HIGH);
if (LedTestOn == 1) LedTest();
Led();
AlarmPinOff();
Detect();
if (mySerial.available()) { //Если GSM модуль что-то послал нам, то
while (mySerial.available()) { //сохраняем входную строку в переменную val
ch = mySerial.read();
val += char(ch);
delay(20);
}
if (val.indexOf("+PBREADY") > -1) InitModem(); //Если модем во время работы перезагрузился, выполняем настройку
if (val.indexOf("RING") > -1) { //Если звонок обнаружен, то проверяем номер
if (CheckPhone() == 1) {
mySerial.println("ATH0"); //Разрываем связь
sendsmscaller = 1;
// Serial.println("--- MASTER RING DETECTED ---");
MasterRing();
} else {
// Serial.println("--- UNKNOWN RING DETECTED ---");
mySerial.println("ATH0"); //Разрываем связь
}
} else if (val.indexOf("+CMT:") > -1) { //Если пришло смс, то проверяем номер
if (CheckPhone() == 1) {
sendsmscaller = 1;
// Serial.println("--- MASTER SMS DETECTED ---");
MasterSms();
}
}
}
if (Serial.available()) { //Если в мониторе порта ввели что-то
while (Serial.available()) { //Сохраняем строку в переменную val
ch = Serial.read();
val += char(ch);
delay(20);
}
mySerial.println(val); //передача всех команд, набранных в мониторе порта в GSM модуль
ConsolePrint();
val = ""; //Очищаем
}
}
void eepromconfig(){
//EEPROM
pinMode(13, OUTPUT);
if (EEPROM.read(0) != 1) {
for (int i = 0 ; i < 20 ; i++) {
// for (int i = 0 ; i < EEPROM.length() ; i++) {
EEPROM.update(i, 255);
//delay(10);
}
EEPROM.update(10, 1); // sendsms = 1; //Отправка смс: 1 - включена, 0 - выключена. Глобальный параметр отправки сообщений. Управляется через смс командами SmsOn и SmsOff.
EEPROM.update(11, 1); // AlarmRing = 1; //Звонок: 1 - включен, 0 - выключен. Звонить на первый номер массива AlarmPhone при срабатывании датчика. Управляется через смс командами RingOn и RingOff.
EEPROM.update(12, 0); // LedTestOn = 0;
EEPROM.update(13, 1); // LedOn = 1;
EEPROM.update(14, 1); //Охрана: 1 - включена, 0 - выключена. Если включена, будут отправляться смс при срабатывании датчиков
EEPROM.update(0, 1);
digitalWrite(13, HIGH);
}
if (EEPROM.read(0) == 1) {
sendsms = EEPROM.read(10); // sendsms = 1; //Отправка смс: 1 - включена, 0 - выключена. Глобальный параметр отправки сообщений. Управляется через смс командами SmsOn и SmsOff.
AlarmRing = EEPROM.read(11); // AlarmRing = 1; //Звонок: 1 - включен, 0 - выключен. Звонить на первый номер массива AlarmPhone при срабатывании датчика. Управляется через смс командами RingOn и RingOff.
LedTestOn = EEPROM.read(12); // LedTestOn = 0;
LedOn = EEPROM.read(13); // LedOn = 1;
guard = EEPROM.read(14); //Охрана: 1 - включена, 0 - выключена. Если включена, будут отправляться смс при срабатывании датчиков
}
//EEPROM
}
void InitModem() {
delay(2000); //Время на инициализацию модуля
Serial.begin(9600); //Скорость порта
// Serial.println("GSM Alarm v1.0");
mySerial.begin(9600);
mySerial.println("AT");
delay(100);
mySerial.println("ATI");
delay(100);
if (mySerial.find("M590")) ModemID = 1;
mySerial.println("ATI");
delay(100);
mySerial.println("AT+CLIP=1"); //Включаем АОН
delay(100);
mySerial.println("AT+CMGF=1"); //Режим кодировки СМС - обычный (для англ.)
delay(100);
mySerial.println("AT+CSCS=\"GSM\""); //Режим кодировки текста
delay(100);
mySerial.println("AT+CNMI=2,2"); //Отображение смс в терминале сразу после приема (без этого сообщения молча падают в память)
delay(100);
}
int CheckPhone() {
for (int i = 0; i < CountPhone; i++) {
if (val.indexOf(AllowPhone[i]) > -1) {
RingPhone = AllowPhone[i];
Serial.println("Event: +" + RingPhone);
return 1;
}
}
return 0;
}
void Detect() {
// Считываем значения с входа
DoorState = digitalRead(DoorPin);
if (DoorState == LOW && DoorFlag == 0) {
DoorFlag = 1;
delay(100);
if (LedOn == 1) digitalWrite(GLed, LOW);
Alarm();
}
if (DoorState == HIGH && DoorFlag == 1) {
DoorFlag = 0;
delay(100);
}
}
void Led() {
if (guard == 1) {
digitalWrite(GLed, HIGH);
digitalWrite(RLed, LOW);
}
if (guard == 0) {
digitalWrite(RLed, HIGH);
if (LedOn == 1) digitalWrite(GLed, LOW);
}
}
void LedTest() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis > interval) {
previousMillis = currentMillis;
if (RLedState == LOW)
RLedState = HIGH;
else
RLedState = LOW;
digitalWrite(BLed, RLedState);
}
}
void AlarmPinOff() {
unsigned long currentAlarmMillis = millis();
if (currentAlarmMillis - previousAlarmMillis > AlarmInterval * 1000) {
digitalWrite(AlarmPin, LOW);
}
}
void Alarm() {
if (guard == 1) {
digitalWrite(AlarmPin, HIGH);
previousAlarmMillis = millis();
for (int i = 0; i < CountAlarmPhone; i++) {
sms(String("Srabotal datchik dveri!"), String("+" + String(AlarmPhone[i])));
// Serial.println("Srabotal datchik dveri! Send sms: +" + String(AlarmPhone[i]));
delay(1000);
}
if (AlarmRing == 1) {
mySerial.println("ATD+" + String(AlarmPhone[0]) + ";");
delay(1000);
}
}
}
void MasterRing() {
if (guard == 1) GuardOff();
else if (guard == 0) GuardOn();
}
void GuardOff() {
guard = 0;
EEPROM.update(14, guard);
LastEvent = "Guard Off. Phone +" + RingPhone;
Serial.println(LastEvent);
delay(1000);
for (int i = 0; i < CountAlarmPhone; i++) {
if (RingPhone == String(AlarmPhone[i])) sendsmscaller = 0;
delay(1000);
sms(String(LastEvent), String("+" + String(AlarmPhone[i])));
delay(1000);
}
if (sendsmscaller == 1) {
delay(1000);
sms(String("Guard Off"), String("+" + RingPhone));
delay(1000);
}
}
void GuardOn() {
guard = 1;
EEPROM.update(14, guard);
DoorFlag = 1;
LastEvent = "Guard On. Phone +" + RingPhone;
Serial.println(LastEvent);
delay(1000);
for (int i = 0; i < CountAlarmPhone; i++) {
if (RingPhone == String(AlarmPhone[i])) sendsmscaller = 0;
delay(1000);
sms(String(LastEvent), String("+" + String(AlarmPhone[i])));
delay(1000);
}
if (sendsmscaller == 1) {
delay(1000);
sms(String("Guard On"), String("+" + RingPhone));
delay(1000);
}
}
void MasterSms() {
val.toLowerCase();
if ((val.indexOf("ringon") > -1)) {
delay(1000);
AlarmRing = 1;
EEPROM.update(11, AlarmRing);
sms(String("RingOn: Alarm Ring is ON"), String("+" + RingPhone));
delay(1000);
}
if ((val.indexOf("ringoff") > -1)) {
delay(1000);
AlarmRing = 0;
EEPROM.update(11, AlarmRing);
sms(String("RingOff: Alarm Ring is OFF"), String("+" + RingPhone));
delay(1000);
}
if ((val.indexOf("smson") > -1)) {
delay(1000);
sendsms = 1;
EEPROM.update(10, sendsms);
sms(String("SmsOn: Alarm SMS is ON"), String("+" + RingPhone));
delay(1000);
}
if ((val.indexOf("smsoff") > -1)) {
delay(1000);
sendsms = 0;
EEPROM.update(10, sendsms);
sms(String("SmsOff: Alarm SMS is OFF"), String("+" + RingPhone));
delay(1000);
}
if ((val.indexOf("guardon") > -1)) {
delay(1000);
GuardOn();
}
if ((val.indexOf("guardoff") > -1)) {
delay(1000);
GuardOff();
}
if ((val.indexOf("info") > -1)) {
delay(1000);
sms(String("Info: " + LastEvent), String("+" + RingPhone));
delay(1000);
}
if ((val.indexOf("clear") > -1)) {
clearsms();
delay(2000);
sms(String("Clear: All messages removed"), String("+" + RingPhone));
delay(1000);
}
}
void ConsolePrint() {
val.toLowerCase();
if ((val.indexOf("clear") > -1)) { //если увидели команду отправки СМС
clearsms();
delay(2000);
}
}
void clearsms() {
if (ModemID == 1) mySerial.println("AT+CMGD=0,4");
if (ModemID == 2) mySerial.println("AT+CMGD=4");
}
void sms(String text, String phone) { // Процедура отправки СМС
if (sendsms == 1 ) {
mySerial.println("AT+CMGS=\"" + phone + "\"");
delay(500);
mySerial.print(text);
delay(500);
mySerial.print((char)26);
delay(500);
Serial.println("SMS sended! Phone: " + phone + "; Message: " + text);
delay(5000);
} else {
delay(1000);
Serial.println("Silent mode, SMS not sended! Phone: " + phone + "; Message: " + text);
}
}
но почему-то не работает - не реагирует на смс и звонки, в мониторе порта тишина. подскажите что нетак?
что нетак?
Для начала, код не так выложен. В таком виде его смотреть никто не будет (разве что в приступе мазахизма).
Извиняюсь, уже не отредактировать сообщение.
в мониторе порта тишина
вот скетч:
т.к с предыдущей сигнализацией ничего не вышло ( мало памяти). решил допиливать другую, и в принципе вроде все работает.
задачи стояли такие:
- постановка\снятие с охраны звонком,
- подтверждение постановки\снятия смской хозяину,
- при срабатывании датчика (шлейфа) вызов хозяину, и смс.
- при срабатывании датчика, если дверь осталась открыта (после сброса вызова), охрана снимается; если закрыта то остается на охране.
Что немного не устраиввает:
- подтверждающая смс приходит со статусом программы (1 - включена сигнализация, 2 - снято). хотелось бы видеть в смс: on\off,
- если возможно то прописать 2 номера, и слать подтверждающие( либо при срабатываении датчика) смс обоим номерам
прикрепляю скетч, что скажете, порекомендуете:
Доброе время суток!!!
Подскажите с GSM модулем SIM 800L работать будет последний скетч?
Виктор
Здравствуйте. Я думаю что все должно работать, судя из http://www.2150692.ru/faq/46 .
кстати скетч брал тут:
http://arduinolab.pw/index.php/2016/04/28/gsm-signalizaciya-dlya-dachi-n...
Доброе время суток!!!!
Попробывал Ваш проект - в принцыпе как писали так и работает!!!
Не планируете увеличение функциональности - LCD дисплей, датчики температуры, движения, фото и передача на сотовый тлф.
Виктор
Сейчас только сигнализация, но вообще насчет температуры давно думаю, жду ардуину с 328 atmega, сейчас у меня 168.
Доброе время суток!!!
Вот по данной ссылке неплохое работающее устройство http://pikabu.ru/story/okhrannaya_signalizatsiya_ili_sistema_opoveshcheniya_na_arduino_4355796.
Можно попробывать объединить = на мой взгляд неплохое устройство получиться.
Виктор
Спасибо, видел это видео. Буду пробовать добавить датчик температуры, с запросом температуры по СМС.
Доработал скетч, такие опции:
- постановка/снятие с охраны звонком с прописанного номера, с подтверждением смс (Alarm: on / Alarm: off) и звуковой сирены.
постановка 1 пик сирены, снятие 2 пика сирены
- при срабатывании датчика (шлейфа) вызов хозяину, снятие с охраны, и смс (Datchik dveri// off).
- статус светодиод Led Pin7 на охране моргает 0,2/2сек. при снятой охране, если открыть дверь горит.
Подскажите, как сделать: при вызове обонента, если вызов не сброшен, включается автоответчик и снимаютсяденьги.
Что требуется: если вызов не сброшен в течении 20 секунд сбросить его прогшраммно.
ак это сделать?.
когда посылаеться вызов(т.е. из mySerial.println(TELLNUMBER);)берем и смотрим set_time=millis(); и ставим флаг razriv=1; . и потом проверкой допустим в loop вконце проверяем если millis()>=set_time + 20000 и razriv==1 то сбрасываем вызов mySerial.println("AT0"); , делаем повторный звонок mySerial.println(TELLNUMBER) и когда поймем что вызов сами сбросили или приняли, т.е. делаем проверку millis()<set_time+20000 и
mySerial.find(
"NO CARRIER"
),
сбрасываем флаг razriv=0; ну а если что то не так, то там уже догадеешься, главное логику объяснилСпасибо попробую. Мне нужен один вызов, а потом я отправляю СМС со статусом.
просто вызов может не дойти, потому что вне зоны доступа был, а так 100 процентов дойдет и сигнализация поймет что вы 100 процентов узналди об этом
Еще немного оптимизировал и доработал скетч:
теперь работает так:
- при подаче питания сигнализация выключена, отправляет смс: снято с охраны;
- при звонке с прописанного номера включает (либо выкл) сигнализацию с смс подтверждением (снято или поставлено на охрану);
- при срабатывании геркона двери: включается сирена, и звонит на прописанный номер, снимает с охраны, отправляет смс открыта дверь и снято с охраны;
- при первом срабатывании датчика движения сирена звучит 5 сек (отпугивание), 5 сек ждет, далее в стандартном режиме:
- при повторном срабатывании датчика движения сирена 10 сек, и смс "движение", при следующих срабатываниях все повторяется с предыдущего пункта.
- при срабатывании геркона двери: включается сирена, и звонит на прописанный номер, снимает с охраны, отправляет смс открыта дверь и снято с охраны;
Звонок проходит, а смс почему то неотправляет. При обнаружении движения смс отправляет. В чем причина?
Звонок проходит, а смс почему то неотправляет. При обнаружении движения смс отправляет. В чем причина?
так когда смс не отправляет, при открытии двери?
я сначала закомментрую строки с отправкой смс, а вместо них вывожу сообщения в монитор порта, при первом срабатывании ДД: Serial.println(SensorOn); повторное срабатывание: Serial.println(SensorOn + LastEvent); а уже потом - если все нормально выводится, уже потом налаживаю отправку СМС.
я немного оптимизировал (немного меньше весит), но не проверял, должно так же работать. Еще допилю чтоб датчик движения срабатывал при движении в несколько секунд (на помехи не отрабатывал).
имейте ввиду, что у меня в программе при движении низкий уровень, возможно вам нужно будет изменить это.
При срабтке ДД смс приходят, а при размыкании периметра приходит только вызов, а смс нет. Новый код не пробовал и к сожалению не умею работать с Serial. Кстати, по моему когда к нано был подключен UART-адаптер и открыт монитор порта, смс при открытии двери приходили, а вот подключаю питание с блока питания 4ампера смс нет при открытии двери, только вызов. Может с этим как то связано?
советую подключить снова к компу и посмотреть монитор порта, и посмотреть будет ли приходить в монитор порта строка: Dver' otkrita!.
перед всеми строками sms(String...) сделайте вот так: //sms(String( чтоб не тратить деньги на смс, будет работать только вызов. И смотрите в мониторе порта отработки датчиков, если все отрабатывает - сообщения появляются, все должно быть хорошо. я завтра возьму с собой ардуинку и снова проверю скетч.
у вас на BOOT и GND перемычка стоит? Я их только замыкаю на время. Можете сделать чтоб они програмно взамыкались, при срабатывании ДД или открытии двери и посте вызова и отправки смс снова замыкались для отключения GSM модуля в целях экономии энергии?
Да, яэто не указал, нога модема BOOT подключена на GND. по идее можно сделать. мой модем потребляет в дежурке около 20мА, и мне не интересно отключение модема.
смс закоментировал, в порт приходит Dver' otkrita! Snyato s ohrani! Dver' otkrita! Snyato s ohrani! Но почему смс Dvijeniye na objekte! приходит, а Dver' otkrita! Snyato s ohrani!- нет.
смс закоментировал, в порт приходит Dver' otkrita! Snyato s ohrani! Dver' otkrita! Snyato s ohrani! Но почему смс Dvijeniye na objekte! приходит, а Dver' otkrita! Snyato s ohrani!- нет.
раскоментировал отправку смс. И опять при срабатывании ДД смс приходят, а при открытии двери идет вызов, смс нет, хотя в порт пишет:
Dver' otkrita! Snyato s ohrani!
Start SMS send
Строку отправки смс изменили? У меня раз так было как-то отправилась СМС, но не пришла , пришла она позже и не одна.
Вообще только завтра, рабочий день кончился, пора домой.
тоже завтра попробую строку заменить, на которую вы указали
Кстати заказывал 3 штуки м590, в 2-х разных местах, рабочей оказалась только одна, на двух других КЗ по питанию
Я заказывал один набор, паял сам, работает :)
ну я тоже паял сам, КЗ в самих м590
Не получилось все равно, после открытия двери проходит вызов, а смс не отправляется
Почему, Dver' otkrita! Snyato s ohrani! и Start SMS send в одной строке? Может в этом причина не отправки смс?
Да, я разбираюсь с этим вопросом. старанно, но работало сначала.
по отдельности вызов или смс все работает, а вместе нехочет отправлять смс, хоть до звонка, хоть после.
ПС: все оказалось элементарно запутано - надо изменить в строке с find на println
и все заработало.
последний подправленный скетч:
Залил последний скетч - при открытии двери не приходит не вызов ни смс, от срабатывания ДД смс приходят.
Все работает, я "7" в наборе номера пропустил.
А почему для атмега8 скетч не компилируется? Места вроде хватает. Можете еще что то оптимизировамь, чтоб на атмега8 залез скетч?
Размер все-таки большой похоже, буду ардуино на атмега 168 заказывать. А если на атмега 8 попробовать без загрузчика залить hex, как думаете, получится?
Так много не оптимизировать, если только либо датчик двери, либо датчик движения удалять.
Я promini 328 5V заказал (еще хочу модем на плате поменьше заказать, чтоб вообще компактно было), да и esp8266 для изучения.
У меня вот такой есть- работает https://ru.aliexpress.com/item/1pcs-Smallest-SIM800L-GPRS-GSM-Module-MicroSIM-Card-Core-BOard-Quad-band-TTL-Serial-Port/32657711064.html?spm=2114.13010608.0.0.o9sWP1 , заказывал его после того, как пришли два м590 и оба не рабочие.
С помощью инженера программиста еще доработал скетч, добавив массив номеров (2 номера, можно больше добавить с небольшой доработкой).
остался открытым вопрос: как в монитор порта вывести номер звонящего?
завтра попытаюсь доработать до состояния: кто ставит на охрану тому и приходит смс.
установил arduino ide 1.8.1 скетч стал весить еще меньше:
Вызов и смс будет приходить на оба номера или только на тот номер с которого ставилась охрана?
Вызов и смс будет приходить на оба номера или только на тот номер с которого ставилась охрана?
Сейчас занимаюсь данным вопросом:
При постановке - смс тому кто поставил,
При сработке датчика двери вызов первому номеру, смс обоим номерам,
При второй сработке датчика движения смс обоим номерам.
Есть другие предложения?
Хочу еще добавить в смс номер с которого поставили на охрану и баланс на счете - незнаю есть ли смысл.
Подробней прочитал предыдущее сообщение, понял, пока сделано так, что смс посылается на все номера
Думаю это правильно
А при снятии или постановке охраны по звонку, смс нужна с информацией номера того, с чьего телефона была снята или поставлена охрана
А при снятии или постановке охраны по звонку, смс нужна с информацией номера того, с чьего телефона была снята или поставлена охрана
Сделано: при постановке/снятии смс подтверждение только тому кто ставит,
Сделаю: при сработке датчиков смс всем номерам, в смс номер поставившего на охрану.
очередная доработка:
при постановке/ снятии с охраны смс тому кто ставит/снимает.
при сработке датчика движения - смс обоим (датчик движения, состояние системы и с какого номера поставили на охрану).
при сработке датчика двери - вызов на первый номер и смс обоим (датчик двери, состояние системы и с какого номера поставили на охрану).
при постановке/ снятии с охраны смс тому кто ставит/снимает.
Не так не пойдет, смс всем надо отсылать. Кто то снимет с охраны и в это время я захочу пройти на объект. Я что сделаю? Правильно позвоню на охрану, что бы снять с охраны, т.к я не знаю, что она снята. Охрана вместо того, чтоб сняться наоборот встанет на охрау, и тогда бл... ревун всех соседей разбудит.
Если решите снять с охраны, а она снята, придет смс о постановке на охрану, и зачем снимать с охраны если не на объекте?
Тогда могу доработать скетч под Вашу необходимость (плевое дело - сделать отправку смс на оба номера)
В данный момент никак не могу победить получение баланса в нормальном виде.
Так допустим ее уже сняли с охраны со второго телефона, через 5 минут иду я и хочу снять с охраны, я то же не знаю, что охрана уже снята вторым телефоном, смс то получил только второй телефон.
Нет, кто ставит/снимает тому и смс о снятии/постаноаке.
Сняли вторым телефоном - туда смс off, ставите первым - на первый on.
Можете сделать так? поставили на охрау первым номером, всем остальным и первому приходит смс, что охрана снята номером таким то и при снятии так же - всем смс, что охрана снята таким то номером. снимают-ставят на охрану вторым номером-все остальные номера знают, что снимал или ставил на охрану второй номер.
Можете сделать так? поставили на охрау первым номером, всем остальным и первому приходит смс, что охрана снята номером таким то и при снятии так же - всем смс, что охрана снята таким то номером. снимают-ставят на охрану вторым номером-все остальные номера знают, что снимал или ставил на охрану второй номер.
прикрепил скетч, должно работать:
при постановке/снятии смс обоим номерам (состояние системы и звонил номер 89123456789).
Завтра попробую
крутая сига...
контроля наличия регистрации в гсм сети нету...
контроля зависания и ответа 590го - нету..
возможности выключить и включить 590й если он завис - нету..
мигаем светодиодом и если в это время прилетела смс - то нафик ее.. кому она нужна - теряем..
перезаписать номер хозяина чрез смс с паролем - не можем..
и т.д..
ЗЫ: лучше не морочится а китайскую купить - в десятки и десятки раз надежнее, хотя и китай - туфта.
Темой не ошибся? тебе сюда. http://arduino.ru/forum/obshchii/interesnoe-na-aliexpress-i-ebay
спасибо, не ошибся.
Сейчас ведь хомячкв набежит код себе переписывать - а оно же нни в дугу работать нормально не будет, только и виснуть в самые неожиданные моменты, по разным причинам виснуть. От причин висяков нужно сразу избавляться.
ЗЫ: если кто не понимает, приведу еще один пример проблемы в программе которых там валом:
while
(mySerial.find(
"STARTUP"
));
// ждем команды от модема
если по какой то причине
STARTUP не принимается. то в этом месте прога наглухо виснет и никто не понимает почему..в принципе это называется - "китаский код"... наверое именно так пишут китайцы на свои сигнализации которые везде всем продают. Тоже будем по китайски делать или как?
Советую избавлятся от привычки писать так же, типа проще.. или по крайней мере не использовать подобные вещи.
например если хорошо подумать, то STARTUP совсем там не нужен, абсолютно.. он ничего не рашает а только создает лишнюю проблему.
Я вначале писал: "у меня Arduino nano v3 (ATmega168), поэтому как ни крути а все не вместишь в него.
Для моих нужд самое то, тем более цена вопроса в итоге проучается около 300р. За эти деньги ничего похожего не купишь.