Управление отоплением в загородном доме (GSM)

Тема в разделе "Глядите, что я сделал", создана пользователем Вячеслав, 6 дек 2012.

  1. vovka1021

    vovka1021 Нерд

    проверьте valdai работает баланс или нет??? или у меня у одного он не хочет работать. если не работает то как правильно реализовать его отправку?
    он у меня не успевает придти вперед опроса датчиков. и в результате не попадает в отправку в запросе со всеми данными на телефон
    +CMT: "+79677360000",,"16/11/09,00:37:31+32"
    Zapros
    zapros balansa
    Read failRead failRead failRead fail
    Unit1status=0
    Unit2status=0
    Unit3status=0
    Unit4status=0
    Temperature street=0.00
    Vlazhnost street=nan
    Pressure=715.75
    send Text Message FINISH
    Message send:
    Valdai;0;0;0;0;20;40;0;0;0;0;0;0;0;0;0;++++должен попасть сюда +++;0;0;715;0

    +CUSD: 0," Vash balans 13.10 r.
    SMS-napominaniya: Vy ne zabu
     
  2. Aleks_NN

    Aleks_NN Нерд

    У меня на плате сейчас насобрано всего, а GSM нету, не хочется все это дело разбирать. Как руки дойдут, после одной дурацкой задачки, я посмотрю, самому интересно стало, но там, скорее всего какая нить скобка пропущена, а может переменные в остальном коде пересекаются :) Можно конечно и на лампочках потренироваться... Но, это не наш метод :)

    Можно попробовать перенести
    int sostPower; // Сосотояние внешнего питания
    из основной программы в самый верх скетча, например поставить сразу после
    int power = 10; // Контроль внешнего питания .
    Далее, в
    void setup()
    присвоить
    pinMode(power, INPUT);
    boolean sostPower = HIGH;
    Иначе действительно бардак получается, переменную, которую мы должны один раз определить в установках, затем сравнивать с текущими данными перед условием и при выполнении условия устанавливать... У нас сбрасывается при каждом проходе основной программы.
     
    Последнее редактирование: 9 ноя 2016
  3. kadr142

    kadr142 Нуб

     
  4. vovka1021

    vovka1021 Нерд

    Сижу мучаю Валдай, так и не могу заставить отображать баланс. Помогите с кодом. Screenshot_20161109-172738.png
     
  5. Aleks_NN

    Aleks_NN Нерд

    А если вынуть симку из шилда, вставить её в телефон, вручную набрать СМС соответствующего наполнения... Телефон все как надо отобразит?
     
  6. vovka1021

    vovka1021 Нерд

    так баланс и в мониторе нормально отображается, вот только не ловиться и не вставляется в смс
    +CMT: "+79677360000",,"16/11/09,00:37:31+32"
    Zapros
    zapros balansa
    Read failRead failRead failRead fail
    Unit1status=0
    Unit2status=0
    Unit3status=0
    Unit4status=0
    Temperature street=0.00
    Vlazhnost street=nan
    Pressure=715.75
    send Text Message FINISH
    Message send:
    Valdai;0;0;0;0;20;40;0;0;0;0;0;0;0;0;0;++++должен попасть сюда +++;0;0;715;0

    +CUSD: 0," Vash balans 13.10 r.
    SMS-napominaniya: Vy ne zabu
     
  7. Aleks_NN

    Aleks_NN Нерд

    Самое первое, что приходит на ум - увеличить паузу (delay(5000);), вот тут:
    ...
    gprsSerial.print("ATD#102#\r");
    delay(5000);
    while(gprsSerial.available()>0){
    ...
    это в районе 429 строки. Пробовали?
     
  8. vovka1021

    vovka1021 Нерд

    все пробовал, уже устал. вот нашел другой код. он работает, но когда вставляешь его в валдай работать отказывается. хотя может я что то не нак вставляю. х.з
    Код (C++):
    #include <SoftwareSerial.h>
    SoftwareSerial gprsSerial(2, 3);

    String currStr = "";

    void setup(){
      Serial.begin(9600);
      gprsSerial.begin(9600);
      //   Настраиваем приём сообщений
      //   Между командами даём время на их обработку
      gprsSerial.println("AT+CMGF=1");        //устанавливает текстовый режим смс-сообщения
      delay(300);
      gprsSerial.println("AT+CSCS=\"GSM\"");  //режим кодировки текста
      delay(500);
    // gprsSerial.println("AT+IFC=1, 1\r");    //устанавливает программный контроль потоком передачи данных
    // delay(300);
    // gprsSerial.print("AT+CPBS=");           //открывает доступ к данным телефонной книги
    // gprsSerial.print((char)34);
    // gprsSerial.print("SM");                 // SIM-карты
    // gprsSerial.print((char)34);
    // gprsSerial.println("");
    // gprsSerial.print((char)13);
    // delay(300);
      gprsSerial.println("AT+CNMI=1,2,2,1,0");//включает оповещение о новых сообщениях,
      // новые сообщения приходят в следующем формате:
      // +CMT: "<номер телефона>", "", "<дата, время>",
      // а на следующей строчке с первого символа идёт содержимое сообщения
      delay(300);

      balance();
    }

    void loop()
    {
      if (gprsSerial.available()){
        char currSymb = gprsSerial.read();
        if ('\r' == currSymb) {  //если символ перевод каретки
          if  (currStr.startsWith("+CUSD: 0,")) {
            int zzz = currStr.indexOf('?.?');
            String bal=currStr.substring(10,zzz-3); //баланс на сим карте
            Serial.print(bal);
          }
          currStr = "";
        }
        else if ('\n' != currSymb) { //если символ НЕ новая строка
          currStr += String(currSymb);
        }        
      }
    }

    void balance () {
      gprsSerial.println("ATD*102#");  //запрос баланса
      delay(300);
      Serial.println("zapros balansa");
    }
    попробуйте его вставить в валдай, может у вас получится
     
  9. Aleks_NN

    Aleks_NN Нерд

    Но и старый же работает, просто вставляет данные о балансе не туда. Надо родной код ковырять. У меня такой возможности сейчас нет, собран другой проект... И, эта беда, если я правильно понял проблему, она может зависеть от оператора, если ответ не соответствует тому, с чем работал автор, ждать нормального результата сложно.

    Блин :))) кажись все очень просто. Попробуй заменить вот это:
    if(data == 'e'){
    вот на это:
    if(data == 's'){

    я про старый код.
     
  10. vovka1021

    vovka1021 Нерд

    не проходит.
     
  11. Aleks_NN

    Aleks_NN Нерд

    Угу, это от того, что в строке "+CUSD: 0," Vash balans 13.10 r." две буквы 's'. Видимо автору повезло и его ОПСОС отвечает на английском, что то вроде - Your balanse 13.10 r. Вот и выбирает он между буквами 'e' и 'r'.
    Надо учиться пользоваться indexOf() и substring().
     
  12. vovka1021

    vovka1021 Нерд

    Впринципе получилось сделать отправку баланса, но только по отдельному запросу. Вот теперь сижу думаю как заставить его в общую команду ответа вставить. Screenshot_20161111-025655.png
     
  13. vovka1021

    vovka1021 Нерд

    вот как у меня получилось визуально преобразить валдай Screenshot_2.png . вот только как то не серьезно реализован периметр на проволочки. кто поможет прикрутить датчик движения???
     
  14. dwk26111974

    dwk26111974 Гик

    Всем доброго дня. уважаемые амперщикиж. Перед повторной сборке данного чудного девайса, задался вопросом, как реализовать (скетч 1 от Вячеслава) охранную систему не на герконе, а на датчике движения PIR HC-SR 501, может кто то уже делал подобное? Буду благодарен за совет.
     
  15. vovka1021

    vovka1021 Нерд

    тотже вопрос интересует. Может вместе осилим???
     
  16. dwk26111974

    dwk26111974 Гик

    Я бы с радостью, но из меня помошник в скетчах никакой))) Если не помогут коллеги, сделаю через реле, ну а если что узнаю обязательно напишу.
     
  17. alp69

    alp69 Форумчанин

    А в чем проблема? Обрыв провода (срабатывание геркона) вызывает изменение состояния пина. Точнее изменение логического уровня на пине. Датчик то же самое делает.
     
  18. dwk26111974

    dwk26111974 Гик

    Отличная новость))) Те я правильно понял, что переделки скетч не потребует?
     
  19. alp69

    alp69 Форумчанин

    Если судить по первому скетчу - нет. Но будет работать не совсем комфортно в плане перевзятия под охрану. Остальные 37 страниц вычитывать с телефона... не осилю :) Выложите вариант, используемый Вами.
    Единственное, что нужно учесть - это то, что датчик выдает при сработке. Ноль или единицу.
     
    Последнее редактирование: 16 ноя 2016
  20. alp69

    alp69 Форумчанин

    Другой вопрос в том, что в первом скетче проблема с перевзятием под охрану (учтено на последующих страницах). И нужно определяться с логикой работы:
    1. В течение какого периода времени устройство все поступившие сработки будет интерпретировать как одну. И как реагировать - смс после первой же сработки и потом утихнуть на заданное время. Или подсчет количества сработок за интервал времени, а потом смс (плюс варианта - возможно организовать фильтрацию "ложняков").

    Или

    2. После первого срабатывания и отправки смс устройство остановит реакцию на сработки до получения команды "сброс" (взятие под охрану повторно).

    3. Или сборная солянка из вариантов.

    Вот тогда нужно допиливать скетч.
     
    Последнее редактирование: 16 ноя 2016