Напоминания

Тема в разделе "lan143", создана пользователем lan143, 18 янв 2015.

  1. lan143

    lan143 Погроммист Команда форума

    Инженерная мысль шагает все дальше и дальше :) Небольшая предыстория.
    Привезли мне недавно родители в качестве гуманитарной помощи 10 кг картошки. Располагать её негде было, поэтому поставил на балкон. Ну и благополучно забыл, как это у меня бывает :) А потом морозы -30, ну в и общем когда я про неё вспомнил, она уже была вся испорченная :-( Решение проблемы мне пришло в голову сегодня, когда привезли 3 курицы, и т.к. в морозилке все было занято, то пришлось положить их временно на балкон.
    А решение такое, нужна система, которая будет напоминать о чем-то при изменении температуры. Напоминалка самописная, под свои нужны у меня уже была. Нужно было её немного допилить.
    Добавляем новые поля в модель, обновляем вьюху, получаем вот такую форму:
    Скриншот 2015-01-18 15.48.01.png
    Нужно было решить проблему, откуда собственно брать текущую температуру на улице. И тут я вспомнил про расширение для браузера от Gismeteo.
    index (1).jpg
    Вот оно. По быстрому вскрываем код, находим места запроса информации о погоде. Как оказалось, у них есть свое API, не документированное, но тоже сойдет. Изучаем, и пишем простой хелпер, который будет запрашивать информацию о погоде.
    Код:
    module WeatherHelper
      require 'nokogiri'
      require 'open-uri'
    
      def get_weather
        xml = Nokogiri::XML(open("http://554838a8.services.gismeteo.ru/inform-service/87963fc3c2447108a296270d050d951c/forecast/?city=11961&lang=ru&ver=2_4_3"))
        result = {}
        fact = xml.xpath("//fact")
        result["t"] = fact.xpath("//values").attr('t').to_s # Текущая температура
        result["p"] = fact.xpath("//values").attr('p').to_s # Давление
        result["hum"] = fact.xpath("//values").attr('hum').to_s # влажность воздуха
        result["hi"] = fact.xpath("//values").attr('hi').to_s # по ощущениям
        result["water_t"] = fact.xpath("//values").attr('water_t').to_s # температура воды
        result["descr"] = fact.xpath("//values").attr('descr').to_s # текстовое описание
        return result
      end
    end
    
    Вот и все, теперь у нас есть актуальная информация о температуре. А дальше простая математика, больше-меньше, и получаем напоминалку, которая будет срабатывать при указанном условии.
    Скриншот 2015-01-18 15.48.25.png
    Я специально накинул пару градусов, ведь на балконе немного теплее чем на улице.
    Конечно, точность у системы изрядно хворает. По хорошему нужно ставить датчик температуры. Но есть некоторые проблемы. Например, как транслировать сигнал с датчика температуры в инет. Не хочется постоянно компьютер включенным держать ради этого, поэтому нужно будет разрабатывать какое-то миниатюрное устройство, которое будет большую часть времени спать, а допустим раз в 10 минут просыпаться, собирать информацию, и через WiFi отправлять её в интернеты.
    Ну а сейчас я работаю над голосовыми оповещениями. И для чтения текста будут использоваться сервисы гугла. Пример голосового оповещения: https://translate.google.ru/translate_tts?ie=UTF-8&q=внимание. вам нужно срочно выполнить Убрать курицу с балкона в холодильник&tl=ru&total=1&idx=0&textlen=6&client=t
     
    Последнее редактирование: 18 янв 2015