SMS реле
  • Увидел на Амперке проект СМС реле только на шилде на базе модуля SIMCom SIM900R.
    Я подумал идея интересная но такого шилда у меня нет зато есть Cosmo GSM Shield с модулем от telit
    и вот что я изобразил по мотивам амперки. Вот мой вопрос будет ли этот код работать.


    /*
    Скетч для СМС розетки
    Используется плата Ардуино Uno/Duemilanove, шилд «Cosmo GSM Shield».
    */

    #include <avr/pgmspace.h>
    #include <TelitGSM.h>

    #define MESSAGE_ON "Power is On" // текст сообщения о включении розетки
    #define MESSAGE_OFF "Power is Off" // текст сообщения о выключении розетки
    #define MESSAGE_ERROR "Error...unknown command!" // текст сообщения об ошибке распознавания команды
    #define RELAY 13 // пин, к которому подключено реле
    bool stateRelay = false;

    String textMessage;
    char s[16];

    #define ALL_INCOMING_SMS_ENABLED (1) // 1 - разрешен приём команд со всех входящих/ 0 -только с номера CommandID
    const char RemoteID[] PROGMEM = "8915XXXXXXX"; // Шаблон номера, на который отправляем СМС
    const char CommandID[] PROGMEM = "8915XXXXXXX"; // Шаблон номера, с которого принимаем СМС
    const char PIN[] PROGMEM = "0000"; // ПИН-код! Поменяйте на свой!!! Иначе СИМ карта заблокируется!

    char SMStxt[162]; // Буфер для чтения текста СМС
    char SenderID[16]; // Буфер номер отправителя СМС
    String strSMS; // Буфер для обработки текста СМС в скетче
    unsigned int DataSendTimerMin; // Таймер отсчёта интервал отправки данных
    unsigned int UnreadSMSChkTimerSec; // Таймер принудительной проверки непрочитаных СМС
    unsigned char ForceModemReInit = 0; // Флаг принудительной переинициализации модема в случае обнаружения проблем

    // Интервалы выполнения задач в минутах
    unsigned char DataSendPeriodMin = 15; // Отправки данных
    #define UnreadSMSChkPeriodSec (10) // Принудительной проверки непрочитаных СМС
    #define BalanceChkPeriodMin (720) // Проверки баланса

    unsigned long currentMillisMin;
    unsigned long currentMillisSec;
    unsigned long previousMillisMin;
    unsigned long previousMillisSec; // Маркеры для отсчёта минут
    unsigned int MinutesCounter; // Счётчик минут

    void setup()
    {
    delay(4000); // Начальная задержка
    Telit.NewSMSindic(1); // Разрешаем индикацию новых СМС
    Telit.WaitSMS();
    MinutesCounter = 0; // Сброс минут
    previousMillisSec=previousMillisMin=millis(); // Запоминание системного времени

    // Ставим большие значения для запуска событий при старте
    //DataSendTimerMin = 16384;
    UnreadSMSChkTimerSec= 16384;

    pinMode(RELAY, OUTPUT); // настраиваем пин реле в режим выхода,
    digitalWrite(RELAY, LOW); // подаём на пин реле «низкий уровень» (размыкаем реле)

    } // END void setup()


    void loop()
    {
    unsigned long deltaMillis;

    currentMillisMin = currentMillisSec = millis(); // Считывем текущее системное время
    if(currentMillisSec - previousMillisSec > 1000)
    {
    UnreadSMSChkTimerSec ++; // Прошла 1 сек
    previousMillisSec = currentMillisSec=millis();
    }

    deltaMillis = currentMillisMin - previousMillisMin;
    if(deltaMillis > 60000) // Прошло 60 сек
    {
    int deltaMin;
    deltaMin = (int) (deltaMillis / 60000); // Определяем сколько минут прошло
    MinutesCounter += deltaMin; // Увеличиваем счетчик минут
    DataSendTimerMin += deltaMin; // Инкремент счётчиков задания
    currentMillisMin = previousMillisMin = millis(); // Начало нового отсчёта 60 сек.
    }

    // Потребовалась переинициализация модема
    if (ForceModemReInit)
    {
    ForceModemReInit = 0;
    ModemReInit(); // Принудительно переинициализируем модем
    Telit.WaitSMS(); // Ждем СМС ( TODO: отключение/включение индикации!)
    }


    if (Telit.CheckSMS()== 1) // Приходила ли СМС?
    { //Есть новое СМС - считываем в буферы текст и номер отправителя
    Telit.ReadSMS(NewSMS_index, (char*) SMStxt, (char*) SenderID); //
    Telit.DeleteAllSMS(); // Удалить СМСки (накапливать не будем!)
    CommandProcessorSMS(); // Обработка команд в СМС
    Telit.WaitSMS(); // Ждем СМС ( TODO: отключение/включение индикации!)
    }

    //Принудительная проверка непрочитанных СМС по времени.
    if (UnreadSMSChkTimerSec >= UnreadSMSChkPeriodSec)
    { // Истек интервал принудительной проверки СМС
    UnreadSMSChkTimerSec = 0;
    if (Telit.ReadListedSMS((char*) SMStxt, (char*) SenderID) > 0)
    {
    // Нашли пропущенное СМС!
    Telit.DeleteAllSMS(); // Удалить СМСки (накапливать не будем!)
    CommandProcessorSMS();// Обработка команд в СМС
    Telit.WaitSMS(); // Ждем СМС ( TODO: отключение/включение индикации!)
    }
    }
    } // END void loop()


    // Отправка СМС с состоянием системы
    /*
    void sendDataStatus(void)
    {
    unsigned int TrySMS = 8; // Количество попыток отправки СМС
    textMessage = "tekst.: ";
    char Out[textMessage.length()+1];
    textMessage.toCharArray(Out,(textMessage.length())+1);

    while (TrySMS--) // Отправка СМС
    {
    if (Telit.SendSMS(RemoteID, Out) > 0) {ForceModemReInit = 0; break;}
    else ForceModemReInit = 1;
    delay(1000); // пауза между попытками
    }

    unsigned char Try = 0;
    while (( Telit.CheckStatus() < 0) && (Try++ < 16)); // Нужно выждать паузу для регистрации в GPRS после отправки СМС.
    } // END void sendDataStatus(void)
    */



    // Повторная аварийная инициализация модема
    signed char ModemReInit(void)
    {
    while (Telit.Init(PIN)<0); // Делаем инициализацию
    Telit.NewSMSindic(1); // Убрать при проверке по опросу
    return 1;
    }


    // преобразование числа в строку с добавлением нуля если число <10
    String uitostr_0 (int a)
    {
    if (a >= 10) return String(a, DEC);
    else return ("0"+String(a, DEC));
    }

    // Обработчик команд в тексте входящих СМС
    int CommandProcessorSMS()
    {
    long parameter;
    if ((strstr_P(SenderID, CommandID)) || (ALL_INCOMING_SMS_ENABLED))
    { // Если номер отправителя совпал
    strSMS = String(SMStxt);
    if (strSMS.startsWith("On") == 0) // если сообщение — с текстом «On»,
    {
    digitalWrite(RELAY, HIGH); // включаем реле
    stateRelay = true;
    // на номер, с которого пришёл запрос,
    // отправляем смс с текстом о включении питания "OK! Power On"
    Telit.SendSMS(RemoteID, "OK! Power On");
    }
    else if (strSMS.startsWith("Off") == 0) // если пришло сообщение с текстом «Off»,
    {
    digitalWrite(RELAY, LOW); // выключаем реле
    stateRelay = false;
    // на номер, с которого пришёл запрос,
    // отправляем смс с текстом о включении питания "OK! Power Off"
    Telit.SendSMS(RemoteID, "OK! Power Off");
    }
    else if (strSMS.startsWith("State") == 0) // если пришло сообщение с текстом «State»,
    {
    // на номер, с которого пришёл запрос,
    // отправляем сообщение с состоянием реле
    if (stateRelay)
    {
    // "State: Power On"
    Telit.SendSMS(RemoteID, "State: Power On");
    }
    else
    {
    // "State: Power Off"
    Telit.SendSMS(RemoteID, "State: Power Off");
    }
    }
    else // если сообщение содержит неизвестный текст,
    {
    // отправляем сообщение с текстом об ошибке
    // "Error... unknown command!"
    Telit.SendSMS(RemoteID, "Error... unknown command!");
    }

    } // END if ((strstr_P(SenderID, CommandID)) || (ALL_INCOMING_SMS_ENABLED))
    } // END int CommandProcessorSMS()
  • Вот мой вопрос будет ли этот код работать.
    Проверьте, будет работать или нужно будет еще отладить этот код.
    В целом, задача решаемая.
  • у меня не получается почему то, удалось только отправить а вот принять и разобрать затык. Взял из примера для приведшего вашего шилда. Когда отсылаю 1 или 2 обратно сообщение неприходит

    /*
    Скетч для СМС розетки
    Используется плата Ардуино Uno/Duemilanove, шилд «Cosmo GSM Shield».
    */

    #include <avr/pgmspace.h>
    #include <TelitGSM.h>

    #define MESSAGE_ON "Power is On" // текст сообщения о включении розетки

    String textMessage;
    char s[16];

    #define ALL_INCOMING_SMS_ENABLED (1) // 1 - разрешен приём команд со всех входящих/ 0 -только с номера CommandID
    const char RemoteID[] PROGMEM = "+7915XXXXXXX"; // Шаблон номера, на который отправляем СМС
    const char CommandID[] PROGMEM = "+7915XXXXXXX"; // Шаблон номера, с которого принимаем СМС
    const char PIN[] PROGMEM = "0000"; // ПИН-код! Поменяйте на свой!!! Иначе СИМ карта заблокируется!

    char SMStxt[162]; // Буфер для чтения текста СМС
    char SenderID[16]; // Буфер номер отправителя СМС
    String strSMS; // Буфер для обработки текста СМС в скетче

    // Интервалы выполнения задач в минутах
    void setup()
    {
    delay(4000); // Начальная задержка
    while (Telit.Init(PIN)<0); // Регистрация в сети
    Telit.NewSMSindic(1); // Разрешаем индикацию новых СМС
    Telit.WaitSMS(); // Ждем СМС ( TODO: отключение/включение индикации!)
    } // END void setup()

    void loop()
    {
    if (Telit.CheckSMS()== 1)//Есть новое СМС
    {
    //Telit.ReadSMS(NewSMS_index, (char*) SMStxt); //
    Telit.ReadSMS(NewSMS_index, (char*) SMStxt, (char*) SenderID); //
    Telit.DeleteAllSMS();// Удалить СМСки (накапливать не будем!)
    strSMS = String(SMStxt);
    if(strSMS == "1")
    {
    while(Telit.SendSMS(RemoteID, "It is 1") < 0);
    }
    if(strSMS == "2")
    {
    while(Telit.SendSMS(RemoteID, "It is 2") < 0);
    }
    Telit.WaitSMS(); // Ждем СМС ( TODO: отключение/включение индикации!)
    }
    } // END void loop()
  • надежнее все же сделать по аналогии как в нашем примере, то что в CommandProcessorSMS();
    в вашем случае где-то так:

    int CommandProcessorSMS()
    {
    long parameter;
    if ((strstr_P(SenderID, CommandID)) || (ALL_INCOMING_SMS_ENABLED))
    { // Если номер отправителя совпал
    strSMS = String(SMStxt);
    if (strSMS.startsWith("#SET_DP:"))
    {
    parameter = strSMS.substring(8).toInt();
    if (parameter == 1) {

    }
    if (parameter == 2) {

    }
    }
    }
    }


    Соответственно, нужно отправлять смс с текстом: #SET_DP:1 или #SET_DP:2

    Можно переименовать SET_DP в любое другое, например param и т.п. Но в таком случае не забудьте поменять индекс в строке
    parameter = strSMS.substring(8).toInt();
  • ну вот опять не удалось выполнить команду по смс где ошибка?


    #include <avr/pgmspace.h>
    #include <TelitGSM.h>

    #define RELAY 13 // пин, к которому подключено реле
    bool stateRelay = false;
    String textMessage;

    #define ALL_INCOMING_SMS_ENABLED (1) // 1 - разрешен приём команд со всех входящих/ 0 -только с номера CommandID
    const char RemoteID[] PROGMEM = "+79155291580"; // Шаблон номера, на который отправляем СМС
    const char CommandID[] PROGMEM = "+79155291580"; // Шаблон номера, с которого принимаем СМС
    const char PIN[] PROGMEM = "0000"; // ПИН-код! Поменяйте на свой!!! Иначе СИМ карта заблокируется!

    char SMStxt[162]; // Буфер для чтения текста СМС
    char SenderID[16]; // Буфер номер отправителя СМС
    String strSMS; // Буфер для обработки текста СМС в скетче

    // Интервалы выполнения задач в минутах
    void setup()
    {
    delay(4000); // Начальная задержка
    while (Telit.Init(PIN)<0); // Регистрация в сети
    Telit.NewSMSindic(1); // Разрешаем индикацию новых СМС
    Telit.WaitSMS(); // Ждем СМС ( TODO: отключение/включение индикации!)
    pinMode(RELAY, OUTPUT); // настраиваем пин реле в режим выхода,
    digitalWrite(RELAY, LOW); // подаём на пин реле «низкий уровень» (размыкаем реле)
    } // END void setup()

    void loop()
    {
    if (Telit.CheckSMS()== 1) // Приходила ли СМС?
    { //Есть новое СМС - считываем в буферы текст и номер отправителя
    Telit.ReadSMS(NewSMS_index, (char*) SMStxt, (char*) SenderID); //
    Telit.DeleteAllSMS(); // Удалить СМСки (накапливать не будем!)
    CommandProcessorSMS(); // Обработка команд в СМС
    Telit.WaitSMS(); // Ждем СМС ( TODO: отключение/включение индикации!)
    }
    } // END void loop()

    int CommandProcessorSMS()
    {
    long parameter;
    if ((strstr_P(SenderID, CommandID)) || (ALL_INCOMING_SMS_ENABLED))
    { // Если номер отправителя совпал
    strSMS = String(SMStxt);
    if (strSMS.startsWith("#SET_DP:"))
    {
    parameter = strSMS.substring(8).toInt();
    if (parameter == 1)
    {
    delay(2000);
    while(Telit.SendSMS(RemoteID, "It is 1") < 0);
    digitalWrite(RELAY, HIGH);
    }
    if (parameter == 2)
    {
    delay(2000);
    while(Telit.SendSMS(RemoteID, "It is 2") < 0);
    digitalWrite(RELAY, LOW);
    }
    }
    }
    } // END int CommandProcessorSMS()
  • вот рабочий пример на скорую руку, можете еще оптимизировать.
    с проверкой баланса и проверкой связи.

    при инициализации, нужно подождать где-то минуту, чтобы все загрузилось.
    для проверки можете открыть терминал на скорости 38400 - будете видеть команды на модем.

    слать смс вида: #SET_DP:1 (загорится светодиод на пин13), #SET_DP:2 - погаснет.

    #define RELAY 13

    #include <avr/pgmspace.h>
    #include <Time.h>
    #include <TelitGSM.h>
    #include <TelitGPRS.h>

    char TimeZone = +3; //Ваш часовой пояс относительно GMT+00

    #define ALL_INCOMING_SMS_ENABLED (1) // 1 - разрешен приём команд со всех входящих/ 0 -только с номера CommandID
    const char RemoteID[] PROGMEM = "+7928XXXXXXX"; //Шаблон номера, на который отправляем СМС
    const char CommandID[] PROGMEM = "+7928XXXXXXX"; //Шаблон номера, с которого принимаем СМС
    const char PIN[] PROGMEM = "0000"; //ПИН-код! Поменяйте на свой!!! Иначе СИМ карта заблокируется!

    /*
    Настройки для доступа к GPRS, по умолчанию настройки Мегафона
    */
    const char ISP_IP[] PROGMEM = "internet"; // Для билайна Билайн: "home.beeline.ru", МТС: "internet.mts.ru"
    const char LOGIN[] PROGMEM = "gdata"; // Логин=Пароль
    const char BalanceID[] PROGMEM = "*100#"; // USSD номер проверки балланса
    const char NTP_IP[] PROGMEM = "ru.pool.ntp.org"; // Сервер NTP-синхронизации

    char IMEI[16]; //Буфер для считывания IMEI
    char SMStxt[162]; // Буфер для чтения текста СМС
    char SenderID[16]; // Буфер номер отправителя СМС
    String strSMS; // Буфер для обработки текста СМС в скетче
    signed int MoneyBalance; // Переменная в которой хранится текущий денежный баланс
    #define MoneyBalanceTreshold (30) // Нижний порог отправки СМС о снижении баланса
    unsigned int ConnectionCheckTimerMin; // Таймер отсчёта проверки GPRS соединения
    unsigned int DataSendTimerMin; // Таймер отсчёта интервал отправки данных
    unsigned int NTPSyncTimerMin; // Таймер отсчёта интервал NTP синхронизации
    unsigned int UnreadSMSChkTimerSec; // Таймер принудительной проверки непрочитаных СМС
    unsigned int BalanceChkTimerMin; // Таймер проверки баланса
    unsigned int SysTimeSyncTimerMin; // Таймер синхронизации часов Ардуино с часами модема
    unsigned char ForceModemReInit = 0; // Флаг принудительной переинициализации модема в случае обнаружения проблем

    /*
    Интервалы выполнения задач в минутах
    */
    #define ConnectionCheckPeriodMin (2) // Проверки GPRS соединения
    unsigned char DataSendPeriodMin = 15; // Отправки данных
    #define NTPSyncPeriodMin (360) // NTP синхронизации
    #define UnreadSMSChkPeriodSec (10) // Принудительной проверки непрочитаных СМС
    #define BalanceChkPeriodMin (720) // Проверки баланса
    #define SysTimeSyncPeriodMin (15) // Синхронизации часов Ардуино с часами модема

    unsigned long currentMillisMin;
    unsigned long currentMillisSec;
    unsigned long previousMillisMin;
    unsigned long previousMillisSec; // Маркеры для отсчёта минут
    unsigned int MinutesCounter; // Счётчик минут



    void setup() {
    pinMode(RELAY, OUTPUT);
    digitalWrite(RELAY, LOW);
    delay(2000); // Начальная задержка


    while (Telit.Init(PIN)<0); // Ждём инициализацию модема
    NTPSyncTime();
    TimeSync(TimeZone);
    Telit.NewSMSindic(1); // Разрешаем индикацию новых СМС
    Telit.WaitSMS();
    MinutesCounter = 0; //Сброс минут
    previousMillisSec=previousMillisMin=millis(); //Запоминание системного времени

    // Ставим большие значения для запуска событий при старте
    ConnectionCheckTimerMin = 16384;
    DataSendTimerMin = 16384;
    NTPSyncTimerMin = 0;
    UnreadSMSChkTimerSec= 16384;
    BalanceChkTimerMin = 16384;
    SysTimeSyncTimerMin = 0;
    }


    void loop() {

    unsigned long deltaMillis;

    currentMillisMin = currentMillisSec = millis(); // Считывем текущее системное время
    if(currentMillisSec - previousMillisSec > 1000)
    {
    UnreadSMSChkTimerSec ++;// Прошла 1 сек
    previousMillisSec = currentMillisSec=millis();
    }

    deltaMillis = currentMillisMin - previousMillisMin;
    if(deltaMillis > 60000) // Прошло 60 сек
    {
    int deltaMin;
    deltaMin = (int) (deltaMillis / 60000); // Определяем сколько минут прошло
    MinutesCounter += deltaMin; // Увеличиваем счетчик минут
    // Инкремент счётчиков задания
    ConnectionCheckTimerMin += deltaMin;
    DataSendTimerMin += deltaMin;
    NTPSyncTimerMin += deltaMin;
    //UnreadSMSChkTimerMin += deltaMin;
    BalanceChkTimerMin += deltaMin;
    SysTimeSyncTimerMin += deltaMin;
    // Начало нового отсчёта 60 сек.
    currentMillisMin = previousMillisMin = millis();
    }

    if (ForceModemReInit)
    {
    // Потребовалась переинициализация модема
    ForceModemReInit = 0;
    ModemReInit(); // Принудительно переинициализируем модем
    Telit.WaitSMS(); // Ждем СМС ( TODO: отключение/включение индикации!)
    }

    if (Telit.CheckSMS()== 1) // Приходила ли СМС?
    { //Есть новое СМС - считываем в буферы текст и номер отправителя
    Telit.ReadSMS(NewSMS_index, (char*) SMStxt, (char*) SenderID); //
    Telit.DeleteAllSMS(); // Удалить СМСки (накапливать не будем!)
    CommandProcessorSMS(); // Обработка команд в СМС
    Telit.WaitSMS(); // Ждем СМС ( TODO: отключение/включение индикации!)
    }


    if (BalanceChkTimerMin >= BalanceChkPeriodMin)
    { // Истек интервал проверки баланса
    BalanceChkTimerMin = 0;
    if (Telit.ReadBalance((char*)(SMStxt), BalanceID, &MoneyBalance) < 0) MoneyBalance = -9999;// Запрос балланса
    if (MoneyBalance < MoneyBalanceTreshold) sendBalanceAlarmSMS(MoneyBalance); // Если балланс ниже порогового, отпрвляем предупредительную СМС
    unsigned char Try = 0;
    while (( Telit.CheckStatus() < 0) && (Try++ < 16)); // Нужно выждать паузу для регистрации в GPRS после проверки балланса.
    Telit.WaitSMS(); // Ждем СМС ( TODO: отключение/включение индикации!)
    }

    if (UnreadSMSChkTimerSec >= UnreadSMSChkPeriodSec)
    { // Истек интервал принудительной проверки СМС
    UnreadSMSChkTimerSec = 0;
    if (Telit.ReadListedSMS((char*) SMStxt, (char*) SenderID) > 0)
    {
    // Нашли пропущенное СМС!
    Telit.DeleteAllSMS();// Удалить СМСки (накапливать не будем!)
    CommandProcessorSMS();// Обработка команд в СМС
    Telit.WaitSMS(); // Ждем СМС ( TODO: отключение/включение индикации!)
    }
    }

    if (ConnectionCheckTimerMin >= ConnectionCheckPeriodMin)
    { // Истек интервал проверки GPRS соединения
    ConnectionCheckTimerMin = 0;
    // Пора проверить состояние GPRS подключения!
    if ((Telit.CheckStatus() != 1))
    { // GPRS соединение не установлено!
    ModemReInit(); // Принудительно переинициализируем модем
    }
    Telit.WaitSMS(); // Ждем СМС ( TODO: отключение/включение индикации!)
    }


    if (NTPSyncTimerMin >= NTPSyncPeriodMin)
    { //Истек интервал cинхронизации с NTP
    NTPSyncTimerMin =0;
    NTPSyncTime();
    Telit.WaitSMS();
    }

    if (SysTimeSyncTimerMin >= SysTimeSyncPeriodMin)
    {// //Истек интервал синхронизации внутренних часов
    SysTimeSyncTimerMin = 0;
    TimeSync(TimeZone);
    Telit.WaitSMS();
    }

    }


    продолжение скетча в следующем сообщении (в одном сообщении не влезает все.
  • String textMessage;
    void sendBalanceAlarmSMS(int Money) {
    unsigned int TrySMS = 8; // Количество попыток отправки СМС
    if (Money != -9999)
    {
    textMessage = "Na vashem schete ";
    textMessage += String(Money, DEC);
    textMessage += " RUB!";
    }
    else
    {
    textMessage = "Oshibka opredeleniya balansa! ";
    }
    char Out[textMessage.length()+1];
    textMessage.toCharArray(Out,(textMessage.length())+1);
    //while(Telit.SendSMS(RemoteID, Out) < 0); //TODO: сделать счётчик попыток отправки
    while (TrySMS--)
    {
    if (Telit.SendSMS(RemoteID, Out) > 0) {ForceModemReInit = 0; break;} // Успешно отправили - выход
    else ForceModemReInit = 1;
    delay(1000); // пауза между попытками
    }
    unsigned char Try = 0;
    while (( Telit.CheckStatus() < 0) && (Try++ < 16)); // Нужно выждать паузу для регистрации в GPRS после отправки СМС.
    }





    // Повторная аварийная инициализация модема
    signed char ModemReInit(void)
    {
    while (Telit.Init(PIN)<0); // Делаем инициализацию
    while (Telit.ContextInit(ISP_IP) < 0); // Инициализируем контекст
    NTPSyncTime();
    TimeSync(TimeZone);
    Telit.NewSMSindic(1); // Убрать при проверке по опросу
    return 1;
    }


    //Синхронизируем время ардуино с модемом
    signed int TimeSync(int TZ)
    {
    int var_hr ; int var_min; int var_sec; int var_day; int var_month; int var_yr;
    Telit.getTime(&var_hr, &var_min, &var_sec, &var_day, &var_month, &var_yr); // Считать время из модема
    setTime(var_hr,var_min,var_sec,var_day,var_month,var_yr); //Синхронизируем время в ардуино
    adjustTime ((long) TZ * 60 * 60); // поправка часового пояса
    return 1;
    }


    //Синхронизируем время в модеме с NTP сервером
    signed char NTPSyncTime(void)
    {
    int var_hr ; int var_min; int var_sec; int var_day; int var_month; int var_yr;
    if (Telit.ContextActivation(LOGIN, LOGIN) > 0) //Инициализируем контекст
    {
    if ( Telit.NTPSync(NTP_IP, SMStxt) > 0 )
    {
    Telit.ContextDeactivation();
    return 1;
    }
    else
    {
    Telit.ContextDeactivation();
    return -1;
    }
    } else {Telit.ContextDeactivation(); return -2;}
    }

    // преобразование числа в строку с добавлением нуля если число <10
    String uitostr_0 (int a)
    {
    if (a >= 10) return String(a, DEC);
    else return ("0"+String(a, DEC));
    }


    /*
    Пример обработчика команд в тексте входящих СМС
    */
    int CommandProcessorSMS()
    {
    long parameter;
    if ((strstr_P(SenderID, CommandID)) || (ALL_INCOMING_SMS_ENABLED))
    { // Если номер отправителя совпал
    strSMS = String(SMStxt);
    if (strSMS.startsWith("#SET_DP:"))
    {
    parameter = strSMS.substring(8).toInt();

    if (parameter == 1)
    {
    digitalWrite(RELAY, HIGH);
    while(Telit.SendSMS(RemoteID, "It is 1") < 0);
    }
    if (parameter == 2)
    {
    digitalWrite(RELAY, LOW);
    while(Telit.SendSMS(RemoteID, "It is 2") < 0);
    }


    }
    }
    }
  • спасибо заработало

Привет, незнакомец!

Похоже, вы новенький! Чтобы пообщаться с нами, кликните на одну из кнопок ниже :)

Войти с помощью OpenID

В этом теме: