Re: Арендная квартира: MegaD, openHAB, датчик шума и приборы учета
Добавлено: 02 май 2017, 19:01
Sonoff подготовленный для установки в распределительную коробку и подключения к нему кнопки выглядит как-то так:
Код: Выделить всё
Group Lights_Random
Group:Switch:OR(ON, OFF) Lamp "Управление освещением [(%d)]" <light> (Lights_Random)
Switch ElectroDragon1_corridor "Лампа коридор [%s]" <light> (Lamp, Lights_Random, Entrance)
String ElectroDragon1_corridor_State "Лампа коридор, (ElectroDragon MegaESP) [%s]" { http="<[http://192.168.88.75/sec/?pt=4&cmd=get:30000:REGEX((.*))]" }
Switch ElectroDragon1_Restroom "Лампа туалет [%s]" <light> (Lamp, Lights_Random, Restroom_st)
String ElectroDragon1_Restroom_State "Лампа туалет, (ElectroDragon MegaESP) [%s]" { http="<[http://192.168.88.75/sec/?pt=3&cmd=get:30000:REGEX((.*))]" }
Switch Sonoff_Lamp "Лампа настольная в спальне [%s]" <light> (Lamp, Lights_Random, Bedroom_st) //{channel ="megad:device:14in:P4_SonoffLamp:out"}
String Sonoff_Lamp_State "Лампа настольная, (Sonoff MegaESP) [%s]" { http="<[http://192.168.88.74/sec/?pt=4&cmd=get:30000:REGEX((.*))]" }
Switch Sonoff_Living_room "Люстра гостиная [%s]" <light> (Lamp, Lights_Random, Living_room_st)
String Sonoff_Living_room_State "Люстра гостиная, (Sonoff MegaESP) [%s]" { http="<[http://192.168.88.76/sec/?pt=4&cmd=get:30000:REGEX((.*))]" }
Код: Выделить всё
rule "Sonoff_Lamp"
when
Item Sonoff_Lamp received command
then
switch(receivedCommand) {
case ON : sendHttpGetRequest("http://192.168.88.74/sec/?pt=4&cmd=4:1")
case OFF : sendHttpGetRequest("http://192.168.88.74/sec/?pt=4&cmd=4:0")
}
end
rule "Sonoff_Lamp_State"
when
Item Sonoff_Lamp_State received update
then
if (Sonoff_Lamp_State.state=="ON") { postUpdate(Sonoff_Lamp, ON) }
if (Sonoff_Lamp_State.state=="OFF") { postUpdate(Sonoff_Lamp, OFF) }
end
/* =============================================================================================================== */
rule "ElectroDragon1_corridor"
when
Item ElectroDragon1_corridor received command
then
switch(receivedCommand) {
case ON : sendHttpGetRequest("http://192.168.88.75/sec/?pt=4&cmd=4:1")
case OFF : sendHttpGetRequest("http://192.168.88.75/sec/?pt=4&cmd=4:0")
}
end
rule "ElectroDragon1_corridor_State"
when
Item ElectroDragon1_corridor_State received update
then
if (ElectroDragon1_corridor_State.state=="ON") { postUpdate(ElectroDragon1_corridor, ON) }
if (ElectroDragon1_corridor_State.state=="OFF") { postUpdate(ElectroDragon1_corridor, OFF) }
end
rule "ElectroDragon1_Restroom"
when
Item ElectroDragon1_Restroom received command
then
switch(receivedCommand) {
case ON : sendHttpGetRequest("http://192.168.88.75/sec/?pt=3&cmd=3:1")
case OFF : sendHttpGetRequest("http://192.168.88.75/sec/?pt=3&cmd=3:0")
}
end
rule "ElectroDragon1_Restroom_State"
when
Item ElectroDragon1_Restroom_State received update
then
if (ElectroDragon1_Restroom_State.state=="ON") { postUpdate(ElectroDragon1_Restroom, ON) }
if (ElectroDragon1_Restroom_State.state=="OFF") { postUpdate(ElectroDragon1_Restroom, OFF) }
end
/* =============================================================================================================== */
rule "Sonoff_Living_room"
when
Item Sonoff_Living_room received command
then
switch(receivedCommand) {
case ON : sendHttpGetRequest("http://192.168.88.76/sec/?pt=4&cmd=4:1")
case OFF : sendHttpGetRequest("http://192.168.88.76/sec/?pt=4&cmd=4:0")
}
end
rule "Sonoff_Living_room_State"
when
Item Sonoff_Living_room_State received update
then
if (Sonoff_Living_room_State.state=="ON") { postUpdate(Sonoff_Living_room, ON) }
if (Sonoff_Living_room_State.state=="OFF") { postUpdate(Sonoff_Living_room, OFF) }
end
Для того чтобы в ней использовать кнопку подключенную к сонофф надо:empenoso писал(а):Для sonoff решил использовать специализированную прошивку https://github.com/arendst/Sonoff-Tasmota/wiki/openHAB.
Код: Выделить всё
Switch Sonoff_Lamp "Лампа настольная в спальне [%s]" <light> (Lamp, Lights_Random, Bedroom) { mqtt=">[mosquitto:cmnd/Lamp/power:command:*:default], <[mosquitto:stat/Lamp/POWER:state:default]" }
У меня нет ни одного I2C датчика, потому что на openhab невозможно обрабатывать показания с них, если исполнительное устройство не передает уже готовую цифру показаний, а MegaD-328 их сама не умеет обрабатывать.Bonefolder писал(а):не совсем по теме. Но где-то рядом.Оба НТU21 датчика припаяны на UTP кабеле. Длина ~18-20 см. BME 280 другой UTP ~20 м. Все три датчика в одной кружке, чтобы избежать влияние воздушных потоков)))
Вопрос. Мог ли спалить датчики, ввиду неумелой пайки? Если это не причем. То, как калибровать? Про температуру, я в курсе. А как калибровать влажность? Давление показывает приблизительно правильно. С Гис метео расхождение ( в течении недели 2 мм)
Тоже так думал(((empenoso писал(а): Думал HTU21D не надо дополнительно калибровать.
У Вас хоть расхождения небольшие...xsash писал(а): имя / темп / влажность
Сенсор1, '0.38', '-1.17'
Сенсор2, '-0.41', '1.16'
Сенсор3, '0.23', '-1.69'
Сенсор4, '-0.20', '1.70'
Но это временное решение,
Код: Выделить всё
ff2893b31604:23.18;ffecbcb31604:23.31;ffae85b31603:22.75;ff8facb31603:23.12;ffffa4b31603:23.25
Код: Выделить всё
rule "TempHumRaw_MD"
when
Item TempHumRaw_MD received update
then
val parse = TempHumRaw_MD.state.toString.split("/")
val parsedtemperature = parse.get(0)
val parsedhumidity = parse.get(1)
var temperature = new Double(parsedtemperature)
var humidity = new Double(parsedhumidity)
postUpdate(Temp_MD, (temperature - 3.5))
postUpdate(Hum_MD, humidity)
end
Код: Выделить всё
rule "Raw_Temp_1wire"
when
Item Temperature_1wire received update
then
val parse = Temperature_1wire.state.toString.split(";")
postUpdate(Temp_wire1, parse.get(0))
postUpdate(Temp_wire2, parse.get(1))
postUpdate(Temp_wire3, parse.get(2))
postUpdate(Temp_wire4, parse.get(3))
postUpdate(Temp_wire5, parse.get(4))
end
rule "Temp_1wire"
when
Item Temp_wire1 received update
then
val rawtr1 = Temp_wire1.state.toString.split(":")
postUpdate(Temperature_1wire1, rawtr1.get(1))
end
rule "Temp_2wire"
when
Item Temp_wire2 received update
then
val rawtr2 = Temp_wire2.state.toString.split(":")
val temp2 = rawtr2.get(1)
postUpdate(Temperature_1wire2, temp2)
end
Код: Выделить всё
postUpdate(Temperature_1wire2, (temp2 + 0.15))
С цифрами не все так просто. Если была строка то вот перевод в цифру:Bonefolder писал(а): Попытки добавить калибровочные значения, типаОпять приводили к ошибке... Не могу понять, это проблема OH2 (в ОН1 это срабатывает у людей) или моих кривых рук?
Код: Выделить всё
postUpdate(Temperature_1wire2, (temp2 + 0.15))
Код: Выделить всё
var Number Ping2=Float::parseFloat(String::format("%s",WAN_yaru.state))
postUpdate(WAN_yaru_Num, Ping2)
Код: Выделить всё
var Number WatHot = CountWaterM3Hot.state as DecimalType
tmp2 = WatHot + 0.01 // один полный импульс при прохождении 10 л жидкости
На третьей малине она какая-то вообще незначительная. Вот цифры за последние две недели:Bonefolder писал(а):P.S. какая у вас загруженность процессора на малинке? У меня скачет от 6 до 16%. С пиками к 2 и до 28. Evg, за 5 минут, показывает 0,5% А так, крутиться около 7-9%
Как-то про это не думал, можно конечно сразу после счетчика поставить что-то вроде https://www.itead.cc/ru/sonoff-pow.html, дом 70х годов, проводка алюминиевая еще, УЗО на 16А поставил, и перегружать раз в три дня, но как-то у себя дома не стал бы так делать - часы сбиваются. Опять же надо разобраться - поставить прошивку которая выполнит скрипт: выключит, подождет секунд 30 и включит без участия человека (вроде на мега есп так можно, поскольку функционал у меги вроде есть такой).Bonefolder писал(а):А зачем вам тогда физический доступ, раз есть доступ к девайсам через VPN? Как вариант, поставьте крон, перегружать ВСЁ по питанию, через какое-нибудь реле. Скажем, каждое утро в 03:00...