P1 poort uitlezen
Posted: Tue Dec 11, 2012 12:08 am
Vorige week uitgevonden dat het uitlezen van een P1 poort eigenlijk heel eenvoudig is.
Je heb niet meer dan een USB serieel converter nodig een RJ11 met snoer en een stukje script.
dx.com/p/usb-to-rs232-dongle-with-exten ... =affiliate
De converter kost zo'n 3,50 euro.
Je zet de pinnen als volg aan elkaar. Met bv een female RS232 stekker.
Of als je goed kunt solderen haal je de converter uit elkaar en zet je de
aansluiting direct op de print.
RS232 RJ11
2 --------- 5
4 --------- 2
5 --------- 3
Nog eenvoudiger maar iest duurder is het bestellen van de volgende kabel:
sites.google.com/site/nta8130p1smartmet ... er/webshop
In startup.txt van homeseer.
result = hs.OpenComPort(10,"9600,E,7,1",1,"P1.txt","P1_event")
if result <> "" then
hs.WriteLog "Error","Error opening COM port for scanner: "&result
else
hs.WriteLog "OK","COM 10 open"
end if
Natuurlijk zelf vast stellen welke com poort de converter gebruikt
Het script in het bestand P1.txt ziet er zo uit.
If left(data,1) = "!" then
P1_Teller=P1_Teller+1
ElseIf left(data,1) = "(" then
hs.SetDeviceString "V85",CSng(right(data,9))
hs.setDeviceLastChange "V85",now
ElseIf left(data,10) = "1-0:1.7.0(" then
hs.SetDeviceString "V84",CSng(left(right(data,7),4))*1000
hs.setDeviceLastChange "V84",now
ElseIf left(data,10) = "1-0:1.8.2(" then
V82=CSng(left(right(data,13),9))
hs.SetDeviceString "V82",V82
hs.setDeviceLastChange "V82",now
ElseIf left(data,10) = "1-0:1.8.1(" then
V81=CSng(left(right(data,13),9))
hs.SetDeviceString "V81",V81
hs.setDeviceLastChange "V81",now
hs.SetDeviceString "V83",CSng(hs.DeviceString("V82"))+CSng(hs.DeviceString("V81"))
hs.setDeviceLastChange "V83",now
ElseIf left(data,9) = "0-0:96.14" then
hs.SetDeviceString "V80",Cint(right(data,4))
hs.setDeviceLastChange "V80",now
End If
end sub
Het kan natuurlijk wezen dat de output van je P1 poort er iets anders uit zie maar die van mij is als volgt:
/XMX5XMXABCE000043134 (type smart meter)
0-0:96.1.1(S/N kwh meter)
1-0:1.8.1(00043.458*kWh)
1-0:1.8.2(00021.890*kWh)
1-0:2.8.1(00000.000*kWh)
1-0:2.8.2(00000.000*kWh)
0-0:96.14.0(0001)
1-0:1.7.0(0001.15*kW)
1-0:2.7.0(0000.00*kW)
0-0:17.0.0(999*A)
0-0:96.3.10(1)
0-0:96.13.1()
0-0:96.13.0()
0-1:96.1.0(S/N Gasmeter)
0-1:24.1.0(03)
0-1:24.3.0(121118210000)(00)(60)(1)(0-1:24.2.0)(m3)
(00025.325)
0-1:24.4.0(1)
!
Natuurlijk moet je wel eerst de betreffende device's aanmaken.
Maak ze virtual.1 het script zal ze daarna om de 10 sec overschrijven met een nieuwe waarde.
Ik wil het script nog uit bereiden met een teller waarmee de waarde minder vaak worden weg geschreven.
Met een ander klein scriptje bepaal ik het verbruik per dag.
Je heb niet meer dan een USB serieel converter nodig een RJ11 met snoer en een stukje script.
dx.com/p/usb-to-rs232-dongle-with-exten ... =affiliate
De converter kost zo'n 3,50 euro.
Je zet de pinnen als volg aan elkaar. Met bv een female RS232 stekker.
Of als je goed kunt solderen haal je de converter uit elkaar en zet je de
aansluiting direct op de print.
RS232 RJ11
2 --------- 5
4 --------- 2
5 --------- 3
Nog eenvoudiger maar iest duurder is het bestellen van de volgende kabel:
sites.google.com/site/nta8130p1smartmet ... er/webshop
In startup.txt van homeseer.
result = hs.OpenComPort(10,"9600,E,7,1",1,"P1.txt","P1_event")
if result <> "" then
hs.WriteLog "Error","Error opening COM port for scanner: "&result
else
hs.WriteLog "OK","COM 10 open"
end if
Natuurlijk zelf vast stellen welke com poort de converter gebruikt
Het script in het bestand P1.txt ziet er zo uit.
If left(data,1) = "!" then
P1_Teller=P1_Teller+1
ElseIf left(data,1) = "(" then
hs.SetDeviceString "V85",CSng(right(data,9))
hs.setDeviceLastChange "V85",now
ElseIf left(data,10) = "1-0:1.7.0(" then
hs.SetDeviceString "V84",CSng(left(right(data,7),4))*1000
hs.setDeviceLastChange "V84",now
ElseIf left(data,10) = "1-0:1.8.2(" then
V82=CSng(left(right(data,13),9))
hs.SetDeviceString "V82",V82
hs.setDeviceLastChange "V82",now
ElseIf left(data,10) = "1-0:1.8.1(" then
V81=CSng(left(right(data,13),9))
hs.SetDeviceString "V81",V81
hs.setDeviceLastChange "V81",now
hs.SetDeviceString "V83",CSng(hs.DeviceString("V82"))+CSng(hs.DeviceString("V81"))
hs.setDeviceLastChange "V83",now
ElseIf left(data,9) = "0-0:96.14" then
hs.SetDeviceString "V80",Cint(right(data,4))
hs.setDeviceLastChange "V80",now
End If
end sub
Het kan natuurlijk wezen dat de output van je P1 poort er iets anders uit zie maar die van mij is als volgt:
/XMX5XMXABCE000043134 (type smart meter)
0-0:96.1.1(S/N kwh meter)
1-0:1.8.1(00043.458*kWh)
1-0:1.8.2(00021.890*kWh)
1-0:2.8.1(00000.000*kWh)
1-0:2.8.2(00000.000*kWh)
0-0:96.14.0(0001)
1-0:1.7.0(0001.15*kW)
1-0:2.7.0(0000.00*kW)
0-0:17.0.0(999*A)
0-0:96.3.10(1)
0-0:96.13.1()
0-0:96.13.0()
0-1:96.1.0(S/N Gasmeter)
0-1:24.1.0(03)
0-1:24.3.0(121118210000)(00)(60)(1)(0-1:24.2.0)(m3)
(00025.325)
0-1:24.4.0(1)
!
Natuurlijk moet je wel eerst de betreffende device's aanmaken.
Maak ze virtual.1 het script zal ze daarna om de 10 sec overschrijven met een nieuwe waarde.
Ik wil het script nog uit bereiden met een teller waarmee de waarde minder vaak worden weg geschreven.
Met een ander klein scriptje bepaal ik het verbruik per dag.