Integracja z sterownikiem pieca Bruli

 

Posiadam obecnie piec na ekogroszek do którego po awarii oryginalnego sterownika zakupiłem sterownik Bruli. Sterownik ten posiada gniazdko ethernet i umożliwia dostęp do siebie przez stronkę www oraz przez platformę esterownik.pl

 

Oczywiście pojawił się pomysł dołączenia danych z niego do systemu domu choćby ze względu na odczyt temperatur z czujników pieca. 

 

Po odrobinie zabawy udało mi się odkodować wartości ze strony sterownika i doczytywać je z pomoca vbscript. Skrypt w obecnej postaci przesyła temperatury i stan paliwa do 3 odbiorców: micasa vera, domoticz i zabbix w celu logowania danych w dłuższym okresie czasu (5 lat). 

Dane z sterownika przychodzą w takiej postaci :

[2,1,6,6,0,0,76,0,0,0,0,0,0,0,0,0,247,0,240,0,68,0,184,1,75,1,245,0,219,1,41,2,16,0,1,1,0,45,44,0,0,0,2,2,16,11,22,14,50,52,
1,1,0,1,1,200,0,190,0,0,10,2,0,0,6,42,0,0,16,11,19,17,50,120,32,50,0,0,209,0,209,0,1,0,126,3]

i np bajt 20 i 21 to temperatura zewnętrzna a 22 i 23 to temperatura CWU

cwu = tempval(valarray(22),valarray(23))

Funckja tempval oblicza temperaturę z 2 lub jednego bajta.

funckja setvaltem wysyła temperaturę do micasa vera gdzie pierwsza cyfra to id urządzenia a druga to wartośc do wysłania 

funkcja setvaltempdomo wysyła temperaturę do domoticz gdzie nanalogicznie jak do vera pierwsza liczba to id urządzenia a druga to wartość.

funckja sendzab wysyła wartość do zabbix 

Aby użyć tylko wysyłania do domoticz wystarczy zaremować funkcje 

run = sendzab("domo.piecout",out) i run = setvaltemp(322,sal)  oraz pozostałe ich iteracje dla kolejnych czujników.

Poniższy kod zapisz jako plik np piec.vbs i ustaw w systemie do uruchamiania np w task scheduler co 5 minut.

 

ReDim strArgumentArray(0)
'On Error Resume Next
Set oShell = WScript.CreateObject("Wscript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
Set oNet = CreateObject("WScript.Network")

TEMP_SID = "urn:upnp-org:serviceId:TemperatureSensor1"
LIGHT_SID = "urn:micasaverde-com:serviceId:LightSensor1"
VALERT = "urn:richardgreen:serviceId:VeraAlert1"


strArgumentArray(0) = ""
For i = 0 to Wscript.arguments.count - 1
    ReDim Preserve strArgumentArray(i)
    strArgumentArray(i) = Wscript.arguments.item(i)
Next
path= Left(WScript.ScriptFullName,Len(WScript.ScriptFullName)-Len(WScript.ScriptName))
wscript.echo path

wget = oShell.run("wget http://piec?com=02010006000000006103 --user=admin --password=password -O " & path & "piec.out",0,True)

	If (fso.FileExists(path & "piec.out")) Then
		'WScript.Echo "File sites.txt exist"
		Set ts= fso.OpenTextFile(path & "piec.out", 1,False, False)
		If Not ts.AtEndOfStream Then
   			Do
      			TmpLine = ts.ReadLine
      			a=a+1
      			'wscript.Echo "test " & a & " -- " & tmpline
      			If (Len(TmpLine)<>0) Then
      				TmpLine = replace(TmpLine,"[","")
					TmpLine = replace(TmpLine,"]","")
         			valarray = Split(TmpLine, ",", -1, 1)
      			End If
   			Loop Until ts.AtEndOfStream
		End If
		ts.Close
	End If

sal = tempval(valarray(16),valarray(17)) 'odkodowanie temp  
run = setvaltemp(322,sal)  ' wysylka temp do Vera
run = setvaltempdomo(199,sal) ' wysylka temp do domo

hol = tempval(valarray(18),valarray(19))
run = setvaltemp(323,hol)
run = setvaltempdomo(200,hol)

out = tempval(valarray(20),valarray(21))
run = setvaltemp(324,out)
run = setvaltempdomo(196,out)
run = sendzab("domo.piecout",out) ' wysylka temp do zabbix

cwu = tempval(valarray(22),valarray(23))
run = setvaltemp(325,cwu)
run = setvaltempdomo(198,cwu)

ret = tempval(valarray(24),valarray(25))
run = setvaltempdomo(203,ret)

co  = tempval(valarray(28),valarray(29))
run = setvaltemp(326,co)
run = setvaltempdomo(197,co)

kom = tempval(valarray(30),valarray(31))
run = setvaltempdomo(202,kom)

fuel = valarray(75)
run = setvalfuel(329,fuel)
run = setvaltempdomo(201,fuel)
run = sendzab("domo.piecfuel",fuel)
Wscript.echo sal & " " & hol & " " & out & " " & cwu & " " & ret & " " & co & " " & kom & " " & fuel

Function setvaltemp(id,value)
value = replace(value,",",".")
'wscript.echo value
setvaltemp = oShell.run("wget http://vera:3480/data_request?id=variableset&DeviceNum="&id&"&serviceId="&TEMP_SID&"&Variable=CurrentTemperature&Value=" & value & "  -O " & path & "setval.txt",0,True)
End Function

Function setvaltempdomo(id,value)
value = replace(value,",",".")
'wscript.echo value
setvaltempdomo = oShell.run("wget http://domoticz.home.local:8080/json.htm?type=command&param=udevice&idx="&id&"&nvalue=0&svalue=" & value & " -O " & path & "setvaldomo.txt",0,True)
End Function

Function sendzab(key,value)
value = replace(value,",",".")
sendzab = oShell.run("C:\zab\zabbix_sender.exe -z ipzabbix -p 10051 -s Sensors -k " & key & " -o " & value,0,True)
End function


Function setvalfuel(id,value)
'value = replace(value,",",".")
'wscript.echo value
setvalfuel = oShell.run("wget http://vera:3480/data_request?id=variableset&DeviceNum="&id&"&serviceId="&LIGHT_SID&"&Variable=CurrentLevel&Value=" & value & "  -O " & path & "setval.txt",0,True)
End Function

Function TempVal(arg1,arg2)
val1 = hex(arg2)
val2 = hex(arg1)
'if len(val2) = 1 then
'	val2 = "0" & val2
'End If
'wscript.echo arg1 & " " & arg2
'wscript.echo form_load(arg1,arg2)
'wscript.echo form_load(arg2,arg1)
'wscript.echo form_load(254,255)
TempVal = form_load(arg2,arg1) /10
End Function

Function Form_Load(a,b)
   ' Dim HiByte As Byte, LoByte As Byte
    HiByte = a
    LoByte = b
    Form_Load = (HiByte And &H7F) * &H100 Or LoByte Or -(HiByte > &H7F) * &H8000
End Function

 

Koniecznie należy podać hasło do konta admin pieca w skrypcie aby możliwe było odczytanie danych z pieca oraz obok skryptu musi być plik wget.exe dostepny w internecie np tutaj:

http://gnuwin32.sourceforge.net/packages/wget.htm

 

 

A tak wyglądają odczytane dane 

piec

 

Skrypt stworzy sobie pliki lokalnie obok miejsca gdzie będzie skopiowany z pobieranymi danymi. Ścieżka do której będzie skopiowany nie może zawierać spacji. Skrypt trzeba ustawić w task schedulerze na wykonywanie np co 5 minut.