Сервер умного дома на Raspberry PI с поддержкой управления GPIO

Тема в разделе "Raspberry Pi", создана пользователем MrSmit_ligarobotov, 2 янв 2016.

  1. Привет! Хотел попросить вашей помощи и опыта в разработке сервера.
    Если у вас был опыт в создании сервера на Linux-подобных системах, то пожалуйста подкиньте идеи, материалы или информацию.
    Знания в HTML имею минимальные, а вот на C++ пишу уже 3-4 года!
    ДАНО:
    Имеются цифровые датчики температуры DTH11, цифровые датчики температуры DHT22 и релюшки!
    НАЙТИ:
    Надо склепать сервер на Raspberry с доступом из локальной сети (Что вообще точно будет работать на любом сервере в мире) с выводом в виде текста значений датчика преобразованных в температуру и влажность, а также управление цифровыми реле при помощи каких нибудь "кнопочек на сайте"!
    Если вам не трудно, то помогите школьнику пожалуйста.
     
    egordorichev нравится это.
  2. Jeid

    Jeid Нерд

    Сам сейчас начинаю заниматься нечто подобным. Можно использовать веб-сервер apache и с помощью php скриптов получать данные, либо поднять свой сервер на питоне. Я выбрал питон, сейчас ковыряюсь потихоньку, как сделаю что-нибудь дельное - обязательно поделюсь.
    Вообще мне кажется что на малинке удобнее будет на python скрипты писать, чем на с++
     
  3. Alex19

    Alex19 Гуру

    Вы делаете сервер умного дома, так почему бы не воспользоваться готовыми, хорошо описанными вариантами?

    К примеру этот - http://forum.amperka.ru/threads/ard...y-pi-2-openhab-Умный-дом-азы-управления.5043/.

    Создание аналогичных систем с 0-ля, потребует много сил, знаний и времени. Другое дело, если Вам нужно, что-то уникальное, к примеру Web управление Вашим роботом, станком, каким-то оборудованием или есть желание понять все от А до Я.
     
  4. Jeid

    Jeid Нерд

    Смотря какую цель перед собой поставить, если просто сделать и всё, то подойдут и хорошо описанные готовые варианты. А если цель научиться и понять как оно всё работает, то тут лучше сделать свой велосипед, пусть и с квадратными колёсами по началу, потом их можно доработать напильником :)
    К тому же лично мне как-то не приглянулся openhub, возможно потому, что сам являюсь web разработчиком и мне проще сделать своё заточенное именно под мои нужды.
     
  5. ИгорьК

    ИгорьК Гуру

    Это чрезвычайно не уникальная, но уважаемая фраза.

    Все таки дам совет, хотя он в таких ситуациях мало помогает.
    Мастерство мастерством, но умный дом, это дом, который почти не имеет интерфейса. Он сам все решает и им управлять не нужно. (Этой машине руль не нужен).

    Изобретение велосипеда с квадратными колесами начинается, обычно, с проработки красивого интерфейса классным программистом. Но дом как был так и остается сообществом розеток и выключателей, управляемых через кнопку на экране. Это, конечно, круто, особенно кому-то показать, но так неудобно: неумный, неудобный дом.

    В общем, полагаю, стоит раобраться, как с помощью web-технологий, "сообразительный" дом будет принимать некоторые решения.

    Строго, ИМХО (по моему скромному мнению). Ничуть Вас не учу жить и желаю всяческих успехов, а также приятного хождения по граблям!

    PS. На Питоне действительно удобнее работать, чем на С. Здесь Вы абсолютно правы.
     
    zaynus нравится это.
  6. Jeid

    Jeid Нерд

    Тут вы наверное не правильно поняли, с помощью HTML, CSS, JS сделать просто интерфейс с показаниями дома и минимальным управлением/настройками, сделать так, чтобы он хорошо смотрелся как на смартфоне, так и на ПК. Да и для личного опыта полезно самому понять как реализовано общение веб-интерфейса со всеми датчиками и.т.п

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

    К тому же интересно поковыряться, понять как работает тот или иной датчик/схема, нежели просто собрать как конструктор по готовой схеме и нифига не понимать как и почему оно всё работает.

    Как я уже вам говорил, цель не создать готовый продукт, цель научиться это делать на примере какого-то определённого проекта
     
  7. ИгорьК

    ИгорьК Гуру

    Дык... Я все понял и говорил именно об этом. И именно это Вы не услышали: умному дому не нужен никакой хорошо смотрящийся интерфейс. Он ему вообще не нужен. Да-да! Именно так.
    Но именно этот интерфейс Вы ему и сделаете (web-программирование).
    А дальше убьетесь писать скрипты и согласовывать все это между собой.
    В конце концов функциональность победит и Вы сползете на один из нескольких существующих проектов, не обязательно OpenHab, их есть немало. И первое, что Вы будете делать - проклинать хорошо смотрящийся интерфейс (потому что его надо будет переделывать под каждую новую кнопочку).
    Но я Вам искренне желаю удачи: опыт то будет колоссальный!
     
  8. Jeid

    Jeid Нерд

    Вот вот, всё ради опыта, для того чтобы понимать как эти проекты устроены
     
  9. Alex19

    Alex19 Гуру

    Тогда всех благ в изучении!

    Самому нужно сделать Web интерфейс для управления роботом, но я решил остановится на node.js.
     
    ИгорьК нравится это.
  10. ИгорьК

    ИгорьК Гуру

    Не с Вами ли мы дискутировали на подобную тему? :)
     
  11. Alex19

    Alex19 Гуру

    Нет, не подымал такую тему. Но если поделитесь ссылкой на саму дискуссию буду благодарен. Может подчеркну что-то полезное для себя.
     
  12. buregon

    buregon Нуб

    Немного занудства - GPIO у нас работает на напряжении 3.3В, а большинство готовых модулей заточены под ардуинку - 5В. Можно легко пожечь выходы, да и с переходниками уровней мороки будет много. Я в свое время остановился на таком решении: На малине - сервер, GPIO только под кнопки управления. В USB воткнута ардуинка, которая и рулит датчиками/реле + по радио общается с другими железками в доме
     
  13. Спасибо всем, я нашел решение на Python 3!
    Сервер на основе модуля http.server
    единственное я так и не нашел как вбить в переменную инфу получаемую от GET-кнопок
    Хотя в логе сервера эта инфа отображается
    код сервера, пока только кнопка

    Код (Python):
    from http.server import BaseHTTPRequestHandler, HTTPServer
    import time

    hostName = "localhost"
    hostPort = 80

    class MyServer(BaseHTTPRequestHandler):
        def do_GET(self):
            self.send_response(200)
            self.send_header("Content-type", "text/html")
            self.end_headers()
            self.wfile.write(bytes("<form action='' method='get'>", "utf-8"))
            self.wfile.write(bytes('<input type="text" name="uservaule">', "utf-8"))
            self.wfile.write(bytes("</form>", "utf-8"))
            self.wfile.write(bytes('<img alt="" height="131" src="http://to-world-travel.ru/img/2015/041919/5443451" width="128"></p>', "utf-8"))

    myServer = HTTPServer((hostName, hostPort), MyServer)
    print(time.asctime(), "Server Starts - %s:%s" % (hostName, hostPort))

    try:
        myServer.serve_forever()
    except KeyboardInterrupt:
        pass

    myServer.server_close()
    print(time.asctime(), "Server Stops - %s:%s" % (hostName, hostPort))
     
     
  14. Кстати я согласен с Jeid-ом, лучше на чистом питоне и самому!
    Если вы знаете Jeid как вбить в переменную GET данные, то пожалуйста подскажите
     
  15. Sevic71

    Sevic71 Нерд

    Не хочу Вас расстраивать, но вряд-ли кто-то ответит на этот вопрос. Если Вы о скрипте на Python двумя постами выше, то я, например, решительно не вижу там переменной GET. И вообще этот скрипт выдает одну статичную страницу и все... Для реализации хоть какой-то интерактивности требуется несколько более сложная реализация. Учитывая Ваш комментарий "Знания в HTML имею минимальные, а вот на C++ пишу уже 3-4 года!" советую Вам изучить принципы HTML/http и способы реализации интерактивности, их очень много. Ну и если решено писать на python, его тоже изучить "от сих и до сих". А до тех пор советы не помогут, даже навредят.
     
  16. Golev

    Golev Нуб

    Здравствуйте! Помогите написать код включения релюхи на gpio 8 по определенной температуре!
    Предположим включать при 16С а выключать при 18
    температура с датчика пишется в файл /var/www/temp1 целым числом например 15
    реле включаю
    echo 8 > /sys/class/gpio/export
    echo out > /sys/class/gpio/gpio8/direction
    echo 0 > /sys/class/gpio/gpio8/value

    выключаю
    echo 8 > /sys/class/gpio/export
    echo out > /sys/class/gpio/gpio8/direction
    echo 7 > /sys/class/gpio/gpio8/value
     
  17. Jeid

    Jeid Нерд

    А почему не пишете на языке питон? Там можно даже в файл не писать, а просто брать значение датчика температуры и в зависимости от знчения включать/выключать реле
     
  18. Golev

    Golev Нуб

    К сожалению нет навыков программирования, где-то в инете статейку найду, где-то методом тыка, а вот по этой теме практически ничего нету (
     
  19. Jeid

    Jeid Нерд

    Домой приду - попробую что-нибудь написать.
    Датчик температуры какой?
     
  20. Golev

    Golev Нуб

    18b20, спасибо заранее)