P1 poort uitlezen

Forum over Homeseer scripts (DUTCH forum)

Moderators: TANE, Ruud

pklijnjan
Member
Member
Posts: 61
Joined: Mon Aug 31, 2009 11:49 am
Location: Netherlands

P1 poort uitlezen

Post by pklijnjan »

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.
Het eind resultaat
Het eind resultaat
p1poort.JPG (43.17 KiB) Viewed 31283 times
yoja
Starting Member
Starting Member
Posts: 44
Joined: Wed Feb 24, 2010 12:00 pm

Re: P1 poort uitlezen

Post by yoja »

Werkt idd, ik had wilde plannen om dit met een netarduino uit te lezen en daar een webservertje voor te maken.
Maar kabeltje trekken van ongeveer 10 meter was toch goedkoper en minder tijd :-)

Hier mijn homeseer sripts (vb is niet mijn ding, maar het werkt):

Code: Select all

Sub Main(parm)

   parms = Split(cstr(parm),",") 
   
   ''' Get Com port
   if parms(0) <> "Init" then
      comport = hs.getINIsetting("p1 settings","comport",0,"p1.ini")
      if comport = 0 then
         hs.WriteLog "Error","Could not find comport in p1.ini file"
         exit sub
      end if
   end if

   Select Case parms(0)

      Case "Init"     

         if Ubound(parms) = 1 then
            hs.SaveINISetting "p1 settings","comport",parms(1),"p1.ini"
         else
            hs.WriteLog "Error","Wrong input for Init"
            exit sub
         end if

         'result = hs.OpenComPort(parms(1),"9600,E,7,1",1,"P1_event.txt","P1_event","!"&vbCLRf)
         result = hs.OpenComPort(parms(1),"9600,E,7,1",1,"P1_event.txt","P1_event")
         if result <> "" then
            hs.WriteLog "Error","Error opening COM port for p1 reading: "&result
         else
            hs.SetComPortRTSDTR parms(1),False,False
            hs.WriteLog "OK","COM for P1 reading is open"
         end if

      Case "Start"
         hs.SetComPortRTSDTR comport,False,True

      Case "Stop"
         hs.SetComPortRTSDTR comport,False,False

      Case "Trigger"
         hs.SetComPortRTSDTR comport,False,True
         hs.WaitSecs 2
         hs.SetComPortRTSDTR comport,False,False

      Case Else
         hs.writelog "ERROR","Unknown input: "&data   
   
   End Select

End Sub

Code: Select all

const CURRENT_POWER_USAGE       = "P84"
const CURRENT_POWER_DELIVERY    = "P85"
const TOTAL_POWER_USAGE_T1      = "P86"
const TOTAL_POWER_USAGE_T2      = "P87"
const TOTAL_POWER_DELIVERY_T1   = "P88"
const TOTAL_POWER_DELIVERY_T2   = "P89"
const TARIFF_INDICATOR          = "P90"
const TOTAL_GAS_USAGE           = "P91"
const GAS_USAGE_UPDATE          = "P92"

const DEBUG_LOG = False

Sub P1_event(data) 

   if DEBUG_LOG then
      hs.writelog "OK","Data:"&Cstr(data)
   end if 

   ' huidig stroom verbruik:
   ' 1-0:1.7.0(0001.05*kW)
   If left(data,10) = "1-0:1.7.0(" then
      v1 = Split(data,"(")
      v2 = Split(v1(1),"*") 
      device_value = Cdbl(replace(v2(0),".",",")) * 1000
      device_string = device_value&"W" 
      if DEBUG_LOG then
         hs.writelog "OK","-> Huidig stroom verbruik: "& cstr(device_value) & " Watt"
      end if       
      hs.SetDeviceString CURRENT_POWER_USAGE, device_string
      hs.SetDeviceValue CURRENT_POWER_USAGE, device_value
      hs.setDeviceLastChange "P84",now
   
   ' Huidige stroom levering:
   ' 1-0:2.7.0(0000.00*kW)   
   Elseif left(data,10) = "1-0:2.7.0(" then
      v1 = Split(data,"(")
      v2 = Split(v1(1),"*") 
      device_value = Cdbl(replace(v2(0),".",",")) * 1000
      device_string = device_value&"W" 
      if DEBUG_LOG then
         hs.writelog "OK","-> Huidige stroom levering: "& cstr(device_value) & " Watt"
      end if       
      hs.SetDeviceString CURRENT_POWER_DELIVERY, device_string
      hs.SetDeviceValue CURRENT_POWER_DELIVERY,device_value
      hs.setDeviceLastChange "P84",now

   'Totaal verbruik tarief1:
   '1-0:1.8.1(00287.000*kWh)
   Elseif left(data,10) = "1-0:1.8.1(" then
      v1 = Split(data,"(")
      v2 = Split(v1(1),"*") 
      device_value = Cdbl(replace(v2(0),".",",")) * 1000
      device_string = device_value/1000&"kWh" 
      if DEBUG_LOG then
         hs.writelog "OK","-> Totaal verbruik tarief1: "& cstr(device_value) & " Wh"
      end if       
      hs.SetDeviceString TOTAL_POWER_USAGE_T1, device_string
      hs.SetDeviceValue TOTAL_POWER_USAGE_T1,device_value   

   'Totaal verbruik tarief2:
   '1-0:1.8.2(00187.000*kWh)
   Elseif left(data,10) = "1-0:1.8.2(" then
      v1 = Split(data,"(")
      v2 = Split(v1(1),"*") 
      device_value = Cdbl(replace(v2(0),".",",")) * 1000
      device_string = device_value/1000&"kWh" 
      if DEBUG_LOG then
         hs.writelog "OK","-> Totaal verbruik tarief2: "& cstr(device_value) & " Wh"
      end if       
      hs.SetDeviceString TOTAL_POWER_USAGE_T2, device_string
      hs.SetDeviceValue TOTAL_POWER_USAGE_T2,device_value   

   'Totaal geleverd tarief1:
   '1-0:2.8.1(00000.000*kWh)
   Elseif left(data,10) = "1-0:2.8.1(" then
      v1 = Split(data,"(")
      v2 = Split(v1(1),"*") 
      device_value = Cdbl(replace(v2(0),".",",")) * 1000
      device_string = device_value/1000&"kWh" 
      if DEBUG_LOG then
         hs.writelog "OK","-> Totaal geleverd tarief1: "& cstr(device_value) & " Wh"
      end if       
      hs.SetDeviceString TOTAL_POWER_DELIVERY_T1, device_string
      hs.SetDeviceValue TOTAL_POWER_DELIVERY_T1,device_value   

   'Totaal geleverd tarief2:
   '1-0:2.8.2(00000.000*kWh)
   Elseif left(data,10) = "1-0:2.8.2(" then
      v1 = Split(data,"(")
      v2 = Split(v1(1),"*") 
      device_value = Cdbl(replace(v2(0),".",",")) * 1000
      device_string = device_value/1000&"kWh" 
      if DEBUG_LOG then
         hs.writelog "OK","-> Totaal geleverd tarief2: "& cstr(device_value) & " Wh"
      end if       
      hs.SetDeviceString TOTAL_POWER_DELIVERY_T2, device_string
      hs.SetDeviceValue TOTAL_POWER_DELIVERY_T2,device_value   
   
   ' Tarief Indicator
   ' 0-0:96.14.0(0002)
   Elseif left(data,12) = "0-0:96.14.0(" then
      v1 = Split(data,"(")
      v2 = Split(v1(1),")")
      device_value = Cint(v2(0))
      device_string = "T"&device_value 
      if DEBUG_LOG then
         hs.writelog "OK","-> Tarief indicator: "& device_string 
      end if       
      hs.SetDeviceString TARIFF_INDICATOR, device_string
      hs.SetDeviceValue TARIFF_INDICATOR,device_value  

   ' Totaal Gas verbruik
   ' (00518.216)
   Elseif left(data,1) = "(" then
      v1 = Split(data,"(")
      v2 = Split(v1(1),")")
      device_value = Cdbl(replace(v2(0),".",",")) * 1000
      device_string = device_value/1000&"m3"  
      if DEBUG_LOG then
         hs.writelog "OK","-> Totaal gas verbruik: "& device_string 
      end if       
      hs.SetDeviceString TOTAL_GAS_USAGE, device_string
      hs.SetDeviceValue TOTAL_GAS_USAGE,device_value 

   ' Gas verbruik geupdate
   ' Data:0-1:24.3.0(130104130000)(00)(60)(1)(0-1:24.2.1)(m3)
   Elseif left(data,11) = "0-1:24.3.0(" then
      v1 = Split(data,"(")
      v2 = Split(v1(1),")")
      y = left(v2(0),2)
      m = right(left(v2(0),4),2)
      d = right(left(v2(0),6),2)
      h = Cint(left(right(v2(0),6),2))
      device_value = h
      device_string = d&"-"&m&"-"&y&" "&h&"h"
      if DEBUG_LOG then
         hs.writelog "OK","-> Gas verbruik geupdate: "& device_string 
      end if       
      hs.SetDeviceString GAS_USAGE_UPDATE, device_string
      hs.SetDeviceValue GAS_USAGE_UPDATE,device_value 

   end if


end Sub
keeslamper
Member
Member
Posts: 152
Joined: Wed Apr 11, 2012 11:21 am

Re: P1 poort uitlezen

Post by keeslamper »

Peter,

Bedankt voor je script en je hulp! Het werkt perfect.

Voor iedereen die misschien het script wil gebruiken en geen decimalen ziet in de status bij Homeseer. Ik had dit probleem, heb mijn decimaalteken van een , gewijzigd in een . bij de toetsenbordinstellingen op mijn server en nu werkt het perfect! Kleinigheid, maar best lastig!

Groet,
Kees
piever
Starting Member
Starting Member
Posts: 1
Joined: Sat Mar 14, 2009 10:54 pm
Location: Netherlands

Re: P1 poort uitlezen

Post by piever »

Hallo pklijnjan,

Bedankt voor je script. Ook ik heb dit vorige week ge-installeerd op mijn hs2.
Het werkt goed.
Ben wel ge-intresseerd naar je andere scrips die je gebruikt.
Dit om het geheel verder uit te bouwen.
Ook de tip van Kees was voor mij van toepassing. erg mooi.

mvrgr.Piever
labtec
Member
Member
Posts: 243
Joined: Sun Oct 24, 2010 9:12 pm

Re: P1 poort uitlezen

Post by labtec »

Zijn er nog andere forumleden die het script van Peter hebben geprobeerd? ik gebruik onderstaande kabel uit de webshop, ik krijg geen data binnen.
Ik heb de scripts zoals aangegeven gekopieerd naar de aangegeven HS2 dir en de com poort gewijzigd naar de voor mij juiste poort, verder heb ik alle
virtuele devices aangemaakt zoals aangegeven virtulal.1

Op welke wijze kan ik checken of ik zo wie zo data uit de P1 poort van de slimme meter ontvang? ik weet niet of de fout in de communicatie zit of in de
verwerking van het script.

Moet je voor het uitlezen van de P1 poort nog een event aanmaken, zo ja op welke wijze?

Wie kan mij verder op weg helpen?

P1 Converter Cable v2P1 Converter Cable

Alvast bedankt

Greetz
labtec
Member
Member
Posts: 243
Joined: Sun Oct 24, 2010 9:12 pm

Re: P1 poort uitlezen

Post by labtec »

Niemand? ik dacht dat er wel forumleden zouden zijn die via een script data uit de P1 poort van de slimme meter konden inlezen.

Ik krijg in dit topic geen enkele reactie :(

Greetz
stefxx
Advanced Member
Advanced Member
Posts: 679
Joined: Fri Sep 12, 2008 2:26 pm
Location: Netherlands

Re: P1 poort uitlezen

Post by stefxx »

Begin eens met een serial terminal programma om te kijken of je überhaupt iets uit die port ontvangt? Google op "serial terminal Windows" dan vind je genoeg gratis programma's zoals termite, terraterm etc. Oudere Windows versies hadden HyperTerminal ingebouwd die kun je ook gebruiken.
labtec
Member
Member
Posts: 243
Joined: Sun Oct 24, 2010 9:12 pm

Re: P1 poort uitlezen

Post by labtec »

Bedankt voor je reactie, ik ga e.e.a. proberen.
labtec
Member
Member
Posts: 243
Joined: Sun Oct 24, 2010 9:12 pm

Re: P1 poort uitlezen

Post by labtec »

Op welke wijze moet ik het P1.txt script in een event verwerken?
labtec
Member
Member
Posts: 243
Joined: Sun Oct 24, 2010 9:12 pm

Re: P1 poort uitlezen

Post by labtec »

Ik krijg onderstaande errors in HS2 log, logfile loopt helemaal vol :(

Ik heb onderstaand toegevoegd in startup.txt op de COM poort die voor mij van toepassing is (COM8)

In startup.txt van homeseer toegevoegd:

result = hs.OpenComPort(8,"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 8 open"
end if

P1.txt in script dir van HS2 geplaatst, wat moet ik doen met P1_event?


28-2-2015 10:18:10 Error Running script, script run or compile error in file: P1.txt1024:Expected statement in line 9 More info: Expected statement
28-2-2015 10:18:10 Error Running script, script run or compile error in file: P1.txt1024:Expected statement in line 9 More info: Expected statement
28-2-2015 10:18:10 Error Running script, script run or compile error in file: P1.txt1024:Expected statement in line 9 More info: Expected statement
stefxx
Advanced Member
Advanced Member
Posts: 679
Joined: Fri Sep 12, 2008 2:26 pm
Location: Netherlands

Re: P1 poort uitlezen

Post by stefxx »

Als je hulp wilt, is het handig als je duidelijk(er) beschrijft wat je zelf al hebt gedaan, wat het resultaat is van aangeboden hulp etc etc. Je lijkt iedere keer weer een stapje verder te komen maar je vergeet ons mee te nemen in je verhaal...

Begrijp ik goed dat je nu dus wel data binnenkrijgt? En de logfile heeft het over een fout op regel 9 van P1.txt, maar je laat de inhoud van je P1.txt niet zien...
labtec
Member
Member
Posts: 243
Joined: Sun Oct 24, 2010 9:12 pm

Re: P1 poort uitlezen

Post by labtec »

Sorry, ik begrijp helemaal niets van SW/scripts, ik heb de handleiding van Peter gebruikt. Ondertussen ook de tool Termite gebruikt om Com-8 uit te lezen, hier komt
de data uit de p1 poort prima op binnen.

Ik heb het door Peter aangegeven deel toegevoegd in startup (com poort aangepast) en het p1 script in de map scripts gezet.

Ik stuur je de bestandjes even via PM

Alvast bedankt voor je reactie en hulp

Greetz
stefxx
Advanced Member
Advanced Member
Posts: 679
Joined: Fri Sep 12, 2008 2:26 pm
Location: Netherlands

Re: P1 poort uitlezen

Post by stefxx »

Hoi,

Ik ben zo vrij hier door te gaan ipv via PM, dan krijg je wellicht meer hulp en hebben anderen met soortgelijke problemen er ook nog wat aan. Ik heb alleen je meter identificatie even weggehaald, je weet maar nooit he?
Onderstaand de bestanden dir ik nu gebruik.

1. Termite data com-8
2. Aangepast startup script (zoals door Peter in topic aangegeven)
3. p1 script van Peter (topic)
4. error log

1.

/ISk5\2ME382-1004

0-0:96.1.1(xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
1-0:1.8.1(07028.706*kWh)
1-0:1.8.2(05806.461*kWh)
1-0:2.8.1(00000.447*kWh)
1-0:2.8.2(00000.000*kWh)
0-0:96.14.0(0001)
1-0:1.7.0(0001.91*kW)
1-0:2.7.0(0000.00*kW)
0-0:17.0.0(0999.00*kW)
0-0:96.3.10(1)
0-0:96.13.1()
0-0:96.13.0()

2.

' This is the startup script
' It is run once when HomeSeer starts up
'
' You may also have Startup.vb and it will be run instead of this script.
'
Sub Main()

On Error Resume Next 'Just to make sure this completes.

hs.WriteLog "Startup", "Scripting is OK and is now running Startup.txt"

' If the speaker client is not running, start it
If Not hs.IsApplicationRunning("Speaker") Then
'hs.Launch hs.GetAppPath & "\Speaker.exe", "", "", 0
End If


' Speak - uncomment the next line if you want HomeSeer to speak
' at startup.
'hs.Speak "Welcome to Home-Seer", True

result = hs.OpenComPort(8,"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 8 open"
end if



' You may add your own commands to this script.
' See the scripting section of the HomeSeer help system for more information.
' You may access help by going to your HomeSeer website and clicking the HELP button,
' or by pointing your browser to the /help page of your HomeSeer system

End Sub

4.

28-2-2015 15:09:45 OK COM 8 open
28-2-2015 15:09:45 Startup Start up complete.
28-2-2015 15:09:52 Error Running script, script run or compile error in file: P1.txt1024:Expected statement in line 25 More info: Expected statement

log loopt vol met zelfde foutmelding.
Mooie complete info zo :-) En je doet inderdaad de juiste dingen zo te zien.

Probleem is dat het P1.txt script zoals hierboven geen 25 regels heeft, terwijl je wel een fout krijgt op regel 25. Op zich niet heel raar, want HS voegt zelf ook een aantal regels toe waardoor de nummering vaak niet meer klopt.

Ik stel voor dat je alle regels tussen "If left(data,1) = "!" then" en "End If" even inactief maakt door er een ' voor te zetten. Als je dan geen fouten meer krijgt (en dat verwacht ik) kun je daarna 1 voor 1 het ' weer weghalen totdat de fout terugkomt. Dan weten we precies welke regel de mist in gaat en vinden we vast ook wel een oplossing. Ik zie straks graag welke regel de boosdoener is!
labtec
Member
Member
Posts: 243
Joined: Sun Oct 24, 2010 9:12 pm

Re: P1 poort uitlezen

Post by labtec »

Ga ik doen :) ik heb overigens de virtuele device exact aangemaakt zoals Peter heeft beschreven, allemaal Virtual.1 met exact dezelfde namen en V codes, ik krijg allemaal lamp devices in status kolom en in de control kolom kan ik ze on/off zetten............ :?:

Weet niet of dit goed is, zoals je wellicht geconstateerd heb begrijp ik vrijwel niets van scripts :)
labtec
Member
Member
Posts: 243
Joined: Sun Oct 24, 2010 9:12 pm

Re: P1 poort uitlezen

Post by labtec »

Ik heb ' voor End Sub geplaatst en krijg nu doorlopend de volgende error

28-2-2015 16:12:53 - Error - Cannot run script P1.txt, entry point function not found: P1_event
Post Reply

Return to “Homeseer Scripts Forum”