Energiesparen Tutorial Umwelt

Z-Wave Wetterstation DIY Teil 2 - Fibaro HC2 Virtual Device

Geschrieben von mdietinger

Im ersten Teil dieses Tutorials zeigte ich euch, wie Ihr euch eine eigene Z-Wave Wetterstation mit dem Z-UNO bauen könnt. In diesem zweiten Teil soll es um die Visualisierung im Fibaro Home Center und auf einem Display gehen.

Wetterstation Teil 2 :VD & Wetter Display

Nachdem ich mir meine eigene Wetterstation auf Z-Uno basierend gebastelt habe, musste natürlich auch eine Lösung her, um die Werte zusammengefasst anzeigen zu können.
Weiterhin wollte ich die Daten zu EmonCMS übertragen, wo ich auch schon meine Wärmepumpen-Daten gesammelt und visualisiert habe. Im Laufe der letzten Monate wurde die Lösung immer umfangreicher.

Funktionen:

  • Alle Konfigurationen werden übersichtlich im LUA Script gemacht.
  • Alle Variablen werden automatisch erzeugt
  • Das VD holt sich seine Konfigurationen aus den Variablen.
  • Alle Labels werden automatisch beschriftet.
  • Die Lösung unterstützt alle Arten von Wettersensoren (Temperatur, Wind, Luftdruck,....)
  • Die Lösung unterstützt weiters auch Leistung und Stromverbruach (Falls sich wer seine Verbraucher darstellen möchte)
  • Bei eingestellten Schwellwerten können Aktionen getriggert werden.
    • Die Trigger Konditionen können auch durch Fremd Scripte geändert werden.
  • Diverse Webservices können mit Daten versorgt werden. (Wunderground, EmonCMS,...)
  • Das Nextion Display kann verwendet werden um Daten lokal anzuzeigen.
    • Mit etwas Programmieraufwand könnte das Display auch Retour fähig gemacht werden und auch die HC2 steuern.
      • z.B. Alarm Panel
      • Übersicht aller Türen und Fenster
      • Heizungsteuerung
      • ....
  • Benutzerverständigung wenn keine Daten mehr geliefert werden. (Heardbeat von Z-UNO)
  • Tägliche min/max Zusammenfassung als Mail. (Monats und Jahresstatistik wird auch erzeugt)
  • Umrechnung der Wetterparameter auf andere Einheiten. (z.B. °C auf °F)
  • Berechnung von Taupunkt
  • Lüftungsratgeber
    • Kein Lüften
    • Lüften
    • Oder Heizen, wenn Lüften nicht reichen sollte.
  • Irgendetwas habe ich sicher vergessen :-)

DIY - Z-Wave Wetterstation

LUA Configurations Script Erklärung:

Vollständiges Script in "Implementierung".

BASIC Konfig:

function ConfigurationParameters()
-- XXXXXXXXXXXXXXXXXXXXXXX   Start configuration parameters  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
myConfig.Update = 1					   		-- <0/1> automatic update of virtual device labels, requires username & password 
myConfig.USER = '<YOUR_HC2_USER>' 		-- <HC2 USER> only needed if VD should automatically write its labels :don't forget to clear if you share this script
myConfig.PWD = '<YOUR_HC2_PWD>'             		-- <HC2 PASSWORD> only needed for VD to automatrically change its labels :don't forget to clear if you share this script
myConfig.VD_ID = 0					   		-- <0> for full automatic mode (VD automatic detection), in manual mode(1st parameter) enter <VIRTUAL DEVICE ID>

myConfig.Trigger_ID = 0				   	-- <TRIGGER DEVICE ID> only setup if Z-UNO sends cyclic counter (0-4), synchronizes update of values to the second, enter 0 for timed mode
myConfig.Trigger_UpdateFailedDeviceID = {<YOUR_MOBILE_DEVICE_ID>}	-- <MOBILE DEVICE IDs> mobile device ID for notifications, multiple ID's coma separated
myConfig.DailyReportMailID = {<YOUR_EMAIL_ID>}			-- <EMAIL IDs> email ID for daily report, multiple ID's coma separated
myConfig.Altitude = <YOUR_HEIGHT_IN_METERS>						-- <Meters> set homes altitude in meters for correct airpressure calaculations

myConfig.Trigger_UpdateFailedAfter = 10		-- <Minutes> run triggerUpdateFailed routine after x minutes
myConfig.VariableUpdateAfterMinutes = 60 	-- <Minutes> MIN MAX Alarms will only update Variable after defined time and meeting trigger value
UpdateMyRecords = 0							-- Update user variables and records with default parameter after new configuration	    |0 = keep records |1 = update with default
DAILY_RESET = 1								-- reset RAIN & ENERGY counter daily?

Die Beschreibung aller Parameter ist im LUA Script.
Zumindest alle Parameter welche mit "<>" hervorgehoben sind, müssen auf deine eigenen Werte geänndert werden.
"Full automatic mode"  - nur in der eigenen Verantwortung verwenden! (Bitte zuvor ein Backup durchführen)

Sensor Konfiguration:

-- XXXXXXXXXXXXXXXXXXXXXXX   Sensor configurations  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
WS = 0 -- don't change

--SENSOR_ID = numeric sensor ID example 613
--SENSOR_ID = or option dew point(DP): 'DP& TEMP_INDEX[1-18 ID]& HUM_INDEX[1-18 ID]' example 'DP&1&2'
--SENSOR_ID = or option ventilation adviser(VA): 'VA& TEMP_INDEX_OUT[1-18 ID]& HUM_INDEX_OUT[1-18 ID]& TEMP_INDEX_IN[1-18 ID]& HUM_INDEX_IN[1-18 ID]& Target Humiditdy' example 'VA&1&2&10&11&50'
--TYPE = type of sensor, optional 'V' for value(default), 'R' for rain sensor, 'P' for power report of device, 'E' for energy value of sensor. rain and power are counters and will be reset daily 
--NOTIFY_VARIABLE = optional global variable to get notifications about reaching min or max value (will be automatically created)
--MIN =  optional if variable is used values bellow MIN will be reported (myConfig.VariableUpdateAfterMinutes timer is used)
--MAX = optional if variable is used values above MAX will be reported (myConfig.VariableUpdateAfterMinutes timer is used)

--[[   Field description     {SENSOR_ID,     optional[,TYPE['R'=Rain, 'P'=Power, 'E'=Energy, 'V'= Value], NOTIFY_VARIABLE, MIN, MAX]} --]]
--[[Temperatur_OUT--]] v1[1]={653,'V','TEST_TEMP',-0.5,3} -- example use data from sensor 549, update TEST_TMP variable if temperature < -0.5 or > 15°
--[[  Humidity_OUT--]] v1[2]={655}					   -- example use date from sensor 551, no MIN-MAX
--[[ DEW_POINT_OUT--]] v1[3]={'DP&1&2'}                -- example calculate dew point with temperature from 1. sensor and humitity from 2. sensor
--[[      WIND_OUT--]] v1[4]={656}		
--[[      GUST_OUT--]] v1[5]={657}		
--[[ DIRECTION_OUT--]] v1[6]={658}		
--[[      RAIN_OUT--]] v1[7]={660,'R'}		
--[[ RAIN_RATE_OUT--]] v1[8]={659}		
--[[     LIGHT_OUT--]] v1[9]={662}		
--[[ Temperatur_IN--]]v1[10]={583}	
--[[   Humitity_IN--]]v1[11]={585}		
--[[  DEW_POINT_IN--]]v1[12]={'DP&10&11'}
--[[   Pressure_IN--]]v1[13]={586}		
--[[      LIGHT_IN--]]v1[14]={588}	
--[[Ventilation Adviser]]v1[15]={'VA&1&2&10&11&50'}
--[[    WZ LICHT W--]]v1[16]={210,'P'}	
--[[  WZ LICHT KWH--]]v1[17]={210,'E'}	
--[[        SPARE4--]]v1[18]={}	
--ADD MORE IF REQUIRED

Alle Sensor ID's sind von meiner Konfiguration und müssen auf eure angepasst werden.
Beschreibung aller Funktionen ist im Code kommentiert.
Der Text links von den Sensoren (Field description) ist nur eine Hilfe (Kommentar) und kann auf Eure Bedürfnisse geändert werden. (Bitte auch in den folgenden Teilen ändern)

DIY - Z-Wave Wetterstation

VD Konfiguration:

--VD_ID = measured value will be written to virtual device label number(ID). [1-20, 1 = 1st label after buttons (MIN, NOW, MAX) 
--VD_NAME = label name in virtual device (will be automatically written) use '' if device name to be used
--VD_UNIT = unit to be suffixed in virtual device after the value
--VD_CONVERSION = unit conversion as defined in VD code to convert units for eample m/s to kmh = 'ms2kmh'

--[[                          {VD_ID, VD_NAME,VD_UNIT,VD_CONVERSION}--]]
--[[Temperatur_OUT--]] v2[1]={1,'Temperatur','°C',''} 	-- example use 1st VD label after buttons, name it Temperatur, append unit °C to measurement and don't convert data
--[[  Humidity_OUT--]] v2[2]={2,'Luftfeuchte','%',''}
--[[ DEW_POINT_OUT--]] v2[3]={3,'Taupunkt','°C',''}
--[[      WIND_OUT--]] v2[4]={5,'Wind','km/h','ms2kmh'}	-- example use 5th VD label after buttons, name it Wind, append unit km/h to measurement and convert data from m/s to km/h
--[[      GUST_OUT--]] v2[5]={6,'Böen','km/h','ms2kmh'}		
--[[ DIRECTION_OUT--]] v2[6]={7,'Richtung','','2direction'}		
--[[      RAIN_OUT--]] v2[7]={8,'Niederschlag','mm',''}		
--[[ RAIN_RATE_OUT--]] v2[8]={9,'Regenrate','mm/h',''}		
--[[     LIGHT_OUT--]] v2[9]={10,'Solar','W','lux2watt'}		
--[[ Temperatur_IN--]]v2[10]={11,'Temperatur','°C',''}	
--[[   Humitity_IN--]]v2[11]={12,'Luftfeuchte','%',''}		
--[[  DEW_POINT_IN--]]v2[12]={13,'Taupunkt','°C',''}
--[[   Pressure_IN--]]v2[13]={4,'Luftdruck','hpa','2alt'}		
--[[      LIGHT_IN--]]v2[14]={14,'Licht','lx',''}	
--[[Ventilation Adviser]]v2[15]={16,'LÜFTEN?','',''}	
--[[        SPARE2--]]v2[16]={18,'WZ LICHT','W',''}	
--[[        SPARE3--]]v2[17]={19,'WZ LICHT','KWH','2decimals'}	
--[[        SPARE4--]]v2[18]={}	
--ADD MORE IF REQUIRED, MAX VD_ID[1-20]

Bitte auf Eure Konfiguration anpassen.

Im virtuellen Device:
Wie ihr Emojis in eurem VD anzeigen könnt findet ihr hier (Danke an Hubertus).

Wunderground Konfiguration:

-- Wunderground configuration
WS = WS+1	
mySensors.WebService_Name[WS] = {} 		-- don't change
mySensors.WebService_Convert[WS] = {} 	-- don't change
mySensors.WebService_Handling[WS] = {} 	-- don't change
mySensors.WebService_Unit[WS] = {} 		-- don't change
v3[WS]={}								-- don't change

myConfig.WebService_ID[WS] = "<YOUR_WUNDERGROUND_ID>" 													-- <USER NAME/ID> enter user name of webservice
myConfig.WebService_Key[WS] = "<YOUR_WUNDERGROUND_KEY>"													-- <PASSWORD/KEY> enter password of webservice
myConfig.WebService_Url[WS] = 'weatherstation.wunderground.com'									-- <URL/IP:PORT> enter URL or IP & Port
myConfig.WebService_UrlPrefix[WS] = '/weatherstation/updateweatherstation.php?ID=WebService_ID&PASSWORD=WebService_Key&dateutc=now&' -- <PREFIX> String which needs to be prefixed to measurements
myConfig.WebService_UrlSuffix[WS] = '&softwaretype=FibaroHC2&action=updateraw'				-- <SUFFIX> String which needs to be suffixed to measurements
myConfig.WebService_Parameter_prefix[WS] = '&'												-- <PREFIX> String/char which needs to be prefixed to every measurement
myConfig.WebService_Parameter_seperator[WS] = '='											-- <SEPERATUR> String/char which seperates measurement text and value
myConfig.WebService_OneShotUpdate[WS] = 1													-- <0/1> update all measurements with one command per measurement or one combined one
myConfig.WebService_UpdateAfterCycles[WS] = 5 												-- Update after x Cycles (Trigger Cycles, or Minutes) -- <Minutes> update web service every x minutes



-- WEB_NAME = name/identifier of parameter
-- WEB_CONVERSION = parameter convertion rule defined in VD
-- WEB_AVG = parameter handling for multiple minute updates, AVG=average value, MIN=minimum valus, MAX=maximum value , '' simply takes last value, for example(temperature= AVG, wind gust = MAX)

--[[               		         {WEB_NAME,WEB_CONVERSION,WEB_AVG/MIN/MAX,WEB_UNIT}--]]
--[[Temperatur_OUT--]] v3[WS][1]={'tempf','c2f','AVG',''}					-- example webservice identifies out side temperature measurements with tempf and expects Farenheit (°C > °F)
--[[  Humidity_OUT--]] v3[WS][2]={'humidity','','AVG',''}	
--[[ DEW_POINT_OUT--]] v3[WS][3]={'dewptf','c2f','AVG',''}
--[[      WIND_OUT--]] v3[WS][4]={'windspeedmph','ms2mph','AVG',''}		
--[[      GUST_OUT--]] v3[WS][5]={'windgustmph','ms2mph','MAX',''}		
--[[ DIRECTION_OUT--]] v3[WS][6]={'winddir','2dir','',''}		
--[[      RAIN_OUT--]] v3[WS][7]={'dailyrainin','mm2inch','',''}		
--[[ RAIN_RATE_OUT--]] v3[WS][8]={'rainin','mm2inch','',''}		
--[[     LIGHT_OUT--]] v3[WS][9]={'solarradiation','lux2watt','AVG',''}		
--[[ Temperatur_IN--]]v3[WS][10]={'','','',''}	
--[[   Humitity_IN--]]v3[WS][11]={'','','',''}		
--[[  DEW_POINT_IN--]]v3[WS][12]={'','','',''}
--[[   Pressure_IN--]]v3[WS][13]={'baromin','hpa2inch','AVG',''}		
--[[      LIGHT_IN--]]v3[WS][14]={'','','',''}	
--[[Ventilation Adviser]]v3[WS][15]={'','','',''}	
--[[        SPARE2--]]v3[WS][16]={'','','',''}	
--[[        SPARE3--]]v3[WS][17]={'','','',''}	
--[[        SPARE4--]]v3[WS][18]={'','','',''}	
--ADD MORE IF REQUIRED

Falls ihr eure Wetterwerte auf Wunderground darstellen möchtet könnt ihr euch dort registrieren:
https://www.wunderground.com/personal-weather-station/signup

Ihr bekommt dann Station ID und Key welche in der Konfig eingetragen werden können. Dann werden Eure Daten alle 5 Minuten zu Wunderground übertragen.

Wenn nicht, könnt ihr alle Zeilen welche zur Wunderground Konfiguration gehören löschen. (Obiger Auszug)

 

EmonCMS Konfiguration:

--EMONCMS configuration (ADD ADDITIONAL WEB SERVICES IF REQUIRED, by copying from "COPY START" to "COPY END")
-->>>> COPY START
WS = WS+1	
mySensors.WebService_Name[WS] = {}
mySensors.WebService_Convert[WS] = {}
mySensors.WebService_Handling[WS] = {} 
mySensors.WebService_Unit[WS] = {} 
v3[WS]={}

myConfig.WebService_ID[WS] = ""
myConfig.WebService_Key[WS] = "<YOUR_EMONCMS_KEY>"
myConfig.WebService_Url[WS] = 'emoncms.org'
myConfig.WebService_UrlPrefix[WS] = '/input/post?node=wetterNEU&json={{'
myConfig.WebService_UrlSuffix[WS] = '}&apikey=WebService_Key'
myConfig.WebService_Parameter_prefix[WS] = ','
myConfig.WebService_Parameter_seperator[WS] = ':'
myConfig.WebService_OneShotUpdate[WS] = 1
myConfig.WebService_UpdateAfterCycles[WS] = 1		



--[[               		         {WEB_NAME,WEB_CONVERSION,WEB_AVG/MIN/MAX,WEB_UNIT}--]]
--[[Temperatur_OUT--]] v3[WS][1]={'TEMP_OUT','','AVG',''}
--[[  Humidity_OUT--]] v3[WS][2]={'HUM_OUT','','AVG',''}	
--[[ DEW_POINT_OUT--]] v3[WS][3]={'DP_OUT','','AVG',''}
--[[      WIND_OUT--]] v3[WS][4]={'WIND_OUT','ms2kmh','AVG',''}		
--[[      GUST_OUT--]] v3[WS][5]={'GUST_OUT','ms2kmh','MAX',''}		
--[[ DIRECTION_OUT--]] v3[WS][6]={'DIR_OUT','2dir','',''}		
--[[      RAIN_OUT--]] v3[WS][7]={'RAIN_OUT','','',''}		
--[[ RAIN_RATE_OUT--]] v3[WS][8]={'RR_OUT','','',''}		
--[[     LIGHT_OUT--]] v3[WS][9]={'SOLAR_OUT','lux2watt','AVG',''}		
--[[ Temperatur_IN--]]v3[WS][10]={'TEMP_IN','','AVG',''}	
--[[   Humitity_IN--]]v3[WS][11]={'HUM_IN','','AVG',''}		
--[[  DEW_POINT_IN--]]v3[WS][12]={'DP_IN','','AVG',''}
--[[   Pressure_IN--]]v3[WS][13]={'PRESS_IN','2alt','AVG',''}		
--[[      LIGHT_IN--]]v3[WS][14]={'','','',''}	
--[[Ventilation Adviser]]v3[WS][15]={'','','',''}	
--[[        SPARE2--]]v3[WS][16]={'WZ_LIGHT_W','','',''}	
--[[        SPARE3--]]v3[WS][17]={'WZ_LIGHT_KWH','','',''}	
--[[        SPARE4--]]v3[WS][18]={'','','',''}	
--ADD MORE IF REQUIRED 
-->>>> COPY END

Falls ihr eure Wetterwerte auf EmonCMS darstellen möchtet, könnt ihr euch dort registrieren:
https://emoncms.org/

Alternativ zur gehosteten Lösung gibt es auch die Möglichkeit EMONCMS lokal auf einen Raspberry zu installieren. (myConfig.WebService_Url muss auf lokale IP Adresse geändert werden). Details findet Ihr auf der Webseite.

Meine Integration soll nur eine Hilfe liefern, um die Daten auf EmonCMS darzustellen. Wie ihr den Service konfiguriert würde diesen Bericht sprengen. (Online Manual)

Hinweis: Ab 1. Juli wird für diesen Dienst eine Gebühr verrechnet, lokal ist die Lösung weiterhin als Opensource verfügbar.

Wenn nicht verwendet, bitte löschen.

Nextion Konfiguration:

--NEXTION configuration (ADD ADDITIONAL WEB SERVICES IF REQUIRED, by copying from "COPY START" to "COPY END")
-->>>> COPY START
WS = WS+1	
mySensors.WebService_Name[WS] = {}
mySensors.WebService_Convert[WS] = {}
mySensors.WebService_Handling[WS] = {} 
mySensors.WebService_Unit[WS] = {} 
v3[WS]={}

myConfig.WebService_ID[WS] = ""
myConfig.WebService_Key[WS] = ""
myConfig.WebService_Url[WS] = '<YOUR_NEXTION_IP>'
myConfig.WebService_UrlPrefix[WS] = '/HC2/post?DATA={t99.txt:RESET,'
myConfig.WebService_UrlSuffix[WS] = '}'
myConfig.WebService_Parameter_prefix[WS] = ','
myConfig.WebService_Parameter_seperator[WS] = ':'
myConfig.WebService_OneShotUpdate[WS] = 1
myConfig.WebService_UpdateAfterCycles[WS] = 1		



--[[               		         {WEB_NAME,WEB_CONVERSION,WEB_AVG/MIN/MAX,WEB_UNIT}--]]
--[[Temperatur_OUT--]] v3[WS][1]={'TEMPOUT.txt','','AVG',''}
--[[  Humidity_OUT--]] v3[WS][2]={'HUMOUT.txt','','AVG',''}	
--[[ DEW_POINT_OUT--]] v3[WS][3]={'','','',''}
--[[      WIND_OUT--]] v3[WS][4]={'WIND.txt','ms2kmh','AVG',''}		
--[[      GUST_OUT--]] v3[WS][5]={'GUST.txt','ms2kmh','MAX',''}		
--[[ DIRECTION_OUT--]] v3[WS][6]={'','','',''}		
--[[      RAIN_OUT--]] v3[WS][7]={'RAIN.txt','','',''}		
--[[ RAIN_RATE_OUT--]] v3[WS][8]={'RAINRATE.txt','','',''}		
--[[     LIGHT_OUT--]] v3[WS][9]={'','','',''}		
--[[ Temperatur_IN--]]v3[WS][10]={'TEMPIN.txt','','AVG',''}	
--[[   Humitity_IN--]]v3[WS][11]={'HUMIN.txt','','AVG',''}		
--[[  DEW_POINT_IN--]]v3[WS][12]={'','','',''}
--[[   Pressure_IN--]]v3[WS][13]={'PRESS.txt','2alt','AVG',''}		
--[[      LIGHT_IN--]]v3[WS][14]={'','','',''}	
--[[Ventilation Adviser]]v3[WS][15]={'','','',''}	
--[[        SPARE2--]]v3[WS][16]={'','','',''}	
--[[        SPARE3--]]v3[WS][17]={'','','',''}	
--[[        SPARE4--]]v3[WS][18]={'','','',''}	
--ADD MORE IF REQUIRED 
-->>>> COPY END

Die Lösung wird weiter unten im Bericht dokumentiert.

Wenn nicht verwendet bitte löschen.

VD Konvertierungs Regeln und Formeln (bei Bedarf eigene Funktionen zufügen):

-- START PARAMETER CONVERSION, DEFINE HERE NEW TRANSLATION RULES
function convertUnit(vConversion,vValue)
	local  newValue
	if vConversion == "c2f" then									-- Conversion Celsius to Farenheit
		newValue = string.format("%.1f",vValue * 9 / 5 + 32)
	elseif vConversion == "ms2mph" then								-- Conversion Meter/Second to Miles Per Hour
		newValue = string.format("%.1f",vValue * 2.2369362920544)
	elseif vConversion == "ms2kmh" then								-- Conversion Meter/Second to Kilometer Per Hour
		newValue = string.format("%.1f",vValue * 3.6)
	elseif vConversion == "hpa2inch" then							-- Conversion Hecto Pascal to Inch
		newValue = string.format("%.4f",(vValue/ math.pow((1-(0.0065*myConfig.Altitude)/(273.15+15)),5.255)) / 33.863886666667 )
	elseif vConversion == "mm2inch" then							-- Conversion Milimeter to Inch
		newValue = string.format("%.4f",vValue * 0.0393701)
	elseif vConversion == "2dir" then								-- Conversion % to Degrees
		newValue = string.format("%.1f",vValue * 3.6)
    elseif vConversion == "lux2watt" then							-- Conversion Lux to Watt/m²
		newValue = string.format("%.1f",vValue * 0.013)
	elseif vConversion == "2alt" then								-- Conversion Preassure to Sea Level
		newValue = string.format("%.1f",vValue / math.pow((1-(0.0065*myConfig.Altitude)/(273.15+15)),5.255))
	elseif vConversion == "kwatt2watt" then							-- Conversion Kilo Watt to Watt
		newValue = string.format("%.0f",vValue *1000)
	elseif vConversion == "2decimals" then							-- Format 2 Decimal Points
		newValue = string.format("%.2f",vValue)
	elseif vConversion == "2direction" then							-- Conversion Degrees to Cardinal Points
		if(tonumber(vValue) < 11.25/3.6) then newValue="Nord"		
			elseif(tonumber(vValue) < 33.75/3.6) then newValue="Nordnordost"
			elseif(tonumber(vValue) < 56.25/3.6) then newValue="Nordost"
			elseif(tonumber(vValue) < 78.75/3.6) then newValue="Ostnordost"
			elseif(tonumber(vValue) < 101.25/3.6) then newValue="Ost"
			elseif(tonumber(vValue) < 123.75/3.6) then newValue="Ostsüdost"
			elseif(tonumber(vValue) < 146.25/3.6) then newValue="Südost"
			elseif(tonumber(vValue) < 168.75/3.6) then newValue="Südsüdost"
			elseif(tonumber(vValue) < 191.25/3.6) then newValue="Süd"
			elseif(tonumber(vValue) < 213.75/3.6) then newValue="Südsüdwest"
			elseif(tonumber(vValue) < 236.25/3.6) then newValue="Südwest"
			elseif(tonumber(vValue) < 258.75/3.6) then newValue="Westsüdwest"
			elseif(tonumber(vValue) < 281.25/3.6) then newValue="West"
			elseif(tonumber(vValue) < 303.75/3.6) then newValue="Westnordwest"
			elseif(tonumber(vValue) < 326.25/3.6) then newValue="Nordwest"
			elseif(tonumber(vValue) < 348.75/3.6) then newValue="Nordnordwest"
			else
				newValue="Nord"
		end
	else 
     	if tonumber (vValue) then
	  		newValue = string.format("%.1f",vValue)
      	else
      		newValue = tostring(vValue)
      	end
	end
return newValue
end
-- END PARAMETER CONVERSION, DEFINE HERE NEW TRANSLATION RULES

Taupunkt Berechnung:

-- START DEW POINT CALCULATION
function DPcalc(vString)
	local DP ={}
	for match in string.gmatch(vString, '[^&]+') do
		table.insert(DP, (match))
	end    
	local TEMP = fibaro:getValue(mySensors.ID[tonumber(DP[2])], 'value')
	local HUM =  fibaro:getValue(mySensors.ID[tonumber(DP[3])], 'value')
	newValue = 234.175*math.log((HUM/100*(6.1078*math.exp(17.08085*TEMP/(234.175+TEMP))))/6.1078)/(17.08085-math.log((HUM/100*(6.1078*math.exp(17.08085*TEMP/(234.175+TEMP))))/6.1078))
return newValue											
end
-- END DEW POINT CALCULATION

Lüftungs Ratgeber:

-- START VENTILATION ADVISOR
function VAcalc(vString)
	local VA ={}
	for match in string.gmatch(vString, '[^&]+') do
	 table.insert(VA, (match))
	end    
	TEMP = fibaro:getValue(mySensors.ID[tonumber(VA[2])], 'value') 	-- Outside temperature
	HUM =  fibaro:getValue(mySensors.ID[tonumber(VA[3])], 'value') 	-- Outside humidity
	valueO = tonumber(234.175*math.log((HUM/100*(6.1078*math.exp(17.08085*TEMP/(234.175+TEMP))))/6.1078)/(17.08085-math.log((HUM/100*(6.1078*math.exp(17.08085*TEMP/(234.175+TEMP))))/6.1078)))
	
	TEMP = fibaro:getValue(mySensors.ID[tonumber(VA[4])], 'value') 	-- Inside temperature
	HUM =  fibaro:getValue(mySensors.ID[tonumber(VA[5])], 'value') 	-- Inside humidity
	valueI = tonumber(234.175*math.log((HUM/100*(6.1078*math.exp(17.08085*TEMP/(234.175+TEMP))))/6.1078)/(17.08085-math.log((HUM/100*(6.1078*math.exp(17.08085*TEMP/(234.175+TEMP))))/6.1078)))
	
	HUM = tonumber(VA[6])											 	-- Target humidity
	valueT = tonumber(234.175*math.log((HUM/100*(6.1078*math.exp(17.08085*TEMP/(234.175+TEMP))))/6.1078)/(17.08085-math.log((HUM/100*(6.1078*math.exp(17.08085*TEMP/(234.175+TEMP))))/6.1078)))
	
	value = valueI - valueO													-- DP Difference
	if HUM < tonumber(fibaro:getValue(mySensors.ID[tonumber(VA[5])], 'value')) then 	-- Target humidity lower then inside humidity
		if tonumber(value) > 0 then												-- DP Outside lower then DP inside
			newValue = 1 														-- Ventilation sufficient
		else
			newValue = -1														-- Ventilation not adviced, heating required
		end
	else
		newValue = 0																-- No action required
	end
	return newValue	
end
-- END VENTILATION ADVISOR

Implementierung:

Kopiert folgendes Script in ein neues LUA script: Wetterconfig_LUA

Benennt Namen z.B. auf Wetter_Config und führt das Script aus.

Nun werden alle Variablen erzeugt(oder geändert) und das VD kann die Konfiguration lesen.

Ladet das Virtuelle Device hier herunter ":WETTER

Importiert in der HC2 das virtuelle Device:

  • Module
  • Füge Gerät hinzu
  • Importiere Virtuelles Gerät (Datei auswählen)

Fertig!!

Das virtuelle Gerät sollte in ein paar Sekunden alle Tasten und Labels Beschriften und jede Minute die Werte updaten.
Nicht vergessen: Nach jeder Konfigurationsänderung das LUA Konfigurations Script speichern und ausführen.

Danach Rebooted das VD.

Sollte das VD mal wegen nicht existierenden device ID's hängen, Konfiguration richtig stellen und VD einfach Speichern, das sollte das VD aus der Fehlermeldung bringen und das Device neu starten.

Beispiel Wetter Trigger Szene:

--[[
%% properties
%% events
%% globals
TEST_TEMP
--]]

trigger = fibaro:getSourceTrigger()
varName = trigger['name']

var= fibaro:getGlobal(varName)
myNOTIFY = json.decode(var)

fibaro:debug('Report:' ..myNOTIFY.report)
fibaro:debug('Update after:' ..tostring(tonumber(myNOTIFY.updateAfter)) ..'min')
fibaro:debug('Min trigger:' ..myNOTIFY.minTrigger)
fibaro:debug('Max trigger:' ..myNOTIFY.maxTrigger)
fibaro:debug('Value:' ..tostring(myNOTIFY.Value))

--		myNOTIFY.report = 'N'
--		myNOTIFY.updateAfter = 60000 -- 60sec
--		myNOTIFY.minTrigger = -5
--		myNOTIFY.maxTrigger = 20
--		var_Value=json.encode(myNOTIFY)
--		fibaro:setGlobal(varName, var_Value)
-- 		fibaro:sleep(2000) 



Trigger Variable auf Eure ändern.

Mit dem auskommentierten Teil könnt ihr auch die Trigger Kriterien im Script ändern.
z.B. keine weiteren Meldungen, oder neue min/max Triggerwerte.

Nextion Display:

Kitlist:

Das Amazon bestellt werden.
Den Amazon.

Nodemcu programieren:

Am Besten mit diesem Tutorial starten: http://henrysbench.capnfatz.com/henrys-bench/arduino-projects-tips-and-more/arduino-esp8266-lolin-nodemcu-getting-started/
Darin wird das Setup der Arduino Oberfläche und das verwenden des Nodemcu's erklärt.

Das Arduino script gibts hier: https://www.siio.de/wetterstation-nextion
Bitte runterladen und in Arduino Oberfläche öffnen.

Dann noch User Name & Passwort von Eurem WLAN Router ändern und auf NodeMCU laden.

const char* ssid = "YourSSID";
const char* password = "YourPWD";

Bitte Eurem NodeMCU eine fixe IP Adresse an eurem Rooter zuweisen und diese IP dem Wetter Display Konfigurations LUA Script eintragen.

Display programieren:

Die Nextion Programierumgebung herunterladen:https://www.itead.cc/display/nextion.html
Das Wetterdisplay.hmi file in den Nextion Editor laden, gibts hier: Wetterdisplay.HMI
Das Programm kompilieren, auf eine micro SD Karte kopieren und Bildschirm neu starten.

Nach dem Aufspielen der SW, micro SD Karte enfernen.

Verkabelung:

Verkabelung ist relativ einfach, da man nur die Stecker des mitglieferten Nextion Kabels auf die NodeMCU Pins stecken muss.

  • microUSB vom Netzteil auf Nodemcu microUSB Buchse
  • NEXTION 5V - NodeMCU VUSB
  • NEXTION GND - NodeMCU GND
  • NEXTION TX - NodeMCU RX
  • NEXTION RX - NodeMCU TX

Wenn alles richtig gemacht wurde sollte das Display im Minuten Rythmus die neuen Werte anzeigen.

Nun noch ein schmuckes Gehäuse und fertig ist das Display. (Habe ein Gehäuse beim Conrad gefunden wo ich noch die Front ausschneiden musste, genaue Type habe ich leider nicht notiert)

Diesen Blogpost hat geschrieben ...

mdietinger

Gib deinen Senf dazu!

WordPress Cookie Hinweis von Real Cookie Banner