Помощь начинающему с openhab

Тема в разделе "Raspberry Pi", создана пользователем Vertack, 15 фев 2024.

  1. Vertack

    Vertack Нуб

    Всем привет!

    Нуждаюсь в помощи при работе с OpenHab (версия 4.0.4), а именно:
    имею RPi3 Model B, к GPIO которой подключена периферия: 3 термодатчика DS18B20 (сигнал на пин GPIO 4) и 4-канальная плата реле (сигналы с пин GPIO 14,15,17,18).

    В OpenHab периферию настроил таким образом:
    1. термодатчики через установку OneWireGPIO Binding, далее конфигурации файлов
    .things
    Thing onewiregpio:sensor:solarcollector "Solar Collector" [gpio_bus_file="/sys/bus/w1/devices/28-031097796ffb/w1_slave",refresh_time=5]
    Thing onewiregpio:sensor:watertank "Water Tank" [gpio_bus_file="/sys/bus/w1/devices/28-03109779c043/w1_slave",refresh_time=5]
    Thing onewiregpio:sensor:indoor "Indoor" [gpio_bus_file="/sys/bus/w1/devices/28-3c01b60700ed/w1_slave",refresh_time=5]

    .items
    Number IndoorTemperature "5.1.Текущая температура Indoor [%.2f °C]" <temperature> {channel="onewiregpio:sensor:indoor:temperature"}
    Number SolarCollectorTemperature "6.1.Текущая температура Solar Collector [%.2f °C]" <temperature> {channel="onewiregpio:sensor:solarcollector:temperature"}
    Number WaterTankTemperature "7.1.Текущая температура Water Tank [%.2f °C]" <temperature> {channel="onewiregpio:sensor:watertank:temperature"}

    Данные температур со всех 3-х датчиков отображаются в UI через функционал Numbers.

    2. реле через установку GPIO Binding, далее запуск в Things службы Pigpio Remote, далее в Items настроил через Switch ручное управление каждым реле.

    Ручные включатели/выключатели всех 4-х реле отображаются в UI через функционал Switch.

    В чем ОЧЕНЬ нужна Ваша помощь:
    1. На первом этапе обучения подсказать, как через инструмент Rules создать правило простого контроллера температуры, при котором опираясь на показания замеренной температуры с одного термодатчика и сравнивая её с параметром заданной вручную температуры управлять включением/выключением одного реле, которое управляет питанием электрическим нагревателем.
    В данной помощи также прошу подсказать, как реализовать функционал ручной установки заданной температуры!
    Пытался вникнуть, как это сделать, через Соответствующие разделы описания на сайте OpenHab, но без толку. Какой-то затык (((
     
  2. Un_ka

    Un_ka Гуру

    Интересное решение, особенно в 2024.
    Ещё в 2020 люди переходили с openHub на home Assistant.
    Сразу скажу, что имел опыт работы только с home Assistant.
    Текст конфигурации лучше вставлять как код
    Код (Text):
    Без подсветки
    Так он более читабельный.
    В создании "правил" rules, вроде ничего сложного нет: условие события и код выполняемый, при наступлении этого события.

    Например кусочек отсюда:
    Код (Java):
    import org.openhab.core.library.types.*
    import org.openhab.core.persistence.*
    import org.openhab.model.script.actions.*
    import org.joda.time.*

    import java.lang.Math
    import java.util.Calendar
    import java.util.Date
    import java.util.TimeZone
    import java.text.SimpleDateFormat
    import java.util.List //https://github.com/openhab/openhab/wiki/Actions#mail-actions
    import java.util.Random

    import java.lang.Double.*
    import java.lang.String.*


    //подсчет показаний гор. воды
    rule "CountWaterImpHot"
    when
       Item P9_WaterPulse_hot changed to ON //received update ON
    then
        var Number WatHot = CountWaterM3Hot.state as DecimalType
        var Number tmp2
        var Number Kal2
        var Number Dif2
       
        tmp2 = WatHot + 0.01 // один полный импульс при прохождении 10 л жидкости
        postUpdate(CountWaterM3Hot, tmp2.doubleValue)
       
        if (CountWaterM3Hot.state instanceof DecimalType) {
            Kal2 = CountWaterM3Hot.minimumSince(now.toDateMidnight.withDayOfMonth(1)).state as DecimalType //на начало месяца
            postUpdate(CountWaterM3Hot_Kalends, Kal2.doubleValue )
              Dif2 = tmp2 - Kal2
              postUpdate(CountWaterM3Hot_Consumption, Dif2.doubleValue )
            }  
    end