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

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

  1. dwk26111974

    dwk26111974 Гик

    Уважаемые форумчане, хочу поделиться опытом использования собраного девайса за весенний-летний,осенний период на даче.В целом- отработал на 5 балов, очень доволен! Автору и форумчанам, кто подсказывал советом итд огромное спасибо! Ни одного сбоя за весь период не было! Сейчас за зимний период, хочу собрать ещё один аналогичный девайс, тк 1 был собран практически на коленке, вспоминая опыт 20 давности))) К тому же, есть уже описание с ЛСД дисплеем. Но хочу в скетче изменить включение реле:
    Стандартные идут на низкий уровень включения, поэтому их что б они работали корректно со скетчем вручную перепаивал, сейчас этого делать не хочу.)) Подскажите, что ыв скетче изменить, что реле включались на низкий уровень? Спасибо.
     
  2. Aleks_NN

    Aleks_NN Нерд

    Надо инвертировать (заменить HIGH на LOW и наоборот) все состояния переменных unitX, в цикле void setup() для установки при включении, в прочих местах: состояниях и в автоконтроле. В автоконтроле очень важно! И осторожно :) А еще заодно в этом автоконтроле подправить сравнение температуры с дельтой, у автора там < и >, а правильнее поставить >= и <=, тогда к дельте не прибавится еще по градусу с обоих концов.
    :) мне интересно, как в этом коде подключают дисплей :) без автоконтроля нагрузок этот дисплей будет показывать вчерашнюю температуру.
     
    Последнее редактирование: 7 ноя 2016
  3. vovka1021

    vovka1021 Нерд

    кто подскажет как исправить в валдае запрос баланса
    +CMT: "+79677360000",,"16/11/07,00:22:02+32"
    Zapros
    Read fail Read fail Read fail Read fail
    Unit1status=0
    Unit2status=0
    Unit3status=0
    Unit4status=0
    Temperature street=0.00
    Vlazhnost street=nan
    Pressure=719.02
    sendTextMessage FINISH
    Message send: Valdai;0;0;0;0;21;31;0;0;0;0;0;0;0;0;0;;0;0;719;0

    ATD#102#

    +CUSD: 0," Vash balans 13.10 r.

    а мне нужно чтобы баланс успел попасть так

    +CMT: "+79677360000",,"16/11/07,00:22:02+32"
    Zapros

    ATD#102#

    +CUSD: 0," Vash balans 13.10 r.

    Read fail Read fail Read fail Read fail
    Unit1status=0
    Unit2status=0
    Unit3status=0
    Unit4status=0
    Temperature street=0.00
    Vlazhnost street=nan
    Pressure=719.02
    sendTextMessage FINISH
    Message send: Valdai;0;0;0;0;21;31;0;0;0;0;0;0;0;0;0;13;0;0;719;0
     

    Вложения:

  4. dwk26111974

    dwk26111974 Гик

    Спасибо за ответ, если я правильно понял где есть NIGH меняю на LOW ?
     
  5. Aleks_NN

    Aleks_NN Нерд

    Да, а где LOW на HIGH. Работать лучше с копией скетча :) чтобы было откуда новый материал для опытов взять. :))) Я последнее время архивировать релизы начал, уж больно велик соблазн, чего либо быстренько поправить, а потом мучительно думать в какой момент, какая нить фича, редкоиспользуемая, работать перестать могла и где бы раздобыть исправную версию :)
     
  6. dwk26111974

    dwk26111974 Гик

    Всегда делаю копии скетчей, тк знаний маловато))
    А NN не Нижний Новгород случайно?
     
  7. Aleks_NN

    Aleks_NN Нерд

    Совершенно не случайно, это именно Нижний Новгород.
    кстати, вот тут:
    https://yadi.sk/d/ZyApd9BTyAZ6U
    скетч для инверсных реле. Но, как я писал выше - это кривой код, который проще усыпить, чем мучить дальше.
     
  8. dwk26111974

    dwk26111974 Гик

    Вот и земляка встретил)) Я тоже из Нижнего, Ленинский р-он.
     
  9. vovka1021

    vovka1021 Нерд

    подскажте что дописать чтобы при восстановлении питания тоже отправлялось смс типа "питание восстановлено"
    Код (C++):

    //  Контроль внешнего питания
      sostPower = digitalRead(power);
      if (sostPower==LOW) {           //Проверка отключения внешнего питания
      if (sendSMSPow==false){
      sendTextMessage("WARNING! Valdai, MAIN POWER OFF!");
      sendSMSPow=true;}
      } else { sendSMSPow=false;}
     
  10. Aleks_NN

    Aleks_NN Нерд

    Кажись, как то так.

    Код (C++):

    --
    boolean  sostPower = HIGH;
    boolean sendSMSPow = false; // можно обойтись без него

    --

    if (digitalRead(power) != sostPower) {           //Проверка смены состояния
        sendTextMessage("WARNING! Valdai, MAIN POWER: " + digitalRead(power));  // Шлем СМС с состоянием пина(кривенько, конечно)
        sostPower = digitalRead(power);}
     
     
    Последнее редактирование: 8 ноя 2016
  11. Aleks_NN

    Aleks_NN Нерд

    Надо проверять, но правильнее посадить это дело на прерывание определив его как CHANGE, а там можно открыть невообразимые возможности для творчества. Например отправить смс, вырубить все устройства, кроме тех, что должны работать от АКБ, вырубить GSM шилд и свалить в слип-мод. После пробуждения включить GSM, опросить все датчики, включить потребителей, отэсэмэситься хозяину.
     
  12. vovka1021

    vovka1021 Нерд

    не совсем то. мне нужно чтобы посылались два разных текста в сообщения. а тут получается один текст.
     
  13. Aleks_NN

    Aleks_NN Нерд

    Да, чет загнался я, видимо поздновато уже было. Я тут вот такую конструкцию придумал:
    Код (C++):
    if (digitalRead(power) != sostPower) {
      if (digitalRead(power) == "LOW")//Проверка смены состояния // если питание пропало
        sendTextMessage("WARNING! Valdai, MAIN POWER is DOWN!");  // Шлем СМС - валдай даун
        else sendTextMessage("Valdai, MAIN POWER is UP!");  // Шлем СМС - валдай не даун
        sostPower = digitalRead(power);}
    Но тут я из блокнота вывалил, даже за синтаксис не уверен, надо проверять.
     
    Последнее редактирование: 8 ноя 2016
  14. vovka1021

    vovka1021 Нерд

    тоже не то. постоянно одни смс идут со статусом. а нужно только один раз при отключении питания и один раз при включении
     
  15. vovka1021

    vovka1021 Нерд

    тупо сделал так
    Код (C++):
    sostPower = digitalRead(power);
      if (sostPower==LOW) {
      if (sendSMSPowOFF==false){
      sendTextMessage("WARNING! Valdai, MAIN POWER OFF!");
      Serial.print("WARNING! Valdai, MAIN POWER OFF!");
      sendSMSPowOFF=true;}
      } else { sendSMSPowOFF=false;
      }

      sostPower = digitalRead(power);
      if (sostPower==HIGH) {
      if (sendSMSPowON==false){
      sendTextMessage("WARNING! Valdai, MAIN POWER ON!");
      Serial.print("WARNING! Valdai, MAIN POWER ON!");
      sendSMSPowON=true;}
      } else { sendSMSPowON=false;
      }
    поинимаю что можно было и короче, но моих знаний хватило только на это. зато работает. шлет одно смс на отключение питание и одно смс на включение питания
     
  16. 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
     
  17. Aleks_NN

    Aleks_NN Нерд

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

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

    kadr142 Нуб

     
  19. vovka1021

    vovka1021 Нерд

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

    Aleks_NN Нерд

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