Document Date: 2017-05-06 08:37:32

PNPSCADA Web Service Documentation

Table of Contents

Various Reports:

Notes

Note 1: Specifying an entity

In some cases entities can be specified in multiple ways:
eidJust the entity ID. Used when you have the entity's ID.
key1 and cid Generally, key1 is the First/System name.
cid is the Class id.
key1 is always unique on the system for a given class.
Therefore, an entity can be uniquely identified by the key1 and cid.
e.g. To get an Elster A1140 with serial 0123456789 you can specify
cid=107 and key1=0123456789
key2 and cid Generally, key2 is the Second/User name.
key2 is advised to be unique, however, the user/client can specify any value here.
e.g. To get an Elster A1140 with user specified name "Main Incomer" you can specify
cid=107 and key2=Main Incomer (remember in an HTTP GET this will be key2=Main%20Incomer)
cid is generally not compulsory.
key3 key3 is an alphanumeric customer identifier that can be set up by an automated system remotely via setKey3.jsp. It can be up to 128 characters long. By default it is null.
Key1, Key2 and Key3 Note the uppercase K. This is generally used when specifying a range of entities as opposed to just one. In the case of Key1 and Key2, it enable SQL wildcards, and in the case of Key3, it allows a comma delimited list.

Note 2: Phone Number

Phone number is always in international format with no spaces. e.g. +27831231234

Note 3: Dates

Dates are specified in full in the form: yyyy-MM-dd HH:mm:ss.SSS
e.g. 2009-08-31 13:59:00.000
When the milliseconds are not specified, it is assumed to be 000
When the seconds and milliseconds are not specified, it is assumed to be 00.000
When the time is not specified, it is assumed to be 00:00:00.000

Note 4: Status values for Totals

Each decimal digit pertains to a different register:
x * 10^0 for E1
x * 10^1 for F1
x * 10^2 for E2
x * 10^3 for F3
x * 10^4 for F2
x * 10^5 for F4
When x = 1 : Calculated value, from 0 base
When x = 2 : Calculated value, from meter reading value base
When x = 3 : meter reading value
When x = 9 : manual reading
e.g. 333333 means E1 to F4 were all read from meter.

Note 5: Naming

Sometimes clas is used and sometimes class.
Same for interf and interface and ntity and entity.
This is because the internal database structure uses the shortened names.
They are used interchangeably in this document and mean the same thing.
They are not interchangeable in the actual commands, and should have the value as documented for each individual case.

Note 6: HTTP Parameters

HTTP parameters are case sensitive and should be specified as specified in this document

Note 7: Security

You should specify the LOGIN and PWD parameters with each query to establish your credentials. LOGIN should be in the form domain.login, for example sdg.marinusvz


An alternative is to specify the login without the sub-domain, but then the ORG parameter must be specified. That is the name of the organization to which the login belongs.

If possible, care should be taken to use the https version of the url, as opposed to the http version, so that passwords are encrypted.

Note 8: Ports

You can use port 441 for HTTPS and port 8080 for HTTP.
Port 445 for HTTPS also works, however, Azure and Vodacom has restricted connecting to these ports, so prefer 441

Parameter Types:

LOGIN The short organisation name and then the username with which you log into the site, separated with a dot (.). if using HTTP GET, spaces must be written as %20
PWD Your password. if using HTTP GET, spaces must be written as %20
ORG Your organisations full name. if using HTTP GET, spaces must be written as %20
phone phone number in international format. if using HTTP GET, the plus must be written as %2B, since + in a url is interpreted as a space. e.g. 082 123 4567 should be given as %2B27821234567
sim SIM number of sim card. This must be the full 19 or 20 digit number. e.g. 8927000000111111111
id Alphanumeric string, maximum length 64 characters.
serial Meter serial number. Maximum length 20 characters.
port Value between 1-65535. Ports to the server must be above 1024
type Alphanumeric string.
error message Alphanumeric string describing the problem with the operation.

Commands

addEntity

Inputtype: The description of the class of Entity to add. (if not giving advar_class)
Input Different class types require different inputs.

Organization

advar_class100
OrganizationNameName of organisation. May not be empty.e.g. My Organisation
Address1Postal Address Line 1. May not be empty.e.g. P.O. Box 166
Address2Postal Address Line 2e.g. Van Riebeeckpark
CityCity. May not be empty.e.g. Ekurhuleni
StateProvinceChoiceS for State or P for Province. May not be empty.e.g. P
ProvinceProvince (Leave empty if StateProvinceChoice is S)e.g. Gauteng
StateState (Leave empty if StateProvinceChoice is P)e.g. Mississippi
PostalCodePostal Code. May not be empty.e.g. 1629
CountryCountry short name. May not be empty.e.g. ZA
TimeZoneTimezone in text. May not be empty. List of supported timezonese.g. Africa/Johannesburg
PhoneDialPhone international number. May not be empty.e.g. 27
PhoneLocal phone number. May not be empty.e.g. 010 003 1015 is given as 100031015
PhoneExtPhone extension (Empty if none)e.g. 123
FaxDialFax international number(Empty if no fax)e.g. 27
FaxLocal fax numbere.g. 010 003 1015 is given as 100031015
StreetAddressStreet Address. May not be empty.e.g. 14 Partridge Ave, Kempton Park X2
VATNumber(Empty if none)e.g. 4130175733
NewSubDomainThis is required for the banner to work.e.g. sdg
NewBannere.g. Not supported yet.

Login Account

advar_class101
p9_numMin&Max:1
p9_num0Interface:Role (20);

SIM card

advar_class102
simThe full 19 or 20 digit sim number. This is usually, for South African SIMs, the number on the SIM prepended with 892700000e.g. 8927000000492958323
cellPhone number in full international format.e.g. +27835627259
Examplehttps://adam.pnpscada.com:441/addEntity?LOGIN=subdomain.testme&PWD=testme&advar_class=102&sim=8927000000492958324&cell=%2B27835627259

TC65 modem

advar_class103
p1_numMin&Max:1
p1_num0Interface:SIM (1)
mnameUser defined name of modeme.g. My First TC65
ExampleSuppose a SIM was added and have ID 1170. To link a TC65 to it:
https://adam.pnpscada.com:441/addEntity?LOGIN=subdomain.testme&PWD=testme&advar_class=103&p1_num=1&p1_num0=1170&mname=My%20First%20TC65
Warning: This will try to setup the TC65. If the TC65 is not connected the system at that time an error will be returned.

Active Etherpad

advar_class104
PORTThe port that it will connect to.e.g. 10225
NameUser defined name of Etherpade.g. My First AE
Examplehttps://adam.pnpscada.com:441/addEntity?LOGIN=subdomain.testme&PWD=testme&advar_class=104&PORT=10241&Name=My%20First%20AE

RTU

advar_class105
MAdrModbus Addresse.g. 23
IDATEInstallation Datee.g. 2009-09-09

Elster A1700

advar_class106
p3_numMin&Max:1
p3_num0Interface:Communication Device (2)
SNUMBERSerial of Meter. Note: if the Meter Serial starts with 3514, then the last digit must be left out.e.g. for 3514 31501825 6 the number is given as 351431501825
PLACEPlace where meter was installed.e.g. Main incomer 1
ZONEZone where meter was installed.e.g. Capetown
SITESite where meter was installed.e.g. MP Pinetown
FULLLOADBreaker sizee.g. 100
MNAMEMeter's user defined namee.g. Tropicana
CTPRIMCT primary value.e.g. 800
CTSECCT secondary value.e.g. 5
VTPRIMVT primary value.e.g. 400
VTSECVT secondary value.e.g. 400
PRIMARYMY if primary metering, N if secondary metering.e.g. Y
COMDATEDate of commissioning/installation. No readings will be read from before this date from the meter.e.g. 2009-05-01
PASSWDPassword of meter. Defaults to FEDC0003e.g. FEDC0003
MDIDMultidrop ID of metere.g. 001
WIRES3 or 4 wire meter.e.g. 4
ExampleSuppose you want to add a 1700 linked to an Active Etherpad with ID 1172:
https://adam.pnpscada.com:441/addEntity?LOGIN=subdomain.testme&PWD=testme&advar_class=106&p3_num=1&p3_num0=1172&SNUMBER=31501819&PLACE=Main%20incomer%201&ZONE=Capetown&SITE=MP%20Pinetown&FULLLOAD=100&MNAME=Tropicana&CTPRIM=800&CTSEC=5&VTPRIM=400&VTSEC=400&PRIMARYM=Y&COMDATE=2009-05-01&PASSWD=FEDC0003&MDID=001&WIRES=4

Elster A1140

advar_class107
p4_numMin&Max:1
p4_num0Interface:Communication Device (2)
CommentThe rest are the same as Elster A1700 (p3_num and p3_num0 becomes p4_num and p4_num0 respectively)

Elster AS1440

advar_class162
p60_numMin&Max:1
p60_num0Interface:Communication Device (2)
WIRES2 wire meter.e.g. 2
CommentThe rest are the same as Elster A1700 (p3_num and p3_num0 becomes p60_num and p60_num0 respectively)

Elster AS230

advar_class154
p50_numMin&Max:1
p50_num0Interface:Communication Device (2)
WIRES2 wire meter.e.g. 2
CommentThe rest are the same as Elster A1700 (p3_num and p3_num0 becomes p50_num and p50_num0 respectively)
ExampleSuppose you want to add a AS230 linked to an Active Etherpad with ID 3303:
https://adam.pnpscada.com:441/addEntity?LOGIN=subdomain.testme&PWD=testme&advar_class=154&p50_num=1&p50_num0=3303&SNUMBER=31501999&PLACE=Main%20incomer%201&ZONE=Capetown&SITE=MP%20Pinetown&FULLLOAD=100&MNAME=Tropicana&CTPRIM=800&CTSEC=5&VTPRIM=400&VTSEC=400&PRIMARYM=Y&COMDATE=2010-08-23&PASSWD=FEDC0003&MDID=002&WIRES=2

Pulse Meter

advar_class108
p5_numMin:1
p5_num0Interface:Pulse Counter (3)
SNUMBERSerial of Metere.g. 01420002
PLACEPlace where meter was installed.e.g.
ZONEPlace where meter was installed.e.g.
SITESite where meter was installed.e.g.
MNAMEMeter's user defined namee.g.
PPUPulses per unit. All meter readings including totals are divided by PPU. This value must be an integer bigger or equal to 1. Do not set this value to 0.e.g. 1
UPPNumber of units per pulse. All meter readings including totals are divided by UPP. This value must be an integer bigger or equal to 1. Do not set this value to 0 or all your readings will be multiplied with 0.e.g. 1
MTYPEMust be one of:
Electricity (Generic)
Generic BACnet
Fuel Gas
Steam
Water
e.g. Water
PRIMARYMY if primary metering, N if secondary metering.e.g. Y
COMDATEDate of commissioning/installation. No readings will be read from before this date from the meter.e.g. 2009-05-01
P1CChannel of P1. Value between 1-8e.g. 1
Q1CChannel of P1. Value between 1-8e.g. 2
P2CChannel of P1. Value between 1-8e.g. 3
Q2CChannel of P1. Value between 1-8e.g. 4
Q3CChannel of P1. Value between 1-8e.g. 5
Q4CChannel of P1. Value between 1-8e.g. 6
FULLLOADBreaker sizee.g. 100
CTPRIMCT primary value.e.g. 800
CTSECCT secondary value.e.g. 5
VTPRIMVT primary value.e.g. 400
VTSECVT secondary value.e.g. 400
OPENINGREADINGe.g.
WIRES3 or 4 wire meter.e.g. 4

Meter Account

advar_class109
p6_numMin:1
p6_num0Interface:Meter with Profile (6)
p7_numMin:1
p7_num0Interface:Tariff (15)
CNAMECustomer namee.g. Demo account
ANUMBERAccount Number of customer. This will appear on the generated bills.e.g. 6219938471
S[index of meter]_portione.g. +1.0
deftare.g. 516 (this is the key1 of the tariff that must be the default tariff)
NMD[index of tariff]e.g. 'n.a.'
START[index of tariff]e.g. 2011-03-02

TOU Calendar

advar_class110
nameName of calendare.g. Eskom TOU
TOUtemplatekey1 of calendar to copye.g. 1
Examplehttps://adam.pnpscada.com:441/addEntity?LOGIN=subdomain.testme&PWD=testme&advar_class=110&name=Eskom TOU&TOUtemplate=1

Tariff

advar_class111
nameName of tariffe.g. City Power LV Electricity
TariffTemplatethey key1 of the tariff to copy, or the id of the public template to copye.g. 512
Examplehttps://adam.pnpscada.com:441/addEntity?LOGIN=subdomain.testme&PWD=testme&advar_class=111&name=mytariff&TariffTemplate=1

Organization Role

advar_class112
p10_numMin&Max:1
p10_num0Interface:Organization (22)
descrName of the Rolee.g. Administrator
addRestrIs adding entities restricted to some specific classes? 'yes' or 'no'.e.g. yes/no
interfRestrIs use of interfaces restricted to some specific interfaces?e.g. yes/no
entRestrIs access to entities restricted to some specific entities?e.g. yes/no
addListA comma delimited list (or specified in multiple form elements of the same name) of the class ids (cid) the Role can add (and delete). Empty if none (and restricted Y). For an entity's class id, hover over the class name of the selected entity in the overview screen and a tool tip would appear.e.g. 100 for Organization entities
interfListA list of interface ids of interfaces that may be used if restricted. To see an interface id, go to the role edit screen and hover over the Interface Description in the top right pane. A tool tip should appear with the number of the interface id (iid).e.g. 11 for Meter Account
entListA list of the entity ids that are accessible if entity access is restricted. Otherwise the role can see all entities belonging to his organization.e.g. 2299993213

PnPScada Server

CommentMust be added manually by request.

Passive Etherpad

advar_class114
IPIP to connect toe.g. 10.0.0.124
PORTPort to connect toe.g. 10001
NameUser defined name for the etherpade.g. My First PE
Examplehttps://adam.pnpscada.com:441/addEntity?LOGIN=subdomain.testme&PWD=testme&advar_class=114&IP=10.0.0.124&PORT=10001&Name=My%20First%20PE

Utility Systems UtiliHub Concentrator

advar_class279
IPIP to connect toe.g. 10.0.0.124
NameUser defined name for the etherpade.g. My First UtiliHub
AreaArea Code Description (case sensitive)e.g. Demo
autoaddOptional, only specify if you want meters to be automatically added when sensede.g. X
Examplehttps://adam.pnpscada.com:441/addEntity?LOGIN=subdomain.testme&PWD=testme&advar_class=279&IP=10.0.0.124&Name=My%20First%20UtiliHub&Area=Demo

Utility Systems WMD via UtiliHub

advar_class280
p156_numMin&Max:1
p156_num0Interface:Utility Systems UtiliHub Concentrator (157)
SNUMBERSerial of Metere.g. 41172418430
PLACEPlace where meter was installed.e.g.
ZONEPlace where meter was installed.e.g.
SITESite where meter was installed.e.g.
MNAMEMeter's user defined namee.g.
COMDATEDate of commissioning/installation. No readings will be read from before this date from the meter.e.g. 2009-05-01

Utility Systems - Real Telematics (RTS) Real Log Concentrator

advar_class286
SNUMBERSerial number of Concentratore.g. 1234
NameUser defined name for the Concentratore.g. My First Real Log
AreaIDArea Codee.g. 51
autoaddOptional, only specify if you want meters to be automatically added when sensede.g. X
p161_numMin&Max:1
p161_num0Interface:SIM (1)The database id of the SIM
Examplehttps://adam.pnpscada.com:441/addEntity?LOGIN=subdomain.testme&PWD=testme&advar_class=286&SNUMBER=1234&Name=My%20First%Real%20Log&AreaID=-1&p161_num=1&p161_num0=777234

Utility Systems WMD via RTS Real Log

advar_class287
p159_numMin&Max:1
p159_num0Interface:Utility Systems RTS Concentrator (159)
SNUMBERSerial of Metere.g. 41172418430
PLACEPlace where meter was installed.e.g.
ZONEPlace where meter was installed.e.g.
SITESite where meter was installed.e.g.
MNAMEMeter's user defined namee.g.
COMDATEDate of commissioning/installation. No readings will be read from before this date from the meter.e.g. 2009-05-01

Premier PRI

advar_class115
p12_numMin&Max:1
p12_num0Interface:Communication Device (2)
SNUMBERSerial of Metere.g. 04P00468
PLACEPlace where meter was installed.e.g.
ZONEPlace where meter was installed.e.g.
SITESite where meter was installed.e.g.
FULLLOADBreaker sizee.g. 100
MNAMEMeter's user defined namee.g.
CTPRIMCT primary value.e.g. 800
CTSECCT secondary value.e.g. 5
VTPRIMVT primary value.e.g. 400
VTSECVT secondary value.e.g. 400
PRIMARYMY if primary metering, N if secondary metering.e.g. Y
COMDATEDate of commissioning/installation. No readings will be read from before this date from the meter.e.g. 2009-05-01
WIRES3 or 4 wire meter.e.g. 4

EDMI Mk6 Genius

advar_class116
p13_numMin&Max:1
p13_num0Interface:Communication Device (2)
SNUMBERSerial of Metere.g. 206703186
PLACEPlace where meter was installed.e.g.
ZONEPlace where meter was installed.e.g.
SITESite where meter was installed.e.g.
FULLLOADBreaker sizee.g. 100
MNAMEMeter's user defined namee.g.
CTPRIMCT primary value.e.g. 800
CTSECCT secondary value.e.g. 5
VTPRIMVT primary value.e.g. 400
VTSECVT secondary value.e.g. 400
PRIMARYMY if primary metering, N if secondary metering.e.g. Y
COMDATEDate of commissioning/installation. No readings will be read from before this date from the meter.e.g. 2009-05-01
WIRES3 or 4 wire meter.e.g. 4

EDMI Mk10 Atlas

advar_class117
p14_numMin&Max:1
p14_num0Interface:Communication Device (2)
CommentThe rest are the same as EDMI Mk6 Genius

Elster A140

advar_class119
p15_numMin&Max:1
p15_num0Interface:Communication Device (2)
CommentThe rest are the same as Elster A1700

Meter Account Group

advar_class120
p16_numAny Amount (0+)
p16_num0Interface:Meter Account (11)
CNUMBERe.g.
GNAMEe.g.

Hexing HXE110-KP Single phase DLMS STS meter

advar_class251
p135_numMin&Max:1
p135_num0Interface:Communication Device (2)
SNUMBERSerial of Metere.g. 14254670012
MNAMEMeter's user defined namee.g.
PLACEPlace where meter was installed.e.g.
ZONEPlace where meter was installed.e.g.
SITESite where meter was installed.e.g.
FULLLOADBreaker sizee.g. 100
COMDATEDate of commissioning/installation. No readings will be read from before this date from the meter.e.g. 2009-05-01
PASSWDPassword, default is 000000e.g. 000000

Hexing HXE310-KP Three phase DLMS STS meter

advar_class261
p143_numMin&Max:1
p143_num0Interface:Communication Device (2)
SNUMBERSerial of Metere.g. 14265325556
MNAMEMeter's user defined namee.g.
PLACEPlace where meter was installed.e.g.
ZONEPlace where meter was installed.e.g.
SITESite where meter was installed.e.g.
FULLLOADBreaker sizee.g. 100
COMDATEDate of commissioning/installation. No readings will be read from before this date from the meter.e.g. 2009-05-01
PASSWDPassword, default is 000000e.g. 000000

Hexing HXF300 Three phase DLMS meter

advar_class263
p144_numMin&Max:1
p144_num0Interface:Communication Device (2)
SNUMBERSerial of Metere.g. 16470639
MNAMEMeter's user defined namee.g.
PLACEPlace where meter was installed.e.g.
ZONEPlace where meter was installed.e.g.
SITESite where meter was installed.e.g.
FULLLOADBreaker sizee.g. 100
COMDATEDate of commissioning/installation. No readings will be read from before this date from the meter.e.g. 2009-05-01
PASSWDPassword, default is 00000000000000000000000000000000e.g. 00000000000000000000000000000000

Hexing internal GPRS modem - Client Mode

advar_class250
NameModem's user defined namee.g. ATM
IDMeter Serial Numbere.g. 14265325556

Hexing HXET-200 Concentrator

advar_class273
NameConcentrator's user defined namee.g. Complex A
IDTerminal Addresse.g. 15684079

Generic Modbus Coil

advar_class121
p19_numMin&Max:1
p19_num0Interface:Communication Device (2)
MODNUMe.g.
COILe.g.
Namee.g.

Latched Breaker

advar_class122
p17_numMin&Max:1
p17_num0Interface:Digital Output (30); Digital Output for Switching On
p18_numMin&Max:1
p18_num0Interface:Digital Output (30); Digital Output for Switching Off
Namee.g.

SmarTee

advar_class123
p20_numMin&Max:1
p20_num0Interface:SIM (1)
mnamee.g.

Landis & Gyr

advar_class124
p21_numMin&Max:1
p21_num0Interface:Communication Device (2)
SNUMBERSerial of Metere.g. 93936780
PLACEPlace where meter was installed.e.g.
ZONEPlace where meter was installed.e.g.
SITESite where meter was installed.e.g.
FULLLOADBreaker sizee.g. 100
MNAMEMeter's user defined namee.g.
CTPRIMCT primary value.e.g. 800
CTSECCT secondary value.e.g. 5
VTPRIMVT primary value.e.g. 400
VTSECVT secondary value.e.g. 400
PRIMARYMY if primary metering, N if secondary metering.e.g. Y
COMDATEDate of commissioning/installation. No readings will be read from before this date from the meter.e.g. 2009-05-01
WIRES3 or 4 wire meter.e.g. 4

Enermax

advar_class125
p22_numMin&Max:1
p22_num0Interface:Communication Device (2)
SNUMBERSerial of Metere.g. 06060069
PLACEPlace where meter was installed.e.g.
ZONEPlace where meter was installed.e.g.
SITESite where meter was installed.e.g.
FULLLOADBreaker sizee.g. 100
MNAMEMeter's user defined namee.g.
CTPRIMCT primary value.e.g. 800
CTSECCT secondary value.e.g. 5
VTPRIMVT primary value.e.g. 400
VTSECVT secondary value.e.g. 400
PRIMARYMY if primary metering, N if secondary metering.e.g. Y
COMDATEDate of commissioning/installation. No readings will be read from before this date from the meter.e.g. 2009-05-01
WIRES3 or 4 wire meter.e.g. 4

Sanxing

advar_class283
p158_numMin&Max:1
p158_num0Interface:Communication Device (2)
SNUMBERSerial of Metere.g. 06060069
MNAMEMeter's user defined namee.g.
PLACEPlace where meter was installed.e.g.
ZONEPlace where meter was installed.e.g.
SITESite where meter was installed.e.g.
FULLLOADBreaker size in Amperee.g. 100
CTPRIMCT Primary in Amperee.g. 200
CTSECCT Secondary in Amperee.g. 5
COMDATEDate of commissioning/installation. No readings will be read from before this date from the meter.e.g. 2009-05-01
PASSWDPassword, default is 00000000. Pls note for CT meters the default is 22222222e.g. 00000000

Sanxing Modem

advar_class284
NameModem's user defined namee.g.
IDMeter Serial Numbere.g.
p160_numMin&Max:1
p160_num0Interface:SIM (1)The database id of the SIM

SigFox stub

advar_class293
rtuNameSigFox stub Identifier. This is what will be appended to *.pnpscada.com/SigFox/ as the update url to send updates to.
(After adding, the full key1 of the entity is the Update URL to enter into the SigFox portal.)
e.g. 123
nameSigFox stub user defined namee.g. SqwidNet account
autoaddoptional. Specify only if you want to enable autoadd of SigFox entities
Feature still under development
e.g. X
  cidoptional. SigFox entity class id to auto add (if enabled) when receiving a message with an unknown SigFox device ide.g. 292 for Kamstrup SigFox water meter
callbackoptional. Specify only if you want to enable callback to the SigFox API to request missed packetse.g. X
  loginoptional. Specify SigFox API logine.g. piet
  passwordoptional. Specify SigFox API passworde.g. password1
  apiurloptional. Specify SigFox API portal URLe.g. https://backend.sigfox.com/api

SigFox VisioUtil Pulse Counter (restricted access)

advar_class291
SNUMBERSigFox ID of the device, e.g. 12345678 or VS01-005-12345678-40 e.g. 12345678 Only the SigFox ID is retained
MNAMEUser defined namee.g. My Pulse Counter1
p164_numMin&Max:1
p164_num0Interface:SIGFOX Account (161)The entity id of the SigFox stub

SigFox Kamstrup water meter

advar_class292
SNUMBERSigFox ID (serial number) of the device, e.g. 12345678 e.g. 12345678
MNAMEUser defined namee.g. My SigFox Kamstrup1
COMDATEInstallation Date (YYYY-MM-DD)e.g. 2018-02-09
p163_numMin&Max:1
p163_num0Interface:SIGFOX Account (161)The entity id of the SigFox stub

SigFox RTS Pulse Counter

advar_class303
SNUMBERSigFox ID (serial number) of the device, e.g. 12345678 e.g. 12345678
MNAMEUser defined namee.g. My SigFox RTS Pulse Counter
p168_numMin&Max:1
p168_num0Interface:SIGFOX Account (161)The entity id of the SigFox stub

Enermax+

advar_class126
p23_numMin&Max:1
p23_num0Interface:Communication Device (2)
SNUMBERSerial of Metere.g. 06060069
PLACEPlace where meter was installed.e.g.
ZONEPlace where meter was installed.e.g.
SITESite where meter was installed.e.g.
FULLLOADBreaker sizee.g. 100
MNAMEMeter's user defined namee.g.
CTPRIMCT primary value.e.g. 800
CTSECCT secondary value.e.g. 5
VTPRIMVT primary value.e.g. 400
VTSECVT secondary value.e.g. 400
PRIMARYMY if primary metering, N if secondary metering.e.g. Y
COMDATEDate of commissioning/installation. No readings will be read from before this date from the meter.e.g. 2009-05-01
WIRES3 or 4 wire meter.e.g. 4

Elster A220

advar_class127
p24_numMin&Max:1
p24_num0Interface:Communication Device (2)
SNUMBERSerial of Metere.g. 30514111
PLACEPlace where meter was installed.e.g.
ZONEPlace where meter was installed.e.g.
SITESite where meter was installed.e.g.
FULLLOADBreaker sizee.g. 100
MNAMEMeter's user defined namee.g.
PRIMARYMY if primary metering, N if secondary metering.e.g. Y
COMDATEDate of commissioning/installation. No readings will be read from before this date from the meter.e.g. 2009-05-01
PASSWDe.g.
MDIDe.g.

Contactor

advar_class128
p25_numMin&Max:1
p25_num0Interface:Digital Output (30); Digital Output for Switching Off and On
Namee.g.

Elster A100C Irda

advar_class129
p26_numMin&Max:1
p26_num0Interface:Communication Device (2)
SNUMBERSerial of Metere.g. 37900980
PLACEPlace where meter was installed.e.g.
ZONEPlace where meter was installed.e.g.
SITESite where meter was installed.e.g.
FULLLOADBreaker sizee.g. 100
MNAMEMeter's user defined namee.g.
PRIMARYMY if primary metering, N if secondary metering.e.g. Y
COMDATEDate of commissioning/installation. No readings will be read from before this date from the meter.e.g. 2009-05-01

Demand Controller

advar_class130
p28_numMin&Max:1
p28_num0Interface:Meter Account Admin (12); Demand to Monitor
p29_numMin:1
p29_num0Interface:Breaker (31); Load to Manage
Namee.g.

SNMP Context

advar_class131
p30_numMin:1
p30_num0Interface:Meter with Totals (7)
IDe.g.
Descriptione.g.

KoCoS Elster A1140 modem

advar_class132
p31_numMin&Max:1
p31_num0Interface:SIM (1)The database id of the SIM
mnameUser defined name for the modeme.g. MyKoCoS
Examplehttps://adam.pnpscada.com:441/addEntity?LOGIN=subdomain.testme&PWD=testme&advar_class=132&p31_num=1&p31_num0=1&mname=MyKoCos

RMS Accumulator

advar_class133
p32_numMin&Max:1
p32_num0Interface:Communication Device (2)
IDUnique ID/Name of accumulator. The format of the name must be RMSnnnn where n is a digit from 0 to 9e.g. RMS1011
DescriptionUser defined namee.g. My First Accumulator
Example Suppose you want to add an Accumulator linked to a Passive Etherpad with ID 1174:
https://adam.pnpscada.com:441/addEntity?LOGIN=subdomain.testme&PWD=testme&advar_class=133&p32_num=1&p32_num0=1174&ID=RMS2345&Description=My%20First%20Accumulator

Etron/TimeSmart

advar_class134
p33_numMin&Max:1
p33_num0Interface:RMS Accumulator (37)
SITESite where meter was installed.e.g.
ZONEPlace where meter was installed.e.g.
PLACEPlace where meter was installed.e.g.
CTPRIMCT primary value.e.g. 800
CTSECCT secondary value.e.g. 800
VTPRIMVT primary value.e.g. 800
VTSECVT secondary value.e.g. 800
FULLLOADBreaker sizee.g. 100
Serial NumberSerial of Metere.g. 14600756
NameUnique ID/Name of Etrone.g. 123
Example Suppose you want to add an Etron linked to an Accumulator with ID 1175:
https://adam.pnpscada.com:441/addEntity?LOGIN=subdomain.testme&PWD=testme&advar_class=134&p33_num=1&p33_num0=1175&SITE=&ZONE=&PLACE=&CTPRIM=800&CTSEC=800&VTPRIM=800&VTSEC=800&FULLLOAD=100&Serial Number=14600756&Name=123

Route Master Hand-held

advar_class135
exploree.g.
readMethode.g.
writeMethode.g.
mychoicee.g.
aliase.g.
ipe.g.
rom_ide.g.

CSD Modem

advar_class137
p34_numMin&Max:1
p34_num0Interface:SIM (1)
mnamee.g.

Maestro Modem

advar_class138
p35_numMin&Max:1
p35_num0Interface:SIM (1)
mnamee.g.
mporte.g.

Generic APN Modem

advar_class139
p36_numMin&Max:1
p36_num0Interface:SIM (1)
IPe.g.
PORTe.g.
Namee.g.

IP-Telemetry GPRS Modem

advar_class208
p94_numMin&Max:1
p94_num0Interface:SIM (1)
Namee.g.
Accounte.g. 7C034CDD5F7F

Itron SL7000

advar_class140
p37_numMin&Max:1
p37_num0Interface:Communication Device (2)
nextbIs the form submitted.e.g. Y
SNUMBERSerial of Metere.g. 35013062
MNAMEMeter's user defined namee.g.
PLACEPlace where meter was installed.e.g.
ZONEPlace where meter was installed.e.g.
SITESite where meter was installed.e.g.
FULLLOADBreaker sizee.g. 100
CTPRIMCT primary value.e.g. 800
CTSECCT secondary value.e.g. 5
VTPRIMVT primary value.e.g. 400
VTSECVT secondary value.e.g. 400
PRIMARYMY if primary metering, N if secondary metering.e.g. Y
WIRES3 or 4 wire meter.e.g. 4
COMDATEDate of commissioning/installation. No readings will be read from before this date from the meter.e.g. 2009-05-01
PASSWDe.g. ABCDEFGH
MDIDe.g. 17

Itron ACE6000

advar_class173
p75_numMin&Max:1
p75_num0Interface:Communication Device (2)
nextbIs the form submitted.e.g. Y
SNUMBERSerial of Metere.g. 35013062
MNAMEMeter's user defined namee.g.
PLACEPlace where meter was installed.e.g.
ZONEPlace where meter was installed.e.g.
SITESite where meter was installed.e.g.
FULLLOADBreaker sizee.g. 100
CTPRIMCT primary value.e.g. 800
CTSECCT secondary value.e.g. 5
VTPRIMVT primary value.e.g. 400
VTSECVT secondary value.e.g. 400
PRIMARYMY if primary metering, N if secondary metering.e.g. Y
WIRES3 or 4 wire meter.e.g. 4
COMDATEDate of commissioning/installation. No readings will be read from before this date from the meter.e.g. 2009-05-01
PASSWDe.g. ABCDEFGH
MDIDe.g. 17

Itron ACE9000

advar_class193
p83_numMin&Max:1
p83_num0Interface:Communication Device (2)
nextbIs the form submitted.e.g. Y
SNUMBERSerial of Metere.g. 01452573270
MNAMEMeter's user defined namee.g.
PLACEPlace where meter was installed.e.g.
ZONEPlace where meter was installed.e.g.
SITESite where meter was installed.e.g.
FULLLOADBreaker sizee.g. 100
COMDATEDate of commissioning/installation. No readings will be read from before this date from the meter.e.g. 2009-05-01

Simple Load

advar_class141
p38_numMin&Max:1
p38_num0Interface:Breaker (31)
Namee.g.
StartLoade.g.
ShedLoade.g.

Toyota Shift Analyser

advar_class142
p39_numMin&Max:1
p39_num0Interface:Meter Account (11)
Namee.g.

Itron ACE9000

advar_class193
p83_numMin&Max:1
p83_num0Interface:Communication Device (2)
nextbIs the form submitted.e.g. Y
SNUMBERSerial of Metere.g. 01452573270
MNAMEMeter's user defined namee.g.
PLACEPlace where meter was installed.e.g.
ZONEPlace where meter was installed.e.g.
SITESite where meter was installed.e.g.
FULLLOADBreaker sizee.g. 100
COMDATEDate of commissioning/installation. No readings will be read from before this date from the meter.e.g. 2009-05-01

SyM² Meter

advar_class207
p93_numMin&Max:1
p93_num0Interface:Communication Device (2)
nextbIs the form submitted.e.g. Y
SNUMBERSerial of Metere.g. 000F93028323
MNUMBERModem Serial Numbere.g. 7C034CDD5F85
MNAMEMeter's user defined namee.g.
PLACEPlace where meter was installed.e.g.
ZONEPlace where meter was installed.e.g.
SITESite where meter was installed.e.g.
FULLLOADBreaker sizee.g. 100
CTPRIMCT primary value.e.g. 800
CTSECCT secondary value.e.g. 5
VTPRIMVT primary value.e.g. 400
VTSECVT secondary value.e.g. 400
PRIMARYMX if primary metering, leave out if secondary metering.e.g. Y
WIRES3 or 4 wire meter.e.g. 4
COMDATEDate of commissioning/installation. No readings will be read from before this date from the meter.e.g. 2009-05-01
PASSWDPassword to log in via IPT-T or SyM2.e.g. PW0

Summation Meter

advar_class175
p77_numMin&Max:1
p77_num0Interface:Meter Account (11)
nameName to appear on summation metere.g. Edgars
vserialSerial of summation metere.g. S001
Description Add an entity to the system. Each entity is placed in a class. To see a list of classes, look at getAllClasses and then getClass.
Return on success <xml><result>SUCCESS</result><eid>ID of added entity</eid></xml>
Return on failure <xml><result>ERROR:error message</result></xml>
Example https://adam.pnpscada.com:441/addEntity?LOGIN=subdomain.testme&PWD=testme...TODO

deleteEntity

Input eid: id of entity to be deleted
Description Deletes the given entity.
If other entities depend on this entity, delete will fail with the error message:
Unresolved Dependency. Cannot remove [this entity id] because of [dependant entity id].
All entities dependant on this entity should be removed before this entity can be removed.
Return on success <xml><result>SUCCESS</result></xml>
Return on failure <xml><result>ERROR:error message</result></xml>
Example https://adam.pnpscada.com:441/deleteEntity?LOGIN=subdomain.testme&PWD=testme&eid=1

readMeterActualTotals

Inputdate:The exact date of the total to get. See Note 3
Inputeid: Entity ID
Inputkey1: First/System name
Inputkey2: Second/User name
Inputcid: Class ID
Inputphone: Phone number. See Note 2
Description See Note 1 for eid, cid, key1 and key2
This will return only non-calculated totals. i.e. Totals as read from the meter.
Profile will not be used to get to a total on a specific date and time.
User must have access to view meters with totals, to be able to view the totals through this service.
Return on success
<xml>
<meter>
<serial>Meter's serial</serial>
<id>Meter's user defined name</id>
<before>
  <result>SUCCESS/ERROR:error message</result>
  <date>Date of this total. (The total before the given time)</date>
  <P1>Active import (kWh). Does not reclock. With secondary metering this is the value after the multiplier</P1>
  <P2>Reactive energy register quadrant 1 (kvarh). Does not reclock.</P2>
  <Q1>Active export (kWh). With secondary metering this is the value after the multiplier</Q1>
  <Q2>Reactive energy register quadrant 2 (kvarh)</Q2>
  <Q3>Reactive energy register quadrant 3 (kvarh)</Q3>
  <Q4>Reactive energy register quadrant 4 (kvarh)</Q4>
  <P1READING>Unmodified active import as read from the meter. Re-clocks. No multiplier</P1READING>
  <Q1READING>Unmodified reactive energy as read from the meter. Re-clocks. No multiplier</Q1READING>
  <STATUS>See Note 4</STATUS>
</before>
<after>
  <result>SUCCESS/ERROR:error message</result>
  <date>Date of this total. (The total after the given time)</date>
  <P1>Active import (kWh). Does not reclock. With secondary metering this is the value after the multiplier</P1>
  <P2>Reactive energy register quadrant 1 (kvarh). Does not reclock.</P2>
  <Q1>Active export (kWh). With secondary metering this is the value after the multiplier</Q1>
  <Q2>Reactive energy register quadrant 2 (kvarh)</Q2>
  <Q3>Reactive energy register quadrant 3 (kvarh)</Q3>
  <Q4>Reactive energy register quadrant 4 (kvarh)</Q4>
  <P1READING>Unmodified active import as read from the meter. Reclocks. No multiplier</P1READING>
  <Q1READING>Unmodified reactive energy as read from the meter. Reclocks. No multiplier</Q1READING>
  <STATUS>See Note 4</STATUS>
</after>
<on_time>
  <result>SUCCESS/ERROR:error message</result>
  <date>The date as close to the given time as possible, using profile.</date>
  <P1>Active import (kWh). Does not reclock. With secondary metering this is the value after the multiplier</P1>
  <P2>Reactive energy register quadrant 1 (kvarh). Does not reclock.</P2>
  <Q1>Active export (kWh). With secondary metering this is the value after the multiplier</Q1>
  <Q2>Reactive energy register quadrant 2 (kvarh)</Q2>
  <Q3>Reactive energy register quadrant 3 (kvarh)</Q3>
  <Q4>Reactive energy register quadrant 4 (kvarh)</Q4>
  <P1READING>Unmodified active import as read from the meter. Reclocks. No multiplier</P1READING>
  <Q1READING>Unmodified reactive energy as read from the meter. Reclocks. No multiplier</Q1READING>
  <STATUS>See Note 4</STATUS>
</on_time>
</xml>
Return on failure <xml><result>ERROR:error message</result></xml>
Example https://adam.pnpscada.com:441/readMeterActualTotals?LOGIN=subdomain.testme&PWD=testme&eid=1145&date=2008-07-09

readMeterTotals

Inputstartdate:The oldest date from where to calculate Maximum Demand. See Note 3
Inputenddate:The youngest date up to where to calculate Maximum Demand. See Note 3
Inputeid: Entity ID
Inputkey1: First/System name
Inputkey2: Second/User name
Inputcid: Class ID
Inputphone: Phone number. See Note 2
Description See Note 1 for eid, cid, key1 and key2
User must have access to view meters with totals, to be able to view the totals through this service.
Return on success
<xml><meter>
<serial>Meter's serial</serial>
<id>Meter's user defined name</id>
<start_total>
  <result>SUCCESS/ERROR:error message</result>
  <date>Date of start total.</date>
  <P1>Active import (kWh). Does not reclock. With secondary metering this is the value after the multiplier</P1>
  <P2>Reactive energy register quadrant 1 (kvarh). Does not reclock.</P2>
  <Q1>Active export (kWh). With secondary metering this is the value after the multiplier</Q1>
  <Q2>Reactive energy register quadrant 2 (kvarh)</Q2>
  <Q3>Reactive energy register quadrant 3 (kvarh)</Q3>
  <Q4>Reactive energy register quadrant 4 (kvarh)</Q4>
  <P1READING>Unmodified active import as read from the meter. Reclocks. No multiplier</P1READING>
  <Q1READING>Unmodified reactive energy as read from the meter. Reclocks. No multiplier</Q1READING>
  <STATUS>See Note 4</STATUS>
</start_total>
<end_total>
  <result>SUCCESS/ERROR:error message</result>
  <date>Date of end total.</date>
  <P1>Active import (kWh). Does not reclock. With secondary metering this is the value after the multiplier</P1>
  <P2>Reactive energy register quadrant 1 (kvarh). Does not reclock.</P2>
  <Q1>Active export (kWh). With secondary metering this is the value after the multiplier</Q1>
  <Q2>Reactive energy register quadrant 2 (kvarh)</Q2>
  <Q3>Reactive energy register quadrant 3 (kvarh)</Q3>
  <Q4>Reactive energy register quadrant 4 (kvarh)</Q4>
  <P1READING>Unmodified active import as read from the meter. Reclocks. No multiplier</P1READING>
  <Q1READING>Unmodified reactive energy as read from the meter. Reclocks. No multiplier</Q1READING>
  <STATUS>See Note 4</STATUS>
</end_total>
<max_demand>
  <result>SUCCESS/ERROR:error message</result>
  <date>The date as close to the given time as possible, using profile.</date>
  <kVA>The calculated kVA</kVA>
</max_demand>
</meter></xml>
Return on failure <xml><result>ERROR:error message</result></xml>
Example https://adam.pnpscada.com:441/readMeterTotals?LOGIN=subdomain.testme&PWD=testme&eid=1145&startdate=2008-07-09&enddate=2008-08-09%2000:00:00.000
https://adam.pnpscada.com:441/readMeterTotals?LOGIN=subdomain.testme&PWD=testme&key1=802786&startdate=2008-07-09%2000:00&enddate=2008-08-09%2000:00
https://adam.pnpscada.com:441/readMeterTotals?LOGIN=subdomain.testme&PWD=testme&key2=802786&startdate=2008-07-09%2000:00&enddate=2008-08-09%2000:00
https://adam.pnpscada.com:441/readMeterTotals?LOGIN=subdomain.testme&PWD=testme&phone=%2B27833835921&startdate=2008-07-09%2000:00&enddate=2008-08-09%2000:00

readMeterProfile

Inputstartdate:The oldest date from where to return profile values. See Note 3
Inputenddate:The youngest date from where to return profile values. See Note 3
Inputeid: Entity ID
Inputkey1: First/System name
Inputkey2: Second/User name
Inputcid: Class ID
Inputphone: Phone number. See Note 2
Description See Note 1 for eid, cid, key1 and key2
User must have access to view meters with totals, to be able to view the totals through this service.
Return on success
<xml>
<meter>
<serial>Meter's serial</serial>
<id>Meter's user defined name</id>
<profile>
<sample>
  <result>SUCCESS</result>
  <date>Date of this sample.</date>
  <P1>Active import (kW). Does not count up. With secondary metering this is the value after the multiplier</P1>
  <P2>Reactive energy register quadrant 1 (kW). Does not count up.</P2>
  <Q1>Active export (kvar). With secondary metering this is the value after the multiplier</Q1>
  <Q2>Reactive energy register quadrant 2 (kvar)</Q2>
  <Q3>Reactive energy register quadrant 3 (kvar)</Q3>
  <Q4>Reactive energy register quadrant 4 (kvar)</Q4>
  <STATUS>See Note 4</STATUS>
</sample>
... (more samples)
</profile>
</meter>
</xml>
Return on failure <xml><result>ERROR:error message</result></xml>
Example https://adam.pnpscada.com:441/readMeterProfile?LOGIN=subdomain.testme&PWD=testme&eid=1145&startdate=2009-08-08&enddate=2009-08-14
https://adam.pnpscada.com:441/readMeterProfile?LOGIN=subdomain.testme&PWD=testme&key1=01P00713&startdate=2009-08-08&enddate=2009-08-14
https://adam.pnpscada.com:441/readMeterProfile?LOGIN=subdomain.testme&PWD=testme&key2=01P00713&startdate=2009-08-08&enddate=2009-08-14
https://adam.pnpscada.com:441/readMeterProfile?LOGIN=subdomain.testme&PWD=testme&phone=%2B27833835921&startdate=2009-08-08&enddate=2009-08-14

getMeterAccountProfile.jsp

Inputstart:The oldest date from where to return profile values. See Note 3
Inputend:The youngest date from where to return profile values. See Note 3
Inputeids: Entity ID of meter account
Inputkey1: (optional) First/System name
Inputkey2: (optional) Second/User name
Inputcid: (optional) Class ID (109)
Description Get meter account profile, already summed according to the portions specified in the meter account
Return on success
<xml>
<result>SUCCESS</result>
<meter_account>
<id>Meter's serial</id>
<meter>
  <serial>Serial of meter</serial>
  <portion>Portion of meter in this account</portion>
  <period>Period in which meter's profile is stored in seconds (e.g. 1800 = half hour)</period>
</meter>
.. more meters
<profile>
<sample>
  <date>Date of this sample.</date>
  <P1>Active import (kW). Does not count up. With secondary metering this is the value after the multiplier</P1>
  <P2>Reactive energy register quadrant 1 (kvar). Does not count up.</P2>
  <Q1>Active export (kW). With secondary metering this is the value after the multiplier</Q1>
  <Q2>Reactive energy register quadrant 2 (kvar)</Q2>
  <Q3>Reactive energy register quadrant 3 (kvar)</Q3>
  <Q4>Reactive energy register quadrant 4 (kvar)</Q4>
</sample>
... (more samples)
</profile>
</meter_account>
</xml>
Return on failure <xml><result>ERROR:error message</result></xml>
Example https://adam.pnpscada.com:441/getMeterAccountProfile.jsp?LOGIN=subdomain.testme&PWD=testme&eid=1145&start=2009-08-08&end=2009-08-14

getClass

Inputid: id of the class to get. e.g. 123
Inputdescr: the name of the class to get (if not giving the id). e.g. SmarTee
Description Gets the class along with all it's imports and exports.
e.g. A SIM (class) exports SIM (interface) and a modem imports SIM (interface) and exports Communication Device (interface).
Return on success
<xml>
<result>SUCCESS</result>
<clas>
<id>The class ID</id>
<descr>Human readable name for class</descr>
<category>Categories of class.
Categories are:
<ul><li>TODO</li></ul></category>
<mports>
  <mport>
    <id>ID of import</id>
    <iid>ID of interface that this import refers to</iid>
    <num>Number of times that this import imports the interface</num>
    <descr>Description of import (If there are multiple imports)</descr>
  </mport>
  ... (more interfaces imported)
</mports>
<xports>
  <xport>
    <id>ID of export</id>
    <iid>ID of interface that this import refers to</iid>
    <descr>Description of export</descr>
  </xport>
  ... (more interfaces exported)
</xports>
<key1name>
what is key1 called for this class, e.g. ID
</key1name>
<key2name>
what is key1 called for this class, e.g. Name
</key2name>
</clas>
</xml>
Return on failure <xml><result>ERROR:error message</result></xml>
Example https://adam.pnpscada.com:441/getClass?LOGIN=subdomain.testme&PWD=testme&id=101

getInterface

Inputid: id of the interface to get. e.g. 1
Inputdescr: the name of the interface to get (if not giving the id). e.g. SIM
Description Gets a description of the interface
Return on success
<xml>
  <result>SUCCESS</result>
  <interf><id>Interface ID</id>
    <descr>Description of interface</descr>
  </interf>
</xml>
Return on failure <xml><result>ERROR:error message</result></xml>
Example https://adam.pnpscada.com:441/getInterface?LOGIN=subdomain.testme&PWD=testme&id=1

getEntity

Inputeid: ID of entity to get.
Inputcid: ID of class of entity.
Inputkey1: First/System name.
Inputkey2: Second/User name.
Description Returns the specified entity with imports and exports.
See Note 1 for eid, cid, key1 and key2
Use getAllEntities to get all entity IDs, and then use this (getEntity) to get the details of the entities you got.
User must have access to view the specified entity.
Return on success
<xml>
  <result>SUCCESS</result>
  <ent>
    <id>id of entity</id>
    <cid>class id</cid>
    <key1>Entities first/system name</key1>
    <key2>Entities second/human name</key2>
    <mports>
      <mport>
        <mid>Interface ID imported</mid>
        <num>Number of times that interface is imported</num>
        <deid>
          ID of the entity imported with this interface.
          The depended Entity ID.
          e.g. A GPRS modem depends on a SIM.
          Calling getEntity on the modem, will then give the SIMs ID here once they are linked up.
        </deid>
        <xid>The export ID of the imported entity.
        This is required because some entities export interfaces multiple times.
        e.g. A SIM exports xid 2 (which points to the SIM interface) and a modem imports mid 1 (which points to the SIM interface)</xid>
      </mport>
      ... (more imports)
    </mports>
    <xports>
      <xport>
        <xid>Interface ID exported</xid>
        <num>Number of times that interface is exported</num>
        <eid>
          ID of the entity exported with this interface.
          The dependent Entity ID.
          e.g. A GPRS modem depends on a SIM.
          Calling getEntity on the SIM, will then give the modem's ID here once they are linked up.
        </eid>
        <mid>The import ID of the exported entity.</mid>
      </xport>
      ... (more exports)
    </xports>
  </ent>
</xml>
Return on failure <xml><result>ERROR:error message</result></xml>
Example https://adam.pnpscada.com:441/getEntity?LOGIN=subdomain.testme&PWD=testme&eid=1144

getClassesThatImports

Inputiid: Interface that must be imported
Description All class IDs on the current system that imports the given interface.
Use getClass to get the details of a specific class
Return on success
<xml>
  <result>SUCCESS</result>
  <clas><id>Class ID</id></clas>
  ... (more classes)
</xml>
Return on failure <xml><result>ERROR:error message</result></xml>
Example https://adam.pnpscada.com:441/getClassesThatImports?LOGIN=subdomain.testme&PWD=testme&iid=1

getClassesThatExports

Inputiid: Interface that must be exported
Description All class IDs on the current system that exports the given interface.
Use getClass to get the details of a specific class
Return on success
<xml>
  <result>SUCCESS</result>
  <clas><id>Class ID</id></clas>
  ... (more classes)
</xml>
Return on failure <xml><result>ERROR:error message</result></xml>
Example https://adam.pnpscada.com:441/getClassesThatExports?LOGIN=subdomain.testme&PWD=testme&iid=1

getAllEntities

Inputcid (optional): ID of class to get. If left out, it gets all the entities
Description All entity IDs on the current system belonging to the specified username.
Use getEntity to get the details of a specific entity
Return on success
<xml><result>SUCCESS</result><entities>
  <entity><id>Entity ID</id></entity>
  ... (more entities)
  </entities>
  <len>Amount of entities passed</len>
</xml>
Return on failure <xml><result>ERROR:error message</result></xml>
Example https://adam.pnpscada.com:441/getAllEntities?LOGIN=subdomain.testme&PWD=testme

getAllClasses

Description All class IDs on the current system.
Use getClass to get the details of a specific class
Return on success
<xml>
  <result>SUCCESS</result>
  <classes>
    <clas><id>ID of class</id></clas>
    ...(more classes)
  </classes>
</xml>
Return on failure <xml><result>ERROR:error message</result></xml>
Example https://adam.pnpscada.com:441/getAllClasses?LOGIN=subdomain.testme&PWD=testme

replaceComms

Inputoldeid: ID of entity that exports Communication Device interface (2) to remove
Inputneweid: ID of entity that exports Communication Device interface (2) to insert
Description Changes the communication device used by all dependent entities (e.g. meter/Accumulator) from one communication device to another.
Return on success <xml><result>SUCCESS</result></xml>
Return on failure <xml><result>ERROR:error message</result></xml>
Example https://adam.pnpscada.com:441/replaceComms?LOGIN=subdomain.testme&PWD=testme&oldeid=1&neweid=2

simAdd

Inputsim
Inputphone
Description Add a SIM card to the system.
Return on success<xml><result>SUCCESS</result></xml>
Return on failure<xml><result>ERROR:error message</result></xml>
Examplehttps://adam.pnpscada.com:441/simAdd?LOGIN=subdomain.testme&PWD=testme&sim=8927000000111111111&phone=%2B27111111111

maestroAdd

Inputphone
Inputport
Inputid
DescriptionAdd a maestro Modem.
Return on success<xml><result>SUCCESS</result></xml>
Return on failure<xml><result>ERROR:error message</result></xml>
Examplehttps://adam.pnpscada.com:441/maestroAdd?LOGIN=subdomain.testme&PWD=testme&phone=%2B27111111111&id=123&port=10010

csdModemAdd

Inputphone
Inputid
DescriptionAdd a CSD Modem.
Return on success<xml><result>SUCCESS</result></xml>
Return on failure<xml><result>ERROR:error message</result></xml>
Examplehttps://adam.pnpscada.com:441/csdModemAdd?LOGIN=subdomain.testme&PWD=testme&sim=8927000000111111111&id=111

accumulatorAdd

Inputserial
Inputphone
Inputid
DescriptionAdd an Accumulator.
Return on success<xml><result>SUCCESS</result></xml>
Return on failure<xml><result>ERROR:error message</result></xml>
Examplehttps://adam.pnpscada.com:441/accumulatorAdd?LOGIN=subdomain.testme&PWD=testme&serial=1111111&id=11&phone=%2B27111111111

meterAdd

Inputserial
Inputid
Inputtype
Inputrtuid or accumulatorId
DescriptionAdd a meter.
Return on success<xml><result>SUCCESS</result></xml>
Return on failure<xml><result>ERROR:error message</result></xml>
Examplehttps://adam.pnpscada.com:441/meterAdd?LOGIN=subdomain.testme&PWD=testme&serial=111111&id=111&type=Etron%2012PL&accumulatorID=11

meterProblems

Inputdays
DescriptionList of meters that could not be phoned in the last n days.
Examplee.g. https://adam.pnpscada.com:441/meterProblems?LOGIN=subdomain.testme&PWD=testme&days=10

meterRead

Inputoptional: phone or sim or PNPENTID and PNPENTCLASID
phonethe Connection's 'phone number'
simthe Connection's 'sim number'
PNPENTIDthe meter Entity's DB ID
PNPENTCLASIDthe meter Entity's Class ID. It must be a meter, in other words, export the Meter Admin interfaceSee getClass for a list of possible class IDs
askMaskOptional.
Default of 15
The mask of the sets to get:
PROFILE = 0x01; // bit 0 d
TOTALS = 0x02; // bit 1 t
EVENTS = 0x04; // bit 2 e
PHASOR = 0x08; // bit 3 p
BILLING_REGISTERS = 0x4000; // bit 14 for example: Peak, or 4s or 7 or whatever the meter calls it. So, it is a bit like instrumentation profile, in that the meter can record anything. In fact, it is exacty a vset, except the times are like: the first day of the month? But the meter itself will differentiate,
INSTRUMENTATION_PROFILE = 0x8000; // bit 15
preferCSDOptional.
Default is 'no'
Should be a value of 'yes' if you prefer a CSD connection to a GPRS connection, e.g. with a GPRS modem. You must have CSD modem/s connected and configured on your PNPSCADA server for this to work.
DescriptionAdd a meter or many meters on one connection to the queue for reading it. Will put it at the head of the Acquire queue.
Return on success<xml><result>SUCCESS</result></xml>
Return on failure<xml><result>ERROR:error message</result></xml>
ExampleRequest a meter to be read. e.g. http://adam.pnpscada.com:441/meterRead?LOGIN=subdomain.testme&PWD=testme&phone=%2B27111111111

getMeterReadStatus.jsp

PNPENTIDthe Entity's DB ID (you can also specify the entity using key1 or key2 or key3) has to be a meter
PNPENTCLASIDthe Entity's Class ID
DescriptionRequest an entity's Read Status.
Return on success <xml>
<result>SUCCESS</result>
<key1>[Requested Meter Serial Number]</key1>
<key2>[Requested Meter Name]</key2>
<maxdate>[Date of latest data in DB for meter (YYYY-MM-DD hh:mm:ss)]</maxdate>
<readdate>[last dat and time a read attempt was completed (YYYY-MM-DD hh:mm:ss)]</readdate>
<smsg>[Short message]</smsg>
<tmsg>[Technical error report]</tmsg>
<lmsg>[Long message]</lmsg>
<readlevel>[read level 0-3]</readlevel>
<readleveldesc>[read level description]</readleveldesc>
</xml>
Return on failure<xml><result>ERROR:error message</result></xml>
Examplee.g. https://adam.pnpscada.com:441/getMeterReadStatus.jsp?key1=88888888&LOGIN=subdomain.testme&PWD=testme

getKamstrupKey.jsp

key1the meter's serial number.
DescriptionRequest a Meter's decryption key.
Return on success<xml><result>SUCCESS</result><eid>Requested Entity ID</eid><cid>Requested Entity Class ID</cid><key1>Key 1 of requested Entity (Name unique per class)</key1><key2>Key 2 of requested Entity (User defined name)</key2><enckey>Decryption key</enckey></xml>
Return on failure<xml><result>ERROR:error message</result></xml>
Examplee.g. https://adam.pnpscada.com:441/getKamstrupKey.jsp?key1=92341634&LOGIN=subdomain.testme&PWD=testme

getKey3.jsp

PNPENTIDthe Entity's DB ID
PNPENTCLASIDthe Entity's Class IDSee getClass for a list of possible class IDs
DescriptionRequest an entity's Key3 value.
Return on success<xml><result>SUCCESS</result><eid>Requested Entity ID</eid><cid>Requested Entity Class ID</cid><key1>Key 1 of requested Entity (Name unique per class)</key1><key2>Key 2 of requested Entity (User defined name)</key2><key3>Key 3 of requested Entity (Unique in all of database)</key3></xml>
Return on failure<xml><result>ERROR:error message</result></xml>
Examplee.g. https://adam.pnpscada.com:441/getKey3.jsp?PNPENTID=1&PNPENTCLASID=100&LOGIN=subdomain.testme&PWD=testme

setKey3.jsp

PNPENTIDthe Entity's DB ID
PNPENTCLASIDthe Entity's Class IDSee getClass for a list of possible class IDs
key3Set an entity's Key3 value.
DescriptionRequest an entity's Key3 value.
Return on success<xml><result>SUCCESS</result><eid>Requested Entity ID</eid><cid>Requested Entity Class ID</cid><key1>Key 1 of requested Entity (Name unique per class)</key1><key2>Key 2 of requested Entity (User defined name)</key2><key3>Key 3 of requested Entity (Unique in all of database)</key3></xml>
Return on failure<xml><result>ERROR:error message</result></xml>
Examplee.g. https://adam.pnpscada.com:441/setKey3.jsp?PNPENTID=1&PNPENTCLASID=100&LOGIN=subdomain.testme&PWD=testme

getNewProfile.jsp

Key3
(Note: key names are case sensitive)
a comma delimited string of key3 IDs
startdateThe start date of the profile (If omitted, defaults to the enddate - 24 hours)
enddateThe end date of the profile in the form "YYYY-MM-DD HH:MM:SS". The "HH:MM:SS" part is optional
Key1 (optional)Filter on meter's Key1. (where % is the wild card, this must be URL-Encoded with %25, e.g. Key1=%25loc%25)
Key2 (optional)Filter on meter's Key2
pk1 (optional)Filter on an ancestor's Key1, e.g. a SIM card number. SQL wildcards supported.
pk2 (optional)Filter on an ancestor's Key2, e.g. a phone number. SQL wildcards supported.
place (optional)Filter on meter's place
site (optional)Filter on meter's site
zone (optional)Filter on meter's zone
commissioned (optional) yes/no/all. Default is 'yes'. If yes, only considers meters where the commissioned flag in the Meter Details has been set on.e.g. commissioned=all
p1 (optional)if "false" (or "no"), do not return this set of values, default truee.g. p1=false
q1 (optional)if "false" (or "no"), do not return this set of values, default truee.g. q1=false
p2 (optional)if "false" (or "no"), do not return this set of values, default falsee.g. p2=true
q2 (optional)if "false" (or "no"), do not return this set of values, default falsee.g. q2=true
q3 (optional)if "false" (or "no"), do not return this set of values, default falsee.g. q3=true
q4 (optional)if "false" (or "no"), do not return this set of values, default falsee.g. q4=true
minutes (optional)if the meter has 15 minute data, you may change it to 15 from the default 30, then there should be 96 instead of 48 values per day, default 30e.g. minutes=15
totalProfiles (optional)if "true", the sets of profile values are returned as totals, default falsee.g. totalProfiles=true
DescriptionGet the half-hour profile readings in kWh and kvarh for one or more meters
Return on success
<xml>
  <result>SUCCESS</result>
  <date>the last profile date</date>
  <meters>
    <meter>
      <p1>
        comma delimited string with 48 values ordered by time starting with 00:30. Units of Measure is kWh or kl
      </p1>
      <q1>
        comma delimited string with 48 values ordered by time starting with 00:30 – only included if parameter set to true. Units of Measure is kvarh
      </q1>
      <kVA>max demand in the 24hour period</kVA>
      <Status>
        The lower 7 bits are used to represent a NUMBER for the STATUS sample,
        that can mean different things for different meters.
        The higher bits after that have generic meanings, and can be
        simultaneously set to mean more than one thing at the same time:
        UNDER VOLTAGE            = 0x0080
        OVER VOLTAGE             = 0x0100
        REVERSE FLOW             = 0x0200
        OVER CURRENT             = 0x0400
        OVER ENERGY              = 0x0800
        CALC IMPORTED            = 0x1000
        CALC INTERPOLATED        = 0x2000
        CALC ALMOST INTERPOLATED = 0x4000
        GAPS                     = 0x8000
      </Status>
      <e1>total + profile up to the enddate (kWh)</e1>
      <f1>total +profile up to the enddate (kvarh)</f1>
      <cid>Class ID</cid>
      <primary>if primary metering "Y", else "N"</primary>
      <serial>Meter's serial</serial>
      <key2>Meter's user defined name</key2>
      <key3>Meter's Key3 (which may be null)</key3>
    </meter>
    ...next meter...
  </meters>
<xml>
Return on failure<xml><result>ERROR:error message</result></xml>
ExampleGet the profile for multiple meters, during 2 dates.
e.g. https://adam.pnpscada.com:441/getNewProfile.jsp?LOGIN=subdomain.testme&PWD=testme&Key1=38900008&enddate=2011-09-15&commissioned=false

getAllTotals.jsp

Key3
(Note: key names are case sensitive)
a comma delimited string of key3 IDs
startdateThe start date (If omitted, defaults to the enddate - 24 hours)
enddateThe end date in the form "YYYY-MM-DD HH:MM:SS". The "HH:MM:SS" part is optional
Key1 (optional)Filter on meter's Key1. (where % is the wild card, this must be URL-Encoded with %25, e.g. Key1=%25loc%25)
Key2 (optional)Filter on meter's Key2
pk1 (optional)Filter on an ancestor's Key1, e.g. a SIM card number. SQL wildcards supported.
pk2 (optional)Filter on an ancestor's Key2, e.g. a phone number. SQL wildcards supported.
place (optional)Filter on meter's place
site (optional)Filter on meter's site
zone (optional)Filter on meter's zone
commissioned (optional) yes/no/all. Default is 'yes'. If yes, only considers meters where the commissioned flag in the Meter Details has been set on.e.g. commissioned=all
p1 (optional)if "false" (or "no"), do not return this set of values, default truee.g. p1=false
q1 (optional)if "false" (or "no"), do not return this set of values, default truee.g. q1=false
p2 (optional)if "false" (or "no"), do not return this set of values, default falsee.g. p2=true
q2 (optional)if "false" (or "no"), do not return this set of values, default falsee.g. q2=true
q3 (optional)if "false" (or "no"), do not return this set of values, default falsee.g. q3=true
q4 (optional)if "false" (or "no"), do not return this set of values, default falsee.g. q4=true
DescriptionGet the totals for a meter, between two dates.
Return on success
<xml>
  <result>SUCCESS</result>
  <date>the last total date</date>
  <meters>
    <meter>
      <p1>
        comma delimited string with 48 values ordered by time starting with 00:30
      </p1>
      <q1>
        comma delimited string with 48 values ordered by time starting with 00:30 – only included if parameter set to true
      </q1>
      <kVA>max demand in the 24hour period</kVA>
      <Status>
        The lower 7 bits are used to represent a NUMBER for the STATUS sample,
        that can mean different things for different meters.
        The higher bits after that have generic meanings, and can be
        simultaneously set to mean more than one thing at the same time:
        UNDER VOLTAGE            = 0x0080
        OVER VOLTAGE             = 0x0100
        REVERSE FLOW             = 0x0200
        OVER CURRENT             = 0x0400
        OVER ENERGY              = 0x0800
        CALC IMPORTED            = 0x1000
        CALC INTERPOLATED        = 0x2000
        CALC ALMOST INTERPOLATED = 0x4000
        GAPS                     = 0x8000
      </Status>
      <e1>total + profile up to the enddate (kWh)</e1>
      <f1>total +profile up to the enddate (kvarh)</f1>
      <cid>Class ID</cid>
      <primary>if primary metering "Y", else "N"</primary>
      <serial>Meter's serial</serial>
      <key2>Meter's user defined name</key2>
      <key3>Meter's Key3 (which may be null)</key3>
    </meter>
    ...next meter...
  </meters>
<xml>
Return on failure<xml><result>ERROR:error message</result></xml>
ExampleGet the totals for a meter, between two dates.
e.g. https://adam.pnpscada.com:441/getAllTotals.jsp?LOGIN=subdomain.testme&PWD=testme&enddate=2010-09-14

getTotals.jsp

Key3
(Note: key names are case sensitive)
a comma delimited string of key3 IDs
startdateThe start date
enddateThe end date in the form "YYYY-MM-DD HH:MM:SS". The "HH:MM:SS" part is optional
Key1 (optional)Filter on meter's Key1. (where % is the wild card, this must be URL-Encoded with %25, e.g. Key1=%25loc%25)
Key2 (optional)Filter on meter's Key2
DescriptionGet all the totals for a meter, between two dates.
Return on success
<xml>
<result>SUCCESS</result>
<meter>
  <serial>Serial</serial>
  <name>Name of meter</name>
  <total>
    <date>date of this total</date>
    <E1>Total Energy reading (Active import - this is the default of most meters) kWh</E1>
    <E2>Total Reverse Active Energy reading (this is left out if zero)</E2>
    <F1>Total Reactive Energy reading (Quadrant 1 - forward lagging) (this is left out if zero) kvarh</F1>
    <F2>Total Reactive Energy reading (Quadrant 2 - reverse leading) (this is left out if zero)</F2>
    <F3>Total Reactive Energy reading (Quadrant 3 - reverse lagging) (this is left out if zero)</F3>
    <F4>Total Reactive Energy reading (Quadrant 4 - forward leading) (this is left out if zero)</F4>
    <status>See Note 4</status>
  </total>
  next total...
next meter...
</meter>
</xml>
Return on failure<xml><result>ERROR:error message</result></xml>
ExampleGet the totals for a meter 123456789, between two dates.
e.g. https://adam.pnpscada.com:441/getTotals.jsp?LOGIN=subdomain.testme&PWD=testme&startdate=2010-08-14&enddate=2010-09-14&key1=123456789

doPage

PageToDothis is the web page that should be executed as a web-service
doPageSubmit(optional) set to "1" to first get the page values, and then submit with those values. This allows you to only change one value on an edit page.
DescriptionExecute a web-page as a web-service.
Return on success
<xml>
  <result>SUCCESS</result>
  <form>
    <type>text/hidden/checkbox/select/textarea</type>
    <value>The value of the input submitted by the form.</value>
    <flag>"checked" for checkboxes</flag>
  </form>
</xml>
Return on failure<xml><result>ERROR:error message</result></xml>
ExamplePlease note that with the above method, you set everything on the Meter Details screen.
It is almost like pushing the submit button at the bottom of the screen.
The result of the page is XML with all variables in the page's form.
e.g. https://adam.pnpscada.com:441/doPage?LOGIN=subdomain.testme&PWD=testme&SNUMBER=700697&PageToDo=commisioning.jsp&submitbt=true&MNAME=key2Here&CTPRIM=1&CTSEC=1&VTPRIM=1&VTSEC=1&FULLLOAD=60&PLACE=&PASSWD=&NOTE=&WIRES=2&SITE=&ZONE=&PRIMARYM=&UPP=1&PPU=1&COMDATE=2009-08-24%2016%3A38%3A08&MAXDATE=2009-08-24%2016%3A38%3A08
To change only the ZONE on Edit->Meter Details to TESTZONE
e.g. https://adam.pnpscada.com:441/doPage?LOGIN=subdomain.testme&PWD=testme&key1=700697&PageToDo=commisioning.jsp&doPageSubmit=1&submitbt=1&ZONE=TESTZONE

getProvisionalBill.jsp

eidid of meter account (can also specify key1, key2 or key3)
startdatethis is the FROM date and time for the bill
enddatethis is the TO date and time for the bill
TGIDX (optional)this is configured tariff to use. Index 0 is the default tariff. Other options would typicall be 1, 2,... etc.
Teid (optional)the entity id of the configured tariff to use
Tkey1 (optional)the key1 of the configured tariff to use
published (optional)P for provisional bills (the default), N for not published monthly bills, Y for published monthly bills, and C for captured bills
documentdate (optional)When you run a provisional bill, you can use this to determine the invoice date, which can affect things like which VAT rate is applicable, for instance
tariffdate (optional)If you want to see what your last month would have cost you in next month's tariff, then enter last month's start and end as above, but enter a date within next month in this field.
DescriptionGet the provisional bill for one meter account between two dates for the specified tariff.
Return on success
<xml>
 <result>SUCCESS</result>
 <startdate>Start Date (YYYY-MM-DD HH:MM:SS)</startdate>
 <enddate>End Date (YYYY-MM-DD HH:MM:SS)</enddate>
 <published>P</published>
 <key1>Meter Account id</key1>
 <key2>Meter Account description</key2>
 <util>Utility of account, e.g. Electricity or Water</util>
 <currency>Currency Symbol of Bill</currency>
 <align>Is the symbol pre-pended or post-pended to the amount?</align>
 <tariff>the name of the tariff that was used</tariff>
 <taxtype>the description of the tax to add, e.g. VAT</taxtype>
 <taxperc>the percentage of the tax to add</taxperc>
 <items> amount of li items in bill</items>
 <bill>
  <li>
   <tname> Description of tariff line item</tname>
   <desc1> Description 1 of bill line item</desc1>
   <desc2> Description 2 of bill line item</desc2>
   <units> Quantity of units that is billed in this line</units>
   <rate> Price per unit</rate>
   <amount> Total amount (units multiplied by rate)</amount>
   <unitsunit> The unit in which this item is measured, e.g. kWh, kl, etc.</unitsunit>
   <type> An indication of what type of algorithm was followed to calculate the amount of this item</type>
   <compareId> this is used to be able to compare similar line item fields accross months, e.g. Peak (LS) and Peak (HS)</compareId>
   <tarifflineid> this is a unique identifier per tariff line item</tarifflineid>
  </li>
  ... next li ...
 </bill>
 <readings>
  <mr>
   <snumber>This is the meter serial number</snumber>
   <mtype>This is the meter type</mtype>
   <start>
    <date>date of the start reading for this meter for this bill</date>
    <E1>Total Energy reading (Active import - this is the default of most meters) kWh</E1>
    <E2>Total Reverse Active Energy reading (this is left out if zero)</E2>
    <F1>Total Reactive Energy reading (Quadrant 1 - forward lagging) (this is left out if zero) kvarh</F1>
    <F2>Total Reactive Energy reading (Quadrant 2 - reverse leading) (this is left out if zero)</F2>
    <F3>Total Reactive Energy reading (Quadrant 3 - reverse lagging) (this is left out if zero)</F3>
    <F4>Total Reactive Energy reading (Quadrant 4 - forward leading) (this is left out if zero)</F4>
    .. alternatively, if for example water, this could be ..
    <W1>Total Water reading (kl)</W1>
   </start>
   <end>The end reading... follows the same format as the start reading</end>
  </mr>
  ... next meter reading (mr) ...
 </readings>");
</xml>
Return on failure<xml><result>ERROR:error message</result></xml>
Examplefor a meter account with ID 10469 using default tariff for the date 2015-03-01 to 2015-04-01
https://adam.pnpscada.com/getProvisionalBill.jsp?LOGIN=subdomain.testme&PWD=testme&key1=10469&startdate=2015-03-01&enddate=2015-04-01

getMonthlyBill.jsp

eidid of meter account (can also specify key1, key2 or key3)
startdatethis is the FROM date and time for the bill
enddatethis is the TO date and time for the bill (optional)
DescriptionIf enddate is not specified, returns a list of all the dates for which there are bill for this meter account.
Alternatively, returns the monthly bill for one meter account between two dates.
Return on success (no enddate specified)
<xml>
  <result>Pls Specify startdate and enddate</result>
  <key1>Meter Account id</key1>
  <key2>Meter Account Name</key2>
  <util>Utility of account, e.g. Electricity or Water</util>
  <bills>
    <bill>
      <startdate>Start Date of Bill Run (YYYY-MM-DD HH:MM:SS.mmm)</startdate>
      <enddate>End Date of Bill Run (YYYY-MM-DD HH:MM:SS.mmm)</enddate>
      <brid>2126203</brid>
    </bill>
    ... repeated for each bill run
  </bills>
</xml>
Return on success (enddate specified)
<xml>
  <result>SUCCESS</result>
  <startdate>Start Date of Bill Run (YYYY-MM-DD HH:MM:SS.mmm)</startdate>
  <enddate>End Date of Bill Run (YYYY-MM-DD HH:MM:SS.mmm)</enddate>
  <key1>Meter Account id</key1>
  <key2>Meter Account Name</key2>
  <util>Utility of account, e.g. Electricity or Water</util>
  <brid>Bill Run ID</brid>
  <currency>Currency Symbol of Bill</currency>
  <align>Is the symbol pre-pended or post-pended to the amount?</align>
  <tariff>the name of the tariff that was used</tariff>
  <taxtype>the description of the tax to add, e.g. VAT</taxtype>
  <taxperc>the percentage of the tax to add</taxperc>
  <currency_decimals>is the amount of decimals in the currency, e.g. usually 2 for cents</currency_decimals>
  <items>amount of li items in bill</items>
  <bill>
    <li>
      <tname>Description of tariff line item</tname>
      <desc1>Description 1 of bill line item</desc1>
      <desc2> Description 2 of bill line item</desc2>
      <units>Quantity of units that is billed in this line</units>
      <rate>Price per unit</rate>
      <amount>Total amount (units multiplied by rate)</amount>
      <unitsunit>The unit in which this item is measured, e.g. kWh, kl, etc.</unitsunit>
      <type>An indication of what type of algorithm was followed to calculate the amount of this item</type>
      <compareId>this is used to be able to compare similar line item fields accross months, e.g. Peak (LS) and Peak (HS)</compareId>
    </li>
    ... more per bill line item
  </bill>
  <readings>
    <mr>
      <snumber>Serial of Meter</snumber>
      <mtype>This is the meter type</mtype>
      <start>
        <date>Start date</date>
        <E1>Total Energy reading and unit at time of bill start (Active import - this is the default of most meters)</E1>
        <F1>Total Reactive Energy reading and unit at time of bill start (Quadrant 1 - forward lagging) (this is left out if zero)</F1>
      </start>
      <end>
        <date>End date</date>
        <E1>Total Energy reading and unit at time of bill end (Active import - this is the default of most meters)</E1>
        <F1>Total Reactive Energy reading and unit at time of bill end (Quadrant 1 - forward lagging) (this is left out if zero)</F1>
      </end>
    </mr>
  </readings>
</xml>
Return on failure<xml><result>ERROR:error message</result></xml>
Examplefor a meter account with ID 10469 for the date 2015-03-01 to 2015-04-01
https://adam.pnpscada.com/getMonthlyBill.jsp?LOGIN=subdomain.testme&PWD=testme&key1=10469&startdate=2015-03-01&enddate=2015-04-01

getEntityDetails.jsp

eidid of entity (can also specify key1, key2 or key3).
DescriptionCurrently only Meter Accounts, Tariffs and Meters are supported, and the return is different between them. Returns information about each entity.
Return on success (Meter Account)
<xml>
 <result>SUCCESS</result>
 <id>They key1 of the Meter Account</id>
 <name>They key2 of the Meter Account</name>
 <utility>The utility of the Meter Account, e.g. Electricity or Water</utility>
 <meters>
  <meter>
    <eid>Entity id of meter in meter account</eid>
    <key1>key1 of meter (the serial number)</key1>
    <key2>key2 of meter (the use defined name)</key2>
    <portion>multiplier, e.g. 1 or -1 or 0.3</portion>
  </meter>
  ... next meter ...
 </meters>
 <meterlen>The quantity of meters in this meter account</meterlen>
 <tariffs>
  <tariff>
    <eid>Entity id of tariff</eid>
    <key1>key1 of tariff (the id)</key1>
    <key2>key2 of tariff (the name)</key2>
    <tgidx>The tariff option number. Option 0 is the default tariff for this meter account, used for monthly bills. The others can be used for Provisional Bills, but not for Monthly Bills.</tgidx>
  </tariff>
  ... next tariff ...
 </tariffs>
 <tarifflen>The quantity of tariffs configured for this meter account</tarifflen>
 </xml>
Return on success (Ledger)
<xml>
 <result>SUCCESS</result>
 <id>They key1 of the Ledger</id>
 <name>They key2 of the Ledger</name>
 <date_of_last_transaction>Date of last transaction</date_of_last_transaction>
 <balance>Current balance of the ledger multiplied by 100000.</balance>
</xml>
Return on success (Tariff)
<xml>
 <result>SUCCESS</result>
 <id>The key1 of the tariff</id>
 <name>The key2 (name) of the tariff</name>
 <utility>The utility of the tariff, e.g. Electricity or Water</utility>
 <vfrom>Valid From date. If this is null, it has not been validated</vfrom>
 <vto>Valid To date. If this is null, it has not been validated</vto>
 <certifiedby>Indication of who validated this tariff</certifiedby>
 <certifiedon>When was it validated?</certifiedon>
 <taxtype>What is the name of the tax, e.g. VAT</taxtype>
 <taxperc>What is the percentage of the tax levied</taxperc>
 <currency>What is the currency symbol</currency>
 <currency_align>PRE or POST: is the currency symbol written before or after the amount</currency_align>
 <currency_decimals>is the amount of decimals in the currency, e.g. usually 100 for cents</currency_decimals>
 <calendars>
  <calendar>
   <eid>Entity id of a calendar that is referred to by the tariff. For these relationships to be set up correctly, the tariff should be validated first.</eid>
   <key1>key1 of calendar (id)</key1>
   <key2>key2 of calendar (name)</key2>
   <tourateperiods>
    <tourateperiod>
     <touid>Unique Time of Use ID for a specific tariff rate period in this calendar. This is unique over all calendars per server.</touid>
     <descr>Human readable description of the time of use tariff rate period</descr>
    </tourateperiod>
    ... next tourateperiod ...
   </tourateperiods>
   <tourateperiodlen>the amount of tourateperiods in this calendar</tourateperiodlen>
  </calendar>
  ... next calendar ...
 </calendars>
 <calendarlen>the amount of calendars in this tariff</calendarlen>
 <lineitems>
  <li>
   <tarifflineid>unique id for a specific line item on the tariff. This ties up with the field of the same name in getProvisionalBill.jsp</tarifflineid>
   <descr>The tariff line item description</descr>
   <type>Indication of the type of algorithm followed to calculate this line item</type>
   <compareId>Sometimes different tarifflineitems should be compared to each other for statistical comparisons accross seasons, e.g. between Peak (HS) and Peak (LS). Although their tarifflineid would be different, their compareId would be the same.</compareId>
   <color>This is an RGB value</color>
   <touid>If this is a Time Of Use tariff line item, the touid will be specified here. This can be cross referenced to touid in the calendars element.</touid>
  </li>
  ... next tariff line item (li) ...
 </lineitems>
 <lineitemlen>the amount of line items in this tariff</lineitemlen>
</xml>
Return on success (Meter)
<xml>
 <result>SUCCESS</result>
 <serialnumber>meter serial</serialnumber>
 <name>user defined meter name</name>
 <ctprim>CT primary value</ctprim>
 <ctsec>CT secondary value</ctsec>
 <vtprim>VT primary</vtprim>
 <vtsec>VT secondary</vtsec>
 <fullload>Breaker Size</fullload>
 <wires>Single Phase: 2 Wires, 3 Phase: Normally 4 Wires, sometimes 3 wires</wires>
 <place>Address 1 Freefrom</place>
 <site>Address 2 Freefrom</site>
 <zone>Address 3 Freefrom</zone>
 <primarymetering>If Y (default) we take the readings from the meter as is, if N, we apply CT and VT ratios by modifying UPP and PPU</primarymetering>
 <units_per_pulse>Number of kWh/kvarh/liters per pulse</units_per_pulse>
 <pulses_per_unit>Number of pulses per kWh/kvarh/liter</pulses_per_unit>
 <commissioned>Y/N is meter commisioned</commissioned>
 <disabled>Y/N is meter disabled</disabled>
 <password>The password for the meter, blank if the meter's default password is to be used</password>
 <comdate>Date the meter was installed/commissioned</comdate>
 <maxdate>The last profile data we have for the meter</maxdate>
 <maxdatenonzero>The last profile data we have for the meter that is not zero</maxdatenonzero>
 <maxdatenoninterp>The last profile data we have for the meter that was not interpolated. You can derive/inerpolate profile from totals, but it is not always useful profile.</maxdatenoninterp>
 <manualonly>Y/N is meter read manually only</manualonly>
 <utility>Electricity/Water</utility>
 <type>Type of meter</type>
</xml>
Return on failure<xml><result>ERROR:error message</result></xml>
Examplehttps://adam.pnpscada.com:441/getEntityDetails.jsp?LOGIN=subdomain.testme&PWD=testme&key1=88501326

getEntitiesDetails.jsp

Eids(optional): comma delimited entity IDs of entities to get. If left out, it gets all the entities
cid(optional): Restricts returned entities to entities of this class.
iidcid (optional): Restricts returned entities to entities of this interface.
Key2cid (optional): Restricts returned entities to entities of this Key2. Can use SQL wildcards.
DescriptionCurrently only Meter Accounts, Tariffs and Meters are supported, and the return is different between them. Returns information about each entity.
Return on success (Meter Account)
<xml>
 <result>SUCCESS</result>
 <id>They key1 of the Meter Account</id>
 <name>They key2 of the Meter Account</name>
 <utility>The utility of the Meter Account, e.g. Electricity or Water</utility>
 <meters>
  <meter>
    <eid>Entity id of meter in meter account</eid>
    <key1>key1 of meter (the serial number)</key1>
    <key2>key2 of meter (the use defined name)</key2>
    <portion>multiplier, e.g. 1 or -1 or 0.3</portion>
    <meteraccount>
      <eid>ID of Meter Account linked to meter</eid>
      <key1>Meter Account key</key1>
      <key2>Meter Account Name</key2>
      <accountnumber>Meter Account number</accountnumber>
    </meteraccount>
    ... next meter account ...
  </meter>
  ... next meter ...
 </meters>
 <meterlen>The quantity of meters in this meter account</meterlen>
 <tariffs>
  <tariff>
    <eid>Entity id of tariff</eid>
    <key1>key1 of tariff (the id)</key1>
    <key2>key2 of tariff (the name)</key2>
    <tgidx>The tariff option number. Option 0 is the default tariff for this meter account, used for monthly bills. The others can be used for Provisional Bills, but not for Monthly Bills.</tgidx>
  </tariff>
  ... next tariff ...
 </tariffs>
 <tarifflen>The quantity of tariffs configured for this meter account</tarifflen>
 </xml>
Return on success (Ledger)
<xml>
 <result>SUCCESS</result>
 <entity>
 <id>They key1 of the Ledger</id>
 <name>They key2 of the Ledger</name>
 <date_of_last_transaction>Date of last transaction</date_of_last_transaction>
 <balance>Current balance of the ledger multiplied by 100000.</balance>
 </entity>
 ...next entity...
</xml>
Return on success (Tariff)
<xml>
 <result>SUCCESS</result>
 <id>The key1 of the tariff</id>
 <name>The key2 (name) of the tariff</name>
 <utility>The utility of the tariff, e.g. Electricity or Water</utility>
 <vfrom>Valid From date. If this is null, it has not been validated</vfrom>
 <vto>Valid To date. If this is null, it has not been validated</vto>
 <certifiedby>Indication of who validated this tariff</certifiedby>
 <certifiedon>When was it validated?</certifiedon>
 <taxtype>What is the name of the tax, e.g. VAT</taxtype>
 <taxperc>What is the percentage of the tax levied</taxperc>
 <currency>What is the currency symbol</currency>
 <currency_align>PRE or POST: is the currency symbol written before or after the amount</currency_align>
 <currency_decimals>is the amount of decimals in the currency, e.g. usually 100 for cents</currency_decimals>
 <calendars>
  <calendar>
   <eid>Entity id of a calendar that is referred to by the tariff. For these relationships to be set up correctly, the tariff should be validated first.</eid>
   <key1>key1 of calendar (id)</key1>
   <key2>key2 of calendar (name)</key2>
   <tourateperiods>
    <tourateperiod>
     <touid>Unique Time of Use ID for a specific tariff rate period in this calendar. This is unique over all calendars per server.</touid>
     <descr>Human readable description of the time of use tariff rate period</descr>
    </tourateperiod>
    ... next tourateperiod ...
   </tourateperiods>
   <tourateperiodlen>the amount of tourateperiods in this calendar</tourateperiodlen>
  </calendar>
  ... next calendar ...
 </calendars>
 <calendarlen>the amount of calendars in this tariff</calendarlen>
 <lineitems>
  <li>
   <tarifflineid>unique id for a specific line item on the tariff. This ties up with the field of the same name in getProvisionalBill.jsp</tarifflineid>
   <descr>The tariff line item description</descr>
   <type>Indication of the type of algorithm followed to calculate this line item</type>
   <compareId>Sometimes different tarifflineitems should be compared to each other for statistical comparisons accross seasons, e.g. between Peak (HS) and Peak (LS). Although their tarifflineid would be different, their compareId would be the same.</compareId>
   <color>This is an RGB value</color>
   <touid>If this is a Time Of Use tariff line item, the touid will be specified here. This can be cross referenced to touid in the calendars element.</touid>
  </li>
  ... next tariff line item (li) ...
 </lineitems>
 <lineitemlen>the amount of line items in this tariff</lineitemlen>
 <periods>
  <period>
  <id>Period ID</id>
  <from>Period From Date</from>
  <to>Period End Date</to>
  </period>
 </periods>
 <rates>
  <rate>
  <tarifflineid>Tariff Line Item ID</tarifflineid>
  <periodid>Tariff Period ID</periodid>
  <value>Rate in rands (or percent for discount line items)</value>
  </rate>
 </rates>
</xml>
Return on success (Meter)
<xml>
 <result>SUCCESS</result>
 <serialnumber>meter serial</serialnumber>
 <name>user defined meter name</name>
 <ctprim>CT primary value</ctprim>
 <ctsec>CT secondary value</ctsec>
 <vtprim>VT primary</vtprim>
 <vtsec>VT secondary</vtsec>
 <fullload>Breaker Size</fullload>
 <wires>Single Phase: 2 Wires, 3 Phase: Normally 4 Wires, sometimes 3 wires</wires>
 <place>Address 1 Freefrom</place>
 <site>Address 2 Freefrom</site>
 <zone>Address 3 Freefrom</zone>
 <primarymetering>If Y (default) we take the readings from the meter as is, if N, we apply CT and VT ratios by modifying UPP and PPU</primarymetering>
 <units_per_pulse>Number of kWh/kvarh/liters per pulse</units_per_pulse>
 <pulses_per_unit>Number of pulses per kWh/kvarh/liter</pulses_per_unit>
 <commissioned>Y/N is meter commisioned</commissioned>
 <disabled>Y/N is meter disabled</disabled>
 <password>The password for the meter, blank if the meter's default password is to be used</password>
 <comdate>Date the meter was installed/commissioned</comdate>
 <maxdate>The last profile data we have for the meter</maxdate>
 <maxdatenonzero>The last profile data we have for the meter that is not zero</maxdatenonzero>
 <maxdatenoninterp>The last profile data we have for the meter that was not interpolated. You can derive/inerpolate profile from totals, but it is not always useful profile.</maxdatenoninterp>
 <manualonly>Y/N is meter read manually only</manualonly>
 <utility>Electricity/Water</utility>
 <type>Type of meter</type>
</xml>
Return on success (Organization)
<xml>
 <result>SUCCESS</result>
 <id>Same as the key1</id>
 <adminid>Id of role that administrates this organization</adminid>
 <organizationname>Name</organizationname>
 <postaladdrl1>Postal Address line 1</postaladdrl1>
 <postaladdrl2>Postal Address line 2</postaladdrl2>
 <city>CityPostal </city>
 <province>Postal Province</province>
 <postalcode>Postal Code</postalcode>
 <country>e.g. ZA</country>
 <telephonenumberdial>e.g. 27</telephonenumberdial>
 <telephonenumber>Telephone number</telephonenumber>
 <telephonenumberext>Extention</telephonenumberext>
 <faxnumberdial></faxnumberdial>
 <faxnumber>Fax number</faxnumber>
 <streetaddr>Physical Street Address</streetaddr>
 <vatnumber>VAT number</vatnumber>
 <subdomain>Subdomain that is pre-pended to .pnpscada.com e.g. sdg. (This is also used to determine the banner on the login page)</subdomain>
 <timezone>e.g. Africa/Johannesburg</timezone>
 <aid>-1</aid>
 <deleted>N if this Organization has been deleted</deleted>
 <hasbanner>N if this Organization has it's own banner</hasbanner>
 <loginnewpage>???</loginnewpage>
 <decimaldelimeter>e.g. .</decimaldelimeter>
 <thousandsdelimeter>e.g. [empty]</thousandsdelimeter>
 <unitsdelimeter>e.g. [empty]</unitsdelimeter>
 <domainserver>Main Server (if you have multiple servers)</domainserver>
 <bill_companyname/>Company to bill</bill_companyname>
 <bill_email/>billing email address</bill_email>
 <bill_email2/>second billing email</bill_email2>
 <adderorg>Id of org that added this organization</adderorg>
</xml>
Return on success (Login Account)
<xml>
 <result>SUCCESS</result>
 <id>ID of this login</id>
 <firstname>First name</firstname>
 <lastname>Last name</lastname>
 <email>email address</email>
 <cellphone>Cellphone number</cellphone>
 <login>login name with subdomain. e.g. sdg.joe</login>
 <cellphonedial>e.g. 27</cellphonedial>
 <emailcontactme>Y if we can contact this person at this email address</emailcontactme>
 <verified>Y when the login has been verified (used mainly for first time top level organization registration)</verified>
 <deleted>Y if deleted</deleted>
 <inwiki>Not used anymore</inwiki>
 <j2meon>Not used anymore</j2meon>
 <pwddate>Date of last password change</pwddate>
 <oldmenu>Y if the old menu is used on this login</oldmenu>
</xml>
Return on success (Role)
<xml>
 <result>SUCCESS</result>
 <id>Same as key1</id>
 <orgid>Key1 of organization</orgid>
 <rolename>Name of role</rolename>
 <addrestricted>Y if this role is restricted to which entities it may add</addrestricted>
 <interfrestricted>Y if this role is restricted to which screens it may access</interfrestricted>
 <entrestricted>Y if this role is restricted to which entities it may see in it's organization</entrestricted>
 <globl>e.g. Y</globl>
 <deleted>Y if deleted</deleted>
 <startpage>First screen after login, or null for overview screen</startpage>
 <pagrestricted>Y if restricted to which pages this role may access</pagrestricted>
 <smsdelay>e.g. 30</smsdelay>
 <emaildelay>e.g. 30</emaildelay>
 <smsdaystart>e.g. 7</smsdaystart>
 <emaildaystart>e.g. 0</emaildaystart>
 <smsdayend>e.g. 20</smsdayend>
 <emaildayend>e.g. 24</emaildayend>
 <smslimit>e.g. 10</smslimit>
 <emaillimit>e.g. 10</emaillimit>
 <smsatnight>Y if SMSes are to be sent at night</smsatnight>
 <emailatnight>Y if emails are to be sent at night</emailatnight>
 <custommenu>Customer Menu eid</custommenu>
 <smsparms>CommunitySMS login details or name of SMS connector</smsparms>
 <pwdregexp>Password expiry e.g. .*</pwdregexp>
 <pwddays>Password expiry e.g. 40000</pwddays>
 <pwdgracedays>Password expiry e.g. 0</pwdgracedays>
 <pwddescr>Password expiry e.g. Please specify a valid password</pwddescr>
 <lid>Ledger to charge for SMSes.</lid>
 <price>Price per SMS e.g. 0</price>
 <freesmspermonth>Number of free SMSs per month. e.g. 0</freesmspermonth>
</xml>
Return on success (Meter Account Group)
<xml>
 <result>SUCCESS</result>
 <roles>
  <role>
   <id>ID of Role</id>
   <descr>Descript of Role</descr>
   <tenant>Y if this role is under a tenant (as opposed to being a main incomer)</tenant>
  </role>
  ...more roles
 </roles>
 <meter_accounts>
  <meter_account>
   <id>entity id of meter account</id>
   <meter_account_id>id of meter account</meter_account_id>
   <multiplier>1</multiplier>
   <roleid>role of this account</roleid>
  </meter_account>
  ...more accounts
 </meter_accounts>
</xml>
Return on failure<xml><result>ERROR:error message</result></xml>
Examplehttps://adam.pnpscada.com:441/getEntityDetails.jsp?LOGIN=subdomain.testme&PWD=testme&key1=88501326

getAllMeterEntities.jsp

Gets a list of all meters in this account
none
Return on success
<xml>
 <result>SUCCESS</result>
 <len>Number of entities returned</len>
 <entities>
 <entity>
 <id>eid of the meter</id>
 <cid>id of the meter's class</cid>
 <key1>The meter's serial</key1>
 </entity>
 more meters...
 </entities>
</xml>
Return on failure<xml><result>ERROR:error message</result></xml>

getTOUInfo.jsp

eidentity id of calendar. This is not the same as the calendar id. (can also specify key1, key2 or key3)
fromthis is the FROM date and time for the TOU dump
tothis is the TO date and time for the TOU dump
doallpass true in here to get all the TOUIDs in this calendar per period, otherwise it returns the first one found. This is relevant e.g. in the case where the TOUID of the period without season also exists. The season specific TOUID would be the one returned by default (always the smaller one).
Return on success
<xml>
 <result>SUCCESS</result>
 <id>The key1 of the calendar (id)</id>
 <name>The key2 of the calendar</name>
 <certified>Has this calendar been certified, i.e. populated correctly in the database? Y/N</certified>
 <certifiedby>Indication of who certified it</certifiedby>
 <certifiedfrom>from when is the calendar valid</certifiedfrom>
 <certifiedto>until when is the calendar valid</certifiedto>
 <certifiedon>when was it certified?</certifiedon>
 <timezone>Time Zone of the calendar</timezone>
 <ignoredst>Should daylight savings time - if applicable to the time zone - be ignored?</ignoredst>
 <periods>
  <li>
   <ts>time stamp of period in calendar</ts>
   <touid>Time of Use unique id for that period</touid>
  </li>
  ... next period in time range (li) ...
 </periods>
 <periodlen>amount of periods in the calendar for the selected time range</periodlen>
</xml>
Return on failure<xml><result>ERROR:error message</result></xml>

getVI.jsp

Gets meter phasors
Key3 (optional)
(Note: key names are case sensitive)
a comma delimited string of key3 IDs
startdateThe start date of the phasors (If omitted, defaults to the enddate - 24 hours)
enddateThe end date of the phasors in the form "YYYY-MM-DD HH:MM:SS". The "HH:MM:SS" part is optional
Key1 (optional)Filter on meter's Key1. (where % is the wild card, this must be URL-Encoded with %25, e.g. Key1=%25loc%25)
Key2 (optional)Filter on meter's Key2
pk1 (optional)Filter on an ancestor's Key1, e.g. a SIM card number. SQL wildcards supported.
pk2 (optional)Filter on an ancestor's Key2, e.g. a phone number. SQL wildcards supported.
place (optional)Filter on meter's place
site (optional)Filter on meter's site
zone (optional)Filter on meter's zone
commissioned (optional) yes/no/all. Default is 'yes'. If yes, only considers meters where the commissioned flag in the Meter Details has been set on.e.g. commissioned=all
Return on success
<xml>
  <result>SUCCESS</result>
  <date>the last profile date</date>
  <meters>
    <meter>
      <cid>Class ID</cid>
      <primary>if primary metering "Y", else "N"</primary>
      <serial>Meter's serial</serial>
      <key2>Meter's user defined name</key2>
      <key3>Meter's Key3 (which may be null)</key3>
      <Data>
       <TimeItem>
         <Time>hh:mm</Time>
         <Red>
            <I>current</I>
            <V>voltage</V>
            <Iangle>current angle</Iangle>
            <Vangle>voltage angle</Vangle>
         </Red>
         <White>
            <I>current</I>
            <V>voltage</V>
            <Iangle>current angle</Iangle>
            <Vangle>voltage angle</Vangle>
         </White>
         <Blue>
            <I>current</I>
            <V>voltage</V>
            <Iangle>current angle</Iangle>
            <Vangle>voltage angle</Vangle>
         </Blue>
       </TimeItem>
       ...next time item...
      </Data>
    </meter>
    ...next meter...
  </meters>
<xml>
Return on failure<xml><result>ERROR:error message</result></xml>
ExampleGet the phasor for multiple meters, during 2 dates.
e.g. https://adam.pnpscada.com:441/getVI.jsp?LOGIN=subdomain.testme&PWD=testme&commissioned=all&Key1=38900001&enddate=2010-09-15

metersonline.jsp

Gets number of meters online and offline
mag_idMeter Account Group's entity ID
Return on success
<xml>
  <result>SUCCESS</result>
  <meters_online>Number Of Meters Online since yesterday. Excluding Uncommissioned and manual meters.</meters_online>
  <meters_offline>Number Of Meters Offline</meters_offline>
</xml>
Return on failure<xml><result>ERROR:error message</result></xml>
ExampleGet number of meters online and offline
e.g. https://adam.pnpscada.com/metersonline.jsp?LOGIN=subdomain.testme&PWD=testme&mag_id=8738

bmsrtuEvents.jsp

Gets events for a specific BMSRTU
seriala comma separated list of serials of the BMSRTUs
startdateStart date of events
enddateEnd date of events
Return on success
<xml>
  <result>SUCCESS</result>
</xml>
Return on failure<xml><result>ERROR:error message</result></xml>
ExampleGet the time spent in bypass for each bmsrtu relay
e.g. https://adam.pnpscada.com/metersonline.jsp?LOGIN=subdomain.testme&PWD=testme&serial=3212&start=2014-01-01&end=2014-01-14

vsetInfo.jsp

Gets the meta information that makes up a specific instrumentation-profile
Inputeid: Entity ID
Inputkey1: First/System name (meter serial)
Inputkey2: Second/User name
Inputcid: Class ID
Inputphone: Phone number. See Note 2
Return on success
<xml>
  <result>SUCCESS</result>
  <meter>
    <serial>meter's serial e.g. ICP0000</serial>
    <id>meter's entity ID e.g. 4763</id>
    <vset>
      <id>instrumentation profile's ID e.g. 145</id>
      <cust_name>instrumentation profile's custom name in the context of this meter e.g. Heat</cust_name>
      <column>
        <id>first column in the instrumentation profile's ID e.g. 1203</id>
        <unit>unit of this column e.g. Celcius</unit>
        <description>standard description for this column e.g. Temperature Channel 0</description>
        <color>color on graph for this column in RRGGBB when converted to hex e.g. 16646144</color>
        <unitgraph>0=this value can not be graphed, 1=this value can be graphed</unitgraph>
        <custom_desc>custom description for this column in the context of this meter e.g. Cold</custom_desc>
      </column>
      more columns ...
    </vset>
    more vsets...
  </meter>
  more meters...
</xml>
Return on failure<xml><result>ERROR:error message</result></xml>
ExampleGet the description of an instrumentation profile set
e.g. https://adam.pnpscada.com:441/vsetInfo.jsp?LOGIN=subdomain.testme&PWD=testme&key1=ICP0000&cid=163&startdate=2012-08-14&enddate=2013-08-14

readVSet.jsp

Gets the instrumentation profile
Inputs
startdateThe oldest date from where to return profile values. See Note 3
enddateThe youngest date from where to return profile values. See Note 3
vsetID of the vset (see vsetInfo.jsp). Optional
registerThe name of the register to get e.g. 'Credit'. Optional
eidEntity ID
key1First/System name (meter serial)
key2Second/User name
cidClass ID
phonePhone number. See Note 2
Return on success
<xml>
<result>SUCCESS</result>
<meter>
  <serial>meter's serial e.g. ICP0000</serial>
  <id>meter's entity ID e.g. 4763</id>
  <vset>
    <date>date and time of the reading e.g. 2012-08-14 00:05:00</date>
    <val>value of the reading e.g. 26.46</val>
    <id>vset column id (see vsetInfo.jsp) e.g. 1205</id>
  </vset>
  next columns and dates...
</meter>
</xml>
Return on failure<xml><result>ERROR:error message</result></xml>
ExampleGet the instrumentation profile
e.g. https://adam.pnpscada.com:441/readVSet.jsp?LOGIN=subdomain.testme&PWD=testme&key1=ICP0000&cid=163&vset=145&startdate=2012-08-15&enddate=2013-08-14

getLedger.jsp

Gets information about a ledger
Inputs
quickbalance(optional) only for DirectDeposit Payment facility enabled Ledgers, if you want a super quick balance web call, pass in your account reference, e.g. WDERAQHN. Returns in 100/ths of the currency, e.g. cents. By the way, you do not currently need to pass in a login and password to access this function.
cellphonemust specify, only if quickbalance is specified
startdate(not used if quickbalance was specified) The oldest date from where to return transactions. See Note 3
enddate(not used if quickbalance was specified)The youngest date from where to return transactions. See Note 3
eidEntity ID (ledger or meter or meter account). Only one of this and the following parameters need to be specified, in order to uniquely identify the ledger:
key1First/System name (ledger id) (this can also be the meter serial number)
key2Second/Ledger name
ANUMBERMeter Account Account Number (the configured account number in Edit Meter Account)
SerialThe associated meter serial number
pay(optional, use with payment) true - use this to do a payment
amt(required with payment) the amount to pay in, e.g. 50.00 for R50, for example
tpe(required with payment) R for Receipt, I for Invoice
desc(required with payment) Description of transaction
RequestIDoptional, for getting a list of transaction or specifying a payment. Guard against duplicates
Return on success
if quickbalance was specified:
<xml>
  <result>SUCCESS</result>
  <currentbalance>10000</currentbalance>
</xml>

normally:
  <xml>
  <result>SUCCESS</result>
  <eid>Entity ID of Ledger</eid>
  <key1>key1 of Ledger</key1>
  <key2>user defined name of Ledger</key2>
  <odate>Opening Date of Ledger</odate>
  <obal>Opening balance of Ledger</obal>
  <obalRAW>Opening balance of Ledger without formatting</obalRAW>
  <action>None</action>
  <cbal>Current Balance</cbal>
  <cbalRAW>Current Balance without formatting</cbalRAW>
  <hasprepaid>true if linked to a prepaid facility, false otherwise</hasprepaid>

when buying an STS token / garnish orders / debit orders:
<garnish>
	<gamtRAW>Garnish amount without formatting</gamtRAW>
	<gamt>Garnish amount</gamt>
</garnish>
<debit>
	<damtRAW>Debit amount without formatting</damtRAW>
	<damt>Debit amount</damt>
</debit>
<tokentrn>
  <tamtRAW>Token cost without formatting</tamtRAW>
  <tamt>Token cost</tamt>
  <token>20 digit token</token>
  <tdescr>transaction description</tdescr>
</tokentrn>

per prepaid facility:
  <prepaidfacility>
    <eid>Entity ID of n-th Prepaid Facility linked to ledger</eid>
    <key1>key1 of Prepaid Facility</key1>
    <key2>User defined name of Prepaid Facility</key2>
  </prepaidfacility>
  <breaker>
    <eid>Entity ID of Breaker linked to previous Prepaid Facility</eid>
    <key1>key1 of Breaker</key1>
    <key2>User defined name of Breaker</key2>
    <state>Current state, (Switched on/Switched off)</state>
    <date>Date of last state change</date>
  </breaker>
  <meteraccount>
    <eid>Entity ID of Meter Account linked to previous Prepaid Facility</eid>
    <key1>key1 of Meter Account</key1>
    <key2>User defined name of Meter Account</key2>
  </meteraccount>
  <tariff>
    <eid>Entity ID of default Tariff linked to previous Meter Account</eid>
    <key1>key1 of tariff</key1>
    <key2>User defined tariff name</key2>
  </tariff>
  ... (more [prepaid facility,breaker,meteraccount,tariff] - combos, if any)

  <hastrans>true if there are transactions returned in this request, false if there are no transactions returned in this request (dependant on start and end date)</hastrans>

if transactions available:
  <transactions>
    <partialtrans>true if transactions from the begging is returned, false if the first transaction in not returned</partialtrans>
    <startdate>Start date and time of transactions returned</startdate>
    <enddate>End date and time of transaction returned</enddate>
    <obal>Opening Balance at start date</obal>
    <obalRAW>Opening Balance without formatting</obalRAW>
    <cbal>Current balance as end date</cbal>
    <cbalRAW>Current balance without formatting</cbalRAW>
    <transactionlog>

per transaction:
      <transaction>
        <num>Sequence number of the transaction (starts from 0 per ledger)</num>
        <tdate>Date of transaction</tdate>
        <amt>Unformatted amount of transaction</amt>
        <descr>Description of transaction (text filled in by user or billing engine)</descr>
        <tpe>C=Credit Note ; D=Debit Note ; R=Receipt ; I=Invoice</tpe>
      </transaction>
      ... (more transactions if available)

    </transactionlog>
  </transactions>
</xml>
Return on failure<xml><result>ERROR:error message</result></xml>
ExampleGet the ledger state and transactions from 2015-05-01 to 2015-05-23 for ledger with eid 577
e.g. https://adam.pnpscada.com:441/getLedger.jsp?LOGIN=subdomain.testme&PWD=testme&eid=577&startdate=2015-05-01&enddate=2015-05-23

getMeterAccountNumbers.jsp

description...
ANUMBEROptional. Find meter account by account number
CNUMBEROptional. Find meter account by automatically assigned number
LNUMBEROptional. Find meter account by lot number
STANDNUMBEROptional. Find meter account by stand number
REGIONOptional. Find meter account by region number
Return on success
<xml>
 <result>SUCCESS</result>
 <id>eid of the meter account</id>
 <cnumber>Automatically assigned unique Meter Account ID</cnumber>
 <cname>Account Name</cname>
 <anumber>Account Number</anumber>
 <lnumbernme>Name for Lot Number (defaults to Lot Number)</lnumbernme>
 <lnumber>Lot Number</lnumber>
 <standnumbernme>Name for Stand Number (defaults to Stand Number)</standnumbernme>
 <standnumber>Stand Number</standnumber>
 <regionnme>Name for region (defaults to Region)</regionnme>
 <region>Region</region>
 <tariffs>
  <tariff>
  <eid>Entity ID of Tariff</eid>
  <option>0 for default tariff, used for billing, the others are used for recons and comparisons</option>
  <tariffcode>Tariff Code</tariffcode>
  <tariffname>Tariff Name</tariffname>
  </tariff>
  .. more tariffs
 </tariffs>
 <meters>
  <meter>
  <eid>Entity ID of Meter</eid>
  <serial>Meter's Serial</serial>
  <portion>Portion to which this meter contributes to this meter account's usage</portion>
  </meter>
  ...more meters
 </meters>
</xml>
Return on failure<xml><result>ERROR:error message</result></xml>

getMetersProfiles.jsp

description...
none
Return on success
<xml>
 <result>SUCCESS</result>
 <len>Number of entities returned</len>
 <entities>
 <entity>
 <id>eid of the meter</id>
 <cid>id of the meter's class</cid>
 <key1>The meter's serial</key1>
 </entity>
 more meters...
 </entities>
</xml>
Return on failure<xml><result>ERROR:error message</result></xml>

getNewProfile2.jsp

description...
none
Return on success
<xml>
 <result>SUCCESS</result>
 <len>Number of entities returned</len>
 <entities>
 <entity>
 <id>eid of the meter</id>
 <cid>id of the meter's class</cid>
 <key1>The meter's serial</key1>
 </entity>
 more meters...
 </entities>
</xml>
Return on failure<xml><result>ERROR:error message</result></xml>

insertCalibrationEvent.jsp

description...
none
Return on success
<xml>
 <result>SUCCESS</result>
 <len>Number of entities returned</len>
 <entities>
 <entity>
 <id>eid of the meter</id>
 <cid>id of the meter's class</cid>
 <key1>The meter's serial</key1>
 </entity>
 more meters...
 </entities>
</xml>
Return on failure<xml><result>ERROR:error message</result></xml>

mdusCreateReading.jsp

description...
none
Return on success
<xml>
 <result>SUCCESS</result>
 <len>Number of entities returned</len>
 <entities>
 <entity>
 <id>eid of the meter</id>
 <cid>id of the meter's class</cid>
 <key1>The meter's serial</key1>
 </entity>
 more meters...
 </entities>
</xml>
Return on failure<xml><result>ERROR:error message</result></xml>

getMeterEvents.jsp

Gets all events for a specific meter between 2 dates.
Note that because events are ranges in themself, the start end date range you specify will return any events that span even the littlest range of what you have specified.
PNPSCADA Events Documentation
Inputstartdate:The oldest date from where to return events. See Note 3
Inputenddate:The youngest date from where to return events. See Note 3
Inputsince:The last time you asked for events. Return events read since this date. This overrides start/enddate
Inputeid: Entity ID
Inputkey1: First/System name
Inputkey2: Second/User name
Inputeclassid: (optional) Event Category id
Inputdshort: (optional) Display short event description if specified
Inputdlong: (optional) Display long event description if specified
Inputdclasss: (optional) Display short event class description if specified
Inputdclassl: (optional) Display long event class description if specified
Return on success
<xml>
  <result>SUCCESS</result>
  <meter>
    <serial>Meter's Serial</serial>
    <name>Meter's Name</name>
    <events>
      <event>
        <result>SUCCESS</result>
        <class_id>Event Class ID</class_id>
        <event_id>Event Type ID</event_id>
        <phase>A/B/C or Space for all or n/a</phase>
        <start_date>Event Start Date</start_date>
        <end_date>Event End Date</end_date>
        <value>Additional values or comments logged with the event</value>
        <reservation>N for no reservation, Y if there was a reservation logged against this event</reservation>
        <validated>N if the event has still not been cleared for billing purposes, Y if the event has been cleared</validated>
        <fault_id>ID of fault reservation</fault_id>
        <read_at>Time this event was read from the meter</read_at>
      </event>
      ...next event
    </events>
  </meter>
</xml>
Return on failure<xml><result>ERROR:error message</result></xml>
ExampleGet events for meter with serial 19535358 between since 2015-03-01
http://adam.pnpscada.com:8080/getMeterEvents.jsp?LOGIN=subdomain.testme&PWD=testme&key1=19535358&since=2015-03-01

eventTypes.jsp

Gets all events for a specific meter between 2 dates.
Note that because events are ranges in themself, the start end date range you specify will return any events that span even the littlest range of what you have specified.
For this reason it is advised that you use the event type,start date,end date and meter serial to detect duplicates returned.
PNPSCADA Events Documentation
Inputnone
Return on success
<xml>
  <result>SUCCESS</result>
  <types>
    <type>
      <id>Event Type ID</id>
      <class>Class ID</class>
      <desc>Description of event</desc>
      <short_desc>Short code for event</short_desc>
      <istimespan>Y for events that spans a time range, like power loss, N for events that are instantaneous like reprogram</istimespan>
      <isexternal>Y for events that do not come from the meter, like software or user logged events, N for events that come from the meter</isexternal>
      <invalidates>Y if it causes the meter's data to become invalid for billing purposes, N otherwise</invalidates>
    </type>
  </types>
  <classes>
    <class>
      <id>Class ID</id>
      <desc>Description of class</desc>
      <short_desc>Short code for class</short_desc>
    </class>
  </classes>
</xml>
Return on failure<xml><result>ERROR:error message</result></xml>
ExampleGet event types
http://adam.pnpscada.com:8080/eventTypes.jsp

sendSTSCode.jsp

Send an STS code to a smart STS prepaid meter.
Inputeid:entity ID of meter (can also alternatively specify the serial number with key1)
Inputkey1:serial number of meter (can also alternatively specify the entity id with eid)
Inputsts20 digit STS code to send to meter (optional. empty if you just want to see the return of the last_attempt)
Inputretry:if sending an STS code failed (as opposed when sending STS code successfully but the meter rejects it), schedule a retry
Return on success
<xml>
  <result>SUCCESS:success message</result>
  <retry>no</retry>
  <last_attempt>
    <date>Date of last token sent or none if there was no previous switch</date>
    <result>SUCCESS:success message or ERROR:error message</result>
    <retry>yes/no</retry>
  </last_attempt>
</xml>
Return on failure
<xml>
  <result>ERROR:error message</result>
  <retry>yes/no</retry>
  <last_attempt>
    <date>Date of last token sent or none if there was no previous switch</date>
    <result>SUCCESS:success message or ERROR:error message</result>
    <retry>yes/no</retry>
  </last_attempt>
</xml>
ExampleSend STS code 12345678901234567890 to meter with serial number 88088238
http://adam.pnpscada.com:8080/sendSTSCode.jsp?LOGIN=subdomain.testme&PWD=testme&key1=88088238&sts=12345678901234567890&retry=yes

switchBreaker.jsp

Switch a breaker
Inputeid:ID of breaker (required)
Inputaction:on/off/none, if omitted, defaults to none
Inputretry:if a switch failed, schedule a retry
Return on success
<xml>
  <result>SUCCESS</result>
    <action>on/off</action>
    <last_state>
      <date>Date of last switch or none if there was no previous switch</date>
    <state>Switched on/off or none if there was no previous switch</state>
  </last_state>
</xml>
Return on failure (no retry)<xml><result>ERROR:error message</result><msg>Not retrying</msg></xml>
Return on failure (retry)<xml><result>ERROR:error message</result><msg>Switching Attempt Failed. Task scheduled to switch breaker on/off</msg></xml>
ExampleSwitch on breaker with ID 43293
http://adam.pnpscada.com:8080/switchBreaker.jsp?LOGIN=subdomain.testme&PWD=testme&eid=43293&action=on

getMeterAccount.jsp

Gets entity IDs of all calendars, tariffs, communication devices, SIM cards, and meters connected to the meter account.
These IDs can then be given to getEntitiesDetails.jsp to get specifics of each.
Inputeids:Comma separated list of entity IDs of meter accounts. If omitted, returns all visible meter accounts
Return on success
<xml>
  <result>SUCCESS</result>
  <meter_account>
    <id>ID of meter account</id>
    <tariff>
    <id>ID of tariff</id>
      <calendar_id>ID of Calendar (if any)</calendar_id>
    </tariff>
    more tariffs...
    <meter>
      <id>ID of meter</id>
      <comms_dev>
        <id>ID of Communication Device</id>
        <sim_id>ID of SIM card (if any)</sim_id>
      </comms_dev>
      <breaker_id>ID of breaker</breaker_id>
      more breakers...
    </meter>
    more meters...
    <prepaid_facility>
      <id>ID of Prepaid Facility</id>
      <ledger_id>ID of Ledger</ledger_id>
      <breaker_id>ID of Breaker (could be connected to a different breaker than what is on the meter)</breaker_id>
    </prepaid_facility>
    more prepaid facilities...
  </meter_account>
  ... more meter accounts if specified
</xml>
Return on failure<xml><result>ERROR:error message</result><msg>Reason for failure</msg></xml>
ExampleGet all entities linked to Meter Accounts with entity IDs 9904 and 7512
http://adam.pnpscada.com:8080/getMeterAccount.jsp?LOGIN=subdomain.testme&PWD=testme&eids=9904,7512

putProfile.jsp

Put profile of a meter
Input setbackmaxdateset to y if you want to overwrite samples that is already there (or omit this value if you dont want to overwrite)
Input xml
<xml>
<meter>
  <serial>Meter's serial</serial>
  <profile>
    <sample>
      <date>End Date of this sample in the format: yyyy-MM-dd HH:mm. Profiles MUST be given in ascending order. Profile dated before last reading will be discarded</date>
      <P1>Active import (kWh). Does not count up. With secondary metering this is the value after the multiplier</P1>
      <P2>Reactive energy register quadrant 1 (kvarh). Does not count up.</P2>
      <Q1>Active export (kWh). With secondary metering this is the value after the multiplier</Q1>
      <Q2>Reactive energy register quadrant 2 (kvarh)</Q2>
      <Q3>Reactive energy register quadrant 3 (kvarh)</Q3>
      <Q4>Reactive energy register quadrant 4 (kvarh)</Q4>
      <STATUS>See note 4</STATUS>
    </sample>
    more samples...
  </profile>
</meter>
more meters...
</xml>
  
Return on success
<xml>
  <meter>
    <serial>Meter Serial</serial>
    <last_imported_date>Last imported date</last_imported_date>
    <max_date>Date meter is up to date to</max_date>
   [if there were errors:
    <errors>
      <error>Error 1</error>
      more errors...
    </errors>]
  </meter>
</xml>
Return on failure<xml><result>ERROR:error message</result><msg>Reason for failure</msg></xml>
ExamplePut reading for meter 111111178
curl --data "LOGIN=subdomain.testme&PWD=testme&xml=<xml><meter><serial>111111178</serial><profile><sample><date>2016-06-17 12:00</date><P1>1</P1><P2>2</P2><Q1>3</Q1><Q2>4</Q2><Q3>5</Q3><Q4>6</Q4><STATUS>0</STATUS></sample></profile></meter></xml>" http://adam.pnpscada.com:8080/putProfile.jsp

putTotals.jsp

Put totals of a meter
Input setbackmaxdateset to y if you want to overwrite samples that is already there (or omit this value if you dont want to overwrite)
Input xml
<xml>
<meter>
  <serial>Meter's serial</serial>
  <total>
    <sample>
      <date>End Date of this sample in the format: yyyy-MM-dd HH:mm. Totals MUST be given in ascending order. Totals dated before last reading will be discarded</date>
      <E1>Active import (kWh). Does not count up. With secondary metering this is the value before the multiplier</E1>
      <E2>Reactive energy register quadrant 1 (kvarh). Does not count up.</E2>
      <F1>Active export (kWh). With secondary metering this is the value before the multiplier</F1>
      <F2>Reactive energy register quadrant 2 (kvarh)</F2>
      <F3>Reactive energy register quadrant 3 (kvarh)</F3>
      <F4>Reactive energy register quadrant 4 (kvarh)</F4>
      <STATUS>See note 4</STATUS>
    </sample>
    more samples...
  </total>
</meter>
more meters...
</xml>
  
Return on success
<xml>
  <meter>
    <serial>Meter Serial</serial>
    <last_imported_date>Last imported date</last_imported_date>
    <max_date>Date meter is up to date to</max_date>
   [if there were errors:
    <errors>
      <error>Error 1</error>
      more errors...
    </errors>]
  </meter>
</xml>
Return on failure<xml><result>ERROR:error message</result><msg>Reason for failure</msg></xml>
ExamplePut total for meter 111111178
curl --data "LOGIN=subdomain.testme&PWD=testme&xml=<xml><meter><serial>111111178</serial><totals><sample><date>2016-06-17 12:00</date><E1>1</E1><E2>2</E2><F1>3</F1><F2>4</F2><F3>5</F3><F4>6</F4><STATUS>0</STATUS></sample></totals></meter></xml>" http://adam.pnpscada.com:8080/putTotals.jsp

putEvent.jsp

Put events of a meter
Input xml
<xml>
<meter>
  <serial>Meter's serial</serial>
  <events>
    <sample>
      <eventid>The id of the event. see: http://sdg.pnpscada.com/eventTypes.jsp</eventid>
      <startdate>Start date of event (optional if end date is specified and a previous "unclosed" event exists)</startdate>
      <enddate>End date of event (optional if start date is specified)</enddate>
      <value>Optional: Additional Text Information</value>
      <phase>Optional: Phase of the event: A, B or C</phase>
      <file name="file.jpg">Optional: file attachment in base64. If you want to attach an image to a meter reading, use eventid 685 (Manual Meter Read) and the start date and time must be exactly the same as the total</file>
    </sample>
    more samples...
  </events>
</meter>
more meters...
</xml>
  
Return on success
<xml>
  <meter>
    <serial>Meter Serial</serial>
   [if there were errors:
    <errors>
      <error>Error 1</error>
      more errors...
    </errors>]
  </meter>
  <events_processed>Number of events processed<events_processed>
</xml>
Return on failure<xml><result>ERROR:error message</result><msg>Reason for failure</msg></xml>
ExamplePut meter read event for meter 01234568 with image
curl --data "LOGIN=subdomain.testme&PWD=testme&xml=<xml><meter><serial>01234568</serial><events><sample><eventid>685</eventid><startdate>2018-02-14 13:00</startdate><file name=\"test.gif\">
R0lGODlhMgAyAPf/AACEvQCExghKcwhKewhShAhjnAiEvRA5UhBKcxBKexBScxBSexBShBBahBBajBBalBBjlBBjnBBrpRBzrRB7rRB7tRB7vRCEvRgxQhg5Shg5WhhCWhhKYxhKaxhKcxhScxhSexhahBhajBhjjBhjlBhrlBhrnBhrpRhzpRhzrRh
7rRh7tRiEtRiEvRiMvRiUvSExQiE5QiE5SiFCQiFCSiFCUiFSayFScyFSeyFaeyFahCFjjCFjlCFrjCFrlCFrnCFznCFzpSFzrSF7pSF7rSF7tSGErSGEtSGEvSGMtSGMvSGUvSlCSilCUilKWilSYylSaylaaylacylaeyljeyljhCljjClrjClrlC
lzlClznClzpSl7pSl7rSmErSmEtSmMtSmMvSmUvSmUximcxjFSWjFSYzFSazFaazFjezFjhDFrhDFrjDFzjDFzlDFznDF7nDF7pTGEpTGErTGEtTGMrTGMtTGUtTGUvTGcvTlaYzlaazljczljezlrhDlrjDlzjDlzlDl7lDl7nDl7pTmEpTmErTmMr
TmMtTmUtTmUvTmcvUJjc0Jre0JzhEJzjEJ7lEJ7nEKEnEKEpUKErUKMpUKMrUKMtUKUrUKUtUKctUKcvUKlxkKlzkKtzkpzhEp7hEp7jEp7lEqElEqEnEqMpUqMrUqUrUqUtUqctUqlvUqlxlKElFKEnFKMnFKMpVKUpVKUrVKcrVKctVKlvVKlxlK1
1lqMnFqMpVqUpVqUrVqcrVqctVqltVqlvVqtxlq91mOUpWOUrWOcpWOcrWOctWOltWOlvWOtxmO1zmO11mO91mO93mucpWucrWuctWultWulvWutxmu1xmu1znOlrXOltXOttXOtvXOtxnO1xnO1znuttXutvXu1xnvG3oStvYTG1oTG3oTO3oTO54y
9zozG1ozG3ozO3ozO55S9xpS9zpTO3pzG1pzO3pzW55ze76XGzqXO1qXW3qXe563O1q3O3q3W3q3W57XW1rXW57Xe573W3r3e58be55CYqCH5BAkKAP8ALAAAAAAyADIAQAj+AP8JHEiwoMGDCBMqXMjQYD113ZwJyxXKTIyGDc1Nm5XpUCA2g0z5On
aMlyxTkdBgwDiQmScxLlgoOZKEJpgvN8HM8aJFCxYrVaywceMm0CBClk5FUsMSIwIHJlIUOQImTBgwdrDa2Yqo66FMHd1AaUr24AcQO7R02bpJVS1EhazYKEu3rl268ZrdXVguW69YpPw0emVMlyiLdtElW4Vn69Y6Xi0h+mopEyZTp05N8vPkLgIGE
E4QOUKa9BecWLVuPZSIdeVMqCwNkrJ3IQgQIUwI8QJGNddEmhIZujK3tt0POq5sifMmh/Hn0DE+tHaLEZPoCdV5K+xK1CtXjZj+oMEu0Jw0Wagm/fEDiNSxctFe9Wni5Lm4ZKoUIUo02ZIlTJdchklmsUACRX11obNMJ2IkkURvvWXlGGSTTXaJf5T4
N4kaY5HFwAMRqMBCC0eYQIIII5BQwg9BbMFFF3PMYQeFXl2CSmyDpFFbAg2QgMJUSoAhRoRa1WEHa4dMBlYmlghCW3QNeJBbEEfg5JgdiNxx5H5gGSIWeQWBsMAIP3TxxVZ4JKKIKpsId0UHYCrkAQhYbOGFjIjEUcUNcWKkwwc53ABnn4QWaihBDwW
zx0WHDvRQRLl84kQTjd4DDjfF6JJLLq3wwWih62hjDGCPiAJLLo84cV2f5vh1Cin+6z0yCzi8kMKHDHGa5wsqlQTiRyCl8OINfLCkSgN25lCTSiZwvYHUgJdlZkopacjQh33JaKIIV5Dxl0hl/yVlCUpP3jWOMpzgAaFqrO33FWWYYJKUKYGMRxcwDM
6kxBdJoObbZHYYUggcbrDBxhptTGIJIFGQJcEEKYwoE4lIHEHEDz/soLEPWPjQUxxxyGHIIYdUJi8gHTa1AGgniJiCCTAHQUQXXqDmWIWufZUKr2ykXNZnoa1AkxJJhPGglVdiOVkimWiCySQ91/aZj6NVBaGEjy39FViFcPhcCAiIUEIQRfSmLtZGt
tv0JV2X+1wDCYygG05hNHZlkkwfMkhJFX2C8AGZZmJ1B393LInIIFMYOucIQJi5VSKb1KLJIW8k3uicPagFWZuUu90ooD68MUcdh2TBZ6MGIXcFFjoUh7pBOXDwOkYBAQA7</file></sample></events></meter></xml>" http://adam.pnpscada.com:8080/putEvent.jsp

putInstrProf.jsp

Put instrumentation profile of a meter
Input xml
<xml>
<meter>
  <serial>Meter's serial</serial>
  <instprof>
    <set>                           (instumentation profile sets are identified by the channels)
      <period>The period of the set in milliseconds. e.g. 1800000 for half hour. Use 0 for irregular intervals</period>
      <billing>Y if these values are used for billing (such as TOU off-peak register), N otherwise</billing>
      <channel>
        <name>name of this channel e.g. Voltage A</name>
        <phase>A,B,C or a space for all or not applicable</phase>
        <unit>unit of measurement e.g. kW,kvarh,kVA,m3,m³,DegC or °C</unit>
      </channel>
      more channels...
    </set>
    <sample>
      <date>Date of this sample in the format: yyyy-MM-dd HH:mm:ss.SSS e.g. 2019-02-22 10:57:43.000 Profile must be given in ascending order.</date>
      <channel>Channel value, numeric value. e.g. 23.01 If a channel does not have a value for this time, please leave empty</channel>
      more channels...              (channels must be given in the same order as in the set.)
    </sample>
    more samples...
  </instprof>
</meter>
more meters...
</xml>
Return on failure<xml><result>ERROR:error message</result><msg>Reason for failure</msg></xml>
ExamplePut instrumentation profile for meter
curl --data "LOGIN=subdomain.testme&PWD=testme&xml=<xml>
<meter>
  <serial>91129004</serial>
  <instprof>
    <set>
      <period>0</period>
      <billing>N</billing>
      <channel>
        <name>Temp1</name>
        <phase> </phase>
        <unit>DegC</unit>
      </channel>
      <channel>
        <name>Temp2</name>
        <phase> </phase>
        <unit>DegC</unit>
      </channel>
    </set>
  </instprof>
  <sample><date>2019-02-22 11:41:10.000</date><value>40.0</value><value>25.1</value></sample>
  <sample><date>2019-02-22 12:41:10.000</date><value>41.0</value><value>27.1</value></sample>
</meter></xml>" http://adam.pnpscada.com:8080/putInstrProfile.jsp

billexport.jsp

Bill export as CSV
Input BILLThe bill run ID
Input isallall
Input detailhigh/low
Return on success
<csv>
</csv>
Return on failure
ExampleBill export of all customers for bill run id 2126203
curl --data "LOGIN=subdomain.testme&PWD=testme&BILL=2126203&isall=all&detail=high" http://adam.pnpscada.com:8080/billexport.jsp

billAnalysissummary.jsp

Bill Analysis Summary Report
Input bridThe bill run ID
Input CSV1
Return on success
<csv>
</csv>
Return on failure
ExampleSummary for bill run id 2126203
curl --data "LOGIN=subdomain.testme&PWD=testme&brid=2126203&CSV=1" http://adam.pnpscada.com:8080/billexport.jsp

kocosConn.jsp

Get KoCoS and BOL modem connection status
Return on success
<xml>
<communication>
<sim>SIM number</sim>
<modem_connected>modem connected date and time. e.g. 2017-02-03 08:32:09.554</modem_connected>
<last_read_attempt>last read attempt. e.g.2017-02-03 03:29:14.712</last_read_attempt>
<last_read_success>last successful read. e.g.2017-02-03 03:29:14.712</last_read_success>
</communication>
</xml>
Return on failure
<xml>
<result>ERROR:reason</result>
</xml>
  
Example http://adam.pnpscada.com:8080/kocosConn.jsp?LOGIN=testme.testme&PWD=testme

getBillruns.jsp

Gets all bills that was run for this login
Return on success
<xml>
<billrun>
<brid>Bill Run ID of first bill</brid>
<start>Bill Run Start Date of first bill</start>
<end>Bill Run End Date of first bill</end>
</billrun>
...more bill runs...
<result>SUCCESS</result>
</xml>
Return on failure
<xml>
<result>ERROR:reason</result>
</xml>
  
ExampleGet bill runs
http://adam.pnpscada.com:8080/getBillruns.jsp?LOGIN=testme.testme&PWD=testme

problemMeterList.jsp

All meters with problems
ReturnCSV with the following columns:
Meter SerialSerial of metere.g. 63901154
Meter NameName of metere.g. Battery Cabinet Floor 1
Meter TypeType of metere.g. Elster AS230
Data In Up ToThe Date and Time up to which there is data for the metere.g. 2017-03-20 11:30:00
Non-Zero Up ToThe Date and Time of the last non-zero datae.g. 2017-03-20 11:30:00
Non-Interpolated Up ToThe Date and Time of the last actual data from the meter (or manual entries)e.g. 2017-03-20 11:30:00
Installed AtThe Date and Time of the meter was installede.g.
Last TotalLast total (E1)e.g. 6045
Last Total AtDate of last totale.g. '2017-01-07 04:00:00.000
Meter Account NameComma Separated List of Meter Accounts linked to this metere.g.
Meter SiteFreeform address-type fielde.g. Mandela Square
Meter ZoneFreeform address-type fielde.g. Kiosk 14
Meter PlaceFreeform address-type fielde.g. Rand park Ridge
ConnectionConnection string to communication device, like IP:Port, Cell Phone Number or HTTP Addresse.g. +27635543670
Connection TypeConnection code: GPRSTC65 - TC65 Modem
GPRSSMAR - Smartee/Smartoo/Smartone
GPRSKOCOS - Kocos Modem
GPRSIPT - IPT Modems
HEXING - Hexing Concentrator
HOLLEY - Holley Concentrator
HEXINGDLMS - Hexing Concentrator (DLMS Type)
TCPS - Etherpad Active
TCPC - Passive
GPRSAPN - Generic Modem Passive
GPRSMAESTRO - Generic Modem Active
CSD - Generic CSD Modem
TCPCA - Etherpad Active Always Connected
GPRSLG - Generic Modem Active Always Connected
TCPSA - Etherpad Passive Always Connected
GPRSMAESTROA - Generic Modem Passive Always Connected
INHE - INHE Concentrator
WASION - Wasion Concentrator
GPRSWGM - Wasion Modem
SYM2 - SYM2 Concentrator
Note that most modems can be loaded as their own type or generic (like KoCoS can be added as Generic Modem)
e.g. GPRSTC65
Connection NameName of communication devicee.g. Lion Mill D Cooler
RTUUnique identifier for connection, like SIM no./IP:Porte.g. 89064900000002923978
ResponsibleIf there is an uncleared faultlog against this meter, this is the faultlog's person responsible or No one if nonee.g. No one
FindingIf there is an uncleared faultlog against this meter, this is the faultlog's finding or None yet if nonee.g. None yet
SchedulingHow often meter is read by AMR system. monthly, weekly, daily or a number in minutese.g. daily
Time ZoneTime Zone of metere.g. Africa/Johannesburg
Sets Not ReadSpace separated list of sets not read. Profile/Totals/Events/Phasor/InstrumentationProfile/BillingRegisterse.g. Profile Totals Events
Problem SummaryShort description of probleme.g. Could not connect
DisabledY if meter is disabled, else Ne.g. Y
CommissionedY if meter is commissioned, else Ne.g. N
Problem TechnicalLong description of probleme.g. SDGInputElster:No data returned from meter
Problem StoryEven longer description of problem.e.g. It did connect to the modem/pad correctly, but the meter didn't answer at all. The meter could be off. Alternatively, the problem is probably the cable between the modem/pad and the meter. They could also be programmed at different baud rates. The easiest way to troubleshoot this is to first successfully talk from your notebook computer using the Meter Manufacturer's software (PMU) through the same serial cable that normally connects to the modem/etherpad. (You may need a normal 9-pin-female-to-9-pin-female laplink serial cable for this).
LatitudeLatitude of metere.g. -25.4
LongitudeLongitude of metere.g. 23.4
Height Above Sea LevelHeight Above Sea Level in meterse.g. 10
Follow-upIf there is an uncleared faultlog against this meter, this is the faultlog's follow up or null if nonee.g. null
Example http://adam.pnpscada.com:8080/problemMeterList.jsp?LOGIN=testme.testme&PWD=testme&AGO=0&iscsv=yes&commonly=false

realtime.jsp

Realtime values
Input key1Meter Serial
Input snumberMeter Serial
Input maxcacheageOptional. When present, result is in XML, else result is in JSON
ReturnXML result
<xml>
  <meter>Serial</meter>
  each value in it's own tag, meter dependant:
  <E1 - Accumulative Forward Active kWh
      F1 - Accumulative Forward Reactive kvarh
      E2 - Accumulative Reverse Active kWh
      F2 - Accumulative Reverse Capacitive kvarh
      F3 - Accumulative Reverse Inductive kvarh
      F4 - Accumulative Forward Inductive kvarh
      V1 - Volts Phase 1
      V2 - Volts Phase 2
      V3 - Volts Phase 3
      I1 - Currents Phase 1
      I2 -
      I3 -
      V1A -
      V2A -
      V3A -
      I1A -
      I2A -
      I3A -
      >
    <val>e.g. 114574.26369</val>
    <ts>e.g. 2011-04-14 17:11:01.036</ts>
  </E1>
  ... more values
</xml>
Example To get realtime values of a meter 58501425 in JSON:
http://adam.pnpscada.com:8080/realtime.jsp?LOGIN=testme.testme&PWD=testme&key1=58501425&snumber=58501425
To get realtime values of a meter 58501425 in XML:
http://adam.pnpscada.com:8080/realtime.jsp?LOGIN=testme.testme&PWD=testme&key1=58501425&snumber=58501425&maxcacheage=1

expandTOU.jsp

Give a list of all times during which a specific TOU ID applies
Input TOUThe TOU ID
Input startStart date and time required format: YYYY-MM-DD HH:mm
Input endEnd date and time required format: YYYY-MM-DD HH:mm
Return on success
<xml>
<tou>
<start>Start time the TOU ID becomes applicable</start>
<end>End time the TOU ID stops being applicable after the assiciated start time</end>
</tou>
...more TOU entries...
<result>SUCCESS</result>
</xml>
Return on failure
<xml>
<result>ERROR:reason</result>
</xml>
  
ExampleGet all applicable times for TOU ID 123456 from 2016-08-01 to 2016-09-01
http://adam.pnpscada.com:8080/expandTOU.jsp?LOGIN=testme.testme&PWD=testme&TOU=123456&start=2016-08-01 00:00&end=2016-09-01 00:00

stsDeliveryHistory.jsp

Gets STS meter delivery history
Key3 (optional)
(Note: key names are case sensitive)
a comma delimited string of key3 IDs
startdate (optional)The start date of the phasors (If omitted, defaults to the enddate - 24 hours)
enddate (optional)The end date of the phasors in the form "YYYY-MM-DD HH:MM:SS". The "HH:MM:SS" part is optional. If left out, defaults to now.
Key1 (optional)Filter on meter's Key1. (where % is the wild card, this must be URL-Encoded with %25, e.g. Key1=%25loc%25)
Key2 (optional)Filter on meter's Key2
pk1 (optional)Filter on an ancestor's Key1, e.g. a SIM card number. SQL wildcards supported.
pk2 (optional)Filter on an ancestor's Key2, e.g. a phone number. SQL wildcards supported.
place (optional)Filter on meter's place
site (optional)Filter on meter's site
zone (optional)Filter on meter's zone
token (optional)the token or partial token to restrict the search on
action (optional)see 'token'
commissioned (optional) yes/no/all. Default is 'yes'. If yes, only considers meters where the commissioned flag in the Meter Details has been set on.e.g. commissioned=all
Return on success
<xml>
  <result>SUCCESS</result>
  <attempts>
    <attempt>
      <meter>Meter's serial</meter>
      <action>Action, e.g. token number</action>
      <whoid>Individual ID of person or negative eid of entity responsible</whoid>
      <datetime>Date and Time of attempted action</datetime>
      <success>Only appears if success.</success>
      <error>Only appears if error, and describe the error</error>
    </attempt>
    ...next attempt...
  </attempts>
</xml>
Return on failure<xml><result>ERROR:error message</result></xml>
ExampleGet the sts delivery attempts for multiple meters, during 2 dates.
e.g. https://adam.pnpscada.com:441/stsDeliveryHistory.jsp?LOGIN=subdomain.testme&PWD=testme&commissioned=all&Key1=38900001&enddate=2010-09-15

serverId.jsp

Gets unique identifiers for a pnpscada server, if available
Return
<xml>
  <server>
    <name>Server's unique name</name>
    <id>Server's unique PNPSCADA server id</id>
    <mac>server's MAC address</mac>
  </server>
<xml>
ExampleGet the server ids of adam.
e.g. https://adam.pnpscada.com:441/serverId.jsp

reportComparableSavings.jsp

Comparable Savings Report
eidid of meter account group
startstart date of report e.g. 2017-06-09
startPrevstart date of comparable time e.g. 2016-06-09
ahstartAfter Hours start time e.g. 19:00
ahendAfter Hours end time e.g. 07:00
daysNumber of days for comparison e.g. 7
Return CSV
Start [start time] to [end time]
Start [comparable start] to [comparable end]
And the following columns:
-Code
-Name
-Total kWh Used
-Afterhours kWh Used
-% of Usage After Hours
-Total kWh Used
-Afterhours kWh Used
-% of Usage After Hours
-Total Usage Changed %
-Afterhours Usage Changed %
  
ExampleRun 2017-06-09 agains 2016-06-09 for a week for a Meter Account Group with id 1234
e.g. https://adam.pnpscada.com:441/reportComparableSavings.jsp?LOGIN=subdomain.testme&PWD=testme&eid=1234&start=2017-06-09&startPrev=2017-06-09&ahstart=19:00&ahend=07:00

reportProfile.jsp

Profile statistics for all Meter Accounts in a Mter Account Group.
eidid of meter account group
showTimeShow Column for when kVA happened (e.g. "on")
showComparableShows comparable time as separate row (e.g. "on")
compare_startTime when comparable range starts (e.g. 2016-07-01)
showAHShows After Hours as separate row (e.g. "on")
ahstartAfter Hours start time (e.g. 19:00)
ahendAfter Hours end time (e.g. 07:00)
csv2 different formats to output CSV. (e.g. 1 or 2)
bucketSizeTimes that are summated (e.g. hour,halfhour,day,week,month,year)
startStart time for report (e.g. 2017-07-01)
endEnd time for report (e.g. 2017-08-01)
P1Show this column (e.g. "on")
P2Show this column (e.g. "on")
Q1Show this column (e.g. "on")
Q2Show this column (e.g. "on")
Q3Show this column (e.g. "on")
Q4Show this column (e.g. "on")
SShow this column (e.g. "on")
countShow this column. This is the number of rows summated. (e.g. "on")
Return CSV (csv=1)
Has the following columns for each line:
name
Date of group 1 + P1 (if on)
Date of group 1 + P2 (if on)
Date of group 1 + Q1 (if on)
Date of group 1 + Q2 (if on)
Date of group 1 + Q3 (if on)
Date of group 1 + Q4 (if on)
Date of group 1 + S  (if on)
Date of group 1 + S time (if on)
...
Date of group n + P1 (if on)
Date of group n + P2 (if on)
Date of group n + Q1 (if on)
Date of group n + Q2 (if on)
Date of group n + Q3 (if on)
Date of group n + Q4 (if on)
Date of group n + S  (if on)
Date of group n + S time (if on)

If Comparable is switched on, contains another row, with Comparable in the name, and the same columns
If After Hours is switched on, contains another row, with After Hours in the name, and the same columns
  
Return CSV (csv=2)
Has the following columns for each line:
name
date
type
value

the previous table is written out in one column with many rows
  
ExampleRun 2017-01-01 to 2017-06-01, just consumption, summated monthly, for Meter Account Group with eid 1234
e.g. https://adam.pnpscada.com:441/reportProfile.jsp?LOGIN=subdomain.testme&PWD=testme&eid=1234&start=2017-01-01&end=2017-01-01&P1=on&csv=2

getLatestReadings.jsp

Get latest readings for all meters (has to be server administrator to call this)
Return
<xml>
  <result>SUCCESS</result>
  <meters>
    <meter>
      <snumber>Meter's serial</snumber>
      <date>Date and Time of reading</date>
      <E1>Reading in system units</rssi>
    </meter>
    ...next meter...
  </meters>
</xml>

Return on failure<xml><result>ERROR:error message</result></xml>
ExampleGet all signal logs.
e.g. https://adam.pnpscada.com:441/getLatestReadings.jsp?LOGIN=subdomain.testme&PWD=testme

getReadingsAt.jsp

Get readings for all meters (has to be server administrator to call this)
readdateCompulsory. format YYYY-MM-DD HH:MM:SS, but you can leave out the seconds or the time completely, which would default it to zero
Return
<xml>
  <result>SUCCESS</result>
  <meters>
    <meter>
      <snumber>Meter's serial</snumber>
      <err>meter specific Error code. Zero is success. -1 is meter not called in up to date. -2 is meter installed after date. -3 is Discrepancy. </err>
      <E1>Reading in system units</rssi>
    </meter>
    ...next meter...
  </meters>
</xml>

Return on failure<xml><result>ERROR:error message</result></xml>
ExampleGet all signal logs.
e.g. https://adam.pnpscada.com:441/getReadingsAt.jsp?LOGIN=subdomain.testme&PWD=testme&readdate=2001-09-11

getMeterConcentratorSignal.jsp

Get signal statistics for meters on concentrators.
meidsOptional. Meter entity ids
ceidsOptional. Concentrator ids
startOptional. From when (e.g. 2017-11-01)
endOptional. To when (e.g. 2017-11-20)
metersperconcentratorOptional. set to 'true' to get one line per meter per concentrator
permeterOptional. set to 'true' to get one line per meter
perconcentratorOptional. set to 'true' to get one line per concentrator
timefieldOptional. default is 'ts' which is the time the concentrator received the packet from the meter. Set to 'created' to look at the time that meter packet was first received from the concentrator into the server. Set to 'created2' to look at the last time that meter packet was received from the concentrator into the server.
Return
<xml>
  <result>SUCCESS</result>
  <recs>
    <rec>
      <meter>Meter's serial</meter>
      <conc>Concentrator serial</conc>
      <ts>Timestamp of signal sample</ts>
      <rssi>RSSI</rssi>
      <signal>Signal.</signal>
      <fail>Y/N usually N, except in case of some catastrophic failure</fail>
    </rec>
    ...next rec...
  </recs>
</xml>

or
<xml>
  <result>SUCCESS</result>
  <recs>
    <rec>
      <meter>Meter's serial</meter>
      <ts>Timestamp of latest packet for this meter</ts>
      <concentrators>[number of concentrators in which the meter was found]</concentrators>
      <count>[number of records for this meter]</count>
    </rec>
    ...next rec...
  </recs>
</xml>

or
<xml>
  <result>SUCCESS</result>
  <recs>
    <rec>
      <conc>Concentrator serial</conc>
      <ts>Timestamp of latest packet for this concentrator</ts>
      <meters>[number of meters found by this concentrator in the packets]</concentrators>
      <count>[number of records for this concentrator]</count>
    </rec>
    ...next rec...
  </recs>
</xml>
Return on failure<xml><result>ERROR:error message</result></xml>
ExampleGet all signal logs.
e.g. https://adam.pnpscada.com:441/getMeterConcentratorSignal.jsp?LOGIN=subdomain.testme&PWD=testme

location.jsp

Get/Set gps co-ordinates for physical objects.
eidSpecify the entity. Can use any of the alternative methods, e.g. key1 or key2 or key3
startOptional. From when (e.g. 2017-11-01) otherwise from the start of time
endOptional. To when (e.g. 2017-11-20) otherwise until the end of time
latOptional. Latitude in degrees as a floating point value. Will set a new location if both lat and lng are specified
lngOptional. Longitude in degrees as a floating point value. Will set a new location if both lat and lng are specified
haslOptional. Height above sea level to set. If not specified, assume 0m above sea level
proximityOptional. Proximity / Size / Accuracy of object location in meters (radius). If not specified, assume 1m radius, therefore 2m diameter.
ldateOptional. The time when the entity assumed this position (e.g. 2017-11-20). If not specified, assume Current Timestamp.
Return
<xml>
  <result>SUCCESS</result>
  <eid>Entity's id </eid>
  <loci>
    <location>
      <ldate>Date of location setting</ldate>
      <lat>Latitude in degrees as a floating point value </lat>
      <lng>Longitude in degrees as a floating point value </lng>
      <hasl>Height above sea level in meters </hasl>
      <proximity>Proximity / Size / Accuracy of object location in meters (radius) </proximity>
      <user_id> Entity ID of user login who set it </user_id>
    </location>
    ...next location...
  </loci>
</xml>
Return on failure<xml><result>ERROR:error message</result></xml>
ExampleGet all signal logs.
e.g. https://adam.pnpscada.com:441/getMeterConcentratorSignal.jsp?LOGIN=subdomain.testme&PWD=testme

Various Reports:

To access any various-report as a web service, just add the paremeters report=[name] and type=xml. Alternatively, you can also use type=csv.
e.g. http://adam.pnpscada.com:8080/reportVarious.jsp?LOGIN=subdomain.testme&PWD=testme&report=Login+Details&type=xml Access Denied. Please log in again