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¶m=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
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.