New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

zcl-packet

Package Overview
Dependencies
Maintainers
3
Versions
12
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

zcl-packet

zcl-packet is a framer and parser for ZigBee Cluster Library packet.

  • 0.0.3
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
2
decreased by-80%
Maintainers
3
Weekly downloads
 
Created
Source

zcl-packet

zcl-packet is a framer and parser for ZigBee Cluster Library (ZCL) packet on node.js.

Travis branch npm npm


Table of Contents

  1. Overview
    1.1 ZigBee Cluster Library
    1.2 Installation
    1.3 Usage
  2. APIs: frame(), parse(), and header()
  3. Appendix
    3.1 ZCL Foundation Command Reference Tables
    3.2 ZCL Functional Command Reference Tables
  4. Contributors
  5. License

1. Overview

The zcl-packet is the packet builder and parser for ZigBee applicaiton layer ZCL commands and responses defined by ZigBee Cluster Library Specification.


1.1 ZigBee Cluster Library

ZCL is a set of clusters and cross-cluster commands defined by the ZigBee Alliance to speed the development and standardization of public profiles. With ZCL, manufacturers are able to quickly build ZigBee products with consistency and compatibility.

A Cluster is a related collection of Commands and Attributes, which together defines an interface to specific functionality. Commands are actions a cluster can take. Attributes are data or states within a cluster.

ZCL Foundation

Each attribute in a cluster may be read from, written to, and reported over-the-air with cross-cluster ZCL commands. These cross-cluster commands are called ZCL foundation commands working across all clusters defined in ZCL.

ZCL Functional

ZCL divides applications into a number of functional domains, such as General, Closures, HVAC, and Lighting. Each functional domain includes a group of well-defined clusters. Commands of these specific clusters are called the ZCL functional. ZigBee public profiles use clusters from these functional domains to describe the character and behavior of different kinds of devices.


1.2 Installation

$ npm install zcl-packet --save


1.3 Usage

Require this module:

var zcl = require('zcl-packet');

Using .frame() and .parse() methods to build and parse ZCL packets is quite simple. Here are some quick examples:

  • Build a ZCL raw buffer
var zclBuf = zcl.frame({ frameType: 0, manufSpec: 0, direction: 0, disDefaultRsp: 0 },
                       0, 0, 'read', [ attrId: 0x0001, ... ]);
  • Parse a ZCL raw packet into an object
var fooZclPacket = new Buffer([ 0x00, 0x00, 0x02, ... ]);

zcl.parse(fooZclPacket, function (err, result) {
    if (!err)
        console.log(result);  // The parsed result
});

2. APIs


.frame(frameCntl, manufCode, seqNum, cmd, zclPayload[, clusterId])

Generate the raw packet of a ZCL command. Please see Section 2.3.1 General ZCL Frame Format in specification for more information.

Arguments:

  1. frameCntl (Object): Frame control. Details of each property are given with the following table:

    PropertyTypeMandatoryDescription
    frameType2-bitrequiredFrame type.
    manufSpec1-bitrequiredManufacturer specific.
    direction1-bitrequiredDirection.
    disDefaultRsp1-bitrequiredDisable default response.
  2. manufCode (Number): Manufacturer code, which is an uint16 integer. This field is ignored if frameCntl.manufSpec is 0.

  3. seqNum (Number): Sequence number, which is a uint8 integer.

  4. cmd (String | Number): Command id of which command packet you'd like to build.

  5. zclPayload (Object | Array): ZCL payload depending on the given command.

  6. clusterId (String | Number): Cluster id. Must be given if frameCntl.frameType is 1 (functional command packet).

Returns:

  • (Buffer): Raw buffer of the ZCL packet.

Examples:

  • Generate a ZCL foundation command packet
// foundation command: 'write'
var foundFrameCntl = {
        frameType: 0,  // Command acts across the entire profile (foundation)
        manufSpec: 0,
        direction: 0,
        disDefaultRsp: 0
    },
    foundPayload = [
        { attrId: 0x1234, dataType: 0x41, attrData: 'hello' },
        { attrId: 0xabcd, dataType: 0x24, attrData: [ 100, 2406 ] }
    ];

var foundBuf = zcl.frame(foundFrameCntl, 0, 0, 'write', foundPayload);
  • Generate a ZCL functional command packet
// functional command: 'add', cluster: 'genGroups'(0x0004)
var funcFrameCntl = {
        frameType: 1,  // Command is specific to a cluster (functional)
        manufSpec: 1,
        direction: 0,
        disDefaultRsp: 0
    },
    funcPayload = {
        groupid: 0x0001,
        groupname: 'group1'
    };

var funcBuf = zcl.frame(funcFrameCntl, 0xaaaa, 1, 'add', funcPayload, 0x0004);

.parse(zclBuf[, clusterId], callback)

Parse a ZCL packet into a data object.

Arguments:

  1. zclBuf (Buffer): ZCL raw packet to be parsed.

  2. clusterId (String | Number): Cluster id. Must be given if zclBuf is a functional command.

  3. callback (Function): function (err, result) {...}. Get called when the ZCL packet is parsed. The result is an data object with following properties:

    PropertyTypeDescription
    frameCntlObjectFrame type.
    manufCodeNumberManufacturer code.
    seqNumNumberSequence number.
    cmdIdStringCommand id.
    payloadObject | Object[]ZCL payload.

Returns:

  • none

Examples:

  • Parse a foundation command packet.
var foundBuf = new Buffer([
    0x00, 0x00, 0x02, 0x34, 0x12, 0x41, 0x05, 0x68,
    0x65, 0x6c, 0x6c, 0x6f, 0xcd, 0xab, 0x24, 0x66,
    0x09, 0x00, 0x00, 0x64
]);

zcl.parse(foundBuf, function(err, result) {
    if (!err)
        console.log(result);

    // The parsed result is an object
    // {
    //     frameCntl: { frameType: 0, manufSpec: 0, direction: 0, disDefaultRsp: 0 },
    //     manufCode: 0,
    //     seqNum: 0,
    //     cmdId: 'write',
    //     payload: [ 
    //         { attrId: 4660, dataType: 65, attrData: 'hello' },
    //         { attrId: 43981, dataType: 36, attrData: [ 100, 2406 ] }
    //     ]
    // }
});
  • Parse a functional command packet.
var funcBuf = new Buffer([
    0x05, 0xaa, 0xaa , 0x01, 0x00, 0x01, 0x00, 0x06,
    0x67, 0x72, 0x6f, 0x75, 0x70, 0x31
]);

zcl.parse(funcBuf, 0x0004, function(err, result) {
    if (!err)
        console.log(result);

    // The parsed result is an object
    // {
    //     frameCntl: { frameType: 1, manufSpec: 1, direction: 0, disDefaultRsp: 0 },
    //     manufCode: 43690,
    //     seqNum: 1,
    //     cmdId: 'add',
    //     payload: {
    //         groupid: 1,
    //         groupname: 'group1'
    //     }
    // }
});

.header(zclBuf)

Parse the ZCL header only.

Arguments:

  1. zclBuf (Buffer): ZCL header buffer to be parsed.

Returns:

  • (Object): ZCL header data.

Examples:

var zclBuf = new Buffer([ 0x05, 0xaa, 0xaa , 0x01, 0x00, ... ]);
var header = zcl.header(zclBuf);

console.log(header);
// {
//     frameCntl: { frameType: 1, manufSpec: 1, direction: 0, disDefaultRsp: 0 },
//     manufCode: 43690,
//     seqNum: 1,
//     cmdId: 0,
// }

3. Appendix

3.1 ZCL Foundation Command Reference Table

  • ZCL foundation commands are used for manipulating attributes and other general tasks that are not specific to an individual cluster.

  • Foundation commands are usually used to read/write attributes, attribute record objects should be given within zclPayload for .frame() to build a ZCL command packet. Format of an attribute record depends on the foundation command.

  • Description of each foundation command is documented in Section 2.4 General Command Frames.

Foundation Command Description Table

The following table describes what kind of payload format should a foundation command have. Each column in the table tells:

  • Cmd-API: Command name.
  • CmdId: Command id in number.
  • Description: Purpose of the command.
  • Payload: Payload should be an array of attribute records if the command is used to manipulate many attributes.
  • Parameter Types: Indicates the data type of each property in the payload object.
Cmd-APICmdIdDescriptionPayloadParameter Types
read0Read attributes[ readRec, ... ]none
readRsp1Read attributes response[ readStatusRec, ... ]none
write2Write attributes[ writeRec, ... ]none
writeUndiv3Write attributes undivided[ writeRec, ... ]none
writeRsp4Write attributes response[ writeStatusRec, ... ]none
writeNoRsp5Write attributes no response[ writeRec, ... ]none
configReport6Configure reporting[ attrRptCfgRec, ... ]none
configReportRsp7Configure reporting response[ attrStatusRec, ... ]none
readReportConfig8Read reporting configuration[ attrRec, ... ]none
readReportConfigRsp9Read reporting configuration response[ attrRptCfgRec, ... ]none
report10Report attributes[ attrReport, ... ]none
defaultRsp11Default response{ cmdId, statusCode }uint8, uint8
discover12Discover attributes{ startAttrId, maxAttrIds }uint16, uint8
discoverRsp13Discover attributes response{ discComplete, attrInfos }uint16, array(attrInfo)
readStruct14Read attributes structured[ readAttrRec, ... ]none
writeStrcut15Write attributes structured[ writeAttrRec, ... ]none
writeStrcutRsp16Write attributes structured response[ writeAttrStstusRec, ... ]none

Attribute Record Table

The following table lists each kind of the attribute records.

Note: Field types of multi and selector are given in Data Unit Table.

Cmd-APIField NamesField TypesJudge FieldAdditional Field NamesAdditional Field Types
readRec{ attrId }uint16nonenonenone
readStatusRec{ attrId, status }uint16, uint8status(0){ dataType, attrData }uint8, multi
status(1)nonenone
writeRec{ attrId, dataType, attrData }uint16, uin8, multinonenonenone
writeStatusRec{ status, attrId }uint8, uint16nonenonenone
attrRptCfgRec{ direction, attrId }uint8, uint16direction(0){ dataType, minRepIntval, maxRepIntval, [repChange] }uint8, uint16, uint16, depends(dataType)
direction(1){ timeout }uint16
attrStatusRec{ status, direction, attrId }uint8, uint8, uint16nonenonenone
attrRec{ direction, attrId }uint8, uint16nonenonenone
attrRptCfgRec{ status, direction, attrId }uint8, uint8, uint16status(0){ dataType, minRepIntval, maxRepIntval, [repChange] }uint8, uint16, uint16, depends(dataType)
status(1){ timeout }uint16
attrReport{ attrId, dataType, attrData }uint16, uin8, multinonenonenone
attrInfo{ attrId, dataType }uint16, uint8nonenonenone
readAttrRec{ attrId, selector }uint16, selectornonenonenone
writeAttrRec{ attrId, selector, dataType, attrData }uint16, selector, uint8, multinonenonenone
writeAttrStstusRec{ status, attrId, selector }uint8, attrId, selectornonenonenone

Data Unit Table
Data UnitJudge FieldField NamesField Types
multidataType(72, 80, 81){ elmType, numElms, elmVals }uint8, uint16, array(depends(elmType))
dataType(76){ numElms, structElms }uint16, array(struct)
selectornone{ indicator, indexes }uint8, array(depends(indicator))
structnone{ elmType, elmVal }uint8, depends(elmType)

3.2 ZCL Functional Command Reference Table

The following table describes the payload format of functional commands. Each column in the table is:

  • Cluster: Cluster name.
  • Cmd-API: Command name.
  • CmdId: Command id in number.
  • Direction: Tells whether a command is sent from client-to-server (c2s) or from server-to-client (s2c).
  • Arguments: Required parameters of a Cmd-API.

Functional domains:


3.2.1 General

ClusterCmd-APICmdIdDirectionArguments
genBasicresetFactDefault0c2s{ }
genIdentifyidentify0c2s{ identifytime }
identifyQuery1c2s{ }
ezmodeInvoke2c2s{ action }
updateCommissionState3c2s{ action, commstatemask }
triggerEffect64c2s{ effectid, effectvariant }
identifyQueryRsp0s2c{ timeout }
genGroupsadd0c2s{ groupid, groupname }
view1c2s{ groupid }
getMembership2c2s{ groupcount, grouplist }
remove3c2s{ groupid }
removeAll4c2s{ }
addIfIdentifying5c2s{ groupid, groupname }
addRsp0s2c{ status, groupid }
viewRsp1s2c{ status, groupid, groupname }
getMembershipRsp2s2c{ capacity, groupcount, grouplist }
removeRsp3s2c{ status, groupid }
genScenesadd0c2s{ groupid, sceneid, transtime, scenename, extensionfieldsets }
view1c2s{ groupid, sceneid }
remove2c2s{ groupid, sceneid }
removeAll3c2s{ groupid }
store4c2s{ groupid, sceneid }
recall5c2s{ groupid, sceneid }
getSceneMembership6c2s{ groupid }
enhancedAdd64c2s{ groupid, sceneid, transtime, scenename, extensionfieldsets }
enhancedView65c2s{ groupid, sceneid }
copy66c2s{ mode, groupidfrom, sceneidfrom, groupidto, sceneidto }
addRsp0s2c{ status, groupId, sceneId }
viewRsp1s2c{ status, groupid, sceneid, transtime, scenename, extensionfieldsets }
removeRsp2s2c{ status, groupid, sceneid }
removeAllRsp3s2c{ status, groupid }
storeRsp4s2c{ status, groupid, sceneid }
getSceneMembershipRsp6s2c{ status, capacity, groupid, scenecount, scenelist }
enhancedAddRsp64s2c{ }
enhancedViewRsp65s2c{ status, groupid, sceneid, transtime, scenename, extensionfieldsets }
copyRsp66s2c{ status, groupidfrom, sceneidfrom }
genOnOffoff0c2s{ }
on1c2s{ }
toggle2c2s{ }
offWithEffect64c2s{ effectid, effectvariant }
onWithRecallGlobalScene65c2s{ }
onWithTimedOff66c2s{ ctrlbits, ctrlbyte, ontime, offwaittime }
genLevelCtrlmoveToLevel0c2s{ level, transtime }
move1c2s{ movemode, rate }
step2c2s{ stepmode, stepsize, transtime }
stop3c2s{ }
moveToLevelWithOnOff4c2s{ level, transtime }
moveWithOnOff5c2s{ movemode, rate }
stepWithOnOff6c2s{ stepmode, stepsize, transtime }
stopWithOnOff7c2s{ }
genAlarmsreset0c2s{ alarmcode, clusterid }
resetAll1c2s{ }
get2c2s{ }
resetLog3c2s{ }
publishEventLog4c2s{ }
alarm0s2c{ alarmcode, clusterid }
getRsp1s2c{ status, alarmcode, clusterid, timestamp }
getEventLog2s2c{ }
genRssiLocationsetAbsolute0c2s{ coord1, coord2, coord3, power, pathlossexponent }
setDevCfg1c2s{ power, pathlossexponent, calperiod, numrssimeasurements, reportingperiod }
getDevCfg2c2s{ targetaddr }
getData3c2s{ getdatainfo, numrsp, targetaddr }
devCfgRsp0s2c{ status, power, pathlossexp, calperiod, numrssimeasurements, reportingperiod }
dataRsp1s2c{ status, locationtype, coord1, coord2, coord3, power, pathlossexp, locationmethod, qualitymeasure, locationage }
dataNotif2s2c{ locationtype, coord1, coord2, coord3, power, pathlossexp, locationmethod, qualitymeasure, locationage }
compactDataNotif3s2c{ locationtype, coord1, coord2, coord3, qualitymeasure, locationage }
rssiPing4s2c{ locationtype }
genCommissioningrestartDevice0c2s{ options, delay, jitter }
saveStartupParams1c2s{ options, index }
restoreStartupParams2c2s{ options, index }
resetStartupParams3c2s{ options, index }
restartDeviceRsp0s2c{ status }
saveStartupParamsRsp1s2c{ status }
restoreStartupParamsRsp2s2c{ status }
resetStartupParamsRsp3s2c{ status }

3.2.2 Closures

ClusterCmd-APICmdIdDirectionArguments
closuresDoorLocklockDoor0c2s{ pincodevalue }
unlockDoor1c2s{ pincodevalue }
toggleDoor2c2s{ pincodevalue }
unlockWithTimeout3c2s{ timeout, pincodevalue }
getLogRecord4c2s{ logindex }
setPinCode5c2s{ userid, userstatus, usertype, pincodevalue }
getPinCode6c2s{ userid }
clearPinCode7c2s{ userid }
clearAllPinCodes8c2s{ }
setUserStatus9c2s{ userid, userstatus }
getUserStatus10c2s{ userid }
setWeekDaySchedule11c2s{ scheduleid, userid, daysmask, starthour, startminute, endhour, endminute }
getWeekDaySchedule12c2s{ scheduleid, userid }
clearWeekDaySchedule13c2s{ scheduleid, userid }
setYearDaySchedule14c2s{ scheduleid, userid, zigbeelocalstarttime, zigbeelocalendtime }
getYearDaySchedule15c2s{ scheduleid, userid }
clearYearDaySchedule16c2s{ scheduleid, userid }
setHolidaySchedule17c2s{ holidayscheduleid, zigbeelocalstarttime, zigbeelocalendtime, opermodelduringholiday }
getHolidaySchedule18c2s{ holidayscheduleid }
clearHolidaySchedule19c2s{ holidayscheduleid }
setUserType20c2s{ userid, usertype }
getUserType21c2s{ userid }
setRfidCode22c2s{ userid, userstatus, usertype, pincodevalue }
getRfidCode23c2s{ userid }
clearRfidCode24c2s{ userid }
clearAllRfidCodes25c2s{ }
lockDoorRsp0s2c{ status }
unlockDoorRsp1s2c{ status }
toggleDoorRsp2s2c{ status }
unlockWithTimeoutRsp3s2c{ status }
getLogRecordRsp4s2c{ logentryid, timestamp, eventtype, source, eventidalarmcode, userid, pincodevalue }
setPinCodeRsp5s2c{ status }
getPinCodeRsp6s2c{ userid, userstatus, usertype, pincodevalue }
clearPinCodeRsp7s2c{ status }
clearAllPinCodesRsp8s2c{ status }
setUserStatusRsp9s2c{ status }
getUserStatusRsp10s2c{ userid, userstatus }
setWeekDayScheduleRsp11s2c{ status }
getWeekDayScheduleRsp12s2c{ scheduleid, userid, status, daysmask, starthour, startminute, endhour, endminute }
clearWeekDayScheduleRsp13s2c{ status }
setYearDayScheduleRsp14s2c{ status }
getYearDayScheduleRsp15s2c{ scheduleid, userid, status, zigbeelocalstarttime, zigbeelocalendtime }
clearYearDayScheduleRsp16s2c{ status }
setHolidayScheduleRsp17s2c{ status }
getHolidayScheduleRsp18s2c{ holidayscheduleid, status, zigbeelocalstarttime, zigbeelocalendtime, opermodelduringholiday }
clearHolidayScheduleRsp19s2c{ status }
setUserTypeRsp20s2c{ status }
getUserTypeRsp21s2c{ userid, usertype }
setRfidCodeRsp22s2c{ status }
getRfidCodeRsp23s2c{ userid, userstatus, usertype, pincodevalue }
clearRfidCodeRsp24s2c{ status }
clearAllRfidCodesRsp25s2c{ status }
operationEventNotification32s2c{ opereventsrc, opereventcode, userid, pin, zigbeelocaltime, data }
programmingEventNotification33s2c{ programeventsrc, programeventcode, userid, pin, usertype, userstatus, zigbeelocaltime, data }
closuresWindowCoveringupOpen0c2s{ }
downClose1c2s{ }
stop2c2s{ }
goToLiftValue4c2s{ liftvalue }
goToLiftPercentage5c2s{ percentageliftvalue }
goToTiltValue7c2s{ tiltvalue }
goToTiltPercentage8c2s{ percentagetiltvalue }

3.2.3 HVAC

ClusterCmd-APICmdIdDirectionArguments
hvacThermostatsetpointRaiseLower0c2s{ mode, amount }
setWeeklySchedule1c2s{ numoftrans, dayofweek, mode, thermoseqmode }
getWeeklySchedule2c2s{ daystoreturn, modetoreturn }
clearWeeklySchedule3c2s{ }
getRelayStatusLog4c2s{ }
getWeeklyScheduleRsp0s2c{ numoftrans, dayofweek, mode, thermoseqmode }
getRelayStatusLogRsp1s2c{ timeofday, relaystatus, localtemp, humidity, setpoint, unreadentries }

3.2.4 Lighting

ClusterCmd-APICmdIdDirectionArguments
lightingColorCtrlmoveToHue0c2s{ hue, direction, transtime }
moveHue1c2s{ movemode, rate }
stepHue2c2s{ stepmode, stepsize, transtime }
moveToSaturation3c2s{ saturation, transtime }
moveSaturation4c2s{ movemode, rate }
stepSaturation5c2s{ stepmode, stepsize, transtime }
moveToHueAndSaturation6c2s{ hue, saturation, transtime }
moveToColor7c2s{ colorx, colory, transtime }
moveColor8c2s{ ratex, ratey }
stepColor9c2s{ stepx, stepy, transtime }
moveToColorTemp10c2s{ colortemp, transtime }
enhancedMoveToHue64c2s{ enhancehue, direction, transtime }
enhancedMoveHue65c2s{ movemode, rate }
enhancedStepHue66c2s{ stepmode, stepsize, transtime }
enhancedMoveToHueAndSaturation67c2s{ enhancehue, saturation, transtime }
colorLoopSet68c2s{ bits, bytee, action, direction, time, starthue }
stopMoveStep71c2s{ bits, bytee, action, direction, time, starthue }

3.2.5 Security and Safety

ClusterCmd-APICmdIdDirectionArguments
ssIasZoneenrollRsp0c2s{ enrollrspcode, zoneid }
statusChangeNotification0s2c{ zonestatus, extendedstatus }
enrollReq1s2c{ zonetype, manucode }
ssIasAcearm0c2s{ armmode }
bypass1c2s{ numofzones, zoneidlist }
emergency2c2s{ }
fire3c2s{ }
panic4c2s{ }
getZoneIDMap5c2s{ }
getZoneInfo6c2s{ zoneid }
getPanelStatus7c2s{ }
getBypassedZoneList8c2s{ }
getZoneStatus9c2s{ startzoneid, maxnumzoneid, zonestatusmaskflag, zonestatusmask }
armRsp0s2c{ armnotification }
getZoneIDMapRsp1s2c{ zoneidmapsection0, zoneidmapsection1, zoneidmapsection2, zoneidmapsection3, zoneidmapsection4, zoneidmapsection5, zoneidmapsection6, zoneidmapsection7, zoneidmapsection8, zoneidmapsection9, zoneidmapsection10, zoneidmapsection11, zoneidmapsection12, zoneidmapsection13, zoneidmapsection14, zoneidmapsection15 }
getZoneInfoRsp2s2c{ zoneid, zonetype, ieeeaddr }
zoneStatusChanged3s2c{ zoneid, zonestatus, audiblenotif, strlen, string }
panelStatusChanged4s2c{ panelstatus, secondsremain, audiblenotif, alarmstatus }
getPanelStatusRsp5s2c{ panelstatus, secondsremain, audiblenotif, alarmstatus }
setBypassedZoneList6s2c{ numofzones, zoneid }
bypassRsp7s2c{ numofzones, bypassresult }
getZoneStatusRsp8s2c{ zonestatuscomplete, numofzones, zoneinfo }
ssIasWdstartWarning0c2s{ startwarninginfo, warningduration }
squawk1c2s{ squawkinfo }

3.2.6 Protocol Interfaces

ClusterCmd-APICmdIdDirectionArguments
piGenericTunnelmatchProtocolAddr0c2s{ protocoladdr }
matchProtocolAddrRsp0s2c{ devieeeaddr, protocoladdr }
advertiseProtocolAddr1s2c{ protocoladdr }
piBacnetProtocolTunneltransferNPDU0c2s{ npdu }

3.2.7 Home Automation

ClusterCmd-APICmdIdDirectionArguments
haApplianceEventsAlertsgetAlerts0c2s{ }
getAlertsRsp0s2c{ alertscount, aalert }
alertsNotification1s2c{ alertscount, aalert }
eventNotification2s2c{ eventheader, eventid }
haApplianceStatisticslog0c2s{ logid }
logQueue1c2s{ }
logNotification0s2c{ timestamp, logid, loglength, logpayload }
logRsp1s2c{ timestamp, logid, loglength, logpayload }
logQueueRsp2s2c{ logqueuesize, logid }
statisticsAvailable3s2c{ logqueuesize, logid }
haElectricalMeasurementgetProfileInfo0c2s{ }
getMeasurementProfile1c2s{ attrId, starttime, numofuntervals }
getProfileInfoRsp0s2c{ profilecount, profileintervalperiod, maxnumofintervals, numofattrs, listofattr }
getMeasurementProfileRsp1s2c{ starttime, status, profileintervalperiod, numofintervalsdeliv, attrId, intervals }

4. Contributors


5. License

The MIT License (MIT)

Copyright (c) 2016 Jack Wu jackchased@gmail.com, Hedy Wang hedywings@gmail.com, and Simen Li simenkid@gmail.com

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Keywords

FAQs

Package last updated on 05 Aug 2016

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc