Consumer Information Interface
What is it?
The consumer information interface (an interoperable implementation of IEC 62056-7-5) is a hardware port (optical, serial, M-Bus, etc.), through which a meter periodically sends preselected data. The receiver of the data, which is connected to the port, can be any device running a SW application able to receive, interpret and process the data. The process by which a meter sends the data is called a Consumer Information Push (CIP).
What and when does a meter Push?
A meter can push any kind of data. In the meter, the push is controlled by an object called a Push Setup which has a push_object_list attribute, that simply lists all the attributes to push. The push_object_list is a configuration parameter of the meter that is usually set by the manufacturer. The push_object_list can reference values like energy, power, etc...
The push period is also a configuration parameter. It can be as short as a few seconds, or as long as days.
At the uppermost level, the meter (server) uses a DataNotification service to push data to the receiver (client). Our receiving application will have to extract and interpret the meaningful data out of the DataNotification service presented in xml form, like this:
<LongInvokeIdAndPriority Value="00000004" />
<DateTime Value="07E0021204133319FF800000" />
<DoubleLongUnsigned Value="00000000" />
<Integer Value="01" />
<Enum Value="1B" />
<LongUnsigned Value="0000" />
<Integer Value="FE" />
<Enum Value="21" />
The first member (LongInvokeIdAndPriority) is the ''serial number'' of the DataNotification.
The second member (DateTime) is the time-stamp of the Push (here 18/02/2016 19:51:25)
Finally, the third member (NotificationBody) contains the meaningful data. It is always a structure of so many elements as items in the Push Setup push_object_list. In our example there were 4 items in the list, so that we have 4 elements in the structure.
In the example, the meter pushes the value attribute of the total active ''power'' register (first item), then the scaler_unit of that register (second item), then the instantaneous L1 ''current'' register (third item) and finally, the scaler_unit of that register. The raw values and their corresponding scaler_unit enable us to compute the measured data.
What does the meter really push?
Of course, the meter doesn't push xml data. Rather, it pushes HDLC-Frames. Therefore, the receiving application will first have to extract the payloads of these frames which can be either:
- DataNotification APDUs.
- GeneralCiphering APDUs carrying ciphered DataNotification APDUs.
- GeneralBlockTransfer APDUs (application layer segmentation), in which case their concatenated RawData form DataNotification APDUs or GeneralCiphering APDUs carrying ciphered DataNotification APDUs.
The receiving application will have to handle all these different cases to finally obtain the DataNotifications, in xml form, from where the meaningful data can be extracted.
The whole process is quite complex and that's why we have extended our ezhdlc component and developed the GCM (ciphering) component to make it much more easier.
The detailed process can be seen in source code in this demo project. Here are the main steps:
First ezhdlc delivers directly the whole APDU pushed by the meter (no need to handle the GeneralBlockTransfer segmentation). This APDU can be either:
- A DataNotification APDU.
- A GeneralCiphering APDU carrying a ciphered DataNotification APDU.
Second, if we get a DataNotification APDU, then a call to pduxml() gives us the required DataNotification xml.
If we get a GeneralCiphering APDU, then a call to GCM.Decipher() gives us the plain DataNotification APDU that we pass to pduxml() to finally get the required DataNotification xml.
Finally, we have to handle the DataNotification in xml form in order to get the pushed data.
Java demo project
A Java demo project for any platform is available here.
Additional information for eclipse setup is here.
Demo projects for Raspberry pi
If you have problems running these demos, please send an email to the address below.