├── .clabot ├── .gitattributes ├── .gitignore ├── .travis.yml ├── LICENSE ├── README.md ├── json ├── Makefile ├── model_1.json ├── model_10.json ├── model_101.json ├── model_102.json ├── model_103.json ├── model_11.json ├── model_111.json ├── model_112.json ├── model_113.json ├── model_12.json ├── model_120.json ├── model_121.json ├── model_122.json ├── model_123.json ├── model_124.json ├── model_125.json ├── model_126.json ├── model_127.json ├── model_128.json ├── model_129.json ├── model_13.json ├── model_130.json ├── model_131.json ├── model_132.json ├── model_133.json ├── model_134.json ├── model_135.json ├── model_136.json ├── model_137.json ├── model_138.json ├── model_139.json ├── model_14.json ├── model_140.json ├── model_141.json ├── model_142.json ├── model_143.json ├── model_144.json ├── model_145.json ├── model_15.json ├── model_16.json ├── model_160.json ├── model_17.json ├── model_18.json ├── model_19.json ├── model_2.json ├── model_201.json ├── model_202.json ├── model_203.json ├── model_204.json ├── model_211.json ├── model_212.json ├── model_213.json ├── model_214.json ├── model_220.json ├── model_3.json ├── model_302.json ├── model_303.json ├── model_304.json ├── model_305.json ├── model_306.json ├── model_307.json ├── model_308.json ├── model_4.json ├── model_401.json ├── model_402.json ├── model_403.json ├── model_404.json ├── model_5.json ├── model_501.json ├── model_502.json ├── model_6.json ├── model_601.json ├── model_63001.json ├── model_63002.json ├── model_64001.json ├── model_64020.json ├── model_64101.json ├── model_64111.json ├── model_64112.json ├── model_7.json ├── model_701.json ├── model_702.json ├── model_703.json ├── model_704.json ├── model_705.json ├── model_706.json ├── model_707.json ├── model_708.json ├── model_709.json ├── model_710.json ├── model_711.json ├── model_712.json ├── model_713.json ├── model_714.json ├── model_715.json ├── model_8.json ├── model_801.json ├── model_802.json ├── model_803.json ├── model_804.json ├── model_805.json ├── model_806.json ├── model_807.json ├── model_808.json ├── model_809.json ├── model_9.json └── schema.json ├── smdx ├── CHANGELOG ├── Makefile ├── manifest.py ├── manifest.xml ├── manifest.xml.md5 ├── smdx.xsd ├── smdx_00001.xml ├── smdx_00002.xml ├── smdx_00003.xml ├── smdx_00004.xml ├── smdx_00005.xml ├── smdx_00006.xml ├── smdx_00007.xml ├── smdx_00008.xml ├── smdx_00009.xml ├── smdx_00010.xml ├── smdx_00011.xml ├── smdx_00012.xml ├── smdx_00013.xml ├── smdx_00014.xml ├── smdx_00015.xml ├── smdx_00016.xml ├── smdx_00017.xml ├── smdx_00018.xml ├── smdx_00019.xml ├── smdx_00101.xml ├── smdx_00102.xml ├── smdx_00103.xml ├── smdx_00111.xml ├── smdx_00112.xml ├── smdx_00113.xml ├── smdx_00120.xml ├── smdx_00121.xml ├── smdx_00122.xml ├── smdx_00123.xml ├── smdx_00124.xml ├── smdx_00125.xml ├── smdx_00126.xml ├── smdx_00127.xml ├── smdx_00128.xml ├── smdx_00129.xml ├── smdx_00130.xml ├── smdx_00131.xml ├── smdx_00132.xml ├── smdx_00133.xml ├── smdx_00134.xml ├── smdx_00135.xml ├── smdx_00136.xml ├── smdx_00137.xml ├── smdx_00138.xml ├── smdx_00139.xml ├── smdx_00140.xml ├── smdx_00141.xml ├── smdx_00142.xml ├── smdx_00143.xml ├── smdx_00144.xml ├── smdx_00145.xml ├── smdx_00160.xml ├── smdx_00201.xml ├── smdx_00202.xml ├── smdx_00203.xml ├── smdx_00204.xml ├── smdx_00211.xml ├── smdx_00212.xml ├── smdx_00213.xml ├── smdx_00214.xml ├── smdx_00220.xml ├── smdx_00302.xml ├── smdx_00303.xml ├── smdx_00304.xml ├── smdx_00305.xml ├── smdx_00306.xml ├── smdx_00307.xml ├── smdx_00308.xml ├── smdx_00401.xml ├── smdx_00402.xml ├── smdx_00403.xml ├── smdx_00404.xml ├── smdx_00501.xml ├── smdx_00502.xml ├── smdx_00601.xml ├── smdx_00801.xml ├── smdx_00802.xml ├── smdx_00803.xml ├── smdx_00804.xml ├── smdx_00805.xml ├── smdx_00806.xml ├── smdx_00807.xml ├── smdx_00808.xml ├── smdx_00809.xml ├── smdx_63001.xml ├── smdx_63002.xml ├── smdx_64001.xml ├── smdx_64020.xml ├── smdx_64101.xml ├── smdx_64111.xml └── smdx_64112.xml └── utils ├── add_sunspec_comments.py ├── add_sunspec_detail.py └── add_sunspec_standards.py /.clabot: -------------------------------------------------------------------------------- 1 | { 2 | "contributors": ["bobfox","shelcrow","dersecure"] 3 | } 4 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | *.sln merge=union 7 | *.csproj merge=union 8 | *.vbproj merge=union 9 | *.fsproj merge=union 10 | *.dbproj merge=union 11 | 12 | # Standard to msysgit 13 | *.doc diff=astextplain 14 | *.DOC diff=astextplain 15 | *.docx diff=astextplain 16 | *.DOCX diff=astextplain 17 | *.dot diff=astextplain 18 | *.DOT diff=astextplain 19 | *.pdf diff=astextplain 20 | *.PDF diff=astextplain 21 | *.rtf diff=astextplain 22 | *.RTF diff=astextplain 23 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ################# 2 | ## Eclipse 3 | ################# 4 | 5 | *.pydevproject 6 | .project 7 | .metadata 8 | bin/ 9 | tmp/ 10 | *.tmp 11 | *.bak 12 | *.swp 13 | *~.nib 14 | local.properties 15 | .classpath 16 | .settings/ 17 | .loadpath 18 | 19 | .idea/ 20 | 21 | # External tool builders 22 | .externalToolBuilders/ 23 | 24 | # Locally stored "Eclipse launch configurations" 25 | *.launch 26 | 27 | # CDT-specific 28 | .cproject 29 | 30 | # PDT-specific 31 | .buildpath 32 | 33 | 34 | ################# 35 | ## Visual Studio 36 | ################# 37 | 38 | ## Ignore Visual Studio temporary files, build results, and 39 | ## files generated by popular Visual Studio add-ons. 40 | 41 | # User-specific files 42 | *.suo 43 | *.user 44 | *.sln.docstates 45 | 46 | # Build results 47 | 48 | [Dd]ebug/ 49 | [Rr]elease/ 50 | x64/ 51 | build/ 52 | [Bb]in/ 53 | [Oo]bj/ 54 | 55 | # MSTest test Results 56 | [Tt]est[Rr]esult*/ 57 | [Bb]uild[Ll]og.* 58 | 59 | *_i.c 60 | *_p.c 61 | *.ilk 62 | *.meta 63 | *.obj 64 | *.pch 65 | *.pdb 66 | *.pgc 67 | *.pgd 68 | *.rsp 69 | *.sbr 70 | *.tlb 71 | *.tli 72 | *.tlh 73 | *.tmp 74 | *.tmp_proj 75 | *.log 76 | *.vspscc 77 | *.vssscc 78 | .builds 79 | *.pidb 80 | *.log 81 | *.scc 82 | 83 | # Visual C++ cache files 84 | ipch/ 85 | *.aps 86 | *.ncb 87 | *.opensdf 88 | *.sdf 89 | *.cachefile 90 | 91 | # Visual Studio profiler 92 | *.psess 93 | *.vsp 94 | *.vspx 95 | 96 | # Guidance Automation Toolkit 97 | *.gpState 98 | 99 | # ReSharper is a .NET coding add-in 100 | _ReSharper*/ 101 | *.[Rr]e[Ss]harper 102 | 103 | # TeamCity is a build add-in 104 | _TeamCity* 105 | 106 | # DotCover is a Code Coverage Tool 107 | *.dotCover 108 | 109 | # NCrunch 110 | *.ncrunch* 111 | .*crunch*.local.xml 112 | 113 | # Installshield output folder 114 | [Ee]xpress/ 115 | 116 | # DocProject is a documentation generator add-in 117 | DocProject/buildhelp/ 118 | DocProject/Help/*.HxT 119 | DocProject/Help/*.HxC 120 | DocProject/Help/*.hhc 121 | DocProject/Help/*.hhk 122 | DocProject/Help/*.hhp 123 | DocProject/Help/Html2 124 | DocProject/Help/html 125 | 126 | # Click-Once directory 127 | publish/ 128 | 129 | # Publish Web Output 130 | *.Publish.xml 131 | *.pubxml 132 | 133 | # NuGet Packages Directory 134 | ## TODO: If you have NuGet Package Restore enabled, uncomment the next line 135 | #packages/ 136 | 137 | # Windows Azure Build Output 138 | csx 139 | *.build.csdef 140 | 141 | # Windows Store app package directory 142 | AppPackages/ 143 | 144 | # Others 145 | sql/ 146 | *.Cache 147 | ClientBin/ 148 | [Ss]tyle[Cc]op.* 149 | ~$* 150 | *~ 151 | *.dbmdl 152 | *.[Pp]ublish.xml 153 | *.pfx 154 | *.publishsettings 155 | 156 | # RIA/Silverlight projects 157 | Generated_Code/ 158 | 159 | # Backup & report files from converting an old project file to a newer 160 | # Visual Studio version. Backup files are not needed, because we have git ;-) 161 | _UpgradeReport_Files/ 162 | Backup*/ 163 | UpgradeLog*.XML 164 | UpgradeLog*.htm 165 | 166 | # SQL Server files 167 | App_Data/*.mdf 168 | App_Data/*.ldf 169 | 170 | ############# 171 | ## Windows detritus 172 | ############# 173 | 174 | # Windows image file caches 175 | Thumbs.db 176 | ehthumbs.db 177 | 178 | # Folder config file 179 | Desktop.ini 180 | 181 | # Recycle Bin used on file shares 182 | $RECYCLE.BIN/ 183 | 184 | # Mac crap 185 | .DS_Store 186 | 187 | 188 | ############# 189 | ## Python 190 | ############# 191 | 192 | *.py[co] 193 | 194 | # Packages 195 | *.egg 196 | *.egg-info 197 | dist/ 198 | build/ 199 | eggs/ 200 | parts/ 201 | var/ 202 | sdist/ 203 | develop-eggs/ 204 | .installed.cfg 205 | 206 | # Installer logs 207 | pip-log.txt 208 | 209 | # Unit test / coverage reports 210 | .coverage 211 | .tox 212 | 213 | #Translations 214 | *.mo 215 | 216 | #Mr Developer 217 | .mr.developer.cfg 218 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: generic 2 | 3 | os: 4 | - linux 5 | 6 | addons: 7 | apt: 8 | packages: 9 | # Needed for `xmllint`. 10 | - libxml2-utils 11 | # Needed for jsonschema 12 | - python3-jsonschema 13 | 14 | script: 15 | - make -C smdx 16 | - make -C json 17 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Build Status](https://travis-ci.org/sunspec/models.svg?branch=master)](https://travis-ci.org/sunspec/models) 2 | 3 | Contribution 4 | ============ 5 | If you would like to contribute to this project, please contact support@sunspec.org to sign a CLA. 6 | -------------------------------------------------------------------------------- /json/Makefile: -------------------------------------------------------------------------------- 1 | JSONFILES=$(shell (ls model_*.json)) 2 | 3 | SCHEMA=schema.json 4 | 5 | all:: check 6 | 7 | check: $(JSONFILES) 8 | @# dump stdout to /dev/null to avoid cluttering the output 9 | @# stuff we care about (errors and pass messages) are written to stderr 10 | @echo Using jsonschema to validate all files... 11 | @echo -n $^ | xargs --max-lines=1 --verbose --replace=% --delimiter=' ' jsonschema -i % $(SCHEMA) > /dev/null 12 | -------------------------------------------------------------------------------- /json/model_1.json: -------------------------------------------------------------------------------- 1 | { 2 | "group": { 3 | "desc": "All SunSpec compliant devices must include this as the first model", 4 | "label": "Common", 5 | "name": "common", 6 | "points": [ 7 | { 8 | "desc": "Model identifier", 9 | "label": "Model ID", 10 | "mandatory": "M", 11 | "name": "ID", 12 | "size": 1, 13 | "static": "S", 14 | "type": "uint16", 15 | "value": 1, 16 | "standards": [ 17 | "IEEE 1547-2018" 18 | ] 19 | }, 20 | { 21 | "desc": "Model length", 22 | "label": "Model Length", 23 | "mandatory": "M", 24 | "name": "L", 25 | "size": 1, 26 | "static": "S", 27 | "type": "uint16", 28 | "standards": [ 29 | "IEEE 1547-2018" 30 | ] 31 | }, 32 | { 33 | "desc": "Well known value registered with SunSpec for compliance", 34 | "label": "Manufacturer", 35 | "mandatory": "M", 36 | "name": "Mn", 37 | "size": 16, 38 | "static": "S", 39 | "type": "string", 40 | "standards": [ 41 | "IEEE 1547-2018" 42 | ] 43 | }, 44 | { 45 | "desc": "Manufacturer specific value (32 chars)", 46 | "label": "Model", 47 | "mandatory": "M", 48 | "name": "Md", 49 | "size": 16, 50 | "static": "S", 51 | "type": "string", 52 | "standards": [ 53 | "IEEE 1547-2018" 54 | ] 55 | }, 56 | { 57 | "desc": "Manufacturer specific value (16 chars)", 58 | "label": "Options", 59 | "name": "Opt", 60 | "size": 8, 61 | "static": "S", 62 | "type": "string", 63 | "standards": [] 64 | }, 65 | { 66 | "desc": "Manufacturer specific value (16 chars)", 67 | "label": "Version", 68 | "name": "Vr", 69 | "size": 8, 70 | "static": "S", 71 | "type": "string", 72 | "standards": [ 73 | "IEEE 1547-2018" 74 | ] 75 | }, 76 | { 77 | "desc": "Manufacturer specific value (32 chars)", 78 | "label": "Serial Number", 79 | "mandatory": "M", 80 | "name": "SN", 81 | "size": 16, 82 | "static": "S", 83 | "type": "string", 84 | "standards": [ 85 | "IEEE 1547-2018" 86 | ] 87 | }, 88 | { 89 | "access": "RW", 90 | "desc": "Modbus device address", 91 | "detail": "This point is mandatory for all SunSpec RTU devices and, for those devices, they must support values from 1-247.", 92 | "label": "Device Address", 93 | "name": "DA", 94 | "size": 1, 95 | "type": "uint16", 96 | "standards": [] 97 | }, 98 | { 99 | "desc": "Force even alignment", 100 | "name": "Pad", 101 | "size": 1, 102 | "static": "S", 103 | "type": "pad", 104 | "standards": [] 105 | } 106 | ], 107 | "type": "group" 108 | }, 109 | "id": 1 110 | } -------------------------------------------------------------------------------- /json/model_10.json: -------------------------------------------------------------------------------- 1 | { 2 | "group": { 3 | "desc": "To be included first for a complete interface description", 4 | "label": "Communication Interface Header", 5 | "name": "model_10", 6 | "points": [ 7 | { 8 | "desc": "Model identifier", 9 | "label": "Model ID", 10 | "mandatory": "M", 11 | "name": "ID", 12 | "size": 1, 13 | "static": "S", 14 | "type": "uint16", 15 | "value": 10 16 | }, 17 | { 18 | "desc": "Model length", 19 | "label": "Model Length", 20 | "mandatory": "M", 21 | "name": "L", 22 | "size": 1, 23 | "static": "S", 24 | "type": "uint16" 25 | }, 26 | { 27 | "desc": "Overall interface status", 28 | "label": "Interface Status", 29 | "mandatory": "M", 30 | "name": "St", 31 | "size": 1, 32 | "symbols": [ 33 | { 34 | "name": "DOWN", 35 | "value": 0 36 | }, 37 | { 38 | "name": "UP", 39 | "value": 1 40 | }, 41 | { 42 | "name": "FAULT", 43 | "value": 2 44 | } 45 | ], 46 | "type": "enum16" 47 | }, 48 | { 49 | "access": "RW", 50 | "desc": "Overall interface control (TBD)", 51 | "label": "Interface Control", 52 | "name": "Ctl", 53 | "size": 1, 54 | "type": "uint16" 55 | }, 56 | { 57 | "desc": "Enumerated value. Type of physical media", 58 | "label": "Physical Access Type", 59 | "name": "Typ", 60 | "size": 1, 61 | "symbols": [ 62 | { 63 | "name": "UNKNOWN", 64 | "value": 0 65 | }, 66 | { 67 | "name": "INTERNAL", 68 | "value": 1 69 | }, 70 | { 71 | "name": "TWISTED_PAIR", 72 | "value": 2 73 | }, 74 | { 75 | "name": "FIBER", 76 | "value": 3 77 | }, 78 | { 79 | "name": "WIRELESS", 80 | "value": 4 81 | } 82 | ], 83 | "type": "enum16" 84 | }, 85 | { 86 | "name": "Pad", 87 | "size": 1, 88 | "type": "pad" 89 | } 90 | ], 91 | "type": "group" 92 | }, 93 | "id": 10 94 | } -------------------------------------------------------------------------------- /json/model_11.json: -------------------------------------------------------------------------------- 1 | { 2 | "group": { 3 | "desc": "Include to support a wired ethernet port", 4 | "label": "Ethernet Link Layer", 5 | "name": "model_11", 6 | "points": [ 7 | { 8 | "desc": "Model identifier", 9 | "label": "Model ID", 10 | "mandatory": "M", 11 | "name": "ID", 12 | "size": 1, 13 | "static": "S", 14 | "type": "uint16", 15 | "value": 11 16 | }, 17 | { 18 | "desc": "Model length", 19 | "label": "Model Length", 20 | "mandatory": "M", 21 | "name": "L", 22 | "size": 1, 23 | "static": "S", 24 | "type": "uint16" 25 | }, 26 | { 27 | "desc": "Interface speed in Mb/s", 28 | "label": "Ethernet Link Speed", 29 | "mandatory": "M", 30 | "name": "Spd", 31 | "size": 1, 32 | "type": "uint16", 33 | "units": "Mbps" 34 | }, 35 | { 36 | "desc": "Bitmask values Interface flags.", 37 | "label": "Interface Status Flags", 38 | "mandatory": "M", 39 | "name": "CfgSt", 40 | "size": 1, 41 | "symbols": [ 42 | { 43 | "name": "LINK", 44 | "value": 0 45 | }, 46 | { 47 | "name": "FULL_DUPLEX", 48 | "value": 1 49 | }, 50 | { 51 | "name": "AUTO_NEG1", 52 | "value": 2 53 | }, 54 | { 55 | "name": "AUTO_NEG2", 56 | "value": 3 57 | }, 58 | { 59 | "name": "AUTO_NEG3", 60 | "value": 4 61 | }, 62 | { 63 | "name": "RESET_REQUIRED", 64 | "value": 5 65 | }, 66 | { 67 | "name": "HW_FAULT", 68 | "value": 6 69 | } 70 | ], 71 | "type": "bitfield16" 72 | }, 73 | { 74 | "desc": "Enumerated value. State information for this interface", 75 | "label": "Link State", 76 | "mandatory": "M", 77 | "name": "St", 78 | "size": 1, 79 | "symbols": [ 80 | { 81 | "name": "UNKNOWN", 82 | "value": 0 83 | }, 84 | { 85 | "name": "ENABLED", 86 | "value": 1 87 | }, 88 | { 89 | "name": "DISABLED", 90 | "value": 2 91 | }, 92 | { 93 | "name": "TESTING", 94 | "value": 3 95 | } 96 | ], 97 | "type": "enum16" 98 | }, 99 | { 100 | "desc": "IEEE MAC address of this interface", 101 | "label": "MAC", 102 | "name": "MAC", 103 | "size": 4, 104 | "type": "eui48" 105 | }, 106 | { 107 | "access": "RW", 108 | "desc": "Interface name (8 chars)", 109 | "label": "Name", 110 | "name": "Nam", 111 | "size": 4, 112 | "type": "string" 113 | }, 114 | { 115 | "access": "RW", 116 | "desc": "Control flags", 117 | "label": "Control", 118 | "name": "Ctl", 119 | "size": 1, 120 | "symbols": [ 121 | { 122 | "name": "AUTO", 123 | "value": 0 124 | }, 125 | { 126 | "name": "FULL_DUPLEX", 127 | "value": 1 128 | } 129 | ], 130 | "type": "bitfield16" 131 | }, 132 | { 133 | "access": "RW", 134 | "desc": "Forced interface speed in Mb/s when AUTO is disabled", 135 | "label": "Forced Speed", 136 | "name": "FrcSpd", 137 | "size": 1, 138 | "type": "uint16", 139 | "units": "Mbps" 140 | } 141 | ], 142 | "type": "group" 143 | }, 144 | "id": 11 145 | } -------------------------------------------------------------------------------- /json/model_125.json: -------------------------------------------------------------------------------- 1 | { 2 | "group": { 3 | "desc": "Pricing Signal ", 4 | "label": "Pricing", 5 | "name": "pricing", 6 | "points": [ 7 | { 8 | "desc": "Model identifier", 9 | "label": "Model ID", 10 | "mandatory": "M", 11 | "name": "ID", 12 | "size": 1, 13 | "static": "S", 14 | "type": "uint16", 15 | "value": 125 16 | }, 17 | { 18 | "desc": "Model length", 19 | "label": "Model Length", 20 | "mandatory": "M", 21 | "name": "L", 22 | "size": 1, 23 | "static": "S", 24 | "type": "uint16" 25 | }, 26 | { 27 | "access": "RW", 28 | "desc": "Is price-based charge/discharge mode active?", 29 | "label": "ModEna", 30 | "mandatory": "M", 31 | "name": "ModEna", 32 | "size": 1, 33 | "symbols": [ 34 | { 35 | "name": "ENABLE", 36 | "value": 0 37 | } 38 | ], 39 | "type": "bitfield16" 40 | }, 41 | { 42 | "access": "RW", 43 | "desc": "Meaning of the pricing signal. When a Price schedule is used, type must match the schedule range variable description.", 44 | "label": "SigType", 45 | "name": "SigType", 46 | "size": 1, 47 | "symbols": [ 48 | { 49 | "name": "UNKNOWN", 50 | "value": 0 51 | }, 52 | { 53 | "name": "ABSOLUTE", 54 | "value": 1 55 | }, 56 | { 57 | "name": "RELATIVE", 58 | "value": 2 59 | }, 60 | { 61 | "name": "MULTIPLIER", 62 | "value": 3 63 | }, 64 | { 65 | "name": "LEVEL", 66 | "value": 4 67 | } 68 | ], 69 | "type": "enum16" 70 | }, 71 | { 72 | "access": "RW", 73 | "desc": "Utility/ESP specific pricing signal. Content depends on pricing signal type. When H/M/L type is specified. Low=0; Med=1; High=2.", 74 | "label": "Sig", 75 | "mandatory": "M", 76 | "name": "Sig", 77 | "sf": "Sig_SF", 78 | "size": 1, 79 | "type": "int16" 80 | }, 81 | { 82 | "access": "RW", 83 | "desc": "Time window for charge/discharge pricing change.", 84 | "label": "WinTms", 85 | "name": "WinTms", 86 | "size": 1, 87 | "type": "uint16", 88 | "units": "Secs" 89 | }, 90 | { 91 | "access": "RW", 92 | "desc": "Timeout period for charge/discharge pricing change.", 93 | "label": "RvtTms", 94 | "name": "RvtTms", 95 | "size": 1, 96 | "type": "uint16", 97 | "units": "Secs" 98 | }, 99 | { 100 | "access": "RW", 101 | "desc": "Ramp time for moving from current charge or discharge level to new level.", 102 | "label": "RmpTms", 103 | "name": "RmpTms", 104 | "size": 1, 105 | "type": "uint16", 106 | "units": "Secs" 107 | }, 108 | { 109 | "desc": "Pricing signal scale factor.", 110 | "label": "Sig_SF", 111 | "mandatory": "M", 112 | "name": "Sig_SF", 113 | "size": 1, 114 | "type": "sunssf" 115 | }, 116 | { 117 | "name": "Pad", 118 | "size": 1, 119 | "type": "pad" 120 | } 121 | ], 122 | "type": "group" 123 | }, 124 | "id": 125 125 | } -------------------------------------------------------------------------------- /json/model_127.json: -------------------------------------------------------------------------------- 1 | { 2 | "group": { 3 | "desc": "Parameterized Frequency-Watt ", 4 | "label": "Freq-Watt Param", 5 | "name": "freq_watt_param", 6 | "points": [ 7 | { 8 | "desc": "Model identifier", 9 | "label": "Model ID", 10 | "mandatory": "M", 11 | "name": "ID", 12 | "size": 1, 13 | "static": "S", 14 | "type": "uint16", 15 | "value": 127 16 | }, 17 | { 18 | "desc": "Model length", 19 | "label": "Model Length", 20 | "mandatory": "M", 21 | "name": "L", 22 | "size": 1, 23 | "static": "S", 24 | "type": "uint16" 25 | }, 26 | { 27 | "access": "RW", 28 | "desc": "The slope of the reduction in the maximum allowed watts output as a function of frequency.", 29 | "label": "WGra", 30 | "mandatory": "M", 31 | "name": "WGra", 32 | "sf": "WGra_SF", 33 | "size": 1, 34 | "type": "uint16", 35 | "units": "% PM/Hz" 36 | }, 37 | { 38 | "access": "RW", 39 | "desc": "The frequency deviation from nominal frequency (ECPNomHz) at which a snapshot of the instantaneous power output is taken to act as the CAPPED power level (PM) and above which reduction in power output occurs.", 40 | "label": "HzStr", 41 | "mandatory": "M", 42 | "name": "HzStr", 43 | "sf": "HzStrStop_SF", 44 | "size": 1, 45 | "type": "int16", 46 | "units": "Hz" 47 | }, 48 | { 49 | "access": "RW", 50 | "desc": "The frequency deviation from nominal frequency (ECPNomHz) at which curtailed power output may return to normal and the cap on the power level value is removed.", 51 | "label": "HzStop", 52 | "mandatory": "M", 53 | "name": "HzStop", 54 | "sf": "HzStrStop_SF", 55 | "size": 1, 56 | "type": "int16", 57 | "units": "Hz" 58 | }, 59 | { 60 | "access": "RW", 61 | "desc": "Enable hysteresis", 62 | "label": "HysEna", 63 | "mandatory": "M", 64 | "name": "HysEna", 65 | "size": 1, 66 | "symbols": [ 67 | { 68 | "name": "ENABLED", 69 | "value": 0 70 | } 71 | ], 72 | "type": "bitfield16" 73 | }, 74 | { 75 | "access": "RW", 76 | "desc": "Is Parameterized Frequency-Watt control active.", 77 | "label": "ModEna", 78 | "mandatory": "M", 79 | "name": "ModEna", 80 | "size": 1, 81 | "symbols": [ 82 | { 83 | "name": "ENABLED", 84 | "value": 0 85 | } 86 | ], 87 | "type": "bitfield16" 88 | }, 89 | { 90 | "access": "RW", 91 | "desc": "The maximum time-based rate of change at which power output returns to normal after having been capped by an over frequency event.", 92 | "label": "HzStopWGra", 93 | "name": "HzStopWGra", 94 | "sf": "RmpIncDec_SF", 95 | "size": 1, 96 | "type": "uint16", 97 | "units": "% WMax/min" 98 | }, 99 | { 100 | "desc": "Scale factor for output gradient.", 101 | "label": "WGra_SF", 102 | "name": "WGra_SF", 103 | "size": 1, 104 | "type": "sunssf" 105 | }, 106 | { 107 | "desc": "Scale factor for frequency deviations.", 108 | "label": "HzStrStop_SF", 109 | "name": "HzStrStop_SF", 110 | "size": 1, 111 | "type": "sunssf" 112 | }, 113 | { 114 | "desc": "Scale factor for increment and decrement ramps.", 115 | "label": "RmpIncDec_SF", 116 | "name": "RmpIncDec_SF", 117 | "size": 1, 118 | "type": "sunssf" 119 | }, 120 | { 121 | "name": "Pad", 122 | "size": 1, 123 | "type": "pad" 124 | } 125 | ], 126 | "type": "group" 127 | }, 128 | "id": 127 129 | } -------------------------------------------------------------------------------- /json/model_14.json: -------------------------------------------------------------------------------- 1 | { 2 | "group": { 3 | "desc": "Include this block to allow for a proxy server", 4 | "label": "Proxy Server", 5 | "name": "model_14", 6 | "points": [ 7 | { 8 | "desc": "Model identifier", 9 | "label": "Model ID", 10 | "mandatory": "M", 11 | "name": "ID", 12 | "size": 1, 13 | "static": "S", 14 | "type": "uint16", 15 | "value": 14 16 | }, 17 | { 18 | "desc": "Model length", 19 | "label": "Model Length", 20 | "mandatory": "M", 21 | "name": "L", 22 | "size": 1, 23 | "static": "S", 24 | "type": "uint16" 25 | }, 26 | { 27 | "access": "RW", 28 | "desc": "Interface name (8 chars)", 29 | "label": "name", 30 | "name": "Nam", 31 | "size": 4, 32 | "type": "string" 33 | }, 34 | { 35 | "access": "RW", 36 | "desc": "Bitmask value. Proxy configuration capabilities", 37 | "label": "Capabilities", 38 | "mandatory": "M", 39 | "name": "Cap", 40 | "size": 1, 41 | "symbols": [ 42 | { 43 | "name": "NO_PROXY", 44 | "value": 0 45 | }, 46 | { 47 | "name": "IPV4_PROXY", 48 | "value": 1 49 | }, 50 | { 51 | "name": "IPV6_PROXY", 52 | "value": 2 53 | } 54 | ], 55 | "type": "bitfield16" 56 | }, 57 | { 58 | "access": "RW", 59 | "desc": "Enumerated value. Set proxy address type", 60 | "label": "Config", 61 | "mandatory": "M", 62 | "name": "Cfg", 63 | "size": 1, 64 | "type": "enum16" 65 | }, 66 | { 67 | "access": "RW", 68 | "desc": "Enumerate value. Proxy server type", 69 | "label": "Type", 70 | "mandatory": "M", 71 | "name": "Typ", 72 | "size": 1, 73 | "type": "bitfield16" 74 | }, 75 | { 76 | "access": "RW", 77 | "desc": "IPv4 or IPv6 proxy hostname or dotted address (40 chars)", 78 | "label": "Address", 79 | "mandatory": "M", 80 | "name": "Addr", 81 | "size": 20, 82 | "type": "string" 83 | }, 84 | { 85 | "access": "RW", 86 | "desc": "Proxy port number", 87 | "label": "Port", 88 | "mandatory": "M", 89 | "name": "Port", 90 | "size": 1, 91 | "type": "uint16" 92 | }, 93 | { 94 | "access": "RW", 95 | "desc": "Proxy user name", 96 | "label": "Username", 97 | "name": "User", 98 | "size": 12, 99 | "type": "string" 100 | }, 101 | { 102 | "access": "RW", 103 | "desc": "Proxy password", 104 | "label": "Password", 105 | "name": "Pw", 106 | "size": 12, 107 | "type": "string" 108 | } 109 | ], 110 | "type": "group" 111 | }, 112 | "id": 14 113 | } -------------------------------------------------------------------------------- /json/model_145.json: -------------------------------------------------------------------------------- 1 | { 2 | "group": { 3 | "desc": "Inverter controls extended settings ", 4 | "label": "Extended Settings", 5 | "name": "ext_settings", 6 | "points": [ 7 | { 8 | "desc": "Model identifier", 9 | "label": "Model ID", 10 | "mandatory": "M", 11 | "name": "ID", 12 | "size": 1, 13 | "static": "S", 14 | "type": "uint16", 15 | "value": 145 16 | }, 17 | { 18 | "desc": "Model length", 19 | "label": "Model Length", 20 | "mandatory": "M", 21 | "name": "L", 22 | "size": 1, 23 | "static": "S", 24 | "type": "uint16" 25 | }, 26 | { 27 | "access": "RW", 28 | "desc": "Ramp up rate as a percentage of max current.", 29 | "label": "Ramp Up Rate", 30 | "name": "NomRmpUpRte", 31 | "sf": "Rmp_SF", 32 | "size": 1, 33 | "type": "uint16", 34 | "units": "Pct" 35 | }, 36 | { 37 | "access": "RW", 38 | "desc": "Ramp down rate as a percentage of max current.", 39 | "label": "NomRmpDnRte", 40 | "name": "NomRmpDnRte", 41 | "sf": "Rmp_SF", 42 | "size": 1, 43 | "type": "uint16", 44 | "units": "Pct" 45 | }, 46 | { 47 | "access": "RW", 48 | "desc": "Emergency ramp up rate as a percentage of max current.", 49 | "label": "Emergency Ramp Up Rate", 50 | "name": "EmgRmpUpRte", 51 | "sf": "Rmp_SF", 52 | "size": 1, 53 | "type": "uint16", 54 | "units": "Pct" 55 | }, 56 | { 57 | "access": "RW", 58 | "desc": "Emergency ramp down rate as a percentage of max current.", 59 | "label": "Emergency Ramp Down Rate", 60 | "name": "EmgRmpDnRte", 61 | "sf": "Rmp_SF", 62 | "size": 1, 63 | "type": "uint16", 64 | "units": "Pct" 65 | }, 66 | { 67 | "access": "RW", 68 | "desc": "Connect ramp up rate as a percentage of max current.", 69 | "label": "Connect Ramp Up Rate", 70 | "name": "ConnRmpUpRte", 71 | "sf": "Rmp_SF", 72 | "size": 1, 73 | "type": "uint16", 74 | "units": "Pct" 75 | }, 76 | { 77 | "access": "RW", 78 | "desc": "Connect ramp down rate as a percentage of max current.", 79 | "label": "Connect Ramp Down Rate", 80 | "name": "ConnRmpDnRte", 81 | "sf": "Rmp_SF", 82 | "size": 1, 83 | "type": "uint16", 84 | "units": "Pct" 85 | }, 86 | { 87 | "access": "RW", 88 | "desc": "Ramp rate specified in percent of max current.", 89 | "label": "Default Ramp Rate", 90 | "name": "AGra", 91 | "sf": "Rmp_SF", 92 | "size": 1, 93 | "type": "uint16", 94 | "units": "Pct" 95 | }, 96 | { 97 | "desc": "Ramp Rate Scale Factor", 98 | "label": "Ramp Rate Scale Factor", 99 | "name": "Rmp_SF", 100 | "size": 1, 101 | "type": "sunssf" 102 | } 103 | ], 104 | "type": "group" 105 | }, 106 | "id": 145 107 | } -------------------------------------------------------------------------------- /json/model_15.json: -------------------------------------------------------------------------------- 1 | { 2 | "group": { 3 | "desc": "Interface counters", 4 | "label": "Interface Counters Model", 5 | "name": "model_15", 6 | "points": [ 7 | { 8 | "desc": "Model identifier", 9 | "label": "Model ID", 10 | "mandatory": "M", 11 | "name": "ID", 12 | "size": 1, 13 | "static": "S", 14 | "type": "uint16", 15 | "value": 15 16 | }, 17 | { 18 | "desc": "Model length", 19 | "label": "Model Length", 20 | "mandatory": "M", 21 | "name": "L", 22 | "size": 1, 23 | "static": "S", 24 | "type": "uint16" 25 | }, 26 | { 27 | "access": "RW", 28 | "desc": "Write a \"1\" to clear all counters", 29 | "label": "Clear", 30 | "name": "Clr", 31 | "size": 1, 32 | "type": "uint16" 33 | }, 34 | { 35 | "desc": "Number of bytes received", 36 | "label": "Input Count", 37 | "name": "InCnt", 38 | "size": 2, 39 | "type": "acc32" 40 | }, 41 | { 42 | "desc": "Number of Unicast packets received", 43 | "label": "Input Unicast Count", 44 | "name": "InUcCnt", 45 | "size": 2, 46 | "type": "acc32" 47 | }, 48 | { 49 | "desc": "Number of non-Unicast packets received", 50 | "label": "Input Non-Unicast Count", 51 | "name": "InNUcCnt", 52 | "size": 2, 53 | "type": "acc32" 54 | }, 55 | { 56 | "desc": "Number of inbound packets received on the interface but discarded", 57 | "label": "Input Discarded Count", 58 | "name": "InDscCnt", 59 | "size": 2, 60 | "type": "acc32" 61 | }, 62 | { 63 | "desc": "Number of inbound packets that contain errors (excluding discards)", 64 | "label": "Input Error Count", 65 | "name": "InErrCnt", 66 | "size": 2, 67 | "type": "acc32" 68 | }, 69 | { 70 | "desc": "Number of inbound packets with unknown protocol", 71 | "label": "Input Unknown Count", 72 | "name": "InUnkCnt", 73 | "size": 2, 74 | "type": "acc32" 75 | }, 76 | { 77 | "desc": "Total number of bytes transmitted on this interface", 78 | "label": "Output Count", 79 | "name": "OutCnt", 80 | "size": 2, 81 | "type": "acc32" 82 | }, 83 | { 84 | "desc": "Number of Unicast packets transmitted", 85 | "label": "Output Unicast Count", 86 | "name": "OutUcCnt", 87 | "size": 2, 88 | "type": "acc32" 89 | }, 90 | { 91 | "desc": "Number of Non-Unicast packets transmitted", 92 | "label": "Output Non-Unicast Count", 93 | "name": "OutNUcCnt", 94 | "size": 2, 95 | "type": "acc32" 96 | }, 97 | { 98 | "desc": "Number of Discarded output packets", 99 | "label": "Output Discarded Count", 100 | "name": "OutDscCnt", 101 | "size": 2, 102 | "type": "acc32" 103 | }, 104 | { 105 | "desc": "Number of outbound error packets", 106 | "label": "Output Error Count", 107 | "name": "OutErrCnt", 108 | "size": 2, 109 | "type": "acc32" 110 | }, 111 | { 112 | "name": "Pad", 113 | "size": 1, 114 | "type": "pad" 115 | } 116 | ], 117 | "type": "group" 118 | }, 119 | "id": 15 120 | } -------------------------------------------------------------------------------- /json/model_16.json: -------------------------------------------------------------------------------- 1 | { 2 | "group": { 3 | "desc": "Include this model for a simple IPv4 network stack", 4 | "label": "Simple IP Network", 5 | "name": "model_16", 6 | "points": [ 7 | { 8 | "desc": "Model identifier", 9 | "label": "Model ID", 10 | "mandatory": "M", 11 | "name": "ID", 12 | "size": 1, 13 | "static": "S", 14 | "type": "uint16", 15 | "value": 16 16 | }, 17 | { 18 | "desc": "Model length", 19 | "label": "Model Length", 20 | "mandatory": "M", 21 | "name": "L", 22 | "size": 1, 23 | "static": "S", 24 | "type": "uint16" 25 | }, 26 | { 27 | "access": "RW", 28 | "desc": "Interface name. (8 chars)", 29 | "label": "Name", 30 | "name": "Nam", 31 | "size": 4, 32 | "type": "string" 33 | }, 34 | { 35 | "desc": "Enumerated value. Force IPv4 configuration method", 36 | "label": "Config", 37 | "mandatory": "M", 38 | "name": "Cfg", 39 | "size": 1, 40 | "symbols": [ 41 | { 42 | "name": "STATIC", 43 | "value": 0 44 | }, 45 | { 46 | "name": "DHCP", 47 | "value": 1 48 | } 49 | ], 50 | "type": "enum16" 51 | }, 52 | { 53 | "access": "RW", 54 | "desc": "Bitmask value Configure use of services", 55 | "label": "Control", 56 | "mandatory": "M", 57 | "name": "Ctl", 58 | "size": 1, 59 | "symbols": [ 60 | { 61 | "name": "ENABLE_DNS", 62 | "value": 0 63 | }, 64 | { 65 | "name": "ENABLE_NTP", 66 | "value": 1 67 | } 68 | ], 69 | "type": "bitfield16" 70 | }, 71 | { 72 | "access": "RW", 73 | "desc": "IP address", 74 | "label": "Address", 75 | "mandatory": "M", 76 | "name": "Addr", 77 | "size": 8, 78 | "type": "string" 79 | }, 80 | { 81 | "access": "RW", 82 | "desc": "Netmask", 83 | "label": "Netmask", 84 | "mandatory": "M", 85 | "name": "Msk", 86 | "size": 8, 87 | "type": "string" 88 | }, 89 | { 90 | "access": "RW", 91 | "desc": "Gateway IP address", 92 | "label": "Gateway", 93 | "name": "Gw", 94 | "size": 8, 95 | "type": "string" 96 | }, 97 | { 98 | "access": "RW", 99 | "desc": "32 bit IP address of DNS server", 100 | "label": "DNS1", 101 | "name": "DNS1", 102 | "size": 8, 103 | "type": "string" 104 | }, 105 | { 106 | "access": "RW", 107 | "desc": "32 bit IP address of DNS server", 108 | "label": "DNS2", 109 | "name": "DNS2", 110 | "size": 8, 111 | "type": "string" 112 | }, 113 | { 114 | "desc": "IEEE MAC address of this interface", 115 | "label": "MAC", 116 | "name": "MAC", 117 | "size": 4, 118 | "type": "eui48" 119 | }, 120 | { 121 | "access": "RW", 122 | "desc": "Bitmask value. Link control flags", 123 | "label": "Link Control", 124 | "name": "LnkCtl", 125 | "size": 1, 126 | "symbols": [ 127 | { 128 | "name": "AUTONEGOTIATE", 129 | "value": 0 130 | }, 131 | { 132 | "name": "FULL_DUPLEX", 133 | "value": 1 134 | }, 135 | { 136 | "name": "FORCE_10MB", 137 | "value": 2 138 | }, 139 | { 140 | "name": "FORCE_100MB", 141 | "value": 3 142 | }, 143 | { 144 | "name": "FORCE_1GB", 145 | "value": 4 146 | } 147 | ], 148 | "type": "bitfield16" 149 | }, 150 | { 151 | "name": "Pad", 152 | "size": 1, 153 | "type": "pad" 154 | } 155 | ], 156 | "type": "group" 157 | }, 158 | "id": 16 159 | } -------------------------------------------------------------------------------- /json/model_17.json: -------------------------------------------------------------------------------- 1 | { 2 | "group": { 3 | "desc": "Include this model for serial interface configuration support", 4 | "label": "Serial Interface", 5 | "name": "model_17", 6 | "points": [ 7 | { 8 | "desc": "Model identifier", 9 | "label": "Model ID", 10 | "mandatory": "M", 11 | "name": "ID", 12 | "size": 1, 13 | "static": "S", 14 | "type": "uint16", 15 | "value": 17 16 | }, 17 | { 18 | "desc": "Model length", 19 | "label": "Model Length", 20 | "mandatory": "M", 21 | "name": "L", 22 | "size": 1, 23 | "static": "S", 24 | "type": "uint16" 25 | }, 26 | { 27 | "access": "RW", 28 | "desc": "Interface name (8 chars)", 29 | "label": "Name", 30 | "name": "Nam", 31 | "size": 4, 32 | "type": "string" 33 | }, 34 | { 35 | "access": "RW", 36 | "desc": "Interface baud rate in bits per second", 37 | "label": "Rate", 38 | "mandatory": "M", 39 | "name": "Rte", 40 | "size": 2, 41 | "type": "uint32", 42 | "units": "bps" 43 | }, 44 | { 45 | "access": "RW", 46 | "desc": "Number of data bits per character", 47 | "label": "Bits", 48 | "mandatory": "M", 49 | "name": "Bits", 50 | "size": 1, 51 | "type": "uint16" 52 | }, 53 | { 54 | "access": "RW", 55 | "desc": "Bitmask value. Parity setting", 56 | "label": "Parity", 57 | "mandatory": "M", 58 | "name": "Pty", 59 | "size": 1, 60 | "symbols": [ 61 | { 62 | "name": "NONE", 63 | "value": 0 64 | }, 65 | { 66 | "name": "ODD", 67 | "value": 1 68 | }, 69 | { 70 | "name": "EVEN", 71 | "value": 2 72 | } 73 | ], 74 | "type": "enum16" 75 | }, 76 | { 77 | "access": "RW", 78 | "desc": "Enumerated value. Duplex mode", 79 | "label": "Duplex", 80 | "name": "Dup", 81 | "size": 1, 82 | "symbols": [ 83 | { 84 | "name": "FULL", 85 | "value": 0 86 | }, 87 | { 88 | "name": "HALF", 89 | "value": 1 90 | } 91 | ], 92 | "type": "enum16" 93 | }, 94 | { 95 | "access": "RW", 96 | "desc": "Flow Control Method", 97 | "label": "Flow Control", 98 | "name": "Flw", 99 | "size": 1, 100 | "symbols": [ 101 | { 102 | "name": "NONE", 103 | "value": 0 104 | }, 105 | { 106 | "name": "HW", 107 | "value": 1 108 | }, 109 | { 110 | "name": "XONXOFF", 111 | "value": 2 112 | } 113 | ], 114 | "type": "enum16" 115 | }, 116 | { 117 | "desc": "Enumerated value. Interface type", 118 | "label": "Interface Type", 119 | "name": "Typ", 120 | "size": 1, 121 | "symbols": [ 122 | { 123 | "name": "UNKNOWN", 124 | "value": 0 125 | }, 126 | { 127 | "name": "RS232", 128 | "value": 1 129 | }, 130 | { 131 | "name": "RS485", 132 | "value": 2 133 | } 134 | ], 135 | "type": "enum16" 136 | }, 137 | { 138 | "desc": "Enumerated value. Serial protocol selection", 139 | "label": "Protocol", 140 | "name": "Pcol", 141 | "size": 1, 142 | "symbols": [ 143 | { 144 | "name": "UNKNOWN", 145 | "value": 0 146 | }, 147 | { 148 | "name": "MODBUS", 149 | "value": 1 150 | }, 151 | { 152 | "name": "VENDOR", 153 | "value": 2 154 | } 155 | ], 156 | "type": "enum16" 157 | } 158 | ], 159 | "type": "group" 160 | }, 161 | "id": 17 162 | } -------------------------------------------------------------------------------- /json/model_18.json: -------------------------------------------------------------------------------- 1 | { 2 | "group": { 3 | "desc": "Include this model to support a cellular interface link", 4 | "label": "Cellular Link", 5 | "name": "model_18", 6 | "points": [ 7 | { 8 | "desc": "Model identifier", 9 | "label": "Model ID", 10 | "mandatory": "M", 11 | "name": "ID", 12 | "size": 1, 13 | "static": "S", 14 | "type": "uint16", 15 | "value": 18 16 | }, 17 | { 18 | "desc": "Model length", 19 | "label": "Model Length", 20 | "mandatory": "M", 21 | "name": "L", 22 | "size": 1, 23 | "static": "S", 24 | "type": "uint16" 25 | }, 26 | { 27 | "access": "RW", 28 | "desc": "Interface name", 29 | "label": "Name", 30 | "name": "Nam", 31 | "size": 4, 32 | "type": "string" 33 | }, 34 | { 35 | "access": "RW", 36 | "desc": "International Mobile Equipment Identifier for the interface", 37 | "label": "IMEI", 38 | "name": "IMEI", 39 | "size": 2, 40 | "type": "uint32" 41 | }, 42 | { 43 | "access": "RW", 44 | "desc": "Access Point Name for the interface", 45 | "label": "APN", 46 | "name": "APN", 47 | "size": 4, 48 | "type": "string" 49 | }, 50 | { 51 | "access": "RW", 52 | "desc": "Phone number for the interface", 53 | "label": "Number", 54 | "name": "Num", 55 | "size": 6, 56 | "type": "string" 57 | }, 58 | { 59 | "access": "RW", 60 | "desc": "Personal Identification Number for the interface", 61 | "label": "PIN", 62 | "name": "Pin", 63 | "size": 6, 64 | "type": "string" 65 | } 66 | ], 67 | "type": "group" 68 | }, 69 | "id": 18 70 | } -------------------------------------------------------------------------------- /json/model_19.json: -------------------------------------------------------------------------------- 1 | { 2 | "group": { 3 | "desc": "Include this model to configure a Point-to-Point Protocol link", 4 | "label": "PPP Link", 5 | "name": "model_19", 6 | "points": [ 7 | { 8 | "desc": "Model identifier", 9 | "label": "Model ID", 10 | "mandatory": "M", 11 | "name": "ID", 12 | "size": 1, 13 | "static": "S", 14 | "type": "uint16", 15 | "value": 19 16 | }, 17 | { 18 | "desc": "Model length", 19 | "label": "Model Length", 20 | "mandatory": "M", 21 | "name": "L", 22 | "size": 1, 23 | "static": "S", 24 | "type": "uint16" 25 | }, 26 | { 27 | "access": "RW", 28 | "desc": "Interface name", 29 | "label": "Name", 30 | "name": "Nam", 31 | "size": 4, 32 | "type": "string" 33 | }, 34 | { 35 | "access": "RW", 36 | "desc": "Interface baud rate in bits per second", 37 | "label": "Rate", 38 | "mandatory": "M", 39 | "name": "Rte", 40 | "size": 2, 41 | "type": "uint32", 42 | "units": "bps" 43 | }, 44 | { 45 | "access": "RW", 46 | "desc": "Number of data bits per character", 47 | "label": "Bits", 48 | "mandatory": "M", 49 | "name": "Bits", 50 | "size": 1, 51 | "type": "uint16" 52 | }, 53 | { 54 | "access": "RW", 55 | "desc": "Bitmask value. Parity setting", 56 | "label": "Parity", 57 | "mandatory": "M", 58 | "name": "Pty", 59 | "size": 1, 60 | "symbols": [ 61 | { 62 | "name": "NONE", 63 | "value": 0 64 | }, 65 | { 66 | "name": "ODD", 67 | "value": 1 68 | }, 69 | { 70 | "name": "EVEN", 71 | "value": 2 72 | } 73 | ], 74 | "type": "enum16" 75 | }, 76 | { 77 | "access": "RW", 78 | "desc": "Enumerated value. Duplex mode", 79 | "label": "Duplex", 80 | "name": "Dup", 81 | "size": 1, 82 | "symbols": [ 83 | { 84 | "name": "FULL", 85 | "value": 0 86 | }, 87 | { 88 | "name": "HALF", 89 | "value": 1 90 | } 91 | ], 92 | "type": "enum16" 93 | }, 94 | { 95 | "access": "RW", 96 | "desc": "Flow Control Method", 97 | "label": "Flow Control", 98 | "name": "Flw", 99 | "size": 1, 100 | "symbols": [ 101 | { 102 | "name": "NONE", 103 | "value": 0 104 | }, 105 | { 106 | "name": "HW", 107 | "value": 1 108 | }, 109 | { 110 | "name": "XONXOFF", 111 | "value": 2 112 | } 113 | ], 114 | "type": "enum16" 115 | }, 116 | { 117 | "desc": "Enumerated value. Authentication method", 118 | "label": "Authentication", 119 | "name": "Auth", 120 | "size": 1, 121 | "symbols": [ 122 | { 123 | "name": "NONE", 124 | "value": 0 125 | }, 126 | { 127 | "name": "PAP", 128 | "value": 1 129 | }, 130 | { 131 | "name": "CHAP", 132 | "value": 2 133 | } 134 | ], 135 | "type": "enum16" 136 | }, 137 | { 138 | "desc": "Username for authentication", 139 | "label": "Username", 140 | "name": "UsrNam", 141 | "size": 12, 142 | "type": "string" 143 | }, 144 | { 145 | "desc": "Password for authentication", 146 | "label": "Password", 147 | "name": "Pw", 148 | "size": 6, 149 | "type": "string" 150 | }, 151 | { 152 | "name": "Pad", 153 | "size": 1, 154 | "type": "pad" 155 | } 156 | ], 157 | "type": "group" 158 | }, 159 | "id": 19 160 | } -------------------------------------------------------------------------------- /json/model_302.json: -------------------------------------------------------------------------------- 1 | { 2 | "group": { 3 | "desc": "Include to support various irradiance measurements", 4 | "groups": [ 5 | { 6 | "count": 0, 7 | "name": "repeating", 8 | "points": [ 9 | { 10 | "desc": "Global Horizontal Irradiance", 11 | "label": "GHI", 12 | "name": "GHI", 13 | "size": 1, 14 | "type": "uint16", 15 | "units": "W/m2" 16 | }, 17 | { 18 | "desc": "Plane-of-Array Irradiance", 19 | "label": "POAI", 20 | "name": "POAI", 21 | "size": 1, 22 | "type": "uint16", 23 | "units": "W/m2" 24 | }, 25 | { 26 | "desc": "Diffuse Irradiance", 27 | "label": "DFI", 28 | "name": "DFI", 29 | "size": 1, 30 | "type": "uint16", 31 | "units": "W/m2" 32 | }, 33 | { 34 | "desc": "Direct Normal Irradiance", 35 | "label": "DNI", 36 | "name": "DNI", 37 | "size": 1, 38 | "type": "uint16", 39 | "units": "W/m2" 40 | }, 41 | { 42 | "desc": "Other Irradiance", 43 | "label": "OTI", 44 | "name": "OTI", 45 | "size": 1, 46 | "type": "uint16", 47 | "units": "W/m2" 48 | } 49 | ], 50 | "type": "group" 51 | } 52 | ], 53 | "label": "Irradiance Model", 54 | "name": "irradiance", 55 | "points": [ 56 | { 57 | "desc": "Model identifier", 58 | "label": "Model ID", 59 | "mandatory": "M", 60 | "name": "ID", 61 | "size": 1, 62 | "static": "S", 63 | "type": "uint16", 64 | "value": 302 65 | }, 66 | { 67 | "desc": "Model length", 68 | "label": "Model Length", 69 | "mandatory": "M", 70 | "name": "L", 71 | "size": 1, 72 | "static": "S", 73 | "type": "uint16" 74 | } 75 | ], 76 | "type": "group" 77 | }, 78 | "id": 302 79 | } -------------------------------------------------------------------------------- /json/model_303.json: -------------------------------------------------------------------------------- 1 | { 2 | "group": { 3 | "desc": "Include to support variable number of back of module temperature measurements", 4 | "groups": [ 5 | { 6 | "count": 0, 7 | "name": "temp", 8 | "points": [ 9 | { 10 | "desc": "Back of module temperature measurement", 11 | "label": "Temp", 12 | "mandatory": "M", 13 | "name": "TmpBOM", 14 | "sf": -1, 15 | "size": 1, 16 | "type": "int16", 17 | "units": "C" 18 | } 19 | ], 20 | "type": "group" 21 | } 22 | ], 23 | "label": "Back of Module Temperature Model", 24 | "name": "bom_temp", 25 | "points": [ 26 | { 27 | "desc": "Model identifier", 28 | "label": "Model ID", 29 | "mandatory": "M", 30 | "name": "ID", 31 | "size": 1, 32 | "static": "S", 33 | "type": "uint16", 34 | "value": 303 35 | }, 36 | { 37 | "desc": "Model length", 38 | "label": "Model Length", 39 | "mandatory": "M", 40 | "name": "L", 41 | "size": 1, 42 | "static": "S", 43 | "type": "uint16" 44 | } 45 | ], 46 | "type": "group" 47 | }, 48 | "id": 303 49 | } -------------------------------------------------------------------------------- /json/model_304.json: -------------------------------------------------------------------------------- 1 | { 2 | "group": { 3 | "desc": "Include to support orientation measurements", 4 | "groups": [ 5 | { 6 | "count": 0, 7 | "name": "incl", 8 | "points": [ 9 | { 10 | "desc": "X-Axis inclination", 11 | "label": "X", 12 | "mandatory": "M", 13 | "name": "Inclx", 14 | "sf": -2, 15 | "size": 2, 16 | "type": "int32", 17 | "units": "Degrees" 18 | }, 19 | { 20 | "desc": "Y-Axis inclination", 21 | "label": "Y", 22 | "name": "Incly", 23 | "sf": -2, 24 | "size": 2, 25 | "type": "int32", 26 | "units": "Degrees" 27 | }, 28 | { 29 | "desc": "Z-Axis inclination", 30 | "label": "Z", 31 | "name": "Inclz", 32 | "sf": -2, 33 | "size": 2, 34 | "type": "int32", 35 | "units": "Degrees" 36 | } 37 | ], 38 | "type": "group" 39 | } 40 | ], 41 | "label": "Inclinometer Model", 42 | "name": "inclinometer", 43 | "points": [ 44 | { 45 | "desc": "Model identifier", 46 | "label": "Model ID", 47 | "mandatory": "M", 48 | "name": "ID", 49 | "size": 1, 50 | "static": "S", 51 | "type": "uint16", 52 | "value": 304 53 | }, 54 | { 55 | "desc": "Model length", 56 | "label": "Model Length", 57 | "mandatory": "M", 58 | "name": "L", 59 | "size": 1, 60 | "static": "S", 61 | "type": "uint16" 62 | } 63 | ], 64 | "type": "group" 65 | }, 66 | "id": 304 67 | } -------------------------------------------------------------------------------- /json/model_305.json: -------------------------------------------------------------------------------- 1 | { 2 | "group": { 3 | "desc": "Include to support location measurements", 4 | "label": "GPS", 5 | "name": "location", 6 | "points": [ 7 | { 8 | "desc": "Model identifier", 9 | "label": "Model ID", 10 | "mandatory": "M", 11 | "name": "ID", 12 | "size": 1, 13 | "static": "S", 14 | "type": "uint16", 15 | "value": 305 16 | }, 17 | { 18 | "desc": "Model length", 19 | "label": "Model Length", 20 | "mandatory": "M", 21 | "name": "L", 22 | "size": 1, 23 | "static": "S", 24 | "type": "uint16" 25 | }, 26 | { 27 | "desc": "UTC 24 hour time stamp to millisecond hhmmss.sssZ format", 28 | "label": "Tm", 29 | "name": "Tm", 30 | "size": 6, 31 | "type": "string", 32 | "units": "hhmmss.sssZ" 33 | }, 34 | { 35 | "desc": "UTC Date string YYYYMMDD format", 36 | "label": "Date", 37 | "name": "Date", 38 | "size": 4, 39 | "type": "string", 40 | "units": "YYYYMMDD" 41 | }, 42 | { 43 | "desc": "Location string (40 chars max)", 44 | "label": "Location", 45 | "name": "Loc", 46 | "size": 20, 47 | "type": "string", 48 | "units": "text" 49 | }, 50 | { 51 | "desc": "Latitude with seven degrees of precision", 52 | "label": "Lat", 53 | "name": "Lat", 54 | "sf": -7, 55 | "size": 2, 56 | "type": "int32", 57 | "units": "Degrees" 58 | }, 59 | { 60 | "desc": "Longitude with seven degrees of precision", 61 | "label": "Long", 62 | "name": "Long", 63 | "sf": -7, 64 | "size": 2, 65 | "type": "int32", 66 | "units": "Degrees" 67 | }, 68 | { 69 | "desc": "Altitude measurement in meters", 70 | "label": "Altitude", 71 | "name": "Alt", 72 | "size": 2, 73 | "type": "int32", 74 | "units": "meters" 75 | } 76 | ], 77 | "type": "group" 78 | }, 79 | "id": 305 80 | } -------------------------------------------------------------------------------- /json/model_306.json: -------------------------------------------------------------------------------- 1 | { 2 | "group": { 3 | "desc": "Include to support a standard reference point", 4 | "label": "Reference Point Model", 5 | "name": "ref_point", 6 | "points": [ 7 | { 8 | "desc": "Model identifier", 9 | "label": "Model ID", 10 | "mandatory": "M", 11 | "name": "ID", 12 | "size": 1, 13 | "static": "S", 14 | "type": "uint16", 15 | "value": 306 16 | }, 17 | { 18 | "desc": "Model length", 19 | "label": "Model Length", 20 | "mandatory": "M", 21 | "name": "L", 22 | "size": 1, 23 | "static": "S", 24 | "type": "uint16" 25 | }, 26 | { 27 | "desc": "Global Horizontal Irradiance", 28 | "label": "GHI", 29 | "name": "GHI", 30 | "size": 1, 31 | "type": "uint16", 32 | "units": "W/m2" 33 | }, 34 | { 35 | "desc": "Current measurement at reference point", 36 | "label": "Amps", 37 | "name": "A", 38 | "size": 1, 39 | "type": "uint16", 40 | "units": "W/m2" 41 | }, 42 | { 43 | "desc": "Voltage measurement at reference point", 44 | "label": "Voltage", 45 | "name": "V", 46 | "size": 1, 47 | "type": "uint16", 48 | "units": "W/m2" 49 | }, 50 | { 51 | "desc": "Temperature measurement at reference point", 52 | "label": "Temperature", 53 | "name": "Tmp", 54 | "size": 1, 55 | "type": "uint16", 56 | "units": "W/m2" 57 | } 58 | ], 59 | "type": "group" 60 | }, 61 | "id": 306 62 | } -------------------------------------------------------------------------------- /json/model_307.json: -------------------------------------------------------------------------------- 1 | { 2 | "group": { 3 | "desc": "Base Meteorological Model", 4 | "label": "Base Met", 5 | "name": "base_met", 6 | "points": [ 7 | { 8 | "desc": "Model identifier", 9 | "label": "Model ID", 10 | "mandatory": "M", 11 | "name": "ID", 12 | "size": 1, 13 | "static": "S", 14 | "type": "uint16", 15 | "value": 307 16 | }, 17 | { 18 | "desc": "Model length", 19 | "label": "Model Length", 20 | "mandatory": "M", 21 | "name": "L", 22 | "size": 1, 23 | "static": "S", 24 | "type": "uint16" 25 | }, 26 | { 27 | "label": "Ambient Temperature", 28 | "name": "TmpAmb", 29 | "sf": -1, 30 | "size": 1, 31 | "type": "int16", 32 | "units": "C" 33 | }, 34 | { 35 | "label": "Relative Humidity", 36 | "name": "RH", 37 | "size": 1, 38 | "type": "int16", 39 | "units": "Pct" 40 | }, 41 | { 42 | "label": "Barometric Pressure", 43 | "name": "Pres", 44 | "size": 1, 45 | "type": "int16", 46 | "units": "HPa" 47 | }, 48 | { 49 | "label": "Wind Speed", 50 | "name": "WndSpd", 51 | "size": 1, 52 | "type": "int16", 53 | "units": "mps" 54 | }, 55 | { 56 | "label": "Wind Direction", 57 | "name": "WndDir", 58 | "size": 1, 59 | "type": "int16", 60 | "units": "deg" 61 | }, 62 | { 63 | "label": "Rainfall", 64 | "name": "Rain", 65 | "size": 1, 66 | "type": "int16", 67 | "units": "mm" 68 | }, 69 | { 70 | "label": "Snow Depth", 71 | "name": "Snw", 72 | "size": 1, 73 | "type": "int16", 74 | "units": "mm" 75 | }, 76 | { 77 | "desc": "\u00a0Precipitation Type (WMO 4680 SYNOP code reference)", 78 | "label": "Precipitation Type", 79 | "name": "PPT", 80 | "size": 1, 81 | "type": "int16" 82 | }, 83 | { 84 | "label": "Electric Field", 85 | "name": "ElecFld", 86 | "size": 1, 87 | "type": "int16", 88 | "units": "Vm" 89 | }, 90 | { 91 | "label": "Surface Wetness", 92 | "name": "SurWet", 93 | "size": 1, 94 | "type": "int16", 95 | "units": "kO" 96 | }, 97 | { 98 | "label": "Soil Wetness", 99 | "name": "SoilWet", 100 | "size": 1, 101 | "type": "int16", 102 | "units": "Pct" 103 | } 104 | ], 105 | "type": "group" 106 | }, 107 | "id": 307 108 | } -------------------------------------------------------------------------------- /json/model_308.json: -------------------------------------------------------------------------------- 1 | { 2 | "group": { 3 | "desc": "Include to support a few basic measurements", 4 | "label": "Mini Met Model", 5 | "name": "mini_met", 6 | "points": [ 7 | { 8 | "desc": "Model identifier", 9 | "label": "Model ID", 10 | "mandatory": "M", 11 | "name": "ID", 12 | "size": 1, 13 | "static": "S", 14 | "type": "uint16", 15 | "value": 308 16 | }, 17 | { 18 | "desc": "Model length", 19 | "label": "Model Length", 20 | "mandatory": "M", 21 | "name": "L", 22 | "size": 1, 23 | "static": "S", 24 | "type": "uint16" 25 | }, 26 | { 27 | "desc": "Global Horizontal Irradiance", 28 | "label": "GHI", 29 | "name": "GHI", 30 | "size": 1, 31 | "type": "uint16", 32 | "units": "W/m2" 33 | }, 34 | { 35 | "desc": "Back of module temperature measurement", 36 | "label": "Temp", 37 | "name": "TmpBOM", 38 | "sf": -1, 39 | "size": 1, 40 | "type": "int16", 41 | "units": "C" 42 | }, 43 | { 44 | "label": "Ambient Temperature", 45 | "name": "TmpAmb", 46 | "sf": -1, 47 | "size": 1, 48 | "type": "int16", 49 | "units": "C" 50 | }, 51 | { 52 | "label": "Wind Speed", 53 | "name": "WndSpd", 54 | "size": 1, 55 | "type": "uint16", 56 | "units": "m/s" 57 | } 58 | ], 59 | "type": "group" 60 | }, 61 | "id": 308 62 | } -------------------------------------------------------------------------------- /json/model_63002.json: -------------------------------------------------------------------------------- 1 | { 2 | "group": { 3 | "groups": [ 4 | { 5 | "count": 0, 6 | "name": "repeating", 7 | "points": [ 8 | { 9 | "name": "sunssf_1", 10 | "size": 1, 11 | "type": "sunssf" 12 | }, 13 | { 14 | "access": "RW", 15 | "name": "int16_1", 16 | "sf": "sunssf_1", 17 | "size": 1, 18 | "type": "int16" 19 | }, 20 | { 21 | "name": "int16_2", 22 | "sf": "sunssf_2", 23 | "size": 1, 24 | "type": "int16" 25 | }, 26 | { 27 | "name": "sunssf_2", 28 | "size": 1, 29 | "type": "sunssf" 30 | } 31 | ], 32 | "type": "group" 33 | } 34 | ], 35 | "label": "SunSpec Test Model 2", 36 | "name": "model_63002", 37 | "points": [ 38 | { 39 | "desc": "Model identifier", 40 | "label": "Model ID", 41 | "mandatory": "M", 42 | "name": "ID", 43 | "size": 1, 44 | "static": "S", 45 | "type": "uint16", 46 | "value": 63002 47 | }, 48 | { 49 | "desc": "Model length", 50 | "label": "Model Length", 51 | "mandatory": "M", 52 | "name": "L", 53 | "size": 1, 54 | "static": "S", 55 | "type": "uint16" 56 | } 57 | ], 58 | "type": "group" 59 | }, 60 | "id": 63002 61 | } -------------------------------------------------------------------------------- /json/model_64101.json: -------------------------------------------------------------------------------- 1 | { 2 | "group": { 3 | "label": "Eltek Inverter Extension", 4 | "name": "model_64101", 5 | "points": [ 6 | { 7 | "desc": "Model identifier", 8 | "label": "Model ID", 9 | "mandatory": "M", 10 | "name": "ID", 11 | "size": 1, 12 | "static": "S", 13 | "type": "uint16", 14 | "value": 64101 15 | }, 16 | { 17 | "desc": "Model length", 18 | "label": "Model Length", 19 | "mandatory": "M", 20 | "name": "L", 21 | "size": 1, 22 | "static": "S", 23 | "type": "uint16" 24 | }, 25 | { 26 | "name": "Eltek_Country_Code", 27 | "size": 1, 28 | "type": "uint16" 29 | }, 30 | { 31 | "name": "Eltek_Feeding_Phase", 32 | "size": 1, 33 | "type": "uint16" 34 | }, 35 | { 36 | "name": "Eltek_APD_Method", 37 | "size": 1, 38 | "type": "uint16" 39 | }, 40 | { 41 | "name": "Eltek_APD_Power_Ref", 42 | "size": 1, 43 | "type": "uint16" 44 | }, 45 | { 46 | "name": "Eltek_RPS_Method", 47 | "size": 1, 48 | "type": "uint16" 49 | }, 50 | { 51 | "name": "Eltek_RPS_Q_Ref", 52 | "size": 1, 53 | "type": "uint16" 54 | }, 55 | { 56 | "name": "Eltek_RPS_CosPhi_Ref", 57 | "size": 1, 58 | "type": "int16" 59 | } 60 | ], 61 | "type": "group" 62 | }, 63 | "id": 64101 64 | } -------------------------------------------------------------------------------- /json/model_7.json: -------------------------------------------------------------------------------- 1 | { 2 | "group": { 3 | "desc": "Include a digital signature over the response", 4 | "groups": [ 5 | { 6 | "count": 0, 7 | "name": "repeating", 8 | "points": [ 9 | { 10 | "access": "RW", 11 | "desc": "Digital Signature", 12 | "label": "DS", 13 | "mandatory": "M", 14 | "name": "DS", 15 | "size": 1, 16 | "type": "uint16" 17 | } 18 | ], 19 | "type": "group" 20 | } 21 | ], 22 | "label": "Secure Write Response Model (DRAFT 1)", 23 | "name": "model_7", 24 | "points": [ 25 | { 26 | "desc": "Model identifier", 27 | "label": "Model ID", 28 | "mandatory": "M", 29 | "name": "ID", 30 | "size": 1, 31 | "static": "S", 32 | "type": "uint16", 33 | "value": 7 34 | }, 35 | { 36 | "desc": "Model length", 37 | "label": "Model Length", 38 | "mandatory": "M", 39 | "name": "L", 40 | "size": 1, 41 | "static": "S", 42 | "type": "uint16" 43 | }, 44 | { 45 | "desc": "Sequence number from the request", 46 | "label": "Request Sequence", 47 | "mandatory": "M", 48 | "name": "RqSeq", 49 | "size": 1, 50 | "type": "uint16" 51 | }, 52 | { 53 | "desc": "Status of last write operation", 54 | "label": "Status", 55 | "mandatory": "M", 56 | "name": "Sts", 57 | "size": 1, 58 | "symbols": [ 59 | { 60 | "name": "SUCCESS", 61 | "value": 0 62 | }, 63 | { 64 | "name": "DS", 65 | "value": 1 66 | }, 67 | { 68 | "name": "ACL", 69 | "value": 2 70 | }, 71 | { 72 | "name": "OFF", 73 | "value": 3 74 | }, 75 | { 76 | "name": "VAL", 77 | "value": 4 78 | } 79 | ], 80 | "type": "enum16" 81 | }, 82 | { 83 | "desc": "Timestamp value is the number of seconds since January 1, 2000", 84 | "label": "Timestamp", 85 | "mandatory": "M", 86 | "name": "Ts", 87 | "size": 2, 88 | "type": "uint32" 89 | }, 90 | { 91 | "desc": "Millisecond counter 0-999", 92 | "label": "Milliseconds", 93 | "mandatory": "M", 94 | "name": "Ms", 95 | "size": 1, 96 | "type": "uint16" 97 | }, 98 | { 99 | "desc": "Sequence number of response", 100 | "label": "Sequence", 101 | "mandatory": "M", 102 | "name": "Seq", 103 | "size": 1, 104 | "type": "uint16" 105 | }, 106 | { 107 | "desc": "Bitmask alarm code", 108 | "label": "Alarm", 109 | "mandatory": "M", 110 | "name": "Alm", 111 | "size": 1, 112 | "symbols": [ 113 | { 114 | "name": "NONE", 115 | "value": 0 116 | }, 117 | { 118 | "name": "ALM", 119 | "value": 1 120 | } 121 | ], 122 | "type": "enum16" 123 | }, 124 | { 125 | "mandatory": "M", 126 | "name": "Rsrvd", 127 | "size": 1, 128 | "type": "pad" 129 | }, 130 | { 131 | "desc": "Algorithm used to compute the digital signature", 132 | "label": "Algorithm", 133 | "mandatory": "M", 134 | "name": "Alg", 135 | "size": 1, 136 | "symbols": [ 137 | { 138 | "name": "NONE", 139 | "value": 0 140 | }, 141 | { 142 | "name": "AES-GMAC-64", 143 | "value": 1 144 | }, 145 | { 146 | "name": "ECC-256", 147 | "value": 2 148 | } 149 | ], 150 | "type": "enum16" 151 | }, 152 | { 153 | "access": "RW", 154 | "desc": "Number of registers comprising the digital signature.", 155 | "label": "N", 156 | "mandatory": "M", 157 | "name": "N", 158 | "size": 1, 159 | "type": "uint16" 160 | } 161 | ], 162 | "type": "group" 163 | }, 164 | "id": 7 165 | } -------------------------------------------------------------------------------- /json/model_703.json: -------------------------------------------------------------------------------- 1 | { 2 | "group": { 3 | "desc": "Enter service model.", 4 | "label": "Enter Service", 5 | "name": "DEREnterService", 6 | "points": [ 7 | { 8 | "desc": "Enter service model ID.", 9 | "label": "Model ID", 10 | "mandatory": "M", 11 | "name": "ID", 12 | "size": 1, 13 | "static": "S", 14 | "type": "uint16", 15 | "value": 703, 16 | "standards": [ 17 | "IEEE 1547-2018" 18 | ] 19 | }, 20 | { 21 | "desc": "Enter service model length.", 22 | "label": "Model Length", 23 | "mandatory": "M", 24 | "name": "L", 25 | "size": 1, 26 | "static": "S", 27 | "type": "uint16", 28 | "value": 17, 29 | "standards": [ 30 | "IEEE 1547-2018" 31 | ] 32 | }, 33 | { 34 | "access": "RW", 35 | "desc": "Permit enter service.", 36 | "label": "Permit Enter Service", 37 | "name": "ES", 38 | "size": 1, 39 | "symbols": [ 40 | { 41 | "name": "DISABLED", 42 | "value": 0 43 | }, 44 | { 45 | "name": "ENABLED", 46 | "value": 1 47 | } 48 | ], 49 | "type": "enum16", 50 | "standards": [ 51 | "IEEE 1547-2018" 52 | ] 53 | }, 54 | { 55 | "access": "RW", 56 | "desc": "Enter service voltage high threshold as percent of normal voltage.", 57 | "label": "Enter Service Voltage High", 58 | "name": "ESVHi", 59 | "sf": "V_SF", 60 | "size": 1, 61 | "type": "uint16", 62 | "units": "Pct", 63 | "standards": [ 64 | "IEEE 1547-2018" 65 | ] 66 | }, 67 | { 68 | "access": "RW", 69 | "desc": "Enter service voltage low threshold as percent of normal voltage.", 70 | "label": "Enter Service Voltage Low", 71 | "name": "ESVLo", 72 | "sf": "V_SF", 73 | "size": 1, 74 | "type": "uint16", 75 | "units": "Pct", 76 | "standards": [ 77 | "IEEE 1547-2018" 78 | ] 79 | }, 80 | { 81 | "access": "RW", 82 | "desc": "Enter service frequency high threshold.", 83 | "label": "Enter Service Frequency High", 84 | "name": "ESHzHi", 85 | "sf": "Hz_SF", 86 | "size": 2, 87 | "type": "uint32", 88 | "units": "Hz", 89 | "standards": [ 90 | "IEEE 1547-2018" 91 | ] 92 | }, 93 | { 94 | "access": "RW", 95 | "desc": "Enter service frequency low threshold.", 96 | "label": "Enter Service Frequency Low", 97 | "name": "ESHzLo", 98 | "sf": "Hz_SF", 99 | "size": 2, 100 | "type": "uint32", 101 | "units": "Hz", 102 | "standards": [ 103 | "IEEE 1547-2018" 104 | ] 105 | }, 106 | { 107 | "access": "RW", 108 | "desc": "Enter service delay time in seconds.", 109 | "label": "Enter Service Delay Time", 110 | "name": "ESDlyTms", 111 | "size": 2, 112 | "type": "uint32", 113 | "units": "Secs", 114 | "standards": [ 115 | "IEEE 1547-2018" 116 | ] 117 | }, 118 | { 119 | "access": "RW", 120 | "desc": "Enter service random delay in seconds.", 121 | "label": "Enter Service Random Delay", 122 | "name": "ESRndTms", 123 | "size": 2, 124 | "type": "uint32", 125 | "units": "Secs", 126 | "standards": [] 127 | }, 128 | { 129 | "access": "RW", 130 | "desc": "Enter service ramp time in seconds.", 131 | "label": "Enter Service Ramp Time", 132 | "name": "ESRmpTms", 133 | "size": 2, 134 | "type": "uint32", 135 | "units": "Secs", 136 | "standards": [] 137 | }, 138 | { 139 | "desc": "Enter service delay time remaining in seconds.", 140 | "label": "Enter Service Delay Remaining", 141 | "name": "ESDlyRemTms", 142 | "size": 2, 143 | "type": "uint32", 144 | "units": "Secs", 145 | "standards": [] 146 | }, 147 | { 148 | "desc": "Voltage percentage scale factor.", 149 | "label": "Voltage Scale Factor", 150 | "name": "V_SF", 151 | "size": 1, 152 | "static": "S", 153 | "type": "sunssf", 154 | "standards": [ 155 | "IEEE 1547-2018" 156 | ] 157 | }, 158 | { 159 | "desc": "Frequency scale factor.", 160 | "label": "Frequency Scale Factor", 161 | "name": "Hz_SF", 162 | "size": 1, 163 | "static": "S", 164 | "type": "sunssf", 165 | "standards": [ 166 | "IEEE 1547-2018" 167 | ] 168 | } 169 | ], 170 | "type": "group" 171 | }, 172 | "id": 703 173 | } -------------------------------------------------------------------------------- /json/model_713.json: -------------------------------------------------------------------------------- 1 | { 2 | "group": { 3 | "desc": "DER storage capacity.", 4 | "label": "DER Storage Capacity", 5 | "name": "DERStorageCapacity", 6 | "points": [ 7 | { 8 | "desc": "DER storage capacity model ID.", 9 | "label": "Model ID", 10 | "mandatory": "M", 11 | "name": "ID", 12 | "size": 1, 13 | "static": "S", 14 | "type": "uint16", 15 | "value": 713, 16 | "standards": [ 17 | "IEEE 1547-2018" 18 | ] 19 | }, 20 | { 21 | "desc": "DER storage capacity model length.", 22 | "label": "Model Length", 23 | "mandatory": "M", 24 | "name": "L", 25 | "size": 1, 26 | "static": "S", 27 | "type": "uint16", 28 | "value": 7, 29 | "standards": [ 30 | "IEEE 1547-2018" 31 | ] 32 | }, 33 | { 34 | "desc": "Energy rating of the DER storage.", 35 | "label": "Energy Rating", 36 | "name": "WHRtg", 37 | "sf": "WH_SF", 38 | "size": 1, 39 | "type": "uint16", 40 | "units": "WH", 41 | "standards": [] 42 | }, 43 | { 44 | "desc": "Energy available of the DER storage (WHAvail = WHRtg * SoC * SoH)", 45 | "label": "Energy Available", 46 | "name": "WHAvail", 47 | "sf": "WH_SF", 48 | "size": 1, 49 | "type": "uint16", 50 | "units": "WH", 51 | "standards": [] 52 | }, 53 | { 54 | "desc": "State of charge of the DER storage.", 55 | "detail": "SOC shall be fixed to 0% for DER without storage capabilities.", 56 | "label": "State of Charge", 57 | "name": "SoC", 58 | "sf": "Pct_SF", 59 | "size": 1, 60 | "type": "uint16", 61 | "units": "Pct", 62 | "standards": [ 63 | "IEEE 1547-2018" 64 | ] 65 | }, 66 | { 67 | "desc": "State of health of the DER storage.", 68 | "label": "State of Health", 69 | "name": "SoH", 70 | "sf": "Pct_SF", 71 | "size": 1, 72 | "type": "uint16", 73 | "units": "Pct", 74 | "standards": [] 75 | }, 76 | { 77 | "desc": "Storage status.", 78 | "label": "Status", 79 | "name": "Sta", 80 | "size": 1, 81 | "symbols": [ 82 | { 83 | "desc": "No warnings or errors pending.", 84 | "label": "OK", 85 | "name": "OK", 86 | "value": 0 87 | }, 88 | { 89 | "desc": "One or more warnings pending.", 90 | "label": "Warning", 91 | "name": "WARNING", 92 | "value": 1 93 | }, 94 | { 95 | "desc": "One or more errors pending.", 96 | "label": "Error", 97 | "name": "ERROR", 98 | "value": 2 99 | } 100 | ], 101 | "type": "enum16", 102 | "standards": [] 103 | }, 104 | { 105 | "desc": "Scale factor for energy capacity.", 106 | "label": "Energy Scale Factor", 107 | "name": "WH_SF", 108 | "size": 1, 109 | "static": "S", 110 | "type": "sunssf", 111 | "standards": [] 112 | }, 113 | { 114 | "desc": "Scale factor for percentage.", 115 | "label": "Percent Scale Factor", 116 | "name": "Pct_SF", 117 | "size": 1, 118 | "static": "S", 119 | "type": "sunssf", 120 | "standards": [] 121 | } 122 | ], 123 | "type": "group" 124 | }, 125 | "id": 713 126 | } -------------------------------------------------------------------------------- /json/model_715.json: -------------------------------------------------------------------------------- 1 | { 2 | "group": { 3 | "desc": "DER Control", 4 | "label": "DERCtl", 5 | "name": "DERCtl", 6 | "points": [ 7 | { 8 | "desc": "DER control model ID.", 9 | "label": "Model ID", 10 | "mandatory": "M", 11 | "name": "ID", 12 | "size": 1, 13 | "static": "S", 14 | "type": "uint16", 15 | "value": 715 16 | }, 17 | { 18 | "desc": "DER control model length.", 19 | "label": "Model Length", 20 | "mandatory": "M", 21 | "name": "L", 22 | "size": 1, 23 | "static": "S", 24 | "type": "uint16", 25 | "value": 7 26 | }, 27 | { 28 | "comments": [ 29 | "DER Controls" 30 | ], 31 | "desc": "DER control mode. Enumeration.", 32 | "label": "Control Mode", 33 | "name": "LocRemCtl", 34 | "size": 1, 35 | "symbols": [ 36 | { 37 | "label": "Remote Control", 38 | "name": "REMOTE", 39 | "value": 0 40 | }, 41 | { 42 | "desc": "Local mode is required for manual/maintenance operations. Once invoked, it must be explicitly exited for the inverter to be controlled remotely.", 43 | "label": "Local Control", 44 | "name": "LOCAL", 45 | "value": 1 46 | } 47 | ], 48 | "type": "enum16" 49 | }, 50 | { 51 | "desc": "Value is incremented every second by the DER with periodic resets to zero.", 52 | "label": "DER Heartbeat", 53 | "name": "DERHb", 54 | "size": 2, 55 | "type": "uint32" 56 | }, 57 | { 58 | "access": "RW", 59 | "desc": "Value is incremented every second by the controller with periodic resets to zero.", 60 | "label": "Controller Heartbeat", 61 | "name": "ControllerHb", 62 | "size": 2, 63 | "type": "uint32" 64 | }, 65 | { 66 | "access": "RW", 67 | "desc": "Used to reset any latched alarms. 1 = Reset.", 68 | "label": "Alarm Reset", 69 | "name": "AlarmReset", 70 | "size": 1, 71 | "type": "uint16" 72 | }, 73 | { 74 | "access": "RW", 75 | "desc": "Commands to PCS. Enumerated value.", 76 | "label": "Set Operation", 77 | "name": "OpCtl", 78 | "size": 1, 79 | "symbols": [ 80 | { 81 | "label": "Stop the DER", 82 | "name": "STOP", 83 | "value": 0 84 | }, 85 | { 86 | "label": "Start the DER", 87 | "name": "START", 88 | "value": 1 89 | }, 90 | { 91 | "label": "Enter Standby Mode", 92 | "name": "ENTER_STANDBY", 93 | "value": 2 94 | }, 95 | { 96 | "label": "Exit Standby Mode", 97 | "name": "EXIT_STANDBY", 98 | "value": 3 99 | } 100 | ], 101 | "type": "enum16" 102 | } 103 | ], 104 | "type": "group" 105 | }, 106 | "id": 715 107 | } 108 | -------------------------------------------------------------------------------- /json/model_8.json: -------------------------------------------------------------------------------- 1 | { 2 | "group": { 3 | "desc": "Security model for PKI", 4 | "groups": [ 5 | { 6 | "count": 0, 7 | "name": "repeating", 8 | "points": [ 9 | { 10 | "desc": "X.509 Certificate of the device", 11 | "label": "Cert", 12 | "mandatory": "M", 13 | "name": "Cert", 14 | "size": 1, 15 | "type": "uint16" 16 | } 17 | ], 18 | "type": "group" 19 | } 20 | ], 21 | "label": "Get Device Security Certificate", 22 | "name": "model_8", 23 | "points": [ 24 | { 25 | "desc": "Model identifier", 26 | "label": "Model ID", 27 | "mandatory": "M", 28 | "name": "ID", 29 | "size": 1, 30 | "static": "S", 31 | "type": "uint16", 32 | "value": 8 33 | }, 34 | { 35 | "desc": "Model length", 36 | "label": "Model Length", 37 | "mandatory": "M", 38 | "name": "L", 39 | "size": 1, 40 | "static": "S", 41 | "type": "uint16" 42 | }, 43 | { 44 | "desc": "X.509 format of the certificate. DER or PEM.", 45 | "label": "Format", 46 | "mandatory": "M", 47 | "name": "Fmt", 48 | "size": 1, 49 | "symbols": [ 50 | { 51 | "name": "NONE", 52 | "value": 0 53 | }, 54 | { 55 | "name": "X509_PEM", 56 | "value": 1 57 | }, 58 | { 59 | "name": "X509_DER", 60 | "value": 2 61 | } 62 | ], 63 | "type": "enum16" 64 | }, 65 | { 66 | "desc": "Number of registers to follow for the certificate", 67 | "label": "N", 68 | "mandatory": "M", 69 | "name": "N", 70 | "size": 1, 71 | "type": "uint16" 72 | } 73 | ], 74 | "type": "group" 75 | }, 76 | "id": 8 77 | } -------------------------------------------------------------------------------- /json/model_801.json: -------------------------------------------------------------------------------- 1 | { 2 | "group": { 3 | "desc": "This model has been deprecated.", 4 | "label": "Energy Storage Base Model (DEPRECATED)", 5 | "name": "storage", 6 | "points": [ 7 | { 8 | "desc": "Model identifier", 9 | "label": "Model ID", 10 | "mandatory": "M", 11 | "name": "ID", 12 | "size": 1, 13 | "static": "S", 14 | "type": "uint16", 15 | "value": 801 16 | }, 17 | { 18 | "desc": "Model length", 19 | "label": "Model Length", 20 | "mandatory": "M", 21 | "name": "L", 22 | "size": 1, 23 | "static": "S", 24 | "type": "uint16" 25 | }, 26 | { 27 | "desc": "This model has been deprecated.", 28 | "label": "Deprecated Model", 29 | "mandatory": "M", 30 | "name": "DEPRECATED", 31 | "size": 1, 32 | "type": "enum16" 33 | } 34 | ], 35 | "type": "group" 36 | }, 37 | "id": 801 38 | } -------------------------------------------------------------------------------- /json/model_806.json: -------------------------------------------------------------------------------- 1 | { 2 | "group": { 3 | "groups": [ 4 | { 5 | "count": 0, 6 | "name": "battery_string", 7 | "points": [ 8 | { 9 | "label": "Battery String Points To Be Determined", 10 | "mandatory": "M", 11 | "name": "BatStTBD", 12 | "size": 1, 13 | "type": "uint16" 14 | } 15 | ], 16 | "type": "group" 17 | } 18 | ], 19 | "label": "Flow Battery Model", 20 | "name": "flow_battery", 21 | "points": [ 22 | { 23 | "desc": "Model identifier", 24 | "label": "Model ID", 25 | "mandatory": "M", 26 | "name": "ID", 27 | "size": 1, 28 | "static": "S", 29 | "type": "uint16", 30 | "value": 806 31 | }, 32 | { 33 | "desc": "Model length", 34 | "label": "Model Length", 35 | "mandatory": "M", 36 | "name": "L", 37 | "size": 1, 38 | "static": "S", 39 | "type": "uint16" 40 | }, 41 | { 42 | "label": "Battery Points To Be Determined", 43 | "mandatory": "M", 44 | "name": "BatTBD", 45 | "size": 1, 46 | "type": "uint16" 47 | } 48 | ], 49 | "type": "group" 50 | }, 51 | "id": 806 52 | } -------------------------------------------------------------------------------- /json/model_808.json: -------------------------------------------------------------------------------- 1 | { 2 | "group": { 3 | "groups": [ 4 | { 5 | "count": 0, 6 | "name": "stack", 7 | "points": [ 8 | { 9 | "label": "Stack Points To Be Determined", 10 | "mandatory": "M", 11 | "name": "StackTBD", 12 | "size": 1, 13 | "type": "uint16" 14 | } 15 | ], 16 | "type": "group" 17 | } 18 | ], 19 | "label": "Flow Battery Module Model", 20 | "name": "flow_battery_module", 21 | "points": [ 22 | { 23 | "desc": "Model identifier", 24 | "label": "Model ID", 25 | "mandatory": "M", 26 | "name": "ID", 27 | "size": 1, 28 | "static": "S", 29 | "type": "uint16", 30 | "value": 808 31 | }, 32 | { 33 | "desc": "Model length", 34 | "label": "Model Length", 35 | "mandatory": "M", 36 | "name": "L", 37 | "size": 1, 38 | "static": "S", 39 | "type": "uint16" 40 | }, 41 | { 42 | "label": "Module Points To Be Determined", 43 | "mandatory": "M", 44 | "name": "ModuleTBD", 45 | "size": 1, 46 | "type": "uint16" 47 | } 48 | ], 49 | "type": "group" 50 | }, 51 | "id": 808 52 | } -------------------------------------------------------------------------------- /json/model_809.json: -------------------------------------------------------------------------------- 1 | { 2 | "group": { 3 | "groups": [ 4 | { 5 | "count": 0, 6 | "name": "cell", 7 | "points": [ 8 | { 9 | "label": "Cell Points To Be Determined", 10 | "mandatory": "M", 11 | "name": "CellTBD", 12 | "size": 1, 13 | "type": "uint16" 14 | } 15 | ], 16 | "type": "group" 17 | } 18 | ], 19 | "label": "Flow Battery Stack Model", 20 | "name": "flow_battery_stack", 21 | "points": [ 22 | { 23 | "desc": "Model identifier", 24 | "label": "Model ID", 25 | "mandatory": "M", 26 | "name": "ID", 27 | "size": 1, 28 | "static": "S", 29 | "type": "uint16", 30 | "value": 809 31 | }, 32 | { 33 | "desc": "Model length", 34 | "label": "Model Length", 35 | "mandatory": "M", 36 | "name": "L", 37 | "size": 1, 38 | "static": "S", 39 | "type": "uint16" 40 | }, 41 | { 42 | "label": "Stack Points To Be Determined", 43 | "mandatory": "M", 44 | "name": "StackTBD", 45 | "size": 1, 46 | "type": "uint16" 47 | } 48 | ], 49 | "type": "group" 50 | }, 51 | "id": 809 52 | } -------------------------------------------------------------------------------- /json/schema.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "description": "JSON Schema for SunSpec information model definition", 4 | "type": "object", 5 | "required": ["id", "group"], 6 | "properties": { 7 | "id": { 8 | "type": "integer", 9 | "minimum": 1, 10 | "maximum": 65535 11 | }, 12 | "group": { 13 | "$ref": "#/definitions/group" 14 | }, 15 | "label": { 16 | "type": "string" 17 | }, 18 | "desc": { 19 | "type": "string" 20 | }, 21 | "detail": { 22 | "type": "string" 23 | }, 24 | "notes": { 25 | "type": "string" 26 | }, 27 | "comments": { 28 | "type": "array", 29 | "items": { 30 | "type": "string" 31 | } 32 | } 33 | }, 34 | "definitions": { 35 | "group": { 36 | "type": "object", 37 | "required": ["name", "type"], 38 | "properties": { 39 | "name": { 40 | "type": "string" 41 | }, 42 | "type": { 43 | "enum": ["group", "sync"] 44 | }, 45 | "count": { 46 | "type": ["integer", "string"], 47 | "default": 1 48 | }, 49 | "points": { 50 | "type": "array", 51 | "items": { 52 | "$ref": "#/definitions/point" 53 | } 54 | }, 55 | "groups": { 56 | "type": "array", 57 | "items": { 58 | "$ref": "#/definitions/group" 59 | } 60 | }, 61 | "label": { 62 | "type": "string" 63 | }, 64 | "desc": { 65 | "type": "string" 66 | }, 67 | "detail": { 68 | "type": "string" 69 | }, 70 | "notes": { 71 | "type": "string" 72 | }, 73 | "comments": { 74 | "type": "array", 75 | "items": { 76 | "type": "string" 77 | } 78 | } 79 | } 80 | }, 81 | "point": { 82 | "type": "object", 83 | "required": ["name", "type", "size"], 84 | "properties": { 85 | "name": { 86 | "type": "string" 87 | }, 88 | "type": { 89 | "type": "string", 90 | "enum": ["int16", "int32", "int64", "raw16", "uint16", "uint32", "uint64" ,"acc16", "acc32", 91 | "acc64", "bitfield16", "bitfield32", "bitfield64", "enum16", "enum32", "float32", 92 | "float64", "string", "sf", "pad", "ipaddr", "ipv6addr", "eui48", "sunssf", "count"] 93 | }, 94 | "value": { 95 | "type": ["integer", "string"] 96 | }, 97 | "count": { 98 | "type": "integer" 99 | }, 100 | "size": { 101 | "type": "integer" 102 | }, 103 | "sf": { 104 | "type": ["integer", "string"], 105 | "minimum": -10, 106 | "maximum": 10 107 | }, 108 | "units": { 109 | "type": "string" 110 | }, 111 | "access": { 112 | "type": "string", 113 | "enum": ["R", "RW"], 114 | "default": "R" 115 | }, 116 | "mandatory": { 117 | "type": "string", 118 | "enum": ["M", "O"], 119 | "default": "O" 120 | }, 121 | "static": { 122 | "type": "string", 123 | "enum": ["D", "S"], 124 | "default": "D" 125 | }, 126 | "label": { 127 | "type": "string" 128 | }, 129 | "desc": { 130 | "type": "string" 131 | }, 132 | "detail": { 133 | "type": "string" 134 | }, 135 | "notes": { 136 | "type": "string" 137 | }, 138 | "comments": { 139 | "type": "array", 140 | "items": { 141 | "type": "string" 142 | } 143 | }, 144 | "symbols": { 145 | "type": "array", 146 | "items": { 147 | "$ref": "#/definitions/symbol" 148 | } 149 | }, 150 | "standards": { 151 | "type": "array", 152 | "items": { 153 | "type": "string" 154 | } 155 | } 156 | } 157 | }, 158 | "symbol": { 159 | "type": "object", 160 | "required": ["name", "value"], 161 | "properties": { 162 | "name": { 163 | "type": "string" 164 | }, 165 | "value": {}, 166 | "label": { 167 | "type": "string" 168 | }, 169 | "desc": { 170 | "type": "string" 171 | }, 172 | "detail": { 173 | "type": "string" 174 | }, 175 | "notes": { 176 | "type": "string" 177 | }, 178 | "comments": { 179 | "type": "array", 180 | "items": { 181 | "type": "string" 182 | } 183 | } 184 | } 185 | } 186 | } 187 | } 188 | -------------------------------------------------------------------------------- /smdx/CHANGELOG: -------------------------------------------------------------------------------- 1 | 2012 October 2 : Torben Mueller, Weidmueller DE reported String Combiner event 10 "Combiner Cabinet Open" as missing from the SMDX/PICS. Added back in for points Evt and InEvt. Models affected: All String Combiner models 401,402,403,404. 2 | 3 | 2012 October 2 : Bill Randle, AEI reported an incorrect entry for Inverter Control Scheduling. StrTms has a type of uint16 that should be uint32. Type and offests updated. Models affected: IC 133. 4 | 5 | 2012 October 2 : Bill Randle, AEI reported an incorrect symbol name in the Inverter Control Basic Settings. A recent 61850 change for the PFSign symbols of EEI .vs. IEEE was not picked up in the SMDX. Models affected: IC 121. 6 | 7 | 2012 October 3 : Bill Randle, AEI reported incorrect register names in the Inverter Control Basic Settings. Register 4 named VAMax_SF should be named WMax_SF. Register 14 name VAMax_SF should be VRef_SF Models affected: IC 121. 8 | 9 | 2012 Octoboer 23 : Flo Yee, Solectria renewables reported incorrect type of TmpAmb. uint16 should be int16. Models affected: E 308. 10 | 11 | 2012 October 26: Bill Randle, AEI reported incorrect type for PF in the Watt-PF function. PF should be a signed value (int16), not unsigned (unit16). Models affected: IC 131 12 | 13 | 2012 November 1: Bob Fox, Loggerware reported use of the degree symbol problematic to denote °C. It was agreed to use just "C" to denote degrees centrigrade in the units. Models affected: E 303, 308 14 | 15 | 2012 November 1: Bob Fox, Loggerware reported missing fixed scalefactors in environmental models. Models affected: E 303, 304, 308 16 | 17 | 2012 November 2: Bob Fox, Loggerware reported pad register not needed in E 302 model. Removed pad. Models affected E 302 18 | 19 | 2012 November 8: Bill Randle, AEI. Updates to incorporate changes from SEP2.0 and IEC 61850-90-7, other errata. Models affected IC 120-134 20 | 21 | 2012 Matthieue Laroche, Mersen. Contributed new vendor extension model for Mersen string monitor. Model affected V 64020. 22 | 23 | 2012 December 4: Bob Fox, Loggerware reported typos in the meter models for the TotWhImp measurements. These should be A, B, C. Models affected M 201,202,203,204,211,212,213,214 24 | 25 | 2012 December 6: Phillip Windisch, Fronius. Change request was lost. Readded the DeptRef and DeptRef_SF to the Volt-Watt curve to give more flexibilty to the meaning of DeptRef. Models affected IC 126,132. 26 | 27 | 2012 December 7: John Nunneley, SunSpec. Transcription error in SC 402 missing InN. Models affected SC 402. 28 | 29 | 2013 February 5: Bob Fox, Loggerware. Change request was lost. Readded 2012 October 3 : Bill Randle, AEI reported incorrect register names in the Inverter Control Basic Settings. Register 4 named VAMax_SF should be named WMax_SF. Models affected IC 121. 30 | 31 | 2013 February 6: Andrew Murray, Array Technology. Contributed DRAFT 2 of Tracker Model. Models affected T 601. 32 | 33 | 2013 March, April: Bill Randle, AEI. Contributed many corrections and improvements to the IC models. Models affected all IC. 34 | 35 | 2013 April 8: Bill Randle, AEI. Contribute DRAFT frequency ride through and voltage ride through models. Models affected IC 135-138 36 | 37 | 2013 April 25: John Blair, Power-One, Contributed Test 1 of MPPT Model. Models affected I 160. 38 | 39 | 2013 April 29: Philipp Windisch, Fronius, Bill Randle AEI. Contributed fixes to IC models. Models affected all IC. 40 | 41 | 2013 April 29: John Nunneley, SunSpec. Corrected offsets in models. Models affected C 1, NC 16, M 305 42 | 43 | 2013 April 29: John Nunneley, SunSpec. Contributed DRAFT secure read and write models. Models affected SEC 3-4. 44 | 45 | ------------------------------------------ 46 | Models moved to SunSpec models repository 47 | ------------------------------------------ 48 | 49 | 2014 January 9: Bob Fox, Loggerware. Updates from the last SunSpec official release not previously checked in; correction of some model lengths; addition of model/repeating block name attributes; addition of test models 6300x. 50 | 51 | 2015 April 7: Bob Fox, SunSpec. Updated model 11 to correct MAC address point; added new point type of eui48. Added storage models 801, 802, and 803. 52 | 53 | 2015 June 3: Bob Fox, SunSpec. Updated model 63001. Added a constant scale factor to point uint32_4. Added label information. 54 | 55 | 2015 June 3: Bob Fox, SunSpec. Updated model 63002 to include label information. 56 | 57 | 2016 February 4: Bob Fox SunSpec. Corrected acc32 to float32 in models 211, 212, 213, 214. 58 | 59 | 2016 February 4: Bob Fox SunSpec. Removed scale factor definition from DeptRef definition in model 126. 60 | 61 | 2016 April 20: Bob Fox, SunSpec. Corrected model length to the convention of fixed block + one repeating block. 62 | 63 | 2016 April 20: Bob Fox SunSpec. Corrected units for model 121 WGra to be per second rather per minute to be consistent with previous correction to IEC 61850-7-420. 64 | 65 | 2016 July 14: Andrew Miller, Doosan GridTech. Updated models 801, 802, 803, 804, 805, 806, 807, 808, 809 reflecting changes for the draft 4 revision of the SunSpec storage models. 66 | 67 | 2016 Oct 16: Andrew Miller, Doosan GridTech. Updated model 803 correcting miscellaneous issues found in first publication of Draft 4 68 | 69 | 2016 Oct 16: Bob Fox SunSpec. Added proposed models 139-145 in test status. 70 | 71 | 72 | -------------------------------------------------------------------------------- /smdx/Makefile: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) 2011-2012, John D. Blair 3 | # All rights reserved. 4 | # 5 | # Redistribution and use in source and binary forms, with or without 6 | # modification, are permitted provided that the following conditions are met: 7 | # 8 | # * Redistributions of source code must retain the above copyright 9 | # notice, this list of conditions and the following disclaimer. 10 | # 11 | # * Redistributions in binary form must reproduce the above copyright 12 | # notice, this list of conditions and the following disclaimer in the 13 | # documentation and/or other materials provided with the distribution. 14 | # 15 | # * Neither the name of John D. Blair nor his lackeys may be used 16 | # to endorse or promote products derived from this software 17 | # without specific prior written permission. 18 | # 19 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20 | # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21 | # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 22 | # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 23 | # JOHN D. BLAIR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24 | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25 | # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 26 | # USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 27 | # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 28 | # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 29 | # OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 30 | # SUCH DAMAGE. 31 | 32 | SUNS=../../src/suns 33 | 34 | SMDXFILES=$(shell (ls smdx*.xml)) 35 | 36 | SCHEMA=smdx.xsd 37 | 38 | all:: manifest.xml 39 | 40 | manifest.xml: $(SMDXFILES) 41 | @echo Generating manifest.xml 42 | python ./manifest.py 43 | 44 | all:: check 45 | 46 | check: $(SMDXFILES) 47 | @# dump stdout to /dev/null to avoid cluttering the output 48 | @# stuff we care about (errors and pass messages) are written to stderr 49 | @echo Using xmllint to validate all files... 50 | @xmllint --schema $(SCHEMA) $^ > /dev/null 51 | 52 | -------------------------------------------------------------------------------- /smdx/manifest.xml.md5: -------------------------------------------------------------------------------- 1 | e81c0c22e7e15e040c86fd34ccad522a -------------------------------------------------------------------------------- /smdx/smdx_00001.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | All SunSpec compliant devices must include this as the first model 18 | 19 | 20 | 21 | 22 | Well known value registered with SunSpec for compliance 23 | 24 | 25 | 26 | 27 | Manufacturer specific value (32 chars) 28 | 29 | 30 | 31 | 32 | Manufacturer specific value (16 chars) 33 | 34 | 35 | 36 | 37 | Manufacturer specific value (16 chars) 38 | 39 | 40 | 41 | 42 | Manufacturer specific value (32 chars) 43 | 44 | 45 | 46 | 47 | Modbus device address 48 | 49 | 50 | 51 | 52 | Force even alignment 53 | 54 | 55 | 56 | 57 | -------------------------------------------------------------------------------- /smdx/smdx_00002.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 1 10 | 2 11 | 3 12 | 4 13 | 14 | 15 | 16 | 0 17 | 1 18 | 2 19 | 3 20 | 4 21 | 5 22 | 6 23 | 7 24 | 8 25 | 9 26 | 10 27 | 11 28 | 12 29 | 13 30 | 14 31 | 15 32 | 16 33 | 17 34 | 18 35 | 19 36 | 20 37 | 38 | 39 | 40 | 0 41 | 1 42 | 2 43 | 3 44 | 4 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | Aggregates a collection of models for a given model id 54 | 55 | 56 | 57 | 58 | Aggregated model id 59 | 60 | 61 | 62 | 63 | Number of aggregated models 64 | 65 | 66 | 67 | 68 | Update Number. Incrementing number each time the mapping is changed. If the number is not changed from the last reading the direct access to a specific offset will result in reading the same logical model as before. Otherwise the entire model must be read to refresh the changes 69 | 70 | 71 | 72 | 73 | Enumerated status code 74 | 75 | 76 | 77 | 78 | Vendor specific status code 79 | 80 | 81 | 82 | 83 | Bitmask event code 84 | 85 | 86 | 87 | 88 | Vendor specific event code 89 | 90 | 91 | 92 | 93 | Control register for all aggregated devices 94 | 95 | 96 | 97 | 98 | Vendor control register for all aggregated devices 99 | 100 | 101 | 102 | 103 | Numerical value used as a parameter to the control 104 | 105 | 106 | 107 | 108 | -------------------------------------------------------------------------------- /smdx/smdx_00007.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 0 8 | 1 9 | 2 10 | 3 11 | 4 12 | 13 | 14 | 15 | 16 | 17 | 0 18 | 1 19 | 20 | 21 | 22 | 0 23 | 1 24 | 2 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | Include a digital signature over the response 36 | Used in conjunction with a Secure Write Request 37 | 38 | 39 | 40 | Algorithm used to compute the digital signature 41 | For future proof 42 | 43 | 44 | No digital signature 45 | For test purposes only 46 | 47 | 48 | 49 | 64 bit AES signature algorithm is used 50 | 51 | 52 | 53 | 54 | 256 bit ECC signature algorithm is used 55 | 56 | 57 | 58 | 59 | 60 | Status of last write operation 61 | 62 | 63 | 64 | Operation succeeded 65 | 66 | 67 | 68 | 69 | Operation failed digital signature check 70 | The signature was not valid 71 | 72 | 73 | 74 | Operation failed access control check 75 | One or more registers were not writable by this role 76 | 77 | 78 | 79 | Operation failed offset check 80 | Offset out of range or missing from multi-register value 81 | 82 | 83 | 84 | Operation failed valid value check 85 | Value is out of acceptable range 86 | 87 | 88 | 89 | 90 | Digital Signature 91 | The DS covers all registers from X to N and is N registers in length 92 | 93 | 94 | 95 | Sequence number from the request 96 | 97 | 98 | 99 | 100 | Sequence number of response 101 | Shall be advanced for each response 102 | 103 | 104 | 105 | Timestamp value is the number of seconds since January 1, 2000 106 | 107 | 108 | 109 | 110 | Millisecond counter 0-999 111 | 112 | 113 | 114 | 115 | Bitmask alarm code 116 | 117 | 118 | 119 | No Alarms 120 | 121 | 122 | 123 | 124 | Security Alarm 125 | Tampered 126 | 127 | 128 | 129 | 130 | Number of registers comprising the digital signature. 131 | The value of N must be at least 4 (64 bits) 132 | 133 | 134 | 135 | -------------------------------------------------------------------------------- /smdx/smdx_00008.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 0 7 | 1 8 | 2 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | Security model for PKI 20 | 21 | 22 | 23 | X.509 format of the certificate. DER or PEM. 24 | 25 | 26 | 27 | 28 | 29 | 30 | Number of registers to follow for the certificate 31 | 32 | 33 | 34 | X.509 Certificate of the device 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /smdx/smdx_00010.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 0 7 | 1 8 | 2 9 | 10 | 11 | 12 | 0 13 | 1 14 | 2 15 | 3 16 | 4 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | To be included first for a complete interface description 25 | 26 | 27 | 28 | 29 | Overall interface status 30 | 31 | 32 | 33 | Interface is down 34 | 35 | 36 | 37 | 38 | Interface is up 39 | 40 | 41 | 42 | 43 | Interface is in a fault state 44 | 45 | 46 | 47 | 48 | 49 | Overall interface control (TBD) 50 | 51 | 52 | 53 | 54 | Enumerated value. Type of physical media 55 | 56 | 57 | 58 | Unknown media 59 | 60 | 61 | 62 | 63 | Internal e.g. embedded switch 64 | 65 | 66 | 67 | 68 | Twisted Pair 69 | 70 | 71 | 72 | 73 | Fiber 74 | 75 | 76 | 77 | 78 | WIFI 79 | 80 | 81 | 82 | 83 | 84 | -------------------------------------------------------------------------------- /smdx/smdx_00011.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 0 8 | 1 9 | 2 10 | 3 11 | 4 12 | 5 13 | 6 14 | 15 | 16 | 0 17 | 1 18 | 2 19 | 3 20 | 21 | 22 | 23 | 24 | 0 25 | 1 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | Include to support a wired ethernet port 34 | 35 | 36 | 37 | 38 | Interface speed in Mb/s 39 | 40 | 41 | 42 | 43 | Bitmask values Interface flags. 44 | 45 | 46 | 47 | link is up 48 | 49 | 50 | 51 | 52 | link is in full duplex mode 53 | 54 | 55 | 56 | 57 | Auto-negotiation bits are encoded as: 000 - in progress. 001 - speed detection has failed. 010 - negotiation has failed. 011 - negotiated speed and duplex. 100 - negotiation not attempted. 58 | 59 | 60 | 61 | 62 | See AUTO_NEG1 63 | 64 | 65 | 66 | 67 | See AUTO_NEG1 68 | 69 | 70 | 71 | 72 | Setting requires reset 73 | 74 | 75 | 76 | 77 | Hardware fault 78 | 79 | 80 | 81 | 82 | 83 | Enumerated value. State information for this interface 84 | 85 | 86 | 87 | Unknown state 88 | 89 | 90 | 91 | 92 | Link is enabled and read 93 | 94 | 95 | 96 | 97 | Link is disabled 98 | 99 | 100 | 101 | 102 | Link is in test 103 | 104 | 105 | 106 | 107 | 108 | IEEE MAC address of this interface 109 | 110 | 111 | 112 | 113 | Interface name (8 chars) 114 | 115 | 116 | 117 | 118 | Control flags 119 | 120 | 121 | 122 | Enable auto-negotiation 123 | 124 | 125 | 126 | 127 | Force full duplex 128 | 129 | 130 | 131 | 132 | 133 | Forced interface speed in Mb/s when AUTO is disabled 134 | 135 | 136 | 137 | 138 | -------------------------------------------------------------------------------- /smdx/smdx_00014.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 0 8 | 1 9 | 2 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | Include this block to allow for a proxy server 23 | 24 | 25 | 26 | 27 | Interface name (8 chars) 28 | 29 | 30 | 31 | 32 | Bitmask value. Proxy configuration capabilities 33 | 34 | 35 | 36 | Turn off the proxy 37 | 38 | 39 | 40 | 41 | Can proxy IPv4 42 | 43 | 44 | 45 | 46 | Can proxy IPv6 47 | 48 | 49 | 50 | 51 | 52 | Enumerated value. Set proxy address type 53 | 54 | 55 | 56 | 57 | Enumerate value. Proxy server type 58 | 59 | 60 | 61 | 62 | IPv4 or IPv6 proxy hostname or dotted address (40 chars) 63 | 64 | 65 | 66 | 67 | Proxy port number 68 | 69 | 70 | 71 | 72 | Proxy user name 73 | 74 | 75 | 76 | 77 | Proxy password 78 | 79 | 80 | 81 | 82 | -------------------------------------------------------------------------------- /smdx/smdx_00015.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | Interface counters 24 | 25 | 26 | 27 | 28 | Write a "1" to clear all counters 29 | 30 | 31 | 32 | 33 | Number of bytes received 34 | 35 | 36 | 37 | 38 | Number of Unicast packets received 39 | 40 | 41 | 42 | 43 | Number of non-Unicast packets received 44 | 45 | 46 | 47 | 48 | Number of inbound packets received on the interface but discarded 49 | 50 | 51 | 52 | 53 | Number of inbound packets that contain errors (excluding discards) 54 | 55 | 56 | 57 | 58 | Number of inbound packets with unknown protocol 59 | 60 | 61 | 62 | 63 | Total number of bytes transmitted on this interface 64 | 65 | 66 | 67 | 68 | Number of Unicast packets transmitted 69 | 70 | 71 | 72 | 73 | Number of Non-Unicast packets transmitted 74 | 75 | 76 | 77 | 78 | Number of Discarded output packets 79 | 80 | 81 | 82 | 83 | Number of outbound error packets 84 | 85 | 86 | 87 | 88 | -------------------------------------------------------------------------------- /smdx/smdx_00016.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 0 8 | 1 9 | 10 | 11 | 0 12 | 1 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 0 22 | 1 23 | 2 24 | 3 25 | 4 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | Include this model for a simple IPv4 network stack 34 | 35 | 36 | 37 | 38 | Interface name. (8 chars) 39 | 40 | 41 | 42 | 43 | Enumerated value. Force IPv4 configuration method 44 | 45 | 46 | 47 | A static IP address is assigned 48 | 49 | 50 | 51 | 52 | Use DHCP to acquire an IP address 53 | 54 | 55 | 56 | 57 | 58 | Bitmask value Configure use of services 59 | 60 | 61 | 62 | Enable DNS use 63 | 64 | 65 | 66 | 67 | Enable NTP use 68 | 69 | 70 | 71 | 72 | 73 | IP address 74 | 75 | 76 | 77 | 78 | Netmask 79 | 80 | 81 | 82 | 83 | Gateway IP address 84 | 85 | 86 | 87 | 88 | 32 bit IP address of DNS server 89 | 90 | 91 | 92 | 93 | 32 bit IP address of DNS server 94 | 95 | 96 | 97 | 98 | IEEE MAC address of this interface 99 | 100 | 101 | 102 | 103 | Bitmask value. Link control flags 104 | 105 | 106 | 107 | Enable auto-negotiation 108 | 109 | 110 | 111 | 112 | Force full duplex operation 113 | 114 | 115 | 116 | 117 | Force 10 Mb/s link speed 118 | 119 | 120 | 121 | 122 | Force 100 Mb/s link speed 123 | 124 | 125 | 126 | 127 | Force 1 Gb/s link speed 128 | 129 | 130 | 131 | 132 | 133 | -------------------------------------------------------------------------------- /smdx/smdx_00017.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 10 | 1 11 | 2 12 | 13 | 14 | 0 15 | 1 16 | 17 | 18 | 0 19 | 1 20 | 2 21 | 22 | 23 | 0 24 | 1 25 | 2 26 | 27 | 28 | 0 29 | 1 30 | 2 31 | 32 | 33 | 34 | 35 | 36 | 37 | Include this model for serial interface configuration support 38 | 39 | 40 | 41 | 42 | Interface name (8 chars) 43 | 44 | 45 | 46 | 47 | Interface baud rate in bits per second 48 | 49 | 50 | 51 | 52 | Number of data bits per character 53 | 54 | 55 | 56 | 57 | Bitmask value. Parity setting 58 | 59 | 60 | 61 | No Parity 62 | 63 | 64 | 65 | 66 | Odd Parity 67 | 68 | 69 | 70 | 71 | Even Parity 72 | 73 | 74 | 75 | 76 | 77 | Enumerated value. Duplex mode 78 | 79 | 80 | 81 | Full Duplex 82 | 83 | 84 | 85 | 86 | Half Duplex 87 | 88 | 89 | 90 | 91 | 92 | Flow Control Method 93 | 94 | 95 | 96 | No flow control 97 | 98 | 99 | 100 | 101 | Hardware flow control 102 | 103 | 104 | 105 | 106 | Soft (XON/XOFF) flow control 107 | 108 | 109 | 110 | 111 | 112 | Enumerated value. Interface type 113 | 114 | 115 | 116 | Unknown interface type 117 | 118 | 119 | 120 | 121 | RS232 interface type 122 | 123 | 124 | 125 | 126 | RS485 interface type 127 | 128 | 129 | 130 | 131 | 132 | Enumerated value. Serial protocol selection 133 | 134 | 135 | 136 | Unknown protocol 137 | 138 | 139 | 140 | 141 | Modbus protocol 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | -------------------------------------------------------------------------------- /smdx/smdx_00018.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | Include this model to support a cellular interface link 16 | 17 | 18 | 19 | 20 | Interface name 21 | 22 | 23 | 24 | 25 | International Mobile Equipment Identifier for the interface 26 | 27 | 28 | 29 | 30 | Access Point Name for the interface 31 | 32 | 33 | 34 | 35 | Phone number for the interface 36 | 37 | 38 | 39 | 40 | Personal Identification Number for the interface 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /smdx/smdx_00019.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 10 | 1 11 | 2 12 | 13 | 14 | 0 15 | 1 16 | 17 | 18 | 0 19 | 1 20 | 2 21 | 22 | 23 | 0 24 | 1 25 | 2 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | Include this model to configure a Point-to-Point Protocol link 36 | 37 | 38 | 39 | 40 | Interface name 41 | 42 | 43 | 44 | 45 | Interface baud rate in bits per second 46 | 47 | 48 | 49 | 50 | Number of data bits per character 51 | 52 | 53 | 54 | 55 | Bitmask value. Parity setting 56 | 57 | 58 | 59 | No Parity 60 | 61 | 62 | 63 | 64 | Odd Parity 65 | 66 | 67 | 68 | 69 | Even Parity 70 | 71 | 72 | 73 | 74 | 75 | Enumerated value. Duplex mode 76 | 77 | 78 | 79 | Full Duplex 80 | 81 | 82 | 83 | 84 | Half Duplex 85 | 86 | 87 | 88 | 89 | 90 | Flow Control Method 91 | 92 | 93 | 94 | No flow control 95 | 96 | 97 | 98 | 99 | Hardware flow control 100 | 101 | 102 | 103 | 104 | Soft (XON/XOFF) flow control 105 | 106 | 107 | 108 | 109 | 110 | Enumerated value. Authentication method 111 | 112 | 113 | 114 | No Authentication 115 | 116 | 117 | 118 | 119 | Use PAP authentication 120 | 121 | 122 | 123 | 124 | Use CHAP authentication 125 | 126 | 127 | 128 | 129 | 130 | Username for authentication 131 | 132 | 133 | 134 | 135 | Password for authentication 136 | 137 | 138 | 139 | 140 | -------------------------------------------------------------------------------- /smdx/smdx_00125.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 0 7 | 8 | 9 | 0 10 | 1 11 | 2 12 | 3 13 | 4 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | Pricing Signal 27 | Ref 3: 8.7.5.1; Ref 4: 6 28 | 29 | 30 | 31 | Is price-based charge/discharge mode active? 32 | 33 | 34 | 35 | 36 | Meaning of the pricing signal. When a Price schedule is used, type must match the schedule range variable description. 37 | 38 | 39 | Signal type is unknown or other type of value 40 | 41 | 42 | Signal is an absolute price value in local rate. E.g. 23 (cents/kWh) 43 | 44 | 45 | Signal is a relative price in local rate. E.g. -5 (cents/kWh) 46 | 47 | 48 | Signal is a price multiplier (percentage). E.g. 15 % uplift in the rate 49 | 50 | 51 | Signal is a price level. E.g. 0=lowest 1=low 2=normal 3=high 4=highest 52 | 53 | 54 | 55 | 56 | Utility/ESP specific pricing signal. Content depends on pricing signal type. When H/M/L type is specified. Low=0; Med=1; High=2. 57 | 58 | 59 | 60 | 61 | Pricing signal scale factor. 62 | 63 | 64 | 65 | 66 | Time window for charge/discharge pricing change. 67 | 68 | 69 | 70 | 71 | Timeout period for charge/discharge pricing change. 72 | 73 | 74 | 75 | 76 | Ramp time for moving from current charge or discharge level to new level. 77 | 78 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /smdx/smdx_00127.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 10 | 11 | 12 | 0 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | Parameterized Frequency-Watt 25 | Ref 3: 8.9.1.2, 8.9.4.2 26 | 27 | 28 | 29 | Is Parameterized Frequency-Watt control active. 30 | 31 | 32 | 33 | 34 | The slope of the reduction in the maximum allowed watts output as a function of frequency. 35 | 36 | 37 | 38 | 39 | Scale factor for output gradient. 40 | 41 | 42 | 43 | 44 | The frequency deviation from nominal frequency (ECPNomHz) at which a snapshot of the instantaneous power output is taken to act as the CAPPED power level (PM) and above which reduction in power output occurs. 45 | 46 | 47 | 48 | 49 | The frequency deviation from nominal frequency (ECPNomHz) at which curtailed power output may return to normal and the cap on the power level value is removed. 50 | 51 | 52 | 53 | 54 | Scale factor for frequency deviations. 55 | 56 | 57 | 58 | 59 | Enable hysteresis 60 | 61 | 62 | 63 | 64 | The maximum time-based rate of change at which power output returns to normal after having been capped by an over frequency event. 65 | 66 | 67 | 68 | 69 | Scale factor for increment and decrement ramps. 70 | 71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /smdx/smdx_00128.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 0 7 | 1 8 | 9 | 10 | 11 | 12 | 0 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | Dynamic Reactive Current 30 | Ref 3: 8.10.1.2; Ref 4: 12 31 | 32 | 33 | 34 | Activate dynamic reactive current model 35 | 36 | 37 | 38 | 39 | Indicates if gradients trend toward zero at the edges of the deadband or trend toward zero at the center of the deadband. 40 | 41 | 42 | 43 | 44 | The gradient used to increase capacitive dynamic current. A value of 0 indicates no additional reactive current support. 45 | 46 | 47 | 48 | 49 | The gradient used to increase inductive dynamic current. A value of 0 indicates no additional reactive current support. 50 | 51 | 52 | 53 | 54 | Scale factor for the gradients. 55 | 56 | 57 | 58 | 59 | The time window used to calculate the moving average voltage. 60 | 61 | 62 | 63 | 64 | The lower delta voltage limit for which negative voltage deviations less than this value no dynamic vars are produced. 65 | 66 | 67 | 68 | 69 | The upper delta voltage limit for which positive voltage deviations less than this value no dynamic current produced. 70 | 71 | 72 | 73 | 74 | Scale factor for the voltage zone and limit settings. 75 | 76 | 77 | 78 | 79 | Block zone voltage which defines a lower voltage boundary below which no dynamic current is produced. 80 | 81 | 82 | 83 | 84 | Hysteresis voltage used with BlkZnV. 85 | 86 | 87 | 88 | 89 | Block zone time the time before which reactive current support remains active regardless of how low the voltage drops. 90 | 91 | 92 | 93 | 94 | Hold time during which reactive current support continues after the average voltage has entered the dead zone. 95 | 96 | 97 | 98 | 99 | -------------------------------------------------------------------------------- /smdx/smdx_00145.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | Inverter controls extended settings 19 | 20 | 21 | 22 | 23 | Ramp up rate as a percentage of max current. 24 | 25 | 26 | 27 | 28 | Ramp down rate as a percentage of max current. 29 | 30 | 31 | 32 | 33 | Emergency ramp up rate as a percentage of max current. 34 | 35 | 36 | 37 | 38 | Emergency ramp down rate as a percentage of max current. 39 | 40 | 41 | 42 | 43 | Connect ramp up rate as a percentage of max current. 44 | 45 | 46 | 47 | 48 | Connect ramp down rate as a percentage of max current. 49 | 50 | 51 | 52 | 53 | Ramp rate specified in percent of max current. 54 | 55 | 56 | 57 | 58 | Ramp Rate Scale Factor 59 | 60 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /smdx/smdx_00302.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | Include to support various irradiance measurements 16 | 17 | 18 | 19 | 20 | Global Horizontal Irradiance 21 | 22 | 23 | 24 | 25 | Plane-of-Array Irradiance 26 | 27 | 28 | 29 | 30 | Diffuse Irradiance 31 | 32 | 33 | 34 | 35 | Direct Normal Irradiance 36 | 37 | 38 | 39 | 40 | Other Irradiance 41 | 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /smdx/smdx_00303.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | Include to support variable number of back of module temperature measurements 13 | 14 | 15 | 16 | 17 | Back of module temperature measurement 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /smdx/smdx_00304.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | Include to support orientation measurements 14 | 15 | 16 | 17 | 18 | X-Axis inclination 19 | 20 | 21 | 22 | 23 | Y-Axis inclination 24 | 25 | 26 | 27 | 28 | Z-Axis inclination 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /smdx/smdx_00305.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | Include to support location measurements 17 | 18 | 19 | 20 | 21 | UTC 24 hour time stamp to millisecond hhmmss.sssZ format 22 | 23 | 24 | 25 | 26 | UTC Date string YYYYMMDD format 27 | 28 | 29 | 30 | 31 | Location string (40 chars max) 32 | 33 | 34 | 35 | 36 | Latitude with seven degrees of precision 37 | 38 | 39 | 40 | 41 | Longitude with seven degrees of precision 42 | 43 | 44 | 45 | 46 | Altitude measurement in meters 47 | 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /smdx/smdx_00306.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | Include to support a standard reference point 15 | 16 | 17 | 18 | 19 | Global Horizontal Irradiance 20 | 21 | 22 | 23 | 24 | Current measurement at reference point 25 | 26 | 27 | 28 | 29 | Voltage measurement at reference point 30 | 31 | 32 | 33 | 34 | Temperature measurement at reference point 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /smdx/smdx_00307.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | Base Meteorological Model 22 | This model supersedes model 301 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 |  Precipitation Type (WMO 4680 SYNOP code reference) 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /smdx/smdx_00308.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | Include to support a few basic measurements 16 | 17 | 18 | 19 | 20 | Global Horizontal Irradiance 21 | 22 | 23 | 24 | 25 | Back of module temperature measurement 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /smdx/smdx_00401.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 0 12 | 1 13 | 2 14 | 3 15 | 4 16 | 5 17 | 6 18 | 7 19 | 8 20 | 9 21 | 10 22 | 11 23 | 12 24 | 13 25 | 14 26 | 15 27 | 16 28 | 17 29 | 18 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 0 41 | 1 42 | 2 43 | 3 44 | 4 45 | 5 46 | 6 47 | 7 48 | 8 49 | 9 50 | 10 51 | 11 52 | 12 53 | 13 54 | 14 55 | 15 56 | 16 57 | 17 58 | 18 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | A basic string combiner 69 | This model is SUPERSEDED by model 403 70 | 71 | Current scale factor 72 | Amp-hour scale factor 73 | Voltage scale factor 74 | 75 | 76 | Maximum DC Current Rating 77 | 78 | 79 | 80 | 81 | Number of Inputs 82 | 83 | 84 | 85 | 86 | Bitmask value. Events 87 | 88 | 89 | 90 | 91 | Bitmask value. Vendor defined events 92 | 93 | 94 | 95 | 96 | Total measured current 97 | 98 | 99 | 100 | 101 | Total metered Amp-hours 102 | 103 | 104 | 105 | 106 | Output Voltage 107 | 108 | 109 | 110 | 111 | Internal operating temperature 112 | 113 | 114 | 115 | 116 | Uniquely identifies this input set 117 | 118 | 119 | 120 | 121 | String Input Event Flags 122 | 123 | 124 | 125 | 126 | String Input Vendor Event Flags 127 | 128 | 129 | 130 | 131 | String Input Current 132 | 133 | 134 | 135 | 136 | String Input Amp-Hours 137 | 138 | 139 | 140 | 141 | -------------------------------------------------------------------------------- /smdx/smdx_00403.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 0 12 | 1 13 | 2 14 | 3 15 | 4 16 | 5 17 | 6 18 | 7 19 | 8 20 | 9 21 | 10 22 | 11 23 | 12 24 | 13 25 | 14 26 | 15 27 | 16 28 | 17 29 | 18 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 0 43 | 1 44 | 2 45 | 3 46 | 4 47 | 5 48 | 6 49 | 7 50 | 8 51 | 9 52 | 10 53 | 11 54 | 12 55 | 13 56 | 14 57 | 15 58 | 16 59 | 17 60 | 18 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | A basic string combiner model 71 | This model supersedes model 401 72 | 73 | Current scale factor 74 | Current scale factor for inputs 75 | Amp-hour scale factor 76 | Amp-hour scale factor for inputs 77 | Voltage scale factor 78 | 79 | 80 | Maximum DC Current Rating 81 | 82 | 83 | 84 | 85 | Number of Inputs 86 | 87 | 88 | 89 | 90 | Bitmask value. Events 91 | 92 | 93 | 94 | 95 | Bitmask value. Vendor defined events 96 | 97 | 98 | 99 | 100 | Total measured current 101 | 102 | 103 | 104 | 105 | Total metered Amp-hours 106 | 107 | 108 | 109 | 110 | Output Voltage 111 | 112 | 113 | 114 | 115 | Internal operating temperature 116 | 117 | 118 | 119 | 120 | Uniquely identifies this input set 121 | 122 | 123 | 124 | 125 | String Input Event Flags 126 | 127 | 128 | 129 | 130 | String Input Vendor Event Flags 131 | 132 | 133 | 134 | 135 | String Input Current 136 | 137 | 138 | 139 | 140 | String Input Amp-Hours 141 | 142 | 143 | 144 | 145 | -------------------------------------------------------------------------------- /smdx/smdx_00801.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | This model has been deprecated. 12 | 13 | 14 | 15 | 16 | This model has been deprecated. 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /smdx/smdx_00806.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /smdx/smdx_00808.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /smdx/smdx_00809.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /smdx/smdx_63001.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /smdx/smdx_63002.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /smdx/smdx_64101.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /utils/add_sunspec_comments.py: -------------------------------------------------------------------------------- 1 | """ 2 | This script updates the SunSpec Models with new comments 3 | 4 | Comments are used to annotate the SunSpec Models with groupings or other information. 5 | These appear at gray rows in the SunSpec Excel sheets. 6 | """ 7 | import json 8 | import os 9 | 10 | 11 | # COMMENT = "Internal curve conformance checks should be conducted when AdptCrvReq is set to 1, not on point writes." 12 | # COMMENT_POINTS = { 13 | # 705: ['Crv.Pt.V', 'Crv.Pt.Var'], 14 | # 706: ['Crv.Pt.V', 'Crv.Pt.W'], 15 | # 707: ['Crv.MustTrip.Pt.V', 'Crv.MustTrip.Pt.Tms'], 16 | # 708: ['Crv.MustTrip.Pt.V', 'Crv.MustTrip.Pt.Tms'], 17 | # 709: ['Crv.MustTrip.Pt.Hz', 'Crv.MustTrip.Pt.Tms'], 18 | # 710: ['Crv.MustTrip.Pt.Hz', 'Crv.MustTrip.Pt.Tms'], 19 | # 712: ['Crv.Pt.W', 'Crv.Pt.Var'], 20 | # } 21 | 22 | COMMENT = ("Voltages are LN for single phase DER (e.g. 120 V nominal), LL for split phase DER " 23 | "(e.g. 240 V nominal), and LL for three phase DER (e.g., 480 V nominal).") 24 | COMMENT_POINTS = { 25 | 702: ['VNomRtg', 'VMaxRtg', 'VMinRtg', 'VNom', 'VMax', 'VMin'], 26 | } 27 | 28 | 29 | def group_parser(group, name, tabs=0, print_groups=False): 30 | """ 31 | Parse the group and return a dictionary of the fields 32 | 33 | :param group: the group to parse 34 | :param name: the name of the group 35 | :param tabs: the number of tabs to print 36 | :param print_groups: whether to print the groups 37 | 38 | :return: a dictionary of the fields 39 | """ 40 | 41 | if 'name' in group and print_groups: 42 | if name != '': 43 | print('\t' * tabs + '%s.%s (Group):' % (name, group['name'])) 44 | else: 45 | print('\t' * tabs + '%s (Group):' % (group['name'])) 46 | 47 | if 'points' in group: 48 | if name != '': 49 | pt_name = '%s.%s' % (name, group['name']) 50 | point_parser(group['points'], pt_name, tabs + 1) 51 | else: # add ID and model name to the point name 52 | pt_name = '%s.%s' % (group['points'][0]['value'], group['name']) 53 | point_parser(group['points'], pt_name, tabs + 1) 54 | 55 | if 'groups' in group: 56 | for g in group['groups']: # list of groups 57 | if name != '': 58 | gp_name = '%s.%s' % (name, group['name']) 59 | group_parser(g, gp_name, tabs + 1) 60 | else: # add ID and model name to the group name 61 | gp_name = '%s.%s' % (group['points'][0]['value'], group['name']) 62 | group_parser(g, gp_name, tabs + 1) 63 | 64 | return group 65 | 66 | 67 | def point_parser(points, name, tabs=0): 68 | """ 69 | Parse the points and return a dictionary of the fields 70 | 71 | :param points: the points to parse 72 | :param name: the name string 73 | :param tabs: the number of tabs to print 74 | :return: a dictionary of the fields 75 | """ 76 | 77 | for point in points: 78 | mandatory = False 79 | model = name.split('.')[0] # get model number 80 | for pt in COMMENT_POINTS.get(int(model), []): 81 | if pt == '.'.join(name.split('.')[2:] + [point['name']]): 82 | mandatory = True 83 | break 84 | if mandatory: 85 | if point.get('comments') is None: 86 | point['comments'] = [COMMENT] 87 | elif COMMENT not in point['comments']: 88 | point['comments'].append(COMMENT) 89 | else: 90 | # check for duplicates and remove them 91 | point['comments'] = list(set(point['comments'])) 92 | print('\t' * tabs + '%s.%s (+)' % (name, point['name'])) 93 | else: 94 | # if COMMENT in point['comments']: 95 | # point['standards'].remove(COMMENT) 96 | print('\t' * tabs + '%s.%s (-)' % (name, point['name'])) 97 | 98 | return points 99 | 100 | 101 | def main(): 102 | """ 103 | Scan json files and add new fields to the dataset 104 | 105 | :return: None 106 | """ 107 | json_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), '..', 'json') 108 | for model, pts in COMMENT_POINTS.items(): 109 | file = 'model_%s.json' % model 110 | with open(os.path.join(json_path, file), 'r') as f: 111 | data = json.load(f) 112 | 113 | print('Parsing ID %s' % data['id']) 114 | 115 | if 'points' in data: 116 | point_parser(data['points'], '') 117 | 118 | if 'group' in data: 119 | group_parser(data['group'], '') 120 | 121 | # write the new data back to the file 122 | with open(os.path.join(json_path, file), 'w') as f: 123 | json.dump(data, f, indent=4) 124 | 125 | 126 | if __name__ == '__main__': 127 | main() 128 | 129 | -------------------------------------------------------------------------------- /utils/add_sunspec_detail.py: -------------------------------------------------------------------------------- 1 | """ 2 | This script updates the SunSpec Models with new Detailed Descriptions 3 | """ 4 | import json 5 | import os 6 | 7 | 8 | # COMMENT = "Internal curve conformance checks should be conducted when AdptCrvReq is set to 1, not on point writes." 9 | # COMMENT_POINTS = { 10 | # 705: ['Crv.Pt.V', 'Crv.Pt.Var'], 11 | # 706: ['Crv.Pt.V', 'Crv.Pt.W'], 12 | # 707: ['Crv.MustTrip.Pt.V', 'Crv.MustTrip.Pt.Tms'], 13 | # 708: ['Crv.MustTrip.Pt.V', 'Crv.MustTrip.Pt.Tms'], 14 | # 709: ['Crv.MustTrip.Pt.Hz', 'Crv.MustTrip.Pt.Tms'], 15 | # 710: ['Crv.MustTrip.Pt.Hz', 'Crv.MustTrip.Pt.Tms'], 16 | # 712: ['Crv.Pt.W', 'Crv.Pt.Var'], 17 | # } 18 | 19 | COMMENT = ("Voltages are LN for single phase DER (e.g. 120 V nominal), LL for split phase DER " 20 | "(e.g. 240 V nominal), and LL for three phase DER (e.g., 480 V nominal).") 21 | COMMENT_POINTS = { 22 | 702: ['VNomRtg', 'VMaxRtg', 'VMinRtg', 'VNom', 'VMax', 'VMin'], 23 | } 24 | 25 | 26 | def group_parser(group, name, tabs=0, print_groups=False): 27 | """ 28 | Parse the group and return a dictionary of the fields 29 | 30 | :param group: the group to parse 31 | :param name: the name of the group 32 | :param tabs: the number of tabs to print 33 | :param print_groups: whether to print the groups 34 | 35 | :return: a dictionary of the fields 36 | """ 37 | 38 | if 'name' in group and print_groups: 39 | if name != '': 40 | print('\t' * tabs + '%s.%s (Group):' % (name, group['name'])) 41 | else: 42 | print('\t' * tabs + '%s (Group):' % (group['name'])) 43 | 44 | if 'points' in group: 45 | if name != '': 46 | pt_name = '%s.%s' % (name, group['name']) 47 | point_parser(group['points'], pt_name, tabs + 1) 48 | else: # add ID and model name to the point name 49 | pt_name = '%s.%s' % (group['points'][0]['value'], group['name']) 50 | point_parser(group['points'], pt_name, tabs + 1) 51 | 52 | if 'groups' in group: 53 | for g in group['groups']: # list of groups 54 | if name != '': 55 | gp_name = '%s.%s' % (name, group['name']) 56 | group_parser(g, gp_name, tabs + 1) 57 | else: # add ID and model name to the group name 58 | gp_name = '%s.%s' % (group['points'][0]['value'], group['name']) 59 | group_parser(g, gp_name, tabs + 1) 60 | 61 | return group 62 | 63 | 64 | def point_parser(points, name, tabs=0): 65 | """ 66 | Parse the points and return a dictionary of the fields 67 | 68 | :param points: the points to parse 69 | :param name: the name string 70 | :param tabs: the number of tabs to print 71 | :return: a dictionary of the fields 72 | """ 73 | 74 | for point in points: 75 | mandatory = False # flag to update point data 76 | model = name.split('.')[0] # get model number 77 | for pt in COMMENT_POINTS.get(int(model), []): 78 | if pt == '.'.join(name.split('.')[2:] + [point['name']]): 79 | mandatory = True 80 | break 81 | if mandatory: 82 | point['detail'] = COMMENT 83 | print('\t' * tabs + '%s.%s (+)' % (name, point['name'])) 84 | else: 85 | print('\t' * tabs + '%s.%s (-)' % (name, point['name'])) 86 | 87 | return points 88 | 89 | 90 | def main(): 91 | """ 92 | Scan json files and add new fields to the dataset 93 | 94 | :return: None 95 | """ 96 | json_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), '..', 'json') 97 | for model, pts in COMMENT_POINTS.items(): 98 | file = 'model_%s.json' % model 99 | with open(os.path.join(json_path, file), 'r') as f: 100 | data = json.load(f) 101 | 102 | print('Parsing ID %s' % data['id']) 103 | 104 | if 'points' in data: 105 | point_parser(data['points'], '') 106 | 107 | if 'group' in data: 108 | group_parser(data['group'], '') 109 | 110 | # write the new data back to the file 111 | with open(os.path.join(json_path, file), 'w') as f: 112 | json.dump(data, f, indent=4) 113 | 114 | 115 | if __name__ == '__main__': 116 | main() 117 | 118 | --------------------------------------------------------------------------------