{"id":2793,"date":"2023-04-06T10:29:16","date_gmt":"2023-04-06T08:29:16","guid":{"rendered":"http:\/\/ff.mhrooz.xyz\/?p=2793"},"modified":"2023-04-06T10:29:18","modified_gmt":"2023-04-06T08:29:18","slug":"openems_edge_mo_kuai","status":"publish","type":"post","link":"https:\/\/blog.mhrooz.xyz\/index.php\/2023\/04\/06\/openems_edge_mo_kuai\/","title":{"rendered":"OpenEMS Edge\u6a21\u5757"},"content":{"rendered":"\n<p>OpenEMS\u662f\u4e00\u4e2a\u80fd\u6e90\u7ba1\u7406\u7cfb\u7edf\uff0c\u4e3b\u8981\u7528\u4e8e\u80fd\u6e90\u6d88\u8017\u76d1\u6d4b\u548c\u63a7\u5236\u3002\u8fd9\u4e2a\u7cfb\u7edf\u53ef\u4ee5\u5e2e\u52a9\u7528\u6237\u8bc6\u522b\u80fd\u6e90\u6d6a\u8d39\uff0c\u964d\u4f4e\u80fd\u6e90\u6210\u672c\uff0c\u5e76\u51cf\u5c11\u73af\u5883\u5f71\u54cd\u3002OpenEMS\u80fd\u591f\u96c6\u6210\u5404\u79cd\u4e0d\u540c\u7c7b\u578b\u7684\u80fd\u6e90\u8bbe\u5907\uff0c\u5982\u592a\u9633\u80fd\u7535\u6c60\u677f\u3001\u98ce\u529b\u6da1\u8f6e\u673a\u3001\u53d1\u7535\u673a\u7b49\uff0c\u5e76\u63d0\u4f9b\u5b9e\u65f6\u7684\u6570\u636e\u76d1\u6d4b\u3001\u63a7\u5236\u548c\u5206\u6790\u3002<\/p>\n\n\n\n<p>\u672c\u7bc7\u662fOpenEMS Edge\u6a21\u5757\u6587\u6863\u7684\u5b66\u4e60\u7b14\u8bb0\u3002<\/p>\n\n\n\n<!doctype html>\n<html style='font-size:20px !important'>\n<head>\n<meta charset='UTF-8'><meta name='viewport' content='width=device-width initial-scale=1'>\n\n<link href='https:\/\/fonts.loli.net\/css?family=PT+Serif:400,400italic,700,700italic&#038;subset=latin,cyrillic-ext,cyrillic,latin-ext' rel='stylesheet' type='text\/css' \/><style type='text\/css'>html {overflow-x: initial !important;}:root { --bg-color:#ffffff; --text-color:#333333; --select-text-bg-color:#B5D6FC; --select-text-font-color:auto; --monospace:\"Lucida Console\",Consolas,\"Courier\",monospace; --title-bar-height:20px; }\n.mac-os-11 { --title-bar-height:28px; }\nhtml { font-size: 14px; background-color: var(--bg-color); color: var(--text-color); font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; }\nh1, h2, h3, h4, h5 { white-space: pre-wrap; }\nbody { margin: 0px; padding: 0px; height: auto; inset: 0px; font-size: 1rem; line-height: 1.42857; overflow-x: hidden; background: inherit; tab-size: 4; }\niframe { margin: auto; }\na.url { word-break: break-all; }\na:active, a:hover { outline: 0px; }\n.in-text-selection, ::selection { text-shadow: none; background: var(--select-text-bg-color); color: var(--select-text-font-color); }\n#write { margin: 0px auto; height: auto; width: inherit; word-break: normal; overflow-wrap: break-word; position: relative; white-space: normal; overflow-x: visible; padding-top: 36px; }\n#write.first-line-indent p { text-indent: 2em; }\n#write.first-line-indent li p, #write.first-line-indent p * { text-indent: 0px; }\n#write.first-line-indent li { margin-left: 2em; }\n.for-image #write { padding-left: 8px; padding-right: 8px; }\nbody.typora-export { padding-left: 30px; padding-right: 30px; }\n.typora-export .footnote-line, .typora-export li, .typora-export p { white-space: pre-wrap; }\n.typora-export .task-list-item input { pointer-events: none; }\n@media screen and (max-width: 500px) {\n  body.typora-export { padding-left: 0px; padding-right: 0px; }\n  #write { padding-left: 20px; padding-right: 20px; }\n}\n#write li > figure:last-child { margin-bottom: 0.5rem; }\n#write ol, #write ul { position: relative; }\nimg { max-width: 100%; vertical-align: middle; image-orientation: from-image; }\nbutton, input, select, textarea { color: inherit; font: inherit; }\ninput[type=\"checkbox\"], input[type=\"radio\"] { line-height: normal; padding: 0px; }\n*, ::after, ::before { box-sizing: border-box; }\n#write h1, #write h2, #write h3, #write h4, #write h5, #write h6, #write p, #write pre { width: inherit; }\n#write h1, #write h2, #write h3, #write h4, #write h5, #write h6, #write p { position: relative; }\np { line-height: inherit; }\nh1, h2, h3, h4, h5, h6 { break-after: avoid-page; break-inside: avoid; orphans: 4; }\np { orphans: 4; }\nh1 { font-size: 2rem; }\nh2 { font-size: 1.8rem; }\nh3 { font-size: 1.6rem; }\nh4 { font-size: 1.4rem; }\nh5 { font-size: 1.2rem; }\nh6 { font-size: 1rem; }\n.md-math-block, .md-rawblock, h1, h2, h3, h4, h5, h6, p { margin-top: 1rem; margin-bottom: 1rem; }\n.hidden { display: none; }\n.md-blockmeta { color: rgb(204, 204, 204); font-weight: 700; font-style: italic; }\na { cursor: pointer; }\nsup.md-footnote { padding: 2px 4px; background-color: rgba(238, 238, 238, 0.7); color: rgb(85, 85, 85); border-radius: 4px; cursor: pointer; }\nsup.md-footnote a, sup.md-footnote a:hover { color: inherit; text-transform: inherit; text-decoration: inherit; }\n#write input[type=\"checkbox\"] { cursor: pointer; width: inherit; height: inherit; }\nfigure { overflow-x: auto; margin: 1.2em 0px; max-width: calc(100% + 16px); padding: 0px; }\nfigure > table { margin: 0px; }\nthead, tr { break-inside: avoid; break-after: auto; }\nthead { display: table-header-group; }\ntable { border-collapse: collapse; border-spacing: 0px; width: 100%; overflow: auto; break-inside: auto; text-align: left; }\ntable.md-table td { min-width: 32px; }\n.CodeMirror-gutters { border-right: 0px; background-color: inherit; }\n.CodeMirror-linenumber { user-select: none; }\n.CodeMirror { text-align: left; }\n.CodeMirror-placeholder { opacity: 0.3; }\n.CodeMirror pre { padding: 0px 4px; }\n.CodeMirror-lines { padding: 0px; }\ndiv.hr:focus { cursor: none; }\n#write pre { white-space: pre-wrap; }\n#write.fences-no-line-wrapping pre { white-space: pre; }\n#write pre.ty-contain-cm { white-space: normal; }\n.CodeMirror-gutters { margin-right: 4px; }\n.md-fences { font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; overflow: visible; white-space: pre; background: inherit; position: relative !important; }\n.md-fences-adv-panel { width: 100%; margin-top: 10px; text-align: center; padding-top: 0px; padding-bottom: 8px; overflow-x: auto; }\n#write .md-fences.mock-cm { white-space: pre-wrap; }\n.md-fences.md-fences-with-lineno { padding-left: 0px; }\n#write.fences-no-line-wrapping .md-fences.mock-cm { white-space: pre; overflow-x: auto; }\n.md-fences.mock-cm.md-fences-with-lineno { padding-left: 8px; }\n.CodeMirror-line, twitterwidget { break-inside: avoid; }\nsvg { break-inside: avoid; }\n.footnotes { opacity: 0.8; font-size: 0.9rem; margin-top: 1em; margin-bottom: 1em; }\n.footnotes + .footnotes { margin-top: 0px; }\n.md-reset { margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: top; background: 0px 0px; text-decoration: none; text-shadow: none; float: none; position: static; width: auto; height: auto; white-space: nowrap; cursor: inherit; -webkit-tap-highlight-color: transparent; line-height: normal; font-weight: 400; text-align: left; box-sizing: content-box; direction: ltr; }\nli div { padding-top: 0px; }\nblockquote { margin: 1rem 0px; }\nli .mathjax-block, li p { margin: 0.5rem 0px; }\nli blockquote { margin: 1rem 0px; }\nli { margin: 0px; position: relative; }\nblockquote > :last-child { margin-bottom: 0px; }\nblockquote > :first-child, li > :first-child { margin-top: 0px; }\n.footnotes-area { color: rgb(136, 136, 136); margin-top: 0.714rem; padding-bottom: 0.143rem; white-space: normal; }\n#write .footnote-line { white-space: pre-wrap; }\n@media print {\n  body, html { border: 1px solid transparent; height: 99%; break-after: avoid; break-before: avoid; font-variant-ligatures: no-common-ligatures; }\n  #write { margin-top: 0px; border-color: transparent !important; padding-top: 0px !important; padding-bottom: 0px !important; }\n  .typora-export * { -webkit-print-color-adjust: exact; }\n  .typora-export #write { break-after: avoid; }\n  .typora-export #write::after { height: 0px; }\n  .is-mac table { break-inside: avoid; }\n  #write > p:nth-child(1) { margin-top: 0px; }\n  .typora-export-show-outline .typora-export-sidebar { display: none; }\n  figure { overflow-x: visible; }\n}\n.footnote-line { margin-top: 0.714em; font-size: 0.7em; }\na img, img a { cursor: pointer; }\npre.md-meta-block { font-size: 0.8rem; min-height: 0.8rem; white-space: pre-wrap; background: rgb(204, 204, 204); display: block; overflow-x: hidden; }\np > .md-image:only-child:not(.md-img-error) img, p > img:only-child { display: block; margin: auto; }\n#write.first-line-indent p > .md-image:only-child:not(.md-img-error) img { left: -2em; position: relative; }\np > .md-image:only-child { display: inline-block; width: 100%; }\n#write .MathJax_Display { margin: 0.8em 0px 0px; }\n.md-math-block { width: 100%; }\n.md-math-block:not(:empty)::after { display: none; }\n.MathJax_ref { fill: currentcolor; }\n[contenteditable=\"true\"]:active, [contenteditable=\"true\"]:focus, [contenteditable=\"false\"]:active, [contenteditable=\"false\"]:focus { outline: 0px; box-shadow: none; }\n.md-task-list-item { position: relative; list-style-type: none; }\n.task-list-item.md-task-list-item { padding-left: 0px; }\n.md-task-list-item > input { position: absolute; top: 0px; left: 0px; margin-left: -1.2em; margin-top: calc(1em - 10px); border: none; }\n.math { font-size: 1rem; }\n.md-toc { min-height: 3.58rem; position: relative; font-size: 0.9rem; border-radius: 10px; }\n.md-toc-content { position: relative; margin-left: 0px; }\n.md-toc-content::after, .md-toc::after { display: none; }\n.md-toc-item { display: block; color: rgb(65, 131, 196); }\n.md-toc-item a { text-decoration: none; }\n.md-toc-inner:hover { text-decoration: underline; }\n.md-toc-inner { display: inline-block; cursor: pointer; }\n.md-toc-h1 .md-toc-inner { margin-left: 0px; font-weight: 700; }\n.md-toc-h2 .md-toc-inner { margin-left: 2em; }\n.md-toc-h3 .md-toc-inner { margin-left: 4em; }\n.md-toc-h4 .md-toc-inner { margin-left: 6em; }\n.md-toc-h5 .md-toc-inner { margin-left: 8em; }\n.md-toc-h6 .md-toc-inner { margin-left: 10em; }\n@media screen and (max-width: 48em) {\n  .md-toc-h3 .md-toc-inner { margin-left: 3.5em; }\n  .md-toc-h4 .md-toc-inner { margin-left: 5em; }\n  .md-toc-h5 .md-toc-inner { margin-left: 6.5em; }\n  .md-toc-h6 .md-toc-inner { margin-left: 8em; }\n}\na.md-toc-inner { font-size: inherit; font-style: inherit; font-weight: inherit; line-height: inherit; }\n.footnote-line a:not(.reversefootnote) { color: inherit; }\n.reversefootnote { font-family: ui-monospace, sans-serif; }\n.md-attr { display: none; }\n.md-fn-count::after { content: \".\"; }\ncode, pre, samp, tt { font-family: var(--monospace); }\nkbd { margin: 0px 0.1em; padding: 0.1em 0.6em; font-size: 0.8em; color: rgb(36, 39, 41); background: rgb(255, 255, 255); border: 1px solid rgb(173, 179, 185); border-radius: 3px; box-shadow: rgba(12, 13, 14, 0.2) 0px 1px 0px, rgb(255, 255, 255) 0px 0px 0px 2px inset; white-space: nowrap; vertical-align: middle; }\n.md-comment { color: rgb(162, 127, 3); opacity: 0.6; font-family: var(--monospace); }\ncode { text-align: left; vertical-align: initial; }\na.md-print-anchor { white-space: pre !important; border-width: initial !important; border-style: none !important; border-color: initial !important; display: inline-block !important; position: absolute !important; width: 1px !important; right: 0px !important; outline: 0px !important; background: 0px 0px !important; text-decoration: initial !important; text-shadow: initial !important; }\n.os-windows.monocolor-emoji .md-emoji { font-family: \"Segoe UI Symbol\", sans-serif; }\n.md-diagram-panel > svg { max-width: 100%; }\n[lang=\"flow\"] svg, [lang=\"mermaid\"] svg { max-width: 100%; height: auto; }\n[lang=\"mermaid\"] .node text { font-size: 1rem; }\ntable tr th { border-bottom: 0px; }\nvideo { max-width: 100%; display: block; margin: 0px auto; }\niframe { max-width: 100%; width: 100%; border: none; }\n.highlight td, .highlight tr { border: 0px; }\nmark { background: rgb(255, 255, 0); color: rgb(0, 0, 0); }\n.md-html-inline .md-plain, .md-html-inline strong, mark .md-inline-math, mark strong { color: inherit; }\n.md-expand mark .md-meta { opacity: 0.3 !important; }\nmark .md-meta { color: rgb(0, 0, 0); }\n@media print {\n  .typora-export h1, .typora-export h2, .typora-export h3, .typora-export h4, .typora-export h5, .typora-export h6 { break-inside: avoid; }\n}\n.md-diagram-panel .messageText { stroke: none !important; }\n.md-diagram-panel .start-state { fill: var(--node-fill); }\n.md-diagram-panel .edgeLabel rect { opacity: 1 !important; }\n.md-fences.md-fences-math { font-size: 1em; }\n.md-fences-advanced:not(.md-focus) { padding: 0px; white-space: nowrap; border: 0px; }\n.md-fences-advanced:not(.md-focus) { background: inherit; }\n.typora-export-show-outline .typora-export-content { max-width: 1440px; margin: auto; display: flex; flex-direction: row; }\n.typora-export-sidebar { width: 300px; font-size: 0.8rem; margin-top: 80px; margin-right: 18px; }\n.typora-export-show-outline #write { --webkit-flex:2; flex: 2 1 0%; }\n.typora-export-sidebar .outline-content { position: fixed; top: 0px; max-height: 100%; overflow: hidden auto; padding-bottom: 30px; padding-top: 60px; width: 300px; }\n@media screen and (max-width: 1024px) {\n  .typora-export-sidebar, .typora-export-sidebar .outline-content { width: 240px; }\n}\n@media screen and (max-width: 800px) {\n  .typora-export-sidebar { display: none; }\n}\n.outline-content li, .outline-content ul { margin-left: 0px; margin-right: 0px; padding-left: 0px; padding-right: 0px; list-style: none; overflow-wrap: anywhere; }\n.outline-content ul { margin-top: 0px; margin-bottom: 0px; }\n.outline-content strong { font-weight: 400; }\n.outline-expander { width: 1rem; height: 1.42857rem; position: relative; display: table-cell; vertical-align: middle; cursor: pointer; padding-left: 4px; }\n.outline-expander::before { content: \"\uf125\"; position: relative; font-family: Ionicons; display: inline-block; font-size: 8px; vertical-align: middle; }\n.outline-item { padding-top: 3px; padding-bottom: 3px; cursor: pointer; }\n.outline-expander:hover::before { content: \"\uf123\"; }\n.outline-h1 > .outline-item { padding-left: 0px; }\n.outline-h2 > .outline-item { padding-left: 1em; }\n.outline-h3 > .outline-item { padding-left: 2em; }\n.outline-h4 > .outline-item { padding-left: 3em; }\n.outline-h5 > .outline-item { padding-left: 4em; }\n.outline-h6 > .outline-item { padding-left: 5em; }\n.outline-label { cursor: pointer; display: table-cell; vertical-align: middle; text-decoration: none; color: inherit; }\n.outline-label:hover { text-decoration: underline; }\n.outline-item:hover { border-color: rgb(245, 245, 245); background-color: var(--item-hover-bg-color); }\n.outline-item:hover { margin-left: -28px; margin-right: -28px; border-left: 28px solid transparent; border-right: 28px solid transparent; }\n.outline-item-single .outline-expander::before, .outline-item-single .outline-expander:hover::before { display: none; }\n.outline-item-open > .outline-item > .outline-expander::before { content: \"\uf123\"; }\n.outline-children { display: none; }\n.info-panel-tab-wrapper { display: none; }\n.outline-item-open > .outline-children { display: block; }\n.typora-export .outline-item { padding-top: 1px; padding-bottom: 1px; }\n.typora-export .outline-item:hover { margin-right: -8px; border-right: 8px solid transparent; }\n.typora-export .outline-expander::before { content: \"+\"; font-family: inherit; top: -1px; }\n.typora-export .outline-expander:hover::before, .typora-export .outline-item-open > .outline-item > .outline-expander::before { content: \"\u2212\"; }\n.typora-export-collapse-outline .outline-children { display: none; }\n.typora-export-collapse-outline .outline-item-open > .outline-children, .typora-export-no-collapse-outline .outline-children { display: block; }\n.typora-export-no-collapse-outline .outline-expander::before { content: \"\" !important; }\n.typora-export-show-outline .outline-item-active > .outline-item .outline-label { font-weight: 700; }\n.md-inline-math-container mjx-container { zoom: 0.95; }\nmjx-container { break-inside: avoid; }\n\n\n.CodeMirror { height: auto; }\n.CodeMirror.cm-s-inner { background: inherit; }\n.CodeMirror-scroll { overflow: auto hidden; z-index: 3; }\n.CodeMirror-gutter-filler, .CodeMirror-scrollbar-filler { background-color: rgb(255, 255, 255); }\n.CodeMirror-gutters { border-right: 1px solid rgb(221, 221, 221); background: inherit; white-space: nowrap; }\n.CodeMirror-linenumber { padding: 0px 3px 0px 5px; text-align: right; color: rgb(153, 153, 153); }\n.cm-s-inner .cm-keyword { color: rgb(119, 0, 136); }\n.cm-s-inner .cm-atom, .cm-s-inner.cm-atom { color: rgb(34, 17, 153); }\n.cm-s-inner .cm-number { color: rgb(17, 102, 68); }\n.cm-s-inner .cm-def { color: rgb(0, 0, 255); }\n.cm-s-inner .cm-variable { color: rgb(0, 0, 0); }\n.cm-s-inner .cm-variable-2 { color: rgb(0, 85, 170); }\n.cm-s-inner .cm-variable-3 { color: rgb(0, 136, 85); }\n.cm-s-inner .cm-string { color: rgb(170, 17, 17); }\n.cm-s-inner .cm-property { color: rgb(0, 0, 0); }\n.cm-s-inner .cm-operator { color: rgb(152, 26, 26); }\n.cm-s-inner .cm-comment, .cm-s-inner.cm-comment { color: rgb(170, 85, 0); }\n.cm-s-inner .cm-string-2 { color: rgb(255, 85, 0); }\n.cm-s-inner .cm-meta { color: rgb(85, 85, 85); }\n.cm-s-inner .cm-qualifier { color: rgb(85, 85, 85); }\n.cm-s-inner .cm-builtin { color: rgb(51, 0, 170); }\n.cm-s-inner .cm-bracket { color: rgb(153, 153, 119); }\n.cm-s-inner .cm-tag { color: rgb(17, 119, 0); }\n.cm-s-inner .cm-attribute { color: rgb(0, 0, 204); }\n.cm-s-inner .cm-header, .cm-s-inner.cm-header { color: rgb(0, 0, 255); }\n.cm-s-inner .cm-quote, .cm-s-inner.cm-quote { color: rgb(0, 153, 0); }\n.cm-s-inner .cm-hr, .cm-s-inner.cm-hr { color: rgb(153, 153, 153); }\n.cm-s-inner .cm-link, .cm-s-inner.cm-link { color: rgb(0, 0, 204); }\n.cm-negative { color: rgb(221, 68, 68); }\n.cm-positive { color: rgb(34, 153, 34); }\n.cm-header, .cm-strong { font-weight: 700; }\n.cm-del { text-decoration: line-through; }\n.cm-em { font-style: italic; }\n.cm-link { text-decoration: underline; }\n.cm-error { color: red; }\n.cm-invalidchar { color: red; }\n.cm-constant { color: rgb(38, 139, 210); }\n.cm-defined { color: rgb(181, 137, 0); }\ndiv.CodeMirror span.CodeMirror-matchingbracket { color: rgb(0, 255, 0); }\ndiv.CodeMirror span.CodeMirror-nonmatchingbracket { color: rgb(255, 34, 34); }\n.cm-s-inner .CodeMirror-activeline-background { background: inherit; }\n.CodeMirror { position: relative; overflow: hidden; }\n.CodeMirror-scroll { height: 100%; outline: 0px; position: relative; box-sizing: content-box; background: inherit; }\n.CodeMirror-sizer { position: relative; }\n.CodeMirror-gutter-filler, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-vscrollbar { position: absolute; z-index: 6; display: none; outline: 0px; }\n.CodeMirror-vscrollbar { right: 0px; top: 0px; overflow: hidden; }\n.CodeMirror-hscrollbar { bottom: 0px; left: 0px; overflow: auto hidden; }\n.CodeMirror-scrollbar-filler { right: 0px; bottom: 0px; }\n.CodeMirror-gutter-filler { left: 0px; bottom: 0px; }\n.CodeMirror-gutters { position: absolute; left: 0px; top: 0px; padding-bottom: 10px; z-index: 3; overflow-y: hidden; }\n.CodeMirror-gutter { white-space: normal; height: 100%; box-sizing: content-box; padding-bottom: 30px; margin-bottom: -32px; display: inline-block; }\n.CodeMirror-gutter-wrapper { position: absolute; z-index: 4; background: 0px 0px !important; border: none !important; }\n.CodeMirror-gutter-background { position: absolute; top: 0px; bottom: 0px; z-index: 4; }\n.CodeMirror-gutter-elt { position: absolute; cursor: default; z-index: 4; }\n.CodeMirror-lines { cursor: text; }\n.CodeMirror pre { border-radius: 0px; border-width: 0px; background: 0px 0px; font-family: inherit; font-size: inherit; margin: 0px; white-space: pre; overflow-wrap: normal; color: inherit; z-index: 2; position: relative; overflow: visible; }\n.CodeMirror-wrap pre { overflow-wrap: break-word; white-space: pre-wrap; word-break: normal; }\n.CodeMirror-code pre { border-right: 30px solid transparent; width: fit-content; }\n.CodeMirror-wrap .CodeMirror-code pre { border-right: none; width: auto; }\n.CodeMirror-linebackground { position: absolute; inset: 0px; z-index: 0; }\n.CodeMirror-linewidget { position: relative; z-index: 2; overflow: auto; }\n.CodeMirror-wrap .CodeMirror-scroll { overflow-x: hidden; }\n.CodeMirror-measure { position: absolute; width: 100%; height: 0px; overflow: hidden; visibility: hidden; }\n.CodeMirror-measure pre { position: static; }\n.CodeMirror div.CodeMirror-cursor { position: absolute; visibility: hidden; border-right: none; width: 0px; }\n.CodeMirror div.CodeMirror-cursor { visibility: hidden; }\n.CodeMirror-focused div.CodeMirror-cursor { visibility: inherit; }\n.cm-searching { background: rgba(255, 255, 0, 0.4); }\nspan.cm-underlined { text-decoration: underline; }\nspan.cm-strikethrough { text-decoration: line-through; }\n.cm-tw-syntaxerror { color: rgb(255, 255, 255); background-color: rgb(153, 0, 0); }\n.cm-tw-deleted { text-decoration: line-through; }\n.cm-tw-header5 { font-weight: 700; }\n.cm-tw-listitem:first-child { padding-left: 10px; }\n.cm-tw-box { border-style: solid; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-color: inherit; border-top-width: 0px !important; }\n.cm-tw-underline { text-decoration: underline; }\n@media print {\n  .CodeMirror div.CodeMirror-cursor { visibility: hidden; }\n}\n\n\n\/* meyer reset -- http:\/\/meyerweb.com\/eric\/tools\/css\/reset\/ , v2.0 | 20110126 | License: none (public domain) *\/\n\n@include-when-export url(https:\/\/fonts.loli.net\/css?family=PT+Serif:400,400italic,700,700italic&subset=latin,cyrillic-ext,cyrillic,latin-ext);\n\n\/* =========== *\/\n\n\/* pt-serif-regular - latin *\/\n\/* pt-serif-italic - latin *\/\n\/* pt-serif-700 - latin *\/\n\/* pt-serif-700italic - latin *\/\n:root {\n\t--active-file-bg-color: #dadada;\n\t--active-file-bg-color: rgba(32, 43, 51, 0.63);\n\t--active-file-text-color: white;\n\t--bg-color: #f3f2ee;\n\t--text-color: #1f0909;\n\t--control-text-color: #444;\n\t--rawblock-edit-panel-bd: #e5e5e5;\n\n\t--select-text-bg-color: rgba(32, 43, 51, 0.63);\n  --select-text-font-color: white;\n}\n\npre {\n\t--select-text-bg-color: #36284e;\n\t--select-text-font-color: #fff;\n}\n\nhtml {\n\tfont-size: 16px;\n\t-webkit-font-smoothing: antialiased;\n}\n\nhtml, body {\n\tbackground-color: #f3f2ee;\n\tfont-family: \"PT Serif\", 'Times New Roman', Times, serif;\n\tcolor: #1f0909;\n\tline-height: 1.5em;\n}\n\n\/*#write {\n\toverflow-x: auto;\n    max-width: initial;\n\tpadding-left: calc(50% - 17em);\n    padding-right: calc(50% - 17em);\n}\n\n@media (max-width: 36em) {\n \t#write {\n \t\tpadding-left: 1em;\n    \tpadding-right: 1em;\n \t}\n}*\/\n\n#write {\n\tmax-width: 40em;\n}\n\n@media only screen and (min-width: 1400px) {\n\t#write {\n\t\t\tmax-width: 914px;\n\t}\n}\n\nol li {\n\tlist-style-type: decimal;\n\tlist-style-position: outside;\n}\nul li {\n\tlist-style-type: disc;\n\tlist-style-position: outside;\n}\n\nol,\nul {\n\tlist-style: none;\n}\n\nblockquote,\nq {\n\tquotes: none;\n}\nblockquote:before,\nblockquote:after,\nq:before,\nq:after {\n\tcontent: '';\n\tcontent: none;\n}\ntable {\n\tborder-collapse: collapse;\n\tborder-spacing: 0;\n}\n\/* styles *\/\n\n\/* ====== *\/\n\n\/* headings *\/\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n\tfont-weight: bold;\n}\nh1 {\n\tfont-size: 1.875em;\n\t\/*30 \/ 16*\/\n\tline-height: 1.6em;\n\t\/* 48 \/ 30*\/\n\tmargin-top: 2em;\n}\nh2,\nh3 {\n\tfont-size: 1.3125em;\n\t\/*21 \/ 16*\/\n\tline-height: 1.15;\n\t\/*24 \/ 21*\/\n\tmargin-top: 2.285714em;\n\t\/*48 \/ 21*\/\n\tmargin-bottom: 1.15em;\n\t\/*24 \/ 21*\/\n}\nh3 {\n\tfont-weight: normal;\n}\nh4 {\n\tfont-size: 1.125em;\n\t\/*18 \/ 16*\/\n\tmargin-top: 2.67em;\n\t\/*48 \/ 18*\/\n}\nh5,\nh6 {\n\tfont-size: 1em;\n\t\/*16*\/\n}\nh1 {\n\tborder-bottom: 1px solid;\n\tmargin-bottom: 1.875em;\n\tpadding-bottom: 0.8125em;\n}\n\/* links *\/\n\na {\n\ttext-decoration: none;\n\tcolor: #065588;\n}\na:hover,\na:active {\n\ttext-decoration: underline;\n}\n\/* block spacing *\/\n\np,\nblockquote,\n.md-fences {\n\tmargin-bottom: 1.5em;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n\tmargin-bottom: 1.5em;\n}\n\/* blockquote *\/\n\nblockquote {\n\tfont-style: italic;\n\tborder-left: 5px solid;\n\tmargin-left: 2em;\n\tpadding-left: 1em;\n}\n\/* lists *\/\n\nul,\nol {\n\tmargin: 0 0 1.5em 1.5em;\n}\n\/* tables *\/\n.md-meta,.md-before, .md-after {\n\tcolor:#999;\n}\n\ntable {\n\tmargin-bottom: 1.5em;\n\t\/*24 \/ 16*\/\n\tfont-size: 1em;\n\t\/* width: 100%; *\/\n}\nthead th,\ntfoot th {\n\tpadding: .25em .25em .25em .4em;\n\ttext-transform: uppercase;\n}\nth {\n\ttext-align: left;\n}\ntd {\n\tvertical-align: top;\n\tpadding: .25em .25em .25em .4em;\n}\n\ncode,\n.md-fences {\n\tbackground-color: #dadada;\n}\n\ncode {\n\tpadding-left: 2px;\n\tpadding-right: 2px;\n}\n\n.md-fences {\n\tmargin-left: 2em;\n\tmargin-bottom: 3em;\n\tpadding-left: 1ch;\n\tpadding-right: 1ch;\n}\n\npre,\ncode,\ntt {\n\tfont-size: .875em;\n\tline-height: 1.714285em;\n}\n\/* some fixes *\/\n\nh1 {\n\tline-height: 1.3em;\n\tfont-weight: normal;\n\tmargin-bottom: 0.5em;\n}\n\np + ul,\np + ol{\n\tmargin-top: .5em;\n}\n\nh3 + ul,\nh4 + ul,\nh5 + ul,\nh6 + ul,\nh3 + ol,\nh4 + ol,\nh5 + ol,\nh6 + ol {\n\tmargin-top: .5em;\n}\n\nli > ul,\nli > ol {\n\tmargin-top: inherit;\n\tmargin-bottom: 0;\n}\n\nli ol>li {\n\tlist-style-type: lower-alpha;\n}\n\nli li ol>li{\n\tlist-style-type: lower-roman;\n}\n\nh2,\nh3 {\n\tmargin-bottom: .75em;\n}\nhr {\n\tborder-top: none;\n\tborder-right: none;\n\tborder-bottom: 1px solid;\n\tborder-left: none;\n}\nh1 {\n\tborder-color: #c5c5c5;\n}\nblockquote {\n\tborder-color: #bababa;\n\tcolor: #656565;\n}\n\nblockquote ul,\nblockquote ol {\n\tmargin-left:0;\n}\n\n.ty-table-edit {\n\tbackground-color: transparent;\n}\nthead {\n\tbackground-color: #dadada;\n}\ntr:nth-child(even) {\n\tbackground: #e8e7e7;\n}\nhr {\n\tborder-color: #c5c5c5;\n}\n.task-list{\n\tpadding-left: 1rem;\n}\n\n.md-task-list-item {\n\tpadding-left: 1.5rem;\n\tlist-style-type: none;\n}\n\n.md-task-list-item > input:before {\n\tcontent: '\\221A';\n\tdisplay: inline-block;\n\twidth: 1.25rem;\n  \theight: 1.6rem;\n\tvertical-align: middle;\n\ttext-align: center;\n\tcolor: #ddd;\n\tbackground-color: #F3F2EE;\n}\n\n.md-task-list-item > input:checked:before,\n.md-task-list-item > input[checked]:before{\n\tcolor: inherit;\n}\n\n#write pre.md-meta-block {\n\tmin-height: 1.875rem;\n\tcolor: #555;\n\tborder: 0px;\n\tbackground: transparent;\n\tmargin-top: -4px;\n\tmargin-left: 1em;\n\tmargin-top: 1em;\n}\n\n.md-image>.md-meta {\n\tcolor: #9B5146;\n}\n\n.md-image>.md-meta{\n\tfont-family: Menlo, 'Ubuntu Mono', Consolas, 'Courier New', 'Microsoft Yahei', 'Hiragino Sans GB', 'WenQuanYi Micro Hei', serif;\n}\n\n\n#write>h3.md-focus:before{\n\tleft: -1.5rem;\n\tcolor:#999;\n\tborder-color:#999;\n}\n#write>h4.md-focus:before{\n\tleft: -1.5rem;\n\ttop: .25rem;\n\tcolor:#999;\n\tborder-color:#999;\n}\n#write>h5.md-focus:before{\n\tleft: -1.5rem;\n\ttop: .0.3125rem;\n\tcolor:#999;\n\tborder-color:#999;\n}\n#write>h6.md-focus:before{\n\tleft: -1.5rem;\n\ttop: 0.3125rem;\n\tcolor:#999;\n\tborder-color:#999;\n}\n\n.md-toc:focus .md-toc-content{\n\tmargin-top: 19px;\n}\n\n.md-toc-content:empty:before{\n\tcolor: #065588;\n}\n.md-toc-item {\n\tcolor: #065588;\n}\n#write div.md-toc-tooltip {\n\tbackground-color: #f3f2ee;\n}\n\n#typora-sidebar {\n\tbackground-color: #f3f2ee;\n\t-webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.375);\n  \tbox-shadow: 0 6px 12px rgba(0, 0, 0, 0.375);\n}\n\n.pin-outline #typora-sidebar {\n\tbackground: inherit;\n\tbox-shadow: none;\n\tborder-right: 1px dashed;\n}\n\n.pin-outline #typora-sidebar:hover .outline-title-wrapper {\n\tborder-left:1px dashed;\n}\n\n.outline-item:hover {\n  background-color: #dadada;\n  border-left: 28px solid #dadada;\n  border-right: 18px solid #dadada;\n}\n\n.typora-node .outline-item:hover {\n  \tborder-right: 28px solid #dadada;\n}\n\n.outline-expander:before {\n  content: \"\\f0da\";\n  font-family: FontAwesome;\n  font-size:14px;\n  top: 1px;\n}\n\n.outline-expander:hover:before,\n.outline-item-open>.outline-item>.outline-expander:before {\n  content: \"\\f0d7\";\n}\n\n.modal-content {\n\tbackground-color: #f3f2ee;\n}\n\n.auto-suggest-container ul li {\n\tlist-style-type: none;\n}\n\n\/** UI for electron *\/\n\n.megamenu-menu,\n#top-titlebar, #top-titlebar *,\n.megamenu-content {\n\tbackground: #f3f2ee;\n\tcolor: #1f0909;\n}\n\n.megamenu-menu-header {\n\tborder-bottom: 1px dashed #202B33;\n}\n\n.megamenu-menu {\n\tbox-shadow: none;\n\tborder-right: 1px dashed;\n}\n\nheader, .context-menu, .megamenu-content, footer {\n\tfont-family: \"PT Serif\", 'Times New Roman', Times, serif;\n    color: #1f0909;\n}\n\n#megamenu-back-btn {\n\tcolor: #1f0909;\n\tborder-color: #1f0909;\n}\n\n.megamenu-menu-header #megamenu-menu-header-title:before {\n\tcolor: #1f0909;\n}\n\n.megamenu-menu-list li a:hover, .megamenu-menu-list li a.active {\n\tcolor: inherit;\n\tbackground-color: #e8e7df;\n}\n\n.long-btn:hover {\n\tbackground-color: #e8e7df;\n}\n\n#recent-file-panel tbody tr:nth-child(2n-1) {\n    background-color: transparent !important;\n}\n\n.megamenu-menu-panel tbody tr:hover td:nth-child(2) {\n    color: inherit;\n}\n\n.megamenu-menu-panel .btn {\n\tbackground-color: #D2D1D1;\n}\n\n.btn-default {\n\tbackground-color: transparent;\n}\n\n.typora-sourceview-on #toggle-sourceview-btn,\n.ty-show-word-count #footer-word-count {\n\tbackground: #c7c5c5;\n}\n\n#typora-quick-open {\n    background-color: inherit;\n}\n\n.md-diagram-panel {\n\tmargin-top: 8px;\n}\n\n.file-list-item-file-name {\n\tfont-weight: initial;\n}\n\n.file-list-item-summary {\n\topacity: 1;\n}\n\n.file-list-item {\n\tcolor: #777;\n}\n\n.file-list-item.active {\n\tbackground-color: inherit;\n\tcolor: black;\n}\n\n.ty-side-sort-btn.active {\n\tbackground-color: inherit;\n}\n\n.file-list-item.active .file-list-item-file-name  {\n\tfont-weight: bold;\n}\n\n.file-list-item{\n    opacity:1 !important;\n}\n\n.file-library-node.active>.file-node-background{\n\tbackground-color: rgba(32, 43, 51, 0.63);\n\tbackground-color: var(--active-file-bg-color);\n}\n\n.file-tree-node.active>.file-node-content{\n\tcolor: white;\n\tcolor: var(--active-file-text-color);\n}\n\n.md-task-list-item>input {\n\tmargin-left: -1.7em;\n\tmargin-top: calc(1rem - 12px);\n\t-webkit-appearance: button;\n}\n\ninput {\n\tborder: 1px solid #aaa;\n}\n\n.megamenu-menu-header #megamenu-menu-header-title,\n.megamenu-menu-header:hover, \n.megamenu-menu-header:focus {\n\tcolor: inherit;\n}\n\n.dropdown-menu .divider {\n\tborder-color: #e5e5e5;\n\topacity: 1;\n}\n\n\/* https:\/\/github.com\/typora\/typora-issues\/issues\/2046 *\/\n.os-windows-7 strong,\n.os-windows-7 strong  {\n\tfont-weight: 760;\n}\n\n.ty-preferences .btn-default {\n\tbackground: transparent;\n}\n\n.ty-preferences .window-header {\n\tborder-bottom: 1px dashed #202B33;\n\tbox-shadow: none;\n}\n\n#sidebar-loading-template, #sidebar-loading-template.file-list-item {\n\tcolor: #777;\n}\n\n.searchpanel-search-option-btn.active {\n\tbackground: #777;\n\tcolor: white;\n}\n\n.export-detail, .light .export-detail, \n.light .export-item.active, \n.light .export-items-list-control {\n\tbackground: #e0e0e0;\n\tborder-radius: 2px;\n\tfont-weight: 700;\n\tcolor: inherit\n}\n\n\n<\/style><title>OpenEMS<\/title>\n<\/head>\n<body class='typora-export os-windows'><div class='typora-export-content'>\n<div id='write'  class=''><h1 id='openems----edge'><span>OpenEMS &#8212; EDGE<\/span><\/h1><div class='md-toc' mdtype='toc'><p class=\"md-toc-content\" role=\"list\"><span role=\"listitem\" class=\"md-toc-item md-toc-h1\" data-ref=\"n0\"><a class=\"md-toc-inner\" href=\"#openems----edge\">OpenEMS &#8212; EDGE<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h2\" data-ref=\"n2\"><a class=\"md-toc-inner\" href=\"#architecture\">Architecture<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h3\" data-ref=\"n4\"><a class=\"md-toc-inner\" href=\"#2--ipo\u6a21\u578b\">2.  IPO\u6a21\u578b<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h3\" data-ref=\"n5\"><a class=\"md-toc-inner\" href=\"#\"><\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h4\" data-ref=\"n6\"><a class=\"md-toc-inner\" href=\"#input\">Input<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h4\" data-ref=\"n8\"><a class=\"md-toc-inner\" href=\"#process\">Process<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h4\" data-ref=\"n10\"><a class=\"md-toc-inner\" href=\"#output\">Output<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h3\" data-ref=\"n12\"><a class=\"md-toc-inner\" href=\"#3--controller\">3.  Controller<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h3\" data-ref=\"n15\"><a class=\"md-toc-inner\" href=\"#4-scheduler\">4. Scheduler<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h3\" data-ref=\"n20\"><a class=\"md-toc-inner\" href=\"#5-cycle\">5. Cycle<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h3\" data-ref=\"n23\"><a class=\"md-toc-inner\" href=\"#6-process-image\">6. Process Image<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h3\" data-ref=\"n27\"><a class=\"md-toc-inner\" href=\"#7-asynchronous-threads-and--cycle-synchronization\">7. Asynchronous threads and  Cycle synchronization<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h3\" data-ref=\"n30\"><a class=\"md-toc-inner\" href=\"#8-architecture-scheme\">8. Architecture scheme<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h2\" data-ref=\"n32\"><a class=\"md-toc-inner\" href=\"#configuration\">Configuration<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h3\" data-ref=\"n34\"><a class=\"md-toc-inner\" href=\"#1--manage-configuration\">1.  Manage Configuration<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h4\" data-ref=\"n35\"><a class=\"md-toc-inner\" href=\"#11-via-openems-ui\">1.1 Via OpenEMS UI<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h4\" data-ref=\"n39\"><a class=\"md-toc-inner\" href=\"#12-via-apache-felix-web-console\">1.2. Via Apache Felix Web Console<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h4\" data-ref=\"n43\"><a class=\"md-toc-inner\" href=\"#13-via-json-rpc\">1.3 Via Json-RPC<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h5\" data-ref=\"n53\"><a class=\"md-toc-inner\" href=\"#\u4f8b\u5b50\">\u4f8b\u5b50<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h4\" data-ref=\"n58\"><a class=\"md-toc-inner\" href=\"#14-by-editingpreseeding-configuration-files\">1.4 By editing\/preseeding configuration files<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h3\" data-ref=\"n61\"><a class=\"md-toc-inner\" href=\"#2-edge-config\">2. Edge-Config<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h4\" data-ref=\"n65\"><a class=\"md-toc-inner\" href=\"#nature-1\">Nature<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h4\" data-ref=\"n69\"><a class=\"md-toc-inner\" href=\"#channel\">Channel<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h4\" data-ref=\"n78\"><a class=\"md-toc-inner\" href=\"#factory\">Factory<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h4\" data-ref=\"n82\"><a class=\"md-toc-inner\" href=\"#instance\">Instance<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h2\" data-ref=\"n93\"><a class=\"md-toc-inner\" href=\"#nature-2\">Nature<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h3\" data-ref=\"n104\"><a class=\"md-toc-inner\" href=\"#1-battery\">1. Battery<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h3\" data-ref=\"n108\"><a class=\"md-toc-inner\" href=\"#2-battery-inverter\">2. Battery-Inverter<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h3\" data-ref=\"n110\"><a class=\"md-toc-inner\" href=\"#3-controller\">3. Controller<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h3\" data-ref=\"n111\"><a class=\"md-toc-inner\" href=\"#4-ess\">4. ESS<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h4\" data-ref=\"n126\"><a class=\"md-toc-inner\" href=\"#ess\">ESS<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h4\" data-ref=\"n129\"><a class=\"md-toc-inner\" href=\"#symmetricessreadonly\">SymmetricEssReadOnly<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h4\" data-ref=\"n134\"><a class=\"md-toc-inner\" href=\"#essdccharger\">EssDcCharger<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h3\" data-ref=\"n112\"><a class=\"md-toc-inner\" href=\"#5-evcselectric-vehicle-charging-station\">5. EVCS(Electric Vehicle Charging Station)<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h3\" data-ref=\"n113\"><a class=\"md-toc-inner\" href=\"#6-io\">6. I\/O<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h3\" data-ref=\"n114\"><a class=\"md-toc-inner\" href=\"#7-meter\">7. Meter<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h3\" data-ref=\"n115\"><a class=\"md-toc-inner\" href=\"#8-predictor\">8. Predictor<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h3\" data-ref=\"n116\"><a class=\"md-toc-inner\" href=\"#9-scheduler\">9. Scheduler<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h3\" data-ref=\"n117\"><a class=\"md-toc-inner\" href=\"#10-thermometer\">10. Thermometer<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h3\" data-ref=\"n118\"><a class=\"md-toc-inner\" href=\"#11-timedata\">11. Timedata<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h3\" data-ref=\"n119\"><a class=\"md-toc-inner\" href=\"#12-time-of-use-tariff-api\">12. Time-Of-Use Tariff API<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h2\" data-ref=\"n161\"><a class=\"md-toc-inner\" href=\"#scheduler\">Scheduler<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h3\" data-ref=\"n173\"><a class=\"md-toc-inner\" href=\"#1-all-alphabetically\">1. All-Alphabetically<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h3\" data-ref=\"n180\"><a class=\"md-toc-inner\" href=\"#2-daily\">2. Daily<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h4\" data-ref=\"n183\"><a class=\"md-toc-inner\" href=\"#21-configuration\">2.1 Configuration<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h3\" data-ref=\"n206\"><a class=\"md-toc-inner\" href=\"#3-fixed-order\">3. Fixed Order<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h2\" data-ref=\"n210\"><a class=\"md-toc-inner\" href=\"#controller\">Controller<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h3\" data-ref=\"n236\"><a class=\"md-toc-inner\" href=\"#1-api-backend\">1. API Backend<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h3\" data-ref=\"n244\"><a class=\"md-toc-inner\" href=\"#2-api-modbus\">2. API Modbus<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h3\" data-ref=\"n278\"><a class=\"md-toc-inner\" href=\"#3-api-mqtt\">3. API MQTT<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h3\" data-ref=\"n365\"><a class=\"md-toc-inner\" href=\"#4-rest-api-controller\">4. REST-API Controller<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h4\" data-ref=\"n385\"><a class=\"md-toc-inner\" href=\"#41-endpoint-restchannelcomponent-idchannel-id\">4.1 <code>Endpoint \/rest\/channel\/&lt;Component-ID&gt;\/&lt;Channel-ID&gt;<\/code><\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h5\" data-ref=\"n400\"><a class=\"md-toc-inner\" href=\"#411-get\">4.1.1 GET <\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h5\" data-ref=\"n419\"><a class=\"md-toc-inner\" href=\"#412-post\">4.1.2 POST<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h4\" data-ref=\"n429\"><a class=\"md-toc-inner\" href=\"#42-endpoint-jsonrpc\">4.2 EndPoint &#8216;\/jsonrpc&#8217;<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h5\" data-ref=\"n437\"><a class=\"md-toc-inner\" href=\"#421-getedgeconfig\">4.2.1 getEdgeConfig<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h5\" data-ref=\"n439\"><a class=\"md-toc-inner\" href=\"#422-componentjsonapi\">4.2.2 componentJsonAPI<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h6\" data-ref=\"n444\"><a class=\"md-toc-inner\" href=\"#4221-getmodbusprotocol\">4.2.2.1 getModbusProtocol<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h5\" data-ref=\"n447\"><a class=\"md-toc-inner\" href=\"#423-updatecomponentconfig\">4.2.3 updateComponentConfig<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h3\" data-ref=\"n456\"><a class=\"md-toc-inner\" href=\"#5-api-websocket\">5. Api Websocket<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h3\" data-ref=\"n459\"><a class=\"md-toc-inner\" href=\"#6-asymmetric-balancing-cos-phi\">6. Asymmetric Balancing Cos-Phi<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h3\" data-ref=\"n462\"><a class=\"md-toc-inner\" href=\"#7-asymmetric-fix-active-power\">7. Asymmetric Fix Active Power<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h3\" data-ref=\"n466\"><a class=\"md-toc-inner\" href=\"#8-asymmetric-fix-reactive-power\">8. Asymmetric Fix Reactive Power<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h3\" data-ref=\"n470\"><a class=\"md-toc-inner\" href=\"#9-asymmetric-peak-shaving\">9. Asymmetric Peak-Shaving<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h3\" data-ref=\"n474\"><a class=\"md-toc-inner\" href=\"#10-asymmetric-phase-rectification\">10. Asymmetric Phase Rectification<\/a><\/span><span role=\"listitem\" class=\"md-toc-item md-toc-h3\" data-ref=\"n477\"><a class=\"md-toc-inner\" href=\"#11-channel-threshold\">11. Channel-Threshold<\/a><\/span><\/p><\/div><h2 id='architecture'><span>Architecture<\/span><\/h2><p><span>\u62bd\u8c61\u8bbe\u5907\u901a\u4fe1\u548c\u63a7\u5236\u7b97\u6cd5<\/span><\/p><h3 id='2--ipo\u6a21\u578b'><span>2.  IPO\u6a21\u578b<\/span><\/h3><h3><img decoding=\"async\" src=\"https:\/\/openems.github.io\/openems.io\/openems\/latest\/_images\/input-process-output.png\" referrerpolicy=\"no-referrer\" alt=\"Input-Process-Output model\"><\/h3><h4 id='input'><span>Input<\/span><\/h4><p><span>\u7535\u6c60\u6570\u636e<\/span><\/p><h4 id='process'><span>Process<\/span><\/h4><p><span>\u6839\u636e\u8f93\u5165\u8fdb\u884c\u5904\u7406\uff0c\u662f\u5426\u5e94\u8be5\u6253\u5f00\u5145\u7535\u5f00\u5173<\/span><\/p><h4 id='output'><span>Output<\/span><\/h4><p><span>\u6253\u5f00\/\u5173\u95ed\u5f00\u5173<\/span><\/p><h3 id='3--controller'><span>3.  Controller<\/span><\/h3><p><span>\u6839\u636eChannel Data\uff0c\u5904\u7406\u4e1a\u52a1\u903b\u8f91\u3002\u4f8b\u5b50\uff1a\u63a7\u5236\u7b97\u6cd5\uff0c\u7528\u4e8e\u8bc4\u4f30\u8f93\u5165\u6570\u636e\uff0c\u5b9a\u4e49\u63a7\u5236\u7684\u786c\u4ef6\u7684\u884c\u4e3a\u3002\u786e\u4fdd\u5916\u90e8\u7cfb\u7edf\u7684\u4efb\u4f55\u8bbe\u7f6e\u70b9\u8bf7\u6c42\u80fd\u591f\u88ab\u5d4c\u5165\u5230\u672c\u5730\u7684\u4f18\u5148\u7ea7\u7cfb\u7edf\uff1f<\/span><\/p><p><span>\u4f8b\u5982\u7535\u6c60\u5145\u7535\u5e94\u8be5\u88ab\u5355\u72ec\u8fde\u63a5\u5230\u5185\u90e8\u63a7\u5236\u7b97\u6cd5\u7684\u4e00\u4e2a\u63a7\u5236\u5668\u3002<\/span><\/p><h3 id='4-scheduler'><span>4. Scheduler<\/span><\/h3><p><span>\u5f53\u4e24\u4e2aController\u8c03\u7528\u7edf\u4e00\u8d44\u6e90\uff0c\u4f8b\u5982\u4e00\u4e2a\u5f00\u5173\u65f6\uff0c\u89c4\u5b9a\u4f18\u5148\u7ea7\uff0c\u907f\u514d\u51b2\u7a81\u3002<\/span><\/p><p><img decoding=\"async\" src=\"https:\/\/raw.githubusercontent.com\/Mhrooz\/pics\/master\/PicGo\/input-process-scheduler-output.png\" referrerpolicy=\"no-referrer\" alt=\"IPO model with Scheduler and Controllers\"><\/p><p><span>\u6267\u884c\u8fc7\u7a0b\uff1a\u4f7f\u7528\u4e00\u4e2aScheduler\u5b9e\u73b0\u6765\u63a5\u6536\u4e00\u4e2aController\u5217\u8868\u3002Controllers\u5c31\u8fd9\u6837\u88ab\u5b9a\u4e49\u4e86\u4e00\u4e2a\u6267\u884c\u987a\u5e8f\u3002Controller\u5217\u8868\u540e\u9762\u7684controller\u5c06\u4e0d\u88ab\u5141\u8bb8\u4fee\u6539\u524d\u9762controller\u5df2\u7ecf\u5199\u597d\u7684\u7ed3\u679c\u3002<\/span><\/p><p><img decoding=\"async\" src=\"https:\/\/raw.githubusercontent.com\/Mhrooz\/pics\/master\/PicGo\/scheduler-ess-priority.png\" referrerpolicy=\"no-referrer\" alt=\"Prioritization of ESS power setpoints\"><\/p><h3 id='5-cycle'><span>5. Cycle<\/span><\/h3><p><span>\u6574\u4e2a\u6a21\u578b\u662f\u5728Cycle\u4e2d\u6267\u884c\uff0c\u4f1a\u53d1\u51faCycle\u4e8b\u4ef6\u6765\u548c\u5176\u4ed6\u7ec4\u4ef6\u540c\u6b65<\/span><\/p><p><img decoding=\"async\" src=\"https:\/\/raw.githubusercontent.com\/Mhrooz\/pics\/master\/PicGo\/edge-cycle.png\" referrerpolicy=\"no-referrer\" alt=\"OpenEMS Edge Cycle\"><\/p><h3 id='6-process-image'><span>6. Process Image<\/span><\/h3><p><span>Process Image\u7c7b\u4f3c\u4e8e\u5171\u4eab\u5185\u5b58\u533a\uff0c\u6570\u636e\u7684\u751f\u4ea7\u8005\u548c\u6d88\u8d39\u8005\u5c06\u5728\u8fd9\u4e2a\u533a\u57df\u5b58\u53d6\u6570\u636e\uff0c\u907f\u514d\u76f4\u63a5\u4ea4\u4e92\u9020\u6210\u6df7\u4e71\u3002\u6bcf\u4e2a\u901a\u9053\u5b58\u50a8\u4e00\u79cd\u6570\u636e\uff0c\u6bd4\u5982\u7535\u6c60\u6e29\u5ea6\u7b49\u3002\u6bcf\u4e2a\u8ba1\u7b97\u5468\u671f\u901a\u9053\u6570\u636e\u66f4\u65b0\u4e00\u6b21\u3002<\/span><\/p><p><span>\u6240\u4ee5\u6709\u4e86value\u5b57\u6bb5\u548cnextvalue\u5b57\u6bb5\uff0cvalue\u5b57\u6bb5\u7528\u4e8e\u6d88\u8d39\u8005\u8bfb\u53d6\uff0cnextvalue\u7528\u4e8e\u751f\u4ea7\u8005\u5199\u5165\u3002<\/span><\/p><p><span>\u53ea\u6709\u518d\u4e0a\u56feProcess Image\u9636\u6bb5\uff0cnext value\u4f1a\u590d\u5236\u503c\u5230Value\u5b57\u6bb5\uff0c\u4fdd\u8bc1\u5728\u8ba1\u7b97\u9636\u6bb5\u503c\u4e0d\u4f1a\u53d8\u3002<\/span><\/p><h3 id='7-asynchronous-threads-and--cycle-synchronization'><span>7. Asynchronous threads and  Cycle synchronization<\/span><\/h3><p><span>\u4e0e\u5916\u90e8\u786c\u4ef6\u548c\u670d\u52a1\u7684\u901a\u4fe1\u65f6\u5f02\u6b65\u7684\uff0c\u53ef\u4ee5\u907f\u514d\u963b\u585e\u7cfb\u7edf\uff0c\u540c\u65f6\u53ef\u4ee5\u4e0eCycle\u540c\u6b65\u3002<\/span><\/p><p><img decoding=\"async\" src=\"https:\/\/raw.githubusercontent.com\/Mhrooz\/pics\/master\/PicGo\/cycle-modbus.png\" referrerpolicy=\"no-referrer\" alt=\"Synchronize Cycle with Modbus read\/write\"><\/p><h3 id='8-architecture-scheme'><span>8. Architecture scheme<\/span><\/h3><p><img decoding=\"async\" src=\"https:\/\/raw.githubusercontent.com\/Mhrooz\/pics\/master\/PicGo\/device-nature-channel-scheduler-controller.png\" referrerpolicy=\"no-referrer\" alt=\"Architecture scheme\"><\/p><h2 id='configuration'><span>Configuration<\/span><\/h2><p><span>\u8981\u6c42\u672c\u5730\u7684EMS\u673a\u5668\u6709\u4e00\u4e2a\u9759\u6001\u914d\u7f6e\uff0c\u58f0\u660e\u53ef\u7528\u786c\u4ef6\u548c\u670d\u52a1\u4ee5\u53ca\u6fc0\u6d3b\u7684\u63a7\u5236\u7b97\u6cd5\uff0c\u53c2\u6570\u3002\u7a0b\u5e8f\u4e0d\u5e94\u9891\u7e41\u66f4\u6539\u914d\u7f6e\u3002<\/span><\/p><h3 id='1--manage-configuration'><span>1.  Manage Configuration<\/span><\/h3><h4 id='11-via-openems-ui'><span>1.1 Via OpenEMS UI<\/span><\/h4><p><span>\u53ef\u4ee5\u914d\u7f6eOpen EMS Edge\u76f4\u63a5\u94fe\u63a5\u8fd8\u662f\u901a\u8fc7\u540e\u7aef\u8fde\u63a5<\/span><\/p><p><img decoding=\"async\" src=\"https:\/\/raw.githubusercontent.com\/Mhrooz\/pics\/master\/PicGo\/ui-component-install-overview.png\" referrerpolicy=\"no-referrer\" alt=\"OpenEMS UI Install Components Overview\"><\/p><p><img decoding=\"async\" src=\"https:\/\/raw.githubusercontent.com\/Mhrooz\/pics\/master\/PicGo\/ui-component-install.png\" referrerpolicy=\"no-referrer\" alt=\"OpenEMS UI Install Component\"><\/p><h4 id='12-via-apache-felix-web-console'><span>1.2. Via Apache Felix Web Console<\/span><\/h4><p><span>\u901a\u8fc78080\u7aef\u53e3\u7684Apache Felix Web Console<\/span><\/p><p>&nbsp;<\/p><p><img decoding=\"async\" src=\"https:\/\/openems.github.io\/openems.io\/openems\/latest\/_images\/apache-felix-console-configuration.png\" referrerpolicy=\"no-referrer\" alt=\"img\"><\/p><h4 id='13-via-json-rpc'><span>1.3 Via Json-RPC<\/span><\/h4><p><span>JSON-RPC\u534f\u8bae\u65f6\u518d\u6574\u4e2a\u9879\u76ee\u4e0a\u4f7f\u7528\u6765\u76f4\u63a5\u5728Edge\u6216\u8005\u662fBackend\u4e0a\u76f4\u63a5\u8bbf\u95ee\u529f\u80fd\u3002<\/span><\/p><p><span>\u8c03\u6574\u914d\u7f6e\u7684json\u4ee3\u7801\uff1a<\/span><\/p><pre class=\"md-fences md-end-block md-fences-with-lineno ty-contain-cm modeLoaded\" spellcheck=\"false\" lang=\"json\"><div class=\"CodeMirror cm-s-inner cm-s-null-scroll CodeMirror-wrap\" lang=\"json\"><div style=\"overflow: hidden; position: relative; width: 3px; height: 0px; top: 13.425px; left: 45px;\"><textarea autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\" tabindex=\"0\" style=\"position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;\"><\/textarea><\/div><div class=\"CodeMirror-scrollbar-filler\" cm-not-content=\"true\"><\/div><div class=\"CodeMirror-gutter-filler\" cm-not-content=\"true\"><\/div><div class=\"CodeMirror-scroll\" tabindex=\"-1\"><div class=\"CodeMirror-sizer\" style=\"margin-left: 41px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;\"><div style=\"position: relative; top: 0px;\"><div class=\"CodeMirror-lines\" role=\"presentation\"><div role=\"presentation\" style=\"position: relative; outline: none;\"><div class=\"CodeMirror-measure\"><pre><span>xxxxxxxxxx<\/span><\/pre><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\"><div>10<\/div><\/div><\/div><div class=\"CodeMirror-measure\"><\/div><div style=\"position: relative; z-index: 1;\"><\/div><div class=\"CodeMirror-code\" role=\"presentation\" style=\"\"><div class=\"CodeMirror-activeline\" style=\"position: relative;\"><div class=\"CodeMirror-activeline-background CodeMirror-linebackground\"><\/div><div class=\"CodeMirror-gutter-background CodeMirror-activeline-gutter\" style=\"left: -41px; width: 41px;\"><\/div><div class=\"CodeMirror-gutter-wrapper CodeMirror-activeline-gutter\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt CodeMirror-linenumber-show\" style=\"left: 0px; width: 32px;\">1<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\">{<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">2<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp;<span class=\"cm-string cm-property\">\"method\"<\/span>: <span class=\"cm-string\">\"createComponentConfig\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">3<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp;<span class=\"cm-string cm-property\">\"params\"<\/span>: {<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">4<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"factoryPid\"<\/span>: <span class=\"cm-variable\">string<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">5<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"properties\"<\/span>: [{<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">6<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"name\"<\/span>: <span class=\"cm-variable\">string<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">7<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"value\"<\/span>: <span class=\"cm-variable\">any<\/span><\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">8<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp;  }]<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">9<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\">  }<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt CodeMirror-linenumber-show\" style=\"left: 0px; width: 32px;\">10<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\">}<\/span><\/pre><\/div><\/div><\/div><\/div><\/div><\/div><div style=\"position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 309px;\"><\/div><div class=\"CodeMirror-gutters\" style=\"height: 309px; left: 0px;\"><div class=\"CodeMirror-gutter CodeMirror-linenumbers\" style=\"width: 40px;\"><\/div><\/div><\/div><\/div><\/pre><pre class=\"md-fences md-end-block md-fences-with-lineno ty-contain-cm modeLoaded\" spellcheck=\"false\" lang=\"json\"><div class=\"CodeMirror cm-s-inner cm-s-null-scroll CodeMirror-wrap\" lang=\"json\"><div style=\"overflow: hidden; position: relative; width: 3px; height: 0px; top: 13.425px; left: 45px;\"><textarea autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\" tabindex=\"0\" style=\"position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;\"><\/textarea><\/div><div class=\"CodeMirror-scrollbar-filler\" cm-not-content=\"true\"><\/div><div class=\"CodeMirror-gutter-filler\" cm-not-content=\"true\"><\/div><div class=\"CodeMirror-scroll\" tabindex=\"-1\"><div class=\"CodeMirror-sizer\" style=\"margin-left: 41px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;\"><div style=\"position: relative; top: 0px;\"><div class=\"CodeMirror-lines\" role=\"presentation\"><div role=\"presentation\" style=\"position: relative; outline: none;\"><div class=\"CodeMirror-measure\"><pre><span>xxxxxxxxxx<\/span><\/pre><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\"><div>10<\/div><\/div><\/div><div class=\"CodeMirror-measure\"><\/div><div style=\"position: relative; z-index: 1;\"><\/div><div class=\"CodeMirror-code\" role=\"presentation\" style=\"\"><div class=\"CodeMirror-activeline\" style=\"position: relative;\"><div class=\"CodeMirror-activeline-background CodeMirror-linebackground\"><\/div><div class=\"CodeMirror-gutter-background CodeMirror-activeline-gutter\" style=\"left: -41px; width: 41px;\"><\/div><div class=\"CodeMirror-gutter-wrapper CodeMirror-activeline-gutter\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt CodeMirror-linenumber-show\" style=\"left: 0px; width: 32px;\">1<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\">{<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">2<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp;<span class=\"cm-string cm-property\">\"method\"<\/span>: <span class=\"cm-string\">\"updateComponentConfig\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">3<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp;<span class=\"cm-string cm-property\">\"params\"<\/span>: {<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">4<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"componentId\"<\/span>: <span class=\"cm-variable\">string<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">5<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"properties\"<\/span>: [{<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">6<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"name\"<\/span>: <span class=\"cm-variable\">string<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">7<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"value\"<\/span>: <span class=\"cm-variable\">any<\/span><\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">8<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp;  }]<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">9<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\">  }<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt CodeMirror-linenumber-show\" style=\"left: 0px; width: 32px;\">10<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\">}<\/span><\/pre><\/div><\/div><\/div><\/div><\/div><\/div><div style=\"position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 309px;\"><\/div><div class=\"CodeMirror-gutters\" style=\"height: 309px; left: 0px;\"><div class=\"CodeMirror-gutter CodeMirror-linenumbers\" style=\"width: 40px;\"><\/div><\/div><\/div><\/div><\/pre><ul><li><p><code>componentID<\/code><span>: component\u7684\u72ec\u7279ID(unique ID )<\/span><\/p><\/li><li><p><code>properties<\/code><span>: \u5e26\u6709<\/span><code>name<\/code><span>\u548c<\/span><code>value<\/code><span>\u7684\u96c6\u5408<\/span><\/p><\/li><\/ul><h5 id='\u4f8b\u5b50'><span>\u4f8b\u5b50<\/span><\/h5><p><span>Symmetric Balancing Schedule Controller<\/span>\n<span>\u5bf9\u79f0\u5747\u8861\u8c03\u5ea6\u63a7\u5236\u5668<\/span><\/p><p><span>\u8fd9\u4e2a\u63a7\u5236\u5668\u7528\u6765\u63a7\u5236ESS\u7684\u5145\u7535\u548c\u653e\u7535\uff0c\u6765\u4f7f\u5f97\u80fd\u591f\u8fbe\u5230\u7535\u7f51\u8fde\u63a5\u70b9\u8fbe\u5230\u7ed9\u5b9a\u7684\u529f\u7387\u3002 \u8fd9\u4e2a\u7ed9\u5b9a\u7684\u529f\u7387\u5728JSON\u4ee3\u7801\u4e2d\u901a\u8fc7\u65f6\u95f4\u6233\u4f53\u73b0\u3002\u4f7f\u7528updateComponentConfig\u53ef\u4ee5\u66f4\u65b0\u8bbe\u5b9a\u70b9<\/span><\/p><pre class=\"md-fences md-end-block md-fences-with-lineno ty-contain-cm modeLoaded\" spellcheck=\"false\" lang=\"json\" style=\"break-inside: unset;\"><div class=\"CodeMirror cm-s-inner cm-s-null-scroll CodeMirror-wrap\" lang=\"json\"><div style=\"overflow: hidden; position: relative; width: 3px; height: 0px; top: 13.425px; left: 45px;\"><textarea autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\" tabindex=\"0\" style=\"position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;\"><\/textarea><\/div><div class=\"CodeMirror-scrollbar-filler\" cm-not-content=\"true\"><\/div><div class=\"CodeMirror-gutter-filler\" cm-not-content=\"true\"><\/div><div class=\"CodeMirror-scroll\" tabindex=\"-1\"><div class=\"CodeMirror-sizer\" style=\"margin-left: 41px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;\"><div style=\"position: relative; top: 0px;\"><div class=\"CodeMirror-lines\" role=\"presentation\"><div role=\"presentation\" style=\"position: relative; outline: none;\"><div class=\"CodeMirror-measure\"><pre><span>xxxxxxxxxx<\/span><\/pre><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\"><div>25<\/div><\/div><\/div><div class=\"CodeMirror-measure\"><\/div><div style=\"position: relative; z-index: 1;\"><\/div><div class=\"CodeMirror-code\" role=\"presentation\" style=\"\"><div class=\"CodeMirror-activeline\" style=\"position: relative;\"><div class=\"CodeMirror-activeline-background CodeMirror-linebackground\"><\/div><div class=\"CodeMirror-gutter-background CodeMirror-activeline-gutter\" style=\"left: -41px; width: 41px;\"><\/div><div class=\"CodeMirror-gutter-wrapper CodeMirror-activeline-gutter\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt CodeMirror-linenumber-show\" style=\"left: 0px; width: 32px;\">1<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\">{<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">2<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp;<span class=\"cm-string cm-property\">\"jsonrpc\"<\/span>: <span class=\"cm-string\">\"2.0\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">3<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp;<span class=\"cm-string cm-property\">\"id\"<\/span>: <span class=\"cm-variable\">UUID<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">4<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp;<span class=\"cm-string cm-property\">\"method\"<\/span>: <span class=\"cm-string\">\"updateComponentConfig\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">5<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp;<span class=\"cm-string cm-property\">\"params\"<\/span>: {<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">6<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"componentId\"<\/span>: <span class=\"cm-string\">\"ctrlBalancingSchedule0\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">7<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"properties\"<\/span>: [<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">8<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp;  {<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">9<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"name\"<\/span>: <span class=\"cm-string\">\"schedule\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt CodeMirror-linenumber-show\" style=\"left: 0px; width: 32px;\">10<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"value\"<\/span>: [<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">11<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp; &nbsp; &nbsp;  {<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">12<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"startTimestamp\"<\/span>: <span class=\"cm-number\">1577836800<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">13<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"duration\"<\/span>: <span class=\"cm-number\">900<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">14<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"activePowerSetPoint\"<\/span>: <span class=\"cm-number\">0<\/span><\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">15<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp; &nbsp; &nbsp;  },<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">16<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp; &nbsp; &nbsp;  {<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">17<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"startTimestamp\"<\/span>: <span class=\"cm-number\">1577837700<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">18<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"duration\"<\/span>: <span class=\"cm-number\">900<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">19<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"activePowerSetPoint\"<\/span>: <span class=\"cm-operator\">-<\/span><span class=\"cm-number\">2000<\/span><\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt CodeMirror-linenumber-show\" style=\"left: 0px; width: 32px;\">20<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp; &nbsp; &nbsp;  }<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">21<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp; &nbsp;  ]<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">22<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp;  }<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">23<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp;  ]<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">24<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\">  }<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt CodeMirror-linenumber-show\" style=\"left: 0px; width: 32px;\">25<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\">}<\/span><\/pre><\/div><\/div><\/div><\/div><\/div><\/div><div style=\"position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 771px;\"><\/div><div class=\"CodeMirror-gutters\" style=\"height: 771px; left: 0px;\"><div class=\"CodeMirror-gutter CodeMirror-linenumbers\" style=\"width: 40px;\"><\/div><\/div><\/div><\/div><\/pre><p><span>\u4e0a\u9762\u7684\u4ee3\u7801\u8868\u793a\u4ece1577836800\u65f6\u95f4\u70b9\u5f00\u59cb\uff0c\u7535\u7f51\u8fde\u63a5\u70b9\u5e94\u8be5\u5c3d\u91cf\u4fdd\u6301\u57280W\uff0c\u4fdd\u6301900\u79d2\uff0c\u800c\u4ece1577837700\u5f00\u59cb\uff0c\u7535\u7f51\u8fde\u63a5\u70b9\u5c3d\u91cf\u4fdd\u6301\u5728-2000W\uff0c\u4e5f\u5c31\u662f\u5411\u7535\u7f51\u8f93\u90012000W\u7684\u7535\u529b\uff0c\u4fdd\u6301900\u79d2\u3002\u5176\u4ed6\u65f6\u95f4\u6bb5\u8fd9\u4e2a\u63a7\u5236\u5668\u4e0d\u4f1a\u63a7\u5236\uff0c\u66f4\u4f4e\u4f18\u5148\u7ea7\u7684\u63a7\u5236\u5668\u53ef\u4ee5\u63a5\u7ba1\u3002<\/span><\/p><h4 id='14-by-editingpreseeding-configuration-files'><span>1.4 By editing\/preseeding configuration files<\/span><\/h4><p><span>OSGi\u7684\u914d\u7f6e\u50a8\u5b58\u5728\u6587\u4ef6\u7cfb\u7edf\u7684\u6587\u672c\u6587\u4ef6\u4e2d\u3002\u4fee\u6539EdgeApp.bndrun\u4e2d\u7684felix.cm.dir\u53c2\u6570\u3002<\/span><\/p><p><span>\u53ef\u4ee5\u7528\u6765\u5728\u751f\u4ea7\u90e8\u7f72\u6216\u8005\u662f\u5feb\u901f\u66f4\u6539edge\u8bbe\u5907\u4e0a\u9884\u7f6e\u914d\u7f6e\u3002\u91cd\u542f\u7a0b\u5e8f\u540e\u5373\u53ef\u5e94\u7528\u66f4\u6539\u3002<\/span><\/p><h3 id='2-edge-config'><span>2. Edge-Config<\/span><\/h3><p><img decoding=\"async\" src=\"https:\/\/raw.githubusercontent.com\/Mhrooz\/pics\/master\/PicGo\/config-architecture.png\" referrerpolicy=\"no-referrer\" alt=\"OpenEMS Edge Configuration Architecture\"><\/p><p><span>Edge\u7684\u914d\u7f6e\u6587\u4ef6\u5728\u4e0a\u9762\u56fe\u7247\u4e2d\u5c55\u793a\uff0c\u5305\u542b\uff1a<\/span><\/p><h4 id='nature-1'><span>Nature<\/span><\/h4><p><span>\u4e00\u4e2aNature\u53ef\u4ee5\u770b\u6210\u662fJava\u4e2d\u7684\u2018Interface\u2019\uff0c\u5b9a\u4e49\u4e86\u5b9e\u73b0\u4e00\u4e2aComponent\u6240\u9700\u8981\u7684Channel\u3002<\/span><\/p><p><span>\u5b9a\u4e49battery\u9700\u8981\u5b9a\u4e49\u901a\u9053<\/span><code>ChargeMaxVoltage<\/code><span>,<\/span><code>DischargeMaxVoltage<\/code><span>\u4ee5\u53ca<\/span><code>Soc<\/code><span>\u7b49\u3002<\/span><\/p><h4 id='channel'><span>Channel<\/span><\/h4><p><span>\u4e00\u4e2aChannel\u4ee3\u8868\u4e86\u4e00\u4e2aComponent\u7684\u4fe1\u606f\uff0c\u6bd4\u5982\u63cf\u8ff0\uff0c\u5ea6\u91cf\u5355\u4f4d\u7b49\u7b49\u3002<\/span><\/p><p><code>ChargeMaxVoltage<\/code><span>\u662fBattery Nature\u7684\u4e00\u4e2aChannel\uff0c\u63cf\u8ff0\u4e86\u5145\u7535\u7684\u6700\u5927\u7535\u538b\uff0c\u88ab\u5b9a\u4e49\u4e3a\u4e00\u4e2aInteger\uff0c\u5355\u4f4d\u662fAmpere\uff1f<\/span><\/p><p><img decoding=\"async\" src=\"https:\/\/raw.githubusercontent.com\/Mhrooz\/pics\/master\/PicGo\/image-20230405162814943.png\" referrerpolicy=\"no-referrer\" alt=\"image-20230405162814943\"><\/p><h4 id='factory'><span>Factory<\/span><\/h4><p><span>\u53ef\u4ee5\u770b\u6210\u662f\u9762\u5411\u5bf9\u8c61\u4e2d\u7684Class\uff0c\u5b83\u662fJava\/OSGi\u7684\u5143\u6570\u636e\u7684\u4e30\u5bcc\uff0c\u5b9a\u4e49\u4e86\u4e00\u4e9b\u9700\u8981\u7684\u914d\u7f6e\u53c2\u6570\u3002\u4e00\u4e2aFactory\u5b9e\u73b0\u4e86\u4e00\u4e2a\u6216\u8005\u66f4\u591a\u7684Nature\uff0cFactory\u63d0\u4f9b\u4e86\u5b9e\u73b0Nature\u6240\u6709\u7684\u901a\u9053\u3002\u4e5f\u53ef\u4ee5\u5b9a\u4e49\u7279\u5b9a\u4e8e\u5355\u4e2a\u5b9e\u73b0\u7684\u66f4\u591a\u901a\u9053\u3002<\/span><\/p><p><span>\u5bf9\u4e8eBMW\u7535\u6c60\u7684Factory\uff0c\u5b9e\u73b0\u4e86Battery Nature\u3002\u540c\u65f6\u5b9a\u4e49\u4e86AmbientTemperature\uff0c\u867d\u7136\u662f\u4e0d\u53ef\u7528\u7684\uff0c\u4f46\u662f\u6bcf\u4e2a\u7535\u6c60\u5b9e\u73b0\u90fd\u9700\u8981\u8fd9\u4e2a\u901a\u9053\u3002<\/span><\/p><h4 id='instance'><span>Instance<\/span><\/h4><p><span>\u53ef\u4ee5\u770b\u6210\u662f\u9762\u5411\u5bf9\u8c61\u4e2d\u7684Object\uff0c\u5df2\u7ecf\u5b9a\u4e49\u597d\u5177\u4f53\u53c2\u6570\u7684Factory\u5bf9\u8c61\u3002\u5b9e\u4f8b\u5316\u4e4b\u540e\u53ef\u4ee5\u770b\u6210\u662fOpen EMS\u7684\u7ec4\u4ef6\uff0c\u901a\u8fc7\u5355\u72ec\u7684Component-ID\u6765\u8bc6\u522b\u3002<\/span><\/p><p><span>\u901a\u8fc7JSON\u6765\u8fdb\u884c\u5b9a\u4e49Edge\u7684\u914d\u7f6e\uff1a<\/span><\/p><pre class=\"md-fences md-end-block md-fences-with-lineno ty-contain-cm modeLoaded\" spellcheck=\"false\" lang=\"json\" style=\"break-inside: unset;\"><div class=\"CodeMirror cm-s-inner cm-s-null-scroll CodeMirror-wrap\" lang=\"json\"><div style=\"overflow: hidden; position: relative; width: 3px; height: 0px; top: 13.425px; left: 45px;\"><textarea autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\" tabindex=\"0\" style=\"position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;\"><\/textarea><\/div><div class=\"CodeMirror-scrollbar-filler\" cm-not-content=\"true\"><\/div><div class=\"CodeMirror-gutter-filler\" cm-not-content=\"true\"><\/div><div class=\"CodeMirror-scroll\" tabindex=\"-1\"><div class=\"CodeMirror-sizer\" style=\"margin-left: 41px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;\"><div style=\"position: relative; top: 0px;\"><div class=\"CodeMirror-lines\" role=\"presentation\"><div role=\"presentation\" style=\"position: relative; outline: none;\"><div class=\"CodeMirror-measure\"><pre><span>xxxxxxxxxx<\/span><\/pre><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\"><div>40<\/div><\/div><\/div><div class=\"CodeMirror-measure\"><\/div><div style=\"position: relative; z-index: 1;\"><\/div><div class=\"CodeMirror-code\" role=\"presentation\" style=\"\"><div class=\"CodeMirror-activeline\" style=\"position: relative;\"><div class=\"CodeMirror-activeline-background CodeMirror-linebackground\"><\/div><div class=\"CodeMirror-gutter-background CodeMirror-activeline-gutter\" style=\"left: -41px; width: 41px;\"><\/div><div class=\"CodeMirror-gutter-wrapper CodeMirror-activeline-gutter\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt CodeMirror-linenumber-show\" style=\"left: 0px; width: 32px;\">1<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\">{<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">2<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp;<span class=\"cm-string cm-property\">\"components\"<\/span>: {<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">3<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"ess0\"<\/span>: {<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">4<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"alias\"<\/span>: <span class=\"cm-string\">\"Battery Energy Storage System\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">5<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"factoryId\"<\/span>: <span class=\"cm-string\">\"Ess.Generic.ManagedSymmetric\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">6<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"properties\"<\/span>: {<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">7<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"enabled\"<\/span>: <span class=\"cm-atom\">true<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">8<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"battery.id\"<\/span>: <span class=\"cm-string\">\"battery0\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">9<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"batteryInverter.id\"<\/span>: <span class=\"cm-string\">\"batteryInverter0\"<\/span><\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt CodeMirror-linenumber-show\" style=\"left: 0px; width: 32px;\">10<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp;  },<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">11<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"channels\"<\/span>: {<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">12<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"ActivePower\"<\/span>: {<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">13<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"type\"<\/span>: <span class=\"cm-string\">\"INTEGER\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">14<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"accessMode\"<\/span>: <span class=\"cm-string\">\"RO\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">15<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"text\"<\/span>: <span class=\"cm-string\">\"Negative values for Charge; positive for Discharge\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">16<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"unit\"<\/span>: <span class=\"cm-string\">\"W\"<\/span><\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">17<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp; &nbsp;  }<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">18<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp;  }<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">19<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp;  }<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt CodeMirror-linenumber-show\" style=\"left: 0px; width: 32px;\">20<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\">  },<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">21<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp;<span class=\"cm-string cm-property\">\"factories\"<\/span>: {<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">22<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"Ess.Generic.ManagedSymmetric\"<\/span>: {<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">23<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"id\"<\/span>: <span class=\"cm-string\">\"Ess.Generic.ManagedSymmetric\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">24<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"name\"<\/span>: <span class=\"cm-string\">\"ESS Generic Managed Symmetric\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">25<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"description\"<\/span>: <span class=\"cm-string\">\"\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">26<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"natureIds\"<\/span>: [<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">27<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"cm-string\">\"io.openems.edge.ess.api.SymmetricEss\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">28<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp;  ],<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">29<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"properties\"<\/span>: [<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt CodeMirror-linenumber-show\" style=\"left: 0px; width: 32px;\">30<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp; &nbsp;  {<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">31<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"id\"<\/span>: <span class=\"cm-string\">\"id\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">32<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"name\"<\/span>: <span class=\"cm-string\">\"Component-ID\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">33<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"description\"<\/span>: <span class=\"cm-string\">\"Unique ID of this Component\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">34<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"isRequired\"<\/span>: <span class=\"cm-atom\">true<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">35<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"defaultValue\"<\/span>: <span class=\"cm-string\">\"ess0\"<\/span><\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">36<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp; &nbsp;  }<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">37<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp;  ]<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">38<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp;  }<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">39<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\">  }<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt CodeMirror-linenumber-show\" style=\"left: 0px; width: 32px;\">40<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\">}<\/span><\/pre><\/div><\/div><\/div><\/div><\/div><\/div><div style=\"position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 1265px;\"><\/div><div class=\"CodeMirror-gutters\" style=\"height: 1265px; left: 0px;\"><div class=\"CodeMirror-gutter CodeMirror-linenumbers\" style=\"width: 40px;\"><\/div><\/div><\/div><\/div><\/pre><p><span>\u8981\u67e5\u8be2EdgeConfig\u914d\u7f6e:<\/span><\/p><pre class=\"md-fences md-end-block md-fences-with-lineno ty-contain-cm modeLoaded\" spellcheck=\"false\" lang=\"json\"><div class=\"CodeMirror cm-s-inner cm-s-null-scroll CodeMirror-wrap\" lang=\"json\"><div style=\"overflow: hidden; position: relative; width: 3px; height: 0px; top: 13.425px; left: 34px;\"><textarea autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\" tabindex=\"0\" style=\"position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;\"><\/textarea><\/div><div class=\"CodeMirror-scrollbar-filler\" cm-not-content=\"true\"><\/div><div class=\"CodeMirror-gutter-filler\" cm-not-content=\"true\"><\/div><div class=\"CodeMirror-scroll\" tabindex=\"-1\"><div class=\"CodeMirror-sizer\" style=\"margin-left: 30px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;\"><div style=\"position: relative; top: 0px;\"><div class=\"CodeMirror-lines\" role=\"presentation\"><div role=\"presentation\" style=\"position: relative; outline: none;\"><div class=\"CodeMirror-measure\"><pre><span>xxxxxxxxxx<\/span><\/pre><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\"><div>6<\/div><\/div><\/div><div class=\"CodeMirror-measure\"><\/div><div style=\"position: relative; z-index: 1;\"><\/div><div class=\"CodeMirror-code\" role=\"presentation\" style=\"\"><div class=\"CodeMirror-activeline\" style=\"position: relative;\"><div class=\"CodeMirror-activeline-background CodeMirror-linebackground\"><\/div><div class=\"CodeMirror-gutter-background CodeMirror-activeline-gutter\" style=\"left: -30px; width: 30px;\"><\/div><div class=\"CodeMirror-gutter-wrapper CodeMirror-activeline-gutter\" style=\"left: -30px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt CodeMirror-linenumber-show\" style=\"left: 0px; width: 21px;\">1<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\">{<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -30px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 21px;\">2<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp;<span class=\"cm-string cm-property\">\"jsonrpc\"<\/span>: <span class=\"cm-string\">\"2.0\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -30px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 21px;\">3<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp;<span class=\"cm-string cm-property\">\"id\"<\/span>: <span class=\"cm-string\">\"UUID\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -30px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 21px;\">4<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp;<span class=\"cm-string cm-property\">\"method\"<\/span>: <span class=\"cm-string\">\"getEdgeConfig\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -30px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 21px;\">5<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp;<span class=\"cm-string cm-property\">\"params\"<\/span>: {}<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -30px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt CodeMirror-linenumber-show\" style=\"left: 0px; width: 21px;\">6<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\">}<\/span><\/pre><\/div><\/div><\/div><\/div><\/div><\/div><div style=\"position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 185px;\"><\/div><div class=\"CodeMirror-gutters\" style=\"height: 185px; left: 0px;\"><div class=\"CodeMirror-gutter CodeMirror-linenumbers\" style=\"width: 29px;\"><\/div><\/div><\/div><\/div><\/pre><h2 id='nature-2'><span>Nature<\/span><\/h2><p><span>\u786c\u4ef6\u5728OpenEMS Edge\u4e2d\u88ab\u62bd\u8c61\u6210<\/span><code>Natures<\/code><span>\u3002Nature\u5b9a\u4e49\u4e86\u4e00\u4e2aComponent\u6240\u9700\u8981\u7684\u7279\u5f81\uff0c\u5c5e\u6027\u3002\u8fd9\u4e9b\u7279\u5f81\u901a\u8fc7\u901a\u9053Channel\u6765\u5b9a\u4e49\u3002<\/span><\/p><p><span>Ess(Energy Storage System)\u7684\u5b9e\u73b0\u9700\u8981\u63d0\u4f9b\u4e00\u4e2a(Soc-Channel)\u3002<\/span><\/p><p><span>\u5176\u5b9eNature\u662f\u901a\u8fc7OSGi API Bundles\u6765\u5b9e\u73b0\u3002<\/span><\/p><h3 id='1-battery'><span>1. Battery<\/span><\/h3><p><span>\u7535\u6c60\u4f1a\u8fde\u63a5\u5230\u4e00\u4e2a\u7535\u6c60\u9006\u53d8\u5668\u4e0a\u3002<\/span><\/p><h3 id='2-battery-inverter'><span>2. Battery-Inverter<\/span><\/h3><p><span>\u7535\u6c60\u548c\u7535\u6c60\u9006\u53d8\u5668\u4e00\u8d77\u7ec4\u6210\u4e00\u4e2aESS\u3002<\/span><\/p><p><span>Source Code\uff1a<\/span><a href='https:\/\/github.com\/OpenEMS\/openems\/tree\/develop\/io.openems.edge.batteryinverter.api' target='_blank' class='url' rel=\"noopener\">https:\/\/github.com\/OpenEMS\/openems\/tree\/develop\/io.openems.edge.batteryinverter.api<\/a><\/p><h3 id='3-controller'><span>3. Controller<\/span><\/h3><p><span>\u89c1Controller<\/span><\/p><h3 id='4-ess'><span>4. ESS<\/span><\/h3><p><span>Energy Storage System\uff0c\u96c6\u6210\u4e86\u7535\u6c60\u548c\u7535\u6c60\u9006\u53d8\u5668\u3002<\/span><\/p><h4 id='ess'><span>ESS<\/span><\/h4><p><span>Source Code\uff1a<\/span><a href='https:\/\/github.com\/OpenEMS\/openems\/blob\/develop\/io.openems.edge.ess.api\/src\/io\/openems\/edge\/ess\/api\/SymmetricEss.java' target='_blank' class='url' rel=\"noopener\">https:\/\/github.com\/OpenEMS\/openems\/blob\/develop\/io.openems.edge.ess.api\/src\/io\/openems\/edge\/ess\/api\/SymmetricEss.java<\/a><\/p><h4 id='symmetricessreadonly'><span>SymmetricEssReadOnly<\/span><\/h4><p><span>Source Code\uff1a<\/span><a href='https:\/\/github.com\/OpenEMS\/openems\/blob\/develop\/io.openems.edge.ess.api\/src\/io\/openems\/edge\/ess\/api\/SymmetricEss.java' target='_blank' class='url' rel=\"noopener\">https:\/\/github.com\/OpenEMS\/openems\/blob\/develop\/io.openems.edge.ess.api\/src\/io\/openems\/edge\/ess\/api\/SymmetricEss.java<\/a><\/p><p><span>\u4e00\u4e2a\u5bf9\u79f0\u7684\uff0c\u53ef\u4ee5\u63a7\u5236\u7684ESS\u3002<\/span><\/p><h4 id='essdccharger'><span>EssDcCharger<\/span><\/h4><p><span>Source Code\uff1a<\/span><a href='https:\/\/github.com\/OpenEMS\/openems\/blob\/develop\/io.openems.edge.ess.api\/src\/io\/openems\/edge\/ess\/dccharger\/api\/EssDcCharger.java' target='_blank' class='url' rel=\"noopener\">https:\/\/github.com\/OpenEMS\/openems\/blob\/develop\/io.openems.edge.ess.api\/src\/io\/openems\/edge\/ess\/dccharger\/api\/EssDcCharger.java<\/a><\/p><p><span>\u592a\u9633\u80fd\u5145\u7535\u5668\uff0c\u8fde\u63a5\u5230ESS\u7684DC\u7aef\u3002<\/span><\/p><h3 id='5-evcselectric-vehicle-charging-station'><span>5. EVCS(Electric Vehicle Charging Station)<\/span><\/h3><p><span>Source Code\uff1a<\/span><a href='https:\/\/github.com\/OpenEMS\/openems\/blob\/develop\/io.openems.edge.evcs.api\/src\/io\/openems\/edge\/evcs\/api\/Evcs.java' target='_blank' class='url' rel=\"noopener\">https:\/\/github.com\/OpenEMS\/openems\/blob\/develop\/io.openems.edge.evcs.api\/src\/io\/openems\/edge\/evcs\/api\/Evcs.java<\/a><\/p><h3 id='6-io'><span>6. I\/O<\/span><\/h3><p><span>DigitalOutput\uff1a<\/span><a href='https:\/\/github.com\/OpenEMS\/openems\/blob\/develop\/io.openems.edge.io.api\/src\/io\/openems\/edge\/io\/api\/DigitalOutput.java' target='_blank' class='url' rel=\"noopener\">https:\/\/github.com\/OpenEMS\/openems\/blob\/develop\/io.openems.edge.io.api\/src\/io\/openems\/edge\/io\/api\/DigitalOutput.java<\/a><\/p><p><span>\u4e00\u4e2a\u6216\u591a\u4e2a\u6570\u5b57\u8f93\u51fa\u6216\u7ee7\u7535\u5668\u3002<\/span><\/p><h3 id='7-meter'><span>7. Meter<\/span><\/h3><p><span>Meter\uff1a<\/span><a href='https:\/\/github.com\/OpenEMS\/openems\/blob\/develop\/io.openems.edge.meter.api\/src\/io\/openems\/edge\/meter\/api\/MeterType.java' target='_blank' class='url' rel=\"noopener\">https:\/\/github.com\/OpenEMS\/openems\/blob\/develop\/io.openems.edge.meter.api\/src\/io\/openems\/edge\/meter\/api\/MeterType.java<\/a><\/p><p><span>\u901a\u7528\u529f\u7387\u8868<\/span><\/p><p><span>SymmetricMeter\uff1a<\/span><a href='https:\/\/github.com\/OpenEMS\/openems\/blob\/develop\/io.openems.edge.meter.api\/src\/io\/openems\/edge\/meter\/api\/SymmetricMeter.java' target='_blank' class='url' rel=\"noopener\">https:\/\/github.com\/OpenEMS\/openems\/blob\/develop\/io.openems.edge.meter.api\/src\/io\/openems\/edge\/meter\/api\/SymmetricMeter.java<\/a><\/p><p><span>\u5bf9\u79f0\u529f\u7387\u8868<\/span><\/p><p><span>AsymmetricMeter\uff1a<\/span><a href='https:\/\/github.com\/OpenEMS\/openems\/blob\/develop\/io.openems.edge.meter.api\/src\/io\/openems\/edge\/meter\/api\/AsymmetricMeter.java' target='_blank' class='url' rel=\"noopener\">https:\/\/github.com\/OpenEMS\/openems\/blob\/develop\/io.openems.edge.meter.api\/src\/io\/openems\/edge\/meter\/api\/AsymmetricMeter.java<\/a><\/p><p><span>\u975e\u5bf9\u79f0\u529f\u7387\u8868<\/span><\/p><h3 id='8-predictor'><span>8. Predictor<\/span><\/h3><p><span>\u9884\u6d4b\u672a\u6765\u7684\u7528\u7535\/\u53d1\u7535\u9700\u6c42<\/span><\/p><h3 id='9-scheduler'><span>9. Scheduler<\/span><\/h3><p><span>\u8be6\u60c5\u89c1\u540e\u9762\u7684Scheduler\u7ae0\u8282<\/span><\/p><h3 id='10-thermometer'><span>10. Thermometer<\/span><\/h3><p><span>\u6e29\u5ea6\u8ba1<\/span><\/p><h3 id='11-timedata'><span>11. Timedata<\/span><\/h3><p><span>\u63d0\u4f9b\u65f6\u95f4\u6570\u636e<\/span><\/p><h3 id='12-time-of-use-tariff-api'><span>12. Time-Of-Use Tariff API<\/span><\/h3><p><span>\u63d0\u4f9b\u4ef7\u683c\u6570\u636e<\/span><\/p><p><a href='https:\/\/github.com\/OpenEMS\/openems\/tree\/develop\/io.openems.edge.timeofusetariff.api' target='_blank' class='url' rel=\"noopener\">https:\/\/github.com\/OpenEMS\/openems\/tree\/develop\/io.openems.edge.timeofusetariff.api<\/a><\/p><h2 id='scheduler'><span>Scheduler<\/span><\/h2><p><span>Scheduler\u8ba1\u5212\u63a7\u5236\u5668\u7684\u8fd0\u884c\u987a\u5e8f\uff0c\u5b83\u5b9a\u4e49\u4e86<\/span><\/p><ul><li><p><span>\u54ea\u4e2a\u63a7\u5236\u5668\u5e94\u8be5\u8fd0\u884c<\/span><\/p><\/li><li><p><span>\u63a7\u5236\u5668\u7684\u4f18\u5148\u7ea7<\/span><\/p><\/li><\/ul><h3 id='1-all-alphabetically'><span>1. All-Alphabetically<\/span><\/h3><p><span>\u83b7\u53d6\u4e00\u4e2a\u7ec4\u4ef6ID\u7684\u6709\u5e8f\u5217\u8868\uff0c\u4ee5ID\u7684\u5b57\u6bcd\u5e8f\u6392\u5e8f<\/span><\/p><p><a href='https:\/\/github.com\/OpenEMS\/openems\/tree\/develop\/io.openems.edge.scheduler.allalphabetically' target='_blank' class='url' rel=\"noopener\">https:\/\/github.com\/OpenEMS\/openems\/tree\/develop\/io.openems.edge.scheduler.allalphabetically<\/a><\/p><h3 id='2-daily'><span>2. Daily<\/span><\/h3><p><span>\u8c03\u5ea6\u5668\u53ef\u4ee5\u6839\u636e&quot;Daily Schedule&quot;\u914d\u7f6e\u8fd0\u884c\u4e0d\u540c\u7684\u63a7\u5236\u5668\u3002\u5982\u679c\u6709\u65e0\u8bba\u4f55\u65f6\u90fd\u9700\u8981\u8fd0\u884c\u7684\u63a7\u5236\u5668\uff0c\u53ef\u4ee5\u4f7f\u7528&#39;Always Run Before&#39;\u6216\u8005\u662f\u201cAlways Run After\u201d\u3002<\/span><\/p><h4 id='21-configuration'><span>2.1 Configuration<\/span><\/h4><ul><li><p><span>Component-ID \u7ec4\u4ef6\u7684ID<\/span><\/p><\/li><li><p><span>Alias \u53ef\u8bfb\u7684\u7ec4\u4ef6\u540d\u5b57\uff0c\u9ed8\u8ba4\u662fComponentID<\/span><\/p><\/li><li><p><span>Always Run Before\uff0c\u5728\u6240\u6709\u63a7\u5236\u5668\u542f\u52a8\u524d\u542f\u52a8\u7684\u63a7\u5236\u5668<\/span><\/p><\/li><li><p><span>Daily Schedule \u6bcf\u5929\u7684\u6267\u884c\u987a\u5e8f\uff1a<\/span>\n<span>e.g.<\/span><\/p><pre class=\"md-fences md-end-block md-fences-with-lineno ty-contain-cm modeLoaded\" spellcheck=\"false\" lang=\"\"><div class=\"CodeMirror cm-s-inner cm-s-null-scroll CodeMirror-wrap\" lang=\"\"><div style=\"overflow: hidden; position: relative; width: 3px; height: 0px; top: 13.1125px; left: 34px;\"><textarea autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\" tabindex=\"0\" style=\"position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;\"><\/textarea><\/div><div class=\"CodeMirror-scrollbar-filler\" cm-not-content=\"true\"><\/div><div class=\"CodeMirror-gutter-filler\" cm-not-content=\"true\"><\/div><div class=\"CodeMirror-scroll\" tabindex=\"-1\"><div class=\"CodeMirror-sizer\" style=\"margin-left: 30px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;\"><div style=\"position: relative; top: 0px;\"><div class=\"CodeMirror-lines\" role=\"presentation\"><div role=\"presentation\" style=\"position: relative; outline: none;\"><div class=\"CodeMirror-measure\"><pre><span>xxxxxxxxxx<\/span><\/pre><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\"><div>1<\/div><\/div><\/div><div class=\"CodeMirror-measure\"><\/div><div style=\"position: relative; z-index: 1;\"><\/div><div class=\"CodeMirror-code\" role=\"presentation\"><div class=\"CodeMirror-activeline\" style=\"position: relative;\"><div class=\"CodeMirror-activeline-background CodeMirror-linebackground\"><\/div><div class=\"CodeMirror-gutter-background CodeMirror-activeline-gutter\" style=\"left: -30px; width: 30px;\"><\/div><div class=\"CodeMirror-gutter-wrapper CodeMirror-activeline-gutter\" style=\"left: -30px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt CodeMirror-linenumber-show\" style=\"left: 0px; width: 21px;\">1<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> [{ \"time\": \"08:00:00\", \"controllers\": [ \"ctrlFixActivePower0\" ] }, { \"time\": \"13:45:00\" \"controllers\": [\"\"]\" }]<\/span><\/pre><\/div><\/div><\/div><\/div><\/div><\/div><div style=\"position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 62px;\"><\/div><div class=\"CodeMirror-gutters\" style=\"height: 62px; left: 0px;\"><div class=\"CodeMirror-gutter CodeMirror-linenumbers\" style=\"width: 29px;\"><\/div><\/div><\/div><\/div><\/pre><\/li><li><p><span>Always Run After\uff0c\u5728\u6240\u6709\u63a7\u5236\u5668\u542f\u52a8\u540e\u8981\u6267\u884c\u7684\u63a7\u5236\u5668\u7684ID\u3002<\/span><\/p><\/li><\/ul><p><a href='https:\/\/github.com\/OpenEMS\/openems\/tree\/develop\/io.openems.edge.scheduler.daily' target='_blank' class='url' rel=\"noopener\">https:\/\/github.com\/OpenEMS\/openems\/tree\/develop\/io.openems.edge.scheduler.daily<\/a><\/p><h3 id='3-fixed-order'><span>3. Fixed Order<\/span><\/h3><p><span>\u6267\u884c\u56fa\u5b9a\u987a\u5e8f\u7684\u63a7\u5236\u5668\u3002<\/span><\/p><p><a href='https:\/\/github.com\/OpenEMS\/openems\/tree\/develop\/io.openems.edge.scheduler.fixedorder' target='_blank' class='url' rel=\"noopener\">https:\/\/github.com\/OpenEMS\/openems\/tree\/develop\/io.openems.edge.scheduler.fixedorder<\/a><\/p><h2 id='controller'><span>Controller<\/span><\/h2><p><span>Controller\u5c31\u662f\u7528\u6765\u63a7\u5236\u5b9e\u9645\u7684\u4e1a\u52a1\u903b\u8f91\u6216\u8005\u662f\u7528\u67d0\u79cd\u7b97\u6cd5\u6765\u63a7\u5236\u786c\u4ef6\u3002\u6bcf\u4e2a\u6267\u884c\u5468\u671f\uff0c\u6bd4\u5982\u8bf4\u6bcf\u79d2\uff0cEMS\u53ef\u4ee5\u53d1\u9001\u7ed9Contoller\u4e00\u4e2a\u6307\u4ee4\u3002\u53ef\u4ee5\u6709\u4e24\u79cd\u65b9\u6cd5\u6765\u63a7\u5236\u786c\u4ef6\uff1a<\/span><\/p><ul><li><p><span>\u901a\u8fc7setpoint\u6765\u63a7\u5236<\/span>\n<span>EMS\u8ba1\u7b97setpoint\u6307\u4ee4\uff0c\u5e76\u4e14\u53d1\u9001\u7ed9\u786c\u4ef6\u505a\u7acb\u5373\u6267\u884c<\/span>\n<span>\u529f\u7387\u5e73\u6ed1\u7b97\u6cd5\uff0c\u7528\u5149\u4f0f\u7cfb\u7edf\u7684\u7535\u6d41\u548c\u4e4b\u524d\u7684\u8f93\u51fa\u529f\u7387\u503c\u3002\u6211\u4eec\u914d\u7f6e\u4e00\u4e2a\u6700\u5927\u659c\u5761\u7387\uff08maximum  defined ramp rate\uff09\uff0c\u5f53EMS\u63a8\u65ad\u51fa\u7cfb\u7edf\u9700\u8981\u4ee5150kW\u6765\u653e\u7535\uff0c\u90a3\u4e48EMS\u5c06\u4f1a\u7acb\u5373\u53d1\u9001\u4ee5150kW\u653e\u7535\u7684\u6307\u4ee4\u7ed9ESS\u505a\u7acb\u5373\u6267\u884c\u3002<\/span><\/p><p><img decoding=\"async\" src=\"https:\/\/raw.githubusercontent.com\/Mhrooz\/pics\/master\/PicGo\/image-20230405183516202.png\" referrerpolicy=\"no-referrer\" alt=\"image-20230405183516202\"><\/p><\/li><\/ul><ul><li><p><span>\u901a\u8fc7\u53c2\u6570\u5316\u6765\u63a7\u5236<\/span>\n<span>EMS\u76f4\u63a5\u53d1\u9001\u53c2\u6570\u7ed9\u5d4c\u5165\u786c\u4ef6\u7684\u63a7\u5236\u7b97\u6cd5\uff0c\u8ba9\u786c\u4ef6\u5185\u90e8\u6267\u884c\u3002<\/span><\/p><\/li><\/ul><h3 id='1-api-backend'><span>1. API Backend<\/span><\/h3><p><span>\u8fde\u63a5\u5230OpenEMS\u540e\u53f0\uff0c\u5e76\u4e14\u5b9a\u671f\u53d1\u9001Channel\u6570\u636e\u3002\u901a\u9053\u4e2d\u7684\u6570\u636e\u53ef\u4ee5\u88ab\u540e\u53f0\u8986\u76d6\u3002<\/span><\/p><p><a href='https:\/\/github.com\/OpenEMS\/openems\/tree\/develop\/io.openems.edge.controller.api.backend' target='_blank' class='url' rel=\"noopener\">https:\/\/github.com\/OpenEMS\/openems\/tree\/develop\/io.openems.edge.controller.api.backend<\/a><\/p><h3 id='2-api-modbus'><span>2. API Modbus<\/span><\/h3><p><span>Modbus API\u5b9a\u4e49\u4e86\u54ea\u4e9bEMS\u7ec4\u4ef6\u5e94\u8be5\u88ab\u5bfc\u51fa\uff0c\u5e76\u901a\u8fc7API\u63d0\u4f9b\u3002\u7136\u540e\u751f\u6210\u4e00\u4e2a\u52a8\u6001\u7684Modbus\u534f\u8bae\uff0c\u8fd9\u4e2a\u534f\u8bae\u5206\u4e3a\u4e24\u90e8\u5206\uff1a\u5730\u5740\u5757\uff0c\u6620\u5c04\u5230OpenEMS\u7ec4\u4ef6\uff1b\u5bc4\u5b58\u5668\u5730\u5740\uff0c\u6620\u5c04\u5230OpenEMS\u901a\u9053\u3002<\/span><\/p><p><span>Modbus\u8868\u5141\u8bb8\u5bf9\u6240\u6709\u53ef\u7528\u7684\u5bc4\u5b58\u5668\u8fdb\u884c\u52a8\u6001\u89e3\u6790\u3002\u4e5f\u5c31\u662f\u8fd0\u884c\u65f6\u52a8\u6001\u83b7\u5f97\u6570\u636e\u7ed3\u6784\u7b49<\/span><\/p><p><span>\u4f8b\u5b50\uff0c\u5bfc\u51fa\u4e00\u4e2aSum-Component(_sum)\uff0c\u5b8c\u6574\u7684Modbus\u534f\u8bae\u53ef\u4ee5\u88ab\u52a8\u6001\u89e3\u6790\uff1a<\/span><\/p><ol><li><p><span>\u5bc4\u5b58\u56680\u8868\u793a\u4e00\u4e2aOpen EMS\u7cfb\u7edf\uff0c\u75280x17ed6201\u54c8\u5e0c<\/span><\/p><\/li><li><p><span>\u5bc4\u5b58\u56681\u8868\u793a\u7b2c\u4e00\u4e2a\u5757\u7684\u957f\u5ea6\uff0c199\u8868\u793a\u957f\u5ea6\uff0c1\u8868\u793a\u4e0b\u4e00\u4e2a\u5757\u5f00\u59cb\u7684\u957f\u5ea6\uff08199+1=200\uff09<\/span><\/p><\/li><li><p><span>\u5bc4\u5b58\u5668200\u7ed9\u51fa16\u4e2a\u5b57\u7b26\u957f\u5ea6\u7684ComponentID<\/span><\/p><\/li><li><p><span>\u5bc4\u5b58\u5668216\u8868\u793a\u5b8c\u6574\u7684\u5757\u7684\u957f\u5ea6\u3002\u6dfb\u52a0\u957f\u5ea6300\u7ed9\u51fa\u4e0b\u4e00\u4e2a\u5757\u7684\u4f4d\u7f6e<\/span><\/p><\/li><li><p><span>\u5bc4\u5b58\u5668220\u7ed9\u51fa\u7b2c\u4e00\u4e2a\u5b50\u5757\uff0c\u5b50\u5757\u91cc\u8868\u793a OpenemsComponent\u3002\u4e0b\u4e00\u4e2a\u5b50\u5757\u4ece221\u5f00\u59cb\uff0c\u4e00\u76f4\u5230300\u5730\u5740<\/span><\/p><\/li><\/ol><p><span>\u9664\u4e86\u52a8\u6001\u89e3\u6790Modbus\u534f\u8bae\uff0c\u540c\u6837\u53ef\u4ee5\u901a\u8fc7UI\u4e0b\u8f7dEMS\u4e13\u7528excel\uff0c\u6765\u5f97\u5230\u7cfb\u7edf\u914d\u7f6e\u6587\u6863\u3002<\/span><\/p><p><span>\u5982\u679c\u8981\u548c\u7279\u5b9a\u7684\u901a\u9053\u901a\u4fe1\uff0c\u9700\u8981\u53bb\u8bfb\u5199\u76f8\u5bf9\u5e94\u7684\u5bc4\u5b58\u5668\u3002\u4f8b\u5b50\uff1a\u8bfb\u5bc4\u5b58\u5668302_sum\/EssSoc\u53ef\u4ee5\u5f97\u5230ESS\u603b\u4f53\u5e73\u5747\u503c.<\/span><\/p><p><a href='https:\/\/github.com\/OpenEMS\/openems\/tree\/develop\/io.openems.edge.controller.api.modbus' target='_blank' class='url' rel=\"noopener\">https:\/\/github.com\/OpenEMS\/openems\/tree\/develop\/io.openems.edge.controller.api.modbus<\/a><\/p><h3 id='3-api-mqtt'><span>3. API MQTT<\/span><\/h3><p><span>\u628aEdge\u7684\u6570\u636e\u4ea4\u7ed9MQTT<\/span><\/p><ul><li><p><code>edge\/{OpenEMS-Edge-ID}\/channel\/{Component-ID}\/{Channel-ID}<\/code><\/p><ul><li><p><span>Example<\/span>\n<code>edge\/edge0\/channel\/_sum\/GridActivePower<\/code><\/p><\/li><li><p><span>\u81f3\u5c11\u6bcf\u4e94\u5206\u949f\u53d1\u5e03\u4e00\u6b21<\/span><\/p><\/li><\/ul><\/li><li><p><code>edge\/{OpenEMS-Edge-ID}\/channel\/lastUpdate<\/code><\/p><ul><li><p><span>Example<\/span>\n<code>edge\/edge0\/channel\/lastUpdate<\/code><\/p><\/li><li><p><span>\u7ed9\u51fa\u6700\u540e\u4e00\u6b21\u66f4\u65b0\u6570\u636e\u7684\u65f6\u95f4\u6233<\/span><\/p><\/li><\/ul><\/li><li><p><code>edge\/{OpenEMS-Edge-ID}\/edgeConfig<\/code><\/p><ul><li><p><span>\u5f97\u5230JSON\u683c\u5f0f\u7684Config<\/span><\/p><\/li><li><p><code>edge\/edge0\/edgeConfig<\/code><\/p><\/li><\/ul><\/li><\/ul><p><a href='https:\/\/github.com\/OpenEMS\/openems\/tree\/develop\/io.openems.edge.controller.api.mqtt' target='_blank' class='url' rel=\"noopener\">https:\/\/github.com\/OpenEMS\/openems\/tree\/develop\/io.openems.edge.controller.api.mqtt<\/a><\/p><h3 id='4-rest-api-controller'><span>4. REST-API Controller<\/span><\/h3><p><span>REST-API\u63d0\u4f9b\u5916\u90e8\u8bbf\u95eeOpenEMS Edge\u7684\u9014\u5f84\u3002\u63a7\u5236\u5668\u63d0\u4f9b\u8bbf\u95ee\u901a\u9053\u7684\u6743\u9650\u4ee5\u53caJSON-RPC\u8bf7\u6c42\u901a\u8fc7JSON\/REST<\/span><\/p><p><span>\u9ed8\u8ba4\u7684\u7aef\u53e3\u662f<\/span><strong><span>8084<\/span><\/strong><span>\uff0c\u9ed8\u8ba4\u57fa\u5730\u5740\u662f<\/span><code>http:\/\/x:&lt;Password&gt;@&lt;IP&gt;:8084\/rest<\/code><\/p><ul><li><p><span>x: \u7528\u6237\u540d<\/span><\/p><\/li><li><p><span>http:\u534f\u8bae<\/span><\/p><\/li><li><p><span>\u5bc6\u7801\u548c8084\u662f\u81ea\u5b9a\u4e49\u7684\uff0c\u5982\u679c\u6ca1\u6709\u8bbe\u7f6e\u5bc6\u7801\uff0c\u8fd9\u91cc\u9ed8\u8ba4\u662f\u7528\u6237\u540d\uff0c\u6216\u8005\u662fadmin\u3002<\/span><\/p><\/li><\/ul><p><span>chrome\u8fdb\u884cREST\u6d4b\u8bd5\uff1a<\/span><a href='https:\/\/chrome.google.com\/webstore\/detail\/restlet-client-rest-api-t\/aejoelaoggembcahagimdiliamlcdmfm' target='_blank' class='url' rel=\"noopener\">https:\/\/chrome.google.com\/webstore\/detail\/restlet-client-rest-api-t\/aejoelaoggembcahagimdiliamlcdmfm<\/a><\/p><p><a href='https:\/\/github.com\/OpenEMS\/openems\/tree\/develop\/io.openems.edge.controller.api.rest' target='_blank' class='url' rel=\"noopener\">https:\/\/github.com\/OpenEMS\/openems\/tree\/develop\/io.openems.edge.controller.api.rest<\/a><\/p><h4 id='41-endpoint-restchannelcomponent-idchannel-id'><span>4.1 <\/span><code>Endpoint \/rest\/channel\/&lt;Component-ID&gt;\/&lt;Channel-ID&gt;<\/code><\/h4><p><span>Component-ID: &quot;_sum&quot;,&quot;ess0&quot;,&quot;meter9\u201c&#8230;<\/span><\/p><p><code>Channel-ID<\/code><span> is the ID of the Channel, e.g. &quot;ActivePowerL1&quot;, &quot;Soc&quot;,\u2026<\/span><\/p><h5 id='411-get'><span>4.1.1 GET <\/span><\/h5><p><span>\u7528<\/span><code>GET<\/code><span>\u6765\u5f97\u5230\u4e00\u4e2a\u901a\u9053\u7684\u503c<\/span><\/p><p><span>\u60f3\u8981\u5f97\u5230battery Soc\uff0c\u5219\u9700\u8981\u53d1\u9001GET\u8bf7\u6c42\u5230<\/span><a href='http:\/\/x:user@localhost:8084\/rest\/channel\/_sum\/EssSoC' target='_blank' class='url' rel=\"noopener\">http:\/\/x:user@localhost:8084\/rest\/channel\/_sum\/EssSoC<\/a><span>\uff0c\u8fd4\u56de\u503c\u5982\u4e0b\uff1a<\/span><\/p><pre class=\"md-fences md-end-block md-fences-with-lineno ty-contain-cm modeLoaded\" spellcheck=\"false\" lang=\"json\"><div class=\"CodeMirror cm-s-inner cm-s-null-scroll CodeMirror-wrap\" lang=\"json\"><div style=\"overflow: hidden; position: relative; width: 3px; height: 0px; top: 13.425px; left: 34px;\"><textarea autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\" tabindex=\"0\" style=\"position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;\"><\/textarea><\/div><div class=\"CodeMirror-scrollbar-filler\" cm-not-content=\"true\"><\/div><div class=\"CodeMirror-gutter-filler\" cm-not-content=\"true\"><\/div><div class=\"CodeMirror-scroll\" tabindex=\"-1\"><div class=\"CodeMirror-sizer\" style=\"margin-left: 30px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;\"><div style=\"position: relative; top: 0px;\"><div class=\"CodeMirror-lines\" role=\"presentation\"><div role=\"presentation\" style=\"position: relative; outline: none;\"><div class=\"CodeMirror-measure\"><pre><span>xxxxxxxxxx<\/span><\/pre><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\"><div>7<\/div><\/div><\/div><div class=\"CodeMirror-measure\"><\/div><div style=\"position: relative; z-index: 1;\"><\/div><div class=\"CodeMirror-code\" role=\"presentation\" style=\"\"><div class=\"CodeMirror-activeline\" style=\"position: relative;\"><div class=\"CodeMirror-activeline-background CodeMirror-linebackground\"><\/div><div class=\"CodeMirror-gutter-background CodeMirror-activeline-gutter\" style=\"left: -30px; width: 30px;\"><\/div><div class=\"CodeMirror-gutter-wrapper CodeMirror-activeline-gutter\" style=\"left: -30px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt CodeMirror-linenumber-show\" style=\"left: 0px; width: 21px;\">1<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\">{<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -30px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 21px;\">2<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp;<span class=\"cm-string cm-property\">\"type\"<\/span>:<span class=\"cm-string\">\"INTEGER\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -30px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 21px;\">3<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp;<span class=\"cm-string cm-property\">\"accessMode\"<\/span>:<span class=\"cm-string\">\"RO\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -30px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 21px;\">4<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp;<span class=\"cm-string cm-property\">\"text\"<\/span>:<span class=\"cm-string\">\"\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -30px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 21px;\">5<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp;<span class=\"cm-string cm-property\">\"unit\"<\/span>:<span class=\"cm-string\">\"%\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -30px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 21px;\">6<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp;<span class=\"cm-string cm-property\">\"value\"<\/span>:<span class=\"cm-number\">50<\/span><\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -30px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt CodeMirror-linenumber-show\" style=\"left: 0px; width: 21px;\">7<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\">}<\/span><\/pre><\/div><\/div><\/div><\/div><\/div><\/div><div style=\"position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 216px;\"><\/div><div class=\"CodeMirror-gutters\" style=\"height: 216px; left: 0px;\"><div class=\"CodeMirror-gutter CodeMirror-linenumbers\" style=\"width: 29px;\"><\/div><\/div><\/div><\/div><\/pre><p><span>GET\u53ef\u4ee5\u4f7f\u7528\u6b63\u5219\u8868\u8fbe\u5f0f\uff1a<\/span><code>http:\/\/x:user@localhost:8084\/rest\/channel\/.*\/Active.*Power<\/code><\/p><p><span>\u8fd9\u4e2a\u94fe\u63a5\u53ef\u4ee5\u5f97\u5230\u6240\u6709Components\u7684ActivePower\u548cReactivePower\u7684\u901a\u9053\u503c\u3002\u8fd4\u56de\u503c\u5982\u4e0b\uff1a<\/span><\/p><pre class=\"md-fences md-end-block md-fences-with-lineno ty-contain-cm modeLoaded\" spellcheck=\"false\" lang=\"json\" style=\"break-inside: unset;\"><div class=\"CodeMirror cm-s-inner cm-s-null-scroll CodeMirror-wrap\" lang=\"json\"><div style=\"overflow: hidden; position: relative; width: 3px; height: 0px; top: 13.425px; left: 45px;\"><textarea autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\" tabindex=\"0\" style=\"position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;\"><\/textarea><\/div><div class=\"CodeMirror-scrollbar-filler\" cm-not-content=\"true\"><\/div><div class=\"CodeMirror-gutter-filler\" cm-not-content=\"true\"><\/div><div class=\"CodeMirror-scroll\" tabindex=\"-1\"><div class=\"CodeMirror-sizer\" style=\"margin-left: 41px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;\"><div style=\"position: relative; top: 0px;\"><div class=\"CodeMirror-lines\" role=\"presentation\"><div role=\"presentation\" style=\"position: relative; outline: none;\"><div class=\"CodeMirror-measure\"><pre><span>xxxxxxxxxx<\/span><\/pre><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\"><div>34<\/div><\/div><\/div><div class=\"CodeMirror-measure\"><\/div><div style=\"position: relative; z-index: 1;\"><\/div><div class=\"CodeMirror-code\" role=\"presentation\" style=\"\"><div class=\"CodeMirror-activeline\" style=\"position: relative;\"><div class=\"CodeMirror-activeline-background CodeMirror-linebackground\"><\/div><div class=\"CodeMirror-gutter-background CodeMirror-activeline-gutter\" style=\"left: -41px; width: 41px;\"><\/div><div class=\"CodeMirror-gutter-wrapper CodeMirror-activeline-gutter\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt CodeMirror-linenumber-show\" style=\"left: 0px; width: 32px;\">1<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\">[<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">2<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\">  {<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">3<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"address\"<\/span>:<span class=\"cm-string\">\"pvInverter0\/ActivePower\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">4<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"type\"<\/span>:<span class=\"cm-string\">\"INTEGER\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">5<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"accessMode\"<\/span>:<span class=\"cm-string\">\"RO\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">6<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"text\"<\/span>:<span class=\"cm-string\">\"Negative values for Consumption; positive for Production\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">7<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"unit\"<\/span>:<span class=\"cm-string\">\"W\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">8<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"value\"<\/span>:<span class=\"cm-number\">90<\/span><\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">9<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\">  },<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt CodeMirror-linenumber-show\" style=\"left: 0px; width: 32px;\">10<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\">  {<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">11<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"address\"<\/span>:<span class=\"cm-string\">\"meter0\/ActiveProductionPower\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">12<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"type\"<\/span>:<span class=\"cm-string\">\"INTEGER\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">13<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"accessMode\"<\/span>:<span class=\"cm-string\">\"RO\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">14<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"text\"<\/span>:<span class=\"cm-string\">\"\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">15<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"unit\"<\/span>:<span class=\"cm-string\">\"W\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">16<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"value\"<\/span>:<span class=\"cm-number\">465<\/span><\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">17<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\">  },<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">18<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\">  {<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">19<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"address\"<\/span>:<span class=\"cm-string\">\"meter0\/ActivePower\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt CodeMirror-linenumber-show\" style=\"left: 0px; width: 32px;\">20<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"type\"<\/span>:<span class=\"cm-string\">\"INTEGER\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">21<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"accessMode\"<\/span>:<span class=\"cm-string\">\"RO\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">22<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"text\"<\/span>:<span class=\"cm-string\">\"Negative values for Consumption; positive for Production\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">23<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"unit\"<\/span>:<span class=\"cm-string\">\"W\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">24<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"value\"<\/span>:<span class=\"cm-number\">465<\/span><\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">25<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\">  },<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">26<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\">  {<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">27<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"address\"<\/span>:<span class=\"cm-string\">\"meter0\/ActiveConsumptionPower\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">28<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"type\"<\/span>:<span class=\"cm-string\">\"INTEGER\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">29<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"accessMode\"<\/span>:<span class=\"cm-string\">\"RO\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt CodeMirror-linenumber-show\" style=\"left: 0px; width: 32px;\">30<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"text\"<\/span>:<span class=\"cm-string\">\"\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">31<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"unit\"<\/span>:<span class=\"cm-string\">\"W\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">32<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"value\"<\/span>:<span class=\"cm-number\">0<\/span><\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">33<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\">  }<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt CodeMirror-linenumber-show\" style=\"left: 0px; width: 32px;\">34<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\">]<\/span><\/pre><\/div><\/div><\/div><\/div><\/div><\/div><div style=\"position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 1111px;\"><\/div><div class=\"CodeMirror-gutters\" style=\"height: 1111px; left: 0px;\"><div class=\"CodeMirror-gutter CodeMirror-linenumbers\" style=\"width: 40px;\"><\/div><\/div><\/div><\/div><\/pre><h5 id='412-post'><span>4.1.2 POST<\/span><\/h5><p><span>\u7528HTTP\u8bf7\u6c42\u4e2d\u7684POST\u65b9\u6cd5\u6765\u5199\u4e00\u4e2aChannel\u3002<\/span><\/p><p><span>\u66f4\u6539\u6570\u5b57\u8f93\u51fa\u7684\u72b6\u6001\uff0c\u53d1\u9001POST\u8bf7\u6c42\u5230\uff1a<\/span><a href='http:\/\/x:user@localhost:8084\/rest\/channel\/io0\/Relay1' target='_blank' class='url' rel=\"noopener\">http:\/\/x:user@localhost:8084\/rest\/channel\/io0\/Relay1<\/a><span>\uff0c\u7ed9\u51fa\uff1a<\/span><\/p><pre class=\"md-fences md-end-block md-fences-with-lineno ty-contain-cm modeLoaded\" spellcheck=\"false\" lang=\"json\"><div class=\"CodeMirror cm-s-inner cm-s-null-scroll CodeMirror-wrap\" lang=\"json\"><div style=\"overflow: hidden; position: relative; width: 3px; height: 0px; top: 13.425px; left: 34px;\"><textarea autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\" tabindex=\"0\" style=\"position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;\"><\/textarea><\/div><div class=\"CodeMirror-scrollbar-filler\" cm-not-content=\"true\"><\/div><div class=\"CodeMirror-gutter-filler\" cm-not-content=\"true\"><\/div><div class=\"CodeMirror-scroll\" tabindex=\"-1\"><div class=\"CodeMirror-sizer\" style=\"margin-left: 30px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;\"><div style=\"position: relative; top: 0px;\"><div class=\"CodeMirror-lines\" role=\"presentation\"><div role=\"presentation\" style=\"position: relative; outline: none;\"><div class=\"CodeMirror-measure\"><pre><span>xxxxxxxxxx<\/span><\/pre><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\"><div>3<\/div><\/div><\/div><div class=\"CodeMirror-measure\"><\/div><div style=\"position: relative; z-index: 1;\"><\/div><div class=\"CodeMirror-code\" role=\"presentation\"><div class=\"CodeMirror-activeline\" style=\"position: relative;\"><div class=\"CodeMirror-activeline-background CodeMirror-linebackground\"><\/div><div class=\"CodeMirror-gutter-background CodeMirror-activeline-gutter\" style=\"left: -30px; width: 30px;\"><\/div><div class=\"CodeMirror-gutter-wrapper CodeMirror-activeline-gutter\" style=\"left: -30px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt CodeMirror-linenumber-show\" style=\"left: 0px; width: 21px;\">1<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\">{<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -30px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 21px;\">2<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"value\"<\/span>: <span class=\"cm-atom\">true<\/span><\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -30px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt CodeMirror-linenumber-show\" style=\"left: 0px; width: 21px;\">3<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\">}<\/span><\/pre><\/div><\/div><\/div><\/div><\/div><\/div><div style=\"position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 93px;\"><\/div><div class=\"CodeMirror-gutters\" style=\"height: 93px; left: 0px;\"><div class=\"CodeMirror-gutter CodeMirror-linenumbers\" style=\"width: 29px;\"><\/div><\/div><\/div><\/div><\/pre><h4 id='42-endpoint-jsonrpc'><span>4.2 EndPoint &#39;\/jsonrpc&#39;<\/span><\/h4><p><span>\u53ef\u4ee5\u7528\u8fdc\u7a0b\u8fc7\u7a0b\u8c03\u7528\uff08RPC\uff09\u3002JSON-RPC\u9700\u8981\u7528POST\u65b9\u6cd5\u53d1\u9001\u7279\u6b8a\u7684\u8bf7\u6c42\u4f53\u3002<\/span><\/p><blockquote><p><span>JsonRPC\u901a\u5e38\u9700\u8981\u7279\u6b8a\u7684\u5c5e\u6027\u2018id&#39;\u4ee5\u53ca&#39;jsonrpc&#39;\uff0c\u8fd9\u4e9b\u53ef\u4ee5\u7701\u7565\u6389\uff0c\u56e0\u4e3aPOST\u8c03\u7528\u4e0d\u9700\u8981\u3002<\/span><\/p><\/blockquote><h5 id='421-getedgeconfig'><span>4.2.1 getEdgeConfig<\/span><\/h5><pre class=\"md-fences md-end-block md-fences-with-lineno ty-contain-cm modeLoaded\" spellcheck=\"false\" lang=\"json\"><div class=\"CodeMirror cm-s-inner cm-s-null-scroll CodeMirror-wrap\" lang=\"json\"><div style=\"overflow: hidden; position: relative; width: 3px; height: 0px; top: 13.425px; left: 34px;\"><textarea autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\" tabindex=\"0\" style=\"position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;\"><\/textarea><\/div><div class=\"CodeMirror-scrollbar-filler\" cm-not-content=\"true\"><\/div><div class=\"CodeMirror-gutter-filler\" cm-not-content=\"true\"><\/div><div class=\"CodeMirror-scroll\" tabindex=\"-1\"><div class=\"CodeMirror-sizer\" style=\"margin-left: 30px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;\"><div style=\"position: relative; top: 0px;\"><div class=\"CodeMirror-lines\" role=\"presentation\"><div role=\"presentation\" style=\"position: relative; outline: none;\"><div class=\"CodeMirror-measure\"><pre><span>xxxxxxxxxx<\/span><\/pre><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\"><div>4<\/div><\/div><\/div><div class=\"CodeMirror-measure\"><\/div><div style=\"position: relative; z-index: 1;\"><\/div><div class=\"CodeMirror-code\" role=\"presentation\"><div class=\"CodeMirror-activeline\" style=\"position: relative;\"><div class=\"CodeMirror-activeline-background CodeMirror-linebackground\"><\/div><div class=\"CodeMirror-gutter-background CodeMirror-activeline-gutter\" style=\"left: -30px; width: 30px;\"><\/div><div class=\"CodeMirror-gutter-wrapper CodeMirror-activeline-gutter\" style=\"left: -30px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt CodeMirror-linenumber-show\" style=\"left: 0px; width: 21px;\">1<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\">{<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -30px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 21px;\">2<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp;<span class=\"cm-string cm-property\">\"method\"<\/span>: <span class=\"cm-string\">\"getEdgeConfig\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -30px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 21px;\">3<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp;<span class=\"cm-string cm-property\">\"params\"<\/span>: {}<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -30px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt CodeMirror-linenumber-show\" style=\"left: 0px; width: 21px;\">4<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\">}<\/span><\/pre><\/div><\/div><\/div><\/div><\/div><\/div><div style=\"position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 123px;\"><\/div><div class=\"CodeMirror-gutters\" style=\"height: 123px; left: 0px;\"><div class=\"CodeMirror-gutter CodeMirror-linenumbers\" style=\"width: 29px;\"><\/div><\/div><\/div><\/div><\/pre><h5 id='422-componentjsonapi'><span>4.2.2 componentJsonAPI<\/span><\/h5><p><span>\u8f6c\u53d1\u4e00\u4e2aJSON-RPC\u8d1f\u8f7d\u7ed9\u5bf9\u5e94\u7684Component\uff0c\u901a\u8fc7Component-ID\u8bc6\u522b<\/span><\/p><h6 id='4221-getmodbusprotocol'><span>4.2.2.1 getModbusProtocol<\/span><\/h6><p><span>Gets the currently active Modbus-TCP protocol definition from the Modbus-TCP-Api Controller with the ID &quot;ctrlModbusTcp0&quot;.<\/span><\/p><pre class=\"md-fences md-end-block md-fences-with-lineno ty-contain-cm modeLoaded\" spellcheck=\"false\" lang=\"json\"><div class=\"CodeMirror cm-s-inner cm-s-null-scroll CodeMirror-wrap\" lang=\"json\"><div style=\"overflow: hidden; position: relative; width: 3px; height: 0px; top: 13.425px; left: 45px;\"><textarea autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\" tabindex=\"0\" style=\"position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;\"><\/textarea><\/div><div class=\"CodeMirror-scrollbar-filler\" cm-not-content=\"true\"><\/div><div class=\"CodeMirror-gutter-filler\" cm-not-content=\"true\"><\/div><div class=\"CodeMirror-scroll\" tabindex=\"-1\"><div class=\"CodeMirror-sizer\" style=\"margin-left: 41px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;\"><div style=\"position: relative; top: 0px;\"><div class=\"CodeMirror-lines\" role=\"presentation\"><div role=\"presentation\" style=\"position: relative; outline: none;\"><div class=\"CodeMirror-measure\"><pre><span>xxxxxxxxxx<\/span><\/pre><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\"><div>11<\/div><\/div><\/div><div class=\"CodeMirror-measure\"><\/div><div style=\"position: relative; z-index: 1;\"><\/div><div class=\"CodeMirror-code\" role=\"presentation\" style=\"\"><div class=\"CodeMirror-activeline\" style=\"position: relative;\"><div class=\"CodeMirror-activeline-background CodeMirror-linebackground\"><\/div><div class=\"CodeMirror-gutter-background CodeMirror-activeline-gutter\" style=\"left: -41px; width: 41px;\"><\/div><div class=\"CodeMirror-gutter-wrapper CodeMirror-activeline-gutter\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt CodeMirror-linenumber-show\" style=\"left: 0px; width: 32px;\">1<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\">{<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">2<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp;<span class=\"cm-string cm-property\">\"method\"<\/span>:<span class=\"cm-string\">\"componentJsonApi\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">3<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp;<span class=\"cm-string cm-property\">\"params\"<\/span>:{<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">4<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"componentId\"<\/span>:<span class=\"cm-string\">\"ctrlApiModbusTcp0\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">5<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"payload\"<\/span>:{<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">6<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"method\"<\/span>:<span class=\"cm-string\">\"getModbusProtocol\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">7<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp; &nbsp;<span class=\"cm-string cm-property\">\"params\"<\/span>:{<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">8<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp; &nbsp;  }<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">9<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> &nbsp;  }<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt CodeMirror-linenumber-show\" style=\"left: 0px; width: 32px;\">10<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\">  }<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt CodeMirror-linenumber-show\" style=\"left: 0px; width: 32px;\">11<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\">}<\/span><\/pre><\/div><\/div><\/div><\/div><\/div><\/div><div style=\"position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 339px;\"><\/div><div class=\"CodeMirror-gutters\" style=\"height: 339px; left: 0px;\"><div class=\"CodeMirror-gutter CodeMirror-linenumbers\" style=\"width: 40px;\"><\/div><\/div><\/div><\/div><\/pre><h5 id='423-updatecomponentconfig'><span>4.2.3 updateComponentConfig<\/span><\/h5><p><span>\u66f4\u65b0Component\u914d\u7f6e\u9879<\/span><\/p><pre class=\"md-fences md-end-block md-fences-with-lineno ty-contain-cm modeLoaded\" spellcheck=\"false\" lang=\"json\"><div class=\"CodeMirror cm-s-inner cm-s-null-scroll CodeMirror-wrap\" lang=\"json\"><div style=\"overflow: hidden; position: relative; width: 3px; height: 0px; top: 13.425px; left: 45px;\"><textarea autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\" tabindex=\"0\" style=\"position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;\"><\/textarea><\/div><div class=\"CodeMirror-scrollbar-filler\" cm-not-content=\"true\"><\/div><div class=\"CodeMirror-gutter-filler\" cm-not-content=\"true\"><\/div><div class=\"CodeMirror-scroll\" tabindex=\"-1\"><div class=\"CodeMirror-sizer\" style=\"margin-left: 41px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;\"><div style=\"position: relative; top: 0px;\"><div class=\"CodeMirror-lines\" role=\"presentation\"><div role=\"presentation\" style=\"position: relative; outline: none;\"><div class=\"CodeMirror-measure\"><pre><span>xxxxxxxxxx<\/span><\/pre><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\"><div>10<\/div><\/div><\/div><div class=\"CodeMirror-measure\"><\/div><div style=\"position: relative; z-index: 1;\"><\/div><div class=\"CodeMirror-code\" role=\"presentation\" style=\"\"><div class=\"CodeMirror-activeline\" style=\"position: relative;\"><div class=\"CodeMirror-activeline-background CodeMirror-linebackground\"><\/div><div class=\"CodeMirror-gutter-background CodeMirror-activeline-gutter\" style=\"left: -41px; width: 41px;\"><\/div><div class=\"CodeMirror-gutter-wrapper CodeMirror-activeline-gutter\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt CodeMirror-linenumber-show\" style=\"left: 0px; width: 32px;\">1<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\">{<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">2<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"><span class=\"cm-tab\" role=\"presentation\" cm-text=\"\t\">    <\/span><span class=\"cm-string cm-property\">\"method\"<\/span>: <span class=\"cm-string\">\"updateComponentConfig\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">3<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"><span class=\"cm-tab\" role=\"presentation\" cm-text=\"\t\">    <\/span><span class=\"cm-string cm-property\">\"params\"<\/span>: {<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">4<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"><span class=\"cm-tab\" role=\"presentation\" cm-text=\"\t\">    <\/span><span class=\"cm-tab\" role=\"presentation\" cm-text=\"\t\">    <\/span><span class=\"cm-string cm-property\">\"componentId\"<\/span>: <span class=\"cm-string\">\"ctrlDebugLog0\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">5<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"><span class=\"cm-tab\" role=\"presentation\" cm-text=\"\t\">    <\/span><span class=\"cm-tab\" role=\"presentation\" cm-text=\"\t\">    <\/span><span class=\"cm-string cm-property\">\"properties\"<\/span>: [{<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">6<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"> <span class=\"cm-tab\" role=\"presentation\" cm-text=\"\t\">   <\/span><span class=\"cm-tab\" role=\"presentation\" cm-text=\"\t\">    <\/span><span class=\"cm-tab\" role=\"presentation\" cm-text=\"\t\">    <\/span><span class=\"cm-string cm-property\">\"name\"<\/span>: <span class=\"cm-string\">\"enabled\"<\/span>,<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">7<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"><span class=\"cm-tab\" role=\"presentation\" cm-text=\"\t\">    <\/span><span class=\"cm-tab\" role=\"presentation\" cm-text=\"\t\">    <\/span><span class=\"cm-tab\" role=\"presentation\" cm-text=\"\t\">    <\/span><span class=\"cm-string cm-property\">\"value\"<\/span>: <span class=\"cm-atom\">true<\/span><\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">8<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"><span class=\"cm-tab\" role=\"presentation\" cm-text=\"\t\">    <\/span><span class=\"cm-tab\" role=\"presentation\" cm-text=\"\t\">    <\/span>}]<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt\" style=\"left: 0px; width: 32px;\">9<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\"><span class=\"cm-tab\" role=\"presentation\" cm-text=\"\t\">    <\/span>}<\/span><\/pre><\/div><div style=\"position: relative;\"><div class=\"CodeMirror-gutter-wrapper\" style=\"left: -41px;\"><div class=\"CodeMirror-linenumber CodeMirror-gutter-elt CodeMirror-linenumber-show\" style=\"left: 0px; width: 32px;\">10<\/div><\/div><pre class=\" CodeMirror-line \" role=\"presentation\"><span role=\"presentation\" style=\"padding-right: 0.1px;\">}<\/span><\/pre><\/div><\/div><\/div><\/div><\/div><\/div><div style=\"position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 309px;\"><\/div><div class=\"CodeMirror-gutters\" style=\"height: 309px; left: 0px;\"><div class=\"CodeMirror-gutter CodeMirror-linenumbers\" style=\"width: 40px;\"><\/div><\/div><\/div><\/div><\/pre><h3 id='5-api-websocket'><span>5. Api Websocket<\/span><\/h3><p><span>\u7528\u4e8e\u548cOpenEMS UI\u7684\u672c\u5730\u8fde\u63a5\u3002\u901a\u8fc7HTTP websocket\u4e3aOpenEMS Edge\u63d0\u4f9bJSON\/REST\u5b9e\u73b0\u3002\u901a\u8fc7Websocket\u4ece\u5916\u90e8\u8bbe\u5907\u63d0\u4f9b\u5bf9Channel\u548cJSON-RPC\u8bf7\u6c42\u7684\u8bbf\u95ee\u3002<\/span><\/p><p><a href='https:\/\/github.com\/OpenEMS\/openems\/tree\/develop\/io.openems.edge.controller.api.websocket' target='_blank' class='url' rel=\"noopener\">https:\/\/github.com\/OpenEMS\/openems\/tree\/develop\/io.openems.edge.controller.api.websocket<\/a><\/p><h3 id='6-asymmetric-balancing-cos-phi'><span>6. Asymmetric Balancing Cos-Phi<\/span><\/h3><p><span>Controls an asymmetric energy storage system in self-consumption optimization mode while keeping the grid meter on a defined cos-phi.<\/span><\/p><p><span>\u5728\u81ea\u6211\u6d88\u8d39\u4f18\u5316\u6a21\u5f0f\u4e0b\u63a7\u5236\u975e\u5bf9\u79f0\u50a8\u80fd\u7cfb\u7edf\uff0c\u540c\u65f6\u5c06\u7535\u7f51\u7535\u8868\u4fdd\u6301\u5728\u4e00\u4e2a\u786e\u5b9a\u7684\u4f59\u5ea6\u4e0a\u3002<\/span><\/p><p><a href='https:\/\/github.com\/OpenEMS\/openems\/tree\/develop\/io.openems.edge.controller.asymmetric.balancingcosphi' target='_blank' class='url' rel=\"noopener\">https:\/\/github.com\/OpenEMS\/openems\/tree\/develop\/io.openems.edge.controller.asymmetric.balancingcosphi<\/a><\/p><h3 id='7-asymmetric-fix-active-power'><span>7. Asymmetric Fix Active Power<\/span><\/h3><p><span>Sets a fixed active power for charging\/discharging of an asymmetric energy storage system.<\/span><\/p><p><span>\u4e3a\u975e\u5bf9\u79f0\u50a8\u80fd\u7cfb\u7edf\u7684\u5145\u7535\/\u653e\u7535\u8bbe\u7f6e\u56fa\u5b9a\u6709\u529f\u529f\u7387\u3002<\/span><\/p><p><a href='https:\/\/github.com\/OpenEMS\/openems\/tree\/develop\/io.openems.edge.controller.asymmetric.fixactivepower' target='_blank' class='url' rel=\"noopener\">https:\/\/github.com\/OpenEMS\/openems\/tree\/develop\/io.openems.edge.controller.asymmetric.fixactivepower<\/a><\/p><h3 id='8-asymmetric-fix-reactive-power'><span>8. Asymmetric Fix Reactive Power<\/span><\/h3><h3 id='9-asymmetric-peak-shaving'><span>9. Asymmetric Peak-Shaving<\/span><\/h3><h3 id='10-asymmetric-phase-rectification'><span>10. Asymmetric Phase Rectification<\/span><\/h3><h3 id='11-channel-threshold'><span>11. Channel-Threshold<\/span><\/h3><\/div><\/div>\n<\/body>\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>OpenEMS\u662f\u4e00\u4e2a\u80fd\u6e90\u7ba1\u7406\u7cfb\u7edf\uff0c\u4e3b\u8981\u7528\u4e8e\u80fd\u6e90\u6d88\u8017\u76d1\u6d4b\u548c\u63a7\u5236\u3002\u8fd9\u4e2a\u7cfb\u7edf\u53ef\u4ee5\u5e2e\u52a9\u7528\u6237\u8bc6\u522b\u80fd\u6e90\u6d6a\u8d39\uff0c\u964d\u4f4e\u80fd\u6e90\u6210\u672c\uff0c<a class=\"more-link\" href=\"https:\/\/blog.mhrooz.xyz\/index.php\/2023\/04\/06\/openems_edge_mo_kuai\/\">\u7ee7\u7eed\u9605\u8bfb<span class=\"screen-reader-text\">&#8220;OpenEMS Edge\u6a21\u5757&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/blog.mhrooz.xyz\/index.php\/wp-json\/wp\/v2\/posts\/2793"}],"collection":[{"href":"https:\/\/blog.mhrooz.xyz\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.mhrooz.xyz\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.mhrooz.xyz\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.mhrooz.xyz\/index.php\/wp-json\/wp\/v2\/comments?post=2793"}],"version-history":[{"count":2,"href":"https:\/\/blog.mhrooz.xyz\/index.php\/wp-json\/wp\/v2\/posts\/2793\/revisions"}],"predecessor-version":[{"id":2795,"href":"https:\/\/blog.mhrooz.xyz\/index.php\/wp-json\/wp\/v2\/posts\/2793\/revisions\/2795"}],"wp:attachment":[{"href":"https:\/\/blog.mhrooz.xyz\/index.php\/wp-json\/wp\/v2\/media?parent=2793"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.mhrooz.xyz\/index.php\/wp-json\/wp\/v2\/categories?post=2793"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.mhrooz.xyz\/index.php\/wp-json\/wp\/v2\/tags?post=2793"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}