Губит людей не пиво

    Как известно из популярной песенки Вячеслава Невинного губит людей не пиво — губит людей вода. Особенно когда вода заканчивается в самый неподходящий момент. С этим что-то надо делать, тем более, что в столе валяется не используемый контроллер esp8266 и зеленый светодиод


    Вода, вода


    Думаю, многие из читателей Хабра по традиции пьют бутылированную воду, которую мы потребляем в офисе и дома. Не то, чтобы меня как-то напрягает сам процесс заказа воды, но известным образом это как то не по айтишному, звонить куда-то, вечно занято, то просят номер договора, а куда вести, а во сколько? Решил я все это прекратить и сделать этот процесс интереснее.


    Пишем письмо


    Фирма, которая доставляет мне воду не очень дружит с высокими технологиями, нет ни приложений, ни заказа с сайта, но вода очень хорошая. Чтобы заказать доставку надо звонить каждый раз оператору. Пишу в службу поддержки (все-же нашелся на сайте контактный e-mail).


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

    Кнопка, esp8266 и зеленый светодиод


    Ну, идея, как уже многие догадались до ужаса простая. Имея контроллер esp8266, программируем его на отправку электронного письма на адрес фирмы доставки воды, нажимая и удерживая кнопку до момента, когда загорится зеленый светодиод, сигнализирующий о успешном отправлении сообщения. Удержание кнопки длится 3-5 секунд. За это время устройство коннектится с домашним WI- FI и выполняет этот простейший код.

    #include <ESP8266WiFi.h>
    #include "Gsender.h"
    
    #pragma region Globals
    const char* ssid = "HomeWIFI";                           // имя вашейсети
    const char* password = "";                       // пароль сети 
    const char* letter_message = "Здравствуйте!  Пожалуйста, примите заказ на" 
    "2 бытылки воды и доставьте воду завтра по адресу Смоленский "
    "переулок ==== в 19 часов. Спасибо. Номер договора ====== Телефон +7909====="; 
    uint8_t connection_state = 0;                    
    uint16_t reconnect_interval = 10000;             // если не удалось связаться - повторим через 10 секунд
    #pragma endregion Globals
    
    uint8_t WiFiConnect(const char* nSSID = nullptr, const char* nPassword = nullptr)
    {
        static uint16_t attempt = 0;
        Serial.print("Connecting to ");
        if(nSSID) {
            WiFi.begin(nSSID, nPassword);  
            Serial.println(nSSID);
        } else {
            WiFi.begin(ssid, password);
            Serial.println(ssid);
        }
    
        uint8_t i = 0;
        while(WiFi.status()!= WL_CONNECTED && i++ < 50)
        {
            delay(200);
            Serial.print(".");
        }
        ++attempt;
        Serial.println("");
        if(i == 51) {
            Serial.print("Connection: TIMEOUT on attempt: ");
            Serial.println(attempt);
            if(attempt % 2 == 0)
                Serial.println("Check if access point available or SSID and Password\r\n");
            return false;
        }
        Serial.println("Connection: ESTABLISHED");
        Serial.print("Got IP address: ");
        Serial.println(WiFi.localIP());
        return true;
    }
    
    void Awaits()
    {
        uint32_t ts = millis();
        while(!connection_state)
        {
            delay(50);
            if(millis() > (ts + reconnect_interval) && !connection_state){
                connection_state = WiFiConnect();
                ts = millis();
            }
        }
    }
    
    void setup()
    {
    pinMode(5, OUTPUT);
        Serial.begin(115200);
        connection_state = WiFiConnect();
        if(!connection_state)  // if not connected to WIFI
            Awaits();          // constantly trying to connect
    
        Gsender *gsender = Gsender::Instance();    // Getting pointer to class instance
        String subject = "Заказ на воду";
        if(gsender->Subject(subject)->Send("water*****@mail.ru", letter_message)) {
            Serial.println("Message send.");
    digitalWrite(5, HIGH);  // включаем зеленый светодиод - все ОК
        } else {
            Serial.print("Error sending message: ");
            Serial.println(gsender->getError());
    
        }
    
    }
    
    void loop(){}
    

    Всё необходимое умещается на ладони. Программирование микроконтроллера хорошо описано к примеру, в этой статье.


    Код использует библиотеку Gsender.h, скачать которую можно здесь. Особенностью библиотеки является то, что она отправляет сообщения с gmail, поэтому нужно открыть для проекта гугловский адрес электронной почты. В самом тексте библиотеки необходимо указать логин и пароль от вновь открытой почты, но в виде base64 зашифрованных фраз. Используем для этого, к примеру, этот сервис. Должно быть что-то подобное.

    const char* EMAILBASE64_LOGIN = "Y29zbWkxMTExMUBnbWFpbC5jb20=";<br>const char* EMAILBASE64_PASSWORD = "TGFzZGFzZDEyMzI="; 
    

    Возможно, системы безопасности GMAIL запросят разрешения использовать подобное подключение. Разрешите.

    Кнопка лишь подает питание на контроллер на время отработки кода. На любой из портов подвесим светодиод для сигнализирования успешной передачи сообщения.

    Устройство коннектится и питается от двух батареек и ресурса хватит на 1000 заказов, т.е. лет на 10. Устройство можно сконфигурировать при желании из сети и навесить на него кучу всякий дополнительных примочек, что, в принципе, особо то и не нужно.

    Не смотря на простоту, сама идея мне показалась симпатичной и в духе действительно реальной интернет-вещи. Используя этот принцип можно реализовать простейшие функции, к примеру, вызов такси, любимой пиццы или положить такую «умную» кнопку рядом с хворающим родственником. Нажал — смс-ка прилетела. Удобно и можно в нужный момент помочь больному. Для отправки смс можно, к примеру, использовать сервис IFTTT.

    Всем хорошего дня!
    Support the author
    Share post

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 34

      +3
      Вы только что изобрели «Amazon Dash Button»
      осталось только оформить в красивый корпус и предложить той-же самой компании по доставки воды.
        0
        Вы только что изобрели «Amazon Dash Button»
        осталось только оформить в красивый корпус и предложить той-же самой компании по доставки воды.!

        Какая досада...)))
        • UFO just landed and posted this here
            0
            4.99
              +1

              И добавить, что это со скидкой в 30% и предложение ограничено.

            +1
            А я вот сам лично получаю какое-то просто неописуемое удовольствие от хардварной техники, например. Казалось бы, можно на компе в почтовом клиенте создать действие автоматической отправки почты, но нет, сам бы такую кнопку заимел бы. Слушать музыку и радио на компе — дак нет, до сих пор имею музыкальную стойку, где все разделено — тюнер, сидюк, кассетная дека (последнияя на всякий случай), и мало того, собрал ее полностью всего пару лет назад. Какая-то магия просто. Про книги и журналы и вовсе не говорю, запах бумаги и клея ничего не заменит, есть читалки даже без задней подсветки вообще, но все-равно неприятно глазам.
            +1
            //оффтоп
            Лучше поставьте себе мембранный фильтр обратного осмоса, вода будет чище и картриджи раз в год стоят дешевле, чем покупка воды.
              +1
              Минерализатор только не забыть
                +1
                Зачем он нужен? Только воду портить.
                  –1
                  Потому что без него долго не протяните :)
                    +2
                    С чего бы вдруг?

                    Предваряя ссылки на всякие страшилки про дистиллированную воду: человек из воды получает настолько ничтожное количество минералов и микроэлементов, что их полное отсутствие в воде — вообще не окажет никакого влияния. Зато фильтр гарантированно избавит от того, что пить не хотелось бы.

                    Лучше гарантированно избавиться от хороших и плохих примесей вместе, чем ради неразличимого количества полезных — пить еще и некоторое количество плохих.
                      0
                      Как же мне тогда что-то вам доказать, если ссылки кидать вы мне запретили? В прочем могу и вашим уровнем аргументации — минералы нужны, и лучше с ними чем без них. А вообще, пейте дистиллят, лично вам я не запрещаю.

                      А другие могут ознакомиться с исследованием ВОЗ http://www.who.int/water_sanitation_health/dwq/nutrientsindw.pdf 12-я глава.
                        +3
                        И где там «долго не протянете»? Увы — нигде.
                        Проскроллил по диагонали — в основном все о кальции и магнии, про реальную опасность — регион с пониженным содержанием фтора и отсутствие его в воде, что вредно для развития зубов у детей — не нашел. Но может плохо искал.
                        Более того, там честно сказано в выводах, что исследования по употреблению полностью деминерализованной воды сильно устарели и результаты могут быть не достоверные, а новых не проводилось.

                        А теперь немного посчитаем.
                        По нормам того же ВОЗ — максимум кальция в воде для питья — примерно 0,1 г на литр. Это очень много, такая вода неприятна на вкус и большее содержание выводит ее из питьевой категории, в ней почти не пенится мыло, очень плохо стирается белье и образуется огромное количество накипи при кипячении. Суточная норма потребления кальция — 1 г. То есть надо выпивать в сутки 10 литров жесткой воды или 20+ литров хорошей, не жесткой. Такое количество воды — может быть смертельно.

                        С остальными минералами из вода — примерно так же картина.
                          +1
                          В хим. Академии множество преподавателей заваривают чай в бидистиляте. И весьма бодро выглядят. И делают это на протяжении большого количества лет, некоторые дольше чем я живу.

                          С обычной водой прилетает максимум 200-300 мг. Кальция, это не то количество о котором стоит беспокоиться. Но вот о чём стоит беспокоиться, это о камнях в почках.
                            –1
                            А Вы предложите им пить не чай, в котором содержится довольно много чего, а тот самый бидистиллят. Будет очень интересно узнать их реакцию… :))

                            P.S. Камни в почках тут ни при чём: это, в первую очередь, наследственность.
                              +1

                              — А! Понял!
                              По, Вашему, мнению, люди употребляют (питаются) исключительно водой.
                              — Вопросов, комментариев больше не имею.
                                –1
                                Благодарю Вас за рассказ о моём мнении. :)
                0
                А кто отслеживает остатки воды?
                  0
                  еще можно к мк прикрутить датчик наличия воды (есть разные варианты) и полностью автоматизировать заказ воды — умный дом должен сам определять когда нужно купить воду)
                    0
                    А что если у вас закончилась первый бутыль, но рядом стоит еще одна?
                    Тогда система подумает, что вода закончилась и закажет еще? -На этот случай можно поставить таймаут на то, чтобы успеть заменить бутыль. Но что если к вам пришли гости и выпили всю воду, и собрались уходить, а вы пошли их провожать? Тогда истечет время таймаута и система опять закажет воды.

                    Я к тому, что в данном случае полная автоматизация будет излишней.

                    Если конечно, еще и не автоматизировать замену бутылей, тогда имеет смысл делать полную автоматизацию :)
                      0
                      Бутыли в шкаф. Под шкаф (или под полку с водой) весы. Когда шкаф становится слишком лёгким на продолжительное время и вода в куллере кончается — заказывать воду.
                      0

                      Можно и так. Принимаем, что заказываем всегда по 4 бутыли, бутыль выпивается за 2 дня, доставка за 2-4 дня. Тогда установка бутыли декрементирует счётчик "бутылок в наличии", а когда бутылок остаётся 2, считаем прогноз и по таймеру заказываем воду. Тут только надо будет статистику где-то вести, чтоб расход предсказывать, на сервере или на карточке.

                        0
                        Можно немного иначе, но через небольшое усложнение системы и самодисциплину :). Решение вижу таким: устанавливается датчик давления, и на него помещается бутыль с водой. Далее вступает в работу простейшая логика: сравнивается наличие воды в установленной в кулер бутыли и наличие полной бутыли в месте установки датчика давления. Если в кулере вода заканчивается (0), а рядом стоит полная бутыль (1), то ничего не происходит (0). Ну или какое-либо напоминание владельцу о том, что вода на исходе. Если же воды в кулере нет (0), как и нет полной бутыли рядом (либо пустая) (0), происходит автоматический заказ новой поставки (1). Но это порождает необходимость постоянно хранить полные бутыли в месте установки датчика давления. Как-то так :)
                          0

                          Тут можно долго усложнять, как с автоматическим включением света в туалете :) и геркон, и тензодатчик, и оптопару, и подключение к 1С, гуглокалендарю и системе электронного документооборота, чтобы после дней рождений и корпоративов всегда была автоматически оплаченная вода… Тут каждый сам проводит границу здравого смысла.

                            0
                            Ещё немного, и в этом обсуждении будет изобретён водопровод.
                      0
                      По коду вопрос (с листа читаю не очень уверенно, простите)
                      Как я понял, кнопка просто включает питание. А за сколько секунд происходит полный цикл (включение, инициализация ESP, подключение к вайваю и отправка)?
                      И светодиод у вас просто включается, когда до него в коде очередь доходит или по какому-то событию?
                        0
                        5 секунд
                        –7

                        А что на вводной картинке делает оппонент Навального?

                          +3

                          Пиво пьёт.

                          +1
                          Я бы добавил сразу событие в гугл-календарь для того, чтобы быть дома к назначенному времени.
                            0
                            А если забыл, что уже нажимал и нажал повторно, два заказа пришлют?
                              0
                              Повторно нажали и удерживаете несколько секунд — то да.
                              0

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

                                0

                                Зачем, если с телефона можно письмо спокойно из любого места отправить? Да и редактировать его явно проще при необходимости.

                                Only users with full accounts can post comments. Log in, please.