Арендная квартира: MegaD, openHAB, датчик шума и приборы учета

Обсуждение статей, технологий домашней автоматизации, программных и аппаратных решений
empenoso
Сообщения: 860
Зарегистрирован: 11 ноя 2015, 08:03
Откуда: Пермь

Re: Арендная квартира: MegaD, openHAB, датчик шума и приборы учета

Сообщение empenoso » 06 фев 2018, 16:36

Датчик фактически не отражает реальную картину, а usb mic ( https://www.ab-log.ru/forum/viewtopic.p ... 440#p31138 ) - отображает:
noise.png
noise.png (48.84 КБ) 396 просмотров

empenoso
Сообщения: 860
Зарегистрирован: 11 ноя 2015, 08:03
Откуда: Пермь

Re: Арендная квартира: MegaD, openHAB, датчик шума и приборы учета

Сообщение empenoso » 11 фев 2018, 12:15

После замены на новую мегу упросил интерфейс и сделал больше в духе опенхаб - групповые выключатели и средние цифры. Получилось примерно так, как и планировал:
Screenshot_20180211-130736.png
Screenshot_20180211-130736.png (80.63 КБ) 351 просмотр
Screenshot_20180211-130742.png
Screenshot_20180211-130742.png (95.94 КБ) 351 просмотр
Screenshot_20180211-130815.png
Screenshot_20180211-130815.png (100.96 КБ) 351 просмотр
Screenshot_20180211-130831.png
Screenshot_20180211-130831.png (104.98 КБ) 351 просмотр

empenoso
Сообщения: 860
Зарегистрирован: 11 ноя 2015, 08:03
Откуда: Пермь

Re: Арендная квартира: MegaD, openHAB, датчик шума и приборы учета

Сообщение empenoso » 11 фев 2018, 12:22

\openHAB-conf\things\default.things

Код: Выделить всё

/*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 ]

//==============================================================================================================


//==============================================================================================================


//==============================================================================================================


//==============================================================================================================
\openHAB-conf\items\default.items

Код: Выделить всё

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" }

//==============================================================================================================
\openHAB-conf\rules\default.rules

Код: Выделить всё

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

/* =============================================================================================================== */



/* =============================================================================================================== */



/* =============================================================================================================== */
\openHAB-conf\sitemaps\default.sitemap

Код: Выделить всё

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
}	

}
\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
}

empenoso
Сообщения: 860
Зарегистрирован: 11 ноя 2015, 08:03
Откуда: Пермь

Re: Арендная квартира: MegaD, openHAB, датчик шума и приборы учета

Сообщение empenoso » 11 фев 2018, 12:27

С резервным копированием всего только пока не нашел варианта.
Есть https://www.ab-log.ru/forum/viewtopic.p ... 700#p30932 - но похоже не с теми правами запускаю - похоже проблема в этом, потому что по отдельности все команды работают :lol:

OlegJktu84
Сообщения: 625
Зарегистрирован: 16 фев 2016, 19:52

Re: Арендная квартира: MegaD, openHAB, датчик шума и приборы учета

Сообщение OlegJktu84 » 01 апр 2018, 21:56

Я подозреваю что тема шумомера могла быть исчерпана, однако для будущих поколений решил написать.
Есть у Сонофф волшебный горшочек Sonoff SC (20-35$)
В нем есть микрофон https://www.itead.cc/sonoff-sc.html
И к нему есть альт. прошивка https://github.com/arendst/Sonoff-Tasmo ... /Sonoff-SC
сам не пробовал, но помню идей было много.

cds
Сообщения: 6
Зарегистрирован: 24 май 2018, 06:16

Re: Арендная квартира: MegaD, openHAB, датчик шума и приборы учета

Сообщение cds » 11 авг 2018, 20:04

Пытаюсь разобрать ваш конфиг OpenHab-а. Никак не могу понять, как вы сохраняете накопленные показания от счетчиков? Откуда берутся актуальные показания после перезагрузки сервера и Мегадевайса?

empenoso
Сообщения: 860
Зарегистрирован: 11 ноя 2015, 08:03
Откуда: Пермь

Re: Арендная квартира: MegaD, openHAB, датчик шума и приборы учета

Сообщение empenoso » 11 авг 2018, 21:15

cds писал(а):
11 авг 2018, 20:04
Пытаюсь разобрать ваш конфиг 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
}

Ответить