Arduino, ESP8266 Lua, Raspberry Pi 2 && OpenHab. Умный дом: азы управления.

Тема в разделе "Глядите, что я сделал", создана пользователем ИгорьК, 12 май 2015.

  1. ИгорьК

    ИгорьК Оракул Модератор

    Есть подозрение, что вышел OpenHab 2.1. Коль появилась возможность управления юзверями по логину - можно переползать, если нет - буду ждать.
     
  2. Estranged

    Estranged Нуб

    ИгорьК, а вы не пробовали подцепить к ESP датчик тока ACS712, да еще и с измерением переменки?
     
  3. ИгорьК

    ИгорьК Оракул Модератор

    Не приходилось. Но что там сложного? Измеряем аналоговый выход и пересчитываем результат по какому-то, наверняка, раскрытому в ардуиновских библиотеках, алгоритму.
     
    Последнее редактирование: 10 июн 2017
  4. Oberon

    Oberon Нерд

    Подскажите, плиз, во втором OpenHab отключили авторизацию ? Просто поставил второй, а он даже не спрашивает пароль. В 1.8 все прекрасно работает. Или это он у меня на апельсинку не правильно поставился ? Вот нарвался на "
    openHAB does not (yet) support restricting access through HTTP(S) for certain users - there is no authentication in place, nor is there a limitation of functionality or information that different users can access.

    It is therefore vitally important that you MUST NOT directly expose your openHAB instance to the Internet (e.g. by opening a port in your firewall)!"
    и не пойму, это обновленная информация или устаревшая ?
     
  5. ИгорьК

    ИгорьК Оракул Модератор

    Нет во втором авторизации.
    Есть возможность раскрашивать его как задницу попугая, следуя модной и бестолковый тенденции рисовать планы дома с датчиками и лампочками, а авторизации - нет.
    Нет, следовательно, и возможности организовать раздельный доступ пользователей.
    Уже близко ОН2.1 - может там будет.
     
  6. Sam)

    Sam) Нуб

    Всем здравствуйте, нужна ваша помощь, как в OpenHAB в дизайнере прописать устройства Z-wave выключатель, мультидатчик и управления шторами? Менюшка есть, но вот не реагирует.
     
  7. ИгорьК

    ИгорьК Оракул Модератор

    Угораздило же Вас... я этих устройств в руках не держал.
    На wiki openhab есть раздел на их тему. http://docs.openhab.org/addons/bindings/zwave1/readme.html
    Там перечислены устройства, которые поддерживаются стандартным биндингом.
    Надо читать и въезжать с железом в руках.
    Дороговатые железки, не встречал тут никого кто ими развлекается.
     
  8. ИгорьК

    ИгорьК Оракул Модератор

    Загрузка файлов по wifi.
    Удивляюсь, почему до сих пор это проходит незамеченным.

    Работает на ура. Загружает и удаляет файлы, и даже дистанционно компилирует. Также позволяет просто отправлять команды на устройство.

    Единственно, постоянно держать в память telnet, полагаю, дороговато, поэтому, ИМХО, следует предусмотреть два варианта загрузки, что сделать совсем не сложно.
    В целом железка работает как обычно, подписавшись, например, на какой-то топик или мониторя какое-то специальное сообщение.
    Если приходит сообщение, железка перегружается в режиме telnet и ждет некоторое время, после чего возвращается в исходное. В общем, надо подумать, но вариант рабочий:
    wifiotg.jpg
     
    Последнее редактирование: 25 июн 2017
    SergeiL, Securbond, alp69 и ещё 1-му нравится это.
  9. ИгорьК

    ИгорьК Оракул Модератор

    58. Дебонс, он же программный антидребезг имени ESP-8266 Lua.

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

    Руки дошли, накидал модуль. Оный узнает три длительности нажатия, короткое, среднее и (никогда не догадаетесь!) длинное.

    Короткое до секунды, среднее - более секунды, длинное - более 2,5. Или сами настроите.
    При удержании более 2,5 с оно срабатывает без дальнейшего выяснения физических возможностей нажимающего.
    Можно применять не все или пропускать применение нажатия.

    Вот модуль с именем debMod.lua:
    Код (Lua):
    do
    local function setnew (pin)
        return {}
    end
    local M = {}
    M.set = function(pin, short, med, long)
        gpio.mode(pin, gpio.INPUT, gpio.PULLUP)
        local o = setnew ()
        o.buttonPin = pin
        o.cicle = 0
        o.startcount = false
        o.gotpress = false
        o.doshort = short
        o.domedium = med or o.doshort
        o.doendcile = long or o.domedium
        o.startpin = function(self)
            gpio.trig(self.buttonPin, "down",function (level)
                if self.gotpress == false then
                    self.gotpress = true
                    local endflag = false
                    local function exitnow(buf)
                        tmr.stop(buf); tmr.unregister( buf)
                        if not endflag then
                            if self.cicle < 20 then self.doshort()
                            else self.domedium() end
                        end
                        self.cicle, self.gotpress, self.startcount = 0, false, false
                    end
                    local buf = tmr.create()
                    buf:alarm(50, 1, function()
                        if gpio.read(self.buttonPin) == 0 then
                            self.cicle = self.cicle + 1
                        else
                            if not self.startcount then
                                self.cicle = self.cicle - 1
                                if self.cicle < 0 then exitnow(buf) end
                            else
                                exitnow(buf)
                            end
                        end
                        if self.cicle > 3 then self.startcount = true end
                        if self.cicle > 50 and not endflag then
                            endflag = true; self.doendcile()
                        end
                    end)
                end
            end)
        end
        return o:startpin()
    end
    return M
    end
    Способ применения - ногу подтянуть 10 Ком к VCC, кнопка валит ногу на землю:
    Код (Lua):
    do
    -- Это пример функций для завеса на кнопки
    function doshort()
        print("Short pressed 3")
    end
    function domedium()
        print("Medium pressed 3")
    end
    function dolong()
        print("Stop pressing 3, enough!")
    end
    function doshort4()
        print("Short pressed 4")
    end
    function domedium4()
        print("Medium pressed 4")
    end
    function dolong4()
        print("Stop pressing 4, enough!")
    end

    -- Загружаем модуль
    deb = require("debMod")

    -- И запускаем в работу одной строкой на каждую кнопку
    deb.set(3, doshort, domedium, dolong)
    deb.set(4, doshort4, domedium4, dolong4)

    -- Иные варианты применения
    -- Можно использовать одну или несколько кнопок
    --[[
    deb.set(3, doshort) -- только кнопка, сколько не жми
    deb.set(3, doshort, nil, dolong) -- здесь короткое(оно же среднее)  или длинное
    deb.set(3, doshort, domedium) -- здесь длинное дублирует среднее
    deb.set(4, doshort, dolong4) -- здесь пересечение функций на разных кнопках (вместе с предыдущей строкой)
    --]]

    end
    Изображение:

    Snap23.jpg
     
    Последнее редактирование: 23 июн 2017
    SergeiL, alp69 и Securbond нравится это.
  10. Oberon

    Oberon Нерд

    Подскажите, плиз. Что-то ничего в голову не приходит. У меня с ардуинки на опенхаб по mqtt приходят показания, один датчик подглючивает и переодически шлет темпу в -0.06 градуса. Вот я не соображу, как сделать, чтоб эти показания в базу не писались, а то графики не красивые получаются. Или всеж на ардуинке их отфильтровать ? ( очень не хочется в неё лесть, далеко стоит )
     
  11. ИгорьК

    ИгорьК Оракул Модератор

    Можно написать правило, что если температура update 0.06 то она равна предыдущему значению.
    Но в базу значение все равно попадёт и график испортит.
    Так что лучше все таки на мк фильтровать.
     
  12. Oberon

    Oberon Нерд

    Сам спросил, сам отвечу. Поставил чтоб графики строились по данным sql, а не rrd4j, а потом просто убиваю, если показания итемов не верные, php скриптом в базе ( благо они одинаковые ).
     
    Последнее редактирование: 25 июн 2017
    ИгорьК нравится это.
  13. ИгорьК

    ИгорьК Оракул Модератор

    Уууухххх до чего лень доводит :)
     
  14. Oberon

    Oberon Нерд

    А что делать :) ну не кайф мне провода новые тянуть или ардуинку перешивать, я её круто к стенке прикрутил.. попытался с датчиком побороться, всякими конденсаторами, не получилось.. пришлось извращаться :) я сильно предполагаю, что глюки от соединения датчиков звездой ( 7 датчиков в 1-2 метра от ардуинки и один хлыст в метров в 30 с тремя датчиками на конце)
     
    Последнее редактирование: 25 июн 2017
  15. ИгорьК

    ИгорьК Оракул Модератор

    А что за датчики?
     
  16. ИгорьК

    ИгорьК Оракул Модератор

    Когда нибудь... ESP-8266 Nodemcu на Lua...
     
  17. Oberon

    Oberon Нерд

    да какие могут быть ?:) ds18b20.. а wi-fi не признаю по параноидальным причинам :)
     
  18. ИгорьК

    ИгорьК Оракул Модератор

    Куда же 30 метров?
    Сделайте 2-3 устройства на ESP. Проще же не куда. Не хотите сами въезжать и программировать - есть тут отличный готовый проект на сайте.
    http://forum.amperka.ru/threads/Датчик-температуры-влажности-давления-движения-и-освещенности-на-esp-12f.7097/
     
  19. Oberon

    Oberon Нерд

    на работе как раз начинаю так делать, а дома вафли не было и не будет. Да и идея состоит в том, чтоб работало только одно устройство со своим бесперебойником на 12 В, и не зависело ни от чего. Вывод инфы, это дело второе, но поддерживать темпу должно одно устройство, а не чтоб датчики отдельно от всего висели
     
    Последнее редактирование: 26 июн 2017
  20. Oberon

    Oberon Нерд

    а на самом деле не всё так сложно, может кому пригодится..
    ставим веб по инструкции например отсюда https://www.howtoforge.com/tutorial/install-lighttpd-with-php-fpm-and-mysql-on-debian/ выполняем пункты 3,4,6,7 мне этих пунктов хватило ( предполагается, что mysql уже работает). Пишем скрипт примерно такого содержания
    PHP:
    <?php
    $link = mysqli_connect(
                'ххх.ххх.ххх.ххх',
                'user',
                'password',
                'baza');

    echo mysqli_query($link,"DELETE `Item30`.* FROM `Item30` WHERE `Item30`.`Value`='-0.06'");
    echo mysqli_query($link,"DELETE `Item31`.* FROM `Item31` WHERE `Item31`.`Value`='-0.06'");
    mysqli_close($link);

    ?>
     
    кидаем его в папку для lighttpd, у меня она была var/www/html/ под именем del006.php
    пишем правило в опенхаб
    Код (C++):
    rule "006" // убиваем темпу -0.06

      when
           Item dsNash changed or
           Item dsDan changed
      then
        if (dsNash.state==-0.06 || dsDan.state==-0.06)  {
        sendHttpGetRequest("http://ххх.ххх.ххх.ххх/del006.php?")
        }
      end
    и да, графики таки должны брать данные из sql
    Код (C++):
    Switch item=Graf_period  icon="chart" mappings=[0="Hour", 1="Day", 2="Week"]
                    Chart item=Graf  service="mysql" period=h refresh=6000 visibility=[Graf_period==0, Graf_period=="Uninitialized"]
                    Chart item=Graf  service="mysql" period=D refresh=30000 visibility=[Graf_period==1]
                    Chart item=Graf  service="mysql" period=W refresh=30000 visibility=[Graf_period==2]
    должно работать... не претендую на истину, камнями не кидаться, программировать не умею
     
    Последнее редактирование: 26 июн 2017