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.