Умный дом: Domoticz.

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

Метки:
  1. ИгорьК

    ИгорьК Давно здесь

    Умный дом конкретной системы имеет свой язык - его и стоит изучать. Здесь это Lua.
    В других - свой.

    Но Си++ - всему голова. Его знать обязательно.
     
  2. Securbond

    Securbond Гик

    LUA , JavaScript ..
     
  3. gofk

    gofk Нерд

    Тогда Вам точно должно понравиться :D https://www.domoticz.com/wiki/Dashticz_V2
     
  4. ИгорьК

    ИгорьК Давно здесь

  5. gofk

    gofk Нерд

    Вопрос.
    Хочу сделать выключатель с обратной связью. Чтобы при отправке команды из Domoticz получать от выключателя ответ. Если ответ не получен - возвращать переключатель в исходное положение.
    Пока не понимаю, как реализовать отправку по MQTT c QoS 2 из Domoticz. Чтобы контролировать доставку средствами протокола. Если поделитесь ссылочкой - буду признателен.

    Сейчас решил вопрос примерно так:
    1. Сделал Switch "test1". Он будет отображаться в интерфейсе, при клике будет отправляться команда на устройство (вкл/выкл).
    2. Сделал Switch "test2". В интерфейсе не отображается, на него поступают команды от устройства.
    3. Сделал следующую проверку:
    Код (C++):
    commandArray = {}
    if otherdevices['test2']~=otherdevices['test1'] then
        if uservariables['status1']==1 then
            otherdevices_lastupdate['test1'] = os.date("%Y-%m-%d %H:%M:%S")
            commandArray['Variable:status1'] = tostring(0)    
        else
            t2 = os.time()
            s = otherdevices_lastupdate['test1']
            year = string.sub(s, 1, 4)
            month = string.sub(s, 6, 7)
            day = string.sub(s, 9, 10)
            hour = string.sub(s, 12, 13)
            minutes = string.sub(s, 15, 16)
            seconds = string.sub(s, 18, 19)
            t1 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
            difference = (os.difftime (t2, t1))
            if difference>15 then
                commandArray['test1'] = otherdevices['test2']
                commandArray['Variable:status1'] = tostring(1)
            end
        end
    end
    return commandArray
    Хотелось бы понимать, это совсем костыль, или всё-таки мыслю правильно? Вроде как и переменная лишняя, да и в целом телодвижений многовато...
     
    Последнее редактирование: 25 янв 2018
  6. Oleg Pitsenko

    Oleg Pitsenko Нерд

    Подскажите, получилось?
     
  7. Securbond

    Securbond Гик

    Пока нет. Всё сейчас работает и без этого, для чего не хватает домотикса компенсирует родная система от Хiaomi. Жду еще пару железяк, буду ставить, может получиться найти решение.
     
  8. ИгорьК

    ИгорьК Давно здесь

    О чем вы говорите?
    Оператор if отменили? "Если выключатель в таком положении..."?????
     
  9. Oleg Pitsenko

    Oleg Pitsenko Нерд

    Про if это понятно, просто в андроид приложении можно внутренний скрипт включать... Выключать... А как через запрос непонятно
     
  10. ИгорьК

    ИгорьК Давно здесь

    Простите, не понимаю сути вопроса.
     
  11. Securbond

    Securbond Гик

    Суть вопроса... В домотикз можно создавать пользовательские скрипты (блочные, lua, не важно) они работают постоянно. Вопрос как раз в том, можно ли включать/отключать скрипт из другого скрипта какой-то командой или запросом или с кнопки (switch)???
     
  12. ИгорьК

    ИгорьК Давно здесь

    Ребята... повторюсь, if никто не отменял. На вас затмение нашло. Делайте вспомогателтные свитчи.
     
  13. Securbond

    Securbond Гик

    Возможно и затмение, но тогда покажите командную строку, которая меняет параметр “Event active” для скрипта. Вопрос же не в том, через какие костыли это можно обойти, а конкретно в том, можно отключать скрипт или нет.
     
  14. ИгорьК

    ИгорьК Давно здесь

    Наверно я что-то не понимаю.

    1. Есть некоторый скрипт.
    2. Задачи: а) запретить исполнение скрипта б) запустить скрипт принудительно

    а) делаем дополнительный свитч. Скрипт, увидев событие на которое он заточен, проверяет (if) состояние свитча и исполняется, только если если свитч в правильном положении.

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

    Это так важно? Да в ОpenHab - там же все то же самое.
     
  15. gofk

    gofk Нерд

    В интернетах активно советуют делать:
    /json.htm?type=events&param=updatestatus&eventid=21&eventstatus=0
    И даже ошибку не выдаёт. Осталось eventid узнать...
     
    Securbond нравится это.
  16. Securbond

    Securbond Гик

    Дай ссылку на форум. Как я понял, что бы этим пользоваться нужно указать "eventid". Осталось понять где его взять.
     
  17. gofk

    gofk Нерд

    Я тут видел: https://www.domoticz.com/forum/viewtopic.php?t=12557
    Про eventid да, непонятно.
    Список event'ов: /json.htm?type=events&param=list
    Источник: https://github.com/ultratoto14/domo...70a07faf24980c854df83183/main/EventSystem.cpp
    поиск по if (cparam == "list")
     
    Последнее редактирование: 29 янв 2018
    Securbond нравится это.
  18. Securbond

    Securbond Гик

    Да, этот способ работает можно вешать на выключатель включение или отключение конкретного скрипта или отключать/включать в других скриптах. Спасибо...
     
  19. ИгорьК

    ИгорьК Давно здесь

    Объясните суть раскопок?
     
  20. Securbond

    Securbond Гик

    Пишем в браузере http://<<ip_domoticz>>:8088/json.htm?type=events&param=list
    Смотрим наши скрипты (нам нужен id)
    Далее можно в другом скрипте или на выключатель повесить запрос следующего вида :
    http:127.0.0.1:8088/json.htm?type=events&param=updatestatus&eventid=21&eventstatus=0
    Вместо 21 пишем нужный id , eventstatus=0 (выключает скрипт), eventstatus=1 (включает скрипт).
     
    Последнее редактирование: 29 янв 2018
    Oleg Pitsenko и ИгорьК нравится это.