Арендная квартира: MegaD, Home Assistant, датчик шума и приборы учета
Re: Арендная квартира: MegaD, openHAB, датчик шума и приборы учета
Датчик фактически не отражает реальную картину, а usb mic ( https://www.ab-log.ru/forum/viewtopic.p ... 440#p31138 ) - отображает:
Re: Арендная квартира: MegaD, openHAB, датчик шума и приборы учета
После замены на новую мегу упросил интерфейс и сделал больше в духе опенхаб - групповые выключатели и средние цифры. Получилось примерно так, как и планировал:
Re: Арендная квартира: MegaD, openHAB, датчик шума и приборы учета
\openHAB-conf\things\default.things
\openHAB-conf\items\default.items
\openHAB-conf\rules\default.rules
\openHAB-conf\sitemaps\default.sitemap
\openHAB-conf\persistence\influxdb.persist
Код: Выделить всё
/*Bridge megad:bridge:14in [port=8989]
{
Thing device P2_ALL [hostname="192.168.88.60", port="2", password="sec", refresh="0"]
Thing device P4_Domofon [hostname="192.168.88.60", port="4", password="sec", refresh="0"]
Thing device P5_Door [hostname="192.168.88.60", port="5", password="sec", refresh="0"]
Thing device P8_WaterPulse_cold [hostname="192.168.88.60", port="8", password="sec", refresh="60"]
Thing device P9_WaterPulse_hot [hostname="192.168.88.60", port="9", password="sec", refresh="60"]
Thing device P10_CountElecImp [hostname="192.168.88.60", port="10", password="sec", refresh="20"]
}
*/
//==============================================================================================================
Thing network:pingdevice:LAN_Beward [ hostname="192.168.88.40" ]
Thing network:pingdevice:LAN_MegaD2561 [ hostname="192.168.88.60" ]
Thing network:pingdevice:LAN_MikroTik [ hostname="192.168.88.2" ]
//==============================================================================================================
Thing exec:command:USB_Maximum_amplitude [command="bash /etc/openhab2/exec/USB_dB.sh", transform="REGEX((.*?))", interval=60, autorun=true]
//==============================================================================================================
Thing systeminfo:computer:work [interval_high=60, interval_medium=120]
//==============================================================================================================
ntp:ntp:pool [ hostname="nl.pool.ntp.org", refreshInterval=60, refreshNtp=30 ]
//==============================================================================================================
//==============================================================================================================
//==============================================================================================================
//==============================================================================================================
Код: Выделить всё
Group Entrance <corridor>
Group Living_room <sofa>
Group Kitchen <cinema>
Group Restroom <faucet>
Group Bedroom <bedroom>
Group Outside
String Entrance_st "Прихожая/Подъезд" <corridor>
String Living_room_st "Гостиная" <sofa>
String Kitchen_st "Кухня" <cinema>
String Restroom_st "Туалет/Ванна" <faucet>
String Bedroom_st "Спальня" <bedroom>
String Outside_st "Улица"
Number ChartPeriod "Интервал" <flow> //<flow> - иконка
String ChartPeriodName "Графики" <line>
//==============================================================================================================
Group Lights_Random
Group:Switch:OR(ON, OFF) Lamp "Управление освещением [(%d)]" <light> (Lights_Random)
Switch Ghost_Lights "Имитация присутствия, свет" <parents_1_1> (Entrance)
Switch ElectroDragon1_WC "Лампа туалет [%s]" <light> (Lamp, Restroom) { mqtt=">[mosquitto:cmnd/ElectroDragon1/POWER1:command:*:default], <[mosquitto:stat/ElectroDragon1/POWER1:state:default]" } // настройка в файле \openHAB-conf\services\mqtt.cfg, mosquitto.url=tcp://localhost:1883
Switch ElectroDragon1_Corridor "Лампа коридор [%s]" <light> (Lamp, Lights_Random, Restroom) { mqtt=">[mosquitto:cmnd/ElectroDragon1/POWER2:command:*:default], <[mosquitto:stat/ElectroDragon1/POWER2:state:default]" }
Switch Sonoff_Camera12v "Камера подъезд [%s]" <camera> (Entrance) { mqtt=">[mosquitto:cmnd/Camera12v/POWER1:command:*:default], <[mosquitto:stat/Camera12v/POWER1:state:default]" }
Switch ElectroDragon2_Bath "Лампа ванна [%s]" <light> (Lamp, Restroom) { mqtt=">[mosquitto:cmnd/ElectroDragon2/POWER1:command:*:default], <[mosquitto:stat/ElectroDragon2/POWER1:state:default]" }
Switch ElectroDragon2_Kitchen "Люстра кухня [%s]" <light> (Lamp, Lights_Random, Kitchen) { mqtt=">[mosquitto:cmnd/ElectroDragon2/POWER2:command:*:default], <[mosquitto:stat/ElectroDragon2/POWER2:state:default]" }
Switch Sonoff_Table_lamp "Лампа настольная в спальне [%s]" <light> (Lamp, Lights_Random, Bedroom) { mqtt=">[mosquitto:cmnd/Table_lamp/POWER:command:*:default], <[mosquitto:stat/Table_lamp/POWER:state:default]" }
Switch ElectroDragon3_Bedroom "Люстра в спальне [%s]" <light> (Lamp, Bedroom) { mqtt=">[mosquitto:cmnd/ElectroDragon3/POWER1:command:*:default], <[mosquitto:stat/ElectroDragon3/POWER1:state:default]" }
Switch ElectroDragon3_Boxroom "Лампа кладовка [%s]" <light> (Lamp, Bedroom) { mqtt=">[mosquitto:cmnd/ElectroDragon3/POWER2:command:*:default], <[mosquitto:stat/ElectroDragon3/POWER2:state:default]" }
Switch Sonoff_Living_room "Люстра гостиная [%s]" <light> (Lamp, Lights_Random, Living_room) { mqtt=">[mosquitto:cmnd/Living_room/POWER:command:*:default], <[mosquitto:stat/Living_room/POWER:state:default]" }
//==============================================================================================================
Number P36_XP5_ADC "Noise [%.2f °C]" { http="<[http://192.168.88.60/sec/?pt=36&cmd=get:60000:REGEX((.*?))]" }
Number P36_XP5_ADC_dB "Noise [%.2f °C]"
String USB_Maximum_amplitude "USB Maximum amplitude [%s]" <line> {channel="exec:command:USB_Maximum_amplitude:output"}
Number USB_Maximum_amplitude_dB "Датчик шума USB, [%.2f]" <line> (Entrance)
Number P1_HTU21D_Temp "Темп. на улице [%.2f °C]" <temperature> (Pipes) { http="<[http://192.168.88.60/sec/?pt=0&scl=1&i2c_dev=htu21d&i2c_par=1:60000:REGEX((.*?))]" }
Number P1_HTU21D_Hum "Влажность на улице [%.2f %%]" <humidity> { http="<[http://192.168.88.60/sec/?pt=0&scl=1&i2c_dev=htu21d:60000:REGEX((.*?))]" }
Number P1_MAX44009 "Освещ. улицы [%.2f lux]" <sunrise> { http="<[http://192.168.88.60/sec/?pt=0&scl=1&i2c_dev=max44009:60000:REGEX((.*?))]" }
Switch P2_ALL "ВЫКЛ всё [%s]" { mqtt="<[mosquitto:megad/60/2:state:JSONPATH($.value)]" } //{channel ="megad:device:14in:P2_ALL:in"}
//Switch P2_ALL_hold "ВКЛ всё [%s]" { mqtt="<[mosquitto:megad/60/10:state:JSONPATH($.[?(@.m=='0')].value)]" }
Switch P4_Domofon "Домофон [%s]" (Entrance) { mqtt="<[mosquitto:megad/60/4:state:JSONPATH($.value)]" } //{channel ="megad:device:14in:P4_Domofon:in"}
String P3_SSD1306_Text "Дисплей SSD1306 Text [%s]" { http=">[*:GET:http://192.168.88.60/sec/?pt=3&text=%2$s]" }
String P3_SSD1306_SmallText "Дисплей SSD1306 SmallText [%s]" { http=">[*:GET:http://192.168.88.60/sec/?pt=3&text=%2$s&col=30&row=0]" }
Switch P5_Door "Дверь [MAP(door.map):%s]" { mqtt="<[mosquitto:megad/60/5:state:JSONPATH($.value)]" } //{channel ="megad:device:14in:P5_Door:contact"}
String P5_Door_state "Дверь [%s]"
String P5_Door_state_general "Дверь [%s]" <door> (Entrance)
DateTime P5_last_use "Door, last use [%1$td.%1$tm, %1$tR]"
Number P5_DoorRunStart "P5_DoorRunStart [%s]"
Number P5_last_use_ago "Door, last use, h. ago [%.2f]"
Group:Number:AVG Pipes "Температура отопления [%.2f °C]" <temperature> (Pipes)
Number P6_DS18B20_WC_cold "Темп. хол. трубы, °C [%.2f]" <temperature_cold> (Pipes) { http="<[http://192.168.88.60/sec/?pt=6&cmd=list:60000:REGEX(.*?961b01000080:(.*?))]" }
Number P6_DS18B20_WC_cold_min "Мин. значение хол. трубы в месяце, °C [%.2f]"
Number P6_DS18B20_WC_hot "Темп. гор. трубы, °C [%.2f]" <temperature_hot> (Pipes) { http="<[http://192.168.88.60/sec/?pt=6&cmd=list:60000:REGEX(.*?141201000080:(.*?);(.*))]" }
Number P6_DS18B20_WC_hot_max "Макс. значение гор. трубы в месяце, °C [%.2f]"
Group:Number:AVG Indoor "Температура в комнатах [%.2f °C]" <temperature> (Indoor)
Number P7_DS18B20_Kitchen "Темп. кухня [%.2f °C]" <temperature> (Kitchen, Indoor) { http="<[http://192.168.88.60/sec/?pt=7&cmd=list:60000:REGEX(.*?ff4902731604:(?!85)(.*?);(.*))]" }
Number P7_DS18B20_livingroom "Темп. гостиная [%.2f °C]" <temperature> (Living_room, Indoor) { http="<[http://192.168.88.60/sec/?pt=7&cmd=list:60000:REGEX(.*?ff04f2711605:(?!85)(.*?);(.*))]" }
Number P7_DS18B20_Heat_bedroom "Темп. бат. спальни [%.2f °C]" <radiator> (Pipes) { http="<[http://192.168.88.60/sec/?pt=7&cmd=list:60000:REGEX(.*?fff9b7731604:(?!85)(.*?))]" }
Number P7_DS18B20_bedroom_avg "Средняя темп. батареи в месяце [%.2f °C]"
Group Counters "Приборы учета" <office> (Counters)
Group WaterCold
String CountWaterCold "Холодная вода: "
Switch P8_WaterPulse_cold "Холодная, счетчик Valtec VLF-R-IL [%s]" { mqtt="<[mosquitto:megad/60/8:state:JSONPATH($.value)]" } //{channel ="megad:device:14in:P8_WaterPulse_cold:in"}
Number CountWaterM3Cold "ХВС Valtec VLF-R-IL, м. куб. [%.2f]" <humidity> (Counters)
String CountWaterM3Cold_general "Холодная Valtec, м. куб. [%s]" <office>
Number CountWaterM3Cold_Kalends "ХВС на 1е число, м. куб. [%.2f]" <water> (Counters)
Number CountWaterM3Cold_Consumption "ХВС расход в тек.мес., м. куб. [%.2f]" <humidity> (Counters)
Group WaterHot
String CountWaterHot "Горячая вода: "
Switch P9_WaterPulse_hot "Горячая, счетчик Valtec VLF-R-IL [%s]" { mqtt="<[mosquitto:megad/60/9:state:JSONPATH($.value)]" } //{channel ="megad:device:14in:P9_WaterPulse_hot:in"}
Number CountWaterM3Hot "ГВС Valtec VLF-R-IL, м. куб. [%.2f]" <humidity> (Counters)
String CountWaterM3Hot_general "Горячая Valtec, м. куб. [%s]" <office>
Number CountWaterM3Hot_Kalends "ГВС на 1е число, м. куб. [%.2f]" <water> (Counters)
Number CountWaterM3Hot_Consumption "ГВС расход в тек.мес., м. куб. [%.2f]" <humidity> (Counters)
Group Incotex201
Number P10_CountElecImp "Импульсы э/э, текущее значение (3200/кВт*ч) [%s]" { mqtt="<[mosquitto:megad/60/10:state:JSONPATH($.cnt)]" } //{channel ="megad:device:14in:P10_CountElecImp:incount"}
Number MercuryIncotex201KWh "Э/э Меркурий 201.5, кВт*ч [%.2f]" <energy>
String MercuryIncotex201KWh_general "Э/э Меркурий 201.5, кВт*ч [%s]" <office> (Counters)
Number MercuryIncotex201KWh_Kalends "Э/э на начало месяца, кВт*ч [%.2f]" <energy> (Counters)
Number MercuryIncotex201KWh_Consumption "Э/э расход в тек.месяце, кВт*ч [%.2f]" <line> (Counters)
Number MercuryIncotex201KWh_Consumption_Price "Э/э по 3,62 в тек.месяце, руб. [%.2f]" <pie>
//==============================================================================================================
Group:Switch:OR(OFF, ON) Reachable "Недоступное оборудования [(%d)]" <network> (Reachable)
Switch ElectroDragon1_Reachable "ElectroDragon1 [%s]" <network> (Reachable) { mqtt="<[mosquitto:tele/ElectroDragon1/LWT:state:MAP(tasmota.map)]" }
Switch Sonoff_Camera12v_Reachable "Sonoff SV_Камера подъезд [%s]" <network> (Reachable) { mqtt="<[mosquitto:tele/Camera12v/LWT:state:MAP(tasmota.map)]" }
Switch ElectroDragon2_Reachable "ElectroDragon2 [%s]" <network> (Reachable) { mqtt="<[mosquitto:tele/ElectroDragon2/LWT:state:MAP(tasmota.map)]" }
Switch Sonoff_Table_lamp_Reachable "Sonoff лампа настольная [%s]" <network> (Reachable) { mqtt="<[mosquitto:tele/Table_lamp/LWT:state:MAP(tasmota.map)]" }
Switch ElectroDragon3_Reachable "ElectroDragon3 [%s]" <network> (Reachable) { mqtt="<[mosquitto:tele/ElectroDragon3/LWT:state:MAP(tasmota.map)]" }
Switch Sonoff_Living_room_Reachable "Sonoff люстра гостиная [%s]" <network> (Reachable) { mqtt="<[mosquitto:tele/Living_room/LWT:state:MAP(tasmota.map)]" }
Switch LAN_MikroTik "MikroTik hAP lite RB941-2nD-TC [%s]" <qualityofservice> (Reachable) { channel="network:pingdevice:LAN_MikroTik:online" }
Switch LAN_MegaD2561 "MegaD-2561 + MegaD-14-IN [%s]" <qualityofservice> (Reachable) { channel="network:pingdevice:LAN_MegaD2561:online" }
Switch LAN_Beward "Beward B2710DR [%s]" <qualityofservice> (Reachable) { channel="network:pingdevice:LAN_Beward:online" }
//==============================================================================================================
DateTime dateTimeNTP "Дата и время [%1$tA, %1$td.%1$tm.%1$tY, %1$tR]" <calendar> { channel="ntp:ntp:pool:dateTime" } //расшифровка букв https://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html
String dateTime "Дата и время сервера [%s]" <calendar>
//==============================================================================================================
Group Systeminfo "Информация сервера" <screen> (Systeminfo)
/* CPU information*/
Number CPU_Load <line-stagnation> (Systeminfo) { channel="systeminfo:computer:work:cpu#load"}
Number CPU_Threads <line-stagnation> (Systeminfo) { channel="systeminfo:computer:work:cpu#threads" }
Number CPU_Uptime <line-stagnation> (Systeminfo) { channel="systeminfo:computer:work:cpu#uptime" }
/* Storage information*/
Number Storage_Total <line-stagnation> (Systeminfo) { channel="systeminfo:computer:work:storage#total" }
Number Storage_Available_Percent <line-stagnation> (Systeminfo) { channel="systeminfo:computer:work:storage#availablePercent" }
/* Memory information*/
Number Memory_Available <line-stagnation> (Systeminfo) { channel="systeminfo:computer:work:memory#available" }
Number Memory_Available_Percent <line-stagnation> (Systeminfo) { channel="systeminfo:computer:work:memory#availablePercent" }
/* Network information*/
Number Network_DataSent <line-stagnation> (Systeminfo) { channel="systeminfo:computer:work:network#dataSent" }
Number Network_DataRecevied <line-stagnation> (Systeminfo) { channel="systeminfo:computer:work:network#dataReceived" }
//==============================================================================================================
Код: Выделить всё
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 "System started Counters"
when
System started
then
postUpdate(MercuryIncotex201KWh, 983.15)
postUpdate(CountWaterM3Cold, 74.343)
postUpdate(CountWaterM3Hot, 38.464)
// Корректировка 21.08.2016 15.00
end
*/
/*
rule "P5_initial" //эмуляция открытия закрытия двери
when
Time cron "0 0/1 * * * ?" //каждую 1 мин
then
postUpdate(P5_Door, OPEN)
Thread::sleep(60000)
postUpdate(P5_Door, CLOSED)
end
*/
/*
rule "initial" //чтобы уйти от NULL в самом начале
when
System started
then
postUpdate(CountWaterM3Hot_Consumption, 0)
postUpdate(CountWaterM3Cold_Consumption, 0)
end
*/
/* =============================================================================================================== */
//ВЫКЛ всё
rule "P2 ALL OFF"
when
Item P2_ALL changed to ON
then
publish("mosquitto","cmnd/ElectroDragon1/POWER1","OFF")
publish("mosquitto","cmnd/ElectroDragon2/POWER1","OFF")
publish("mosquitto","cmnd/ElectroDragon2/POWER2","OFF")
publish("mosquitto","cmnd/Table_lamp/POWER1","OFF")
publish("mosquitto","cmnd/ElectroDragon3/POWER1","OFF")
publish("mosquitto","cmnd/ElectroDragon3/POWER2","OFF")
publish("mosquitto","cmnd/Living_room/POWER1","OFF")
Thread::sleep(15000) //15000 миллисекунд в секундах
publish("mosquitto","cmnd/ElectroDragon1/POWER2","OFF") //прихожая
end
/*
rule "P2 ALL ON"
when
Item P2_ALL_hold changed
then
publish("mosquitto","cmnd/ElectroDragon1/POWER2","ON") //прихожая
publish("mosquitto","cmnd/ElectroDragon1/POWER1","ON")
publish("mosquitto","cmnd/ElectroDragon2/POWER1","ON")
publish("mosquitto","cmnd/ElectroDragon2/POWER2","ON")
publish("mosquitto","cmnd/Table_lamp/POWER1","ON")
publish("mosquitto","cmnd/ElectroDragon3/POWER1","ON")
publish("mosquitto","cmnd/Living_room/POWER1","ON")
end
*/
/* =============================================================================================================== */
rule "Time to SSD1306"
when
Time cron "0 0/1 * * * ?" //каждую 1 минут
then
var String Temp = (((P1_HTU21D_Temp.state as DecimalType)*10).intValue/10.0).toString //оставляем один знак после запятой и преобразуем в строку
//val Temp = String::format("%.0f", (P1_HTU21D_Temp.state as DecimalType).doubleValue )
var String Hour = String::format( "%1$tk", new Date() ) //https://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html
var String Minute = String::format( "%1$tM", new Date() )
sendHttpGetRequest("http://192.168.88.60/sec/?pt=3&disp_cmd=1&row=0") //очистка верней строки
Thread::sleep(2000) //2000 миллисекунд в секундах
sendCommand(P3_SSD1306_Text,"ssssssss") //очистка основной строки
Thread::sleep(2500) //2500 миллисекунд в секундах
sendCommand(P3_SSD1306_SmallText, "Time")
sendCommand(P3_SSD1306_Text, "_" + Hour + ";" + Minute)
Thread::sleep(30000) //30000 миллисекунд в секундах
sendHttpGetRequest("http://192.168.88.60/sec/?pt=3&disp_cmd=1&row=0") //очистка верней строки
Thread::sleep(2000) //2000 миллисекунд в секундах
sendCommand(P3_SSD1306_Text,"ssssssss") //очистка основной строки
Thread::sleep(2500) //2500 миллисекунд в секундах
sendCommand(P3_SSD1306_SmallText, "Outdoor")
sendCommand(P3_SSD1306_Text, "_" + Temp + ":")
end
/* =============================================================================================================== */
//подсчет показаний хол. воды
rule "CountWaterImpCold"
when
Item P8_WaterPulse_cold changed to ON //received update ON
then
var Number WatCold = CountWaterM3Cold.state as DecimalType
var Number tmp1
var Number Kal1
var Number Dif1
tmp1 = WatCold + 0.01 // один полный импульс при прохождении 10 л жидкости
postUpdate(CountWaterM3Cold, tmp1.doubleValue)
if (CountWaterM3Cold.state instanceof DecimalType) {
Kal1 = CountWaterM3Cold.minimumSince(now.toDateMidnight.withDayOfMonth(1)).state as DecimalType //на начало месяца
postUpdate(CountWaterM3Cold_Kalends, Kal1.doubleValue )
Dif1 = tmp1 - Kal1
postUpdate(CountWaterM3Cold_Consumption, Dif1.doubleValue )
}
end
//подсчет показаний гор. воды
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
//отображение воды в sitemap
rule "WaterSitemap"
when
Time cron "0 0/10 * * * ?" //каждые 10 минут
then
val CropDigital3 = String::format("%.2f", (CountWaterM3Cold.state as DecimalType).doubleValue )
val CropDigital4 = String::format("%.2f", (CountWaterM3Cold_Consumption.state as DecimalType).doubleValue )
postUpdate(CountWaterM3Cold_general, CropDigital3 + " (" + CropDigital4 + " в тек.мес.)" )
val CropDigital5 = String::format("%.2f", (CountWaterM3Hot.state as DecimalType).doubleValue )
val CropDigital6 = String::format("%.2f", (CountWaterM3Hot_Consumption.state as DecimalType).doubleValue )
postUpdate(CountWaterM3Hot_general, CropDigital5 + " (" + CropDigital6 + " в тек.мес.)" )
end
/* =============================================================================================================== */
//подсчет кВт*ч эл. счетчика через счетчик порта MegaD
rule "MercuryIncotex201KWh"
when
Item P10_CountElecImp changed
then
var Number Imp = P10_CountElecImp.state as DecimalType
var Number KWh = MercuryIncotex201KWh.state as DecimalType
if ( Imp >= 320 )
{
//KWh = KWh + 0.1 // 1 кВт*ч - 3200 импульсов
KWh = KWh + Imp/3200 // 1 кВт*ч - 3200 импульсов
postUpdate(MercuryIncotex201KWh, KWh)
sendHttpGetRequest("http://192.168.88.60/sec/?pt=10&cnt=0")
}
end
rule "MercuryIncotex201KWh_Past"
when
Time cron "0 0/5 * * * ?" //каждые 5 минут
then
var Number KWh = MercuryIncotex201KWh.state as DecimalType
var Number Kal
var Number Dif
var Number Pri
if (MercuryIncotex201KWh.state instanceof DecimalType) {
Kal = MercuryIncotex201KWh.minimumSince(now.toDateMidnight.withDayOfMonth(1)).state as DecimalType //на начало месяца
//Kal = (MercuryIncotex201KWh.minimumSince(now.toDateMidnight.withDayOfMonth(1).withMonthOfYear(1), "rrd4j").state as DecimalType) //на начало года //https://knx-user-forum.de/forum/supportforen/openhab/33557-anf%C3%A4nger
postUpdate(MercuryIncotex201KWh_Kalends, Kal.doubleValue )
Dif = KWh - Kal
postUpdate(MercuryIncotex201KWh_Consumption, Dif.doubleValue )
Pri = Dif * 3.62 //3,62 рубля за кВт*ч
postUpdate(MercuryIncotex201KWh_Consumption_Price, Pri.doubleValue )
}
val CropDigital1 = String::format("%.2f", KWh.doubleValue ) //формат строки для sitemap
val CropDigital2 = String::format("%.2f", Dif.doubleValue ) //формат строки для sitemap
postUpdate(MercuryIncotex201KWh_general, CropDigital1 + " (" + CropDigital2 + " в тек.мес.)" )
end
/* =============================================================================================================== */
//дверь
rule "P5 Door closed" //ON=закрыта
when
Item P5_Door changed to ON
then
postUpdate(P5_last_use, new DateTimeType() )
postUpdate(P5_Door_state, "закрыта")
end
rule "P5 Door open" //OFF=открыта
when
Item P5_Door changed to OFF
then
var Number RunStart
RunStart = now.millis
postUpdate(P5_DoorRunStart, RunStart.doubleValue ) // Timestamp when the switch was turned off
postUpdate(P5_last_use, new DateTimeType() )
postUpdate(P5_Door_state, "открыта" )
//postUpdate(P5_Door_state_general, "открыта" )
end
rule "P5_last_use_ago"
when
Time cron "0 0/3 * * * ?" //каждые 3 мин
then
//postUpdate(P5_DoorRunStart, 0)
var Number RunStart = P5_DoorRunStart.state as DecimalType
var Number DoorTime
var Number RunEnd
RunEnd = now.millis
if (P5_Door.state==ON) {
DoorTime = (RunEnd - RunStart) / 3600000 //миллисекунды в часы
postUpdate(P5_last_use_ago, DoorTime.doubleValue)
val CropDigital = String::format("%.2f", DoorTime.doubleValue ) //формат строки для sitemap
postUpdate(P5_Door_state_general, P5_Door_state.state + " (" + CropDigital + " ч)" )
}
end
/* =============================================================================================================== */
// пересчет Volume adjustment в децибелы
rule "USB_Maximum_amplitude"
when
Time cron "0 0/1 * * * ?" //каждую 11 минуту
//Item USB_Maximum_amplitude received update
then
var Number Vol=Float::parseFloat(String::format("%s",USB_Maximum_amplitude.state))
Vol = 20 * Math::log10(Vol.doubleValue()) + 80 //dB = 20 x log10(Amplitude) - zero_offset - https://forum.arduino.cc/index.php?topic=376308.0
postUpdate(USB_Maximum_amplitude_dB, Vol) //с микрофона
var Number Vol2=Float::parseFloat(String::format("%s",P36_XP5_ADC.state))
if (Vol2==0) { Vol2 = 1 }
Vol2 = 20 * Math::log10(Vol2.doubleValue()) + 20
postUpdate(P36_XP5_ADC_dB, Vol2) //с платы
/* if ( Vol > 120) {
postUpdate(USB_Maximum_amplitude_dB, 120) //не может быть больше 120 дБ
} else {
postUpdate(USB_Maximum_amplitude_dB, Vol.doubleValue) //Настоящее значение
}
*/
end
/* =============================================================================================================== */
// перезагрузка камеры Beward B2710DR по расписанию
rule "Beward reset"
when
Time cron "0 30 05 ? * MON,WED,FRI,SUN" //http://www.quartz-scheduler.org/documentation/quartz-2.1.x/tutorials/tutorial-lesson-06
then
publish("mosquitto","cmnd/Camera12v/POWER1","OFF")
Thread::sleep(60000)
publish("mosquitto","cmnd/Camera12v/POWER1","ON")
end
/* =============================================================================================================== */
/* =============================================================================================================== */
/* =============================================================================================================== */
Код: Выделить всё
sitemap default label="адрес"
{
Frame label="Квартира" {
Text item=Lamp {
Switch item=Lamp mappings=[OFF="ВЫКЛ всё", ON="ВКЛ всё"]
Switch item=ElectroDragon1_WC
Switch item=ElectroDragon1_Corridor
Switch item=ElectroDragon2_Bath
Switch item=ElectroDragon2_Kitchen
Switch item=Sonoff_Table_lamp
Switch item=ElectroDragon3_Bedroom
Switch item=ElectroDragon3_Boxroom
Switch item=Sonoff_Living_room
//Switch item=Ghost_Lights
}
Group item=Indoor
Group item=Pipes
Text item=P5_Door_state_general
Text item=Counters {
Frame label="Электроэнергия" {
Text item=MercuryIncotex201KWh_general
Text item=MercuryIncotex201KWh_Kalends
}
Frame label="Холодная вода (ХВС)" {
Text item=CountWaterM3Cold_general
Text item=CountWaterM3Cold_Kalends
}
Frame label="Горячая вода (ГВС)" {
Text item=CountWaterM3Hot_general
Text item=CountWaterM3Hot_Kalends
}
}
Text item=dateTimeNTP
}
Frame label="Улица" {
Text item=P1_HTU21D_Temp
Text item=P1_HTU21D_Hum
Text item=P1_MAX44009
}
Frame label="Служебное" {
Text item=ChartPeriodName {
Image refresh=60000 url="http://192.168.88.70:3000/render/dashboard-solo/db/font8?refresh=5m&orgId=1&panelId=2&theme=light&width=700&height=350"
Image refresh=60000 url="http://192.168.88.70:3000/render/dashboard-solo/db/font8?refresh=5m&orgId=1&panelId=1&theme=light&width=700&height=350"
Image refresh=60000 url="http://192.168.88.70:3000/render/dashboard-solo/db/font8?refresh=5m&orgId=1&panelId=9&theme=light&width=700&height=350"
}
Group item=Systeminfo
Group item=Reachable
}
}
Код: Выделить всё
Strategies {
everyMinute : "0 * * * * ?"
every15min : "0 0/15 * * * ?"
everyHour : "0 0 * * * ?"
everyDay : "0 0 0 * * ?"
}
Items {
* : strategy = everyChange, everyHour, restoreOnStartup
P6_*, P7_* : strategy = every15min
}
Re: Арендная квартира: MegaD, openHAB, датчик шума и приборы учета
С резервным копированием всего только пока не нашел варианта.
Есть https://www.ab-log.ru/forum/viewtopic.p ... 700#p30932 - но похоже не с теми правами запускаю - похоже проблема в этом, потому что по отдельности все команды работают
Есть https://www.ab-log.ru/forum/viewtopic.p ... 700#p30932 - но похоже не с теми правами запускаю - похоже проблема в этом, потому что по отдельности все команды работают
-
- Сообщения: 651
- Зарегистрирован: 16 фев 2016, 19:52
Re: Арендная квартира: MegaD, openHAB, датчик шума и приборы учета
Я подозреваю что тема шумомера могла быть исчерпана, однако для будущих поколений решил написать.
Есть у Сонофф волшебный горшочек Sonoff SC (20-35$)
В нем есть микрофон https://www.itead.cc/sonoff-sc.html
И к нему есть альт. прошивка https://github.com/arendst/Sonoff-Tasmo ... /Sonoff-SC
сам не пробовал, но помню идей было много.
Есть у Сонофф волшебный горшочек Sonoff SC (20-35$)
В нем есть микрофон https://www.itead.cc/sonoff-sc.html
И к нему есть альт. прошивка https://github.com/arendst/Sonoff-Tasmo ... /Sonoff-SC
сам не пробовал, но помню идей было много.
Re: Арендная квартира: MegaD, openHAB, датчик шума и приборы учета
Пытаюсь разобрать ваш конфиг OpenHab-а. Никак не могу понять, как вы сохраняете накопленные показания от счетчиков? Откуда берутся актуальные показания после перезагрузки сервера и Мегадевайса?
Re: Арендная квартира: MegaD, openHAB, датчик шума и приборы учета
они сохраняются в influxdb: http://192.168.88.70:8086/
\openHAB-conf\persistence\influxdb.persist :
Код: Выделить всё
Strategies {
everyMinute : "0 * * * * ?"
every15min : "0 0/15 * * * ?"
everyHour : "0 0 * * * ?"
everyDay : "0 0 0 * * ?"
}
Items {
* : strategy = everyChange, everyHour, restoreOnStartup
P6_*, P7_* : strategy = every15min
}
Re: Арендная квартира: MegaD, openHAB, датчик шума и приборы учета
Кажется кто-то хотел универсальный датчик... в том числе и шума...
Так - получайте....
https://habr.com/company/wirenboard/blog/423523/
Так - получайте....
https://habr.com/company/wirenboard/blog/423523/
-
- Администратор
- Сообщения: 2194
- Зарегистрирован: 29 май 2015, 21:23
- Откуда: Екатеринбург, Нижний Тагил
Re: Арендная квартира: MegaD, openHAB, датчик шума и приборы учета
Есть у меня такой, правда, версии 3.4. Шум и правда похож на децибелы, но прибором не проверял ещё.
У нас в очереди на разработку собственный комбинированный датчик. Температура-влажность-движение-со2, также модульный. Шум, мне кажется, мало кому интересен. И освещённость тоже не вижу смысла в комнатах измерять. А вот воткнуть ИК-передатчик интересная идея.
P.S. VOC - ИМХО, чисто китайская фишка, там смог в городах - частое явление. Для России измерять частицы в воздухе не вижу особого смысла.
У нас в очереди на разработку собственный комбинированный датчик. Температура-влажность-движение-со2, также модульный. Шум, мне кажется, мало кому интересен. И освещённость тоже не вижу смысла в комнатах измерять. А вот воткнуть ИК-передатчик интересная идея.
P.S. VOC - ИМХО, чисто китайская фишка, там смог в городах - частое явление. Для России измерять частицы в воздухе не вижу особого смысла.
-
- Сообщения: 617
- Зарегистрирован: 30 мар 2017, 11:15
- Откуда: г.Севастополь
Re: Арендная квартира: MegaD, openHAB, датчик шума и приборы учета
Видел неделю назад на их сайте. Недешевое решение, однако. Но, всё и в одном «стакане». Но как это все подружить с уже существующим сетапом? Без приобретения их контролера ?MSapogov писал(а): ↑18 сен 2018, 16:50Кажется кто-то хотел универсальный датчик... в том числе и шума...
Так - получайте....
https://habr.com/company/wirenboard/blog/423523/
-
- Администратор
- Сообщения: 2194
- Зарегистрирован: 29 май 2015, 21:23
- Откуда: Екатеринбург, Нижний Тагил
Re: Арендная квартира: MegaD, openHAB, датчик шума и приборы учета
Они работают по Модбасу. Я использую (недешёвые) Moxa rs485-ethernet. Ну и OpenHAB в качестве сервера. И ещё какой-то софт, чтобы получился в результате виртуальный ком-порт с модбасом. Можно по-разному организовать.Bonefolder писал(а): ↑18 сен 2018, 18:22Но как это все подружить с уже существующим сетапом? Без приобретения их контролера ?
-
- Сообщения: 617
- Зарегистрирован: 30 мар 2017, 11:15
- Откуда: г.Севастополь
Re: Арендная квартира: MegaD, openHAB, датчик шума и приборы учета
И чтоб подключалось в Мегу на одной витой паре. Т.е. с минимальным количеством проводовd.v.ermakov писал(а): ↑18 сен 2018, 18:09У нас в очереди на разработку собственный комбинированный датчик. Температура-влажность-движение-со2, также модульный. Шум, мне кажется, мало кому интересен. И освещённость тоже не вижу смысла в комнатах измерять. А вот воткнуть ИК-передатчик интересная идея.
Готов стать бета-тестером
Было бы здорово получить такой готовый девайс в корпусе. Чтоб избавиться от колхоза. Ждем, с нетерпением. Датчик освещенности не сильно удорожит конструкцию ИМХО Но поможет решить проблему включения "ночника", когда это действительно необходимо. А не средняя температура (тьфу ты, освещенность) по больнице.
Как вариант - сделать модульный набор, как у конкурентов кому надо, докупит недостающую "освещенность" или удалит ненужный ИК....
-
- Сообщения: 617
- Зарегистрирован: 30 мар 2017, 11:15
- Откуда: г.Севастополь
Re: Арендная квартира: MegaD, openHAB, датчик шума и приборы учета
Ценой на Моха меня не испугать)) У меня и свитчи их стоят в щитках)) И переходник RS485->USB где-то валаяется)) Для меня остается проблемой все это сдружить. И не думаю, что они отдадут АПИ просто так.d.v.ermakov писал(а): ↑18 сен 2018, 18:30Они работают по Модбасу. Я использую (недешёвые) Moxa rs485-ethernet. Ну и OpenHAB в качестве сервера. И ещё какой-то софт, чтобы получился в результате виртуальный ком-порт с модбасом.
За модбас протокол я в курсе. И даже, о их приблуде за 3000руб. знаю..... Но дальше, что с этим делать - для меня проблема
-
- Администратор
- Сообщения: 2194
- Зарегистрирован: 29 май 2015, 21:23
- Откуда: Екатеринбург, Нижний Тагил
Re: Арендная квартира: MegaD, openHAB, датчик шума и приборы учета
Для Модбаса не нужен никакой АПИ, а регистры у них на сайте в ВИКИ описаны (не все, правда). https://wirenboard.com/wiki/index.php/% ... %BA_WB-MSW
Геморрой это всё, конечно. АПИ МегаД намного проще и удобнее, ИМХО.
Мы планируем модуль датчиков без своих мозгов, то есть до каждого датчика будет один сигнальный провод, плюс общий SCL.
Насчёт модульности согласен, так и будет.
Геморрой это всё, конечно. АПИ МегаД намного проще и удобнее, ИМХО.
Мы планируем модуль датчиков без своих мозгов, то есть до каждого датчика будет один сигнальный провод, плюс общий SCL.
Насчёт модульности согласен, так и будет.
-
- Сообщения: 617
- Зарегистрирован: 30 мар 2017, 11:15
- Откуда: г.Севастополь
Re: Арендная квартира: MegaD, openHAB, датчик шума и приборы учета
Исходя из количества проводов в витой паре, в количестве 8 штук, можно немного пофантазировать на тему
2 провода уйдёт на питание, ещё один - на SCL. Остаётся 5. Раздолье
1. HTU-21/DHT-22
2. T6703
3. ИК передатчик
4. PIR
5. MAX44009 или OLED I2C (на выбор)
Совсем без «мозгов» наверное не обойтись, так как питание у датчиков разное. По идее должен получиться отличный девайс. Но главное, повторюсь, корпус
ЗЫ перепутал АПИ и регистры модбаса. Не моя стихия(
2 провода уйдёт на питание, ещё один - на SCL. Остаётся 5. Раздолье
1. HTU-21/DHT-22
2. T6703
3. ИК передатчик
4. PIR
5. MAX44009 или OLED I2C (на выбор)
Совсем без «мозгов» наверное не обойтись, так как питание у датчиков разное. По идее должен получиться отличный девайс. Но главное, повторюсь, корпус
ЗЫ перепутал АПИ и регистры модбаса. Не моя стихия(
-
- Сообщения: 528
- Зарегистрирован: 09 авг 2016, 15:09
- Откуда: Сочи
Re: Арендная квартира: MegaD, openHAB, датчик шума и приборы учета
У openHab есть Modbus binding, хорошо работает с USB-RS485 свистком за $1. В конфиге биндинга нужно прописать все регистры из описания датчика, период проса, скорость на шине и пр.Bonefolder писал(а): ↑18 сен 2018, 18:36За модбас протокол я в курсе. И даже, о их приблуде за 3000руб. знаю..... Но дальше, что с этим делать - для меня проблема
Должно заработать.
-
- Сообщения: 617
- Зарегистрирован: 30 мар 2017, 11:15
- Откуда: г.Севастополь
Re: Арендная квартира: MegaD, openHAB, датчик шума и приборы учета
Я подожду «нативного» для Меги устройства от d.v.ermakov’a
-
- Сообщения: 528
- Зарегистрирован: 09 авг 2016, 15:09
- Откуда: Сочи
Re: Арендная квартира: MegaD, openHAB, датчик шума и приборы учета
Идея такого универсального датчика хорошая. Но как верно сказал d.v.ermakov - VOC в России не нужен. И ModBus по RS-485 - это уже архаизм... на производстве уже везде Ethernet+SNMP/SNMP trap. В квартирах/домах - Ethernet+MQTT или что-то по tcp. В целом хотел бы нечто подобное размещать у себя в доме (сейчас пока подрозетники в которых каким-нибудь образом живут те или иные датчики), но нужен вариант как для стандартного подрозетника, так и навесной.
To d.v.ermakov - буду ждать вашей реализации подобных датчиков. Если еще будет вариант с всем известным OLED - то Wellcome! Ваша версия MegaD меня очень радует, особенно компактными размерами!! И наличием всех 38 портов в "базе"!
To d.v.ermakov - буду ждать вашей реализации подобных датчиков. Если еще будет вариант с всем известным OLED - то Wellcome! Ваша версия MegaD меня очень радует, особенно компактными размерами!! И наличием всех 38 портов в "базе"!
Re: Арендная квартира: MegaD, openHAB, датчик шума и приборы учета
Что-то показания DS18B20 - три штуки на порту MegaD-14-IN. Ver. 6.2. http://192.168.88.60/sec/?pt=7&cmd=list
Подглючивают:
Код: Выделить всё
ff04f2711605:21.06;ff4902731604:17.43;fff9b7731604:39.12
1: Темп. бат спальни
2: Темп. у окна кухни (ff4902731604)
3: Темп. в гостиной (fff9b7731604)