mirror of
https://github.com/MickMake/GoSungrow.git
synced 2025-05-05 09:20:16 +02:00
v2.3.2 - Support update freqs.
This commit is contained in:
parent
064b963b85
commit
02151a60b0
253
.idea/workspace.xml
generated
253
.idea/workspace.xml
generated
@ -5,13 +5,39 @@
|
||||
</component>
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="76adadc9-ae71-42a6-82a1-66dbc8ecb14c" name="Changes" comment="">
|
||||
<change afterPath="$PROJECT_DIR$/iSolarCloud/api/legacy.go" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/iSolarCloud/api/struct_de.go" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/cmd/cmd_mqtt.go" beforeDir="false" afterPath="$PROJECT_DIR$/cmd/cmd_mqtt.go" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/iSolarCloud/AppService/getDeviceList/data.go" beforeDir="false" afterPath="$PROJECT_DIR$/iSolarCloud/AppService/getDeviceList/data.go" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/iSolarCloud/AppService/getHouseholdStoragePsReport/data.go" beforeDir="false" afterPath="$PROJECT_DIR$/iSolarCloud/AppService/getHouseholdStoragePsReport/data.go" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/iSolarCloud/AppService/getPowerDevicePointInfo/data.go" beforeDir="false" afterPath="$PROJECT_DIR$/iSolarCloud/AppService/getPowerDevicePointInfo/data.go" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/iSolarCloud/AppService/getPsDetail/data.go" beforeDir="false" afterPath="$PROJECT_DIR$/iSolarCloud/AppService/getPsDetail/data.go" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/iSolarCloud/AppService/getPsDetailWithPsType/data.go" beforeDir="false" afterPath="$PROJECT_DIR$/iSolarCloud/AppService/getPsDetailWithPsType/data.go" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/iSolarCloud/AppService/getPsList/data.go" beforeDir="false" afterPath="$PROJECT_DIR$/iSolarCloud/AppService/getPsList/data.go" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/iSolarCloud/AppService/queryDeviceList/data.go" beforeDir="false" afterPath="$PROJECT_DIR$/iSolarCloud/AppService/queryDeviceList/data.go" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/iSolarCloud/AppService/queryDeviceListForApp/data.go" beforeDir="false" afterPath="$PROJECT_DIR$/iSolarCloud/AppService/queryDeviceListForApp/data.go" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/iSolarCloud/AppService/queryMutiPointDataList/data.go" beforeDir="false" afterPath="$PROJECT_DIR$/iSolarCloud/AppService/queryMutiPointDataList/data.go" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/iSolarCloud/api/apiReflect/reflect.go" beforeDir="false" afterPath="$PROJECT_DIR$/iSolarCloud/api/apiReflect/reflect.go" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/iSolarCloud/api/const.go" beforeDir="false" afterPath="$PROJECT_DIR$/iSolarCloud/api/const.go" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/iSolarCloud/api/nullEndpoint/struct.go" beforeDir="false" afterPath="$PROJECT_DIR$/iSolarCloud/api/nullEndpoint/struct.go" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/iSolarCloud/api/struct_data.go" beforeDir="false" afterPath="$PROJECT_DIR$/iSolarCloud/api/struct_data.go" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/iSolarCloud/api/struct_point.go" beforeDir="false" afterPath="$PROJECT_DIR$/iSolarCloud/api/struct_point.go" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/iSolarCloud/api/struct_points.go" beforeDir="false" afterPath="$PROJECT_DIR$/iSolarCloud/api/struct_points.go" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/iSolarCloud/api/struct_template_points.go" beforeDir="false" afterPath="$PROJECT_DIR$/iSolarCloud/api/struct_template_points.go" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/iSolarCloud/api/types.go" beforeDir="false" afterPath="$PROJECT_DIR$/iSolarCloud/api/types.go" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/iSolarCloud/api/valueTypes/bool.go" beforeDir="false" afterPath="$PROJECT_DIR$/iSolarCloud/api/valueTypes/bool.go" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/iSolarCloud/api/valueTypes/datetime.go" beforeDir="false" afterPath="$PROJECT_DIR$/iSolarCloud/api/valueTypes/datetime.go" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/iSolarCloud/api/valueTypes/float.go" beforeDir="false" afterPath="$PROJECT_DIR$/iSolarCloud/api/valueTypes/float.go" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/iSolarCloud/api/valueTypes/integers.go" beforeDir="false" afterPath="$PROJECT_DIR$/iSolarCloud/api/valueTypes/integers.go" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/iSolarCloud/api/valueTypes/point.go" beforeDir="false" afterPath="$PROJECT_DIR$/iSolarCloud/api/valueTypes/point.go" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/iSolarCloud/api/valueTypes/string.go" beforeDir="false" afterPath="$PROJECT_DIR$/iSolarCloud/api/valueTypes/string.go" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/iSolarCloud/api/valueTypes/types.go" beforeDir="false" afterPath="$PROJECT_DIR$/iSolarCloud/api/valueTypes/types.go" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/iSolarCloud/api/valueTypes/uv.go" beforeDir="false" afterPath="$PROJECT_DIR$/iSolarCloud/api/valueTypes/uv.go" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/iSolarCloud/data.go" beforeDir="false" afterPath="$PROJECT_DIR$/iSolarCloud/data.go" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/iSolarCloud/highlevel.go" beforeDir="false" afterPath="$PROJECT_DIR$/iSolarCloud/highlevel.go" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/iSolarCloud/z" beforeDir="false" afterPath="$PROJECT_DIR$/iSolarCloud/z" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/mmHa/struct.go" beforeDir="false" afterPath="$PROJECT_DIR$/mmHa/struct.go" afterDir="false" />
|
||||
</list>
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||
@ -85,7 +111,7 @@
|
||||
<configuration name="GoSungrow" type="GoApplicationRunConfiguration" factoryName="Go Application">
|
||||
<module name="GoSungrow" />
|
||||
<working_directory value="$PROJECT_DIR$" />
|
||||
<parameters value="data get queryDeviceList" />
|
||||
<parameters value="data get queryDeviceList 1171348" />
|
||||
<envs>
|
||||
<env name="GOCACHE" value="/Volumes/Media/GoCache" />
|
||||
</envs>
|
||||
@ -229,7 +255,7 @@
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/highlevel.go</url>
|
||||
<line>1047</line>
|
||||
<line>1049</line>
|
||||
<option name="timeStamp" value="906" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
@ -274,27 +300,22 @@
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/highlevel.go</url>
|
||||
<line>923</line>
|
||||
<line>925</line>
|
||||
<option name="timeStamp" value="967" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/highlevel.go</url>
|
||||
<line>920</line>
|
||||
<line>922</line>
|
||||
<option name="timeStamp" value="970" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/api/struct_data.go</url>
|
||||
<line>790</line>
|
||||
<option name="timeStamp" value="972" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/highlevel.go</url>
|
||||
<line>888</line>
|
||||
<line>890</line>
|
||||
<option name="timeStamp" value="1216" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/highlevel.go</url>
|
||||
<line>869</line>
|
||||
<line>871</line>
|
||||
<option name="timeStamp" value="1237" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
@ -327,16 +348,6 @@
|
||||
<line>465</line>
|
||||
<option name="timeStamp" value="1587" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/AppService/getPsDetailWithPsType/data.go</url>
|
||||
<line>181</line>
|
||||
<option name="timeStamp" value="1676" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/AppService/getPsDetailWithPsType/data.go</url>
|
||||
<line>189</line>
|
||||
<option name="timeStamp" value="1721" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/struct.go</url>
|
||||
<line>117</line>
|
||||
@ -349,7 +360,7 @@
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/AppService/getDeviceList/data.go</url>
|
||||
<line>287</line>
|
||||
<line>268</line>
|
||||
<option name="timeStamp" value="1758" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
@ -422,16 +433,6 @@
|
||||
<line>65</line>
|
||||
<option name="timeStamp" value="1967" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/api/valueTypes/point.go</url>
|
||||
<line>52</line>
|
||||
<option name="timeStamp" value="1968" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/api/valueTypes/point.go</url>
|
||||
<line>22</line>
|
||||
<option name="timeStamp" value="1969" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/AppService/getIncomeSettingInfos/data.go</url>
|
||||
<line>77</line>
|
||||
@ -442,120 +443,120 @@
|
||||
<line>86</line>
|
||||
<option name="timeStamp" value="1996" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/api/types.go</url>
|
||||
<line>65</line>
|
||||
<option name="timeStamp" value="1997" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/api/apiReflect/reflect.go</url>
|
||||
<line>151</line>
|
||||
<option name="timeStamp" value="2014" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/AppService/getPsList/data.go</url>
|
||||
<line>265</line>
|
||||
<option name="timeStamp" value="2021" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/api/apiReflect/reflect.go</url>
|
||||
<line>68</line>
|
||||
<option name="timeStamp" value="2023" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/api/valueTypes/types.go</url>
|
||||
<line>352</line>
|
||||
<option name="timeStamp" value="2025" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/AppService/getPsWeatherList/data.go</url>
|
||||
<line>66</line>
|
||||
<option name="timeStamp" value="2029" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/api/struct_data.go</url>
|
||||
<line>127</line>
|
||||
<option name="timeStamp" value="2087" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/api/valueTypes/types.go</url>
|
||||
<line>408</line>
|
||||
<option name="timeStamp" value="2034" />
|
||||
<line>681</line>
|
||||
<option name="timeStamp" value="2090" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/AppService/queryDeviceList/data.go</url>
|
||||
<line>318</line>
|
||||
<option name="timeStamp" value="2037" />
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/api/valueTypes/types.go</url>
|
||||
<line>534</line>
|
||||
<option name="timeStamp" value="2091" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/api/struct_data.go</url>
|
||||
<line>247</line>
|
||||
<option name="timeStamp" value="2052" />
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/AppService/getPsDetailWithPsType/data.go</url>
|
||||
<line>218</line>
|
||||
<option name="timeStamp" value="2191" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/api/struct_data.go</url>
|
||||
<line>252</line>
|
||||
<option name="timeStamp" value="2053" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/api/struct_data.go</url>
|
||||
<line>158</line>
|
||||
<option name="timeStamp" value="2056" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/api/struct_data.go</url>
|
||||
<line>725</line>
|
||||
<option name="timeStamp" value="2064" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/api/struct_data.go</url>
|
||||
<line>740</line>
|
||||
<option name="timeStamp" value="2065" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/api/struct_data.go</url>
|
||||
<line>712</line>
|
||||
<option name="timeStamp" value="2066" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/api/struct_data.go</url>
|
||||
<line>456</line>
|
||||
<option name="timeStamp" value="2067" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/api/struct_data.go</url>
|
||||
<line>422</line>
|
||||
<option name="timeStamp" value="2068" />
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/api/valueTypes/datetime.go</url>
|
||||
<line>214</line>
|
||||
<option name="timeStamp" value="2203" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/api/struct_data.go</url>
|
||||
<line>420</line>
|
||||
<option name="timeStamp" value="2072" />
|
||||
<option name="timeStamp" value="2228" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/api/struct_data.go</url>
|
||||
<line>461</line>
|
||||
<option name="timeStamp" value="2073" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/api/struct_data.go</url>
|
||||
<line>419</line>
|
||||
<option name="timeStamp" value="2074" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/api/struct_data.go</url>
|
||||
<line>451</line>
|
||||
<option name="timeStamp" value="2075" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/api/struct_data.go</url>
|
||||
<line>446</line>
|
||||
<option name="timeStamp" value="2076" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/api/struct_data.go</url>
|
||||
<line>500</line>
|
||||
<option name="timeStamp" value="2078" />
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/api/valueTypes/uv.go</url>
|
||||
<line>454</line>
|
||||
<option name="timeStamp" value="2261" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/AppService/queryDeviceList/data.go</url>
|
||||
<line>251</line>
|
||||
<option name="timeStamp" value="2079" />
|
||||
<option name="timeStamp" value="2367" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/api/struct_data.go</url>
|
||||
<line>120</line>
|
||||
<option name="timeStamp" value="2373" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/AppService/getPsDetailWithPsType/data.go</url>
|
||||
<line>174</line>
|
||||
<option name="timeStamp" value="2417" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/AppService/getPsDetailWithPsType/data.go</url>
|
||||
<line>180</line>
|
||||
<option name="timeStamp" value="2418" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/AppService/getPsList/data.go</url>
|
||||
<line>172</line>
|
||||
<option name="timeStamp" value="2420" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/api/struct_data.go</url>
|
||||
<line>134</line>
|
||||
<option name="timeStamp" value="2425" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/AppService/queryDeviceList/data.go</url>
|
||||
<line>242</line>
|
||||
<option name="timeStamp" value="2463" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/AppService/queryDeviceList/data.go</url>
|
||||
<line>397</line>
|
||||
<option name="timeStamp" value="2471" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/AppService/queryDeviceList/data.go</url>
|
||||
<line>395</line>
|
||||
<option name="timeStamp" value="2472" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/AppService/queryDeviceList/data.go</url>
|
||||
<line>396</line>
|
||||
<option name="timeStamp" value="2475" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/AppService/queryDeviceList/data.go</url>
|
||||
<line>399</line>
|
||||
<option name="timeStamp" value="2478" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/api/struct_data.go</url>
|
||||
<line>289</line>
|
||||
<option name="timeStamp" value="2481" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/api/struct_data.go</url>
|
||||
<line>307</line>
|
||||
<option name="timeStamp" value="2482" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/api/struct_data.go</url>
|
||||
<line>306</line>
|
||||
<option name="timeStamp" value="2483" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
|
||||
<url>file://$PROJECT_DIR$/iSolarCloud/api/struct_data.go</url>
|
||||
<line>290</line>
|
||||
<option name="timeStamp" value="2484" />
|
||||
</line-breakpoint>
|
||||
</breakpoints>
|
||||
<default-breakpoints>
|
||||
@ -564,8 +565,10 @@
|
||||
</breakpoint-manager>
|
||||
<watches-manager>
|
||||
<configuration name="GoApplicationRunConfiguration">
|
||||
<watch expression="dm.DataPoints["p83012"]" language="go" />
|
||||
<watch expression="tp["getPsDetail.1129147.P83012Value"]" language="go" />
|
||||
<watch expression="entries.Map["virtual.1171348_14_1_2.power_pv_active"]" language="go" />
|
||||
<watch expression="power_pv_active" language="go" />
|
||||
<watch expression="des" language="go" />
|
||||
<watch expression="dm.Map["virtual.1171348_14_1_2.power_pv_active"]" language="go" />
|
||||
</configuration>
|
||||
</watches-manager>
|
||||
</component>
|
||||
|
@ -373,10 +373,10 @@ func (ca *Cmds) MqttCron() error {
|
||||
func (ca *Cmds) Update(endpoint string, data api.DataMap, newDay bool) error {
|
||||
for range Only.Once {
|
||||
// Also getPowerStatistics, getHouseholdStoragePsReport, getPsList, getUpTimePoint,
|
||||
cmdLog.LogPrintDate("Syncing %d entries with HASSIO from %s.\n", len(data.DataPoints), endpoint)
|
||||
cmdLog.LogPrintDate("Syncing %d entries with HASSIO from %s.\n", len(data.Map), endpoint)
|
||||
|
||||
for _, o := range data.Order {
|
||||
entries := data.DataPoints[o]
|
||||
entries := data.Map[o]
|
||||
r := entries.GetEntry(api.LastEntry) // Gets the last entry
|
||||
if !r.Point.Valid {
|
||||
fmt.Printf("\nInvalid: %v\n", r)
|
||||
@ -398,11 +398,11 @@ func (ca *Cmds) Update(endpoint string, data api.DataMap, newDay bool) error {
|
||||
FullId: fullId, // string(r.FullId), // WAS r.Point.FullId
|
||||
// FullName: r.Point.Name,
|
||||
Units: r.Point.Unit,
|
||||
ValueName: r.Point.Name,
|
||||
ValueName: r.Point.Description,
|
||||
// ValueName: r.Id,
|
||||
DeviceClass: "",
|
||||
StateClass: r.Point.TimeSpan,
|
||||
Value: r.Value,
|
||||
StateClass: r.Point.UpdateFreq,
|
||||
Value: r.Value.String(),
|
||||
|
||||
// Icon: "",
|
||||
// ValueTemplate: "",
|
||||
|
@ -3,8 +3,8 @@ package getDeviceList
|
||||
import (
|
||||
"GoSungrow/iSolarCloud/api"
|
||||
"GoSungrow/iSolarCloud/api/apiReflect"
|
||||
"GoSungrow/iSolarCloud/api/valueTypes"
|
||||
"GoSungrow/iSolarCloud/api/output"
|
||||
"GoSungrow/iSolarCloud/api/valueTypes"
|
||||
"fmt"
|
||||
"github.com/MickMake/GoUnify/Only"
|
||||
)
|
||||
@ -27,50 +27,50 @@ func (rd RequestData) Help() string {
|
||||
|
||||
type ResultData struct {
|
||||
PageList []struct {
|
||||
AttrID valueTypes.Integer `json:"attr_id"`
|
||||
ChannelId valueTypes.Integer `json:"chnnl_id" PointId:"channel_id"`
|
||||
CommandStatus valueTypes.Integer `json:"command_status"`
|
||||
ConnectState valueTypes.Integer `json:"connect_state"`
|
||||
DataFlag valueTypes.Integer `json:"data_flag"`
|
||||
DataFlagDetail valueTypes.Integer `json:"data_flag_detail"`
|
||||
DevFaultStatus string `json:"dev_fault_status"`
|
||||
DevStatus string `json:"dev_status"`
|
||||
DeviceArea string `json:"device_area"`
|
||||
DeviceCode valueTypes.Integer `json:"device_code"`
|
||||
AttrID valueTypes.Integer `json:"attr_id"`
|
||||
ChannelId valueTypes.Integer `json:"chnnl_id" PointId:"channel_id"`
|
||||
CommandStatus valueTypes.Integer `json:"command_status"`
|
||||
ConnectState valueTypes.Integer `json:"connect_state"`
|
||||
DataFlag valueTypes.Integer `json:"data_flag"`
|
||||
DataFlagDetail valueTypes.Integer `json:"data_flag_detail"`
|
||||
DevFaultStatus valueTypes.Integer `json:"dev_fault_status"`
|
||||
DevStatus valueTypes.Integer `json:"dev_status"`
|
||||
DeviceArea valueTypes.Integer `json:"device_area"`
|
||||
DeviceCode valueTypes.Integer `json:"device_code"`
|
||||
DeviceFactoryDate valueTypes.DateTime `json:"device_factory_date"`
|
||||
DeviceID valueTypes.Integer `json:"device_id"`
|
||||
DeviceModel valueTypes.String `json:"device_model"`
|
||||
DeviceModelCode valueTypes.String `json:"device_model_code"`
|
||||
DeviceModelID valueTypes.Integer `json:"device_model_id"`
|
||||
DeviceName valueTypes.String `json:"device_name"`
|
||||
DeviceProSn valueTypes.String `json:"device_pro_sn"`
|
||||
DeviceState string `json:"device_state"`
|
||||
DeviceSubType interface{} `json:"device_sub_type"`
|
||||
DeviceSubTypeName interface{} `json:"device_sub_type_name"`
|
||||
DeviceType valueTypes.Integer `json:"device_type"`
|
||||
FactoryName valueTypes.String `json:"factory_name"`
|
||||
InstallerDevFaultStatus string `json:"installer_dev_fault_status"`
|
||||
InverterModelType valueTypes.Integer `json:"inverter_model_type"`
|
||||
IsCountryCheck valueTypes.Bool `json:"is_country_check"`
|
||||
IsHasFunctionEnum valueTypes.Bool `json:"is_has_function_enum"`
|
||||
IsHasTheAbility valueTypes.Bool `json:"is_has_the_ability"`
|
||||
IsInit valueTypes.Bool `json:"is_init"`
|
||||
IsReadSet valueTypes.Bool `json:"is_read_set"`
|
||||
IsReplacing valueTypes.Bool `json:"is_replacing"`
|
||||
IsReset valueTypes.Bool `json:"is_reset"`
|
||||
IsSecond valueTypes.Bool `json:"is_second"`
|
||||
IsThirdParty valueTypes.Bool `json:"is_third_party"`
|
||||
ModuleUUID valueTypes.Integer `json:"module_uuid"`
|
||||
OwnerDevFaultStatus string `json:"owner_dev_fault_status"`
|
||||
P24 interface{} `json:"p24"`
|
||||
Posx interface{} `json:"posx"`
|
||||
Posy interface{} `json:"posy"`
|
||||
PsID valueTypes.Integer `json:"ps_id"`
|
||||
PsKey valueTypes.PsKey `json:"ps_key"`
|
||||
RelState valueTypes.Integer `json:"rel_state"`
|
||||
Sn valueTypes.String `json:"sn" PointName:"Serial Number"`
|
||||
TypeName valueTypes.String `json:"type_name"`
|
||||
UUID valueTypes.Integer `json:"uuid"`
|
||||
DeviceID valueTypes.Integer `json:"device_id"`
|
||||
DeviceModel valueTypes.String `json:"device_model"`
|
||||
DeviceModelCode valueTypes.String `json:"device_model_code"`
|
||||
DeviceModelID valueTypes.Integer `json:"device_model_id"`
|
||||
DeviceName valueTypes.String `json:"device_name"`
|
||||
DeviceProSn valueTypes.String `json:"device_pro_sn"`
|
||||
DeviceState valueTypes.Integer `json:"device_state"`
|
||||
DeviceSubType interface{} `json:"device_sub_type"`
|
||||
DeviceSubTypeName interface{} `json:"device_sub_type_name"`
|
||||
DeviceType valueTypes.Integer `json:"device_type"`
|
||||
FactoryName valueTypes.String `json:"factory_name"`
|
||||
InstallerDevFaultStatus valueTypes.Integer `json:"installer_dev_fault_status"`
|
||||
InverterModelType valueTypes.Integer `json:"inverter_model_type"`
|
||||
IsCountryCheck valueTypes.Bool `json:"is_country_check"`
|
||||
IsHasFunctionEnum valueTypes.Bool `json:"is_has_function_enum"`
|
||||
IsHasTheAbility valueTypes.Bool `json:"is_has_the_ability"`
|
||||
IsInit valueTypes.Bool `json:"is_init"`
|
||||
IsReadSet valueTypes.Bool `json:"is_read_set"`
|
||||
IsReplacing valueTypes.Bool `json:"is_replacing"`
|
||||
IsReset valueTypes.Bool `json:"is_reset"`
|
||||
IsSecond valueTypes.Bool `json:"is_second"`
|
||||
IsThirdParty valueTypes.Bool `json:"is_third_party"`
|
||||
ModuleUUID valueTypes.Integer `json:"module_uuid"`
|
||||
OwnerDevFaultStatus valueTypes.Integer `json:"owner_dev_fault_status"`
|
||||
P24 interface{} `json:"p24"`
|
||||
Posx interface{} `json:"posx"`
|
||||
Posy interface{} `json:"posy"`
|
||||
PsID valueTypes.Integer `json:"ps_id"`
|
||||
PsKey valueTypes.PsKey `json:"ps_key"`
|
||||
RelState valueTypes.Integer `json:"rel_state"`
|
||||
Sn valueTypes.String `json:"sn" PointName:"Serial Number"`
|
||||
TypeName valueTypes.String `json:"type_name"`
|
||||
UUID valueTypes.Integer `json:"uuid"`
|
||||
} `json:"pageList"`
|
||||
RowCount valueTypes.Integer `json:"rowCount"`
|
||||
}
|
||||
@ -86,25 +86,6 @@ func (e *ResultData) IsValid() error {
|
||||
return err
|
||||
}
|
||||
|
||||
//type DecodeResultData ResultData
|
||||
//
|
||||
//func (e *ResultData) UnmarshalJSON(data []byte) error {
|
||||
// var err error
|
||||
//
|
||||
// for range Only.Once {
|
||||
// if len(data) == 0 {
|
||||
// break
|
||||
// }
|
||||
// var pd DecodeResultData
|
||||
//
|
||||
// // Store ResultData
|
||||
// _ = json.Unmarshal(data, &pd)
|
||||
// e.Dummy = pd.Dummy
|
||||
// }
|
||||
//
|
||||
// return err
|
||||
//}
|
||||
|
||||
type Device struct {
|
||||
Vendor valueTypes.String
|
||||
PsId valueTypes.Integer
|
||||
@ -117,8 +98,8 @@ type Device struct {
|
||||
ChannelId valueTypes.Integer
|
||||
DeviceModelID valueTypes.Integer
|
||||
TypeName valueTypes.String
|
||||
DeviceState string
|
||||
DevStatus string
|
||||
DeviceState valueTypes.Integer
|
||||
DevStatus valueTypes.Integer
|
||||
Uuid valueTypes.Integer
|
||||
}
|
||||
type Devices []Device
|
||||
@ -284,7 +265,7 @@ func (e *EndPoint) GetData() api.DataMap {
|
||||
for range Only.Once {
|
||||
pkg := apiReflect.GetName("", *e)
|
||||
for _, d := range e.Response.ResultData.PageList {
|
||||
name := fmt.Sprintf("%s.%s", pkg, d.PsKey.Value())
|
||||
name := api.JoinWithDots(0, valueTypes.DateTimeLayoutDay, pkg, d.PsKey)
|
||||
entries.StructToPoints(d, name, e.Request.PsId.String(), valueTypes.NewDateTime(""))
|
||||
}
|
||||
}
|
||||
|
@ -46,42 +46,42 @@ type DayData struct {
|
||||
JthdMapVirgin valueTypes.UnitValue `json:"jthd_map_virgin" PointIgnore:"true"`
|
||||
JtydMap valueTypes.UnitValue `json:"jtyd_map"`
|
||||
JtydMapVirgin valueTypes.UnitValue `json:"jtyd_map_virgin" PointIgnore:"true"`
|
||||
P83072Map valueTypes.UnitValue `json:"p83072_map" PointId:"p83072" PointValueType:"" PointTimeSpan:"PointTimeSpanDaily"`
|
||||
P83072Map valueTypes.UnitValue `json:"p83072_map" PointId:"p83072" PointValueType:"" PointUpdateFreq:"UpdateFreqDaily"`
|
||||
P83072MapVirgin valueTypes.UnitValue `json:"p83072_map_virgin" PointIgnore:"true"`
|
||||
P83077Map valueTypes.UnitValue `json:"p83077_map" PointId:"p83077" PointValueType:"" PointTimeSpan:"PointTimeSpanDaily"`
|
||||
P83077Map valueTypes.UnitValue `json:"p83077_map" PointId:"p83077" PointValueType:"" PointUpdateFreq:"UpdateFreqDaily"`
|
||||
P83077MapVirgin valueTypes.UnitValue `json:"p83077_map_virgin" PointIgnore:"true"`
|
||||
P83088Map valueTypes.UnitValue `json:"p83088_map" PointId:"p83088" PointValueType:"" PointTimeSpan:"PointTimeSpanDaily"`
|
||||
P83088Map valueTypes.UnitValue `json:"p83088_map" PointId:"p83088" PointValueType:"" PointUpdateFreq:"UpdateFreqDaily"`
|
||||
P83088MapVirgin valueTypes.UnitValue `json:"p83088_map_virgin" PointIgnore:"true"`
|
||||
P83089Map valueTypes.UnitValue `json:"p83089_map" PointId:"p83089" PointValueType:"" PointTimeSpan:"PointTimeSpanDaily"`
|
||||
P83089Map valueTypes.UnitValue `json:"p83089_map" PointId:"p83089" PointValueType:"" PointUpdateFreq:"UpdateFreqDaily"`
|
||||
P83089MapVirgin valueTypes.UnitValue `json:"p83089_map_virgin" PointIgnore:"true"`
|
||||
P83097Map valueTypes.UnitValue `json:"p83097_map" PointId:"p83097" PointValueType:"" PointTimeSpan:"PointTimeSpanDaily"`
|
||||
P83097Map valueTypes.UnitValue `json:"p83097_map" PointId:"p83097" PointValueType:"" PointUpdateFreq:"UpdateFreqDaily"`
|
||||
P83097MapVirgin valueTypes.UnitValue `json:"p83097_map_virgin" PointIgnore:"true"`
|
||||
P83102Map valueTypes.UnitValue `json:"p83102_map" PointId:"p83102" PointValueType:"" PointTimeSpan:"PointTimeSpanDaily"`
|
||||
P83102Map valueTypes.UnitValue `json:"p83102_map" PointId:"p83102" PointValueType:"" PointUpdateFreq:"UpdateFreqDaily"`
|
||||
P83102MapVirgin valueTypes.UnitValue `json:"p83102_map_virgin" PointIgnore:"true"`
|
||||
P83118Map valueTypes.UnitValue `json:"p83118_map" PointId:"p83118" PointValueType:"" PointTimeSpan:"PointTimeSpanDaily"`
|
||||
P83118Map valueTypes.UnitValue `json:"p83118_map" PointId:"p83118" PointValueType:"" PointUpdateFreq:"UpdateFreqDaily"`
|
||||
P83118MapVirgin valueTypes.UnitValue `json:"p83118_map_virgin" PointIgnore:"true"`
|
||||
P83119Map valueTypes.UnitValue `json:"p83119_map" PointId:"p83119" PointValueType:"" PointTimeSpan:"PointTimeSpanDaily"`
|
||||
P83119Map valueTypes.UnitValue `json:"p83119_map" PointId:"p83119" PointValueType:"" PointUpdateFreq:"UpdateFreqDaily"`
|
||||
P83119MapVirgin valueTypes.UnitValue `json:"p83119_map_virgin" PointIgnore:"true"`
|
||||
P83120Map valueTypes.UnitValue `json:"p83120_map" PointId:"p83120" PointValueType:"" PointTimeSpan:"PointTimeSpanDaily"`
|
||||
P83120Map valueTypes.UnitValue `json:"p83120_map" PointId:"p83120" PointValueType:"" PointUpdateFreq:"UpdateFreqDaily"`
|
||||
P83120MapVirgin valueTypes.UnitValue `json:"p83120_map_virgin" PointIgnore:"true"`
|
||||
P83121 valueTypes.Float `json:"p83121" PointId:"p83121" PointUnitFrom:"FOO" PointTimeSpan:"PointTimeSpanDaily"`
|
||||
P83122 valueTypes.Float `json:"p83122" PointId:"p83122" PointUnitFrom:"FOO" PointTimeSpan:"PointTimeSpanDaily"`
|
||||
P83121 valueTypes.Float `json:"p83121" PointId:"p83121" PointUnitFrom:"FOO" PointUpdateFreq:"UpdateFreqDaily"`
|
||||
P83122 valueTypes.Float `json:"p83122" PointId:"p83122" PointUnitFrom:"FOO" PointUpdateFreq:"UpdateFreqDaily"`
|
||||
PointData15List []struct {
|
||||
P83076 valueTypes.Float `json:"p83076" PointId:"p83076" PointUnitFrom:"p83076_unit" PointTimeSpan:"PointTimeSpanDaily"`
|
||||
P83076 valueTypes.Float `json:"p83076" PointId:"p83076" PointUnitFrom:"p83076_unit" PointUpdateFreq:"UpdateFreqDaily"`
|
||||
P83076Unit valueTypes.String `json:"p83076_unit"`
|
||||
P83080 valueTypes.Float `json:"p83080" PointId:"p83080" PointUnitFrom:"p83080_unit" PointTimeSpan:"PointTimeSpanDaily"`
|
||||
P83080 valueTypes.Float `json:"p83080" PointId:"p83080" PointUnitFrom:"p83080_unit" PointUpdateFreq:"UpdateFreqDaily"`
|
||||
P83080Unit valueTypes.String `json:"p83080_unit"`
|
||||
P83086 valueTypes.Float `json:"p83086" PointId:"p83086" PointUnitFrom:"p83086_unit" PointTimeSpan:"PointTimeSpanDaily"`
|
||||
P83086 valueTypes.Float `json:"p83086" PointId:"p83086" PointUnitFrom:"p83086_unit" PointUpdateFreq:"UpdateFreqDaily"`
|
||||
P83086Unit valueTypes.String `json:"p83086_unit"`
|
||||
P83087 valueTypes.Float `json:"p83087" PointId:"p83087" PointUnitFrom:"p83087_unit" PointTimeSpan:"PointTimeSpanDaily"`
|
||||
P83087 valueTypes.Float `json:"p83087" PointId:"p83087" PointUnitFrom:"p83087_unit" PointUpdateFreq:"UpdateFreqDaily"`
|
||||
P83087Unit valueTypes.String `json:"p83087_unit"`
|
||||
P83096 valueTypes.Float `json:"p83096" PointId:"p83096" PointUnitFrom:"p83096_unit" PointTimeSpan:"PointTimeSpanDaily"`
|
||||
P83096 valueTypes.Float `json:"p83096" PointId:"p83096" PointUnitFrom:"p83096_unit" PointUpdateFreq:"UpdateFreqDaily"`
|
||||
P83096Unit valueTypes.String `json:"p83096_unit"`
|
||||
P83101 valueTypes.Float `json:"p83101" PointId:"p83101" PointUnitFrom:"p83101_unit" PointTimeSpan:"PointTimeSpanDaily"`
|
||||
P83101 valueTypes.Float `json:"p83101" PointId:"p83101" PointUnitFrom:"p83101_unit" PointUpdateFreq:"UpdateFreqDaily"`
|
||||
P83101Unit valueTypes.String `json:"p83101_unit"`
|
||||
P83106 valueTypes.Float `json:"p83106" PointId:"p83106" PointUnitFrom:"p83106_unit" PointTimeSpan:"PointTimeSpanDaily"`
|
||||
P83106 valueTypes.Float `json:"p83106" PointId:"p83106" PointUnitFrom:"p83106_unit" PointUpdateFreq:"UpdateFreqDaily"`
|
||||
P83106Unit valueTypes.String `json:"p83106_unit"`
|
||||
P83128 valueTypes.Float `json:"p83128" PointId:"p83128" PointUnitFrom:"p83128_unit" PointTimeSpan:"PointTimeSpanDaily"`
|
||||
P83128 valueTypes.Float `json:"p83128" PointId:"p83128" PointUnitFrom:"p83128_unit" PointUpdateFreq:"UpdateFreqDaily"`
|
||||
P83128Unit valueTypes.String `json:"p83128_unit"`
|
||||
TimeStamp valueTypes.DateTime `json:"time_stamp"`
|
||||
Zfzy valueTypes.Float `json:"zfzy" PointUnitFrom:"zfzy_unit"`
|
||||
@ -104,51 +104,51 @@ type MonthData struct {
|
||||
JthdUnit valueTypes.String `json:"jthd_unit"`
|
||||
Jtyd valueTypes.Float `json:"jtyd" PointUnitFrom:"jtyd_unit"`
|
||||
JtydUnit valueTypes.String `json:"jtyd_unit"`
|
||||
P83022 valueTypes.Float `json:"p83022" PointId:"p83022" PointTimeSpan:"PointTimeSpanMonthly"`
|
||||
P83072 valueTypes.Float `json:"p83072" PointId:"p83072" PointUnitFrom:"p83072_unit" PointTimeSpan:"PointTimeSpanMonthly"`
|
||||
P83022 valueTypes.Float `json:"p83022" PointId:"p83022" PointUpdateFreq:"UpdateFreqMonthly"`
|
||||
P83072 valueTypes.Float `json:"p83072" PointId:"p83072" PointUnitFrom:"p83072_unit" PointUpdateFreq:"UpdateFreqMonthly"`
|
||||
P83072Unit valueTypes.String `json:"p83072_unit"`
|
||||
P83077 valueTypes.Float `json:"p83077" PointId:"p83077" PointUnitFrom:"p83077_unit" PointTimeSpan:"PointTimeSpanMonthly"`
|
||||
P83077 valueTypes.Float `json:"p83077" PointId:"p83077" PointUnitFrom:"p83077_unit" PointUpdateFreq:"UpdateFreqMonthly"`
|
||||
P83077Unit valueTypes.String `json:"p83077_unit"`
|
||||
P83088 valueTypes.Float `json:"p83088" PointId:"p83088" PointUnitFrom:"p83088_unit" PointTimeSpan:"PointTimeSpanMonthly"`
|
||||
P83088 valueTypes.Float `json:"p83088" PointId:"p83088" PointUnitFrom:"p83088_unit" PointUpdateFreq:"UpdateFreqMonthly"`
|
||||
P83088Unit valueTypes.String `json:"p83088_unit"`
|
||||
P83089 valueTypes.Float `json:"p83089" PointId:"p83089" PointUnitFrom:"p83089_unit" PointTimeSpan:"PointTimeSpanMonthly"`
|
||||
P83089 valueTypes.Float `json:"p83089" PointId:"p83089" PointUnitFrom:"p83089_unit" PointUpdateFreq:"UpdateFreqMonthly"`
|
||||
P83089Unit valueTypes.String `json:"p83089_unit"`
|
||||
P83097 valueTypes.Float `json:"p83097" PointId:"p83097" PointUnitFrom:"p83097_unit" PointTimeSpan:"PointTimeSpanMonthly"`
|
||||
P83097 valueTypes.Float `json:"p83097" PointId:"p83097" PointUnitFrom:"p83097_unit" PointUpdateFreq:"UpdateFreqMonthly"`
|
||||
P83097Unit valueTypes.String `json:"p83097_unit"`
|
||||
P83102 valueTypes.Float `json:"p83102" PointId:"p83102" PointUnitFrom:"p83102_unit" PointTimeSpan:"PointTimeSpanMonthly"`
|
||||
P83102 valueTypes.Float `json:"p83102" PointId:"p83102" PointUnitFrom:"p83102_unit" PointUpdateFreq:"UpdateFreqMonthly"`
|
||||
P83102Unit valueTypes.String `json:"p83102_unit"`
|
||||
P83118 valueTypes.Float `json:"p83118" PointId:"p83118" PointUnitFrom:"p83118_unit" PointTimeSpan:"PointTimeSpanMonthly"`
|
||||
P83118 valueTypes.Float `json:"p83118" PointId:"p83118" PointUnitFrom:"p83118_unit" PointUpdateFreq:"UpdateFreqMonthly"`
|
||||
P83118Unit valueTypes.String `json:"p83118_unit"`
|
||||
P83119 valueTypes.Float `json:"p83119" PointId:"p83119" PointUnitFrom:"p83119_unit" PointTimeSpan:"PointTimeSpanMonthly"`
|
||||
P83119 valueTypes.Float `json:"p83119" PointId:"p83119" PointUnitFrom:"p83119_unit" PointUpdateFreq:"UpdateFreqMonthly"`
|
||||
P83119Unit valueTypes.String `json:"p83119_unit"`
|
||||
P83120 valueTypes.Float `json:"p83120" PointId:"p83120" PointTimeSpan:"PointTimeSpanMonthly"`
|
||||
P83121 valueTypes.Float `json:"p83121" PointId:"p83121" PointTimeSpan:"PointTimeSpanMonthly"`
|
||||
P83122 valueTypes.Float `json:"p83122" PointId:"p83122" PointTimeSpan:"PointTimeSpanMonthly"`
|
||||
P83120 valueTypes.Float `json:"p83120" PointId:"p83120" PointUpdateFreq:"UpdateFreqMonthly"`
|
||||
P83121 valueTypes.Float `json:"p83121" PointId:"p83121" PointUpdateFreq:"UpdateFreqMonthly"`
|
||||
P83122 valueTypes.Float `json:"p83122" PointId:"p83122" PointUpdateFreq:"UpdateFreqMonthly"`
|
||||
PsID valueTypes.Integer `json:"ps_id"`
|
||||
SelfConsumptionYield valueTypes.Float `json:"self_consumption_yield" PointUnitFrom:"self_consumption_yield_unit"`
|
||||
SelfConsumptionYieldUnit valueTypes.String `json:"self_consumption_yield_unit"`
|
||||
TimeStamp valueTypes.DateTime `json:"time_stamp"`
|
||||
} `json:"month_data_day_list"`
|
||||
P83073Map valueTypes.UnitValue `json:"p83073_map" PointId:"p83073" PointValueType:"" PointTimeSpan:"PointTimeSpanMonthly"`
|
||||
P83073Map valueTypes.UnitValue `json:"p83073_map" PointId:"p83073" PointValueType:"" PointUpdateFreq:"UpdateFreqMonthly"`
|
||||
P83073MapVirgin valueTypes.UnitValue `json:"p83073_map_virgin" PointIgnore:"true"`
|
||||
P83078Map valueTypes.UnitValue `json:"p83078_map" PointId:"p83078" PointValueType:"" PointTimeSpan:"PointTimeSpanMonthly"`
|
||||
P83078Map valueTypes.UnitValue `json:"p83078_map" PointId:"p83078" PointValueType:"" PointUpdateFreq:"UpdateFreqMonthly"`
|
||||
P83078MapVirgin valueTypes.UnitValue `json:"p83078_map_virgin" PointIgnore:"true"`
|
||||
P83088Map valueTypes.UnitValue `json:"p83088_map" PointId:"p83088" PointValueType:"" PointTimeSpan:"PointTimeSpanMonthly"`
|
||||
P83088Map valueTypes.UnitValue `json:"p83088_map" PointId:"p83088" PointValueType:"" PointUpdateFreq:"UpdateFreqMonthly"`
|
||||
P83088MapVirgin valueTypes.UnitValue `json:"p83088_map_virgin" PointIgnore:"true"`
|
||||
P83091Map valueTypes.UnitValue `json:"p83091_map" PointId:"p83091" PointValueType:"" PointTimeSpan:"PointTimeSpanMonthly"`
|
||||
P83091Map valueTypes.UnitValue `json:"p83091_map" PointId:"p83091" PointValueType:"" PointUpdateFreq:"UpdateFreqMonthly"`
|
||||
P83091MapVirgin valueTypes.UnitValue `json:"p83091_map_virgin" PointIgnore:"true"`
|
||||
P83097Map valueTypes.UnitValue `json:"p83097_map" PointId:"p83097" PointValueType:"" PointTimeSpan:"PointTimeSpanMonthly"`
|
||||
P83097Map valueTypes.UnitValue `json:"p83097_map" PointId:"p83097" PointValueType:"" PointUpdateFreq:"UpdateFreqMonthly"`
|
||||
P83097MapVirgin valueTypes.UnitValue `json:"p83097_map_virgin" PointIgnore:"true"`
|
||||
P83103Map valueTypes.UnitValue `json:"p83103_map" PointId:"p83103" PointValueType:"" PointTimeSpan:"PointTimeSpanMonthly"`
|
||||
P83103Map valueTypes.UnitValue `json:"p83103_map" PointId:"p83103" PointValueType:"" PointUpdateFreq:"UpdateFreqMonthly"`
|
||||
P83103MapVirgin valueTypes.UnitValue `json:"p83103_map_virgin" PointIgnore:"true"`
|
||||
P83118Map valueTypes.UnitValue `json:"p83118_map" PointId:"p83118" PointValueType:"" PointTimeSpan:"PointTimeSpanMonthly"`
|
||||
P83118Map valueTypes.UnitValue `json:"p83118_map" PointId:"p83118" PointValueType:"" PointUpdateFreq:"UpdateFreqMonthly"`
|
||||
P83118MapVirgin valueTypes.UnitValue `json:"p83118_map_virgin" PointIgnore:"true"`
|
||||
P83119Map valueTypes.UnitValue `json:"p83119_map" PointId:"p83119" PointValueType:"" PointTimeSpan:"PointTimeSpanMonthly"`
|
||||
P83119Map valueTypes.UnitValue `json:"p83119_map" PointId:"p83119" PointValueType:"" PointUpdateFreq:"UpdateFreqMonthly"`
|
||||
P83119MapVirgin valueTypes.UnitValue `json:"p83119_map_virgin" PointIgnore:"true"`
|
||||
P83120Map valueTypes.UnitValue `json:"p83120_map" PointId:"p83120" PointValueType:"" PointTimeSpan:"PointTimeSpanMonthly"`
|
||||
P83120Map valueTypes.UnitValue `json:"p83120_map" PointId:"p83120" PointValueType:"" PointUpdateFreq:"UpdateFreqMonthly"`
|
||||
P83120MapVirgin valueTypes.UnitValue `json:"p83120_map_virgin" PointIgnore:"true"`
|
||||
P83121 valueTypes.Float `json:"p83121" PointId:"p83121" PointUnitFrom:"FOO" PointTimeSpan:"PointTimeSpanMonthly"`
|
||||
P83122 valueTypes.Float `json:"p83122" PointId:"p83122" PointUnitFrom:"FOO" PointTimeSpan:"PointTimeSpanMonthly"`
|
||||
P83121 valueTypes.Float `json:"p83121" PointId:"p83121" PointUnitFrom:"FOO" PointUpdateFreq:"UpdateFreqMonthly"`
|
||||
P83122 valueTypes.Float `json:"p83122" PointId:"p83122" PointUnitFrom:"FOO" PointUpdateFreq:"UpdateFreqMonthly"`
|
||||
ZfzyMap valueTypes.UnitValue `json:"zfzy_map"`
|
||||
ZfzyMapVirgin valueTypes.UnitValue `json:"zfzy_map_virgin" PointIgnore:"true"`
|
||||
ZjzzMap valueTypes.UnitValue `json:"zjzz_map"`
|
||||
@ -160,52 +160,52 @@ type YearData struct {
|
||||
JthdMapVirgin valueTypes.UnitValue `json:"jthd_map_virgin" PointIgnore:"true"`
|
||||
JtydMap valueTypes.UnitValue `json:"jtyd_map"`
|
||||
JtydMapVirgin valueTypes.UnitValue `json:"jtyd_map_virgin" PointIgnore:"true"`
|
||||
P83074 valueTypes.UnitValue `json:"p83074_map" PointId:"p83074" PointValueType:"" PointTimeSpan:"PointTimeSpanYearly"`
|
||||
P83074 valueTypes.UnitValue `json:"p83074_map" PointId:"p83074" PointValueType:"" PointUpdateFreq:"UpdateFreqYearly"`
|
||||
P83074MapVirgin valueTypes.UnitValue `json:"p83074_map_virgin" PointIgnore:"true"`
|
||||
P83079 valueTypes.UnitValue `json:"p83079_map" PointId:"p83079" PointValueType:"" PointTimeSpan:"PointTimeSpanYearly"`
|
||||
P83079 valueTypes.UnitValue `json:"p83079_map" PointId:"p83079" PointValueType:"" PointUpdateFreq:"UpdateFreqYearly"`
|
||||
P83079MapVirgin valueTypes.UnitValue `json:"p83079_map_virgin" PointIgnore:"true"`
|
||||
P83088 valueTypes.UnitValue `json:"p83088_map" PointId:"p83088" PointValueType:"" PointTimeSpan:"PointTimeSpanYearly"`
|
||||
P83088 valueTypes.UnitValue `json:"p83088_map" PointId:"p83088" PointValueType:"" PointUpdateFreq:"UpdateFreqYearly"`
|
||||
P83088MapVirgin valueTypes.UnitValue `json:"p83088_map_virgin" PointIgnore:"true"`
|
||||
P83093 valueTypes.UnitValue `json:"p83093_map" PointId:"p83093" PointValueType:"" PointTimeSpan:"PointTimeSpanYearly"`
|
||||
P83093 valueTypes.UnitValue `json:"p83093_map" PointId:"p83093" PointValueType:"" PointUpdateFreq:"UpdateFreqYearly"`
|
||||
P83093MapVirgin valueTypes.UnitValue `json:"p83093_map_virgin" PointIgnore:"true"`
|
||||
P83097 valueTypes.UnitValue `json:"p83097_map" PointId:"p83097" PointValueType:"" PointTimeSpan:"PointTimeSpanYearly"`
|
||||
P83097 valueTypes.UnitValue `json:"p83097_map" PointId:"p83097" PointValueType:"" PointUpdateFreq:"UpdateFreqYearly"`
|
||||
P83097MapVirgin valueTypes.UnitValue `json:"p83097_map_virgin" PointIgnore:"true"`
|
||||
P83104 valueTypes.UnitValue `json:"p83104_map" PointId:"p83104" PointValueType:"" PointTimeSpan:"PointTimeSpanYearly"`
|
||||
P83104 valueTypes.UnitValue `json:"p83104_map" PointId:"p83104" PointValueType:"" PointUpdateFreq:"UpdateFreqYearly"`
|
||||
P83104MapVirgin valueTypes.UnitValue `json:"p83104_map_virgin" PointIgnore:"true"`
|
||||
P83118 valueTypes.UnitValue `json:"p83118_map" PointId:"p83118" PointValueType:"" PointTimeSpan:"PointTimeSpanYearly"`
|
||||
P83118 valueTypes.UnitValue `json:"p83118_map" PointId:"p83118" PointValueType:"" PointUpdateFreq:"UpdateFreqYearly"`
|
||||
P83118MapVirgin valueTypes.UnitValue `json:"p83118_map_virgin" PointIgnore:"true"`
|
||||
P83119 valueTypes.UnitValue `json:"p83119_map" PointId:"p83119" PointValueType:"" PointTimeSpan:"PointTimeSpanYearly"`
|
||||
P83119 valueTypes.UnitValue `json:"p83119_map" PointId:"p83119" PointValueType:"" PointUpdateFreq:"UpdateFreqYearly"`
|
||||
P83119MapVirgin valueTypes.UnitValue `json:"p83119_map_virgin" PointIgnore:"true"`
|
||||
P83120 valueTypes.UnitValue `json:"p83120_map" PointId:"p83120" PointValueType:"" PointTimeSpan:"PointTimeSpanYearly"`
|
||||
P83120 valueTypes.UnitValue `json:"p83120_map" PointId:"p83120" PointValueType:"" PointUpdateFreq:"UpdateFreqYearly"`
|
||||
P83120MapVirgin valueTypes.UnitValue `json:"p83120_map_virgin" PointIgnore:"true"`
|
||||
P83121 valueTypes.Float `json:"p83121" PointId:"p83121" PointUnitFrom:"FOO" PointTimeSpan:"PointTimeSpanYearly"`
|
||||
P83122 valueTypes.Float `json:"p83122" PointId:"p83122" PointUnitFrom:"FOO" PointTimeSpan:"PointTimeSpanYearly"`
|
||||
P83121 valueTypes.Float `json:"p83121" PointId:"p83121" PointUnitFrom:"FOO" PointUpdateFreq:"UpdateFreqYearly"`
|
||||
P83122 valueTypes.Float `json:"p83122" PointId:"p83122" PointUnitFrom:"FOO" PointUpdateFreq:"UpdateFreqYearly"`
|
||||
YearDataMonthList []struct {
|
||||
DateID valueTypes.Integer `json:"date_id"`
|
||||
Jthd valueTypes.Float `json:"jthd" PointUnitFrom:"jthd_unit"`
|
||||
JthdUnit valueTypes.String `json:"jthd_unit"`
|
||||
Jtyd valueTypes.Float `json:"jtyd" PointUnitFrom:"jtyd_unit"`
|
||||
JtydUnit valueTypes.String `json:"jtyd_unit"`
|
||||
P83037 valueTypes.Float `json:"p83037" PointId:"p83037" PointTimeSpan:"PointTimeSpanYearly"`
|
||||
P83073 valueTypes.Float `json:"p83073" PointId:"p83073" PointUnitFrom:"p83073_unit" PointTimeSpan:"PointTimeSpanYearly"`
|
||||
P83037 valueTypes.Float `json:"p83037" PointId:"p83037" PointUpdateFreq:"UpdateFreqYearly"`
|
||||
P83073 valueTypes.Float `json:"p83073" PointId:"p83073" PointUnitFrom:"p83073_unit" PointUpdateFreq:"UpdateFreqYearly"`
|
||||
P83073Unit valueTypes.String `json:"p83073_unit"`
|
||||
P83078 valueTypes.Float `json:"p83078" PointId:"p83078" PointUnitFrom:"p83078_unit" PointTimeSpan:"PointTimeSpanYearly"`
|
||||
P83078 valueTypes.Float `json:"p83078" PointId:"p83078" PointUnitFrom:"p83078_unit" PointUpdateFreq:"UpdateFreqYearly"`
|
||||
P83078Unit valueTypes.String `json:"p83078_unit"`
|
||||
P83088 valueTypes.Float `json:"p83088" PointId:"p83088" PointUnitFrom:"p83088_unit" PointTimeSpan:"PointTimeSpanYearly"`
|
||||
P83088 valueTypes.Float `json:"p83088" PointId:"p83088" PointUnitFrom:"p83088_unit" PointUpdateFreq:"UpdateFreqYearly"`
|
||||
P83088Unit valueTypes.String `json:"p83088_unit"`
|
||||
P83091 valueTypes.Float `json:"p83091" PointId:"p83091" PointUnitFrom:"p83091_unit" PointTimeSpan:"PointTimeSpanYearly"`
|
||||
P83091 valueTypes.Float `json:"p83091" PointId:"p83091" PointUnitFrom:"p83091_unit" PointUpdateFreq:"UpdateFreqYearly"`
|
||||
P83091Unit valueTypes.String `json:"p83091_unit"`
|
||||
P83098 valueTypes.Float `json:"p83098" PointId:"p83098" PointUnitFrom:"p83098_unit" PointTimeSpan:"PointTimeSpanYearly"`
|
||||
P83098 valueTypes.Float `json:"p83098" PointId:"p83098" PointUnitFrom:"p83098_unit" PointUpdateFreq:"UpdateFreqYearly"`
|
||||
P83098Unit valueTypes.String `json:"p83098_unit"`
|
||||
P83103 valueTypes.Float `json:"p83103" PointId:"p83103" PointUnitFrom:"p83103_unit" PointTimeSpan:"PointTimeSpanYearly"`
|
||||
P83103 valueTypes.Float `json:"p83103" PointId:"p83103" PointUnitFrom:"p83103_unit" PointUpdateFreq:"UpdateFreqYearly"`
|
||||
P83103Unit valueTypes.String `json:"p83103_unit"`
|
||||
P83118 valueTypes.Float `json:"p83118" PointId:"p83118" PointUnitFrom:"p83118_unit" PointTimeSpan:"PointTimeSpanYearly"`
|
||||
P83118 valueTypes.Float `json:"p83118" PointId:"p83118" PointUnitFrom:"p83118_unit" PointUpdateFreq:"UpdateFreqYearly"`
|
||||
P83118Unit valueTypes.String `json:"p83118_unit"`
|
||||
P83119 valueTypes.Float `json:"p83119" PointId:"p83119" PointUnitFrom:"p83119_unit" PointTimeSpan:"PointTimeSpanYearly"`
|
||||
P83119 valueTypes.Float `json:"p83119" PointId:"p83119" PointUnitFrom:"p83119_unit" PointUpdateFreq:"UpdateFreqYearly"`
|
||||
P83119Unit valueTypes.String `json:"p83119_unit"`
|
||||
P83120 valueTypes.Float `json:"p83120" PointId:"p83120" PointTimeSpan:"PointTimeSpanYearly"`
|
||||
P83121 valueTypes.Float `json:"p83121" PointId:"p83121" PointTimeSpan:"PointTimeSpanYearly"`
|
||||
P83122 valueTypes.Float `json:"p83122" PointId:"p83122" PointTimeSpan:"PointTimeSpanYearly"`
|
||||
P83120 valueTypes.Float `json:"p83120" PointId:"p83120" PointUpdateFreq:"UpdateFreqYearly"`
|
||||
P83121 valueTypes.Float `json:"p83121" PointId:"p83121" PointUpdateFreq:"UpdateFreqYearly"`
|
||||
P83122 valueTypes.Float `json:"p83122" PointId:"p83122" PointUpdateFreq:"UpdateFreqYearly"`
|
||||
PsID valueTypes.Integer `json:"ps_id"`
|
||||
SelfConsumptionYield valueTypes.Float `json:"self_consumption_yield" PointUnitFrom:"self_consumption_yield_unit"`
|
||||
SelfConsumptionYieldUnit valueTypes.String `json:"self_consumption_yield_unit"`
|
||||
@ -222,23 +222,23 @@ type TotalData struct {
|
||||
JthdMapVirgin valueTypes.UnitValue `json:"jthd_map_virgin" PointIgnore:"true"`
|
||||
JtydMap valueTypes.UnitValue `json:"jtyd_map"`
|
||||
JtydMapVirgin valueTypes.UnitValue `json:"jtyd_map_virgin" PointIgnore:"true"`
|
||||
P83075 valueTypes.UnitValue `json:"p83075_map" PointId:"p83075" PointValueType:"" PointTimeSpan:"PointTimeSpanTotal"`
|
||||
P83075 valueTypes.UnitValue `json:"p83075_map" PointId:"p83075" PointValueType:"" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
P83075MapVirgin valueTypes.UnitValue `json:"p83075_map_virgin" PointIgnore:"true"`
|
||||
P83094 valueTypes.UnitValue `json:"p83094_map" PointId:"p83094" PointValueType:"" PointTimeSpan:"PointTimeSpanTotal"`
|
||||
P83094 valueTypes.UnitValue `json:"p83094_map" PointId:"p83094" PointValueType:"" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
P83094MapVirgin valueTypes.UnitValue `json:"p83094_map_virgin" PointIgnore:"true"`
|
||||
P83095 valueTypes.UnitValue `json:"p83095_map" PointId:"p83095" PointValueType:"" PointTimeSpan:"PointTimeSpanTotal"`
|
||||
P83095 valueTypes.UnitValue `json:"p83095_map" PointId:"p83095" PointValueType:"" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
P83095MapVirgin valueTypes.UnitValue `json:"p83095_map_virgin" PointIgnore:"true"`
|
||||
P83105 valueTypes.UnitValue `json:"p83105_map" PointId:"p83105" PointValueType:"" PointTimeSpan:"PointTimeSpanTotal"`
|
||||
P83105 valueTypes.UnitValue `json:"p83105_map" PointId:"p83105" PointValueType:"" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
P83105MapVirgin valueTypes.UnitValue `json:"p83105_map_virgin" PointIgnore:"true"`
|
||||
P83107 valueTypes.UnitValue `json:"p83107_map" PointId:"p83107" PointValueType:"" PointTimeSpan:"PointTimeSpanTotal"`
|
||||
P83107 valueTypes.UnitValue `json:"p83107_map" PointId:"p83107" PointValueType:"" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
P83107MapVirgin valueTypes.UnitValue `json:"p83107_map_virgin" PointIgnore:"true"`
|
||||
P83123 valueTypes.UnitValue `json:"p83123_map" PointId:"p83123" PointValueType:"" PointTimeSpan:"PointTimeSpanTotal"`
|
||||
P83123 valueTypes.UnitValue `json:"p83123_map" PointId:"p83123" PointValueType:"" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
P83123MapVirgin valueTypes.UnitValue `json:"p83123_map_virgin" PointIgnore:"true"`
|
||||
P83124 valueTypes.UnitValue `json:"p83124_map" PointId:"p83124" PointValueType:"" PointTimeSpan:"PointTimeSpanTotal"`
|
||||
P83124 valueTypes.UnitValue `json:"p83124_map" PointId:"p83124" PointValueType:"" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
P83124MapVirgin valueTypes.UnitValue `json:"p83124_map_virgin" PointIgnore:"true"`
|
||||
P83125 valueTypes.Float `json:"p83125" PointId:"p83125" PointUnitFrom:"FOO" PointTimeSpan:"PointTimeSpanTotal"`
|
||||
P83126 valueTypes.Float `json:"p83126" PointId:"p83126" PointUnitFrom:"FOO" PointTimeSpan:"PointTimeSpanTotal"`
|
||||
P83127 valueTypes.UnitValue `json:"p83127_map" PointId:"p83127" PointValueType:"" PointTimeSpan:"PointTimeSpanTotal"`
|
||||
P83125 valueTypes.Float `json:"p83125" PointId:"p83125" PointUnitFrom:"FOO" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
P83126 valueTypes.Float `json:"p83126" PointId:"p83126" PointUnitFrom:"FOO" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
P83127 valueTypes.UnitValue `json:"p83127_map" PointId:"p83127" PointValueType:"" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
P83127MapVirgin valueTypes.UnitValue `json:"p83127_map_virgin" PointIgnore:"true"`
|
||||
TotalDataYearList []struct {
|
||||
DateID valueTypes.Integer `json:"date_id"`
|
||||
@ -246,26 +246,26 @@ type TotalData struct {
|
||||
JthdUnit valueTypes.String `json:"jthd_unit"`
|
||||
Jtyd valueTypes.Float `json:"jtyd" PointUnitFrom:"jtyd_unit"`
|
||||
JtydUnit valueTypes.String `json:"jtyd_unit"`
|
||||
P83038 valueTypes.Float `json:"p83038" PointId:"p83038" PointTimeSpan:"PointTimeSpanTotal"`
|
||||
P83074 valueTypes.Float `json:"p83074" PointId:"p83074" PointUnitFrom:"p83074_unit" PointTimeSpan:"PointTimeSpanTotal"`
|
||||
P83038 valueTypes.Float `json:"p83038" PointId:"p83038" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
P83074 valueTypes.Float `json:"p83074" PointId:"p83074" PointUnitFrom:"p83074_unit" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
P83074Unit valueTypes.String `json:"p83074_unit"`
|
||||
P83079 valueTypes.Float `json:"p83079" PointId:"p83079" PointUnitFrom:"p83079_unit" PointTimeSpan:"PointTimeSpanTotal"`
|
||||
P83079 valueTypes.Float `json:"p83079" PointId:"p83079" PointUnitFrom:"p83079_unit" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
P83079Unit valueTypes.String `json:"p83079_unit"`
|
||||
P83088 valueTypes.Float `json:"p83088" PointId:"p83088" PointUnitFrom:"p83088_unit" PointTimeSpan:"PointTimeSpanTotal"`
|
||||
P83088 valueTypes.Float `json:"p83088" PointId:"p83088" PointUnitFrom:"p83088_unit" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
P83088Unit valueTypes.String `json:"p83088_unit"`
|
||||
P83093 valueTypes.Float `json:"p83093" PointId:"p83093" PointUnitFrom:"p83093_unit" PointTimeSpan:"PointTimeSpanTotal"`
|
||||
P83093 valueTypes.Float `json:"p83093" PointId:"p83093" PointUnitFrom:"p83093_unit" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
P83093Unit valueTypes.String `json:"p83093_unit"`
|
||||
P83099 valueTypes.Float `json:"p83099" PointId:"p83099" PointUnitFrom:"p83099_unit" PointTimeSpan:"PointTimeSpanTotal"`
|
||||
P83099 valueTypes.Float `json:"p83099" PointId:"p83099" PointUnitFrom:"p83099_unit" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
P83099Unit valueTypes.String `json:"p83099_unit"`
|
||||
P83104 valueTypes.Float `json:"p83104" PointId:"p83104" PointUnitFrom:"p83104_unit" PointTimeSpan:"PointTimeSpanTotal"`
|
||||
P83104 valueTypes.Float `json:"p83104" PointId:"p83104" PointUnitFrom:"p83104_unit" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
P83104Unit valueTypes.String `json:"p83104_unit"`
|
||||
P83118 valueTypes.Float `json:"p83118" PointId:"p83118" PointUnitFrom:"p83118_unit" PointTimeSpan:"PointTimeSpanTotal"`
|
||||
P83118 valueTypes.Float `json:"p83118" PointId:"p83118" PointUnitFrom:"p83118_unit" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
P83118Unit valueTypes.String `json:"p83118_unit"`
|
||||
P83119 valueTypes.Float `json:"p83119" PointId:"p83119" PointUnitFrom:"p83119_unit" PointTimeSpan:"PointTimeSpanTotal"`
|
||||
P83119 valueTypes.Float `json:"p83119" PointId:"p83119" PointUnitFrom:"p83119_unit" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
P83119Unit valueTypes.String `json:"p83119_unit"`
|
||||
P83120 valueTypes.Float `json:"p83120" PointId:"p83120" PointTimeSpan:"PointTimeSpanTotal"`
|
||||
P83121 valueTypes.Float `json:"p83121" PointId:"p83121" PointTimeSpan:"PointTimeSpanTotal"`
|
||||
P83122 valueTypes.Float `json:"p83122" PointId:"p83122" PointTimeSpan:"PointTimeSpanTotal"`
|
||||
P83120 valueTypes.Float `json:"p83120" PointId:"p83120" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
P83121 valueTypes.Float `json:"p83121" PointId:"p83121" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
P83122 valueTypes.Float `json:"p83122" PointId:"p83122" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
PsID valueTypes.Integer `json:"ps_id"`
|
||||
SelfConsumptionYield valueTypes.Float `json:"self_consumption_yield" PointUnitFrom:"self_consumption_yield_unit"`
|
||||
SelfConsumptionYieldUnit valueTypes.String `json:"self_consumption_yield_unit"`
|
||||
|
@ -29,13 +29,13 @@ func (rd RequestData) Help() string {
|
||||
|
||||
|
||||
type ResultData struct {
|
||||
DeviceType valueTypes.Integer `json:"device_type" PointId:"device_type" PointValueType:"" PointTimeSpan:""`
|
||||
ID valueTypes.Integer `json:"id" PointId:"id" PointValueType:"" PointTimeSpan:""`
|
||||
Period valueTypes.Integer `json:"period" PointId:"period" PointValueType:"" PointTimeSpan:""`
|
||||
PointID valueTypes.Integer `json:"point_id" PointId:"point_id" PointValueType:"" PointTimeSpan:""`
|
||||
PointName string `json:"point_name" PointId:"point_name" PointValueType:"" PointTimeSpan:""`
|
||||
ShowPointName string `json:"show_point_name" PointId:"show_point_name" PointValueType:"" PointTimeSpan:""`
|
||||
TranslationID valueTypes.Integer `json:"translation_id" PointId:"translation_id" PointValueType:"" PointTimeSpan:""`
|
||||
DeviceType valueTypes.Integer `json:"device_type" PointId:"device_type" PointValueType:"" PointUpdateFreq:""`
|
||||
ID valueTypes.Integer `json:"id" PointId:"id" PointValueType:"" PointUpdateFreq:""`
|
||||
Period valueTypes.Integer `json:"period" PointId:"period" PointValueType:"" PointUpdateFreq:""`
|
||||
PointID valueTypes.Integer `json:"point_id" PointId:"point_id" PointValueType:"" PointUpdateFreq:""`
|
||||
PointName string `json:"point_name" PointId:"point_name" PointValueType:"" PointUpdateFreq:""`
|
||||
ShowPointName string `json:"show_point_name" PointId:"show_point_name" PointValueType:"" PointUpdateFreq:""`
|
||||
TranslationID valueTypes.Integer `json:"translation_id" PointId:"translation_id" PointValueType:"" PointUpdateFreq:""`
|
||||
}
|
||||
|
||||
func (e *ResultData) IsValid() error {
|
||||
|
@ -25,30 +25,30 @@ func (rd RequestData) Help() string {
|
||||
}
|
||||
|
||||
type ResultData struct {
|
||||
ActualEnergy []valueTypes.Float `json:"actual_energy" PointUnitFrom:"actual_energy_unit"`
|
||||
ActualEnergyUnit valueTypes.String `json:"actual_energy_unit" PointId:"actual_energy_unit"`
|
||||
ActualEnergy []valueTypes.Float `json:"actual_energy" PointId:"actual_energy" PointName:"Actual Energy" PointUnitFrom:"ActualEnergyUnit"`
|
||||
ActualEnergyUnit valueTypes.String `json:"actual_energy_unit" PointId:"actual_energy_unit" PointIgnore:"true"`
|
||||
AlarmCount valueTypes.Integer `json:"alarm_count"`
|
||||
AreaID interface{} `json:"area_id"`
|
||||
AreaID interface{} `json:"area_id"`
|
||||
AreaType valueTypes.Integer `json:"area_type"`
|
||||
BuildDate valueTypes.DateTime `json:"build_date"`
|
||||
Co2Reduce valueTypes.UnitValue `json:"co2_reduce"`
|
||||
Co2ReduceTotal valueTypes.UnitValue `json:"co2_reduce_total" PointId:"co2_reduce_total" PointValueType:"" PointTimeSpan:"PointTimeSpanTotal"`
|
||||
Co2ReduceTotal valueTypes.UnitValue `json:"co2_reduce_total" PointId:"co2_reduce_total" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
CoalReduce valueTypes.UnitValue `json:"coal_reduce"`
|
||||
CoalReduceTotal valueTypes.UnitValue `json:"coal_reduce_total" PointId:"coal_reduce_total" PointValueType:"" PointTimeSpan:"PointTimeSpanTotal"`
|
||||
ConnectGrid string `json:"connect_grid"`
|
||||
CoalReduceTotal valueTypes.UnitValue `json:"coal_reduce_total" PointId:"coal_reduce_total" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
ConnectGrid string `json:"connect_grid"`
|
||||
ConnectType valueTypes.Integer `json:"connect_type"`
|
||||
ContactPerson valueTypes.String `json:"contact_person"`
|
||||
CurrPower valueTypes.UnitValue `json:"curr_power"` // Pv Power
|
||||
DataLastUpdateTime valueTypes.DateTime `json:"data_last_update_time"`
|
||||
DayEqHours string `json:"day_eq_hours"`
|
||||
Description interface{} `json:"description"`
|
||||
DayEqHours valueTypes.Float `json:"day_eq_hours" PointUnit:"h" PointUpdateFreq:"UpdateFreqDaily"`
|
||||
Description interface{} `json:"description"`
|
||||
DesignCapacity valueTypes.UnitValue `json:"design_capacity"`
|
||||
DesignCapacityBattery valueTypes.UnitValue `json:"design_capacity_battery"`
|
||||
DiagramURL valueTypes.String `json:"diagram_url"`
|
||||
EnergyScheme interface{} `json:"energy_scheme"`
|
||||
EnergyScheme interface{} `json:"energy_scheme"`
|
||||
ExpectInstallDate valueTypes.DateTime `json:"expect_install_date"`
|
||||
FaultCount valueTypes.Integer `json:"fault_count"`
|
||||
FaultSendType string `json:"fault_send_type"`
|
||||
FaultSendType string `json:"fault_send_type"`
|
||||
GcjLatitude valueTypes.Float `json:"gcj_latitude"`
|
||||
GcjLongitude valueTypes.Float `json:"gcj_longitude"`
|
||||
GprsLatitude valueTypes.Float `json:"gprs_latitude"`
|
||||
@ -61,10 +61,10 @@ type ResultData struct {
|
||||
PicType valueTypes.Integer `json:"pic_type"`
|
||||
PictureName valueTypes.String `json:"picture_name"`
|
||||
PictureURL valueTypes.String `json:"picture_url"`
|
||||
PsUnitUUID interface{} `json:"ps_unit_uuid"`
|
||||
} `json:"images"`
|
||||
PsUnitUUID interface{} `json:"ps_unit_uuid" PointName:"Images"`
|
||||
} `json:"images" PointName:"Images"`
|
||||
InstallDate valueTypes.DateTime `json:"install_date"`
|
||||
InstallerPsFaultStatus string `json:"installer_ps_fault_status"`
|
||||
InstallerPsFaultStatus valueTypes.Integer `json:"installer_ps_fault_status"`
|
||||
IsHaveEsInverter valueTypes.Bool `json:"is_have_es_inverter"`
|
||||
IsTransformSystem valueTypes.Bool `json:"is_transform_system"`
|
||||
IsTuv valueTypes.Bool `json:"is_tuv"`
|
||||
@ -73,32 +73,32 @@ type ResultData struct {
|
||||
MapLatitude valueTypes.Float `json:"map_latitude"`
|
||||
MapLongitude valueTypes.Float `json:"map_longitude"`
|
||||
MeterReduce valueTypes.UnitValue `json:"meter_reduce"`
|
||||
MeterReduceTotal valueTypes.UnitValue `json:"meter_reduce_total" PointId:"meter_reduce_total" PointValueType:"" PointTimeSpan:"PointTimeSpanTotal"`
|
||||
MeterReduceTotal valueTypes.UnitValue `json:"meter_reduce_total" PointId:"meter_reduce_total" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
MobileTel valueTypes.String `json:"mibile_tel" PointId:"mobile_tel"`
|
||||
MonthPr string `json:"monthPr" PointId:"monthPr" PointValueType:"" PointTimeSpan:"PointTimeSpanMonth"`
|
||||
MonthEnergy valueTypes.UnitValue `json:"month_energy" PointId:"month_energy" PointValueType:"" PointTimeSpan:"PointTimeSpanMonth"`
|
||||
MonthPr string `json:"monthPr" PointId:"monthPr" PointUpdateFreq:"UpdateFreqMonth"`
|
||||
MonthEnergy valueTypes.UnitValue `json:"month_energy" PointId:"month_energy" PointUpdateFreq:"UpdateFreqMonth"`
|
||||
MonthEnergyVirgin valueTypes.UnitValue `json:"month_energy_virgin" PointIgnore:"true"`
|
||||
MonthEqHours valueTypes.Float `json:"month_eq_hours" PointId:"month_eq_hours" PointValueType:"" PointTimeSpan:"PointTimeSpanMonth"`
|
||||
MonthIncome valueTypes.UnitValue `json:"month_income" PointId:"month_income" PointValueType:"" PointTimeSpan:"PointTimeSpanMonth"`
|
||||
MonthEqHours valueTypes.Float `json:"month_eq_hours" PointId:"month_eq_hours" PointUnit:"h" PointUpdateFreq:"UpdateFreqMonth"`
|
||||
MonthIncome valueTypes.UnitValue `json:"month_income" PointId:"month_income" PointUpdateFreq:"UpdateFreqMonth"`
|
||||
NoxReduce valueTypes.UnitValue `json:"nox_reduce"`
|
||||
NoxReduceTotal valueTypes.UnitValue `json:"nox_reduce_total" PointId:"nox_reduce_total" PointValueType:"" PointTimeSpan:"PointTimeSpanTotal"`
|
||||
OperateYear string `json:"operate_year"`
|
||||
NoxReduceTotal valueTypes.UnitValue `json:"nox_reduce_total" PointId:"nox_reduce_total" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
OperateYear string `json:"operate_year"`
|
||||
OperationBusName valueTypes.String `json:"operation_bus_name"`
|
||||
OwnerPsFaultStatus string `json:"owner_ps_fault_status"`
|
||||
P83012Value valueTypes.Float `json:"p83012_value" PointId:"p83012" PointUnitFrom:"p83012_unit"`
|
||||
P83012Unit valueTypes.String `json:"p83012_unit" PointId:"p83012_unit"`
|
||||
P83013Value valueTypes.Float `json:"p83013_value" PointId:"p83013" PointUnitFrom:"p83013_unit"`
|
||||
P83013Unit valueTypes.String `json:"p83013_unit" PointId:"p83013_unit"`
|
||||
P83036Value valueTypes.Float `json:"p83036_value" PointId:"p83036" PointUnitFrom:"p83036_unit"`
|
||||
P83036Unit valueTypes.String `json:"p83036_unit" PointId:"p83036_unit"`
|
||||
P83016 valueTypes.Float `json:"p83016" PointId:"p83016" PointUnitFrom:"p83016_unit"`
|
||||
P83016Unit valueTypes.String `json:"p83016_unit" PointId:"p83016_unit"`
|
||||
P83017 valueTypes.Float `json:"p83017" PointId:"p83017" PointUnitFrom:"p83017_unit"`
|
||||
P83017Unit valueTypes.String `json:"p83017_unit" PointId:"p83017_unit"`
|
||||
OwnerPsFaultStatus valueTypes.Integer `json:"owner_ps_fault_status"`
|
||||
P83012Value valueTypes.Float `json:"p83012_value" PointId:"p83012" PointUnitFrom:"P83012Unit"`
|
||||
P83012Unit valueTypes.String `json:"p83012_unit" PointId:"p83012_unit" PointIgnore:"true"`
|
||||
P83013Value valueTypes.Float `json:"p83013_value" PointId:"p83013" PointUnitFrom:"P83013Unit"`
|
||||
P83013Unit valueTypes.String `json:"p83013_unit" PointId:"p83013_unit" PointIgnore:"true"`
|
||||
P83036Value valueTypes.Float `json:"p83036_value" PointId:"p83036" PointUnitFrom:"P83036Unit"`
|
||||
P83036Unit valueTypes.String `json:"p83036_unit" PointId:"p83036_unit" PointIgnore:"true"`
|
||||
P83016 valueTypes.Float `json:"p83016" PointId:"p83016" PointUnitFrom:"P83016Unit"`
|
||||
P83016Unit valueTypes.String `json:"p83016_unit" PointId:"p83016_unit" PointIgnore:"true"`
|
||||
P83017 valueTypes.Float `json:"p83017" PointId:"p83017" PointUnitFrom:"P83017Unit"`
|
||||
P83017Unit valueTypes.String `json:"p83017_unit" PointId:"p83017_unit" PointIgnore:"true"`
|
||||
P83023 valueTypes.Float `json:"p83023" PointId:"p83023"`
|
||||
P83023y string `json:"p83023y" PointId:"p83023y"`
|
||||
P83023year string `json:"p83023year" PointId:"p83023y"`
|
||||
P83023ym string `json:"p83023ym" PointId:"p83023ym"`
|
||||
P83023y string `json:"p83023y" PointId:"p83023y"`
|
||||
P83023year string `json:"p83023year" PointId:"p83023y"`
|
||||
P83023ym string `json:"p83023ym" PointId:"p83023ym"`
|
||||
P83043 valueTypes.Float `json:"p83043" PointId:"p83043"`
|
||||
P83044 valueTypes.Float `json:"p83044" PointId:"p83044"`
|
||||
P83045 valueTypes.Float `json:"p83045" PointId:"p83045"`
|
||||
@ -110,24 +110,24 @@ type ResultData struct {
|
||||
P83074MapVirgin valueTypes.UnitValue `json:"p83074_map_virgin" PointIgnore:"true"`
|
||||
P83075Map valueTypes.UnitValue `json:"p83075_map" PointId:"p83075"`
|
||||
P83075MapVirgin valueTypes.UnitValue `json:"p83075_map_virgin" PointIgnore:"true"`
|
||||
P83076Map valueTypes.UnitValue `json:"p83076_map" PointId:"p83076"` // Pv Power
|
||||
P83076MapVirgin valueTypes.UnitValue `json:"p83076_map_virgin" PointIgnore:"true"` // Pv Power
|
||||
P83077Map valueTypes.UnitValue `json:"p83077_map" PointId:"p83077"` // Pv Energy
|
||||
P83077MapVirgin valueTypes.UnitValue `json:"p83077_map_virgin" PointIgnore:"true"` // Pv Energy
|
||||
P83076Map valueTypes.UnitValue `json:"p83076_map" PointName:"Pv Power" PointId:"p83076"` // Pv Power
|
||||
P83076MapVirgin valueTypes.UnitValue `json:"p83076_map_virgin" PointIgnore:"true"`
|
||||
P83077Map valueTypes.UnitValue `json:"p83077_map" PointName:"Pv Energy" PointId:"p83077"` // Pv Energy
|
||||
P83077MapVirgin valueTypes.UnitValue `json:"p83077_map_virgin" PointIgnore:"true"`
|
||||
P83078Map valueTypes.UnitValue `json:"p83078_map" PointId:"p83078"`
|
||||
P83078MapVirgin valueTypes.UnitValue `json:"p83078_map_virgin" PointIgnore:"true"`
|
||||
P83079Map valueTypes.UnitValue `json:"p83079_map" PointId:"p83079"`
|
||||
P83079MapVirgin valueTypes.UnitValue `json:"p83079_map_virgin" PointIgnore:"true"`
|
||||
P83080Map valueTypes.UnitValue `json:"p83080_map" PointId:"p83080"`
|
||||
P83080MapVirgin valueTypes.UnitValue `json:"p83080_map_virgin" PointIgnore:"true"`
|
||||
P83088Map valueTypes.UnitValue `json:"p83088_map" PointId:"p83088"` // Es Energy
|
||||
P83088MapVirgin valueTypes.UnitValue `json:"p83088_map_virgin" PointIgnore:"true"` // Es Energy
|
||||
P83089Map valueTypes.UnitValue `json:"p83089_map" PointId:"p83089"` // Es Discharge Energy
|
||||
P83089MapVirgin valueTypes.UnitValue `json:"p83089_map_virgin" PointIgnore:"true"` // Es Discharge Energy
|
||||
P83088Map valueTypes.UnitValue `json:"p83088_map" PointName:"ES Energy" PointId:"p83088"` // Es Energy
|
||||
P83088MapVirgin valueTypes.UnitValue `json:"p83088_map_virgin" PointIgnore:"true"`
|
||||
P83089Map valueTypes.UnitValue `json:"p83089_map" PointName:"ES Discharge Energy" PointId:"p83089"` // Es Discharge Energy
|
||||
P83089MapVirgin valueTypes.UnitValue `json:"p83089_map_virgin" PointIgnore:"true"`
|
||||
P83094Map valueTypes.UnitValue `json:"p83094_map" PointId:"p83094"`
|
||||
P83094MapVirgin valueTypes.UnitValue `json:"p83094_map_virgin" PointIgnore:"true"`
|
||||
P83095Map valueTypes.UnitValue `json:"p83095_map" PointId:"p83095" PointValueType:"" PointTimeSpan:"PointTimeSpanTotal"` // Es Total Discharge Energy
|
||||
P83095MapVirgin valueTypes.UnitValue `json:"p83095_map_virgin" PointIgnore:"true"` // Es Total Discharge Energy
|
||||
P83095Map valueTypes.UnitValue `json:"p83095_map" PointId:"p83095" PointName:"ES Total Discharge Energy" PointUpdateFreq:"UpdateFreqTotal"` // Es Total Discharge Energy
|
||||
P83095MapVirgin valueTypes.UnitValue `json:"p83095_map_virgin" PointIgnore:"true"`
|
||||
P83097Map valueTypes.UnitValue `json:"p83097_map" PointId:"p83097"`
|
||||
P83097MapVirgin valueTypes.UnitValue `json:"p83097_map_virgin" PointIgnore:"true"`
|
||||
P83100Map valueTypes.UnitValue `json:"p83100_map" PointId:"p83100"`
|
||||
@ -161,27 +161,27 @@ type ResultData struct {
|
||||
P83202Map valueTypes.UnitValue `json:"p83202_map" PointId:"p83202"`
|
||||
P83202MapVirgin valueTypes.UnitValue `json:"p83202_map_virgin" PointIgnore:"true"`
|
||||
PercentPlanYear valueTypes.Float `json:"percent_plan_year"`
|
||||
PlanEnergy []valueTypes.Float `json:"plan_energy" PointUnitFrom:"plan_energy_unit"`
|
||||
PlanEnergyUnit valueTypes.String `json:"plan_energy_unit" PointId:"plan_energy_unit"`
|
||||
PlanEnergy []valueTypes.Float `json:"plan_energy" PointUnitFrom:"PlanEnergyUnit"`
|
||||
PlanEnergyUnit valueTypes.String `json:"plan_energy_unit" PointId:"plan_energy_unit" PointIgnore:"true"`
|
||||
PlanEnergyYear valueTypes.UnitValue `json:"plan_energy_year"`
|
||||
PowderReduce valueTypes.UnitValue `json:"powder_reduce"`
|
||||
PowderReduceTotal valueTypes.UnitValue `json:"powder_reduce_total" PointId:"powder_reduce_total" PointValueType:"" PointTimeSpan:"PointTimeSpanTotal"`
|
||||
PowerChargeSetted valueTypes.Bool `json:"power_charge_setted" PointId:"power_charge_setted" PointValueType:"" PointTimeSpan:"PointTimeSpanTotal"`
|
||||
Producer string `json:"producer"`
|
||||
PowderReduceTotal valueTypes.UnitValue `json:"powder_reduce_total" PointId:"powder_reduce_total" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
PowerChargeSetted valueTypes.Bool `json:"power_charge_setted" PointId:"power_charge_set" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
Producer string `json:"producer"`
|
||||
PsCountryID valueTypes.Integer `json:"ps_country_id"`
|
||||
PsFaultStatus string `json:"ps_fault_status"`
|
||||
PsHealthStatus string `json:"ps_health_status"`
|
||||
PsFaultStatus valueTypes.Integer `json:"ps_fault_status"`
|
||||
PsHealthStatus valueTypes.Integer `json:"ps_health_status"`
|
||||
PsHolder valueTypes.String `json:"ps_holder"`
|
||||
PsLocation valueTypes.String `json:"ps_location"`
|
||||
PsName valueTypes.String `json:"ps_name"`
|
||||
PsShortName valueTypes.String `json:"ps_short_name"`
|
||||
PsState string `json:"ps_state"`
|
||||
PsState valueTypes.Integer `json:"ps_state"`
|
||||
PsType valueTypes.Integer `json:"ps_type"`
|
||||
PsTypeName valueTypes.String `json:"ps_type_name"`
|
||||
PsWindLevel string `json:"ps_wind_level"`
|
||||
PsWindPos string `json:"ps_wind_pos"`
|
||||
PsWindLevel string `json:"ps_wind_level"`
|
||||
PsWindPos string `json:"ps_wind_pos"`
|
||||
RecordCreateTime valueTypes.DateTime `json:"recore_create_time"`
|
||||
ReportType string `json:"report_type"`
|
||||
ReportType string `json:"report_type"`
|
||||
RobotNumSweepCapacity struct {
|
||||
Num valueTypes.Integer `json:"num"`
|
||||
SweepCapacity valueTypes.Float `json:"sweep_capacity"`
|
||||
@ -191,7 +191,7 @@ type ResultData struct {
|
||||
ShippingAddress valueTypes.String `json:"shipping_address"`
|
||||
ShippingZipCode valueTypes.String `json:"shipping_zip_code"`
|
||||
So2Reduce valueTypes.UnitValue `json:"so2_reduce"`
|
||||
So2ReduceTotal valueTypes.UnitValue `json:"so2_reduce_total" PointId:"so2_reduce_total" PointValueType:"" PointTimeSpan:"PointTimeSpanTotal"`
|
||||
So2ReduceTotal valueTypes.UnitValue `json:"so2_reduce_total" PointId:"so2_reduce_total" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
StorageInverterData []struct {
|
||||
CommunicationDevSn valueTypes.String `json:"communication_dev_sn"`
|
||||
DevFaultStatus valueTypes.Integer `json:"dev_fault_status"`
|
||||
@ -199,55 +199,55 @@ type ResultData struct {
|
||||
DeviceCode valueTypes.Integer `json:"device_code"`
|
||||
DeviceModelCode valueTypes.String `json:"device_model_code"`
|
||||
DeviceName valueTypes.String `json:"device_name"`
|
||||
DeviceState string `json:"device_state"`
|
||||
DeviceState string `json:"device_state"`
|
||||
DeviceType valueTypes.Integer `json:"device_type"`
|
||||
DrmStatus valueTypes.Integer `json:"drm_status"`
|
||||
DrmStatusName valueTypes.String `json:"drm_status_name"`
|
||||
EnergyFlow []valueTypes.Integer `json:"energy_flow"`
|
||||
EnergyFlow []valueTypes.Integer `json:"energy_flow" PointName:"Energy Flow"`
|
||||
HasAmmeter valueTypes.Bool `json:"has_ammeter"`
|
||||
InstallerDevFaultStatus valueTypes.Integer `json:"installer_dev_fault_status"`
|
||||
InverterSn valueTypes.String `json:"inverter_sn"`
|
||||
OwnerDevFaultStatus valueTypes.Integer `json:"owner_dev_fault_status"`
|
||||
P13003Map valueTypes.UnitValue `json:"p13003_map" PointId:"p13003" PointValueType:"" PointTimeSpan:"PointTimeSpanInstant"`
|
||||
P13003Map valueTypes.UnitValue `json:"p13003_map" PointId:"p13003" PointUpdateFreq:"UpdateFreqInstant"`
|
||||
P13003MapVirgin valueTypes.UnitValue `json:"p13003_map_virgin" PointIgnore:"true"`
|
||||
P13011Map valueTypes.UnitValue `json:"p13011_map" PointId:"p13011" PointValueType:"" PointTimeSpan:"PointTimeSpanInstant"`
|
||||
P13011Map valueTypes.UnitValue `json:"p13011_map" PointId:"p13011" PointUpdateFreq:"UpdateFreqInstant"`
|
||||
P13011MapVirgin valueTypes.UnitValue `json:"p13011_map_virgin" PointIgnore:"true"`
|
||||
P13115Map valueTypes.UnitValue `json:"p13115_map" PointId:"p13115" PointValueType:"" PointTimeSpan:"PointTimeSpanInstant"`
|
||||
P13115Map valueTypes.UnitValue `json:"p13115_map" PointId:"p13115" PointUpdateFreq:"UpdateFreqInstant"`
|
||||
P13115MapVirgin valueTypes.UnitValue `json:"p13115_map_virgin" PointIgnore:"true"`
|
||||
P13119Map valueTypes.UnitValue `json:"p13119_map" PointId:"p13119" PointValueType:"" PointTimeSpan:"PointTimeSpanInstant"`
|
||||
P13119Map valueTypes.UnitValue `json:"p13119_map" PointId:"p13119" PointUpdateFreq:"UpdateFreqInstant"`
|
||||
P13119MapVirgin valueTypes.UnitValue `json:"p13119_map_virgin" PointIgnore:"true"`
|
||||
P13121Map valueTypes.UnitValue `json:"p13121_map" PointId:"p13121" PointValueType:"" PointTimeSpan:"PointTimeSpanInstant"`
|
||||
P13121Map valueTypes.UnitValue `json:"p13121_map" PointId:"p13121" PointUpdateFreq:"UpdateFreqInstant"`
|
||||
P13121MapVirgin valueTypes.UnitValue `json:"p13121_map_virgin" PointIgnore:"true"`
|
||||
P13126Map valueTypes.UnitValue `json:"p13126_map" PointId:"p13126" PointValueType:"" PointTimeSpan:"PointTimeSpanInstant"`
|
||||
P13126Map valueTypes.UnitValue `json:"p13126_map" PointId:"p13126" PointUpdateFreq:"UpdateFreqInstant"`
|
||||
P13126MapVirgin valueTypes.UnitValue `json:"p13126_map_virgin" PointIgnore:"true"`
|
||||
P13141 valueTypes.Float `json:"p13141" PointId:"p13141" PointValueType:"" PointTimeSpan:"PointTimeSpanInstant"`
|
||||
P13142 valueTypes.Float `json:"p13142" PointId:"p13142" PointValueType:"" PointTimeSpan:"PointTimeSpanInstant"`
|
||||
P13149Map valueTypes.UnitValue `json:"p13149_map" PointId:"p13149" PointValueType:"" PointTimeSpan:"PointTimeSpanInstant"`
|
||||
P13141 valueTypes.Float `json:"p13141" PointId:"p13141" PointUpdateFreq:"UpdateFreqInstant"`
|
||||
P13142 valueTypes.Float `json:"p13142" PointId:"p13142" PointUpdateFreq:"UpdateFreqInstant"`
|
||||
P13149Map valueTypes.UnitValue `json:"p13149_map" PointId:"p13149" PointUpdateFreq:"UpdateFreqInstant"`
|
||||
P13149MapVirgin valueTypes.UnitValue `json:"p13149_map_virgin" PointIgnore:"true"`
|
||||
P13150Map valueTypes.UnitValue `json:"p13150_map" PointId:"p13150" PointValueType:"" PointTimeSpan:"PointTimeSpanInstant"`
|
||||
P13150Map valueTypes.UnitValue `json:"p13150_map" PointId:"p13150" PointUpdateFreq:"UpdateFreqInstant"`
|
||||
P13150MapVirgin valueTypes.UnitValue `json:"p13150_map_virgin" PointIgnore:"true"`
|
||||
P13155 valueTypes.Float `json:"p13155" PointId:"p13155" PointValueType:"" PointTimeSpan:"PointTimeSpanInstant"`
|
||||
P13155 valueTypes.Float `json:"p13155" PointId:"p13155" PointUpdateFreq:"UpdateFreqInstant"`
|
||||
PsKey valueTypes.PsKey `json:"ps_key"`
|
||||
UpdateTime valueTypes.DateTime `json:"update_time"`
|
||||
UUID valueTypes.Integer `json:"uuid"`
|
||||
} `json:"storage_inverter_data"`
|
||||
} `json:"storage_inverter_data" PointNameFromChild:"PsKey"`
|
||||
SysScheme valueTypes.Integer `json:"sys_scheme"`
|
||||
TimeZoneID valueTypes.Integer `json:"time_zone_id"`
|
||||
Timezone valueTypes.String `json:"timezone"`
|
||||
TodayEnergy valueTypes.UnitValue `json:"today_energy" PointId:"today_energy" PointValueType:"" PointTimeSpan:"PointTimeSpanDaily"`
|
||||
TodayEnergy valueTypes.UnitValue `json:"today_energy" PointId:"today_energy" PointUpdateFreq:"UpdateFreqDaily"`
|
||||
TodayEnergyVirgin valueTypes.UnitValue `json:"today_energy_virgin" PointIgnore:"true"`
|
||||
TodayIncome valueTypes.UnitValue `json:"today_income" PointId:"today_income" PointValueType:"" PointTimeSpan:"PointTimeSpanDaily"`
|
||||
TotalEnergy valueTypes.UnitValue `json:"total_energy" PointId:"total_energy" PointValueType:"" PointTimeSpan:"PointTimeSpanTotal"`
|
||||
TodayIncome valueTypes.UnitValue `json:"today_income" PointId:"today_income" PointUpdateFreq:"UpdateFreqDaily"`
|
||||
TotalEnergy valueTypes.UnitValue `json:"total_energy" PointId:"total_energy" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
TotalEnergyVirgin valueTypes.UnitValue `json:"total_energy_virgin" PointIgnore:"true"`
|
||||
TotalEnergyYear valueTypes.UnitValue `json:"total_energy_year" PointId:"total_energy_year" PointValueType:"" PointTimeSpan:"PointTimeSpanTotal"`
|
||||
TotalIncome valueTypes.UnitValue `json:"total_income" PointId:"total_income" PointValueType:"" PointTimeSpan:"PointTimeSpanTotal"`
|
||||
TotalEnergyYear valueTypes.UnitValue `json:"total_energy_year" PointId:"total_energy_year" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
TotalIncome valueTypes.UnitValue `json:"total_income" PointId:"total_income" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
TreeReduce valueTypes.UnitValue `json:"tree_reduce"`
|
||||
TreeReduceTotal valueTypes.UnitValue `json:"tree_reduce_total" PointId:"tree_reduce_total" PointValueType:"" PointTimeSpan:"PointTimeSpanTotal"`
|
||||
TuvLevel string `json:"tuv_level"`
|
||||
TreeReduceTotal valueTypes.UnitValue `json:"tree_reduce_total" PointId:"tree_reduce_total" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
TuvLevel string `json:"tuv_level"`
|
||||
ValidFlag valueTypes.Bool `json:"valid_flag"`
|
||||
WaitAssignOrderCount valueTypes.Integer `json:"wait_assign_order_count"`
|
||||
WaterReduce valueTypes.UnitValue `json:"water_reduce"`
|
||||
WaterReduceTotal valueTypes.UnitValue `json:"water_reduce_total" PointId:"water_reduce_total" PointValueType:"" PointTimeSpan:"PointTimeSpanTotal"`
|
||||
WaterReduceTotal valueTypes.UnitValue `json:"water_reduce_total" PointId:"water_reduce_total" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
WgsLatitude valueTypes.Float `json:"wgs_latitude"`
|
||||
WgsLongitude valueTypes.Float `json:"wgs_longitude"`
|
||||
Year valueTypes.Integer `json:"year"`
|
||||
@ -269,64 +269,24 @@ func (e *ResultData) IsValid() error {
|
||||
return err
|
||||
}
|
||||
|
||||
// type DecodeResultData ResultData
|
||||
//
|
||||
// func (e *ResultData) UnmarshalJSON(data []byte) error {
|
||||
// var err error
|
||||
//
|
||||
// for range Only.Once {
|
||||
// if len(data) == 0 {
|
||||
// break
|
||||
// }
|
||||
// var pd DecodeResultData
|
||||
//
|
||||
// // Store ResultData
|
||||
// _ = json.Unmarshal(data, &pd)
|
||||
// e.Dummy = pd.Dummy
|
||||
// }
|
||||
//
|
||||
// return err
|
||||
// }
|
||||
|
||||
|
||||
func (e *EndPoint) GetData() api.DataMap {
|
||||
entries := api.NewDataMap()
|
||||
|
||||
for range Only.Once {
|
||||
pkg := apiReflect.GetName("", *e)
|
||||
name := fmt.Sprintf("%s.%s", pkg, e.Request.PsId.String())
|
||||
entries.StructToPoints(e.Response.ResultData, name, e.Request.PsId.String(), valueTypes.NewDateTime(""))
|
||||
dt := valueTypes.NewDateTime(valueTypes.Now)
|
||||
entries.StructToPoints(e.Response.ResultData, pkg + "." + e.Request.PsId.String(), "", dt)
|
||||
|
||||
for _, sid := range e.Response.ResultData.StorageInverterData {
|
||||
name = fmt.Sprintf("%s.%s", pkg, sid.PsKey.Value())
|
||||
entries.StructToPoints(sid, name, sid.PsKey.Value(), valueTypes.NewDateTime(""))
|
||||
}
|
||||
// pkg := apiReflect.GetName("", *e)
|
||||
// name := api.JoinWithDots(0, valueTypes.DateTimeLayoutDay, pkg, e.Request.PsId)
|
||||
// entries.StructToPoints(e.Response.ResultData, name, e.Request.PsId.String(), valueTypes.NewDateTime(""))
|
||||
//
|
||||
// for _, sid := range e.Response.ResultData.StorageInverterData {
|
||||
// name = api.JoinWithDots(0, valueTypes.DateTimeLayoutDay, pkg, sid.PsKey)
|
||||
// entries.StructToPoints(sid, name, sid.PsKey.Value(), valueTypes.NewDateTime(""))
|
||||
// }
|
||||
}
|
||||
|
||||
// for range Only.Once {
|
||||
// // name := fmt.Sprintf("getPsDetail.%s", e.Request.PsId.String())
|
||||
// //
|
||||
// // uv := api.SetUnitValueFloat(e.Response.ResultData.P83012Value.Value(), e.Response.ResultData.P83012Unit.Value())
|
||||
// // entries.AddUnitValue(name + ".p83012", e.Request.PsId.String(), "p83012", "", "", valueTypes.NewDateTime(""), uv)
|
||||
// //
|
||||
// // uv = api.SetUnitValueFloat(e.Response.ResultData.P83013Value.Value(), e.Response.ResultData.P83013Unit.Value())
|
||||
// // entries.AddUnitValue(name + ".p83013", e.Request.PsId.String(), "p83013", "", "", valueTypes.NewDateTime(""), uv)
|
||||
// //
|
||||
// // uv = api.SetUnitValueFloat(e.Response.ResultData.P83036Value.Value(), e.Response.ResultData.P83036Unit.Value())
|
||||
// // entries.AddUnitValue(name + ".p83036", e.Request.PsId.String(), "p83036", "", "", valueTypes.NewDateTime(""), uv)
|
||||
// //
|
||||
// // uv = api.SetUnitValueFloat(e.Response.ResultData.P83016.Value(), e.Response.ResultData.P83016Unit.Value())
|
||||
// // entries.AddUnitValue(name + ".p83016", e.Request.PsId.String(), "p83016", "", "", valueTypes.NewDateTime(""), uv)
|
||||
// //
|
||||
// // uv = api.SetUnitValueFloat(e.Response.ResultData.P83017.Value(), e.Response.ResultData.P83017Unit.Value())
|
||||
// // entries.AddUnitValue(name + ".p83017", e.Request.PsId.String(), "p83017", "", "", valueTypes.NewDateTime(""), uv)
|
||||
// //
|
||||
// // entries.StructToPoints(e.Response.ResultData, name, e.Request.PsId.String(), valueTypes.NewDateTime(""))
|
||||
// //
|
||||
// // for _, sid := range e.Response.ResultData.StorageInverterData {
|
||||
// // entries.StructToPoints(sid, name + ".StorageInverterData." + sid.PsKey.Value(), sid.PsKey.Value(), valueTypes.NewDateTime(""))
|
||||
// // }
|
||||
// }
|
||||
|
||||
return entries
|
||||
}
|
||||
|
@ -26,116 +26,116 @@ func (rd RequestData) Help() string {
|
||||
}
|
||||
|
||||
type ResultData struct {
|
||||
BatteryLevelPercent valueTypes.Integer `json:"battery_level_percent" PointId:"BatteryLevelPercent" PointUnit:"%" PointTimeSpan:"PointTimeSpanInstant"`
|
||||
ChargingDischargingPowerMap valueTypes.UnitValue `json:"charging_discharging_power_map" PointId:"ChargingDischargingPowerMap" PointTimeSpan:"PointTimeSpanInstant"`
|
||||
Co2ReduceTotal valueTypes.UnitValue `json:"co2_reduce_total" PointId:"Co2ReduceTotal" PointTimeSpan:"PointTimeSpanTotal"`
|
||||
CoalReduceTotal valueTypes.UnitValue `json:"coal_reduce_total" PointId:"CoalReduceTotal" PointTimeSpan:"PointTimeSpanTotal"`
|
||||
ConnectType string `json:"connect_type" PointId:"ConnectType" PointTimeSpan:"PointTimeSpanBoot"`
|
||||
CurrPower valueTypes.UnitValue `json:"curr_power" PointId:"CurrPower" PointTimeSpan:"PointTimeSpanInstant"`
|
||||
DesignCapacity valueTypes.UnitValue `json:"design_capacity" PointId:"DesignCapacity" PointTimeSpan:"PointTimeSpanBoot"`
|
||||
EnergyScheme interface{} `json:"energy_scheme"`
|
||||
GcjLatitude valueTypes.Float `json:"gcj_latitude" PointId:"GcjLatitude" PointTimeSpan:"PointTimeSpanBoot"`
|
||||
GcjLongitude valueTypes.Float `json:"gcj_longitude" PointId:"GcjLongitude" PointTimeSpan:"PointTimeSpanBoot"`
|
||||
HasAmmeter valueTypes.Bool `json:"has_ammeter" PointId:"HasAmmeter" PointTimeSpan:"PointTimeSpanBoot"`
|
||||
HouseholdInverterData interface{} `json:"household_inverter_data"`
|
||||
InstallerPsFaultStatus string `json:"installer_ps_fault_status" PointId:"InstallerPsFaultStatus" PointTimeSpan:"PointTimeSpanBoot"`
|
||||
IsHaveEsInverter valueTypes.Bool `json:"is_have_es_inverter" PointId:"IsHaveEsInverter" PointTimeSpan:"PointTimeSpanBoot"`
|
||||
IsSingleInverter valueTypes.Bool `json:"is_single_inverter" PointId:"IsSingleInverter" PointTimeSpan:"PointTimeSpanBoot"`
|
||||
IsTransformSystem valueTypes.Bool `json:"is_transform_system" PointId:"IsTransformSystem" PointTimeSpan:"PointTimeSpanBoot"`
|
||||
Latitude valueTypes.Float `json:"latitude" PointId:"Latitude" PointTimeSpan:"PointTimeSpanBoot"`
|
||||
LoadPowerMap valueTypes.UnitValue `json:"load_power_map" PointId:"LoadPowerMap" PointTimeSpan:"PointTimeSpanInstant"`
|
||||
BatteryLevelPercent valueTypes.Integer `json:"battery_level_percent" PointId:"battery_level_percent" PointUnit:"%" PointUpdateFreq:"UpdateFreqInstant"`
|
||||
ChargingDischargingPowerMap valueTypes.UnitValue `json:"charging_discharging_power_map" PointId:"charging_discharging_power_map" PointUpdateFreq:"UpdateFreqInstant"` // Holds the battery charge/discharge amount
|
||||
Co2ReduceTotal valueTypes.UnitValue `json:"co2_reduce_total" PointId:"co2_reduce_total" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
CoalReduceTotal valueTypes.UnitValue `json:"coal_reduce_total" PointId:"coal_reduce_total" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
ConnectType valueTypes.Integer `json:"connect_type" PointId:"connect_type" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
CurrPower valueTypes.UnitValue `json:"curr_power" PointId:"curr_power" PointUpdateFreq:"UpdateFreqInstant"`
|
||||
DesignCapacity valueTypes.UnitValue `json:"design_capacity" PointId:"design_capacity" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
EnergyScheme interface{} `json:"energy_scheme" PointId:"energy_scheme"`
|
||||
GcjLatitude valueTypes.Float `json:"gcj_latitude" PointId:"gcj_latitude" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
GcjLongitude valueTypes.Float `json:"gcj_longitude" PointId:"gcj_longitude" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
HasAmmeter valueTypes.Bool `json:"has_ammeter" PointId:"has_ammeter" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
HouseholdInverterData interface{} `json:"household_inverter_data" PointId:"household_inverter_data"`
|
||||
InstallerPsFaultStatus valueTypes.Integer `json:"installer_ps_fault_status" PointId:"installer_ps_fault_status" PointUpdateFreq:"UpdateFreqInstant"`
|
||||
IsHaveEsInverter valueTypes.Bool `json:"is_have_es_inverter" PointId:"is_have_es_inverter" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
IsSingleInverter valueTypes.Bool `json:"is_single_inverter" PointId:"is_single_inverter" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
IsTransformSystem valueTypes.Bool `json:"is_transform_system" PointId:"is_transform_system" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
Latitude valueTypes.Float `json:"latitude" PointId:"latitude" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
LoadPowerMap valueTypes.UnitValue `json:"load_power_map" PointId:"load_power_map" PointUpdateFreq:"UpdateFreqInstant"`
|
||||
LoadPowerMapVirgin valueTypes.UnitValue `json:"load_power_map_virgin" PointIgnore:"true"`
|
||||
Longitude valueTypes.Float `json:"longitude" PointId:"Longitude" PointTimeSpan:"PointTimeSpanBoot"`
|
||||
MapLatitude valueTypes.Float `json:"map_latitude" PointId:"MapLatitude" PointTimeSpan:"PointTimeSpanBoot"`
|
||||
MapLongitude valueTypes.Float `json:"map_longitude" PointId:"MapLongitude" PointTimeSpan:"PointTimeSpanBoot"`
|
||||
MeterReduceTotal valueTypes.UnitValue `json:"meter_reduce_total" PointId:"MeterReduceTotal" PointTimeSpan:"PointTimeSpanTotal"`
|
||||
MobileTel valueTypes.String `json:"moble_tel" PointId:"MobleTel" PointTimeSpan:"PointTimeSpanBoot"`
|
||||
MonthEnergy valueTypes.UnitValue `json:"month_energy" PointId:"MonthEnergy" PointTimeSpan:"PointTimeSpanMonthly"`
|
||||
Longitude valueTypes.Float `json:"longitude" PointId:"longitude" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
MapLatitude valueTypes.Float `json:"map_latitude" PointId:"map_latitude" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
MapLongitude valueTypes.Float `json:"map_longitude" PointId:"map_longitude" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
MeterReduceTotal valueTypes.UnitValue `json:"meter_reduce_total" PointId:"meter_reduce_total" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
MobileTel valueTypes.String `json:"moble_tel" PointId:"mobile_tel" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
MonthEnergy valueTypes.UnitValue `json:"month_energy" PointId:"month_energy" PointUpdateFreq:"UpdateFreqMonthly"`
|
||||
MonthEnergyVirgin valueTypes.UnitValue `json:"month_energy_virgin" PointIgnore:"true"`
|
||||
MonthIncome valueTypes.UnitValue `json:"month_income" PointId:"MonthIncome" PointTimeSpan:"PointTimeSpanMonthly"`
|
||||
NegativeLoadMsg interface{} `json:"negative_load_msg"`
|
||||
OwnerPsFaultStatus string `json:"owner_ps_fault_status" PointId:"OwnerPsFaultStatus" PointTimeSpan:"PointTimeSpanBoot"`
|
||||
P83081Map valueTypes.UnitValue `json:"p83081_map" PointId:"p83081" PointTimeSpan:"PointTimeSpanInstant"`
|
||||
MonthIncome valueTypes.UnitValue `json:"month_income" PointId:"month_income" PointUpdateFreq:"UpdateFreqMonthly"`
|
||||
NegativeLoadMsg interface{} `json:"negative_load_msg" PointId:"negative_load_msg"`
|
||||
OwnerPsFaultStatus valueTypes.Integer `json:"owner_ps_fault_status" PointId:"owner_ps_fault_status" PointUpdateFreq:"UpdateFreqInstant"`
|
||||
P83081Map valueTypes.UnitValue `json:"p83081_map" PointId:"p83081" PointName:"Load Power" PointUpdateFreq:"UpdateFreq5Mins"`
|
||||
P83081MapVirgin valueTypes.UnitValue `json:"p83081_map_virgin" PointIgnore:"true"`
|
||||
P83102Map valueTypes.UnitValue `json:"p83102_map" PointId:"p83102" PointTimeSpan:"PointTimeSpanInstant"`
|
||||
P83102Map valueTypes.UnitValue `json:"p83102_map" PointId:"p83102" PointName:"Energy Purchased" PointUpdateFreq:"UpdateFreq5Mins"`
|
||||
P83102MapVirgin valueTypes.UnitValue `json:"p83102_map_virgin" PointIgnore:"true"`
|
||||
P83102Percent valueTypes.Float `json:"p83102_percent" PointId:"p83102" PointUnit:"%" PointTimeSpan:"PointTimeSpanInstant"`
|
||||
P83118Map valueTypes.UnitValue `json:"p83118_map" PointId:"p83118" PointTimeSpan:"PointTimeSpanInstant"`
|
||||
P83102Percent valueTypes.Float `json:"p83102_percent" PointId:"p83102_percent" PointName:"Energy Purchased Percent" PointUnit:"%" PointUpdateFreq:"UpdateFreq5Mins"`
|
||||
P83118Map valueTypes.UnitValue `json:"p83118_map" PointId:"p83118" PointName:"Energy Used" PointUpdateFreq:"UpdateFreq5Mins"`
|
||||
P83118MapVirgin valueTypes.UnitValue `json:"p83118_map_virgin" PointIgnore:"true"`
|
||||
P83119Map valueTypes.UnitValue `json:"p83119_map" PointId:"p83119" PointTimeSpan:"PointTimeSpanInstant"`
|
||||
P83119Map valueTypes.UnitValue `json:"p83119_map" PointId:"p83119" PointName:"Energy Feed-In" PointUpdateFreq:"UpdateFreq5Mins"`
|
||||
P83119MapVirgin valueTypes.UnitValue `json:"p83119_map_virgin" PointIgnore:"true"`
|
||||
P83120Map valueTypes.UnitValue `json:"p83120_map" PointId:"p83120" PointTimeSpan:"PointTimeSpanInstant"`
|
||||
P83120Map valueTypes.UnitValue `json:"p83120_map" PointId:"p83120" PointName:"Energy Battery Charge" PointUpdateFreq:"UpdateFreq5Mins"`
|
||||
P83120MapVirgin valueTypes.UnitValue `json:"p83120_map_virgin" PointIgnore:"true"`
|
||||
P83122 valueTypes.Float `json:"p83122" PointId:"p83122" PointTimeSpan:"PointTimeSpanInstant"`
|
||||
P83124Map valueTypes.UnitValue `json:"p83124_map" PointId:"p83124" PointTimeSpan:"PointTimeSpanInstant"`
|
||||
P83122 valueTypes.Float `json:"p83122" PointId:"p83122" PointName:"Self Sufficiency Percent" PointUnit:"%" PointUpdateFreq:"UpdateFreq5Mins"`
|
||||
P83124Map valueTypes.UnitValue `json:"p83124_map" PointId:"p83124" PointUpdateFreq:"UpdateFreq5Mins"`
|
||||
P83124MapVirgin valueTypes.UnitValue `json:"p83124_map_virgin" PointIgnore:"true"`
|
||||
P83202Map valueTypes.UnitValue `json:"p83202_map" PointId:"p83202" PointTimeSpan:"PointTimeSpanInstant"`
|
||||
P83202MapVirgin valueTypes.UnitValue `json:"p83202_map_virgin" PointIgnore:"true"`
|
||||
P83202Map valueTypes.UnitValue `json:"p83202_map" PointId:"p83202" PointName:"Installed Power" PointUpdateFreq:"UpdateFreq5Mins"`
|
||||
P83202MapVirgin valueTypes.UnitValue `json:"p83202_map_virgin" PointIgnore:"true"`
|
||||
P83532MapVirgin valueTypes.UnitValue `json:"p83532_map_virgin" PointIgnore:"true"`
|
||||
PowerChargeSetted valueTypes.Integer `json:"power_charge_setted" PointId:"PowerChargeSetted" PointTimeSpan:"PointTimeSpanBoot"`
|
||||
PowerGridPowerMap valueTypes.UnitValue `json:"power_grid_power_map" PointId:"PowerGridPowerMap" PointTimeSpan:"PointTimeSpanInstant"`
|
||||
PowerChargeSetted valueTypes.Bool `json:"power_charge_setted" PointId:"power_charge_set" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
PowerGridPowerMap valueTypes.UnitValue `json:"power_grid_power_map" PointId:"power_grid_power_map" PointUpdateFreq:"UpdateFreq5Mins"`
|
||||
PowerGridPowerMapVirgin valueTypes.UnitValue `json:"power_grid_power_map_virgin" PointIgnore:"true"`
|
||||
PsCountryID valueTypes.Integer `json:"ps_country_id" PointId:"PsCountryID" PointTimeSpan:"PointTimeSpanBoot"`
|
||||
PsDeviceType valueTypes.Integer `json:"ps_device_type" PointId:"PsDeviceType" PointTimeSpan:"PointTimeSpanBoot"`
|
||||
PsFaultStatus string `json:"ps_fault_status" PointId:"PsFaultStatus" PointTimeSpan:"PointTimeSpanBoot"`
|
||||
PsHealthStatus string `json:"ps_health_status" PointId:"PsHealthStatus" PointTimeSpan:"PointTimeSpanBoot"`
|
||||
PsLocation valueTypes.String `json:"ps_location" PointId:"PsLocation" PointTimeSpan:"PointTimeSpanBoot"`
|
||||
PsName valueTypes.String `json:"ps_name" PointId:"PsName" PointTimeSpan:"PointTimeSpanBoot"`
|
||||
PsPsKey valueTypes.PsKey `json:"ps_ps_key" PointId:"PsPsKey" PointTimeSpan:"PointTimeSpanBoot"`
|
||||
PsState string `json:"ps_state" PointId:"PsState" PointTimeSpan:"PointTimeSpanBoot"`
|
||||
PsType valueTypes.Integer `json:"ps_type" PointId:"PsType" PointTimeSpan:"PointTimeSpanBoot"`
|
||||
PvPowerMap valueTypes.UnitValue `json:"pv_power_map" PointId:"PvPowerMap" PointTimeSpan:"PointTimeSpanInstant"`
|
||||
PsCountryID valueTypes.Integer `json:"ps_country_id" PointId:"ps_country_id" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
PsDeviceType valueTypes.Integer `json:"ps_device_type" PointId:"ps_device_type" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
PsFaultStatus valueTypes.Integer `json:"ps_fault_status" PointId:"ps_fault_status" PointUpdateFreq:"UpdateFreqInstant"`
|
||||
PsHealthStatus valueTypes.Integer `json:"ps_health_status" PointId:"ps_health_status" PointUpdateFreq:"UpdateFreqInstant"`
|
||||
PsLocation valueTypes.String `json:"ps_location" PointId:"ps_location" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
PsName valueTypes.String `json:"ps_name" PointId:"ps_name" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
PsPsKey valueTypes.PsKey `json:"ps_ps_key" PointId:"ps_key" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
PsState valueTypes.Bool `json:"ps_state" PointId:"ps_state" PointUpdateFreq:"UpdateFreqInstant"`
|
||||
PsType valueTypes.Integer `json:"ps_type" PointId:"ps_type" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
PvPowerMap valueTypes.UnitValue `json:"pv_power_map" PointId:"pv_power_map" PointUpdateFreq:"UpdateFreq5Mins"`
|
||||
PvPowerMapVirgin valueTypes.UnitValue `json:"pv_power_map_virgin" PointIgnore:"true"`
|
||||
RobotNumSweepCapacity struct {
|
||||
Num valueTypes.Integer `json:"num" PointId:"Num" PointTimeSpan:"PointTimeSpanBoot"`
|
||||
SweepCapacity valueTypes.Float `json:"sweep_capacity" PointId:"SweepCapacity" PointTimeSpan:"PointTimeSpanBoot"`
|
||||
} `json:"robot_num_sweep_capacity"`
|
||||
SelfConsumptionOffsetReminder valueTypes.Integer `json:"self_consumption_offset_reminder" PointId:"SelfConsumptionOffsetReminder" PointTimeSpan:"PointTimeSpanBoot"`
|
||||
So2ReduceTotal valueTypes.UnitValue `json:"so2_reduce_total" PointId:"So2ReduceTotal" PointTimeSpan:"PointTimeSpanTotal"`
|
||||
Num valueTypes.Integer `json:"num" PointId:"num" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
SweepCapacity valueTypes.Float `json:"sweep_capacity" PointId:"sweep_capacity" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
} `json:"robot_num_sweep_capacity" PointId:"robot"`
|
||||
SelfConsumptionOffsetReminder valueTypes.Integer `json:"self_consumption_offset_reminder" PointId:"self_consumption_offset_reminder" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
So2ReduceTotal valueTypes.UnitValue `json:"so2_reduce_total" PointId:"so2_reduce_total" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
StorageInverterData []struct {
|
||||
CommunicationDevSn valueTypes.String `json:"communication_dev_sn" PointId:"CommunicationDevSn" PointName:"Serial No" PointTimeSpan:"PointTimeSpanBoot"`
|
||||
DevStatus valueTypes.Integer `json:"dev_status" PointId:"DevStatus" PointTimeSpan:"PointTimeSpanBoot"`
|
||||
DeviceCode valueTypes.Integer `json:"device_code" PointId:"DeviceCode" PointTimeSpan:"PointTimeSpanBoot"`
|
||||
DeviceModelCode valueTypes.String `json:"device_model_code" PointId:"DeviceModelCode" PointTimeSpan:"PointTimeSpanBoot"`
|
||||
DeviceName valueTypes.String `json:"device_name" PointId:"DeviceName" PointTimeSpan:"PointTimeSpanBoot"`
|
||||
DeviceState string `json:"device_state" PointId:"DeviceState" PointTimeSpan:"PointTimeSpanBoot"`
|
||||
DeviceType valueTypes.Integer `json:"device_type" PointId:"DeviceType" PointTimeSpan:"PointTimeSpanBoot"`
|
||||
DrmStatus valueTypes.Integer `json:"drm_status" PointId:"DrmStatus" PointTimeSpan:"PointTimeSpanBoot"`
|
||||
DrmStatusName valueTypes.String `json:"drm_status_name" PointId:"DrmStatusName" PointTimeSpan:"PointTimeSpanBoot"`
|
||||
EnergyFlow []valueTypes.Integer `json:"energy_flow"`
|
||||
HasAmmeter valueTypes.Bool `json:"has_ammeter" PointId:"HasAmmeter" PointTimeSpan:"PointTimeSpanBoot"`
|
||||
InstallerDevFaultStatus valueTypes.Integer `json:"installer_dev_fault_status" PointId:"InstallerDevFaultStatus" PointTimeSpan:"PointTimeSpanBoot"`
|
||||
InverterSn valueTypes.String `json:"inverter_sn" PointId:"InverterSn" PointTimeSpan:"PointTimeSpanBoot"`
|
||||
OwnerDevFaultStatus valueTypes.Integer `json:"owner_dev_fault_status" PointId:"OwnerDevFaultStatus" PointTimeSpan:"PointTimeSpanBoot"`
|
||||
P13003Map valueTypes.UnitValue `json:"p13003_map" PointId:"p13003" PointTimeSpan:"PointTimeSpanInstant"`
|
||||
CommunicationDevSn valueTypes.String `json:"communication_dev_sn" PointId:"communication_dev_sn" PointName:"Serial No" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
DevStatus valueTypes.Integer `json:"dev_status" PointId:"dev_status" PointUpdateFreq:"UpdateFreqInstant"`
|
||||
DeviceCode valueTypes.Integer `json:"device_code" PointId:"device_code" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
DeviceModelCode valueTypes.String `json:"device_model_code" PointId:"device_model_code" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
DeviceName valueTypes.String `json:"device_name" PointId:"device_name" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
DeviceState valueTypes.Integer `json:"device_state" PointId:"device_state" PointUpdateFreq:"UpdateFreqInstant"`
|
||||
DeviceType valueTypes.Integer `json:"device_type" PointId:"device_type" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
DrmStatus valueTypes.Integer `json:"drm_status" PointId:"drm_status" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
DrmStatusName valueTypes.String `json:"drm_status_name" PointId:"drm_status_name" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
EnergyFlow []valueTypes.Integer `json:"energy_flow" PointId:"energy_flow" PointArrayFlatten:"true" PointUpdateFreq:"UpdateFreq5Mins"`
|
||||
HasAmmeter valueTypes.Bool `json:"has_ammeter" PointId:"has_ammeter" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
InstallerDevFaultStatus valueTypes.Integer `json:"installer_dev_fault_status" PointId:"installer_dev_fault_status" PointUpdateFreq:"UpdateFreqInstant"`
|
||||
InverterSn valueTypes.String `json:"inverter_sn" PointId:"inverter_sn" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
OwnerDevFaultStatus valueTypes.Integer `json:"owner_dev_fault_status" PointId:"owner_dev_fault_status" PointUpdateFreq:"UpdateFreqInstant"`
|
||||
P13003Map valueTypes.UnitValue `json:"p13003_map" PointId:"p13003" PointName:"PV Power To Load" PointUpdateFreq:"UpdateFreq5Mins"`
|
||||
P13003MapVirgin valueTypes.UnitValue `json:"p13003_map_virgin" PointIgnore:"true"`
|
||||
P13119Map valueTypes.UnitValue `json:"p13119_map" PointId:"p13119" PointTimeSpan:"PointTimeSpanInstant"`
|
||||
P13119Map valueTypes.UnitValue `json:"p13119_map" PointId:"p13119" PointName:"Load Power" PointUpdateFreq:"UpdateFreq5Mins"`
|
||||
P13119MapVirgin valueTypes.UnitValue `json:"p13119_map_virgin" PointIgnore:"true"`
|
||||
P13121Map valueTypes.UnitValue `json:"p13121_map" PointId:"p13121" PointTimeSpan:"PointTimeSpanInstant"`
|
||||
P13121Map valueTypes.UnitValue `json:"p13121_map" PointId:"p13121" PointName:"PV Power To Grid" PointUpdateFreq:"UpdateFreq5Mins"`
|
||||
P13121MapVirgin valueTypes.UnitValue `json:"p13121_map_virgin" PointIgnore:"true"`
|
||||
P13126Map valueTypes.UnitValue `json:"p13126_map" PointId:"p13126" PointTimeSpan:"PointTimeSpanInstant"`
|
||||
P13126Map valueTypes.UnitValue `json:"p13126_map" PointId:"p13126" PointName:"PV Power To Battery" PointUpdateFreq:"UpdateFreq5Mins"`
|
||||
P13126MapVirgin valueTypes.UnitValue `json:"p13126_map_virgin" PointIgnore:"true"`
|
||||
P13141 valueTypes.Float `json:"p13141" PointId:"p13141" PointTimeSpan:"PointTimeSpanInstant"`
|
||||
P13149Map valueTypes.UnitValue `json:"p13149_map" PointId:"p13149" PointTimeSpan:"PointTimeSpanInstant"`
|
||||
P13141 valueTypes.Float `json:"p13141" PointId:"p13141" PointName:"Battery Charge Percent" PointUnit:"%" PointUpdateFreq:"UpdateFreq5Mins"`
|
||||
P13149Map valueTypes.UnitValue `json:"p13149_map" PointId:"p13149" PointName:"Grid Power To Load" PointUpdateFreq:"UpdateFreq5Mins"`
|
||||
P13149MapVirgin valueTypes.UnitValue `json:"p13149_map_virgin" PointIgnore:"true"`
|
||||
P13150Map valueTypes.UnitValue `json:"p13150_map" PointId:"p13150" PointTimeSpan:"PointTimeSpanInstant"`
|
||||
P13150MapVirgin valueTypes.UnitValue `json:"p13150_map_virgin" PointIgnore:"true"`
|
||||
PsKey valueTypes.PsKey `json:"ps_key" PointId:"PsKey" PointTimeSpan:"PointTimeSpanBoot"`
|
||||
UUID valueTypes.Integer `json:"uuid" PointId:"UUID" PointTimeSpan:"PointTimeSpanBoot"`
|
||||
} `json:"storage_inverter_data"`
|
||||
TodayEnergy valueTypes.UnitValue `json:"today_energy" PointId:"TodayEnergy" PointTimeSpan:"PointTimeSpanDaily"`
|
||||
P13150Map valueTypes.UnitValue `json:"p13150_map" PointId:"p13150" PointUpdateFreq:"UpdateFreq5Mins"`
|
||||
P13150MapVirgin valueTypes.UnitValue `json:"p13150_map_virgin" PointIgnore:"true"`
|
||||
PsKey valueTypes.PsKey `json:"ps_key" PointId:"ps_key" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
UUID valueTypes.Integer `json:"uuid" PointId:"uuid" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
} `json:"storage_inverter_data" PointNameFromChild:"PsKey"`
|
||||
TodayEnergy valueTypes.UnitValue `json:"today_energy" PointId:"today_energy" PointUpdateFreq:"UpdateFreqDaily"`
|
||||
TodayEnergyVirgin valueTypes.UnitValue `json:"today_energy_virgin" PointIgnore:"true"`
|
||||
TodayIncome valueTypes.UnitValue `json:"today_income" PointId:"TodayIncome" PointTimeSpan:"PointTimeSpanDaily"`
|
||||
TotalEnergy valueTypes.UnitValue `json:"total_energy" PointId:"TotalEnergy" PointTimeSpan:"PointTimeSpanTotal"`
|
||||
TodayIncome valueTypes.UnitValue `json:"today_income" PointId:"today_income" PointUpdateFreq:"UpdateFreqDaily"`
|
||||
TotalEnergy valueTypes.UnitValue `json:"total_energy" PointId:"total_energy" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
TotalEnergyVirgin valueTypes.UnitValue `json:"total_energy_virgin" PointIgnore:"true"`
|
||||
TotalIncome valueTypes.UnitValue `json:"total_income" PointId:"TotalIncome" PointTimeSpan:"PointTimeSpanTotal"`
|
||||
TreeReduceTotal valueTypes.UnitValue `json:"tree_reduce_total" PointId:"TreeReduceTotal" PointTimeSpan:"PointTimeSpanTotal"`
|
||||
ValidFlag valueTypes.Integer `json:"valid_flag" PointId:"ValidFlag" PointTimeSpan:"PointTimeSpanBoot"`
|
||||
WgsLatitude valueTypes.Float `json:"wgs_latitude" PointId:"WgsLatitude" PointTimeSpan:"PointTimeSpanBoot"`
|
||||
WgsLongitude valueTypes.Float `json:"wgs_longitude" PointId:"WgsLongitude" PointTimeSpan:"PointTimeSpanBoot"`
|
||||
ZfzyMap valueTypes.UnitValue `json:"zfzy_map" PointId:"ZfzyMap" PointTimeSpan:"PointTimeSpanInstant"`
|
||||
TotalIncome valueTypes.UnitValue `json:"total_income" PointId:"total_income" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
TreeReduceTotal valueTypes.UnitValue `json:"tree_reduce_total" PointId:"tree_reduce_total" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
ValidFlag valueTypes.Bool `json:"valid_flag" PointId:"valid_flag" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
WgsLatitude valueTypes.Float `json:"wgs_latitude" PointId:"wgs_latitude" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
WgsLongitude valueTypes.Float `json:"wgs_longitude" PointId:"wgs_longitude" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
ZfzyMap valueTypes.UnitValue `json:"zfzy_map" PointId:"zfzy_map" PointName:"Self Consumption Of PV" PointUpdateFreq:"UpdateFreq5Mins"`
|
||||
ZfzyMapVirgin valueTypes.UnitValue `json:"zfzy_map_virgin" PointIgnore:"true"`
|
||||
ZjzzMap valueTypes.UnitValue `json:"zjzz_map" PointId:"ZjzzMap" PointTimeSpan:"PointTimeSpanInstant"`
|
||||
ZjzzMap valueTypes.UnitValue `json:"zjzz_map" PointId:"zjzz_map" PointName:"Self Sufficiency" PointUpdateFreq:"UpdateFreq5Mins"`
|
||||
ZjzzMapVirgin valueTypes.UnitValue `json:"zjzz_map_virgin" PointIgnore:"true"`
|
||||
}
|
||||
|
||||
@ -150,41 +150,69 @@ func (e *ResultData) IsValid() error {
|
||||
return err
|
||||
}
|
||||
|
||||
//type DecodeResultData ResultData
|
||||
//
|
||||
//func (e *ResultData) UnmarshalJSON(data []byte) error {
|
||||
// var err error
|
||||
//
|
||||
// for range Only.Once {
|
||||
// if len(data) == 0 {
|
||||
// break
|
||||
// }
|
||||
// var pd DecodeResultData
|
||||
//
|
||||
// // Store ResultData
|
||||
// _ = json.Unmarshal(data, &pd)
|
||||
// e.Dummy = pd.Dummy
|
||||
// }
|
||||
//
|
||||
// return err
|
||||
//}
|
||||
|
||||
func (e *EndPoint) GetData() api.DataMap {
|
||||
return e.Response.ResultData.GetData()
|
||||
}
|
||||
|
||||
func (e *ResultData) GetData() api.DataMap {
|
||||
entries := api.NewDataMap()
|
||||
|
||||
for range Only.Once {
|
||||
pkg := apiReflect.GetName("", *e)
|
||||
name := fmt.Sprintf("%s.%s", pkg, e.PsPsKey.Value())
|
||||
entries.StructToPoints(*e, name, e.PsPsKey.Value(), valueTypes.NewDateTime(""))
|
||||
name := api.JoinWithDots(0, valueTypes.DateTimeLayoutDay, pkg, e.Response.ResultData.PsPsKey)
|
||||
entries.StructToPoints(e.Response.ResultData, name, e.Response.ResultData.PsPsKey.Value(), valueTypes.NewDateTime(""))
|
||||
|
||||
for _, sid := range e.StorageInverterData {
|
||||
name = fmt.Sprintf("%s.%s", pkg, sid.PsKey.Value())
|
||||
entries.StructToPoints(sid, name, sid.PsKey.Value(), valueTypes.NewDateTime(""))
|
||||
dstEndpoint := "virtual." + e.Request.PsId.String()
|
||||
srcEndpoint := fmt.Sprintf("%s.%s", pkg, e.Response.ResultData.PsPsKey.Value())
|
||||
|
||||
var devices []string
|
||||
for _, device := range e.Response.ResultData.StorageInverterData {
|
||||
if !device.DeviceType.Match(api.DeviceNameEnergyStorageSystem) {
|
||||
// Only looking for a Battery.
|
||||
continue
|
||||
}
|
||||
devices = append(devices, device.PsKey.String())
|
||||
}
|
||||
|
||||
|
||||
for pn, device := range e.Response.ResultData.StorageInverterData {
|
||||
fmt.Println(pn)
|
||||
fmt.Println(device.PsKey)
|
||||
}
|
||||
|
||||
for _, device := range devices {
|
||||
dstEndpoint = "virtual." + device
|
||||
_ = entries.CopyPoint(api.JoinWithDots(0, "", srcEndpoint, device, "p13003"), dstEndpoint, "p13003", "") // PV Power To Load
|
||||
_ = entries.CopyPoint(api.JoinWithDots(0, "", srcEndpoint, device, "p13119"), dstEndpoint, "p13119", "") // Load Power
|
||||
_ = entries.CopyPoint(api.JoinWithDots(0, "", srcEndpoint, device, "p13121"), dstEndpoint, "p13121", "") // PV Power To Grid
|
||||
_ = entries.CopyPoint(api.JoinWithDots(0, "", srcEndpoint, device, "p13126"), dstEndpoint, "p13126", "") // PV Power To Battery
|
||||
_ = entries.CopyPoint(api.JoinWithDots(0, "", srcEndpoint, device, "p13141"), dstEndpoint, "p13141", "") // Battery Charge Percent
|
||||
_ = entries.CopyPoint(api.JoinWithDots(0, "", srcEndpoint, device, "p13149"), dstEndpoint, "p13149", "") // ?? Grid Power To Load
|
||||
_ = entries.CopyPoint(api.JoinWithDots(0, "", srcEndpoint, device, "p13150"), dstEndpoint, "p13150", "") //
|
||||
}
|
||||
|
||||
dstEndpoint = "virtual." + e.Response.ResultData.PsPsKey.Value()
|
||||
_ = entries.CopyPoint(srcEndpoint + ".p83081", dstEndpoint, "p83081", "") // ?? Load Power - also getPsDetailWithPsType.1171348_11_0_0.curr_power
|
||||
_ = entries.CopyPoint(srcEndpoint + ".p83102", dstEndpoint, "p83102", "") // Energy Purchased
|
||||
_ = entries.CopyPoint(srcEndpoint + ".p83102_percent", dstEndpoint + ".p83102", "percent", "") // Energy Purchased Percent
|
||||
_ = entries.CopyPoint(srcEndpoint + ".p83118", dstEndpoint, "p83118", "") // Energy Used
|
||||
_ = entries.CopyPoint(srcEndpoint + ".p83119", dstEndpoint, "p83119", "") // Energy Feed-In
|
||||
_ = entries.CopyPoint(srcEndpoint + ".p83120", dstEndpoint, "p83120", "") // Energy Battery Charge
|
||||
_ = entries.CopyPoint(srcEndpoint + ".p83122", dstEndpoint, "p83122", "") // Self Sufficiency Percent
|
||||
_ = entries.CopyPoint(srcEndpoint + ".p83124", dstEndpoint, "p83124", "")
|
||||
_ = entries.CopyPoint(srcEndpoint + ".p83202", dstEndpoint, "p83202", "") // Installed Power
|
||||
|
||||
_ = entries.CopyPoint(srcEndpoint + ".zjzz_map", dstEndpoint, "zjzz", "") // Self Sufficiency
|
||||
_ = entries.CopyPoint(srcEndpoint + ".zfzy_map", dstEndpoint, "zfzy", "") // Self Consumption Of PV
|
||||
|
||||
// for _, sid := range e.Response.ResultData.StorageInverterData {
|
||||
// name = api.JoinWithDots(0, valueTypes.DateTimeLayoutDay, pkg, sid.PsKey)
|
||||
// entries.StructToPoints(sid, name, sid.PsKey.Value(), valueTypes.NewDateTime(""))
|
||||
//
|
||||
// // EnergyFlow
|
||||
// for _, ef := range sid.EnergyFlow {
|
||||
// name = api.JoinWithDots(0, valueTypes.DateTimeLayoutDay, pkg, sid.PsKey)
|
||||
// entries.StructToPoints(ef, name, sid.PsKey.Value(), valueTypes.NewDateTime(""))
|
||||
//
|
||||
// // EnergyFlow
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
// api.Points.Print()
|
||||
@ -204,7 +232,7 @@ func (e *EndPoint) GetPsName() string {
|
||||
}
|
||||
|
||||
func (e *EndPoint) GetPsState() string {
|
||||
return e.Response.ResultData.PsState
|
||||
return e.Response.ResultData.PsState.String()
|
||||
}
|
||||
|
||||
func (e *EndPoint) GetPsKey() string {
|
||||
|
@ -26,27 +26,27 @@ func (rd RequestData) Help() string {
|
||||
|
||||
type ResultData struct {
|
||||
PageList []struct {
|
||||
AlarmCount valueTypes.Integer `json:"alarm_count" PointId:"alarm_count" PointTimeSpan:"PointTimeSpanBoot"`
|
||||
AlarmDevCount valueTypes.Integer `json:"alarm_dev_count" PointId:"alarm_dev_count" PointTimeSpan:"PointTimeSpanBoot"`
|
||||
AreaID interface{} `json:"area_id" PointId:"area_id"`
|
||||
AreaType interface{} `json:"area_type" PointId:"area_type"`
|
||||
AlarmCount valueTypes.Integer `json:"alarm_count" PointId:"alarm_count" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
AlarmDevCount valueTypes.Integer `json:"alarm_dev_count" PointId:"alarm_dev_count" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
AreaID interface{} `json:"area_id" PointId:"area_id"`
|
||||
AreaType interface{} `json:"area_type" PointId:"area_type"`
|
||||
ArrearsStatus valueTypes.Integer `json:"arrears_status" PointId:"arrears_status"`
|
||||
BuildDate valueTypes.DateTime `json:"build_date" PointId:"build_date" PointTimeSpan:"PointTimeSpanBoot"`
|
||||
BuildStatus valueTypes.Integer `json:"build_status" PointId:"build_status" PointTimeSpan:"PointTimeSpanBoot"`
|
||||
BuildDate valueTypes.DateTime `json:"build_date" PointId:"build_date" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
BuildStatus valueTypes.Integer `json:"build_status" PointId:"build_status" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
Co2Reduce valueTypes.UnitValue `json:"co2_reduce" PointId:"co2_reduce"`
|
||||
Co2ReduceTotal valueTypes.UnitValue `json:"co2_reduce_total" PointId:"co2_reduce_total" PointTimeSpan:"PointTimeSpanTotal"`
|
||||
Co2ReduceTotal valueTypes.UnitValue `json:"co2_reduce_total" PointId:"co2_reduce_total" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
CurrPower valueTypes.UnitValue `json:"curr_power" PointId:"curr_power"`
|
||||
DailyIrradiation valueTypes.UnitValue `json:"daily_irradiation" PointId:"daily_irradiation" PointTimeSpan:"PointTimeSpanDaily"`
|
||||
DailyIrradiation valueTypes.UnitValue `json:"daily_irradiation" PointId:"daily_irradiation" PointUpdateFreq:"UpdateFreqDaily"`
|
||||
DailyIrradiationVirgin valueTypes.Float `json:"daily_irradiation_virgin" PointIgnore:"true"`
|
||||
DesignCapacity valueTypes.Float `json:"design_capacity" PointId:"design_capacity" PointUnitFrom:"design_capacity_unit"`
|
||||
DesignCapacityUnit valueTypes.String `json:"design_capacity_unit" PointId:"design_capacity_unit"`
|
||||
DesignCapacityVirgin valueTypes.Float `json:"design_capacity_virgin" PointIgnore:"true"`
|
||||
EquivalentHour valueTypes.UnitValue `json:"equivalent_hour" PointId:"equivalent_hour" PointTimeSpan:"PointTimeSpanDaily"`
|
||||
EsDischargeEnergy valueTypes.UnitValue `json:"es_disenergy" PointId:"p83089" PointName:"Es Discharge Energy"`
|
||||
EsEnergy valueTypes.UnitValue `json:"es_energy" PointId:"p83120" PointName:"Es Energy"`
|
||||
EsPower valueTypes.UnitValue `json:"es_power" PointId:"p83081" PointName:"Es Power"`
|
||||
EsTotalDischargeEnergy valueTypes.UnitValue `json:"es_total_disenergy" PointId:"p83095" PointAlias:"p83095" PointTimeSpan:"PointTimeSpanTotal"`
|
||||
EsTotalEnergy valueTypes.UnitValue `json:"es_total_energy" PointId:"p83127" PointAlias:"p83127" PointTimeSpan:"PointTimeSpanTotal"`
|
||||
EquivalentHour valueTypes.UnitValue `json:"equivalent_hour" PointId:"equivalent_hour" PointUpdateFreq:"UpdateFreqDaily"`
|
||||
EsDischargeEnergy valueTypes.UnitValue `json:"es_disenergy" PointId:"p83089" PointName:"ES Discharge Energy" PointUpdateFreq:"UpdateFreq5Mins"`
|
||||
EsEnergy valueTypes.UnitValue `json:"es_energy" PointId:"p83120" PointName:"ES Energy" PointUpdateFreq:"UpdateFreq5Mins"`
|
||||
EsPower valueTypes.UnitValue `json:"es_power" PointId:"p83081" PointName:"ES Power" PointUpdateFreq:"UpdateFreq5Mins"`
|
||||
EsTotalDischargeEnergy valueTypes.UnitValue `json:"es_total_disenergy" PointId:"p83095" PointName:"ES Total Discharge Energy" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
EsTotalEnergy valueTypes.UnitValue `json:"es_total_energy" PointId:"p83127" PointName:"ES Total Energy" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
ExpectInstallDate valueTypes.DateTime `json:"expect_install_date" PointId:"expect_install_date"`
|
||||
FaultAlarmOfflineDevCount valueTypes.Integer `json:"fault_alarm_offline_dev_count" PointId:"fault_alarm_offline_dev_count"`
|
||||
FaultCount valueTypes.Integer `json:"fault_count" PointId:"fault_count"`
|
||||
@ -63,8 +63,8 @@ type ResultData struct {
|
||||
PictureName valueTypes.String `json:"picture_name"`
|
||||
PictureURL valueTypes.String `json:"picture_url"`
|
||||
PsID valueTypes.Integer `json:"ps_id"`
|
||||
PsUnitUUID interface{} `json:"ps_unit_uuid"`
|
||||
} `json:"images"`
|
||||
PsUnitUUID interface{} `json:"ps_unit_uuid"`
|
||||
} `json:"images" PointName:"Images"`
|
||||
InstallDate valueTypes.DateTime `json:"install_date" PointId:"install_date"`
|
||||
InstalledPowerMap valueTypes.UnitValue `json:"installed_power_map" PointId:"installed_power_map"`
|
||||
InstalledPowerVirgin valueTypes.Float `json:"installed_power_virgin" PointIgnore:"true"`
|
||||
@ -82,29 +82,29 @@ type ResultData struct {
|
||||
MlpeFlag valueTypes.Integer `json:"mlpe_flag" PointId:"mlpe_flag"`
|
||||
Nmi valueTypes.String `json:"nmi" PointId:"nmi"`
|
||||
OfflineDevCount valueTypes.Integer `json:"offline_dev_count" PointId:"offline_dev_count"`
|
||||
OperateYear interface{} `json:"operate_year" PointId:"operate_year"`
|
||||
OperateYear interface{} `json:"operate_year" PointId:"operate_year"`
|
||||
OperationBusName valueTypes.String `json:"operation_bus_name" PointId:"operation_bus_name"`
|
||||
OwnerAlarmCount valueTypes.Integer `json:"owner_alarm_count" PointId:"owner_alarm_count"`
|
||||
OwnerFaultCount valueTypes.Integer `json:"owner_fault_count" PointId:"owner_fault_count"`
|
||||
OwnerPsFaultStatus valueTypes.Integer `json:"owner_ps_fault_status" PointId:"owner_ps_fault_status"`
|
||||
P83022y valueTypes.String `json:"p83022y" PointId:"p83022"`
|
||||
P83046 valueTypes.Float `json:"p83046" PointId:"p83046"`
|
||||
P83048 valueTypes.Float `json:"p83048" PointId:"p83048"`
|
||||
P83049 valueTypes.Float `json:"p83049" PointId:"p83049"`
|
||||
P83050 valueTypes.Float `json:"p83050" PointId:"p83050"`
|
||||
P83051 valueTypes.Float `json:"p83051" PointId:"p83051"`
|
||||
P83054 valueTypes.Float `json:"p83054" PointId:"p83054"`
|
||||
P83055 valueTypes.Float `json:"p83055" PointId:"p83055"`
|
||||
P83067 valueTypes.Float `json:"p83067" PointId:"p83067"`
|
||||
P83070 valueTypes.Float `json:"p83070" PointId:"p83070"`
|
||||
P83076 valueTypes.Float `json:"p83076" PointId:"p83076" PointIgnore:"true"` // Dupe of PvPower
|
||||
P83077 valueTypes.Float `json:"p83077" PointId:"p83077" PointIgnore:"true"` // Dupe of PvEnergy
|
||||
P83081 valueTypes.Float `json:"p83081" PointId:"p83081" PointIgnore:"true"` // Dupe of EsPower
|
||||
P83089 valueTypes.Float `json:"p83089" PointId:"p83089" PointIgnore:"true"` // Dupe of EsDischargeEnergy
|
||||
P83095 valueTypes.Float `json:"p83095" PointId:"p83095" PointIgnore:"true"` // Dupe of EsTotalDischargeEnergy
|
||||
P83118 valueTypes.Float `json:"p83118" PointId:"p83118" PointIgnore:"true"` // Dupe of UseEnergy
|
||||
P83120 valueTypes.Float `json:"p83120" PointId:"p83120" PointIgnore:"true"` // Dupe of EsEnergy
|
||||
P83127 valueTypes.Float `json:"p83127" PointId:"p83127" PointIgnore:"true"` // Dupe of EsTotalEnergy
|
||||
P83022y valueTypes.String `json:"p83022y" PointId:"p83022" PointUpdateFreq:"UpdateFreq5Mins"`
|
||||
P83046 valueTypes.Float `json:"p83046" PointId:"p83046" PointUpdateFreq:"UpdateFreq5Mins"`
|
||||
P83048 valueTypes.Float `json:"p83048" PointId:"p83048" PointUpdateFreq:"UpdateFreq5Mins"`
|
||||
P83049 valueTypes.Float `json:"p83049" PointId:"p83049" PointUpdateFreq:"UpdateFreq5Mins"`
|
||||
P83050 valueTypes.Float `json:"p83050" PointId:"p83050" PointUpdateFreq:"UpdateFreq5Mins"`
|
||||
P83051 valueTypes.Float `json:"p83051" PointId:"p83051" PointUpdateFreq:"UpdateFreq5Mins"`
|
||||
P83054 valueTypes.Float `json:"p83054" PointId:"p83054" PointUpdateFreq:"UpdateFreq5Mins"`
|
||||
P83055 valueTypes.Float `json:"p83055" PointId:"p83055" PointUpdateFreq:"UpdateFreq5Mins"`
|
||||
P83067 valueTypes.Float `json:"p83067" PointId:"p83067" PointUpdateFreq:"UpdateFreq5Mins"`
|
||||
P83070 valueTypes.Float `json:"p83070" PointId:"p83070" PointUpdateFreq:"UpdateFreq5Mins"`
|
||||
P83076 valueTypes.Float `json:"p83076" PointId:"_p83076" PointName:"Pv Power" PointIgnore:"true"` // Dupe of PvPower
|
||||
P83077 valueTypes.Float `json:"p83077" PointId:"_p83077" PointName:"Pv Energy" PointIgnore:"true"` // Dupe of PvEnergy
|
||||
P83081 valueTypes.Float `json:"p83081" PointId:"_p83081" PointName:"Es Power" PointIgnore:"true"` // Dupe of EsPower
|
||||
P83089 valueTypes.Float `json:"p83089" PointId:"_p83089" PointName:"Es Discharge Energy" PointIgnore:"true"` // Dupe of EsDischargeEnergy
|
||||
P83095 valueTypes.Float `json:"p83095" PointId:"_p83095" PointName:"Es Total Discharge Energy" PointIgnore:"true"` // Dupe of EsTotalDischargeEnergy
|
||||
P83118 valueTypes.Float `json:"p83118" PointId:"_p83118" PointName:"Use Energy" PointIgnore:"true"` // Dupe of UseEnergy
|
||||
P83120 valueTypes.Float `json:"p83120" PointId:"_p83120" PointName:"Es Energy" PointIgnore:"true"` // Dupe of EsEnergy
|
||||
P83127 valueTypes.Float `json:"p83127" PointId:"_p83127" PointName:"Es Total Energy" PointIgnore:"true"` // Dupe of EsTotalEnergy
|
||||
ParamCo2 valueTypes.Float `json:"param_co2" PointId:"param_co2"`
|
||||
ParamCoal valueTypes.Float `json:"param_coal" PointId:"param_coal"`
|
||||
ParamIncome valueTypes.Float `json:"param_income" PointId:"param_income"`
|
||||
@ -114,43 +114,43 @@ type ResultData struct {
|
||||
ParamSo2 valueTypes.Float `json:"param_so2" PointId:"param_so2"`
|
||||
ParamTree valueTypes.Float `json:"param_tree" PointId:"param_tree"`
|
||||
ParamWater valueTypes.Float `json:"param_water" PointId:"param_water"`
|
||||
PrScale string `json:"pr_scale" PointId:"pr_scale"`
|
||||
Producer interface{} `json:"producer" PointId:"producer"`
|
||||
PrScale string `json:"pr_scale" PointId:"pr_scale"`
|
||||
Producer interface{} `json:"producer" PointId:"producer"`
|
||||
PsCountryID valueTypes.Integer `json:"ps_country_id" PointId:"ps_country_id"`
|
||||
PsFaultStatus valueTypes.Integer `json:"ps_fault_status" PointId:"ps_fault_status"`
|
||||
PsHealthStatus string `json:"ps_health_status" PointId:"ps_health_status"`
|
||||
PsHealthStatus valueTypes.Integer `json:"ps_health_status" PointId:"ps_health_status"`
|
||||
PsHolder valueTypes.String `json:"ps_holder" PointId:"ps_holder"`
|
||||
PsID valueTypes.Integer `json:"ps_id" PointId:"ps_id"`
|
||||
PsId valueTypes.Integer `json:"ps_id" PointId:"ps_id"`
|
||||
PsIsNotInit valueTypes.Bool `json:"ps_is_not_init" PointId:"ps_is_not_init"`
|
||||
PsName valueTypes.String `json:"ps_name" PointId:"ps_name"`
|
||||
PsShortName valueTypes.String `json:"ps_short_name" PointId:"ps_short_name"`
|
||||
PsStatus valueTypes.Bool `json:"ps_status" PointId:"ps_status"`
|
||||
PsStatus valueTypes.Integer `json:"ps_status" PointId:"ps_status"`
|
||||
PsTimezone valueTypes.String `json:"ps_timezone" PointId:"ps_timezone"`
|
||||
PsType valueTypes.Integer `json:"ps_type" PointId:"ps_type"`
|
||||
PvEnergy valueTypes.UnitValue `json:"pv_energy" PointId:"p83077" PointName:"Pv Energy"`
|
||||
PvPower valueTypes.UnitValue `json:"pv_power" PointId:"p83076" PointName:"Pv Power"`
|
||||
PvEnergy valueTypes.UnitValue `json:"pv_energy" PointId:"p83077" PointName:"Pv Energy" PointUpdateFreq:"UpdateFreq5Mins"`
|
||||
PvPower valueTypes.UnitValue `json:"pv_power" PointId:"p83076" PointName:"Pv Power" PointUpdateFreq:"UpdateFreq5Mins"`
|
||||
Radiation valueTypes.UnitValue `json:"radiation" PointId:"radiation"`
|
||||
RadiationVirgin valueTypes.Float `json:"radiation_virgin" PointIgnore:"true"`
|
||||
RecordCreateTime valueTypes.DateTime `json:"recore_create_time" PointId:"record_create_time"`
|
||||
SafeStartDate valueTypes.DateTime `json:"safe_start_date" PointId:"safe_start_date"`
|
||||
ShareType string `json:"share_type" PointId:"share_type"`
|
||||
ShareType valueTypes.Integer `json:"share_type" PointId:"share_type"`
|
||||
ShippingAddress valueTypes.String `json:"shipping_address" PointId:"shipping_address"`
|
||||
ShippingZipCode valueTypes.String `json:"shipping_zip_code" PointId:"shipping_zip_code"`
|
||||
TodayEnergy valueTypes.UnitValue `json:"today_energy" PointId:"today_energy" PointTimeSpan:"PointTimeSpanDaily"`
|
||||
TodayIncome valueTypes.UnitValue `json:"today_income" PointId:"today_income" PointTimeSpan:"PointTimeSpanDaily"`
|
||||
TotalCapacity valueTypes.UnitValue `json:"total_capcity" PointId:"total_capacity" PointTimeSpan:"PointTimeSpanTotal"`
|
||||
TotalEnergy valueTypes.UnitValue `json:"total_energy" PointId:"total_energy" PointTimeSpan:"PointTimeSpanTotal"`
|
||||
TotalIncome valueTypes.UnitValue `json:"total_income" PointId:"total_income" PointTimeSpan:"PointTimeSpanTotal"`
|
||||
TotalInitCo2Accelerate valueTypes.Float `json:"total_init_co2_accelerate" PointId:"total_init_co2_accelerate" PointTimeSpan:"PointTimeSpanTotal"`
|
||||
TotalInitElec valueTypes.Float `json:"total_init_elec" PointId:"total_init_elec" PointTimeSpan:"PointTimeSpanTotal"`
|
||||
TotalInitProfit valueTypes.Float `json:"total_init_profit" PointId:"total_init_profit" PointTimeSpan:"PointTimeSpanTotal"`
|
||||
UseEnergy valueTypes.UnitValue `json:"use_energy" PointId:"p83118" PointName:"Use Energy"`
|
||||
TodayEnergy valueTypes.UnitValue `json:"today_energy" PointId:"today_energy" PointUpdateFreq:"UpdateFreqDaily"`
|
||||
TodayIncome valueTypes.UnitValue `json:"today_income" PointId:"today_income" PointUpdateFreq:"UpdateFreqDaily"`
|
||||
TotalCapacity valueTypes.UnitValue `json:"total_capcity" PointId:"total_capacity" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
TotalEnergy valueTypes.UnitValue `json:"total_energy" PointId:"total_energy" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
TotalIncome valueTypes.UnitValue `json:"total_income" PointId:"total_income" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
TotalInitCo2Accelerate valueTypes.Float `json:"total_init_co2_accelerate" PointId:"total_init_co2_accelerate" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
TotalInitElec valueTypes.Float `json:"total_init_elec" PointId:"total_init_elec" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
TotalInitProfit valueTypes.Float `json:"total_init_profit" PointId:"total_init_profit" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
UseEnergy valueTypes.UnitValue `json:"use_energy" PointId:"p83118" PointName:"Use Energy" PointUpdateFreq:"UpdateFreq5Mins"`
|
||||
ValidFlag valueTypes.Bool `json:"valid_flag" PointId:"valid_flag"`
|
||||
WgsLatitude valueTypes.Float `json:"wgs_latitude" PointId:"wgs_latitude"`
|
||||
WgsLongitude valueTypes.Float `json:"wgs_longitude" PointId:"wgs_longitude"`
|
||||
ZipCode valueTypes.String `json:"zip_code" PointId:"zip_code"`
|
||||
} `json:"pageList"`
|
||||
RowCount valueTypes.Integer `json:"rowCount"`
|
||||
} `json:"pageList" PointNameFromChild:"PsId"`
|
||||
RowCount valueTypes.Integer `json:"rowCount" PointIgnore:"true"`
|
||||
}
|
||||
|
||||
func (e *ResultData) IsValid() error {
|
||||
@ -164,14 +164,26 @@ func (e *ResultData) IsValid() error {
|
||||
return err
|
||||
}
|
||||
|
||||
func (e *EndPoint) GetData() api.DataMap {
|
||||
entries := api.NewDataMap()
|
||||
|
||||
for range Only.Once {
|
||||
pkg := apiReflect.GetName("", *e)
|
||||
dt := valueTypes.NewDateTime(valueTypes.Now)
|
||||
entries.StructToPoints(e.Response.ResultData, pkg, "", dt)
|
||||
}
|
||||
return entries
|
||||
}
|
||||
|
||||
|
||||
type Device struct {
|
||||
PsFaultStatus valueTypes.Integer
|
||||
PsHealthStatus string
|
||||
PsHealthStatus valueTypes.Integer
|
||||
PsHolder valueTypes.String
|
||||
PsID valueTypes.Integer
|
||||
PsName valueTypes.String
|
||||
PsShortName valueTypes.String
|
||||
PsStatus valueTypes.Bool
|
||||
PsStatus valueTypes.Integer
|
||||
PsType valueTypes.Integer
|
||||
}
|
||||
type Devices []Device
|
||||
@ -183,7 +195,7 @@ func (e *ResultData) GetPsDevices() Devices {
|
||||
PsFaultStatus: d.PsFaultStatus,
|
||||
PsHealthStatus: d.PsHealthStatus,
|
||||
PsHolder: d.PsHolder,
|
||||
PsID: d.PsID,
|
||||
PsID: d.PsId,
|
||||
PsName: d.PsName,
|
||||
PsShortName: d.PsShortName,
|
||||
PsStatus: d.PsStatus,
|
||||
@ -201,8 +213,8 @@ func (e *ResultData) GetPsIds() []valueTypes.Integer {
|
||||
break
|
||||
}
|
||||
for _, p := range e.PageList {
|
||||
if p.PsID.Value() != 0 {
|
||||
ret = append(ret, p.PsID)
|
||||
if p.PsId.Value() != 0 {
|
||||
ret = append(ret, p.PsId)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -217,7 +229,7 @@ func (e *ResultData) GetPsName() []string {
|
||||
break
|
||||
}
|
||||
for _, p := range e.PageList {
|
||||
if p.PsID.Value() != 0 {
|
||||
if p.PsId.Value() != 0 {
|
||||
ret = append(ret, p.PsName.Value())
|
||||
}
|
||||
}
|
||||
@ -233,7 +245,7 @@ func (e *ResultData) GetPsSerial() []string {
|
||||
break
|
||||
}
|
||||
for _, p := range e.PageList {
|
||||
if p.PsID.Value() != 0 {
|
||||
if p.PsId.Value() != 0 {
|
||||
ret = append(ret, p.PsShortName.Value())
|
||||
}
|
||||
}
|
||||
@ -244,28 +256,3 @@ func (e *ResultData) GetPsSerial() []string {
|
||||
func (e *EndPoint) GetPsIds() []valueTypes.Integer {
|
||||
return e.Response.ResultData.GetPsIds()
|
||||
}
|
||||
|
||||
func (e *EndPoint) GetData() api.DataMap {
|
||||
entries := api.NewDataMap()
|
||||
|
||||
for range Only.Once {
|
||||
if len(e.Response.ResultData.PageList) == 0 {
|
||||
break
|
||||
}
|
||||
|
||||
// now := valueTypes.NewDateTime(time.Now().Round(5 * time.Minute).Format(api.DtLayoutZeroSeconds))
|
||||
pkg := apiReflect.GetName("", *e)
|
||||
|
||||
for _, p := range e.Response.ResultData.PageList {
|
||||
// psId := p.PsID.String() // psId := strconv.FormatInt(p.PsID.Value(), 10)
|
||||
name := api.JoinWithDots(0, "", pkg, p.PsID)
|
||||
entries.StructToPoints(p, name, p.PsID.String(), valueTypes.NewDateTime(""))
|
||||
|
||||
for i, v := range p.Images {
|
||||
name2 := api.JoinWithDots(0, "", pkg, p.PsID, "images", i)
|
||||
entries.StructToPoints(v, name2, p.PsID.String(), valueTypes.NewDateTime(""))
|
||||
}
|
||||
}
|
||||
}
|
||||
return entries
|
||||
}
|
||||
|
@ -27,17 +27,17 @@ func (rd RequestData) Help() string {
|
||||
|
||||
type ResultData struct {
|
||||
DevCountByStatusMap struct {
|
||||
FaultCount valueTypes.Count `json:"fault_count" PointId:"fault_count"`
|
||||
OfflineCount valueTypes.Count `json:"offline_count" PointId:"offline_count"`
|
||||
RunCount valueTypes.Count `json:"run_count" PointId:"run_count"`
|
||||
WarningCount valueTypes.Count `json:"warning_count" PointId:"warning_count"`
|
||||
} `json:"dev_count_by_status_map"`
|
||||
DevCountByTypeMap map[string]valueTypes.Integer `json:"dev_count_by_type_map"`
|
||||
FaultCount valueTypes.Count `json:"fault_count" PointId:"fault_count" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
OfflineCount valueTypes.Count `json:"offline_count" PointId:"offline_count" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
RunCount valueTypes.Count `json:"run_count" PointId:"run_count" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
WarningCount valueTypes.Count `json:"warning_count" PointId:"warning_count" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
} `json:"dev_count_by_status_map" PointId:"device_status_count"`
|
||||
DevCountByTypeMap map[string]valueTypes.Integer `json:"dev_count_by_type_map" PointId:"device_type_count" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
// DevCountByTypeMap struct {
|
||||
// One4 valueTypes.Integer `json:"14"`
|
||||
// Two2 valueTypes.Integer `json:"22"`
|
||||
// } `json:"dev_count_by_type_map"`
|
||||
DevTypeDefinition map[string]valueTypes.String `json:"dev_type_definition"`
|
||||
DevTypeDefinition map[string]valueTypes.String `json:"dev_type_definition" PointId:"device_types" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
// DevTypeDefinition struct {
|
||||
// One string `json:"1"`
|
||||
// One0 string `json:"10"`
|
||||
@ -89,79 +89,79 @@ type ResultData struct {
|
||||
// Nine9 string `json:"99"`
|
||||
// } `json:"dev_type_definition"`
|
||||
PageList []struct {
|
||||
AlarmCount valueTypes.Count `json:"alarm_count" PointId:"alarm_count"`
|
||||
ChannelId valueTypes.Integer `json:"chnnl_id" PointId:"channel_id"`
|
||||
CommandStatus valueTypes.Integer `json:"command_status" PointId:"command_status"`
|
||||
AlarmCount valueTypes.Count `json:"alarm_count" PointId:"alarm_count" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
ChannelId valueTypes.Integer `json:"chnnl_id" PointId:"channel_id" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
CommandStatus valueTypes.Integer `json:"command_status" PointId:"command_status" PointUpdateFreq:"UpdateFreqInstant"`
|
||||
ComponentAmount valueTypes.Integer `json:"component_amount" PointId:"component_amount"`
|
||||
DataFlag valueTypes.Integer `json:"data_flag" PointId:"data_flag"`
|
||||
DataFlag valueTypes.Integer `json:"data_flag" PointId:"data_flag" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
DataFlagDetail valueTypes.Integer `json:"data_flag_detail" PointId:"data_flag_detail"`
|
||||
DeviceArea valueTypes.Integer `json:"device_area" PointId:"device_area"`
|
||||
DeviceAreaName valueTypes.String `json:"device_area_name" PointId:"device_area_name"`
|
||||
DeviceCode valueTypes.Integer `json:"device_code" PointId:"device_code"`
|
||||
DeviceID valueTypes.Integer `json:"device_id" PointId:"device_id"`
|
||||
DeviceModelCode valueTypes.String `json:"device_model_code" PointId:"device_model_code"`
|
||||
DeviceModelID valueTypes.Integer `json:"device_model_id" PointId:"device_model_id"`
|
||||
DeviceName valueTypes.String `json:"device_name" PointId:"device_name"`
|
||||
DeviceStatus valueTypes.Bool `json:"device_status" PointId:"device_status"`
|
||||
DeviceType valueTypes.Integer `json:"device_type" PointId:"device_type"`
|
||||
FaultCount valueTypes.Count `json:"fault_count" PointId:"fault_count"`
|
||||
FaultStatus string `json:"fault_status" PointId:"fault_status"`
|
||||
FunctionEnum valueTypes.String `json:"function_enum" PointId:"function_enum"`
|
||||
InstallerAlarmCount valueTypes.Count `json:"installer_alarm_count" PointId:"installer_alarm_count"`
|
||||
InstallerDevFaultStatus valueTypes.Integer `json:"installer_dev_fault_status" PointId:"installer_dev_fault_status"`
|
||||
InstallerFaultCount valueTypes.Count `json:"installer_fault_count" PointId:"installer_fault_count"`
|
||||
InverterModelType valueTypes.Integer `json:"inverter_model_type" PointId:"inverter_model_type"`
|
||||
IsDeveloper valueTypes.Bool `json:"is_developer" PointId:"is_developer"`
|
||||
IsG2point5Module valueTypes.Bool `json:"is_g2point5_module" PointId:"is_g2point5_module"`
|
||||
IsInit valueTypes.Bool `json:"is_init" PointId:"is_init"`
|
||||
IsSecond valueTypes.Bool `json:"is_second" PointId:"is_second"`
|
||||
IsSupportParamset valueTypes.Bool `json:"is_support_paramset" PointId:"is_support_paramset"`
|
||||
NodeTimestamps interface{} `json:"node_timestamps" PointId:"node_timestamps"`
|
||||
OwnerAlarmCount valueTypes.Count `json:"owner_alarm_count" PointId:"owner_alarm_count"`
|
||||
OwnerDevFaultStatus valueTypes.Integer `json:"owner_dev_fault_status" PointId:"owner_dev_fault_status"`
|
||||
OwnerFaultCount valueTypes.Count `json:"owner_fault_count" PointId:"owner_fault_count"`
|
||||
PointData PointData `json:"point_data"`
|
||||
Points interface{} `json:"points" PointId:"points"`
|
||||
DeviceArea valueTypes.Integer `json:"device_area" PointId:"device_area" PointUpdateFreq:"UpdateFreqBoot"` // References UUID and referenced by UUIDIndexCode
|
||||
DeviceAreaName valueTypes.String `json:"device_area_name" PointId:"device_area_name" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
DeviceCode valueTypes.Integer `json:"device_code" PointId:"device_code" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
DeviceID valueTypes.Integer `json:"device_id" PointId:"device_id" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
DeviceModelCode valueTypes.String `json:"device_model_code" PointId:"device_model_code" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
DeviceModelID valueTypes.Integer `json:"device_model_id" PointId:"device_model_id" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
DeviceName valueTypes.String `json:"device_name" PointId:"device_name" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
DeviceStatus valueTypes.Bool `json:"device_status" PointId:"device_status" PointUpdateFreq:"UpdateFreqInstant"`
|
||||
DeviceType valueTypes.Integer `json:"device_type" PointId:"device_type" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
FaultCount valueTypes.Count `json:"fault_count" PointId:"fault_count" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
FaultStatus string `json:"fault_status" PointId:"fault_status" PointUpdateFreq:"UpdateFreqInstant"`
|
||||
FunctionEnum valueTypes.String `json:"function_enum" PointId:"function_enum" PointUpdateFreq:"UpdateFreqInstant"`
|
||||
InstallerAlarmCount valueTypes.Count `json:"installer_alarm_count" PointId:"installer_alarm_count" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
InstallerDevFaultStatus valueTypes.Integer `json:"installer_dev_fault_status" PointId:"installer_dev_fault_status" PointUpdateFreq:"UpdateFreqInstant"`
|
||||
InstallerFaultCount valueTypes.Count `json:"installer_fault_count" PointId:"installer_fault_count" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
InverterModelType valueTypes.Integer `json:"inverter_model_type" PointId:"inverter_model_type" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
IsDeveloper valueTypes.Bool `json:"is_developer" PointId:"is_developer" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
IsG2point5Module valueTypes.Bool `json:"is_g2point5_module" PointId:"is_g2point5_module" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
IsInit valueTypes.Bool `json:"is_init" PointId:"is_init" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
IsSecond valueTypes.Bool `json:"is_second" PointId:"is_second" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
IsSupportParamset valueTypes.Bool `json:"is_support_paramset" PointId:"is_support_paramset" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
NodeTimestamps interface{} `json:"node_timestamps" PointId:"node_timestamps"`
|
||||
OwnerAlarmCount valueTypes.Count `json:"owner_alarm_count" PointId:"owner_alarm_count" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
OwnerDevFaultStatus valueTypes.Integer `json:"owner_dev_fault_status" PointId:"owner_dev_fault_status" PointUpdateFreq:"UpdateFreqInstant"`
|
||||
OwnerFaultCount valueTypes.Count `json:"owner_fault_count" PointId:"owner_fault_count" PointUpdateFreq:"UpdateFreqTotal"`
|
||||
PointData []PointStruct `json:"point_data" PointNameFromChild:"PointID"`
|
||||
Points interface{} `json:"points" PointId:"points"`
|
||||
PsTimezoneInfo struct {
|
||||
IsDst valueTypes.Bool `json:"is_dst"`
|
||||
TimeZone valueTypes.String `json:"time_zone"`
|
||||
IsDst valueTypes.Bool `json:"is_dst" PointUpdateFreq:"UpdateFreqInstant"`
|
||||
TimeZone valueTypes.String `json:"time_zone" PointUpdateFreq:"UpdateFreqInstant"`
|
||||
} `json:"psTimezoneInfo"`
|
||||
PsID valueTypes.Integer `json:"ps_id" PointId:"ps_id"`
|
||||
PsKey valueTypes.PsKey `json:"ps_key" PointId:"ps_key"`
|
||||
RelState valueTypes.Integer `json:"rel_state" PointId:"rel_state"`
|
||||
Sn valueTypes.String `json:"sn" PointId:"sn"`
|
||||
PsID valueTypes.Integer `json:"ps_id" PointId:"ps_id" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
PsKey valueTypes.PsKey `json:"ps_key" PointId:"ps_key" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
RelState valueTypes.Integer `json:"rel_state" PointId:"rel_state" PointUpdateFreq:"UpdateFreqInstant"`
|
||||
Sn valueTypes.String `json:"sn" PointId:"sn" PointName:"Serial Number" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
StringAmount valueTypes.Integer `json:"string_amount" PointId:"string_amount"`
|
||||
TypeName valueTypes.String `json:"type_name" PointId:"type_name"`
|
||||
UnitName valueTypes.String `json:"unit_name" PointId:"unit_name"`
|
||||
UUID valueTypes.Integer `json:"uuid" PointId:"uuid"`
|
||||
UUIDIndexCode valueTypes.String `json:"uuid_index_code" PointId:"uuid_index_code"`
|
||||
} `json:"pageList"`
|
||||
TypeName valueTypes.String `json:"type_name" PointId:"type_name" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
UnitName valueTypes.String `json:"unit_name" PointId:"unit_name" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
UUID valueTypes.Integer `json:"uuid" PointId:"uuid" PointUpdateFreq:"UpdateFreqBoot"` // Referenced by DeviceArea
|
||||
UUIDIndexCode valueTypes.String `json:"uuid_index_code" PointId:"uuid_index_code" PointUpdateFreq:"UpdateFreqBoot"` // Referenced by DeviceArea
|
||||
} `json:"pageList" PointNameFromChild:"PsKey" PointSliceDateFormat:""`
|
||||
RowCount valueTypes.Integer `json:"rowCount" PointIgnore:"true"`
|
||||
}
|
||||
|
||||
type PointData []PointStruct
|
||||
type PointStruct struct {
|
||||
CodeID valueTypes.Integer `json:"code_id"`
|
||||
CodeIDOrderID valueTypes.String `json:"code_id_order_id"`
|
||||
CodeName valueTypes.String `json:"code_name"`
|
||||
DevPointLastUpdateTime valueTypes.DateTime `json:"dev_point_last_update_time"`
|
||||
IsPlatformDefaultUnit valueTypes.Bool `json:"is_platform_default_unit"`
|
||||
IsShow valueTypes.Bool `json:"is_show"`
|
||||
OrderID valueTypes.Integer `json:"order_id"`
|
||||
OrderNum valueTypes.Integer `json:"order_num"`
|
||||
PointGroupID valueTypes.Integer `json:"point_group_id"`
|
||||
PointGroupIDOrderID valueTypes.Integer `json:"point_group_id_order_id"`
|
||||
PointGroupName valueTypes.String `json:"point_group_name"`
|
||||
PointID valueTypes.Integer `json:"point_id"`
|
||||
PointName valueTypes.String `json:"point_name"`
|
||||
PointSign valueTypes.String `json:"point_sign"`
|
||||
Relate valueTypes.Integer `json:"relate"`
|
||||
TimeStamp valueTypes.DateTime `json:"time_stamp"`
|
||||
Unit valueTypes.String `json:"unit"`
|
||||
ValIsFixd valueTypes.Bool `json:"val_is_fixd"`
|
||||
ValidSize valueTypes.Integer `json:"valid_size"`
|
||||
Value valueTypes.Float `json:"value"`
|
||||
ValueDescription valueTypes.String `json:"value_description"`
|
||||
CodeID valueTypes.Integer `json:"code_id" PointGroupNameFrom:"PointGroupName" PointTimestampFrom:"TimeStamp" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
CodeIDOrderID valueTypes.String `json:"code_id_order_id" PointGroupNameFrom:"PointGroupName" PointTimestampFrom:"TimeStamp" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
CodeName valueTypes.String `json:"code_name" PointGroupNameFrom:"PointGroupName" PointTimestampFrom:"TimeStamp" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
DevPointLastUpdateTime valueTypes.DateTime `json:"dev_point_last_update_time" PointGroupNameFrom:"PointGroupName" PointTimestampFrom:"TimeStamp" PointUpdateFreq:"UpdateFreq5Mins"`
|
||||
IsPlatformDefaultUnit valueTypes.Bool `json:"is_platform_default_unit" PointGroupNameFrom:"PointGroupName" PointTimestampFrom:"TimeStamp" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
IsShow valueTypes.Bool `json:"is_show" PointGroupNameFrom:"PointGroupName" PointTimestampFrom:"TimeStamp" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
OrderID valueTypes.Integer `json:"order_id" PointGroupNameFrom:"PointGroupName" PointTimestampFrom:"TimeStamp" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
OrderNum valueTypes.Integer `json:"order_num" PointGroupNameFrom:"PointGroupName" PointTimestampFrom:"TimeStamp" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
PointGroupID valueTypes.Integer `json:"point_group_id" PointGroupNameFrom:"PointGroupName" PointTimestampFrom:"TimeStamp" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
PointGroupIDOrderID valueTypes.Integer `json:"point_group_id_order_id" PointGroupNameFrom:"PointGroupName" PointTimestampFrom:"TimeStamp" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
PointName valueTypes.String `json:"point_name" PointGroupNameFrom:"PointGroupName" PointTimestampFrom:"TimeStamp" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
PointSign valueTypes.String `json:"point_sign" PointGroupNameFrom:"PointGroupName" PointTimestampFrom:"TimeStamp" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
Relate valueTypes.Integer `json:"relate" PointGroupNameFrom:"PointGroupName" PointTimestampFrom:"TimeStamp" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
ValIsFixd valueTypes.Bool `json:"val_is_fixd" PointGroupNameFrom:"PointGroupName" PointTimestampFrom:"TimeStamp" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
ValidSize valueTypes.Integer `json:"valid_size" PointGroupNameFrom:"PointGroupName" PointTimestampFrom:"TimeStamp" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
Value valueTypes.Float `json:"value" PointGroupNameFrom:"PointGroupName" PointTimestampFrom:"TimeStamp" PointUnitFrom:"Unit" PointUpdateFreq:"UpdateFreq5Mins"`
|
||||
ValueDescription valueTypes.String `json:"value_description" PointGroupNameFrom:"PointGroupName" PointTimestampFrom:"TimeStamp" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
|
||||
PointID valueTypes.PointId `json:"point_id" PointIgnore:"true" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
PointGroupName valueTypes.String `json:"point_group_name" PointIgnore:"true" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
TimeStamp valueTypes.DateTime `json:"time_stamp" PointIgnore:"true" PointUpdateFreq:"UpdateFreq5Mins"`
|
||||
Unit valueTypes.String `json:"unit" PointIgnore:"true" PointUpdateFreq:"UpdateFreqBoot"`
|
||||
}
|
||||
|
||||
func (e *ResultData) IsValid() error {
|
||||
@ -175,8 +175,8 @@ func (e *ResultData) IsValid() error {
|
||||
return err
|
||||
}
|
||||
|
||||
func (e *ResultData) GetDataByName(name string) PointData {
|
||||
var ret PointData
|
||||
func (e *ResultData) GetDataByName(name string) []PointStruct {
|
||||
var ret []PointStruct
|
||||
for range Only.Once {
|
||||
i := len(e.PageList)
|
||||
if i == 0 {
|
||||
@ -236,128 +236,66 @@ func (e *EndPoint) GetData() api.DataMap {
|
||||
// var TotalEnergyConsumption VirtualPointStruct
|
||||
|
||||
pkg := apiReflect.GetName("", *e)
|
||||
name := api.JoinWithDots(0, "", pkg, e.Request.PsId)
|
||||
// name := api.JoinWithDots(0, "", pkg) // , e.Request.PsId)
|
||||
dt := valueTypes.NewDateTime(valueTypes.Now)
|
||||
entries.StructToPoints(e.Response.ResultData, pkg, e.Request.PsId.String(), dt)
|
||||
|
||||
entries.StructToPoints(e.Response.ResultData, name, e.Request.PsId.String(), valueTypes.NewDateTime(""))
|
||||
|
||||
for _, d := range e.Response.ResultData.PageList {
|
||||
name2 := api.JoinWithDots(0, "", pkg, d.PsKey)
|
||||
entries.StructToPoints(d, name2, d.PsKey.Value(), valueTypes.NewDateTime(""))
|
||||
|
||||
for _, p := range d.PointData {
|
||||
pid := valueTypes.SetPointIdValue(p.PointID.Value())
|
||||
uv := valueTypes.SetUnitValueFloat(p.Value.Value(), p.Unit.Value(), "")
|
||||
// name2 := fmt.Sprintf("%s.PointData.%s", name, pid)
|
||||
// name3 := fmt.Sprintf("%s.PointData", name2)
|
||||
entries.AddUnitValue(name2, d.PsKey.Value(), pid, p.PointName.Value(), p.PointGroupName.Value(), p.TimeStamp, uv)
|
||||
|
||||
// Handle virtual results.
|
||||
// switch pid {
|
||||
// case "13126":
|
||||
// // BatteryChargingPower
|
||||
// entries["PVPowerToBattery"] = entries[pid]
|
||||
// case "13150":
|
||||
// // BatteryDischargingPower
|
||||
// entries["BatteryPowerToLoad"] = entries[pid]
|
||||
// case "13121":
|
||||
// // TotalExportActivePower
|
||||
// entries["PVPowerToGrid"] = entries[pid]
|
||||
// case "13149":
|
||||
// // PurchasedPower
|
||||
// entries["GridPowerToLoad"] = entries[pid]
|
||||
// case "13003":
|
||||
// // TotalDcPower
|
||||
// entries["PVPower"] = addVirtualAlias(entries[pid], "pv_power", "PV Power")
|
||||
// case "13119":
|
||||
// // TotalLoadActivePower
|
||||
// entries["LoadPower"] = addVirtualAlias(entries[pid], "load_power", "Load Power")
|
||||
//
|
||||
// // addVirtualAlias(entries[pid], "FOO", "FOO")
|
||||
//
|
||||
// case "13112":
|
||||
// // Daily PV Yield
|
||||
// entries["DailyPvEnergy"] = addVirtualAlias(entries["DailyPvEnergy"], "daily_pv_energy", "Daily PV Energy")
|
||||
// case "13174":
|
||||
// // DailyBatteryChargingEnergyFromPv
|
||||
// entries["YieldBatteryCharge"] = addVirtualAlias(entries[pid], "pv_battery_charge", "PV Battery Charge")
|
||||
// case "13029":
|
||||
// // DailyBatteryDischargingEnergy
|
||||
// entries["DailyBatteryDischargingEnergy"] = entries[pid]
|
||||
// case "13122":
|
||||
// // entries["DailyFeedInEnergy"] = addVirtualAlias(entries[pid], "pv_feed_in", "PV Feed In")
|
||||
// // @TODO - This may differ from DailyFeedInEnergyPv
|
||||
// case "13173":
|
||||
// // DailyFeedInEnergyPv
|
||||
// entries["YieldFeedIn"] = addVirtualAlias(entries[pid], "pv_feed_in", "PV Feed In")
|
||||
// case "13147":
|
||||
// // DailyPurchasedEnergy
|
||||
// entries["DailyPurchasedEnergy"] = addVirtualAlias(entries[pid], "daily_purchased_energy", "Daily Purchased Energy")
|
||||
//
|
||||
// case "13116":
|
||||
// // DailyLoadEnergyConsumptionFromPv
|
||||
// entries["YieldSelfConsumption"] = addVirtualAlias(entries[pid], "pv_self_consumption", "PV Self Consumption")
|
||||
// case "13134":
|
||||
// // TotalPvYield
|
||||
// entries["TotalPvYield"] = addVirtualAlias(entries[pid], "pv_total_yield", "PV Total Yield")
|
||||
//
|
||||
// case "13199":
|
||||
// // Daily Load Energy Consumption
|
||||
// entries["DailyTotalLoad"] = addVirtualAlias(entries[pid], "daily_total_energy", "Daily Total Energy")
|
||||
//
|
||||
// case "13130":
|
||||
// // Total Load Energy Consumption
|
||||
// entries["TotalEnergyConsumption"] = addVirtualAlias(entries[pid], "total_energy_consumption", "Total Energy Consumption"
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
if len(entries.DataPoints) == 0 {
|
||||
if len(entries.Map) == 0 {
|
||||
break
|
||||
}
|
||||
|
||||
// TotalDcPower
|
||||
entries.FromRefAddAlias("p13003", api.VirtualPsId, "power_pv", "")
|
||||
// BatteryChargingPower
|
||||
entries.FromRefAddAlias("p13126", api.VirtualPsId, "battery_charge_power", "")
|
||||
// BatteryDischargingPower
|
||||
entries.FromRefAddAlias("p13150", api.VirtualPsId, "battery_discharge_power", "")
|
||||
// TotalExportActivePower
|
||||
entries.FromRefAddAlias("p13121", api.VirtualPsId, "power_pv_to_grid", "")
|
||||
e.GetEnergyStorageSystem(entries)
|
||||
e.GetCommunicationModule(entries)
|
||||
e.GetBattery(entries)
|
||||
}
|
||||
|
||||
// TotalLoadActivePower
|
||||
entries.FromRefAddAlias("p13119", api.VirtualPsId, "power_load", "")
|
||||
return entries
|
||||
}
|
||||
|
||||
// PurchasedPower
|
||||
entries.FromRefAddAlias("p13149", api.VirtualPsId, "power_grid_to_load", "")
|
||||
func (e *EndPoint) GetEnergyStorageSystem(entries api.DataMap) {
|
||||
|
||||
// Daily PV Yield
|
||||
entries.FromRefAddAlias("p13112", api.VirtualPsId, "daily_pv_energy", "")
|
||||
// DailyPvEnergy := entries.getFloatValue("DailyTotalLoad") - entries.getFloatValue("DailyPurchasedEnergy")
|
||||
// DailyBatteryChargingEnergyFromPv
|
||||
entries.FromRefAddAlias("p13174", api.VirtualPsId, "pv_battery_charge_energy", "")
|
||||
// DailyBatteryDischargingEnergy
|
||||
entries.FromRefAddAlias("p13029", api.VirtualPsId, "battery_discharge", "")
|
||||
for range Only.Once {
|
||||
// // Used for virtual entries.
|
||||
// // 0 - sungrow_battery_charging_power
|
||||
// var PVPowerToBattery VirtualPointStruct
|
||||
//
|
||||
// // sensor.sungrow_battery_discharging_power
|
||||
// var BatteryPowerToLoad VirtualPointStruct
|
||||
//
|
||||
// // 0 - sensor.sungrow_total_export_active_power
|
||||
// var PVPowerToGrid VirtualPointStruct
|
||||
//
|
||||
// // sensor.sungrow_purchased_power
|
||||
// var GridPowerToLoad VirtualPointStruct
|
||||
//
|
||||
// // 0 - sensor.sungrow_daily_battery_charging_energy_from_pv
|
||||
// var YieldBatteryCharge VirtualPointStruct
|
||||
// // var DailyBatteryChargingEnergy VirtualPointStruct
|
||||
//
|
||||
// // sensor.sungrow_daily_battery_discharging_energy
|
||||
// var DailyBatteryDischargingEnergy VirtualPointStruct
|
||||
//
|
||||
// // 0 - sensor.sungrow_daily_feed_in_energy_pv
|
||||
// var YieldFeedIn VirtualPointStruct
|
||||
//
|
||||
// // sensor.sungrow_daily_purchased_energy
|
||||
// var DailyPurchasedEnergy VirtualPointStruct
|
||||
//
|
||||
// var PVPower VirtualPointStruct
|
||||
//
|
||||
// var LoadPower VirtualPointStruct
|
||||
//
|
||||
// var YieldSelfConsumption VirtualPointStruct
|
||||
// // var DailyFeedInEnergy VirtualPointStruct
|
||||
// var TotalPvYield VirtualPointStruct
|
||||
//
|
||||
// var DailyTotalLoad VirtualPointStruct
|
||||
//
|
||||
// var TotalEnergyConsumption VirtualPointStruct
|
||||
|
||||
// @TODO - This may differ from DailyFeedInEnergyPv
|
||||
// entries["DailyFeedInEnergy"] = entries.AddVirtualAliasFromRef("13122", "pv_feed_in", "PV Feed In")
|
||||
|
||||
// DailyFeedInEnergyPv
|
||||
entries.FromRefAddAlias("p13173", api.VirtualPsId, "pv_feed_in", "")
|
||||
// DailyPurchasedEnergy
|
||||
entries.FromRefAddAlias("p13147", api.VirtualPsId, "daily_purchased_energy", "")
|
||||
// DailyLoadEnergyConsumptionFromPv
|
||||
entries.FromRefAddAlias("p13116", api.VirtualPsId, "pv_self_consumption", "")
|
||||
// TotalPvYield
|
||||
entries.FromRefAddAlias("p13134", api.VirtualPsId, "pv_total_yield", "")
|
||||
// Daily Load Energy Consumption
|
||||
entries.FromRefAddAlias("p13199", api.VirtualPsId, "daily_total_energy", "")
|
||||
// Total Load Energy Consumption
|
||||
entries.FromRefAddAlias("p13130", api.VirtualPsId, "total_energy_consumption", "")
|
||||
// entries.AddPointFromRef(api.Point{ Id:"queryDeviceList.p13130" }, api.Point{ PsKey:api.VirtualPsId, Id:"total_energy_consumption" })
|
||||
|
||||
// entries.CopyEntry("p13130").CreateAlias()
|
||||
// entries.GetEntry(api.Point{PsKey:psId, Id:"total_income", Unit:p.TotalIncome.Unit, Type:api.PointTypeTotal}, now, p.TotalIncome.Value)
|
||||
pkg := apiReflect.GetName("", *e)
|
||||
|
||||
var devices []string
|
||||
/*
|
||||
PVPower - TotalDcPower
|
||||
PVPowerToBattery - BatteryChargingPower
|
||||
@ -376,86 +314,392 @@ func (e *EndPoint) GetData() api.DataMap {
|
||||
YieldBatteryCharge - DailyBatteryChargingEnergyFromPv
|
||||
YieldFeedIn - DailyFeedInEnergyPv
|
||||
*/
|
||||
for _, device := range e.Response.ResultData.PageList {
|
||||
if !device.DeviceType.Match(api.DeviceNameEnergyStorageSystem) {
|
||||
// Only looking for a Solar Storage System.
|
||||
continue
|
||||
}
|
||||
devices = append(devices, device.PsKey.String())
|
||||
// if p.PointID.Match(13003) {
|
||||
// }
|
||||
}
|
||||
|
||||
// Add virtual entries.
|
||||
// ts := ret.Entries[0].Date
|
||||
// var value valueTypes.Float
|
||||
// Points are in an array. So manually add virtuals instead of using the structure.
|
||||
for _, device := range devices {
|
||||
// fmt.Printf("endpoint: %s\n", device)
|
||||
dstEndpoint := "virtual." + device
|
||||
srcEndpoint := fmt.Sprintf("%s.%s", pkg, device)
|
||||
|
||||
entries.FromRefAddFloat("pv_self_consumption",
|
||||
api.VirtualPsId,"pv_daily_yield", "",
|
||||
entries.GetFloatValue("pv_self_consumption", api.LastEntry) + entries.GetFloatValue("pv_battery_charge_energy", api.LastEntry) + entries.GetFloatValue("pv_feed_in", api.LastEntry))
|
||||
// BatteryChargingPower
|
||||
battery_charge_power := entries.CopyPoint(srcEndpoint + ".p13126.value", dstEndpoint, "battery_charge_power", "")
|
||||
|
||||
entries.FromRefAddFloat("daily_pv_energy",
|
||||
api.VirtualPsId,"pv_self_consumption_percent", "",
|
||||
entries.GetPercent("pv_self_consumption", "daily_pv_energy", api.LastEntry))
|
||||
entries.FromRefAddFloat("daily_pv_energy",
|
||||
api.VirtualPsId,"pv_battery_charge_percent", "",
|
||||
entries.GetPercent("pv_battery_charge_energy", "daily_pv_energy", api.LastEntry))
|
||||
entries.FromRefAddFloat("daily_pv_energy",
|
||||
api.VirtualPsId,"pv_feed_in_percent", "",
|
||||
entries.GetPercent("pv_feed_in", "daily_pv_energy", api.LastEntry))
|
||||
// BatteryDischargingPower
|
||||
battery_discharge_power := entries.CopyPoint(srcEndpoint + ".p13150.value", dstEndpoint, "battery_discharge_power", "")
|
||||
|
||||
// @TODO - Add this calculation.
|
||||
DailyPvEnergy := entries.GetFloatValue("daily_total_energy", api.LastEntry) - entries.GetFloatValue("daily_purchased_energy", api.LastEntry)
|
||||
// fmt.Sprintf("%f", DailyPvEnergy)
|
||||
entries.FromRefAddFloat("daily_total_energy",
|
||||
api.VirtualPsId,"daily_pv_energy_percent", "",
|
||||
api.GetPercent(DailyPvEnergy, entries.GetValue("daily_total_energy", api.LastEntry)))
|
||||
entries.FromRefAddFloat("daily_total_energy",
|
||||
api.VirtualPsId,"daily_purchased_energy_percent", "",
|
||||
entries.GetPercent("daily_purchased_energy", "daily_total_energy", api.LastEntry))
|
||||
// Daily PV Yield
|
||||
daily_pv_energy := entries.CopyPoint(srcEndpoint + ".p13112.value", dstEndpoint, "daily_pv_energy", "")
|
||||
|
||||
entries.FromRefAddFloat("power_pv",
|
||||
api.VirtualPsId,"power_pv_to_load", "",
|
||||
entries.GetFloatValue("power_pv", api.LastEntry) - entries.GetFloatValue("battery_charge_power", api.LastEntry) - entries.GetFloatValue("power_pv_to_grid", api.LastEntry))
|
||||
// DailyBatteryChargingEnergyFromPv
|
||||
pv_battery_charge_energy := entries.CopyPoint(srcEndpoint + ".p13174.value", dstEndpoint, "pv_battery_charge_energy", "")
|
||||
|
||||
// Battery
|
||||
entries.FromRefAddFloat("battery_charge_power",
|
||||
api.VirtualPsId,"power_battery", "",
|
||||
entries.LowerUpper("battery_discharge_power", "battery_charge_power", api.LastEntry))
|
||||
entries.FromRefAddFloat("battery_charge_power",
|
||||
api.VirtualPsId,"power_pv_to_battery", "",
|
||||
entries.GetFloatValue("battery_charge_power", api.LastEntry))
|
||||
entries.FromRefAddFloat("battery_discharge_power",
|
||||
api.VirtualPsId,"power_battery_to_load", "",
|
||||
entries.GetFloatValue("battery_charge_power", api.LastEntry))
|
||||
entries.FromRefAddFloat("battery_charge_power",
|
||||
api.VirtualPsId,"power_battery_to_grid", "",
|
||||
0.0)
|
||||
// DailyBatteryDischargingEnergy
|
||||
battery_discharge := entries.CopyPoint(srcEndpoint + ".p13029.value", dstEndpoint, "battery_discharge", "")
|
||||
|
||||
// Grid
|
||||
entries.FromRefAddFloat("power_grid_to_load",
|
||||
api.VirtualPsId,"power_grid", "",
|
||||
entries.LowerUpper("power_pv_to_grid", "power_grid_to_load", api.LastEntry))
|
||||
entries.FromRefAddFloat("power_grid_to_load",
|
||||
api.VirtualPsId,"power_grid_to_battery", "",
|
||||
0.0)
|
||||
// DailyFeedInEnergy - @TODO - This may differ from DailyFeedInEnergyPv
|
||||
_ = entries.CopyPoint(srcEndpoint + ".p13122.value", dstEndpoint, "pv_feed_in2", "")
|
||||
// fmt.Println(pv_feed_in2)
|
||||
|
||||
// DailyFeedInEnergyPv
|
||||
pv_feed_in := entries.CopyPoint(srcEndpoint + ".p13173.value", dstEndpoint, "pv_feed_in", "")
|
||||
|
||||
// DailyPurchasedEnergy
|
||||
daily_purchased_energy := entries.CopyPoint(srcEndpoint + ".p13147.value", dstEndpoint, "daily_purchased_energy", "")
|
||||
|
||||
// DailyLoadEnergyConsumptionFromPv
|
||||
pv_self_consumption := entries.CopyPoint(srcEndpoint + ".p13116.value", dstEndpoint, "pv_self_consumption", "")
|
||||
|
||||
// TotalPvYield
|
||||
_ = entries.CopyPoint(srcEndpoint + ".p13134.value", dstEndpoint, "pv_total_yield", "")
|
||||
// fmt.Println(pv_total_yield)
|
||||
|
||||
// Daily Load Energy Consumption
|
||||
daily_total_energy := entries.CopyPoint(srcEndpoint + ".p13199.value", dstEndpoint, "daily_total_energy", "")
|
||||
|
||||
// Total Load Energy Consumption
|
||||
_ = entries.CopyPoint(srcEndpoint + ".p13130.value", dstEndpoint, "total_energy_consumption", "")
|
||||
// fmt.Println(total_energy_consumption)
|
||||
|
||||
pv_daily_yield := entries.CopyDataEntries(*pv_self_consumption, dstEndpoint, "pv_daily_yield", "")
|
||||
pv_daily_yield.SetFloat(pv_self_consumption.GetFloat() + pv_battery_charge_energy.GetFloat() + pv_feed_in.GetFloat(), "", "")
|
||||
|
||||
pv_self_consumption_percent := entries.CopyDataEntries(*daily_pv_energy, dstEndpoint, "pv_self_consumption_percent", "")
|
||||
pv_self_consumption_percent.SetFloat(entries.GetPercent(*pv_self_consumption, *daily_pv_energy), "", "")
|
||||
|
||||
battery_energy := entries.CopyDataEntries(*pv_battery_charge_energy, dstEndpoint, "battery_energy", "")
|
||||
battery_energy.SetFloat(entries.LowerUpper(*pv_battery_charge_energy, *battery_discharge), "", "")
|
||||
|
||||
pv_battery_charge_percent := entries.CopyDataEntries(*daily_pv_energy, dstEndpoint, "pv_battery_charge_percent", "")
|
||||
pv_battery_charge_percent.SetFloat(entries.LowerUpper(*pv_battery_charge_energy, *daily_pv_energy), "", "")
|
||||
|
||||
pv_feed_in_percent := entries.CopyDataEntries(*daily_pv_energy, dstEndpoint, "pv_feed_in_percent", "")
|
||||
pv_feed_in_percent.SetFloat(entries.LowerUpper(*pv_feed_in, *daily_pv_energy), "", "")
|
||||
|
||||
daily_pv_energy_percent := entries.CopyDataEntries(*daily_total_energy, dstEndpoint, "daily_pv_energy_percent", "")
|
||||
DailyPvEnergy := daily_total_energy.GetFloat() - daily_purchased_energy.GetFloat()
|
||||
daily_pv_energy_percent.SetFloat(api.GetPercent(DailyPvEnergy, daily_total_energy.GetFloat()), "", "")
|
||||
|
||||
daily_purchased_energy_percent := entries.CopyDataEntries(*daily_total_energy, dstEndpoint, "daily_purchased_energy_percent", "")
|
||||
daily_purchased_energy_percent.SetFloat(entries.LowerUpper(*daily_purchased_energy, *daily_total_energy), "", "")
|
||||
|
||||
|
||||
entries.FromRefAddState("power_pv", api.VirtualPsId,"power_pv_active", "")
|
||||
entries.FromRefAddState("power_battery", api.VirtualPsId,"power_battery_active", "")
|
||||
entries.FromRefAddState("power_grid", api.VirtualPsId,"power_grid_active", "")
|
||||
entries.FromRefAddState("power_load", api.VirtualPsId,"power_load_active", "")
|
||||
// PV src
|
||||
power_pv := entries.CopyPoint(srcEndpoint + ".p13003.value", dstEndpoint, "power_pv", "") // TotalDcPower
|
||||
power_pv_active := entries.CopyDataEntries(*power_pv, dstEndpoint, "power_pv_active", "")
|
||||
power_pv_active.FloatToState(power_pv_active.GetFloat())
|
||||
|
||||
entries.FromRefAddState("power_pv_to_battery", api.VirtualPsId,"power_pv_to_battery_active", "")
|
||||
entries.FromRefAddState("power_pv_to_load", api.VirtualPsId,"power_pv_to_load_active", "")
|
||||
entries.FromRefAddState("power_pv_to_grid", api.VirtualPsId,"power_pv_to_grid_active", "")
|
||||
power_pv_to_battery := entries.CopyDataEntries(*battery_charge_power, dstEndpoint, "power_pv_to_battery", "")
|
||||
power_pv_to_battery.SetFloat(battery_charge_power.GetFloat(), "", "")
|
||||
power_pv_to_battery_active := entries.CopyDataEntries(*power_pv_to_battery, dstEndpoint, "power_pv_to_battery_active", "")
|
||||
power_pv_to_battery_active.FloatToState(power_pv_to_battery_active.GetFloat())
|
||||
|
||||
entries.FromRefAddState("power_battery_to_load", api.VirtualPsId,"power_battery_to_load_active", "")
|
||||
entries.FromRefAddState("power_battery_to_grid", api.VirtualPsId,"power_battery_to_grid_active", "")
|
||||
power_pv_to_grid := entries.CopyPoint(srcEndpoint + ".p13121.value", dstEndpoint, "power_pv_to_grid", "") // TotalExportActivePower
|
||||
power_pv_to_grid_active := entries.CopyDataEntries(*power_pv_to_grid, dstEndpoint, "power_pv_to_grid_active", "")
|
||||
power_pv_to_grid_active.FloatToState(power_pv_to_grid_active.GetFloat())
|
||||
|
||||
entries.FromRefAddState("power_grid_to_load", api.VirtualPsId,"power_grid_to_load_active", "")
|
||||
entries.FromRefAddState("power_grid_to_battery", api.VirtualPsId,"power_grid_to_battery_active", "")
|
||||
power_pv_to_load := entries.CopyDataEntries(*power_pv, dstEndpoint, "power_pv_to_load", "")
|
||||
power_pv_to_load.SetFloat(power_pv.GetFloat() - battery_charge_power.GetFloat() - power_pv_to_grid.GetFloat(), "", "")
|
||||
power_pv_to_load_active := entries.CopyDataEntries(*power_pv_to_load, dstEndpoint, "power_pv_to_load_active", "")
|
||||
power_pv_to_load_active.FloatToState(power_pv_to_load_active.GetFloat())
|
||||
|
||||
|
||||
entries.FromRefAddFloat("pv_battery_charge_energy",
|
||||
api.VirtualPsId, "battery_energy", "",
|
||||
entries.LowerUpper("pv_battery_charge_energy", "battery_discharge", api.LastEntry))
|
||||
// Battery src
|
||||
power_battery := entries.CopyDataEntries(*battery_charge_power, dstEndpoint, "power_battery", "")
|
||||
power_battery.SetFloat(entries.LowerUpper(*battery_discharge_power, *battery_charge_power), "", "")
|
||||
power_battery_active := entries.CopyDataEntries(*power_battery, dstEndpoint, "power_battery_active", "")
|
||||
power_battery_active.FloatToState(power_battery_active.GetFloat())
|
||||
|
||||
entries.FromRefAddFloat("pv_feed_in",
|
||||
api.VirtualPsId,"grid_energy", "",
|
||||
entries.LowerUpper("pv_feed_in", "daily_purchased_energy", api.LastEntry))
|
||||
power_battery_to_load := entries.CopyDataEntries(*battery_discharge_power, dstEndpoint, "power_battery_to_load", "")
|
||||
power_battery_to_load.SetFloat(battery_discharge_power.GetFloat(), "", "")
|
||||
power_battery_to_load_active := entries.CopyDataEntries(*power_battery_to_load, dstEndpoint, "power_battery_to_load_active", "")
|
||||
power_battery_to_load_active.FloatToState(power_battery_to_load_active.GetFloat())
|
||||
|
||||
power_battery_to_grid := entries.CopyDataEntries(*battery_charge_power, dstEndpoint, "power_battery_to_grid", "")
|
||||
power_battery_to_grid.SetFloat(0.0, "", "")
|
||||
power_battery_to_grid_active := entries.CopyDataEntries(*power_battery_to_grid, dstEndpoint, "power_battery_to_grid_active", "")
|
||||
power_battery_to_grid_active.FloatToState(power_battery_to_grid_active.GetFloat())
|
||||
|
||||
|
||||
// Grid src
|
||||
power_grid_to_load := entries.CopyPoint(srcEndpoint + ".p13149.value", dstEndpoint, "power_grid_to_load", "") // PurchasedPower
|
||||
power_grid_to_load_active := entries.CopyDataEntries(*power_grid_to_load, dstEndpoint, "power_grid_to_load_active", "")
|
||||
power_grid_to_load_active.FloatToState(power_grid_to_load_active.GetFloat())
|
||||
|
||||
power_grid := entries.CopyDataEntries(*power_grid_to_load, dstEndpoint, "power_grid", "")
|
||||
power_grid.SetFloat(entries.LowerUpper(*power_pv_to_grid, *power_grid_to_load), "", "")
|
||||
power_grid_active := entries.CopyDataEntries(*power_grid, dstEndpoint, "power_grid_active", "")
|
||||
power_grid_active.FloatToState(power_grid_active.GetFloat())
|
||||
|
||||
power_grid_to_battery := entries.CopyDataEntries(*power_grid_to_load, dstEndpoint, "power_grid_to_battery", "")
|
||||
power_grid_to_battery.SetFloat(0.0, "", "")
|
||||
power_grid_to_battery_active := entries.CopyDataEntries(*power_grid_to_battery, dstEndpoint, "power_grid_to_battery_active", "")
|
||||
power_grid_to_battery_active.FloatToState(power_grid_to_battery_active.GetFloat())
|
||||
|
||||
grid_energy := entries.CopyDataEntries(*pv_feed_in, dstEndpoint, "grid_energy", "")
|
||||
grid_energy.SetFloat(entries.LowerUpper(*pv_feed_in, *daily_purchased_energy), "", "")
|
||||
|
||||
|
||||
// Load src
|
||||
power_load := entries.CopyPoint(srcEndpoint + ".p13119.value", dstEndpoint, "power_load", "") // TotalLoadActivePower
|
||||
power_load_active := entries.CopyDataEntries(*power_load, dstEndpoint, "power_load_active", "")
|
||||
power_load_active.FloatToState(power_load_active.GetFloat())
|
||||
}
|
||||
|
||||
// for _, d := range e.Response.ResultData.PageList {
|
||||
// name2 := api.JoinWithDots(0, "", pkg, d.PsKey)
|
||||
// entries.StructToPoints(d, name2, d.PsKey.Value(), valueTypes.NewDateTime(""))
|
||||
//
|
||||
// for _, p := range d.PointData {
|
||||
// pid := valueTypes.SetPointIdValue(p.PointID.Value())
|
||||
// uv := valueTypes.SetUnitValueFloat(p.Value.Value(), p.Unit.Value(), "")
|
||||
// // name2 := fmt.Sprintf("%s.PointData.%s", name, pid)
|
||||
// // name3 := fmt.Sprintf("%s.PointData", name2)
|
||||
// entries.AddUnitValue(name2, d.PsKey.Value(), pid, p.PointName.Value(), p.PointGroupName.Value(), p.TimeStamp, uv)
|
||||
//
|
||||
// // Handle virtual results.
|
||||
// // switch pid {
|
||||
// // case "13126":
|
||||
// // // BatteryChargingPower
|
||||
// // entries["PVPowerToBattery"] = entries[pid]
|
||||
// // case "13150":
|
||||
// // // BatteryDischargingPower
|
||||
// // entries["BatteryPowerToLoad"] = entries[pid]
|
||||
// // case "13121":
|
||||
// // // TotalExportActivePower
|
||||
// // entries["PVPowerToGrid"] = entries[pid]
|
||||
// // case "13149":
|
||||
// // // PurchasedPower
|
||||
// // entries["GridPowerToLoad"] = entries[pid]
|
||||
// // case "13003":
|
||||
// // // TotalDcPower
|
||||
// // entries["PVPower"] = addVirtualAlias(entries[pid], "pv_power", "PV Power")
|
||||
// // case "13119":
|
||||
// // // TotalLoadActivePower
|
||||
// // entries["LoadPower"] = addVirtualAlias(entries[pid], "load_power", "Load Power")
|
||||
// //
|
||||
// // // addVirtualAlias(entries[pid], "FOO", "FOO")
|
||||
// //
|
||||
// // case "13112":
|
||||
// // // Daily PV Yield
|
||||
// // entries["DailyPvEnergy"] = addVirtualAlias(entries["DailyPvEnergy"], "daily_pv_energy", "Daily PV Energy")
|
||||
// // case "13174":
|
||||
// // // DailyBatteryChargingEnergyFromPv
|
||||
// // entries["YieldBatteryCharge"] = addVirtualAlias(entries[pid], "pv_battery_charge", "PV Battery Charge")
|
||||
// // case "13029":
|
||||
// // // DailyBatteryDischargingEnergy
|
||||
// // entries["DailyBatteryDischargingEnergy"] = entries[pid]
|
||||
// // case "13122":
|
||||
// // // entries["DailyFeedInEnergy"] = addVirtualAlias(entries[pid], "pv_feed_in", "PV Feed In")
|
||||
// // // @TODO - This may differ from DailyFeedInEnergyPv
|
||||
// // case "13173":
|
||||
// // // DailyFeedInEnergyPv
|
||||
// // entries["YieldFeedIn"] = addVirtualAlias(entries[pid], "pv_feed_in", "PV Feed In")
|
||||
// // case "13147":
|
||||
// // // DailyPurchasedEnergy
|
||||
// // entries["DailyPurchasedEnergy"] = addVirtualAlias(entries[pid], "daily_purchased_energy", "Daily Purchased Energy")
|
||||
// //
|
||||
// // case "13116":
|
||||
// // // DailyLoadEnergyConsumptionFromPv
|
||||
// // entries["YieldSelfConsumption"] = addVirtualAlias(entries[pid], "pv_self_consumption", "PV Self Consumption")
|
||||
// // case "13134":
|
||||
// // // TotalPvYield
|
||||
// // entries["TotalPvYield"] = addVirtualAlias(entries[pid], "pv_total_yield", "PV Total Yield")
|
||||
// //
|
||||
// // case "13199":
|
||||
// // // Daily Load Energy Consumption
|
||||
// // entries["DailyTotalLoad"] = addVirtualAlias(entries[pid], "daily_total_energy", "Daily Total Energy")
|
||||
// //
|
||||
// // case "13130":
|
||||
// // // Total Load Energy Consumption
|
||||
// // entries["TotalEnergyConsumption"] = addVirtualAlias(entries[pid], "total_energy_consumption", "Total Energy Consumption"
|
||||
// // }
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// // TotalDcPower
|
||||
// entries.FromRefAddAlias(pkg + ".1171348_14_1_2.p13003.value", api.VirtualPsId, "power_pv", "")
|
||||
// // BatteryChargingPower
|
||||
// entries.FromRefAddAlias("p13126", api.VirtualPsId, "battery_charge_power", "")
|
||||
// // BatteryDischargingPower
|
||||
// entries.FromRefAddAlias("13150", api.VirtualPsId, "battery_discharge_power", "")
|
||||
// // TotalExportActivePower
|
||||
// entries.FromRefAddAlias("13121", api.VirtualPsId, "power_pv_to_grid", "")
|
||||
// // TotalLoadActivePower
|
||||
// entries.FromRefAddAlias("13119", api.VirtualPsId, "power_load", "")
|
||||
// // PurchasedPower
|
||||
// entries.FromRefAddAlias("13149", api.VirtualPsId, "power_grid_to_load", "")
|
||||
// // Daily PV Yield
|
||||
// entries.FromRefAddAlias("13112", api.VirtualPsId, "daily_pv_energy", "")
|
||||
// DailyPvEnergy := entries.getFloatValue("DailyTotalLoad") - entries.getFloatValue("DailyPurchasedEnergy")
|
||||
// // DailyBatteryChargingEnergyFromPv
|
||||
// entries.FromRefAddAlias("13174", api.VirtualPsId, "pv_battery_charge_energy", "")
|
||||
// // DailyBatteryDischargingEnergy
|
||||
// entries.FromRefAddAlias("13029", api.VirtualPsId, "battery_discharge", "")
|
||||
//
|
||||
// @TODO - This may differ from DailyFeedInEnergyPv
|
||||
// entries["DailyFeedInEnergy"] = entries.AddVirtualAliasFromRef("13122", "pv_feed_in", "PV Feed In")
|
||||
//
|
||||
// // DailyFeedInEnergyPv
|
||||
// entries.FromRefAddAlias("13173", api.VirtualPsId, "pv_feed_in", "")
|
||||
// // DailyPurchasedEnergy
|
||||
// entries.FromRefAddAlias("13147", api.VirtualPsId, "daily_purchased_energy", "")
|
||||
// // DailyLoadEnergyConsumptionFromPv
|
||||
// entries.FromRefAddAlias("13116", api.VirtualPsId, "pv_self_consumption", "")
|
||||
// // TotalPvYield
|
||||
// entries.FromRefAddAlias("13134", api.VirtualPsId, "pv_total_yield", "")
|
||||
// // Daily Load Energy Consumption
|
||||
// entries.FromRefAddAlias("13199", api.VirtualPsId, "daily_total_energy", "")
|
||||
// // Total Load Energy Consumption
|
||||
// entries.FromRefAddAlias("13130", api.VirtualPsId, "total_energy_consumption", "")
|
||||
// // entries.AddPointFromRef(api.Point{ Id:"queryDeviceList.p13130" }, api.Point{ PsKey:api.VirtualPsId, Id:"total_energy_consumption" })
|
||||
//
|
||||
// entries.CopyEntry("p13130").CreateAlias()
|
||||
// entries.GetEntry(api.Point{PsKey:psId, Id:"total_income", Unit:p.TotalIncome.Unit, Type:api.PointTypeTotal}, now, p.TotalIncome.Value)
|
||||
//
|
||||
// entries.FromRefAddFloat("pv_self_consumption",
|
||||
// api.VirtualPsId,"pv_daily_yield", "",
|
||||
// entries.GetFloatValue("pv_self_consumption", api.LastEntry) + entries.GetFloatValue("pv_battery_charge_energy", api.LastEntry) + entries.GetFloatValue("pv_feed_in", api.LastEntry))
|
||||
//
|
||||
// entries.FromRefAddFloat("daily_pv_energy",
|
||||
// api.VirtualPsId,"pv_self_consumption_percent", "",
|
||||
// entries.GetPercent("pv_self_consumption", "daily_pv_energy", api.LastEntry))
|
||||
// entries.FromRefAddFloat("daily_pv_energy",
|
||||
// api.VirtualPsId,"pv_battery_charge_percent", "",
|
||||
// entries.GetPercent("pv_battery_charge_energy", "daily_pv_energy", api.LastEntry))
|
||||
// entries.FromRefAddFloat("daily_pv_energy",
|
||||
// api.VirtualPsId,"pv_feed_in_percent", "",
|
||||
// entries.GetPercent("pv_feed_in", "daily_pv_energy", api.LastEntry))
|
||||
//
|
||||
// // // @TODO - Add this calculation.
|
||||
// DailyPvEnergy := entries.GetFloatValue("daily_total_energy", api.LastEntry) - entries.GetFloatValue("daily_purchased_energy", api.LastEntry)
|
||||
// // fmt.Sprintf("%f", DailyPvEnergy)
|
||||
// entries.FromRefAddFloat("daily_total_energy",
|
||||
// api.VirtualPsId,"daily_pv_energy_percent", "",
|
||||
// api.GetPercent(DailyPvEnergy, entries.GetValue("daily_total_energy", api.LastEntry)))
|
||||
// entries.FromRefAddFloat("daily_total_energy",
|
||||
// api.VirtualPsId,"daily_purchased_energy_percent", "",
|
||||
// entries.GetPercent("daily_purchased_energy", "daily_total_energy", api.LastEntry))
|
||||
//
|
||||
// entries.FromRefAddFloat("power_pv",
|
||||
// api.VirtualPsId,"power_pv_to_load", "",
|
||||
// entries.GetFloatValue("power_pv", api.LastEntry) - entries.GetFloatValue("battery_charge_power", api.LastEntry) - entries.GetFloatValue("power_pv_to_grid", api.LastEntry))
|
||||
//
|
||||
// // Battery
|
||||
// entries.FromRefAddFloat("battery_charge_power",
|
||||
// api.VirtualPsId,"power_battery", "",
|
||||
// entries.LowerUpper("battery_discharge_power", "battery_charge_power", api.LastEntry))
|
||||
// entries.FromRefAddFloat("battery_charge_power",
|
||||
// api.VirtualPsId,"power_pv_to_battery", "",
|
||||
// entries.GetFloatValue("battery_charge_power", api.LastEntry))
|
||||
// entries.FromRefAddFloat("battery_discharge_power",
|
||||
// api.VirtualPsId,"power_battery_to_load", "",
|
||||
// entries.GetFloatValue("battery_charge_power", api.LastEntry))
|
||||
// entries.FromRefAddFloat("battery_charge_power",
|
||||
// api.VirtualPsId,"power_battery_to_grid", "",
|
||||
// 0.0)
|
||||
//
|
||||
// // Grid
|
||||
// entries.FromRefAddFloat("power_grid_to_load",
|
||||
// api.VirtualPsId,"power_grid", "",
|
||||
// entries.LowerUpper("power_pv_to_grid", "power_grid_to_load", api.LastEntry))
|
||||
// entries.FromRefAddFloat("power_grid_to_load",
|
||||
// api.VirtualPsId,"power_grid_to_battery", "",
|
||||
// 0.0)
|
||||
//
|
||||
// entries.FromRefAddFloat("pv_battery_charge_energy",
|
||||
// api.VirtualPsId, "battery_energy", "",
|
||||
// entries.LowerUpper("pv_battery_charge_energy", "battery_discharge", api.LastEntry))
|
||||
//
|
||||
// entries.FromRefAddFloat("pv_feed_in",
|
||||
// api.VirtualPsId,"grid_energy", "",
|
||||
// entries.LowerUpper("pv_feed_in", "daily_purchased_energy", api.LastEntry))
|
||||
//
|
||||
// entries.FromRefAddState("power_pv", api.VirtualPsId,"power_pv_active", "")
|
||||
// entries.FromRefAddState("power_battery", api.VirtualPsId,"power_battery_active", "")
|
||||
// entries.FromRefAddState("power_grid", api.VirtualPsId,"power_grid_active", "")
|
||||
// entries.FromRefAddState("power_load", api.VirtualPsId,"power_load_active", "")
|
||||
//
|
||||
// entries.FromRefAddState("power_pv_to_battery", api.VirtualPsId,"power_pv_to_battery_active", "")
|
||||
// entries.FromRefAddState("power_pv_to_load", api.VirtualPsId,"power_pv_to_load_active", "")
|
||||
// entries.FromRefAddState("power_pv_to_grid", api.VirtualPsId,"power_pv_to_grid_active", "")
|
||||
//
|
||||
// entries.FromRefAddState("power_battery_to_load", api.VirtualPsId,"power_battery_to_load_active", "")
|
||||
// entries.FromRefAddState("power_battery_to_grid", api.VirtualPsId,"power_battery_to_grid_active", "")
|
||||
//
|
||||
// entries.FromRefAddState("power_grid_to_load", api.VirtualPsId,"power_grid_to_load_active", "")
|
||||
// entries.FromRefAddState("power_grid_to_battery", api.VirtualPsId,"power_grid_to_battery_active", "")
|
||||
}
|
||||
}
|
||||
|
||||
func (e *EndPoint) GetCommunicationModule(entries api.DataMap) {
|
||||
|
||||
for range Only.Once {
|
||||
pkg := apiReflect.GetName("", *e)
|
||||
|
||||
var devices []string
|
||||
for _, device := range e.Response.ResultData.PageList {
|
||||
if !device.DeviceType.Match(api.DeviceNameCommunicationModule) {
|
||||
// Only looking for a Communication Module.
|
||||
continue
|
||||
}
|
||||
devices = append(devices, device.PsKey.String())
|
||||
}
|
||||
|
||||
// Points are in an array. So manually add virtuals instead of using the structure.
|
||||
for _, device := range devices {
|
||||
// fmt.Printf("endpoint: %s\n", device)
|
||||
dstEndpoint := "virtual." + device
|
||||
srcEndpoint := fmt.Sprintf("%s.%s", pkg, device)
|
||||
|
||||
// WLAN Signal Strength
|
||||
_ = entries.CopyPoint(srcEndpoint + ".p23014.value", dstEndpoint, "wlan_signal_strength", "")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (e *EndPoint) GetBattery(entries api.DataMap) {
|
||||
|
||||
for range Only.Once {
|
||||
pkg := apiReflect.GetName("", *e)
|
||||
|
||||
var devices []string
|
||||
for _, device := range e.Response.ResultData.PageList {
|
||||
if !device.DeviceType.Match(api.DeviceNameBattery) {
|
||||
// Only looking for a Battery.
|
||||
continue
|
||||
}
|
||||
devices = append(devices, device.PsKey.String())
|
||||
}
|
||||
|
||||
// Points are in an array. So manually add virtuals instead of using the structure.
|
||||
for _, device := range devices {
|
||||
// fmt.Printf("endpoint: %s\n", device)
|
||||
dstEndpoint := "virtual." + device
|
||||
srcEndpoint := fmt.Sprintf("%s.%s", pkg, device)
|
||||
|
||||
// Battery Voltage
|
||||
_ = entries.CopyPoint(srcEndpoint + ".p58601.value", dstEndpoint, "battery_voltage", "")
|
||||
// Battery Current
|
||||
_ = entries.CopyPoint(srcEndpoint + ".p58602.value", dstEndpoint, "battery_current", "")
|
||||
// Battery Temperature
|
||||
_ = entries.CopyPoint(srcEndpoint + ".p58603.value", dstEndpoint, "battery_temperature", "")
|
||||
// Battery Level
|
||||
_ = entries.CopyPoint(srcEndpoint + ".p58604.value", dstEndpoint, "battery_level", "")
|
||||
// Battery Health (SOH)
|
||||
_ = entries.CopyPoint(srcEndpoint + ".p58605.value", dstEndpoint, "battery_health", "")
|
||||
// Total Battery Charging Energy
|
||||
_ = entries.CopyPoint(srcEndpoint + ".p58606.value", dstEndpoint, "total_battery_charging_energy", "")
|
||||
// Total Battery Discharging Energy
|
||||
_ = entries.CopyPoint(srcEndpoint + ".p58607.value", dstEndpoint, "total_battery_discharging_energy", "")
|
||||
}
|
||||
}
|
||||
|
||||
return entries
|
||||
}
|
||||
|
@ -6,7 +6,6 @@ import (
|
||||
"GoSungrow/iSolarCloud/api/valueTypes"
|
||||
"fmt"
|
||||
"github.com/MickMake/GoUnify/Only"
|
||||
"strings"
|
||||
)
|
||||
|
||||
const Url = "/v1/devService/queryDeviceListForApp"
|
||||
@ -33,8 +32,8 @@ type ResultData struct {
|
||||
ConnectState valueTypes.Integer `json:"connect_state"`
|
||||
DataFlag valueTypes.Integer `json:"data_flag"`
|
||||
DataFlagDetail valueTypes.Integer `json:"data_flag_detail"`
|
||||
DevFaultStatus string `json:"dev_fault_status"`
|
||||
DevStatus string `json:"dev_status"`
|
||||
DevFaultStatus valueTypes.Integer `json:"dev_fault_status"`
|
||||
DevStatus valueTypes.Integer `json:"dev_status"`
|
||||
DeviceArea valueTypes.String `json:"device_area"`
|
||||
DeviceCode valueTypes.Integer `json:"device_code"`
|
||||
DeviceFactoryDate valueTypes.DateTime `json:"device_factory_date"`
|
||||
@ -44,12 +43,12 @@ type ResultData struct {
|
||||
DeviceModelID valueTypes.Integer `json:"device_model_id"`
|
||||
DeviceName valueTypes.String `json:"device_name"`
|
||||
DeviceProSn valueTypes.String `json:"device_pro_sn"`
|
||||
DeviceState string `json:"device_state"`
|
||||
DeviceSubType interface{} `json:"device_sub_type"`
|
||||
DeviceSubTypeName interface{} `json:"device_sub_type_name"`
|
||||
DeviceState valueTypes.Integer `json:"device_state"`
|
||||
DeviceSubType interface{} `json:"device_sub_type"`
|
||||
DeviceSubTypeName interface{} `json:"device_sub_type_name"`
|
||||
DeviceType valueTypes.Integer `json:"device_type"`
|
||||
FactoryName valueTypes.String `json:"factory_name"`
|
||||
InstallerDevFaultStatus string `json:"installer_dev_fault_status"`
|
||||
InstallerDevFaultStatus valueTypes.Integer `json:"installer_dev_fault_status"`
|
||||
InverterModelType valueTypes.Integer `json:"inverter_model_type"`
|
||||
IsCountryCheck valueTypes.Bool `json:"is_country_check"`
|
||||
IsHasFunctionEnum valueTypes.Bool `json:"is_has_function_enum"`
|
||||
@ -61,18 +60,18 @@ type ResultData struct {
|
||||
IsSecond valueTypes.Bool `json:"is_second"`
|
||||
IsThirdParty valueTypes.Bool `json:"is_third_party"`
|
||||
ModuleUUID valueTypes.Integer `json:"module_uuid"`
|
||||
OwnerDevFaultStatus string `json:"owner_dev_fault_status"`
|
||||
P24 interface{} `json:"p24"`
|
||||
Posx interface{} `json:"posx"`
|
||||
Posy interface{} `json:"posy"`
|
||||
PsID valueTypes.Integer `json:"ps_id"`
|
||||
OwnerDevFaultStatus valueTypes.Integer `json:"owner_dev_fault_status"`
|
||||
P24 interface{} `json:"p24"`
|
||||
Posx interface{} `json:"posx"`
|
||||
Posy interface{} `json:"posy"`
|
||||
PsId valueTypes.Integer `json:"ps_id"`
|
||||
PsKey valueTypes.PsKey `json:"ps_key"`
|
||||
RelState valueTypes.Integer `json:"rel_state"`
|
||||
Sn valueTypes.String `json:"sn" PointName:"Serial Number"`
|
||||
TypeName valueTypes.String `json:"type_name"`
|
||||
UUID valueTypes.Integer `json:"uuid"`
|
||||
} `json:"pageList"`
|
||||
RowCount valueTypes.Integer `json:"rowCount"`
|
||||
} `json:"pageList" PointNameFromChild:"PsKey"`
|
||||
RowCount valueTypes.Integer `json:"rowCount" PointIgnore:"true"`
|
||||
}
|
||||
|
||||
func (e *ResultData) IsValid() error {
|
||||
@ -86,34 +85,13 @@ func (e *ResultData) IsValid() error {
|
||||
return err
|
||||
}
|
||||
|
||||
//type DecodeResultData ResultData
|
||||
//
|
||||
//func (e *ResultData) UnmarshalJSON(data []byte) error {
|
||||
// var err error
|
||||
//
|
||||
// for range Only.Once {
|
||||
// if len(data) == 0 {
|
||||
// break
|
||||
// }
|
||||
// var pd DecodeResultData
|
||||
//
|
||||
// // Store ResultData
|
||||
// _ = json.Unmarshal(data, &pd)
|
||||
// e.Dummy = pd.Dummy
|
||||
// }
|
||||
//
|
||||
// return err
|
||||
//}
|
||||
|
||||
func (e *EndPoint) GetData() api.DataMap {
|
||||
entries := api.NewDataMap()
|
||||
|
||||
for range Only.Once {
|
||||
pkg := apiReflect.GetName("", *e)
|
||||
for _, d := range e.Response.ResultData.PageList {
|
||||
name := strings.Join([]string{pkg, d.PsKey.Value()}, ".")
|
||||
entries.StructToPoints(d, name, d.PsKey.Value(), valueTypes.NewDateTime(""))
|
||||
}
|
||||
dt := valueTypes.NewDateTime(valueTypes.Now)
|
||||
entries.StructToPoints(e.Response.ResultData, pkg, "", dt)
|
||||
}
|
||||
|
||||
return entries
|
||||
|
@ -197,7 +197,7 @@ func (e *EndPoint) GetPointDataTable(points api.TemplatePoints) output.Table {
|
||||
_ = table.AddRow(
|
||||
tim.Key.PrintFull(),
|
||||
fmt.Sprintf("%s.%s", deviceName, pointId),
|
||||
gp.Description,
|
||||
gp.Name,
|
||||
tim.Value,
|
||||
gp.Unit,
|
||||
)
|
||||
|
@ -8,52 +8,102 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"hash/fnv"
|
||||
"runtime"
|
||||
"strconv"
|
||||
|
||||
"path/filepath"
|
||||
"reflect"
|
||||
"runtime"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
|
||||
type DataStructureMap map[string]DataStructure
|
||||
type DataStructures struct {
|
||||
Map map[string]DataStructure
|
||||
}
|
||||
type DataStructure struct {
|
||||
Json string
|
||||
PointId string
|
||||
// PointType string
|
||||
PointUnit string
|
||||
PointUnitFrom string
|
||||
PointDevice string
|
||||
PointName string
|
||||
PointTimeSpan string
|
||||
PointValueType string
|
||||
PointAlias string
|
||||
PointIgnore bool
|
||||
PointGroupName string
|
||||
Json string
|
||||
PointId string
|
||||
PointParentId string
|
||||
PointUnit string
|
||||
PointUnitFrom string
|
||||
PointTimestamp time.Time
|
||||
PointName string
|
||||
PointUpdateFreq string
|
||||
PointValueType string
|
||||
PointAliasTo string
|
||||
PointIgnore bool
|
||||
PointGroupName string
|
||||
PointGroupNameFrom string
|
||||
PointTimestampFrom string
|
||||
|
||||
Value interface{}
|
||||
ValueType string
|
||||
ValueKind string
|
||||
Endpoint string
|
||||
Value interface{}
|
||||
ValueType string
|
||||
ValueKind string
|
||||
Endpoint string
|
||||
}
|
||||
|
||||
const (
|
||||
PointId = "PointId" // Point id in the form p\d+ or \d+
|
||||
// PointType = "PointType" // Type of point: energy, date, battery, temperature.
|
||||
PointUnit = "PointUnit" // Units: Wh, kWh, C, h.
|
||||
PointUnitFrom = "PointUnitFrom" // Get units from another point.
|
||||
PointDevice = "PointDevice" // Associated device to point.
|
||||
PointName = "PointName" // Human name of point.
|
||||
PointTimeSpan = "PointTimeSpan" // Timespan Total, Yearly, Monthly, Day.
|
||||
PointValueType = "PointValueType" //
|
||||
PointAlias = "PointAlias" // Alias this point to another entry.
|
||||
PointIgnore = "PointIgnore" // Ignore this point.
|
||||
PointGroupName = "PointGroupName" // Point group name.
|
||||
PointId = "PointId" // Point id in the form p\d+ or \d+
|
||||
PointUnit = "PointUnit" // Units: Wh, kWh, C, h.
|
||||
PointUnitFrom = "PointUnitFrom" // Get PointUnit from another field structure.
|
||||
PointParentId = "PointParentId" // Associated parent of point.
|
||||
PointName = "PointName" // Human-readable name of point.
|
||||
PointUpdateFreq = "PointUpdateFreq" // Point update frequency - Total, Yearly, Monthly, Day.
|
||||
PointValueType = "PointValueType" // Value type of point: energy, date, battery, temperature.
|
||||
PointAliasTo = "PointAliasTo" // Alias this point to another point.
|
||||
PointAliasFrom = "PointAliasFrom" // Alias this point from another point.
|
||||
PointIgnore = "PointIgnore" // Ignore this point.
|
||||
PointGroupName = "PointGroupName" // Point group name.
|
||||
PointGroupNameFrom = "PointGroupNameFrom" // Get PointGroupName from another field structure.
|
||||
PointNameFromChild = "PointNameFromChild" // Searches child for field value to use for naming when hitting a slice, (as opposed to using an index).
|
||||
PointNameFromParent = "PointNameFromParent" // Searches child for field value to use for naming when hitting a slice, (as opposed to using an index).
|
||||
PointNameDateFormat = "PointNameDateFormat" // Date format when using PointNameFrom, (if the field is a time.Time type).
|
||||
PointArrayFlatten = "PointArrayFlatten" // Flatten an array into a string. EG: ["one", "two", "three"]
|
||||
PointTimestampFrom = "PointTimestampFrom" // Pull timestamp from another field structure.
|
||||
)
|
||||
|
||||
func GetPointTags(ref interface{}, name ...string) DataStructureMap {
|
||||
ret := make(DataStructureMap)
|
||||
func (dss *DataStructures) Add(name string, ds DataStructure) {
|
||||
for range Only.Once {
|
||||
if dss.Map == nil {
|
||||
dss.Map = make(map[string]DataStructure)
|
||||
}
|
||||
// fmt.Printf("DEBUG DataStructures.Add() %s - Kind:'%s' Type:'%s'\n", name, ds.ValueKind, ds.ValueType)
|
||||
dss.Map[name] = ds
|
||||
}
|
||||
}
|
||||
|
||||
func (dss *DataStructures) Exists(name string) bool {
|
||||
var yes bool
|
||||
for range Only.Once {
|
||||
if dss.Map == nil {
|
||||
break
|
||||
}
|
||||
if _, ok := dss.Map[name]; ok {
|
||||
yes = ok
|
||||
break
|
||||
}
|
||||
}
|
||||
return yes
|
||||
}
|
||||
|
||||
func (dss *DataStructures) Append(dsm DataStructures) {
|
||||
for range Only.Once {
|
||||
if dss.Map == nil {
|
||||
dss.Map = make(map[string]DataStructure)
|
||||
}
|
||||
// fmt.Printf("Map BEFORE:[%d] (adding %d)\n", len(dss.Map), len(dsm.Map))
|
||||
for name, ds := range dsm.Map {
|
||||
dss.Map[name] = ds
|
||||
}
|
||||
// fmt.Printf("Map AFTER:[%d]\n", len(dss.Map))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
func (dss *DataStructures) GetPointTags(parentRef interface{}, ref interface{}, name ...string) DataStructures {
|
||||
// var ret DataStructures
|
||||
// ret.Map = make(map[string]DataStructure)
|
||||
|
||||
for range Only.Once {
|
||||
vo := reflect.ValueOf(ref)
|
||||
@ -64,22 +114,9 @@ func GetPointTags(ref interface{}, name ...string) DataStructureMap {
|
||||
fieldTo := to.Field(i)
|
||||
fieldVo := vo.Field(i)
|
||||
|
||||
pointValueType := fieldTo.Tag.Get(PointValueType)
|
||||
if valueTypes.IsNil(ref) {
|
||||
pointValueType = "NIL"
|
||||
}
|
||||
|
||||
// fmt.Printf("DEBUG: Key[%s]:\tVT:'%s' Kind:'%s' => '%s'\n",
|
||||
// fieldTo.Name,
|
||||
// pointValueType,
|
||||
// fieldVo.Kind(),
|
||||
// fieldTo.Type.String(),
|
||||
// )
|
||||
|
||||
ignore := false
|
||||
ig := fieldTo.Tag.Get(PointIgnore)
|
||||
if ig != "" {
|
||||
ignore = true
|
||||
if !fieldTo.IsExported() {
|
||||
fmt.Printf("DEBUG: NOTEXPORTED(%s): Type %s\n", name, fieldTo.Name)
|
||||
continue
|
||||
}
|
||||
|
||||
pointJson := fieldTo.Tag.Get("json")
|
||||
@ -88,111 +125,435 @@ func GetPointTags(ref interface{}, name ...string) DataStructureMap {
|
||||
pointId = pointJson
|
||||
}
|
||||
|
||||
// fmt.Printf("DEBUG[%d]: %s.%s: Key[%s]:\tKind:'%s' Type:'%s'\n",
|
||||
// len(dss.Map),
|
||||
// strings.Join(name, "."), pointId,
|
||||
// fieldTo.Name,
|
||||
// fieldVo.Kind(),
|
||||
// fieldTo.Type.String(),
|
||||
// )
|
||||
// if strings.Contains(pointId, "actual_energy") || strings.Contains(pointJson, "actual_energy") {
|
||||
// fmt.Printf("F:%v\n", pointId)
|
||||
// fmt.Println("")
|
||||
// }
|
||||
|
||||
switch fieldVo.Kind() {
|
||||
case reflect.Struct:
|
||||
if valueTypes.IsUnknownStruct(fieldTo, fieldVo) {
|
||||
n2 := name
|
||||
n2 = append(n2, pointId)
|
||||
t2 := GetPointTags(fieldVo.Interface(), n2...)
|
||||
for k, v := range t2 {
|
||||
ret[k] = v
|
||||
case reflect.Uintptr:
|
||||
fallthrough
|
||||
case reflect.Complex64:
|
||||
fallthrough
|
||||
case reflect.Complex128:
|
||||
fallthrough
|
||||
case reflect.Chan:
|
||||
fallthrough
|
||||
case reflect.Func:
|
||||
fallthrough
|
||||
case reflect.Pointer:
|
||||
fallthrough
|
||||
case reflect.UnsafePointer:
|
||||
fmt.Printf("Unsupported type: '%s.%s' (%s)\n", name, pointId, fieldVo.Type().String())
|
||||
continue
|
||||
|
||||
case reflect.Slice:
|
||||
// Handle slices here.
|
||||
// Adds more Point* tags - PointNameFromChild, PointNameDateFormat
|
||||
// Replicates the JoinWithDots 1st and 2nd arguments.
|
||||
// intSize int, dateFormat string
|
||||
// fmt.Printf("Kind: %s ##########################################\n", fieldVo.Kind().String())
|
||||
pointNameFromChild := fieldTo.Tag.Get(PointNameFromChild)
|
||||
pointNameFromParent := fieldTo.Tag.Get(PointNameFromParent)
|
||||
pointNameDateFormat := fieldTo.Tag.Get(PointNameDateFormat)
|
||||
intSize := valueTypes.SizeOfInt(fieldVo.Len())
|
||||
pointArrayFlatten := fieldTo.Tag.Get(PointArrayFlatten)
|
||||
n2 := append(name, pointId)
|
||||
|
||||
if pointArrayFlatten != "" {
|
||||
// We want to flatten a slice down to EG "[1, 2, 3]"
|
||||
endPointName, ds := makeDataStructure(parentRef, fieldTo, fieldVo, name)
|
||||
ds.Value = valueTypes.AnyToValueString(fieldVo.Interface(), 0, "")
|
||||
dss.Add(endPointName + "." + ds.PointId, ds)
|
||||
continue
|
||||
}
|
||||
|
||||
if valueTypes.IsUnknownStruct(fieldVo.Interface()) {
|
||||
for si := 0; si < fieldVo.Len(); si++ {
|
||||
// Are we using an index number for name or field key value?
|
||||
pn := strconv.Itoa(si)
|
||||
n3 := append(n2, pn)
|
||||
if pointNameFromChild != "" {
|
||||
// PointNameFromChild - In this case points to a field within a CHILD struct.
|
||||
pn = GetPointNameFrom(fieldVo.Index(si).Interface(), pointNameFromChild, intSize, pointNameDateFormat)
|
||||
n3 = append(n2[:len(n2) - 1], pn)
|
||||
}
|
||||
if pointNameFromParent != "" {
|
||||
// PointNameFromChild - In this case points to a field within a CHILD struct.
|
||||
pn = GetPointNameFrom(fieldVo.Interface(), pointNameFromParent, intSize, pointNameDateFormat)
|
||||
n3 = append(n2[:len(n2) - 1], pn)
|
||||
}
|
||||
|
||||
dss.GetPointTags(fieldVo.Index(si).Interface(), fieldVo.Index(si).Interface(), n3...)
|
||||
}
|
||||
continue
|
||||
}
|
||||
|
||||
case reflect.Slice:
|
||||
// @TODO - Handle slicing here.
|
||||
// Will have to add more Point* tags.
|
||||
// Replicate the JoinWithDots 1st and 2nd arguments.
|
||||
// Flatten slice for []Integer / []Float objects.
|
||||
endPointName, ds := makeDataStructure(parentRef, fieldTo, fieldVo, name)
|
||||
ds.Value = valueTypes.AnyToValueString(fieldVo.Interface(), 0, "")
|
||||
dss.Add(endPointName + "." + ds.PointId, ds)
|
||||
|
||||
// This commented-out section can handle []Integer fields.
|
||||
// for si := 0; si < fieldVo.Len(); si++ {
|
||||
// // Are we using an index number for name or field key value?
|
||||
// pn := strconv.Itoa(si)
|
||||
// n3 := append(n2, pn)
|
||||
// if pointNameFromChild != "" {
|
||||
// // PointNameFromChild - In this case points to a field within a CHILD struct.
|
||||
// pn = GetPointNameFrom(fieldVo.Index(si).Interface(), pointNameFromChild, intSize, pointNameDateFormat)
|
||||
// n3 = append(n2[:len(n2) - 1], pn)
|
||||
// }
|
||||
// if pointNameFromParent != "" {
|
||||
// // PointNameFromChild - In this case points to a field within a CHILD struct.
|
||||
// pn = GetPointNameFrom(fieldVo.Interface(), pointNameFromParent, intSize, pointNameDateFormat)
|
||||
// n3 = append(n2[:len(n2) - 1], pn)
|
||||
// }
|
||||
//
|
||||
// if valueTypes.IsUnknownStruct(fieldVo.Index(si).Interface()) {
|
||||
// dss.GetPointTags(fieldVo.Index(si).Interface(), fieldVo.Index(si).Interface(), n3...)
|
||||
// continue
|
||||
// }
|
||||
//
|
||||
// // // We want to flatten a slice down to EG "[1, 2, 3]"
|
||||
// // endPointName, ds := makeDataStructure(parentRef, fieldTo, fieldVo, n2)
|
||||
// // ds.Value = valueTypes.AnyToValueString(fieldVo.Interface(), 0, "")
|
||||
// // dss.Add(endPointName + "." + pn, ds)
|
||||
// endPointName, ds := makeDataStructure(parentRef, fieldTo, fieldVo, n3)
|
||||
// // ds.Json = pointId + pn
|
||||
// ds.PointId = pn
|
||||
// val := fieldVo.Index(si)
|
||||
// ds.Value = val.Interface()
|
||||
// dss.Add(endPointName, ds)
|
||||
// }
|
||||
continue
|
||||
|
||||
case reflect.Array:
|
||||
// @TODO - Handle arrays here.
|
||||
// Adds more Point* tags - PointNameFromChild, PointNameDateFormat
|
||||
// Replicates the JoinWithDots 1st and 2nd arguments.
|
||||
// intSize int, dateFormat string
|
||||
// EG: PointSliceIntSize, PointSliceDateFormat
|
||||
if pointValueType == "" {
|
||||
pointValueType = reflect.Slice.String()
|
||||
// fmt.Printf("Kind: %s ##########################################\n", fieldVo.Kind().String())
|
||||
pointNameFromChild := fieldTo.Tag.Get(PointNameFromChild)
|
||||
pointNameFromParent := fieldTo.Tag.Get(PointNameFromParent)
|
||||
pointNameDateFormat := fieldTo.Tag.Get(PointNameDateFormat)
|
||||
intSize := valueTypes.SizeOfInt(fieldVo.Len())
|
||||
pointArrayFlatten := fieldTo.Tag.Get(PointArrayFlatten)
|
||||
n2 := append(name, pointId)
|
||||
|
||||
if pointArrayFlatten != "" {
|
||||
// We want to flatten a slice down to EG "[1, 2, 3]"
|
||||
endPointName, ds := makeDataStructure(parentRef, fieldTo, fieldVo, name)
|
||||
ds.Value = valueTypes.AnyToValueString(fieldVo.Interface(), 0, "")
|
||||
dss.Add(endPointName + "." + ds.PointId, ds)
|
||||
continue
|
||||
}
|
||||
|
||||
case reflect.Invalid:
|
||||
fallthrough
|
||||
case reflect.Bool:
|
||||
fallthrough
|
||||
case reflect.String:
|
||||
fallthrough
|
||||
case reflect.Float32:
|
||||
fallthrough
|
||||
case reflect.Float64:
|
||||
fallthrough
|
||||
case reflect.Int:
|
||||
fallthrough
|
||||
case reflect.Int8:
|
||||
fallthrough
|
||||
case reflect.Int16:
|
||||
fallthrough
|
||||
case reflect.Int32:
|
||||
fallthrough
|
||||
case reflect.Int64:
|
||||
fallthrough
|
||||
case reflect.Uint:
|
||||
fallthrough
|
||||
case reflect.Uint8:
|
||||
fallthrough
|
||||
case reflect.Uint16:
|
||||
fallthrough
|
||||
case reflect.Uint32:
|
||||
fallthrough
|
||||
case reflect.Uint64:
|
||||
fallthrough
|
||||
case reflect.Interface:
|
||||
// Pick up the unassigned types.
|
||||
if pointValueType == "" {
|
||||
pointValueType = reflect.Interface.String()
|
||||
for si := 0; si < fieldVo.Len(); si++ {
|
||||
// Are we using an index number for name or field key value?
|
||||
pn := strconv.Itoa(si)
|
||||
n3 := append(n2, pn)
|
||||
if pointNameFromChild != "" {
|
||||
// PointNameFromChild - In this case points to a field within a CHILD struct.
|
||||
pn = GetPointNameFrom(fieldVo.Index(si).Interface(), pointNameFromChild, intSize, pointNameDateFormat)
|
||||
n3 = append(n2[:len(n2) - 1], pn)
|
||||
}
|
||||
if pointNameFromParent != "" {
|
||||
// PointNameFromChild - In this case points to a field within a CHILD struct.
|
||||
pn = GetPointNameFrom(fieldVo.Interface(), pointNameFromParent, intSize, pointNameDateFormat)
|
||||
n3 = append(n2[:len(n2) - 1], pn)
|
||||
}
|
||||
|
||||
if valueTypes.IsUnknownStruct(fieldVo.Index(si).Interface()) {
|
||||
dss.GetPointTags(fieldVo.Index(si).Interface(), fieldVo.Index(si).Interface(), n3...)
|
||||
continue
|
||||
}
|
||||
|
||||
// // We want to flatten a slice down to EG "[1, 2, 3]"
|
||||
// endPointName, ds := makeDataStructure(parentRef, fieldTo, fieldVo, n2)
|
||||
// ds.Value = valueTypes.AnyToValueString(fieldVo.Interface(), 0, "")
|
||||
// dss.Add(endPointName + "." + pn, ds)
|
||||
endPointName, ds := makeDataStructure(parentRef, fieldTo, fieldVo, n3)
|
||||
// ds.Json = pointId + pn
|
||||
ds.PointId = pointId + pn
|
||||
val := fieldVo.Index(si)
|
||||
ds.Value = val.Interface()
|
||||
dss.Add(endPointName, ds)
|
||||
}
|
||||
|
||||
// @TODO - Can't quite figure out what to do here. So will just flatten the array.
|
||||
// for si := 0; si < fieldVo.Len(); si++ {
|
||||
// // Are we using an index number for name or field key value?
|
||||
// pn := strconv.Itoa(si)
|
||||
// n3 := append(name) // , pointId + pn)
|
||||
// if pointNameFrom != "" {
|
||||
// pn = GetPointNameFromChild(parentRef, pointNameFrom, intSize, pointNameDateFormat)
|
||||
// n3 = append(n2[:len(n2) - 1], pn)
|
||||
// }
|
||||
//
|
||||
// endPointName, ds := makeDataStructure(parentRef, fieldTo, fieldVo, n3)
|
||||
// // ds.Json = pointId + pn
|
||||
// ds.PointId = pointId + pn
|
||||
// val := fieldVo.Index(si)
|
||||
// ds.Value = val.Interface()
|
||||
// dss.Add(endPointName, ds)
|
||||
// }
|
||||
continue
|
||||
|
||||
case reflect.Map:
|
||||
// fmt.Printf("Kind: %s ##########################################\n", fieldVo.Kind().String())
|
||||
n2 := append(name, pointId)
|
||||
// pointNameFromChild := fieldTo.Tag.Get(PointNameFromChild)
|
||||
// pointNameFromParent := fieldTo.Tag.Get(PointNameFromParent)
|
||||
|
||||
for _, key := range fieldVo.MapKeys() {
|
||||
// @TODO - Implement this.
|
||||
// if pointNameFromChild != "" {
|
||||
// // PointNameFromChild - In this case points to a field within a CHILD struct.
|
||||
// pn = GetPointNameFrom(fieldVo.Index(si).Interface(), pointNameFromChild, intSize, pointNameDateFormat)
|
||||
// n3 = append(n2[:len(n2) - 1], pn)
|
||||
// }
|
||||
// if pointNameFromParent != "" {
|
||||
// // PointNameFromChild - In this case points to a field within a CHILD struct.
|
||||
// pn = GetPointNameFrom(fieldVo.Interface(), pointNameFromParent, intSize, pointNameDateFormat)
|
||||
// n3 = append(n2[:len(n2) - 1], pn)
|
||||
// }
|
||||
|
||||
endPointName, ds := makeDataStructure(fieldVo.Interface(), fieldTo, fieldVo, n2)
|
||||
ds.Json = key.String()
|
||||
ds.PointId = key.String()
|
||||
val := fieldVo.MapIndex(key)
|
||||
ds.Value = val.Interface()
|
||||
dss.Add(endPointName + "." + ds.PointId, ds)
|
||||
}
|
||||
continue
|
||||
|
||||
case reflect.Struct:
|
||||
// fmt.Printf("Kind: %s ##########################################\n", fieldVo.Kind().String())
|
||||
if valueTypes.IsUnknownStruct(fieldVo.Interface()) {
|
||||
n2 := append(name, pointId)
|
||||
dss.GetPointTags(parentRef, fieldVo.Interface(), n2...)
|
||||
continue
|
||||
}
|
||||
|
||||
// fmt.Printf("[%s.%s] => %v\n", strings.Join(name, "."), pointId, fieldVo.Interface())
|
||||
endPointName, ds := makeDataStructure(parentRef, fieldTo, fieldVo, name)
|
||||
ds.Value = fieldVo.Interface()
|
||||
dss.Add(endPointName + "." + ds.PointId, ds)
|
||||
continue
|
||||
}
|
||||
|
||||
if !fieldTo.IsExported() {
|
||||
fmt.Printf("DEBUG: NOTEXPORTED(%s): %s\n", fieldTo.Name, fieldTo.Tag.Get("json"))
|
||||
endPointName, ds := makeDataStructure(parentRef, fieldTo, fieldVo, name)
|
||||
ds.Value = fieldVo.Interface()
|
||||
dss.Add(endPointName + "." + ds.PointId, ds)
|
||||
}
|
||||
}
|
||||
|
||||
return *dss
|
||||
}
|
||||
|
||||
func GetUnitFrom(ref interface{}, pointUnitFrom string) string {
|
||||
var ret string
|
||||
for range Only.Once {
|
||||
vo := reflect.ValueOf(ref)
|
||||
if vo.Kind() != reflect.Struct {
|
||||
break
|
||||
}
|
||||
|
||||
// Iterate over all available fields, looking for the field name.
|
||||
for i := 0; i < vo.NumField(); i++ {
|
||||
if vo.Type().Field(i).Name != pointUnitFrom {
|
||||
continue
|
||||
}
|
||||
|
||||
endPointName := strings.Join(name, ".")
|
||||
pointName := strings.TrimPrefix(endPointName + "." + pointId, ".")
|
||||
ds := DataStructure {
|
||||
Json: pointJson,
|
||||
PointId: pointId,
|
||||
// PointType: fieldTo.Tag.Get(PointType),
|
||||
PointUnit: fieldTo.Tag.Get(PointUnit),
|
||||
PointUnitFrom: fieldTo.Tag.Get(PointUnitFrom),
|
||||
PointDevice: fieldTo.Tag.Get(PointDevice),
|
||||
PointName: fieldTo.Tag.Get(PointName),
|
||||
PointTimeSpan: fieldTo.Tag.Get(PointTimeSpan),
|
||||
PointValueType: pointValueType,
|
||||
PointAlias: fieldTo.Tag.Get(PointAlias),
|
||||
PointGroupName: fieldTo.Tag.Get(PointGroupName),
|
||||
PointIgnore: ignore,
|
||||
|
||||
Value: fieldVo.Interface(),
|
||||
ValueType: fieldTo.Type.String(),
|
||||
ValueKind: fieldVo.Kind().String(),
|
||||
Endpoint: endPointName,
|
||||
}
|
||||
ret[pointName] = ds
|
||||
// fmt.Printf("GetUnitFrom: %v\n", fieldVo.Interface())
|
||||
ret = valueTypes.AnyToValueString(vo.Field(i).Interface(), 0, "")
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
func (dsm *DataStructureMap) GetUnitFrom(ref ...string) string {
|
||||
func GetGroupNameFrom(ref interface{}, pointGroupNameFrom string) string {
|
||||
var ret string
|
||||
for range Only.Once {
|
||||
r := strings.Join(ref, ".")
|
||||
if s, ok := (*dsm)[r]; ok {
|
||||
ret = s.PointUnit
|
||||
vo := reflect.ValueOf(ref)
|
||||
if vo.Kind() != reflect.Struct {
|
||||
break
|
||||
}
|
||||
|
||||
//
|
||||
// Iterate over all available fields, looking for the field name.
|
||||
for i := 0; i < vo.NumField(); i++ {
|
||||
if vo.Type().Field(i).Name != pointGroupNameFrom {
|
||||
continue
|
||||
}
|
||||
|
||||
// fmt.Printf("GetGroupNameFrom: %v\n", fieldVo.Interface())
|
||||
ret = valueTypes.AnyToValueString(vo.Field(i).Interface(), 0, "")
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
func GetTimestampFrom(ref interface{}, pointTimestampFrom string, dateFormat string) time.Time {
|
||||
var ret time.Time
|
||||
for range Only.Once {
|
||||
vo := reflect.ValueOf(ref)
|
||||
if vo.Kind() != reflect.Struct {
|
||||
break
|
||||
}
|
||||
|
||||
// Iterate over all available fields, looking for the field name.
|
||||
for i := 0; i < vo.NumField(); i++ {
|
||||
if vo.Type().Field(i).Name != pointTimestampFrom {
|
||||
continue
|
||||
}
|
||||
|
||||
// fmt.Printf("GetTimestampFrom: %v\n", fieldVo.Interface())
|
||||
foo2 := fmt.Sprintf("%v", vo.Field(i).Interface())
|
||||
ret = valueTypes.SetDateTimeString(foo2).Time
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
func GetPointNameFrom(ref interface{}, pointNameFrom string, intSize int, dateFormat string) string {
|
||||
var ret string
|
||||
for range Only.Once {
|
||||
vo := reflect.ValueOf(ref)
|
||||
if vo.Kind() != reflect.Struct {
|
||||
break
|
||||
}
|
||||
|
||||
// Iterate over all available fields, looking for the field name.
|
||||
for i := 0; i < vo.NumField(); i++ {
|
||||
if vo.Type().Field(i).Name != pointNameFrom {
|
||||
continue
|
||||
}
|
||||
|
||||
// fmt.Printf("GetPointNameFrom: %v\n", fieldVo.Interface())
|
||||
ret = valueTypes.AnyToValueString(vo.Field(i).Interface(), intSize, dateFormat)
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
func makeDataStructure(parentRef interface{}, fieldTo reflect.StructField, fieldVo reflect.Value, name []string) (string, DataStructure) {
|
||||
var endpoint string
|
||||
var ds DataStructure
|
||||
|
||||
for range Only.Once {
|
||||
if !fieldTo.IsExported() {
|
||||
fmt.Printf("DEBUG: NOTEXPORTED(%s): %s\n", fieldTo.Name, fieldTo.Tag.Get("json"))
|
||||
break
|
||||
}
|
||||
|
||||
ignore := false
|
||||
if fieldTo.Tag.Get(PointIgnore) != "" {
|
||||
ignore = true
|
||||
}
|
||||
|
||||
// if valueTypes.IsNil(ref) {
|
||||
// pointValueType = "NIL"
|
||||
// }
|
||||
|
||||
pointJson := fieldTo.Tag.Get("json")
|
||||
pointId := fieldTo.Tag.Get(PointId)
|
||||
if pointId == "" {
|
||||
pointId = pointJson
|
||||
}
|
||||
|
||||
pointValueType := fieldTo.Tag.Get(PointValueType)
|
||||
if pointValueType == "" {
|
||||
// pointValueType = fieldVo.Kind().String()
|
||||
}
|
||||
|
||||
pointUnit := fieldTo.Tag.Get(PointUnit)
|
||||
pointUnitFrom := fieldTo.Tag.Get(PointUnitFrom)
|
||||
if pointUnitFrom != "" {
|
||||
pointUnit = GetUnitFrom(parentRef, pointUnitFrom)
|
||||
}
|
||||
|
||||
pointGroupName := fieldTo.Tag.Get(PointGroupName)
|
||||
pointGroupNameFrom := fieldTo.Tag.Get(PointGroupNameFrom)
|
||||
if pointGroupNameFrom != "" {
|
||||
pointGroupName = GetGroupNameFrom(parentRef, pointGroupNameFrom)
|
||||
}
|
||||
|
||||
pointTimestamp := time.Now()
|
||||
pointTimestampFrom := fieldTo.Tag.Get(PointTimestampFrom)
|
||||
if pointTimestampFrom != "" {
|
||||
pointTimestamp = GetTimestampFrom(parentRef, pointTimestampFrom, valueTypes.DateTimeLayout)
|
||||
}
|
||||
|
||||
endpoint = strings.TrimPrefix(strings.Join(name, "."), ".")
|
||||
|
||||
ds = DataStructure {
|
||||
// PointType: fieldTo.Tag.Get(PointType),
|
||||
Json: pointJson,
|
||||
PointId: pointId,
|
||||
PointParentId: fieldTo.Tag.Get(PointParentId),
|
||||
|
||||
PointUnit: pointUnit,
|
||||
PointUnitFrom: pointUnitFrom,
|
||||
|
||||
PointTimestamp: pointTimestamp,
|
||||
PointTimestampFrom: pointTimestampFrom,
|
||||
|
||||
PointGroupName: pointGroupName,
|
||||
PointGroupNameFrom: pointGroupNameFrom,
|
||||
|
||||
PointName: fieldTo.Tag.Get(PointName),
|
||||
PointUpdateFreq: fieldTo.Tag.Get(PointUpdateFreq),
|
||||
PointValueType: pointValueType,
|
||||
PointAliasTo: fieldTo.Tag.Get(PointAliasTo),
|
||||
PointIgnore: ignore,
|
||||
Value: nil,
|
||||
ValueType: fieldTo.Type.String(),
|
||||
ValueKind: fieldVo.Kind().String(),
|
||||
Endpoint: endpoint,
|
||||
}
|
||||
}
|
||||
|
||||
return endpoint, ds
|
||||
}
|
||||
|
||||
// func (dss *DataStructures) GetUnitFrom(ref ...string) string {
|
||||
// var ret string
|
||||
// for range Only.Once {
|
||||
// r := strings.Join(ref, ".")
|
||||
// if s, ok := dss.Map[r]; ok {
|
||||
// ret = s.PointUnit
|
||||
// }
|
||||
// }
|
||||
// return ret
|
||||
// }
|
||||
//
|
||||
// func (dss *DataStructures) GetPointGroupNameFrom(ref ...string) string {
|
||||
// var ret string
|
||||
// for range Only.Once {
|
||||
// r := strings.Join(ref, ".")
|
||||
// if s, ok := dss.Map[r]; ok {
|
||||
// ret = s.PointUnit
|
||||
// }
|
||||
// }
|
||||
// return ret
|
||||
// }
|
||||
|
||||
|
||||
// GetArea Return an Area name if we are given an Area or EndPoint struct.
|
||||
func GetArea(trim string, v interface{}) string {
|
||||
@ -861,7 +1222,7 @@ func GetStructKeys(ref interface{}, keys ...string) StructKeys {
|
||||
case "int64":
|
||||
value = strconv.FormatInt(k.Value().(int64), 10)
|
||||
case "float64":
|
||||
value = strconv.FormatFloat(k.Value().(float64), 'f', 6, 64)
|
||||
value = strconv.FormatFloat(k.Value().(float64), 'f', -1, 64)
|
||||
default:
|
||||
j, e := json.Marshal(k.Value())
|
||||
if e == nil {
|
||||
|
@ -7,3 +7,105 @@ const (
|
||||
NullEndPointName = "NullEndpoint"
|
||||
DefaultTimeout = time.Second * 60
|
||||
)
|
||||
|
||||
const (
|
||||
DeviceType1 = "Inverter"
|
||||
DeviceType10 = "String"
|
||||
DeviceType11 = "Plant"
|
||||
DeviceType12 = "Circuit Protection"
|
||||
DeviceType13 = "Splitting Device"
|
||||
DeviceType14 = "Energy Storage System"
|
||||
DeviceType15 = "Sampling Device"
|
||||
DeviceType16 = "EMU"
|
||||
DeviceType17 = "Unit"
|
||||
DeviceType18 = "Temperature and Humidity Sensor"
|
||||
DeviceType19 = "Intelligent Power Distribution Cabinet"
|
||||
DeviceType20 = "Display Device"
|
||||
DeviceType21 = "AC Power Distributed Cabinet"
|
||||
DeviceType22 = "Communication Module"
|
||||
DeviceType23 = "System-BMS"
|
||||
DeviceType24 = "RackBMS"
|
||||
DeviceType25 = "DC-DC"
|
||||
DeviceType26 = "Energy Management System"
|
||||
DeviceType28 = "Wind Energy Converter"
|
||||
DeviceType29 = "SVG"
|
||||
DeviceType3 = "Grid-connection Point"
|
||||
DeviceType30 = "PT Cabinet"
|
||||
DeviceType31 = "Bus Protection"
|
||||
DeviceType32 = "Cleaning Robot"
|
||||
DeviceType33 = "Direct Current Cabinet"
|
||||
DeviceType34 = "Public Measurement and Control"
|
||||
DeviceType35 = "Anti-islanding Protection Device"
|
||||
DeviceType36 = "Frequency and Voltage Emergency Control Device"
|
||||
DeviceType37 = "PCS"
|
||||
DeviceType38 = "Cell BMS"
|
||||
DeviceType39 = "Power Quality"
|
||||
DeviceType4 = "Combiner Box"
|
||||
DeviceType40 = "Shuttle"
|
||||
DeviceType41 = "Optimizer"
|
||||
DeviceType42 = "Tracking axis communication box"
|
||||
DeviceType43 = "Battery"
|
||||
DeviceType44 = "Battery Cluster Management Unit"
|
||||
DeviceType45 = "Local Controller"
|
||||
DeviceType46 = "Networking Devices"
|
||||
DeviceType47 = "Energy Storage Unit"
|
||||
DeviceType48 = "DC Container"
|
||||
DeviceType5 = "Meteo Station"
|
||||
DeviceType50 = "IO Module"
|
||||
DeviceType6 = "Transformer"
|
||||
DeviceType7 = "Meter"
|
||||
DeviceType8 = "UPS"
|
||||
DeviceType9 = "Data Logger"
|
||||
DeviceType99 = "Others"
|
||||
)
|
||||
|
||||
const (
|
||||
DeviceNameInverter=1
|
||||
DeviceNameString=10
|
||||
DeviceNamePlant=11
|
||||
DeviceNameCircuitProtection=12
|
||||
DeviceNameSplittingDevice=13
|
||||
DeviceNameEnergyStorageSystem=14
|
||||
DeviceNameSamplingDevice=15
|
||||
DeviceNameEMU=16
|
||||
DeviceNameUnit=17
|
||||
DeviceNameTemperatureAndHumiditySensor=18
|
||||
DeviceNameIntelligentPowerDistributionCabinet=19
|
||||
DeviceNameDisplayDevice=20
|
||||
DeviceNameACPowerDistributedCabinet=21
|
||||
DeviceNameCommunicationModule=22
|
||||
DeviceNameSystemBMS=23
|
||||
DeviceNameRackBMS=24
|
||||
DeviceNameDCToDC=25
|
||||
DeviceNameEnergyManagementSystem=26
|
||||
DeviceNameWindEnergyConverter=28
|
||||
DeviceNameSVG=29
|
||||
DeviceNameGridConnectionPoint=3
|
||||
DeviceNamePTCabinet=30
|
||||
DeviceNameBusProtection=31
|
||||
DeviceNameCleaningRobot=32
|
||||
DeviceNameDirectCurrentCabinet=33
|
||||
DeviceNamePublicMeasurementandControl=34
|
||||
DeviceNameAntiIslandingProtectionDevice=35
|
||||
DeviceNameFrequencyAndVoltageEmergencyControlDevice=36
|
||||
DeviceNamePCS=37
|
||||
DeviceNameCellBMS=38
|
||||
DeviceNamePowerQuality=39
|
||||
DeviceNameCombinerBox=4
|
||||
DeviceNameShuttle=40
|
||||
DeviceNameOptimizer=41
|
||||
DeviceNameTrackingAxisCommunicationBox=42
|
||||
DeviceNameBattery=43
|
||||
DeviceNameBatteryClusterManagementUnit=44
|
||||
DeviceNameLocalController=45
|
||||
DeviceNameNetworkingDevices=46
|
||||
DeviceNameEnergyStorageUnit=47
|
||||
DeviceNameDCContainer=48
|
||||
DeviceNameMeteoStation=5
|
||||
DeviceNameIOModule=50
|
||||
DeviceNameTransformer=6
|
||||
DeviceNameMeter=7
|
||||
DeviceNameUPS=8
|
||||
DeviceNameDataLogger=9
|
||||
DeviceNameOthers=99
|
||||
)
|
662
iSolarCloud/api/legacy.go
Normal file
662
iSolarCloud/api/legacy.go
Normal file
@ -0,0 +1,662 @@
|
||||
package api
|
||||
|
||||
|
||||
// From struct_data.go
|
||||
|
||||
// func (dm *DataMap) GetEntry(entry string, index int) *DataEntry {
|
||||
// var ret *DataEntry
|
||||
// for range Only.Once {
|
||||
// pe := dm.Map[entry]
|
||||
// if pe.Entries != nil {
|
||||
// ret = pe.GetEntry(index)
|
||||
// break
|
||||
// }
|
||||
//
|
||||
// for k, v := range dm.Map {
|
||||
// if strings.HasSuffix(k, "." + entry) {
|
||||
// ret = v.GetEntry(index)
|
||||
// break
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// return ret
|
||||
// }
|
||||
//
|
||||
// func (dm *DataMap) GetFloatValue(entry string, index int) float64 {
|
||||
// var ret float64
|
||||
// for range Only.Once {
|
||||
// pe := dm.GetEntry(entry, index)
|
||||
// if pe.IsNotValid() {
|
||||
// fmt.Printf("ERROR: GetFloatValue('%s', '%d')\n", entry, index)
|
||||
// break
|
||||
// }
|
||||
// ret = pe.Value.ValueFloat()
|
||||
// }
|
||||
// return ret
|
||||
// }
|
||||
//
|
||||
// func (dm *DataMap) GetValue(entry string, index int) float64 {
|
||||
// var ret float64
|
||||
// for range Only.Once {
|
||||
// v := dm.GetEntry(entry, index)
|
||||
// if v.IsNotValid() {
|
||||
// fmt.Printf("ERROR: GetValue('%s', %d)\n", entry, index)
|
||||
// break
|
||||
// }
|
||||
//
|
||||
// ret = v.Value.ValueFloat()
|
||||
// }
|
||||
// return ret
|
||||
// }
|
||||
//
|
||||
// func (dm *DataMap) GetEntryFromPointId(pointId string) *DataEntries {
|
||||
// var ret *DataEntries
|
||||
// for range Only.Once {
|
||||
// for i, v := range dm.Map {
|
||||
// if v.MatchPointId(pointId) {
|
||||
// ret = dm.Map[i]
|
||||
// break
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// return ret
|
||||
// }
|
||||
//
|
||||
// func (dm *DataMap) SetEntryUnits(pointId string, unit string) {
|
||||
// for range Only.Once {
|
||||
// for i, v := range dm.Map {
|
||||
// if v.MatchPointId(pointId) {
|
||||
// // e := dm.Map[i]
|
||||
// // dm.Map[i] = e.SetUnits(unit)
|
||||
// dm.Map[i].SetUnits(unit)
|
||||
// break
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// func (dm *DataMap) SetEntryGroupName(pointId string, groupName string) {
|
||||
// for range Only.Once {
|
||||
// for i, v := range dm.Map {
|
||||
// if v.MatchPointId(pointId) {
|
||||
// // e := dm.Map[i]
|
||||
// // dm.Map[i] = e.SetGroupName(groupName)
|
||||
// dm.Map[i].SetGroupName(groupName)
|
||||
// break
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// func (dm *DataMap) SetEntryTimestamp(pointId string, timeStamp valueTypes.DateTime) {
|
||||
// for range Only.Once {
|
||||
// for i, v := range dm.Map {
|
||||
// if v.MatchPointId(pointId) {
|
||||
// // e := dm.Map[i]
|
||||
// // dm.Map[i] = e.SetTimestamp(timeStamp)
|
||||
// dm.Map[i].SetTimestamp(timeStamp)
|
||||
// break
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// func (dm *DataMap) FromRefAddAlias(ref string, parentId string, pid string, name string) {
|
||||
// for range Only.Once {
|
||||
// pe := dm.GetEntry(ref, 0)
|
||||
// if pe.IsNotValid() {
|
||||
// fmt.Printf("ERROR: FromRefAddAlias('%s', '%s', '%s', '%s')\n", ref, parentId, pid, name)
|
||||
// break
|
||||
// }
|
||||
//
|
||||
// de := CopyDataEntry(*pe, pe.EndPoint, parentId, valueTypes.SetPointIdString(pid), name, pe.Point.GroupName, pe.Point.Unit, pe.Point.ValueType)
|
||||
// dm.Add(de)
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// func (dm *DataMap) FromRefAddState(ref string, parentId string, pid string, name string) {
|
||||
// for range Only.Once {
|
||||
// pe := dm.GetEntry(ref, 0)
|
||||
// if pe.IsNotValid() {
|
||||
// fmt.Printf("ERROR: FromRefAddState('%s', '%s', '%s', '%s')\n", ref, parentId, pid, name)
|
||||
// break
|
||||
// }
|
||||
//
|
||||
// de := CopyDataEntry(*pe, pe.EndPoint, parentId, valueTypes.SetPointIdString(pid), name, pe.Point.GroupName, pe.Point.Unit, pe.Point.ValueType)
|
||||
// de.MakeState(pe.Value.ValueBool())
|
||||
// // de := pe.CreateState(pe.EndPoint, parentId, valueTypes.SetPointIdString(pid), name)
|
||||
// dm.Add(de)
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// func (dm *DataMap) FromRefAddFloat(ref string, parentId string, pid string, name string, value float64) {
|
||||
// for range Only.Once {
|
||||
// pe := dm.GetEntry(ref, 0)
|
||||
// if pe.IsNotValid() {
|
||||
// fmt.Printf("ERROR: FromRefAddFloat('%s', '%s', '%s', '%s')\n", ref, parentId, pid, name)
|
||||
// break
|
||||
// }
|
||||
//
|
||||
// de := CopyDataEntry(*pe, pe.EndPoint, parentId, valueTypes.SetPointIdString(pid), name, pe.Point.GroupName, pe.Point.Unit, pe.Point.ValueType)
|
||||
// de.MakeFloat(value, "", "")
|
||||
// // de := pe.CreateFloat(pe.EndPoint, parentId, valueTypes.SetPointIdString(pid), name, value)
|
||||
// dm.Add(de)
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// func CopyDataEntry(ref DataEntry, endpoint string, parentId string, pid valueTypes.PointId, name string, groupName string, unit string, Type string) DataEntry {
|
||||
// var ret DataEntry
|
||||
// for range Only.Once {
|
||||
// if name == "" {
|
||||
// name = pid.PointToName()
|
||||
// }
|
||||
//
|
||||
// point := CopyPoint(*ref.Point, parentId, pid, name, groupName, unit, Type)
|
||||
// // point = &Point {
|
||||
// // Parents: de.Point.Parents,
|
||||
// // Id: pid,
|
||||
// // GroupName: "alias",
|
||||
// // Name: name,
|
||||
// // Unit: de.Point.Unit,
|
||||
// // UpdateFreq: de.Point.UpdateFreq,
|
||||
// // ValueType: de.Point.ValueType,
|
||||
// // Valid: true,
|
||||
// // States: de.Point.States,
|
||||
// // }
|
||||
// // var parent ParentDevice
|
||||
// // parent.Set(parentId)
|
||||
// // point.Parents.Add(parent)
|
||||
// // point.Unit = "binary"
|
||||
// // if point.Unit == "" {
|
||||
// // point.Unit = ref.Unit()
|
||||
// // }
|
||||
// // point.Name = name
|
||||
// // if point.Name == "" {
|
||||
// // point.Name = pid.PointToName()
|
||||
// // }
|
||||
// // // if de2.Point.GroupName == "" {
|
||||
// // // de2.Point.GroupName = groupName
|
||||
// // // }
|
||||
// // point.FixUnitType()
|
||||
// // point.Valid = true
|
||||
//
|
||||
// ret.Point = point
|
||||
// ret.EndPoint = endpoint
|
||||
// ret.Parent.Set(parentId)
|
||||
// ret.Valid = true
|
||||
// ret.Hide = false
|
||||
// }
|
||||
//
|
||||
// return ret
|
||||
// }
|
||||
//
|
||||
// func CopyPoint(ref Point, parentId string, pid valueTypes.PointId, name string, groupName string, unit string, Type string) *Point {
|
||||
// for range Only.Once {
|
||||
// if name == "" {
|
||||
// name = pid.PointToName()
|
||||
// }
|
||||
//
|
||||
// var parent ParentDevice
|
||||
// parent.Set(parentId)
|
||||
// ref.Parents.Add(parent)
|
||||
// ref.Id = pid
|
||||
// ref.Unit = unit
|
||||
// ref.Name = name
|
||||
// ref.UpdateFreq = ""
|
||||
// ref.GroupName = groupName
|
||||
// ref.ValueType = Type
|
||||
// ref.Valid = true
|
||||
// ref.States = nil
|
||||
//
|
||||
// ref.FixUnitType()
|
||||
// }
|
||||
//
|
||||
// return &ref
|
||||
// }
|
||||
//
|
||||
// func (dm *DataMap) HideEntry(pointId valueTypes.PointId) {
|
||||
// for range Only.Once {
|
||||
// de := dm.GetEntryFromPointId(pointId)
|
||||
// de.Hide()
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// func (dm *DataMap) AddEntry(endpoint string, parentId string, point Point, date valueTypes.DateTime, value string) {
|
||||
// for range Only.Once {
|
||||
// unit := point.Unit // Save unit.
|
||||
// vType := point.ValueType // Save type.
|
||||
//
|
||||
// // Match to a previously defined point.
|
||||
// p := GetPoint(point.Id.String())
|
||||
// if p != nil {
|
||||
// // No point found. Create one.
|
||||
// p = CreatePoint(parentId, pid, name, groupName, unit, Type)
|
||||
// }
|
||||
// point = *p
|
||||
//
|
||||
// // var parents ParentDevices
|
||||
// // parents.Add(ParentDevice{Key: device})
|
||||
// var parent ParentDevice
|
||||
// parent.Set(parentId)
|
||||
// point.Parents.Add(parent)
|
||||
//
|
||||
// if point.Name == "" {
|
||||
// point.Name = point.Id.PointToName()
|
||||
// }
|
||||
// // fid := JoinDevicePoint(parent.Key, point.Id)
|
||||
// ref := valueTypes.SetUnitValueString(value, unit, vType)
|
||||
// point.Unit = ref.Unit()
|
||||
// point.Valid = true
|
||||
//
|
||||
// if _, ok := dm.DataPoints[point.Id.String()]; ok {
|
||||
// fmt.Printf("BARF: %s\n", point.Id)
|
||||
// }
|
||||
//
|
||||
// // dm.Add(JoinDevicePoint(endpoint, point.Id), DataEntry {
|
||||
// dm.Add(DataEntry {
|
||||
// EndPoint: endpoint,
|
||||
// // FullId: valueTypes.JoinDataPoint(endpoint, point.Id.String()),
|
||||
// // FullId: JoinDevicePoint(parent.Key, point.Id),
|
||||
// Parent: parent,
|
||||
//
|
||||
// Point: &point,
|
||||
// Date: date,
|
||||
// Value: ref.String(),
|
||||
// ValueFloat: ref.Value(),
|
||||
// ValueBool: ref.ValueBool(),
|
||||
// Index: 0,
|
||||
// Valid: true,
|
||||
// Hide: false,
|
||||
// })
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// func (dm *DataMap) AddUnitValue(endpoint string, parentId string, pid valueTypes.PointId, name string, groupName string, date valueTypes.DateTime, ref valueTypes.UnitValue) {
|
||||
// for range Only.Once {
|
||||
// if endpoint == "" {
|
||||
// endpoint = apiReflect.GetCallerPackage(2)
|
||||
// }
|
||||
//
|
||||
// ref = ref.UnitValueFix()
|
||||
//
|
||||
// if name == "" {
|
||||
// name = pid.PointToName()
|
||||
// }
|
||||
//
|
||||
// point := GetPoint(pid.String())
|
||||
// if point == nil {
|
||||
// // No point found. Create one.
|
||||
// point = CreatePoint(parentId, pid, name, groupName, ref.Unit(), ref.Type())
|
||||
// // de := CreateDataEntry(endpoint, parentId, pid, name, groupName, date, ref)
|
||||
// // dm.Add(de)
|
||||
// // break
|
||||
// }
|
||||
//
|
||||
// var parent ParentDevice
|
||||
// parent.Set(parentId)
|
||||
// point.Parents.Add(parent)
|
||||
// if point.Unit == "" {
|
||||
// point.Unit = ref.Unit()
|
||||
// }
|
||||
// if point.Name == "" {
|
||||
// point.Name = name
|
||||
// }
|
||||
// if point.Name == "" {
|
||||
// point.Name = pid.PointToName()
|
||||
// }
|
||||
// if point.GroupName == "" {
|
||||
// point.GroupName = groupName
|
||||
// }
|
||||
// point.FixUnitType()
|
||||
// point.Valid = true
|
||||
//
|
||||
// dm.Add(DataEntry {
|
||||
// EndPoint: endpoint,
|
||||
// // FullId: valueTypes.JoinDataPoint(endpoint, point.Id.String()),
|
||||
// // FullId: JoinDevicePoint(parent.Key, point.Id),
|
||||
// Parent: parent,
|
||||
//
|
||||
// Point: point,
|
||||
// Date: date,
|
||||
// Value: ref.String(),
|
||||
// ValueFloat: ref.Value(),
|
||||
// ValueBool: ref.ValueBool(),
|
||||
// Index: 0,
|
||||
// Valid: true,
|
||||
// Hide: false,
|
||||
// })
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// func (dm *DataMap) AddFloat(endpoint string, parentId string, pid PointId, name string, date valueTypes.DateTime, value float64) {
|
||||
// for range Only.Once {
|
||||
// // fvs := Float64ToString(value)
|
||||
// point := GetPoint(parentId, pid)
|
||||
// if point == nil {
|
||||
// // No UV found. Create one.
|
||||
// dm.Add(pid, CreateDataEntryUnitValue(date, endpoint, parentId, pid, name, valueTypes.SetUnitValueFloat(value, point.Unit, point.ValueType)))
|
||||
// break
|
||||
// }
|
||||
//
|
||||
// ref := valueTypes.SetUnitValueFloat(value, point.Unit, point.ValueType)
|
||||
// if ref.Unit() != point.Unit {
|
||||
// fmt.Printf("OOOPS: Unit mismatch - %f %s != %f %s\n", value, point.Unit, ref.ValueFloat(), ref.Unit())
|
||||
// point.Unit = ref.Unit()
|
||||
// }
|
||||
//
|
||||
// var parent ParentDevice
|
||||
// parent.Set(parentId)
|
||||
// point.Parents.Add(parent)
|
||||
//
|
||||
// dm.Add(pid, DataEntry {
|
||||
// EndPoint: endpoint,
|
||||
// FullId: JoinDevicePoint(endpoint, point.Id),
|
||||
// // FullId: JoinDevicePoint(parent.Key, point.Id),
|
||||
// Parent: parent,
|
||||
//
|
||||
// Date: date,
|
||||
// Point: point,
|
||||
// Value: ref.String(),
|
||||
// ValueFloat: ref.Value(),
|
||||
// })
|
||||
// }
|
||||
//
|
||||
// uv := valueTypes.SetUnitValueFloat(value, "", "float")
|
||||
// de := CreateDataEntryUnitValue(date, endpoint, parentId, pid, name, uv)
|
||||
// // de := CreateDataEntryUnitValue(date, endpoint, parentId, pid, name, UnitValue {
|
||||
// // Unit: "float",
|
||||
// // Value: fmt.Sprintf("%f", value),
|
||||
// // ValueFloat: 0,
|
||||
// // })
|
||||
// dm.Add(pid, de)
|
||||
// }
|
||||
//
|
||||
// func (dm *DataMap) AddString(endpoint string, parentId string, pid PointId, name string, date valueTypes.DateTime, value string) {
|
||||
// dm.Add(pid, CreateDataEntryString(date, endpoint, parentId, pid, name, value))
|
||||
// }
|
||||
//
|
||||
// func (dm *DataMap) AddInt(endpoint string, parentId string, pid PointId, name string, date valueTypes.DateTime, value int64) {
|
||||
//
|
||||
// for range Only.Once {
|
||||
// uvs, ok := valueTypes.AnyToUnitValue(value, "", "")
|
||||
// if !ok {
|
||||
// fmt.Printf("ERROR: AddInt(endpoint '%s', parentId '%s', pid '%s', name '%s', date '%s', value %d)",
|
||||
// endpoint, parentId, pid, name, date, value)
|
||||
// break
|
||||
// }
|
||||
// for _, uv := range uvs {
|
||||
// de := CreateDataEntryUnitValue(date, endpoint, parentId, pid, name, uv)
|
||||
// dm.Add(pid, de)
|
||||
// }
|
||||
//
|
||||
// // uv := valueTypes.SetUnitValueInteger(value, "", "int")
|
||||
// // de := CreateDataEntryUnitValue(date, endpoint, parentId, pid, name, uv)
|
||||
// // // de := CreateDataEntryUnitValue(date, endpoint, parentId, pid, name, UnitValue {
|
||||
// // // Unit: "int",
|
||||
// // // Value: fmt.Sprintf("%d", value),
|
||||
// // // ValueFloat: float64(value),
|
||||
// // // })
|
||||
// // dm.Add(pid, de)
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// func (dm *DataMap) AddAny(endpoint string, parentId string, pid valueTypes.PointId, name string, date valueTypes.DateTime, value interface{}) {
|
||||
//
|
||||
// for range Only.Once {
|
||||
// uvs, isNil, ok := valueTypes.AnyToUnitValue(value, "", "")
|
||||
// if !ok {
|
||||
// fmt.Printf("ERROR: AddAny(endpoint '%s', parentId '%s', pid '%s', name '%s', date '%s', value '%v')",
|
||||
// endpoint, parentId, pid, name, date, value)
|
||||
// break
|
||||
// }
|
||||
//
|
||||
// point := GetPoint(parentId + "." + pid.String())
|
||||
// if point == nil {
|
||||
// // No UV found. Create one.
|
||||
// for _, uv := range uvs {
|
||||
// de := CreateDataEntryUnitValue(date, endpoint, parentId, pid, name, uv)
|
||||
// if isNil {
|
||||
// de.Point.ValueType += "(NIL)"
|
||||
// }
|
||||
// dm.Add(de)
|
||||
// }
|
||||
// // dm.Add(pid, CreateDataEntryUnitValue(date, endpoint, parentId, pid, name,
|
||||
// // valueTypes.SetUnitValueFloat(value, point.Unit, point.ValueType)))
|
||||
// break
|
||||
// }
|
||||
//
|
||||
// // ref := valueTypes.SetUnitValueFloat(value, point.Unit, point.ValueType)
|
||||
// // if ref.Unit() != point.Unit {
|
||||
// // fmt.Printf("OOOPS: Unit mismatch - %f %s != %f %s\n", value, point.Unit, ref.ValueFloat(), ref.Unit())
|
||||
// // point.Unit = ref.Unit()
|
||||
// // }
|
||||
//
|
||||
// if isNil {
|
||||
// point.ValueType += "(NIL)"
|
||||
// }
|
||||
//
|
||||
// for _, uv := range uvs {
|
||||
// if uv.Unit() != point.Unit {
|
||||
// fmt.Printf("OOOPS: Unit mismatch - %f %s != %f %s\n", value, point.Unit, uv.ValueFloat(), uv.Unit())
|
||||
// point.Unit = uv.Unit()
|
||||
// }
|
||||
//
|
||||
// var parent ParentDevice
|
||||
// parent.Set(parentId)
|
||||
// point.Parents.Add(parent)
|
||||
//
|
||||
// // CreateDataEntry
|
||||
// de := DataEntry {
|
||||
// EndPoint: endpoint,
|
||||
// // FullId: valueTypes.JoinDataPoint(endpoint, point.Id.String()),
|
||||
// Parent: parent,
|
||||
//
|
||||
// Date: date,
|
||||
// Point: point,
|
||||
// Value: uv.String(),
|
||||
// ValueFloat: uv.Value(),
|
||||
// ValueBool: uv.ValueBool(),
|
||||
// Index: 0,
|
||||
// Valid: true,
|
||||
// Hide: false,
|
||||
// }
|
||||
// dm.Add(de)
|
||||
// }
|
||||
//
|
||||
// for _, uv := range uvs {
|
||||
// de := CreateDataEntryUnitValue(date, endpoint, parentId, pid, name, uv)
|
||||
// dm.Add(de)
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// func (de *DataEntry) CreateFloat(endpoint string, parentId string, pid valueTypes.PointId, name string, groupName string, unit string, Type string, value float64) DataEntry {
|
||||
// var ret DataEntry
|
||||
// for range Only.Once {
|
||||
// if name == "" {
|
||||
// name = pid.PointToName()
|
||||
// }
|
||||
//
|
||||
// ret = de.CreateDataEntry(endpoint, parentId, pid, name, groupName, unit, Type)
|
||||
// uv := valueTypes.SetUnitValueFloat(value, ret.Point.Unit, ret.Point.ValueType)
|
||||
// ret.Value = uv.String()
|
||||
// ret.ValueFloat = uv.Value()
|
||||
// ret.Valid = true
|
||||
// ret.Hide = false
|
||||
// }
|
||||
// return ret
|
||||
// }
|
||||
//
|
||||
// func (de *DataEntry) CreateState(endpoint string, parentId string, pid valueTypes.PointId, name string) DataEntry {
|
||||
// var ret DataEntry
|
||||
// for range Only.Once {
|
||||
// if name == "" {
|
||||
// name = pid.PointToName()
|
||||
// }
|
||||
//
|
||||
// de2 := de.CreateDataEntry(endpoint, parentId, pid, name)
|
||||
// if de2.ValueFloat == 0 {
|
||||
// de2.Value = "false"
|
||||
// de2.ValueBool = false
|
||||
// de2.ValueFloat = 0
|
||||
// } else {
|
||||
// de2.Value = "true"
|
||||
// de2.ValueBool = true
|
||||
// de2.ValueFloat = 1
|
||||
// }
|
||||
// de2.Valid = true
|
||||
// de2.Hide = false
|
||||
//
|
||||
// var parent ParentDevice
|
||||
// parent.Set(parentId)
|
||||
// de2.Point.Parents.Add(parent)
|
||||
// de2.Point.Unit = "binary"
|
||||
// if de2.Point.Unit == "" {
|
||||
// de2.Point.Unit = ref.Unit()
|
||||
// }
|
||||
// de2.Point.Name = name
|
||||
// if de2.Point.Name == "" {
|
||||
// de2.Point.Name = pid.PointToName()
|
||||
// }
|
||||
// // if de2.Point.GroupName == "" {
|
||||
// // de2.Point.GroupName = groupName
|
||||
// // }
|
||||
// de2.Point.FixUnitType()
|
||||
// de2.Point.Valid = true
|
||||
// }
|
||||
//
|
||||
// return ret
|
||||
// }
|
||||
//
|
||||
// func CreateDataEntryActive(date valueTypes.DateTime, endpoint string, parentId string, pid valueTypes.PointId, name string, value float64) DataEntry {
|
||||
// point := GetPoint(parentId, pid)
|
||||
// if point == nil {
|
||||
// if name == "" {
|
||||
// name = pid.PointToName()
|
||||
// }
|
||||
// point = CreatePoint(parentId, pid, name, "state")
|
||||
// }
|
||||
//
|
||||
// var parent ParentDevice
|
||||
// parent.Set(parentId)
|
||||
// point.Parents.Add(parent)
|
||||
//
|
||||
// return DataEntry {
|
||||
// EndPoint: endpoint,
|
||||
// FullId: valueTypes.JoinDataPoint(endpoint, point.Id.String()),
|
||||
// // FullId: JoinDevicePoint(parent.Key, point.Id),
|
||||
// Parent: parent,
|
||||
//
|
||||
// Point: point,
|
||||
// Date: date,
|
||||
// Value: fmt.Sprintf("%v", IsActive(value)),
|
||||
// ValueFloat: 0,
|
||||
// Index: 0,
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// func CreateDataEntryString(date valueTypes.DateTime, endpoint string, parentId string, pid valueTypes.PointId, name string, value string) DataEntry {
|
||||
// point := GetPoint(parentId, pid)
|
||||
// if point == nil {
|
||||
// if name == "" {
|
||||
// name = pid.PointToName()
|
||||
// }
|
||||
// point = CreatePoint(parentId, pid, name, "string")
|
||||
// }
|
||||
//
|
||||
// var parent ParentDevice
|
||||
// parent.Set(parentId)
|
||||
// point.Parents.Add(parent)
|
||||
//
|
||||
// return DataEntry {
|
||||
// EndPoint: endpoint,
|
||||
// FullId: valueTypes.JoinDataPoint(endpoint, pid.String()),
|
||||
// // FullId: JoinDevicePoint(parent.Key, pid),
|
||||
// Parent: parent,
|
||||
//
|
||||
// Point: point,
|
||||
// Date: date,
|
||||
// Value: value,
|
||||
// ValueFloat: 0,
|
||||
// Index: 0,
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// func CreateDataEntryUnitValue(date valueTypes.DateTime, endpoint string, parentId string, pid valueTypes.PointId, name string, value valueTypes.UnitValue) DataEntry {
|
||||
// value = value.UnitValueFix()
|
||||
//
|
||||
// point := GetPoint(parentId + "." + pid.String())
|
||||
// if point == nil {
|
||||
// if name == "" {
|
||||
// name = pid.PointToName()
|
||||
// }
|
||||
// point = CreatePoint(parentId, pid, name, value.Unit())
|
||||
// }
|
||||
//
|
||||
// var parent ParentDevice
|
||||
// parent.Set(parentId)
|
||||
// point.Parents.Add(parent)
|
||||
// point.Valid = true
|
||||
//
|
||||
// return DataEntry {
|
||||
// EndPoint: endpoint,
|
||||
// // FullId: valueTypes.JoinDataPoint(endpoint, pid.String()),
|
||||
// // FullId: JoinDevicePoint(parent.Key, pid),
|
||||
// Parent: parent,
|
||||
//
|
||||
// Point: point,
|
||||
// Date: date,
|
||||
// Value: value.String(),
|
||||
// ValueFloat: value.Value(),
|
||||
// ValueBool: value.ValueBool(),
|
||||
// Index: 0,
|
||||
// Valid: true,
|
||||
// Hide: false,
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// func CreatePoint(parentId string, pid valueTypes.PointId, name string, unit string) *Point {
|
||||
// if name == "" {
|
||||
// name = pid.PointToName()
|
||||
// }
|
||||
//
|
||||
// var parents ParentDevices
|
||||
// parents.Add(ParentDevice{Key: parentId})
|
||||
//
|
||||
// ret := &Point {
|
||||
// Parents: parents,
|
||||
// Id: pid,
|
||||
// GroupName: parentId,
|
||||
// Name: name,
|
||||
// Unit: unit,
|
||||
// UpdateFreq: "",
|
||||
// ValueType: "",
|
||||
// Valid: true,
|
||||
// States: nil,
|
||||
// }
|
||||
// ret.FixUnitType()
|
||||
//
|
||||
// return ret
|
||||
// }
|
||||
//
|
||||
// func IsActive(value float64) bool {
|
||||
// if (value > 0.01) || (value < -0.01) {
|
||||
// return true
|
||||
// }
|
||||
// return false
|
||||
// }
|
||||
//
|
||||
// func JoinDevicePoint(endpoint string, pid valueTypes.PointId) valueTypes.PointId {
|
||||
// var ret valueTypes.PointId
|
||||
// for range Only.Once {
|
||||
// if endpoint == "" {
|
||||
// endpoint = "virtual"
|
||||
// }
|
||||
// ret = valueTypes.PointId(JoinWithDots(0, "", endpoint, pid))
|
||||
// }
|
||||
// return ret
|
||||
// }
|
||||
//
|
||||
// func JoinStringsWithDots(args ...string) string {
|
||||
// return strings.Join(args, ".")
|
||||
// }
|
@ -374,21 +374,21 @@ func (e EndPoint) GetDataTable() output.Table {
|
||||
_ = table.SetHeader(
|
||||
"Date",
|
||||
"Point Id",
|
||||
"Group Name",
|
||||
"Description",
|
||||
"Value",
|
||||
"Unit",
|
||||
"Group Name",
|
||||
"Description",
|
||||
)
|
||||
|
||||
data := e.GetData()
|
||||
var sorted []string
|
||||
for p := range data.DataPoints {
|
||||
for p := range data.Map {
|
||||
sorted = append(sorted, string(p))
|
||||
}
|
||||
sort.Strings(sorted)
|
||||
|
||||
for _, p := range sorted {
|
||||
entries := data.DataPoints[api.PointId(p)]
|
||||
entries := data.Map[api.PointId(p)]
|
||||
for _, de := range entries {
|
||||
if de.Hide {
|
||||
continue
|
||||
@ -400,10 +400,10 @@ func (e EndPoint) GetDataTable() output.Table {
|
||||
// de.Point.Id,
|
||||
p,
|
||||
// de.Point.Parents.String(),
|
||||
de.Point.GroupName,
|
||||
de.Point.Name,
|
||||
de.Value,
|
||||
de.Point.Unit,
|
||||
de.Point.GroupName,
|
||||
de.Point.Name,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
102
iSolarCloud/api/struct_de.go
Normal file
102
iSolarCloud/api/struct_de.go
Normal file
@ -0,0 +1,102 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"GoSungrow/iSolarCloud/api/valueTypes"
|
||||
"github.com/MickMake/GoUnify/Only"
|
||||
)
|
||||
|
||||
|
||||
type DataEntry struct {
|
||||
EndPoint string `json:"endpoint"`
|
||||
Point *Point `json:"point"`
|
||||
Parent ParentDevice `json:"parent"`
|
||||
Date valueTypes.DateTime `json:"date"`
|
||||
Value valueTypes.UnitValue `json:"value"`
|
||||
|
||||
Valid bool `json:"valid"`
|
||||
Hide bool `json:"hide"`
|
||||
Index int `json:"index"`
|
||||
}
|
||||
|
||||
func (de *DataEntry) IsValid() bool {
|
||||
var ok bool
|
||||
for range Only.Once {
|
||||
if de == nil {
|
||||
break
|
||||
}
|
||||
if de.Point == nil {
|
||||
break
|
||||
}
|
||||
if de.Point.Valid == false {
|
||||
break
|
||||
}
|
||||
ok = true
|
||||
}
|
||||
return ok
|
||||
}
|
||||
func (de *DataEntry) IsNotValid() bool {
|
||||
return !de.IsValid()
|
||||
}
|
||||
|
||||
func (de *DataEntry) FullId() string {
|
||||
return de.EndPoint + "." + de.Point.Id.String()
|
||||
}
|
||||
|
||||
func (de *DataEntry) SetEndpoint(endpoint string, pointId string) {
|
||||
de.EndPoint = endpoint // + "." + pointId
|
||||
de.Point.Id.SetString(pointId)
|
||||
}
|
||||
|
||||
func (de *DataEntry) SetPointId(pointId string) {
|
||||
de.Point.Id.SetString(pointId)
|
||||
}
|
||||
|
||||
func (de *DataEntry) SetPointName(name string) {
|
||||
if name != "" {
|
||||
de.Point.SetName(name)
|
||||
}
|
||||
}
|
||||
|
||||
func (de *DataEntry) MakeState(state bool) DataEntry {
|
||||
var ret DataEntry
|
||||
for range Only.Once {
|
||||
// uv := valueTypes.SetUnitValueBool(state)
|
||||
// de.Value = uv.String()
|
||||
// de.ValueFloat = uv.Value()
|
||||
de.Value = valueTypes.SetUnitValueBool(state)
|
||||
de.Point.Unit = ""
|
||||
de.Point.ValueType = "Bool"
|
||||
de.Point.Valid = true
|
||||
de.Valid = true
|
||||
// de.EndPoint += ".state"
|
||||
de.Hide = false
|
||||
}
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
func (de *DataEntry) MakeFloat(value float64, unit string, Type string) {
|
||||
for range Only.Once {
|
||||
if unit == "" {
|
||||
unit = de.Point.Unit
|
||||
}
|
||||
if Type == "" {
|
||||
Type = de.Point.ValueType
|
||||
}
|
||||
// uv := valueTypes.SetUnitValueFloat(value, unit, Type)
|
||||
// de.Value = uv.String()
|
||||
// de.ValueFloat = uv.Value()
|
||||
de.Value = valueTypes.SetUnitValueFloat(value, unit, Type)
|
||||
de.Valid = true
|
||||
de.Hide = false
|
||||
}
|
||||
}
|
||||
|
||||
func (de *DataEntry) Copy() DataEntry {
|
||||
var ret DataEntry
|
||||
ret = *de
|
||||
var point Point
|
||||
point = *de.Point
|
||||
ret.Point = &point
|
||||
return ret
|
||||
}
|
175
iSolarCloud/api/struct_dpe.go
Normal file
175
iSolarCloud/api/struct_dpe.go
Normal file
@ -0,0 +1,175 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"GoSungrow/iSolarCloud/api/valueTypes"
|
||||
"github.com/MickMake/GoUnify/Only"
|
||||
)
|
||||
|
||||
|
||||
type DataEntries struct {
|
||||
Entries []DataEntry
|
||||
}
|
||||
|
||||
func NewDataPointEntries() DataEntries {
|
||||
return DataEntries{
|
||||
Entries: []DataEntry{},
|
||||
}
|
||||
}
|
||||
|
||||
func (de *DataEntries) Hide() {
|
||||
for range Only.Once {
|
||||
for i := range de.Entries {
|
||||
de.Entries[i].Hide = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const LastEntry = -1
|
||||
func (de *DataEntries) GetEntry(index int) *DataEntry {
|
||||
for range Only.Once {
|
||||
if de == nil {
|
||||
return nil
|
||||
}
|
||||
if de.Entries == nil {
|
||||
return nil
|
||||
}
|
||||
l := de.Len() - 1
|
||||
if index > l {
|
||||
index = l
|
||||
break
|
||||
}
|
||||
if index < 0 {
|
||||
index = l + index + 1
|
||||
if index < 0 {
|
||||
index = 0
|
||||
}
|
||||
}
|
||||
}
|
||||
return &(de.Entries[index])
|
||||
}
|
||||
|
||||
func (de *DataEntries) GetEntryValue(index int) valueTypes.UnitValue {
|
||||
var ret valueTypes.UnitValue
|
||||
for range Only.Once {
|
||||
ref := de.GetEntry(index)
|
||||
if ref == nil {
|
||||
break
|
||||
}
|
||||
ret = ref.Value
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
||||
func (de *DataEntries) GetFloat() float64 {
|
||||
var ret float64
|
||||
for range Only.Once {
|
||||
ref := de.GetEntry(0)
|
||||
if ref == nil {
|
||||
break
|
||||
}
|
||||
ret = ref.Value.Value()
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
||||
func (de *DataEntries) MatchPointId(pointId string) bool {
|
||||
var yes bool
|
||||
for range Only.Once {
|
||||
for _, v := range de.Entries {
|
||||
if v.Point.Id.String() == pointId {
|
||||
yes = true
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
return yes
|
||||
}
|
||||
|
||||
func (de *DataEntries) Len() int {
|
||||
return len(de.Entries)
|
||||
}
|
||||
|
||||
func (de *DataEntries) GetUnits() string {
|
||||
var unit string
|
||||
for range Only.Once {
|
||||
for _, v := range de.Entries {
|
||||
unit = v.Point.Unit
|
||||
break
|
||||
}
|
||||
}
|
||||
return unit
|
||||
}
|
||||
|
||||
func (de *DataEntries) Add(ref DataEntry) *DataEntries {
|
||||
for range Only.Once {
|
||||
if de == nil {
|
||||
break
|
||||
}
|
||||
de.Entries = append(de.Entries, ref)
|
||||
}
|
||||
return de
|
||||
}
|
||||
|
||||
func (de *DataEntries) SetUnits(units string) *DataEntries {
|
||||
for range Only.Once {
|
||||
for i := range de.Entries {
|
||||
de.Entries[i].Point.Unit = units
|
||||
}
|
||||
}
|
||||
return de
|
||||
}
|
||||
|
||||
func (de *DataEntries) SetGroupName(groupName string) *DataEntries {
|
||||
for range Only.Once {
|
||||
for i := range de.Entries {
|
||||
de.Entries[i].Point.GroupName = groupName
|
||||
}
|
||||
}
|
||||
return de
|
||||
}
|
||||
|
||||
func (de *DataEntries) SetTimestamp(timeStamp valueTypes.DateTime) *DataEntries {
|
||||
for range Only.Once {
|
||||
for i := range de.Entries {
|
||||
// dt := valueTypes.SetDateTimeString(timeStamp)
|
||||
de.Entries[i].Date = timeStamp
|
||||
}
|
||||
}
|
||||
return de
|
||||
}
|
||||
|
||||
func (de *DataEntries) Copy() DataEntries {
|
||||
var ret DataEntries
|
||||
for _, d := range de.Entries {
|
||||
// var point Point
|
||||
// point = *d.Point
|
||||
// d.Point = &point
|
||||
ret.Entries = append(ret.Entries, d.Copy())
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
||||
func (de *DataEntries) MakeState(state bool) *DataEntries {
|
||||
for i := range de.Entries {
|
||||
de.Entries[i].MakeState(state)
|
||||
}
|
||||
return de
|
||||
}
|
||||
|
||||
func (de *DataEntries) SetFloat(value float64, unit string, Type string) *DataEntries {
|
||||
for i := range de.Entries {
|
||||
de.Entries[i].MakeFloat(value, unit, Type)
|
||||
}
|
||||
return de
|
||||
}
|
||||
|
||||
func (de *DataEntries) FloatToState(value float64) *DataEntries {
|
||||
for i := range de.Entries {
|
||||
if value == 0 {
|
||||
de.Entries[i].MakeState(false)
|
||||
break
|
||||
}
|
||||
de.Entries[i].MakeState(true)
|
||||
}
|
||||
return de
|
||||
}
|
@ -11,15 +11,15 @@ import (
|
||||
|
||||
|
||||
type Point struct {
|
||||
Parents ParentDevices `json:"parents,omitempty"`
|
||||
Id valueTypes.PointId `json:"id,omitempty"`
|
||||
GroupName string `json:"group_name,omitempty"`
|
||||
Name string `json:"name,omitempty"`
|
||||
Unit string `json:"unit,omitempty"`
|
||||
TimeSpan string `json:"time_span,omitempty"`
|
||||
ValueType string `json:"value_type,omitempty"`
|
||||
Valid bool `json:"valid,omitempty"`
|
||||
States map[string]string `json:"states,omitempty"`
|
||||
Parents ParentDevices `json:"parents,omitempty"`
|
||||
Id valueTypes.PointId `json:"id,omitempty"`
|
||||
GroupName string `json:"group_name,omitempty"`
|
||||
Description string `json:"description,omitempty"`
|
||||
Unit string `json:"unit,omitempty"`
|
||||
UpdateFreq string `json:"time_span,omitempty"`
|
||||
ValueType string `json:"value_type,omitempty"`
|
||||
Valid bool `json:"valid,omitempty"`
|
||||
States map[string]string `json:"states,omitempty"`
|
||||
}
|
||||
|
||||
|
||||
@ -119,45 +119,51 @@ func (p *Point) WhenReset() string {
|
||||
}
|
||||
|
||||
func (p Point) String() string {
|
||||
return fmt.Sprintf("Id:%s\tName:%s\tUnits:%s\tTimespan:%s", p.Id, p.Name, p.Unit, p.TimeSpan)
|
||||
// return p.TimeSpan
|
||||
return fmt.Sprintf("Id:%s\tName:%s\tUnits:%s\tUpdateFreq:%s", p.Id, p.Description, p.Unit, p.UpdateFreq)
|
||||
}
|
||||
|
||||
func (p Point) IsInstant() bool {
|
||||
if p.TimeSpan == PointTimeSpanInstant {
|
||||
if p.UpdateFreq == UpdateFreqInstant {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (p Point) IsDaily() bool {
|
||||
if p.TimeSpan == PointTimeSpanDaily {
|
||||
if p.UpdateFreq == UpdateFreqDaily {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (p Point) IsMonthly() bool {
|
||||
if p.TimeSpan == PointTimeSpanMonthly {
|
||||
if p.UpdateFreq == UpdateFreqMonthly {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (p Point) IsYearly() bool {
|
||||
if p.TimeSpan == PointTimeSpanYearly {
|
||||
if p.UpdateFreq == UpdateFreqYearly {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (p Point) IsTotal() bool {
|
||||
if p.TimeSpan == PointTimeSpanTotal {
|
||||
if p.UpdateFreq == UpdateFreqTotal {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (p *Point) SetName(name string) {
|
||||
if name == "" {
|
||||
name = p.Id.PointToName()
|
||||
}
|
||||
p.Description = name
|
||||
}
|
||||
|
||||
|
||||
func GetPoint(point string) *Point {
|
||||
return Points.Get(point)
|
||||
@ -206,8 +212,49 @@ type ParentDevice struct {
|
||||
Key string `json:"ps_key"`
|
||||
PsId string `json:"ps_id"`
|
||||
Type string `json:"parent_type"`
|
||||
Code string `json:"parent_code"`
|
||||
Code string `json:"parent_code"`
|
||||
}
|
||||
|
||||
func NewParentDevice(key string) ParentDevice {
|
||||
var ret ParentDevice
|
||||
ret.Set(key)
|
||||
return ret
|
||||
}
|
||||
|
||||
func (pd *ParentDevice) Set(key string) {
|
||||
for range Only.Once {
|
||||
pd.Key = key
|
||||
}
|
||||
}
|
||||
|
||||
func (pd *ParentDevice) Split() {
|
||||
for range Only.Once {
|
||||
// if pd.Key == "virtual" {
|
||||
// break
|
||||
// }
|
||||
if pd.Key == "" {
|
||||
pd.Key = "virtual"
|
||||
break
|
||||
}
|
||||
|
||||
if !strings.Contains(pd.Key, "_") {
|
||||
pd.PsId = pd.Key
|
||||
break
|
||||
}
|
||||
s := strings.Split(pd.Key, "_")
|
||||
if len(s) > 0 {
|
||||
pd.PsId = s[0]
|
||||
}
|
||||
if len(s) > 1 {
|
||||
pd.Type = s[1]
|
||||
}
|
||||
if len(s) > 2 {
|
||||
pd.Code = s[2]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
type ParentDevices struct {
|
||||
Map map[string]*ParentDevice
|
||||
Index []string
|
||||
@ -256,6 +303,17 @@ func (pd *ParentDevices) PsIds() string {
|
||||
return ret
|
||||
}
|
||||
|
||||
// func (pd *ParentDevices) Get() ParentDevice {
|
||||
// var ret ParentDevice
|
||||
// for range Only.Once {
|
||||
// if len(pd.Map) == 0 {
|
||||
// break
|
||||
// }
|
||||
// ret = *(pd.Map[len(pd.Map)-1])
|
||||
// }
|
||||
// return ret
|
||||
// }
|
||||
|
||||
func (pd *ParentDevices) Codes() string {
|
||||
var ret string
|
||||
for _, l := range pd.Index {
|
||||
@ -274,40 +332,6 @@ func (pd *ParentDevices) Types() string {
|
||||
return ret
|
||||
}
|
||||
|
||||
|
||||
func (pd *ParentDevice) Set(key string) {
|
||||
for range Only.Once {
|
||||
pd.Key = key
|
||||
}
|
||||
}
|
||||
|
||||
func (pd *ParentDevice) Split() {
|
||||
for range Only.Once {
|
||||
// if pd.Key == "virtual" {
|
||||
// break
|
||||
// }
|
||||
if pd.Key == "" {
|
||||
pd.Key = "virtual"
|
||||
break
|
||||
}
|
||||
|
||||
if !strings.Contains(pd.Key, "_") {
|
||||
pd.PsId = pd.Key
|
||||
break
|
||||
}
|
||||
s := strings.Split(pd.Key, "_")
|
||||
if len(s) > 0 {
|
||||
pd.PsId = s[0]
|
||||
}
|
||||
if len(s) > 1 {
|
||||
pd.Type = s[1]
|
||||
}
|
||||
if len(s) > 2 {
|
||||
pd.Code = s[2]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// type ParentDevice struct {
|
||||
// Key string `json:"ps_key"`
|
||||
// PsId string `json:"ps_id"`
|
||||
|
@ -54,7 +54,7 @@ func (pm *PointsMap) Get(point string) *Point {
|
||||
// Id: valueTypes.SetPointIdString(point),
|
||||
// Name: "",
|
||||
// Unit: "",
|
||||
// TimeSpan: "",
|
||||
// UpdateFreq: "",
|
||||
// Valid: false,
|
||||
// }
|
||||
}
|
||||
@ -108,18 +108,18 @@ func (pm *PointsMap) Add(point Point) bool {
|
||||
ep = *pm.Map[point.Id.String()]
|
||||
ep.Parents = ParentDevices{}
|
||||
|
||||
if strings.ToLower(ep.Name) == ep.Id.String() {
|
||||
ep.Name = point.Name
|
||||
if strings.ToLower(ep.Description) == ep.Id.String() {
|
||||
ep.Description = point.Description
|
||||
}
|
||||
if ep.Name == "" {
|
||||
ep.Name = point.Name
|
||||
if ep.Description == "" {
|
||||
ep.Description = point.Description
|
||||
}
|
||||
|
||||
if ep.Unit == "" {
|
||||
ep.Unit = point.Unit
|
||||
}
|
||||
if ep.TimeSpan == "" {
|
||||
ep.TimeSpan = point.TimeSpan
|
||||
if ep.UpdateFreq == "" {
|
||||
ep.UpdateFreq = point.UpdateFreq
|
||||
}
|
||||
if ep.GroupName == "" {
|
||||
ep.GroupName = point.GroupName
|
||||
@ -181,7 +181,7 @@ func (p *Point) HasChanged(comp Point) bool {
|
||||
break
|
||||
}
|
||||
|
||||
if p.Name != comp.Name {
|
||||
if p.Description != comp.Description {
|
||||
break
|
||||
}
|
||||
|
||||
@ -189,7 +189,7 @@ func (p *Point) HasChanged(comp Point) bool {
|
||||
break
|
||||
}
|
||||
|
||||
if p.TimeSpan != comp.TimeSpan {
|
||||
if p.UpdateFreq != comp.UpdateFreq {
|
||||
break
|
||||
}
|
||||
|
||||
@ -289,72 +289,72 @@ var Points = PointsMap {
|
||||
// "total_income": { PsKey: "virtual", Id: "total_income", Name: "total_income", Unit: "FOO", Type: PointTypeTotal },
|
||||
// Added manually
|
||||
|
||||
// "foo": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "", Name: "", Unit: "", TimeSpan: PointTimeSpanInstant},
|
||||
// "foo": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "", Name: "", Unit: "", UpdateFreq: PointUpdateFreqInstant},
|
||||
//
|
||||
// "p13001": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13001", Name: "MPPT1 Voltage", Unit: "V", TimeSpan: PointTimeSpanInstant},
|
||||
// "p13001": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13001", Name: "MPPT1 Voltage", Unit: "V", UpdateFreq: PointUpdateFreqInstant},
|
||||
//
|
||||
// "p13012": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13012", Name: "Total Reactive Power", Unit: "kvar", TimeSpan: PointTimeSpanDaily},
|
||||
// "p13012": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13012", Name: "Total Reactive Power", Unit: "kvar", UpdateFreq: PointUpdateFreqDaily},
|
||||
//
|
||||
// "p13105": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13105", Name: "MPPT2 Voltage", Unit: "V", TimeSpan: PointTimeSpanInstant},
|
||||
// "p13105": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13105", Name: "MPPT2 Voltage", Unit: "V", UpdateFreq: PointUpdateFreqInstant},
|
||||
//
|
||||
// "p13122": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13122", Name: "Daily Feed-in Energy", Unit: "kWh", TimeSpan: PointTimeSpanDaily},
|
||||
// "p13122": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13122", Name: "Daily Feed-in Energy", Unit: "kWh", UpdateFreq: PointUpdateFreqDaily},
|
||||
//
|
||||
// "p13125": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13125", Name: "Total Feed-in Energy", Unit: "kWh", TimeSpan: PointTimeSpanTotal},
|
||||
// "p13125": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13125", Name: "Total Feed-in Energy", Unit: "kWh", UpdateFreq: PointUpdateFreqTotal},
|
||||
//
|
||||
// "p13138": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13138", Name: "Battery Voltage", Unit: "V", TimeSpan: PointTimeSpanInstant},
|
||||
// "p13138": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13138", Name: "Battery Voltage", Unit: "V", UpdateFreq: PointUpdateFreqInstant},
|
||||
//
|
||||
// "p13144": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13144", Name: "Daily Self-consumption Rate", Unit: "%", TimeSpan: PointTimeSpanDaily},
|
||||
// "p13144": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13144", Name: "Daily Self-consumption Rate", Unit: "%", UpdateFreq: PointUpdateFreqDaily},
|
||||
//
|
||||
// "p13157": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13157", Name: "Phase A Voltage", Unit: "V", TimeSpan: PointTimeSpanInstant},
|
||||
// "p13157": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13157", Name: "Phase A Voltage", Unit: "V", UpdateFreq: PointUpdateFreqInstant},
|
||||
//
|
||||
// "p13158": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13158", Name: "Phase B Voltage", Unit: "V", TimeSpan: PointTimeSpanInstant},
|
||||
// "p13158": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13158", Name: "Phase B Voltage", Unit: "V", UpdateFreq: PointUpdateFreqInstant},
|
||||
//
|
||||
// "p13159": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13159", Name: "Phase C Voltage", Unit: "V", TimeSpan: PointTimeSpanInstant},
|
||||
// "p13159": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13159", Name: "Phase C Voltage", Unit: "V", UpdateFreq: PointUpdateFreqInstant},
|
||||
//
|
||||
// "p13161": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13161", Name: "Bus Voltage", Unit: "V", TimeSpan: PointTimeSpanInstant},
|
||||
// "p13173": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13173", Name: "Daily Feed-in Energy (PV)", Unit: "kWh", TimeSpan: PointTimeSpanDaily},
|
||||
// "p13175": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13175", Name: "Total Feed-in Energy (PV)", Unit: "kWh", TimeSpan: PointTimeSpanTotal},
|
||||
// "p13002": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13002", Name: "MPPT1 Current", Unit: "A", TimeSpan: PointTimeSpanInstant},
|
||||
// "p13161": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13161", Name: "Bus Voltage", Unit: "V", UpdateFreq: PointUpdateFreqInstant},
|
||||
// "p13173": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13173", Name: "Daily Feed-in Energy (PV)", Unit: "kWh", UpdateFreq: PointUpdateFreqDaily},
|
||||
// "p13175": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13175", Name: "Total Feed-in Energy (PV)", Unit: "kWh", UpdateFreq: PointUpdateFreqTotal},
|
||||
// "p13002": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13002", Name: "MPPT1 Current", Unit: "A", UpdateFreq: PointUpdateFreqInstant},
|
||||
// "p13003": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13003", Name: "Total DC Power", Unit: "kW"},
|
||||
// "p13007": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13007", Name: "Grid Frequency", Unit: "Hz", TimeSpan: PointTimeSpanInstant},
|
||||
// "p13008": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13008", Name: "Phase A Current", Unit: "A", TimeSpan: PointTimeSpanInstant},
|
||||
// "p13009": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13009", Name: "Phase B Current", Unit: "A", TimeSpan: PointTimeSpanInstant},
|
||||
// "p13010": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13010", Name: "Phase C Current", Unit: "A", TimeSpan: PointTimeSpanInstant},
|
||||
// "p13007": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13007", Name: "Grid Frequency", Unit: "Hz", UpdateFreq: PointUpdateFreqInstant},
|
||||
// "p13008": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13008", Name: "Phase A Current", Unit: "A", UpdateFreq: PointUpdateFreqInstant},
|
||||
// "p13009": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13009", Name: "Phase B Current", Unit: "A", UpdateFreq: PointUpdateFreqInstant},
|
||||
// "p13010": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13010", Name: "Phase C Current", Unit: "A", UpdateFreq: PointUpdateFreqInstant},
|
||||
// "p13011": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13011", Name: "Total Active Power", Unit: "kW"},
|
||||
// "p13013": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13013", Name: "Total Power Factor", Unit: ""},
|
||||
// "p13018": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13018", Name: "Total Apparent Power", Unit: "VA"},
|
||||
// "p13019": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13019", Name: "Internal Air Temperature", Unit: "℃", TimeSpan: PointTimeSpanInstant},
|
||||
// "p13028": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13028", Name: "Daily Battery Charging Energy", Unit: "kWh", TimeSpan: PointTimeSpanDaily},
|
||||
// "p13029": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13029", Name: "Daily Battery Discharging Energy", Unit: "kWh", TimeSpan: PointTimeSpanDaily},
|
||||
// "p13034": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13034", Name: "Total Battery Charging Energy", Unit: "kWh", TimeSpan: PointTimeSpanTotal},
|
||||
// "p13035": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13035", Name: "Total Battery Discharging Energy", Unit: "kWh", TimeSpan: PointTimeSpanTotal},
|
||||
// "p13106": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13106", Name: "MPPT2 Current", Unit: "A", TimeSpan: PointTimeSpanInstant},
|
||||
// "p13112": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13112", Name: "Daily PV Yield", Unit: "kWh", TimeSpan: PointTimeSpanDaily},
|
||||
// "p13116": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13116", Name: "Daily Load Energy Consumption from PV", Unit: "kWh", TimeSpan: PointTimeSpanDaily},
|
||||
// "p13019": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13019", Name: "Internal Air Temperature", Unit: "℃", UpdateFreq: PointUpdateFreqInstant},
|
||||
// "p13028": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13028", Name: "Daily Battery Charging Energy", Unit: "kWh", UpdateFreq: PointUpdateFreqDaily},
|
||||
// "p13029": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13029", Name: "Daily Battery Discharging Energy", Unit: "kWh", UpdateFreq: PointUpdateFreqDaily},
|
||||
// "p13034": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13034", Name: "Total Battery Charging Energy", Unit: "kWh", UpdateFreq: PointUpdateFreqTotal},
|
||||
// "p13035": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13035", Name: "Total Battery Discharging Energy", Unit: "kWh", UpdateFreq: PointUpdateFreqTotal},
|
||||
// "p13106": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13106", Name: "MPPT2 Current", Unit: "A", UpdateFreq: PointUpdateFreqInstant},
|
||||
// "p13112": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13112", Name: "Daily PV Yield", Unit: "kWh", UpdateFreq: PointUpdateFreqDaily},
|
||||
// "p13116": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13116", Name: "Daily Load Energy Consumption from PV", Unit: "kWh", UpdateFreq: PointUpdateFreqDaily},
|
||||
// "p13119": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13119", Name: "Total Load Active Power", Unit: "kW"},
|
||||
// "p13121": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13121", Name: "Total Export Active Power", Unit: "kW"},
|
||||
// "p13126": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13126", Name: "Battery Charging Power", Unit: "kW"},
|
||||
// "p13130": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13130", Name: "Total Load Energy Consumption", Unit: "kWh", TimeSpan: PointTimeSpanTotal},
|
||||
// "p13134": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13134", Name: "Total PV Yield", Unit: "kWh", TimeSpan: PointTimeSpanTotal},
|
||||
// "p13137": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13137", Name: "Total Load Energy Consumption from PV", Unit: "kWh", TimeSpan: PointTimeSpanTotal},
|
||||
// "p13139": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13139", Name: "Battery Current", Unit: "A", TimeSpan: PointTimeSpanInstant},
|
||||
// "p13130": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13130", Name: "Total Load Energy Consumption", Unit: "kWh", UpdateFreq: PointUpdateFreqTotal},
|
||||
// "p13134": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13134", Name: "Total PV Yield", Unit: "kWh", UpdateFreq: PointUpdateFreqTotal},
|
||||
// "p13137": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13137", Name: "Total Load Energy Consumption from PV", Unit: "kWh", UpdateFreq: PointUpdateFreqTotal},
|
||||
// "p13139": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13139", Name: "Battery Current", Unit: "A", UpdateFreq: PointUpdateFreqInstant},
|
||||
// "p13140": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13140", Name: "Battery Capacity(kWh)", Unit: "kWh"},
|
||||
// "p13141": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13141", Name: "Battery Level (SOC)", Unit: "%", TimeSpan: PointTimeSpanInstant},
|
||||
// "p13142": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13142", Name: "Battery Health (SOH)", Unit: "%", TimeSpan: PointTimeSpanInstant},
|
||||
// "p13143": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13143", Name: "Battery Temperature", Unit: "℃", TimeSpan: PointTimeSpanInstant},
|
||||
// "p13147": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13147", Name: "Daily Purchased Energy", Unit: "kWh", TimeSpan: PointTimeSpanDaily},
|
||||
// "p13148": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13148", Name: "Total Purchased Energy", Unit: "kWh", TimeSpan: PointTimeSpanTotal},
|
||||
// "p13141": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13141", Name: "Battery Level (SOC)", Unit: "%", UpdateFreq: PointUpdateFreqInstant},
|
||||
// "p13142": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13142", Name: "Battery Health (SOH)", Unit: "%", UpdateFreq: PointUpdateFreqInstant},
|
||||
// "p13143": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13143", Name: "Battery Temperature", Unit: "℃", UpdateFreq: PointUpdateFreqInstant},
|
||||
// "p13147": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13147", Name: "Daily Purchased Energy", Unit: "kWh", UpdateFreq: PointUpdateFreqDaily},
|
||||
// "p13148": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13148", Name: "Total Purchased Energy", Unit: "kWh", UpdateFreq: PointUpdateFreqTotal},
|
||||
// "p13149": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13149", Name: "Purchased Power", Unit: "kW"},
|
||||
// "p13150": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13150", Name: "Battery Discharging Power", Unit: "kW"},
|
||||
// "p13160": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13160", Name: "Array Insulation Resistance", Unit: "kΩ", TimeSpan: PointTimeSpanInstant},
|
||||
// "p13162": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13162", Name: "Max. Charging Current (BMS)", Unit: "A", TimeSpan: PointTimeSpanInstant},
|
||||
// "p13163": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13163", Name: "Max. Discharging Current (BMS)", Unit: "A", TimeSpan: PointTimeSpanInstant},
|
||||
// "p13174": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13174", Name: "Daily Battery Charging Energy from PV", Unit: "kWh", TimeSpan: PointTimeSpanDaily},
|
||||
// "p13176": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13176", Name: "Total Battery Charging Energy from PV", Unit: "kWh", TimeSpan: PointTimeSpanTotal},
|
||||
// "p13199": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13199", Name: "Daily Load Energy Consumption", Unit: "kWh", TimeSpan: PointTimeSpanDaily},
|
||||
// "p18062": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p18062", Name: "Phase A Backup Current", Unit: "A", TimeSpan: PointTimeSpanInstant},
|
||||
// "p18063": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p18063", Name: "Phase B Backup Current", Unit: "A", TimeSpan: PointTimeSpanInstant},
|
||||
// "p18064": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p18064", Name: "Phase C Backup Current", Unit: "A", TimeSpan: PointTimeSpanInstant},
|
||||
// "p13160": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13160", Name: "Array Insulation Resistance", Unit: "kΩ", UpdateFreq: PointUpdateFreqInstant},
|
||||
// "p13162": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13162", Name: "Max. Charging Current (BMS)", Unit: "A", UpdateFreq: PointUpdateFreqInstant},
|
||||
// "p13163": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13163", Name: "Max. Discharging Current (BMS)", Unit: "A", UpdateFreq: PointUpdateFreqInstant},
|
||||
// "p13174": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13174", Name: "Daily Battery Charging Energy from PV", Unit: "kWh", UpdateFreq: PointUpdateFreqDaily},
|
||||
// "p13176": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13176", Name: "Total Battery Charging Energy from PV", Unit: "kWh", UpdateFreq: PointUpdateFreqTotal},
|
||||
// "p13199": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p13199", Name: "Daily Load Energy Consumption", Unit: "kWh", UpdateFreq: PointUpdateFreqDaily},
|
||||
// "p18062": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p18062", Name: "Phase A Backup Current", Unit: "A", UpdateFreq: PointUpdateFreqInstant},
|
||||
// "p18063": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p18063", Name: "Phase B Backup Current", Unit: "A", UpdateFreq: PointUpdateFreqInstant},
|
||||
// "p18064": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p18064", Name: "Phase C Backup Current", Unit: "A", UpdateFreq: PointUpdateFreqInstant},
|
||||
// "p18065": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p18065", Name: "Phase A Backup Power", Unit: "kW"},
|
||||
// "p18066": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p18066", Name: "Phase B Backup Power", Unit: "kW"},
|
||||
// "p18067": {Parents: ParentDevices{Map: map[string]*ParentDevice{"14_1":{PsId: "manual", Type: "14", Code: "1"}}}, Id: "p18067", Name: "Phase C Backup Power", Unit: "kW"},
|
||||
@ -362,33 +362,33 @@ var Points = PointsMap {
|
||||
// "p83001": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83001", Name: "Inverter AC Power Normalization", Unit: "kW/kWp"},
|
||||
// "p83002": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83002", Name: "Inverter AC Power", Unit: "kW"},
|
||||
// "p83004": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83004", Name: "Inverter Total Yield", Unit: "kWh"},
|
||||
// "p83005": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83005", Name: "Daily Equivalent Hours of Meter", Unit: "h", TimeSpan: PointTimeSpanDaily},
|
||||
// "p83005": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83005", Name: "Daily Equivalent Hours of Meter", Unit: "h", UpdateFreq: PointUpdateFreqDaily},
|
||||
// "p83006": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83006", Name: "Meter Daily Yield", Unit: "kWh"},
|
||||
// "p83007": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83007", Name: "Meter PR", Unit: "%", TimeSpan: PointTimeSpanInstant},
|
||||
// "p83008": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83008", Name: "Daily Equivalent Hours of Inverter", Unit: "h", TimeSpan: PointTimeSpanDaily},
|
||||
// "p83009": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83009", Name: "Daily Yield by Inverter", Unit: "kWh", TimeSpan: PointTimeSpanDaily},
|
||||
// "p83010": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83010", Name: "Inverter PR", Unit: "%", TimeSpan: PointTimeSpanInstant},
|
||||
// "p83007": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83007", Name: "Meter PR", Unit: "%", UpdateFreq: PointUpdateFreqInstant},
|
||||
// "p83008": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83008", Name: "Daily Equivalent Hours of Inverter", Unit: "h", UpdateFreq: PointUpdateFreqDaily},
|
||||
// "p83009": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83009", Name: "Daily Yield by Inverter", Unit: "kWh", UpdateFreq: PointUpdateFreqDaily},
|
||||
// "p83010": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83010", Name: "Inverter PR", Unit: "%", UpdateFreq: PointUpdateFreqInstant},
|
||||
// "p83013": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83013", Name: "Daily Irradiation", Unit: "Wh/m2"},
|
||||
// "p83016": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83016", Name: "Plant Ambient Temperature", Unit: "℃", TimeSpan: PointTimeSpanInstant},
|
||||
// "p83017": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83017", Name: "Plant Module Temperature", Unit: "℃", TimeSpan: PointTimeSpanInstant},
|
||||
// "p83018": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83018", Name: "Daily Yield (Theoretical)", Unit: "kWh", TimeSpan: PointTimeSpanDaily},
|
||||
// "p83019": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83019", Name: "Power/Installed Power of Plant", Unit: "%", TimeSpan: PointTimeSpanInstant},
|
||||
// "p83016": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83016", Name: "Plant Ambient Temperature", Unit: "℃", UpdateFreq: PointUpdateFreqInstant},
|
||||
// "p83017": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83017", Name: "Plant Module Temperature", Unit: "℃", UpdateFreq: PointUpdateFreqInstant},
|
||||
// "p83018": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83018", Name: "Daily Yield (Theoretical)", Unit: "kWh", UpdateFreq: PointUpdateFreqDaily},
|
||||
// "p83019": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83019", Name: "Power/Installed Power of Plant", Unit: "%", UpdateFreq: PointUpdateFreqInstant},
|
||||
// "p83020": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83020", Name: "Meter Total Yield", Unit: "kWh"},
|
||||
// "p83021": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83021", Name: "Accumulative Power Consumption by Meter", Unit: "kWh"},
|
||||
// "p83022": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83022", Name: "Daily Yield of Plant", Unit: "kWh", TimeSpan: PointTimeSpanDaily},
|
||||
// "p83023": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83023", Name: "Plant PR", Unit: "%", TimeSpan: PointTimeSpanInstant},
|
||||
// "p83022": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83022", Name: "Daily Yield of Plant", Unit: "kWh", UpdateFreq: PointUpdateFreqDaily},
|
||||
// "p83023": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83023", Name: "Plant PR", Unit: "%", UpdateFreq: PointUpdateFreqInstant},
|
||||
// "p83024": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83024", Name: "Plant Total Yield", Unit: "kWh"},
|
||||
// "p83025": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83025", Name: "Plant Equivalent Hours", Unit: "h"},
|
||||
// "p83032": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83032", Name: "Meter AC Power", Unit: "kW"},
|
||||
// "p83033": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83033", Name: "Plant Power", Unit: "kW"},
|
||||
// "p83097": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83097", Name: "Daily Load Energy Consumption from PV", Unit: "kWh", TimeSpan: PointTimeSpanDaily},
|
||||
// "p83097": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83097", Name: "Daily Load Energy Consumption from PV", Unit: "kWh", UpdateFreq: PointUpdateFreqDaily},
|
||||
// "p83100": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83100", Name: "Total Load Energy Consumption from PV", Unit: "kWh"},
|
||||
// "p83102": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83102", Name: "Daily Purchased Energy", Unit: "kWh", TimeSpan: PointTimeSpanDaily},
|
||||
// "p83102": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83102", Name: "Daily Purchased Energy", Unit: "kWh", UpdateFreq: PointUpdateFreqDaily},
|
||||
// "p83105": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83105", Name: "Total Purchased Energy", Unit: "kWh"},
|
||||
// "p83106": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83106", Name: "Load Power", Unit: "kW"},
|
||||
// "p83124": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83124", Name: "Total Load Energy Consumption", Unit: "MWh"},
|
||||
// "p83128": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83128", Name: "Total Active Power of Optical Storage", Unit: "kW"},
|
||||
// "p83129": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83129", Name: "Battery SOC", Unit: "%", TimeSpan: PointTimeSpanInstant},
|
||||
// "p83129": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83129", Name: "Battery SOC", Unit: "%", UpdateFreq: PointUpdateFreqInstant},
|
||||
// "p83233": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83233", Name: "Total field maximum rechargeable power", Unit: "MW"},
|
||||
// "p83234": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83234", Name: "Total field maximum dischargeable power", Unit: "MW"},
|
||||
// "p83235": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83235", Name: "Total field chargeable energy", Unit: "MWh"},
|
||||
@ -400,9 +400,9 @@ var Points = PointsMap {
|
||||
// "p83242": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83242", Name: "Total field discharge capacity", Unit: "MWh"},
|
||||
// "p83243": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83243", Name: "Total field daily charge capacity", Unit: "MWh"},
|
||||
// "p83244": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83244", Name: "Total field daily discharge capacity", Unit: "MWh"},
|
||||
// "p83252": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83252", Name: "Battery Level (SOC)", Unit: "%", TimeSpan: PointTimeSpanInstant},
|
||||
// "p83252": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83252", Name: "Battery Level (SOC)", Unit: "%", UpdateFreq: PointUpdateFreqInstant},
|
||||
// "p83419": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83419", Name: "Daily Highest Inverter Power/Inverter Installed Capacity", Unit: "%"},
|
||||
// "p83420": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83420", Name: "Current Power/Inverter Installed Capacity", Unit: "%", TimeSpan: PointTimeSpanInstant},
|
||||
// "p83420": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83420", Name: "Current Power/Inverter Installed Capacity", Unit: "%", UpdateFreq: PointUpdateFreqInstant},
|
||||
// "p83549": {Parents: ParentDevices{Map: map[string]*ParentDevice{"11_0":{PsId: "manual", Type: "11", Code: "0"}}}, Id: "p83549", Name: "Grid active power", Unit: "kW"},
|
||||
//
|
||||
// "p23014": {Parents: ParentDevices{Map: map[string]*ParentDevice{"22_247":{PsId: "manual", Type: "22", Code: "247"}}}, Id: "p23014", Name: "WLAN Signal Strength", Unit: ""},
|
||||
|
@ -9,7 +9,7 @@ import (
|
||||
|
||||
|
||||
type TemplatePoint struct {
|
||||
Description string
|
||||
Name string
|
||||
PsKey string
|
||||
PointId valueTypes.PointId
|
||||
Unit string
|
||||
@ -61,10 +61,10 @@ func CreatePoints(points []string) TemplatePoints {
|
||||
pa[1] = valueTypes.SetPointIdString(pa[1]).String()
|
||||
// pa[1] = "p" + strings.TrimPrefix(pa[1], "p")
|
||||
ret = append(ret, TemplatePoint{
|
||||
Description: "",
|
||||
PsKey: pa[0],
|
||||
PointId: valueTypes.SetPointIdString(pa[1]),
|
||||
Unit: "",
|
||||
Name: "",
|
||||
PsKey: pa[0],
|
||||
PointId: valueTypes.SetPointIdString(pa[1]),
|
||||
Unit: "",
|
||||
})
|
||||
}
|
||||
}
|
||||
|
@ -25,7 +25,7 @@ import (
|
||||
// GroupName: "",
|
||||
// Name: name,
|
||||
// Unit: uv.Unit(),
|
||||
// TimeSpan: "PointTimeSpanInstant",
|
||||
// UpdateFreq: "PointUpdateFreqInstant",
|
||||
// Valid: true,
|
||||
// States: nil,
|
||||
// }
|
||||
@ -46,22 +46,23 @@ func (e *Web) GetDataTable(endpoint EndPoint) output.Table {
|
||||
_ = table.SetHeader(
|
||||
"Date",
|
||||
"Point Id",
|
||||
"Group Name",
|
||||
"Description",
|
||||
"Value",
|
||||
"Unit",
|
||||
"Unit Type",
|
||||
"Group Name",
|
||||
"Description",
|
||||
"Update Freq",
|
||||
)
|
||||
|
||||
data := endpoint.GetEndPointData()
|
||||
var sorted []string
|
||||
for p := range data.DataPoints {
|
||||
for p := range data.Map {
|
||||
sorted = append(sorted, string(p))
|
||||
}
|
||||
sort.Strings(sorted)
|
||||
|
||||
for _, p := range sorted {
|
||||
entries := data.DataPoints[p]
|
||||
entries := data.Map[p].Entries
|
||||
for _, de := range entries {
|
||||
if de.Hide {
|
||||
continue
|
||||
@ -69,15 +70,13 @@ func (e *Web) GetDataTable(endpoint EndPoint) output.Table {
|
||||
|
||||
_ = table.AddRow(
|
||||
de.Date.Format(valueTypes.DateTimeLayout),
|
||||
// api.NameDevicePointInt(de.Point.Parents, p.PointID.Value()),
|
||||
// de.Point.Id,
|
||||
p,
|
||||
// de.Point.Parents.String(),
|
||||
de.Point.GroupName,
|
||||
de.Point.Name,
|
||||
de.Value,
|
||||
de.Point.Unit,
|
||||
de.Point.ValueType,
|
||||
de.Point.GroupName,
|
||||
de.Point.Description,
|
||||
de.Point.UpdateFreq,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -65,7 +65,7 @@ func (t Bool) MarshalJSON() ([]byte, error) {
|
||||
break
|
||||
}
|
||||
t.Valid = true
|
||||
// t.string = strconv.FormatFloat(t.bool, 'f', 12, 64)
|
||||
// t.string = strconv.FormatFloat(t.bool, 'f', -1, 64)
|
||||
}
|
||||
|
||||
return data, err
|
||||
@ -75,6 +75,13 @@ func (t Bool) Value() bool {
|
||||
return t.bool
|
||||
}
|
||||
|
||||
func (t Bool) Match(comp bool) bool {
|
||||
if t.bool == comp {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (t Bool) String() string {
|
||||
return t.string
|
||||
}
|
||||
@ -85,31 +92,31 @@ func (t *Bool) SetString(value string) Bool {
|
||||
t.Valid = false
|
||||
|
||||
switch strings.ToLower(t.string) {
|
||||
case "false":
|
||||
fallthrough
|
||||
case "no":
|
||||
fallthrough
|
||||
case "off":
|
||||
fallthrough
|
||||
case "0":
|
||||
fallthrough
|
||||
case "":
|
||||
// fallthrough
|
||||
// case "--":
|
||||
t.bool = false
|
||||
t.string = "false"
|
||||
t.Valid = true
|
||||
case "false":
|
||||
fallthrough
|
||||
case "no":
|
||||
fallthrough
|
||||
case "off":
|
||||
fallthrough
|
||||
case "0":
|
||||
fallthrough
|
||||
case "":
|
||||
// fallthrough
|
||||
// case "--":
|
||||
t.bool = false
|
||||
t.string = "false"
|
||||
t.Valid = true
|
||||
|
||||
case "true":
|
||||
fallthrough
|
||||
case "yes":
|
||||
fallthrough
|
||||
case "on":
|
||||
fallthrough
|
||||
case "1":
|
||||
t.bool = true
|
||||
t.string = "true"
|
||||
t.Valid = true
|
||||
case "true":
|
||||
fallthrough
|
||||
case "yes":
|
||||
fallthrough
|
||||
case "on":
|
||||
fallthrough
|
||||
case "1":
|
||||
t.bool = true
|
||||
t.string = "true"
|
||||
t.Valid = true
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -99,7 +99,15 @@ func (dt DateTime) Value() time.Time {
|
||||
}
|
||||
|
||||
func (dt DateTime) String() string {
|
||||
return dt.Original()
|
||||
// return dt.Original()
|
||||
return dt.Time.Format(DateTimeLayout)
|
||||
}
|
||||
|
||||
func (dt DateTime) Match(comp time.Time) bool {
|
||||
if dt.Time == comp {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (dt *DateTime) SetString(value string) *DateTime {
|
||||
|
@ -55,7 +55,7 @@ func (t Float) MarshalJSON() ([]byte, error) {
|
||||
break
|
||||
}
|
||||
t.Valid = true
|
||||
// t.string = strconv.FormatFloat(t.float64, 'f', 12, 64)
|
||||
// t.string = strconv.FormatFloat(t.float64, 'f', -1, 64)
|
||||
}
|
||||
|
||||
return data, err
|
||||
@ -65,6 +65,13 @@ func (t Float) Value() float64 {
|
||||
return t.float64
|
||||
}
|
||||
|
||||
func (t Float) Match(comp float64) bool {
|
||||
if t.float64 == comp {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (t Float) String() string {
|
||||
return t.string
|
||||
}
|
||||
@ -100,7 +107,7 @@ func (t *Float) SetValue(value float64) Float {
|
||||
t.string = ""
|
||||
t.float64 = value
|
||||
t.Valid = true
|
||||
t.string = strconv.FormatFloat(t.float64, 'f', 12, 64)
|
||||
t.string = strconv.FormatFloat(t.float64, 'f', -1, 64)
|
||||
}
|
||||
|
||||
return *t
|
||||
|
@ -69,6 +69,13 @@ func (t Integer) String() string {
|
||||
return t.string
|
||||
}
|
||||
|
||||
func (t Integer) Match(comp int64) bool {
|
||||
if t.int64 == comp {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (t *Integer) SetString(value string) Integer {
|
||||
for range Only.Once {
|
||||
t.string = value
|
||||
@ -181,6 +188,13 @@ func (t Count) String() string {
|
||||
return t.string
|
||||
}
|
||||
|
||||
func (t Count) Match(comp int64) bool {
|
||||
if t.int64 == comp {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (t *Count) SetString(value string) Count {
|
||||
for range Only.Once {
|
||||
t.string = value
|
||||
|
@ -73,6 +73,13 @@ func (t PointId) String() string {
|
||||
return t.string
|
||||
}
|
||||
|
||||
func (t PointId) Match(comp int64) bool {
|
||||
if t.int64 == comp {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (t *PointId) SetString(value string) PointId {
|
||||
for range Only.Once {
|
||||
t.string = value
|
||||
|
@ -59,6 +59,13 @@ func (t String) String() string {
|
||||
return t.string
|
||||
}
|
||||
|
||||
func (t String) Match(comp string) bool {
|
||||
if t.string == comp {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (t *String) SetString(value string) String {
|
||||
for range Only.Once {
|
||||
t.string = value
|
||||
@ -132,6 +139,17 @@ func (t PsKey) Value() string {
|
||||
return t.string
|
||||
}
|
||||
|
||||
func (t PsKey) String() string {
|
||||
return t.string
|
||||
}
|
||||
|
||||
func (t PsKey) Match(comp string) bool {
|
||||
if t.string == comp {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (t PsKey) PsKey() string {
|
||||
return t.string
|
||||
}
|
||||
|
@ -10,32 +10,111 @@ import (
|
||||
)
|
||||
|
||||
|
||||
func IsUnknownStruct(fieldTo reflect.StructField, fieldVo reflect.Value) bool {
|
||||
const (
|
||||
TypeBool = "Bool"
|
||||
TypeCount = "Count"
|
||||
TypeDateTime = "DateTime"
|
||||
TypeFloat = "Float"
|
||||
TypeInteger = "Integer"
|
||||
TypePointId = "PointId"
|
||||
TypePsKey = "PsKey"
|
||||
TypeString = "String"
|
||||
TypeTime = "Time"
|
||||
TypeUnitValue = "UnitValue"
|
||||
|
||||
TypeArrayBool = "[]Bool"
|
||||
TypeArrayCount = "[]Count"
|
||||
TypeArrayDateTime = "[]DateTime"
|
||||
TypeArrayFloat = "[]Float"
|
||||
TypeArrayInteger = "[]Integer"
|
||||
TypeArrayPointId = "[]PointId"
|
||||
TypeArrayPsKey = "[]PsKey"
|
||||
TypeArrayString = "[]String"
|
||||
TypeArrayTime = "[]Time"
|
||||
TypeArrayUnitValue = "[]UnitValue"
|
||||
TypeUnitValues = "UnitValues"
|
||||
|
||||
TypeArrayValueTypesBool = "[]valueTypes.Bool"
|
||||
TypeArrayValueTypesCount = "[]valueTypes.Count"
|
||||
TypeArrayValueTypesDateTime = "[]valueTypes.DateTime"
|
||||
TypeArrayValueTypesFloat = "[]valueTypes.Float"
|
||||
TypeArrayValueTypesInteger = "[]valueTypes.Integer"
|
||||
TypeArrayValueTypesPointId = "[]valueTypes.PointId"
|
||||
TypeArrayValueTypesPsKey = "[]valueTypes.PsKey"
|
||||
TypeArrayValueTypesString = "[]valueTypes.String"
|
||||
TypeArrayValueTypesTime = "[]valueTypes.Time"
|
||||
TypeArrayValueTypesUnitValue = "[]valueTypes.UnitValue"
|
||||
|
||||
TypeValueTypesBool = "valueTypes.Bool"
|
||||
TypeValueTypesCount = "valueTypes.Count"
|
||||
TypeValueTypesDateTime = "valueTypes.DateTime"
|
||||
TypeValueTypesFloat = "valueTypes.Float"
|
||||
TypeValueTypesInteger = "valueTypes.Integer"
|
||||
TypeValueTypesPointId = "valueTypes.PointId"
|
||||
TypeValueTypesPsKey = "valueTypes.PsKey"
|
||||
TypeValueTypesString = "valueTypes.String"
|
||||
TypeValueTypesTime = "valueTypes.Time"
|
||||
TypeValueTypesUnitValue = "valueTypes.UnitValue"
|
||||
)
|
||||
|
||||
func IsUnknownStruct(ref interface{}) bool {
|
||||
var ok bool
|
||||
|
||||
for range Only.Once {
|
||||
fieldVo := reflect.ValueOf(ref)
|
||||
// fieldTo := reflect.TypeOf(ref)
|
||||
// fmt.Printf("fieldVo.Type().String(): %s\n", fieldVo.Type().String())
|
||||
// fmt.Printf("fieldVo.Type().Name(): %s\n", fieldVo.Type().Name())
|
||||
// fmt.Printf("fieldVo.Kind().String(): %s\n", fieldVo.Kind().String())
|
||||
// fmt.Printf("fieldTo.String(): %s\n", fieldTo.String())
|
||||
// fmt.Printf("fieldTo.Name(): %s\n", fieldTo.Name())
|
||||
// fmt.Printf("fieldTo.Kind().String(): %s\n", fieldTo.Kind().String())
|
||||
|
||||
// fmt.Printf("DEBUYg: K:%s / T:%s\n", fieldVo.Kind().String(), fieldVo.Type().String())
|
||||
if fieldVo.Kind() == reflect.Slice {
|
||||
if fieldVo.Len() > 0 {
|
||||
ok = IsUnknownStruct(fieldVo.Index(0).Interface())
|
||||
}
|
||||
break
|
||||
}
|
||||
|
||||
if fieldVo.Kind() == reflect.Array {
|
||||
if fieldVo.Len() > 0 {
|
||||
ok = IsUnknownStruct(fieldVo.Index(0).Interface())
|
||||
}
|
||||
break
|
||||
}
|
||||
|
||||
if fieldVo.Kind() == reflect.Map {
|
||||
mk := fieldVo.MapKeys()
|
||||
if len(mk) > 0 {
|
||||
ok = IsUnknownStruct(fieldVo.MapIndex(mk[0]).Interface())
|
||||
}
|
||||
break
|
||||
}
|
||||
|
||||
if fieldVo.Kind() == reflect.Struct {
|
||||
switch fieldTo.Type.String() {
|
||||
case "Bool":
|
||||
case "Count":
|
||||
case "DateTime":
|
||||
case "Float":
|
||||
case "Integer":
|
||||
case "PointId":
|
||||
case "PsKey":
|
||||
case "String":
|
||||
case "Time":
|
||||
case "UnitValue":
|
||||
case "valueTypes.Bool":
|
||||
case "valueTypes.Count":
|
||||
case "valueTypes.DateTime":
|
||||
case "valueTypes.Float":
|
||||
case "valueTypes.Integer":
|
||||
case "valueTypes.PointId":
|
||||
case "valueTypes.PsKey":
|
||||
case "valueTypes.String":
|
||||
case "valueTypes.Time":
|
||||
case "valueTypes.UnitValue":
|
||||
switch fieldVo.Type().String() {
|
||||
case TypeBool:
|
||||
case TypeCount:
|
||||
case TypeDateTime:
|
||||
case TypeFloat:
|
||||
case TypeInteger:
|
||||
case TypePointId:
|
||||
case TypePsKey:
|
||||
case TypeString:
|
||||
case TypeTime:
|
||||
case TypeUnitValue:
|
||||
case TypeValueTypesBool:
|
||||
case TypeValueTypesCount:
|
||||
case TypeValueTypesDateTime:
|
||||
case TypeValueTypesFloat:
|
||||
case TypeValueTypesInteger:
|
||||
case TypeValueTypesPointId:
|
||||
case TypeValueTypesPsKey:
|
||||
case TypeValueTypesString:
|
||||
case TypeValueTypesTime:
|
||||
case TypeValueTypesUnitValue:
|
||||
|
||||
default:
|
||||
ok = true
|
||||
@ -83,14 +162,14 @@ func PrintInt(s int, i interface{}) string {
|
||||
case "int64":
|
||||
val = i.(int64)
|
||||
|
||||
case "valueTypes.Integer":
|
||||
case TypeValueTypesInteger:
|
||||
fallthrough
|
||||
case "Integer":
|
||||
case TypeInteger:
|
||||
val = i.(Integer).Value()
|
||||
|
||||
case "valueTypes.Count":
|
||||
fallthrough
|
||||
case "Count":
|
||||
case TypeCount:
|
||||
val = i.(Integer).Value()
|
||||
}
|
||||
|
||||
@ -116,14 +195,14 @@ func SizeOfInt(i interface{}) int {
|
||||
case "int64":
|
||||
val = i.(int64)
|
||||
|
||||
case "valueTypes.Integer":
|
||||
case TypeValueTypesInteger:
|
||||
fallthrough
|
||||
case "Integer":
|
||||
case TypeInteger:
|
||||
val = i.(Integer).Value()
|
||||
|
||||
case "valueTypes.Count":
|
||||
case TypeValueTypesCount:
|
||||
fallthrough
|
||||
case "Count":
|
||||
case TypeCount:
|
||||
val = i.(Integer).Value()
|
||||
}
|
||||
switch {
|
||||
@ -167,7 +246,6 @@ func TypeToString(intSize int, dateFormat string, e interface{}) string {
|
||||
ret = PrintInt(intSize, e.(int32))
|
||||
case "int64":
|
||||
ret = PrintInt(intSize, e.(int64))
|
||||
|
||||
case "float32":
|
||||
// ret = float64(s.(float32))
|
||||
v , err := json.Marshal(e)
|
||||
@ -175,7 +253,6 @@ func TypeToString(intSize int, dateFormat string, e interface{}) string {
|
||||
break
|
||||
}
|
||||
ret = string(v)
|
||||
|
||||
case "float64":
|
||||
// ret = s.(float64)
|
||||
v , err := json.Marshal(e)
|
||||
@ -183,23 +260,28 @@ func TypeToString(intSize int, dateFormat string, e interface{}) string {
|
||||
break
|
||||
}
|
||||
ret = string(v)
|
||||
|
||||
case "string":
|
||||
ret = strings.Trim(e.(string), ".")
|
||||
|
||||
case "bool":
|
||||
ret = fmt.Sprintf("%v", e.(bool))
|
||||
case "[]string":
|
||||
// v := strings.Join(s.([]string), ",")
|
||||
v , err := json.Marshal(e)
|
||||
if err != nil {
|
||||
break
|
||||
}
|
||||
ret = string(v)
|
||||
|
||||
case "valueTypes.UnitValue":
|
||||
case TypeValueTypesUnitValue:
|
||||
fallthrough
|
||||
case "UnitValue":
|
||||
case TypeUnitValue:
|
||||
ret = e.(UnitValue).String()
|
||||
|
||||
case "UnitValues":
|
||||
case TypeUnitValues:
|
||||
fallthrough
|
||||
case "[]UnitValue":
|
||||
case TypeArrayUnitValue:
|
||||
fallthrough
|
||||
case "[]valueTypes.UnitValue":
|
||||
case TypeArrayValueTypesUnitValue:
|
||||
// ret = s.([]UnitValue)
|
||||
v , err := json.Marshal(e)
|
||||
if err != nil {
|
||||
@ -207,9 +289,9 @@ func TypeToString(intSize int, dateFormat string, e interface{}) string {
|
||||
}
|
||||
ret = string(v)
|
||||
|
||||
case "valueTypes.Float":
|
||||
case TypeValueTypesFloat:
|
||||
fallthrough
|
||||
case "Float":
|
||||
case TypeFloat:
|
||||
// ret = s.(Float)
|
||||
v , err := json.Marshal(e)
|
||||
if err != nil {
|
||||
@ -217,9 +299,9 @@ func TypeToString(intSize int, dateFormat string, e interface{}) string {
|
||||
}
|
||||
ret = string(v)
|
||||
|
||||
case "[]valueTypes.Float":
|
||||
case TypeArrayValueTypesFloat:
|
||||
fallthrough
|
||||
case "[]Float":
|
||||
case TypeArrayFloat:
|
||||
// ret = s.([]Float)
|
||||
v , err := json.Marshal(e)
|
||||
if err != nil {
|
||||
@ -227,14 +309,14 @@ func TypeToString(intSize int, dateFormat string, e interface{}) string {
|
||||
}
|
||||
ret = string(v)
|
||||
|
||||
case "valueTypes.Integer":
|
||||
case TypeValueTypesInteger:
|
||||
fallthrough
|
||||
case "Integer":
|
||||
case TypeInteger:
|
||||
ret = PrintInt(intSize, e.(Integer))
|
||||
|
||||
case "[]valueTypes.Integer":
|
||||
case TypeArrayValueTypesInteger:
|
||||
fallthrough
|
||||
case "[]Integer":
|
||||
case TypeArrayInteger:
|
||||
// ret = s.([]Integer)
|
||||
v , err := json.Marshal(e)
|
||||
if err != nil {
|
||||
@ -242,14 +324,14 @@ func TypeToString(intSize int, dateFormat string, e interface{}) string {
|
||||
}
|
||||
ret = string(v)
|
||||
|
||||
case "valueTypes.Count":
|
||||
case TypeValueTypesCount:
|
||||
fallthrough
|
||||
case "Count":
|
||||
case TypeCount:
|
||||
ret = PrintInt(intSize, e.(Count))
|
||||
|
||||
case "[]valueTypes.Count":
|
||||
case TypeArrayValueTypesCount:
|
||||
fallthrough
|
||||
case "[]Count":
|
||||
case TypeArrayCount:
|
||||
// ret = s.([]Count)
|
||||
v , err := json.Marshal(e)
|
||||
if err != nil {
|
||||
@ -257,14 +339,14 @@ func TypeToString(intSize int, dateFormat string, e interface{}) string {
|
||||
}
|
||||
ret = string(v)
|
||||
|
||||
case "valueTypes.Bool":
|
||||
case TypeValueTypesBool:
|
||||
fallthrough
|
||||
case "Bool":
|
||||
case TypeBool:
|
||||
ret = e.(Bool).String()
|
||||
|
||||
case "[]valueTypes.Bool":
|
||||
case TypeArrayValueTypesBool:
|
||||
fallthrough
|
||||
case "[]Bool":
|
||||
case TypeArrayBool:
|
||||
// ret = s.([]Bool)
|
||||
v , err := json.Marshal(e)
|
||||
if err != nil {
|
||||
@ -272,14 +354,14 @@ func TypeToString(intSize int, dateFormat string, e interface{}) string {
|
||||
}
|
||||
ret = string(v)
|
||||
|
||||
case "valueTypes.String":
|
||||
case TypeValueTypesString:
|
||||
fallthrough
|
||||
case "String":
|
||||
case TypeString:
|
||||
ret = strings.Trim(e.(String).String(), ".")
|
||||
|
||||
case "[]valueTypes.String":
|
||||
case TypeArrayValueTypesString:
|
||||
fallthrough
|
||||
case "[]String":
|
||||
case TypeArrayString:
|
||||
// ret = s.([]String)
|
||||
v , err := json.Marshal(e)
|
||||
if err != nil {
|
||||
@ -287,14 +369,14 @@ func TypeToString(intSize int, dateFormat string, e interface{}) string {
|
||||
}
|
||||
ret = string(v)
|
||||
|
||||
case "valueTypes.PsKey":
|
||||
case TypeValueTypesPsKey:
|
||||
fallthrough
|
||||
case "PsKey":
|
||||
case TypePsKey:
|
||||
ret = e.(PsKey).Value()
|
||||
|
||||
case "[]valueTypes.PsKey":
|
||||
case TypeArrayValueTypesPsKey:
|
||||
fallthrough
|
||||
case "[]PsKey":
|
||||
case TypeArrayPsKey:
|
||||
// ret = s.([]PsKey)
|
||||
v , err := json.Marshal(e)
|
||||
if err != nil {
|
||||
@ -302,14 +384,14 @@ func TypeToString(intSize int, dateFormat string, e interface{}) string {
|
||||
}
|
||||
ret = string(v)
|
||||
|
||||
case "valueTypes.PointId":
|
||||
case TypeValueTypesPointId:
|
||||
fallthrough
|
||||
case "PointId":
|
||||
case TypePointId:
|
||||
ret = e.(PointId).String()
|
||||
|
||||
case "[]valueTypes.PointId":
|
||||
case TypeArrayValueTypesPointId:
|
||||
fallthrough
|
||||
case "[]PointId":
|
||||
case TypeArrayPointId:
|
||||
// ret = s.([]PointId)
|
||||
v , err := json.Marshal(e)
|
||||
if err != nil {
|
||||
@ -317,41 +399,33 @@ func TypeToString(intSize int, dateFormat string, e interface{}) string {
|
||||
}
|
||||
ret = string(v)
|
||||
|
||||
case "valueTypes.DateTime":
|
||||
case TypeValueTypesDateTime:
|
||||
fallthrough
|
||||
case "DateTime":
|
||||
case TypeDateTime:
|
||||
ret = e.(DateTime).Format(dateFormat)
|
||||
|
||||
case "[]valueTypes.DateTime":
|
||||
case TypeArrayValueTypesDateTime:
|
||||
fallthrough
|
||||
case "[]DateTime":
|
||||
case TypeArrayDateTime:
|
||||
// ret = s.([]DateTime)
|
||||
v , err := json.Marshal(e)
|
||||
if err != nil {
|
||||
break
|
||||
}
|
||||
ret = string(v)
|
||||
|
||||
case "[]string":
|
||||
// v := strings.Join(s.([]string), ",")
|
||||
v , err := json.Marshal(e)
|
||||
if err != nil {
|
||||
break
|
||||
}
|
||||
ret = string(v)
|
||||
}
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
||||
func AnyToUnitValue(e interface{}, unit string, Type string) (UnitValues, bool, bool) {
|
||||
func AnyToUnitValue(e interface{}, unit string, Type string, dateFormat string) (UnitValues, bool, bool) {
|
||||
var uv UnitValues
|
||||
ok := true
|
||||
isNil := false
|
||||
for range Only.Once {
|
||||
if IsNil(e) {
|
||||
// fmt.Println("DEBUG: AnyToUnitValue(): NIL")
|
||||
uv = append(uv, SetUnitValueString("", unit, Type + "(nil)"))
|
||||
uv = append(uv, SetUnitValueString("", unit, Type + "(unknown)"))
|
||||
isNil = true
|
||||
break
|
||||
}
|
||||
@ -373,7 +447,6 @@ func AnyToUnitValue(e interface{}, unit string, Type string) (UnitValues, bool,
|
||||
Type = "--"
|
||||
}
|
||||
uv = append(uv, SetUnitValueInteger(e.(int64), unit, Type))
|
||||
|
||||
case "float32":
|
||||
if Type == "" {
|
||||
Type = "--"
|
||||
@ -384,13 +457,11 @@ func AnyToUnitValue(e interface{}, unit string, Type string) (UnitValues, bool,
|
||||
Type = "--"
|
||||
}
|
||||
uv = append(uv, SetUnitValueFloat(e.(float64), unit, Type))
|
||||
|
||||
case "string":
|
||||
if Type == "" {
|
||||
Type = "--"
|
||||
}
|
||||
uv = append(uv, SetUnitValueString(e.(string), unit, Type))
|
||||
|
||||
case "[]string":
|
||||
// v := strings.Join(e.([]string), ",")
|
||||
if Type == "" {
|
||||
@ -401,105 +472,105 @@ func AnyToUnitValue(e interface{}, unit string, Type string) (UnitValues, bool,
|
||||
j = []byte(fmt.Sprintf("%v", e.([]string)))
|
||||
}
|
||||
uv = append(uv, SetUnitValueString(string(j), unit, Type))
|
||||
|
||||
case "bool":
|
||||
if Type == "" {
|
||||
Type = "--"
|
||||
}
|
||||
uv = append(uv, SetUnitValueBool(e.(bool)))
|
||||
|
||||
case "valueTypes.UnitValue":
|
||||
case TypeValueTypesUnitValue:
|
||||
fallthrough
|
||||
case "UnitValue":
|
||||
case TypeUnitValue:
|
||||
if Type == "" {
|
||||
Type = "--"
|
||||
}
|
||||
uv = append(uv, e.(UnitValue))
|
||||
// uv = uv.UnitValueFix()
|
||||
|
||||
case "UnitValues":
|
||||
case TypeUnitValues:
|
||||
fallthrough
|
||||
case "[]valueTypes.UnitValue":
|
||||
case TypeArrayValueTypesUnitValue:
|
||||
fallthrough
|
||||
case "[]UnitValue":
|
||||
case TypeArrayUnitValue:
|
||||
for _, val := range e.([]UnitValue) {
|
||||
uv = append(uv, val)
|
||||
}
|
||||
|
||||
case "valueTypes.Float":
|
||||
case TypeValueTypesFloat:
|
||||
fallthrough
|
||||
case "Float":
|
||||
case TypeFloat:
|
||||
if Type == "" {
|
||||
Type = "Float"
|
||||
Type = TypeFloat
|
||||
}
|
||||
v := e.(Float)
|
||||
uv = append(uv, SetUnitValueFloat(v.Value(), unit, Type))
|
||||
|
||||
case "[]valueTypes.Float":
|
||||
case TypeArrayValueTypesFloat:
|
||||
fallthrough
|
||||
case "[]Float":
|
||||
case TypeArrayFloat:
|
||||
if Type == "" {
|
||||
Type = "Float"
|
||||
Type = TypeFloat
|
||||
}
|
||||
v := e.([]Float)
|
||||
for _, val := range v {
|
||||
uv = append(uv, SetUnitValueFloat(val.Value(), unit, Type))
|
||||
}
|
||||
|
||||
case "valueTypes.Integer":
|
||||
case TypeValueTypesInteger:
|
||||
fallthrough
|
||||
case "Integer":
|
||||
case TypeInteger:
|
||||
if Type == "" {
|
||||
Type = "Integer"
|
||||
Type = TypeInteger
|
||||
}
|
||||
v := e.(Integer).Value()
|
||||
uv = append(uv, SetUnitValueInteger(v, unit, Type))
|
||||
|
||||
case "[]valueTypes.Integer":
|
||||
case TypeArrayValueTypesInteger:
|
||||
fallthrough
|
||||
case "[]Integer":
|
||||
case TypeArrayInteger:
|
||||
if Type == "" {
|
||||
Type = "Integer"
|
||||
Type = TypeInteger
|
||||
}
|
||||
v := e.([]Integer)
|
||||
for _, val := range v {
|
||||
uv = append(uv, SetUnitValueInteger(val.Value(), unit, Type))
|
||||
}
|
||||
// HERE IS THE PROBLEM - need to return SOMETHING, even if it's null!
|
||||
|
||||
case "valueTypes.Count":
|
||||
case TypeValueTypesCount:
|
||||
fallthrough
|
||||
case "Count":
|
||||
case TypeCount:
|
||||
if Type == "" {
|
||||
Type = "Count"
|
||||
Type = TypeCount
|
||||
}
|
||||
v := e.(Count).Value()
|
||||
uv = append(uv, SetUnitValueInteger(v, unit, Type))
|
||||
|
||||
case "[]valueTypes.Count":
|
||||
case TypeArrayValueTypesCount:
|
||||
fallthrough
|
||||
case "[]Count":
|
||||
case TypeArrayCount:
|
||||
if Type == "" {
|
||||
Type = "Count"
|
||||
Type = TypeCount
|
||||
}
|
||||
v := e.([]Count)
|
||||
for _, val := range v {
|
||||
uv = append(uv, SetUnitValueInteger(val.Value(), unit, Type))
|
||||
}
|
||||
|
||||
case "valueTypes.Bool":
|
||||
case TypeValueTypesBool:
|
||||
fallthrough
|
||||
case "Bool":
|
||||
case TypeBool:
|
||||
if Type == "" {
|
||||
Type = "Bool"
|
||||
Type = TypeBool
|
||||
}
|
||||
v := e.(Bool)
|
||||
uv = append(uv, SetUnitValueBool(v.Value()))
|
||||
|
||||
case "[]valueTypes.Bool":
|
||||
case TypeArrayValueTypesBool:
|
||||
fallthrough
|
||||
case "[]Bool":
|
||||
case TypeArrayBool:
|
||||
if Type == "" {
|
||||
Type = "Bool"
|
||||
Type = TypeBool
|
||||
}
|
||||
v := e.([]Bool)
|
||||
for _, val := range v {
|
||||
@ -507,113 +578,305 @@ func AnyToUnitValue(e interface{}, unit string, Type string) (UnitValues, bool,
|
||||
uv = append(uv, SetUnitValueBool(val.Value()))
|
||||
}
|
||||
|
||||
case "valueTypes.String":
|
||||
case TypeValueTypesString:
|
||||
fallthrough
|
||||
case "String":
|
||||
case TypeString:
|
||||
if Type == "" {
|
||||
Type = "String"
|
||||
Type = TypeString
|
||||
}
|
||||
v := e.(String).String()
|
||||
uv = append(uv, SetUnitValueString(v, unit, Type))
|
||||
|
||||
case "[]valueTypes.String":
|
||||
case TypeArrayValueTypesString:
|
||||
fallthrough
|
||||
case "[]String":
|
||||
case TypeArrayString:
|
||||
if Type == "" {
|
||||
Type = "String"
|
||||
Type = TypeString
|
||||
}
|
||||
v := e.([]String)
|
||||
for _, val := range v {
|
||||
uv = append(uv, SetUnitValueString(val.Value(), unit, Type))
|
||||
}
|
||||
|
||||
case "valueTypes.PsKey":
|
||||
case TypeValueTypesPsKey:
|
||||
fallthrough
|
||||
case "PsKey":
|
||||
case TypePsKey:
|
||||
if Type == "" {
|
||||
Type = "PsKey"
|
||||
Type = TypePsKey
|
||||
}
|
||||
v := e.(PsKey).Value()
|
||||
uv = append(uv, SetUnitValueString(v, unit, Type))
|
||||
|
||||
case "[]valueTypes.PsKey":
|
||||
case TypeArrayValueTypesPsKey:
|
||||
fallthrough
|
||||
case "[]PsKey":
|
||||
case TypeArrayPsKey:
|
||||
if Type == "" {
|
||||
Type = "PsKey"
|
||||
Type = TypePsKey
|
||||
}
|
||||
v := e.([]PsKey)
|
||||
for _, val := range v {
|
||||
uv = append(uv, SetUnitValueString(val.Value(), unit, Type))
|
||||
}
|
||||
|
||||
case "valueTypes.PointId":
|
||||
case TypeValueTypesPointId:
|
||||
fallthrough
|
||||
case "PointId":
|
||||
case TypePointId:
|
||||
if Type == "" {
|
||||
Type = "PointId"
|
||||
Type = TypePointId
|
||||
}
|
||||
v := e.(PointId).String()
|
||||
uv = append(uv, SetUnitValueString(v, unit, Type))
|
||||
|
||||
case "[]valueTypes.PointId":
|
||||
case TypeArrayValueTypesPointId:
|
||||
fallthrough
|
||||
case "[]PointId":
|
||||
case TypeArrayPointId:
|
||||
if Type == "" {
|
||||
Type = "PointId"
|
||||
Type = TypePointId
|
||||
}
|
||||
v := e.([]PointId)
|
||||
for _, val := range v {
|
||||
uv = append(uv, SetUnitValueString(val.String(), unit, Type))
|
||||
}
|
||||
|
||||
case "valueTypes.DateTime":
|
||||
case TypeValueTypesDateTime:
|
||||
fallthrough
|
||||
case "DateTime":
|
||||
case TypeDateTime:
|
||||
if Type == "" {
|
||||
Type = "DateTime"
|
||||
Type = TypeDateTime
|
||||
}
|
||||
v := e.(DateTime).String()
|
||||
v := e.(DateTime).Format(dateFormat)
|
||||
uv = append(uv, SetUnitValueString(v, unit, Type))
|
||||
|
||||
case "[]valueTypes.DateTime":
|
||||
case TypeArrayValueTypesDateTime:
|
||||
fallthrough
|
||||
case "[]DateTime":
|
||||
case TypeArrayDateTime:
|
||||
if Type == "" {
|
||||
Type = "DateTime"
|
||||
Type = TypeDateTime
|
||||
}
|
||||
v := e.([]DateTime)
|
||||
for _, val := range v {
|
||||
uv = append(uv, SetUnitValueString(val.String(), unit, Type))
|
||||
uv = append(uv, SetUnitValueString(val.Format(dateFormat), unit, Type))
|
||||
}
|
||||
|
||||
case "valueTypes.Time":
|
||||
case TypeValueTypesTime:
|
||||
fallthrough
|
||||
case "Time":
|
||||
case TypeTime:
|
||||
if Type == "" {
|
||||
Type = "Time"
|
||||
Type = TypeTime
|
||||
}
|
||||
v := e.(Time).String()
|
||||
v := e.(Time).Format(TimeLayout)
|
||||
uv = append(uv, SetUnitValueString(v, unit, Type))
|
||||
|
||||
case "[]valueTypes.Time":
|
||||
case TypeArrayValueTypesTime:
|
||||
fallthrough
|
||||
case "[]Time":
|
||||
case TypeArrayTime:
|
||||
if Type == "" {
|
||||
Type = "Time"
|
||||
Type = TypeTime
|
||||
}
|
||||
v := e.([]Time)
|
||||
for _, val := range v {
|
||||
uv = append(uv, SetUnitValueString(val.String(), unit, Type))
|
||||
uv = append(uv, SetUnitValueString(val.Format(TimeLayout), unit, Type))
|
||||
}
|
||||
|
||||
default:
|
||||
uv = append(uv, SetUnitValueString("", unit, Type + "(unknown)"))
|
||||
ok = false
|
||||
}
|
||||
}
|
||||
return uv, isNil, ok
|
||||
}
|
||||
|
||||
func AnyToValueString(e interface{}, intSize int, dateFormat string) string {
|
||||
var ret string
|
||||
|
||||
for range Only.Once {
|
||||
if IsNil(e) {
|
||||
break
|
||||
}
|
||||
|
||||
// fmt.Printf("DEBUG TYPE: %s\n", reflect.TypeOf(e).String())
|
||||
switch reflect.TypeOf(e).String() {
|
||||
case "bool":
|
||||
ret = fmt.Sprintf("%v", e.(bool))
|
||||
case "int":
|
||||
ret = PrintInt(intSize, e.(int))
|
||||
case "int32":
|
||||
ret = PrintInt(intSize, e.(int32))
|
||||
case "int64":
|
||||
ret = PrintInt(intSize, e.(int64))
|
||||
case "float32":
|
||||
// ret = float64(s.(float32))
|
||||
v , err := json.Marshal(e)
|
||||
if err != nil {
|
||||
break
|
||||
}
|
||||
ret = string(v)
|
||||
case "float64":
|
||||
// ret = s.(float64)
|
||||
v , err := json.Marshal(e)
|
||||
if err != nil {
|
||||
break
|
||||
}
|
||||
ret = string(v)
|
||||
case "string":
|
||||
ret = e.(string)
|
||||
// ret = strings.Trim(e.(string), ".")
|
||||
case "[]string":
|
||||
// v := strings.Join(s.([]string), ",")
|
||||
v , err := json.Marshal(e)
|
||||
if err != nil {
|
||||
break
|
||||
}
|
||||
ret = string(v)
|
||||
|
||||
case TypeValueTypesUnitValue:
|
||||
fallthrough
|
||||
case TypeUnitValue:
|
||||
ret = e.(UnitValue).String()
|
||||
|
||||
case TypeUnitValues:
|
||||
fallthrough
|
||||
case TypeArrayUnitValue:
|
||||
fallthrough
|
||||
case TypeArrayValueTypesUnitValue:
|
||||
// ret = s.([]UnitValue)
|
||||
v , err := json.Marshal(e)
|
||||
if err != nil {
|
||||
break
|
||||
}
|
||||
ret = string(v)
|
||||
|
||||
case TypeValueTypesFloat:
|
||||
fallthrough
|
||||
case TypeFloat:
|
||||
ret = e.(Float).String()
|
||||
|
||||
case TypeArrayValueTypesFloat:
|
||||
fallthrough
|
||||
case TypeArrayFloat:
|
||||
// ret = s.([]Float)
|
||||
v , err := json.Marshal(e)
|
||||
if err != nil {
|
||||
break
|
||||
}
|
||||
ret = string(v)
|
||||
|
||||
case TypeValueTypesInteger:
|
||||
fallthrough
|
||||
case TypeInteger:
|
||||
ret = PrintInt(intSize, e.(Integer))
|
||||
|
||||
case TypeArrayValueTypesInteger:
|
||||
fallthrough
|
||||
case TypeArrayInteger:
|
||||
// ret = s.([]Integer)
|
||||
v , err := json.Marshal(e)
|
||||
if err != nil {
|
||||
break
|
||||
}
|
||||
ret = string(v)
|
||||
|
||||
case TypeValueTypesCount:
|
||||
fallthrough
|
||||
case TypeCount:
|
||||
ret = PrintInt(intSize, e.(Count))
|
||||
|
||||
case TypeArrayValueTypesCount:
|
||||
fallthrough
|
||||
case TypeArrayCount:
|
||||
// ret = s.([]Count)
|
||||
v , err := json.Marshal(e)
|
||||
if err != nil {
|
||||
break
|
||||
}
|
||||
ret = string(v)
|
||||
|
||||
case TypeValueTypesBool:
|
||||
fallthrough
|
||||
case TypeBool:
|
||||
ret = e.(Bool).String()
|
||||
|
||||
case TypeArrayValueTypesBool:
|
||||
fallthrough
|
||||
case TypeArrayBool:
|
||||
// ret = s.([]Bool)
|
||||
v , err := json.Marshal(e)
|
||||
if err != nil {
|
||||
break
|
||||
}
|
||||
ret = string(v)
|
||||
|
||||
case TypeValueTypesString:
|
||||
fallthrough
|
||||
case TypeString:
|
||||
ret = e.(String).String()
|
||||
|
||||
case TypeArrayValueTypesString:
|
||||
fallthrough
|
||||
case TypeArrayString:
|
||||
// ret = s.([]String)
|
||||
v , err := json.Marshal(e)
|
||||
if err != nil {
|
||||
break
|
||||
}
|
||||
ret = string(v)
|
||||
|
||||
case TypeValueTypesPsKey:
|
||||
fallthrough
|
||||
case TypePsKey:
|
||||
ret = e.(PsKey).Value()
|
||||
|
||||
case TypeArrayValueTypesPsKey:
|
||||
fallthrough
|
||||
case TypeArrayPsKey:
|
||||
// ret = s.([]PsKey)
|
||||
v , err := json.Marshal(e)
|
||||
if err != nil {
|
||||
break
|
||||
}
|
||||
ret = string(v)
|
||||
|
||||
case TypeValueTypesPointId:
|
||||
fallthrough
|
||||
case TypePointId:
|
||||
ret = e.(PointId).String()
|
||||
|
||||
case TypeArrayValueTypesPointId:
|
||||
fallthrough
|
||||
case TypeArrayPointId:
|
||||
// ret = s.([]PointId)
|
||||
v , err := json.Marshal(e)
|
||||
if err != nil {
|
||||
break
|
||||
}
|
||||
ret = string(v)
|
||||
|
||||
case TypeValueTypesDateTime:
|
||||
fallthrough
|
||||
case TypeDateTime:
|
||||
ret = e.(DateTime).Format(dateFormat)
|
||||
|
||||
case TypeArrayValueTypesDateTime:
|
||||
fallthrough
|
||||
case TypeArrayDateTime:
|
||||
// ret = s.([]DateTime)
|
||||
v , err := json.Marshal(e)
|
||||
if err != nil {
|
||||
break
|
||||
}
|
||||
ret = string(v)
|
||||
|
||||
case TypeValueTypesTime:
|
||||
fallthrough
|
||||
case TypeTime:
|
||||
ret = e.(Time).Format(dateFormat)
|
||||
|
||||
default:
|
||||
}
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
||||
|
||||
// func Float32ToString(num float64) string {
|
||||
// s := fmt.Sprintf("%.6f", num)
|
||||
|
@ -15,18 +15,20 @@ type UnitValue struct {
|
||||
|
||||
TypeValue string `json:"type_value"`
|
||||
|
||||
float64 `json:"value_float,omitempty"`
|
||||
int64 `json:"value_int,omitempty"`
|
||||
bool `json:"value_bool,omitempty"`
|
||||
*float64 `json:"value_float,omitempty"`
|
||||
*int64 `json:"value_int,omitempty"`
|
||||
*bool `json:"value_bool,omitempty"`
|
||||
|
||||
isFloat bool
|
||||
// isFloat bool
|
||||
Valid bool `json:"valid"`
|
||||
}
|
||||
|
||||
var zero = int64(0)
|
||||
|
||||
func (t *UnitValue) UnitValueFix() UnitValue {
|
||||
switch t.UnitValue {
|
||||
case "w":
|
||||
t.UnitValue = "W"
|
||||
case "w":
|
||||
t.UnitValue = "W"
|
||||
}
|
||||
|
||||
switch t.UnitValue {
|
||||
@ -112,14 +114,14 @@ func (t UnitValue) MarshalJSON() ([]byte, error) {
|
||||
for range Only.Once {
|
||||
t.Valid = false
|
||||
|
||||
if t.isFloat {
|
||||
if t.float64 != nil {
|
||||
// Store result to JSON string
|
||||
data, err = json.Marshal(&struct {
|
||||
Unit string `json:"unit"`
|
||||
Value float64 `json:"value"`
|
||||
}{
|
||||
Unit: t.UnitValue,
|
||||
Value: t.float64,
|
||||
Value: *t.float64,
|
||||
})
|
||||
if err != nil {
|
||||
break
|
||||
@ -129,16 +131,32 @@ func (t UnitValue) MarshalJSON() ([]byte, error) {
|
||||
break
|
||||
}
|
||||
|
||||
// Store result to JSON string
|
||||
data, err = json.Marshal(&struct {
|
||||
Unit string `json:"unit"`
|
||||
Value int64 `json:"value"`
|
||||
}{
|
||||
Unit: t.UnitValue,
|
||||
Value: t.int64,
|
||||
})
|
||||
if err != nil {
|
||||
break
|
||||
if t.int64 != nil {
|
||||
// Store result to JSON string
|
||||
data, err = json.Marshal(&struct {
|
||||
Unit string `json:"unit"`
|
||||
Value int64 `json:"value"`
|
||||
}{
|
||||
Unit: t.UnitValue,
|
||||
Value: *t.int64,
|
||||
})
|
||||
if err != nil {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if t.bool != nil {
|
||||
// Store result to JSON string
|
||||
data, err = json.Marshal(&struct {
|
||||
Unit string `json:"unit"`
|
||||
Value bool `json:"value"`
|
||||
}{
|
||||
Unit: t.UnitValue,
|
||||
Value: *t.bool,
|
||||
})
|
||||
if err != nil {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
t.Valid = true
|
||||
@ -148,26 +166,102 @@ func (t UnitValue) MarshalJSON() ([]byte, error) {
|
||||
}
|
||||
|
||||
func (t UnitValue) Value() float64 {
|
||||
if t.isFloat {
|
||||
return t.float64
|
||||
var ret float64
|
||||
for range Only.Once {
|
||||
if t.float64 != nil {
|
||||
ret = *t.float64
|
||||
break
|
||||
}
|
||||
|
||||
if t.int64 != nil {
|
||||
ret = float64(*t.int64)
|
||||
break
|
||||
}
|
||||
|
||||
if t.bool != nil {
|
||||
if *t.bool {
|
||||
ret = 1
|
||||
break
|
||||
}
|
||||
ret = 0
|
||||
break
|
||||
}
|
||||
}
|
||||
return float64(t.int64)
|
||||
return ret
|
||||
}
|
||||
|
||||
func (t UnitValue) ValueFloat() float64 {
|
||||
return t.float64
|
||||
if t.float64 == nil {
|
||||
return 0
|
||||
}
|
||||
return *t.float64
|
||||
}
|
||||
|
||||
func (t UnitValue) ValueInt() int64 {
|
||||
return t.int64
|
||||
if t.int64 == nil {
|
||||
return 0
|
||||
}
|
||||
return *t.int64
|
||||
}
|
||||
|
||||
func (t UnitValue) ValueBool() bool {
|
||||
return t.bool
|
||||
if t.float64 == nil {
|
||||
return false
|
||||
}
|
||||
return *t.bool
|
||||
}
|
||||
|
||||
func (t UnitValue) String() string {
|
||||
return t.StringValue
|
||||
var ret string
|
||||
for range Only.Once {
|
||||
if t.float64 != nil {
|
||||
ret = strconv.FormatFloat(*t.float64, 'f', -1, 64)
|
||||
break
|
||||
}
|
||||
|
||||
if t.int64 != nil {
|
||||
ret = strconv.FormatInt(*t.int64, 10)
|
||||
break
|
||||
}
|
||||
|
||||
if t.bool != nil {
|
||||
ret = strconv.FormatBool(*t.bool)
|
||||
break
|
||||
}
|
||||
|
||||
ret = t.StringValue
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
||||
func (t UnitValue) MatchFloat(comp float64) bool {
|
||||
if t.float64 == nil {
|
||||
return false
|
||||
}
|
||||
if *t.float64 == comp {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (t UnitValue) MatchInt(comp int64) bool {
|
||||
if t.int64 == nil {
|
||||
return false
|
||||
}
|
||||
if *t.int64 == comp {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (t UnitValue) MatchBool(comp bool) bool {
|
||||
if t.bool == nil {
|
||||
return false
|
||||
}
|
||||
if *t.bool == comp {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (t UnitValue) Unit() string {
|
||||
@ -178,10 +272,14 @@ func (t UnitValue) Type() string {
|
||||
return t.TypeValue
|
||||
}
|
||||
|
||||
var varTrue = true
|
||||
var varFalse = false
|
||||
func (t *UnitValue) SetString(value string) UnitValue {
|
||||
for range Only.Once {
|
||||
t.StringValue = value
|
||||
t.int64 = 0
|
||||
t.float64 = nil
|
||||
t.int64 = nil
|
||||
t.bool = nil
|
||||
t.Valid = false
|
||||
|
||||
if value == "" {
|
||||
@ -193,6 +291,15 @@ func (t *UnitValue) SetString(value string) UnitValue {
|
||||
break
|
||||
}
|
||||
|
||||
if value == "true" {
|
||||
t.SetBool(true)
|
||||
break
|
||||
}
|
||||
if value == "false" {
|
||||
t.SetBool(false)
|
||||
break
|
||||
}
|
||||
|
||||
if strings.Contains(value, ".") {
|
||||
v, err := strconv.ParseFloat(t.StringValue, 64)
|
||||
if err != nil {
|
||||
@ -214,11 +321,12 @@ func (t *UnitValue) SetString(value string) UnitValue {
|
||||
|
||||
func (t *UnitValue) SetInteger(value int64) UnitValue {
|
||||
for range Only.Once {
|
||||
t.int64 = value
|
||||
t.float64 = float64(value)
|
||||
t.isFloat = false
|
||||
t.int64 = &value
|
||||
// fv := float64(value); t.float64 = &fv
|
||||
t.float64 = nil
|
||||
t.bool = nil
|
||||
t.Valid = true
|
||||
t.StringValue = strconv.FormatInt(t.int64, 10)
|
||||
t.StringValue = strconv.FormatInt(*t.int64, 10)
|
||||
}
|
||||
|
||||
return *t
|
||||
@ -226,13 +334,15 @@ func (t *UnitValue) SetInteger(value int64) UnitValue {
|
||||
|
||||
func (t *UnitValue) SetFloat(value float64) UnitValue {
|
||||
for range Only.Once {
|
||||
t.int64 = int64(value)
|
||||
t.float64 = value
|
||||
t.isFloat = true
|
||||
// iv := int64(value)
|
||||
// t.int64 = &iv
|
||||
t.int64 = nil
|
||||
t.float64 = &value
|
||||
t.bool = nil
|
||||
t.Valid = true
|
||||
// t.String = strconv.FormatFloat(t.float64, 'f', 12, 64)
|
||||
// t.String = strings.TrimRight(t.String, "0")
|
||||
t.StringValue = strconv.FormatFloat(t.float64, 'f', -1, 64)
|
||||
t.StringValue = strconv.FormatFloat(*t.float64, 'f', -1, 64)
|
||||
}
|
||||
|
||||
return *t
|
||||
@ -240,19 +350,50 @@ func (t *UnitValue) SetFloat(value float64) UnitValue {
|
||||
|
||||
func (t *UnitValue) SetBool(value bool) UnitValue {
|
||||
for range Only.Once {
|
||||
t.isFloat = false
|
||||
t.Valid = true
|
||||
if value {
|
||||
t.bool = value
|
||||
t.float64 = 0
|
||||
t.int64 = 0
|
||||
t.StringValue = "true"
|
||||
break
|
||||
t.float64 = nil
|
||||
t.int64 = nil
|
||||
t.bool = &value
|
||||
t.StringValue = strconv.FormatBool(value)
|
||||
}
|
||||
|
||||
return *t
|
||||
}
|
||||
|
||||
func (t *UnitValue) SetBoolString(value string) UnitValue {
|
||||
for range Only.Once {
|
||||
t.Valid = true
|
||||
t.float64 = nil
|
||||
t.int64 = nil
|
||||
// t.StringValue = strconv.FormatBool(value)
|
||||
|
||||
switch strings.ToLower(value) {
|
||||
case "false":
|
||||
fallthrough
|
||||
case "no":
|
||||
fallthrough
|
||||
case "off":
|
||||
fallthrough
|
||||
case "0":
|
||||
fallthrough
|
||||
case "":
|
||||
// fallthrough
|
||||
// case "--":
|
||||
t.bool = &varFalse
|
||||
t.StringValue = "false"
|
||||
t.Valid = true
|
||||
|
||||
case "true":
|
||||
fallthrough
|
||||
case "yes":
|
||||
fallthrough
|
||||
case "on":
|
||||
fallthrough
|
||||
case "1":
|
||||
t.bool = &varTrue
|
||||
t.StringValue = "true"
|
||||
t.Valid = true
|
||||
}
|
||||
t.bool = value
|
||||
t.float64 = 1
|
||||
t.int64 = 1
|
||||
t.StringValue = "false"
|
||||
}
|
||||
|
||||
return *t
|
||||
@ -261,7 +402,6 @@ func (t *UnitValue) SetBool(value bool) UnitValue {
|
||||
func (t *UnitValue) SetUnit(unit string) UnitValue {
|
||||
for range Only.Once {
|
||||
t.UnitValue = unit
|
||||
// t.Valid = true
|
||||
}
|
||||
|
||||
return *t
|
||||
|
@ -61,7 +61,7 @@ func (sg *SunGrow) GetEndpoints(endpoints []string, psIds []valueTypes.Integer,
|
||||
}
|
||||
|
||||
if date.IsZero() {
|
||||
date = valueTypes.NewDateTime("now")
|
||||
date = valueTypes.NewDateTime(valueTypes.Now)
|
||||
}
|
||||
// fmt.Printf("FilePrefix: %s\n", date.Original())
|
||||
// fmt.Printf("String: %s\n", date.String())
|
||||
|
@ -54,10 +54,10 @@ func (sg *SunGrow) GetPointNamesFromTemplate(template string) api.TemplatePoints
|
||||
pr.Unit = ""
|
||||
}
|
||||
ret = append(ret, api.TemplatePoint {
|
||||
PsKey: dn,
|
||||
PointId: pr.PointID,
|
||||
Description: pr.PointName,
|
||||
Unit: pr.Unit,
|
||||
PsKey: dn,
|
||||
PointId: pr.PointID,
|
||||
Name: pr.PointName,
|
||||
Unit: pr.Unit,
|
||||
})
|
||||
}
|
||||
}
|
||||
@ -150,7 +150,7 @@ func (sg *SunGrow) GetTemplatePoints(template string) error {
|
||||
sg.Error = table.AddRow(
|
||||
// api.NameDevicePoint(s.PsKey, s.PointId),
|
||||
s.PsKey + "." + s.PointId.String(),
|
||||
s.Description,
|
||||
s.Name,
|
||||
s.Unit,
|
||||
)
|
||||
if sg.Error != nil {
|
||||
@ -787,6 +787,7 @@ func (sg *SunGrow) GetDevicePoints(psIds ...valueTypes.Integer) error {
|
||||
break
|
||||
}
|
||||
points.AppendMap(data)
|
||||
|
||||
// api raw getPowerStationData '{"date_id":"202210","date_type":"2","ps_id":"1171348"}'
|
||||
ep = sg.GetByStruct("AppService.getPowerStationData", getPowerStationData.RequestData{ PsId: psId, DateType: "2", DateID: "202210"}, DefaultCacheTimeout)
|
||||
if sg.Error != nil {
|
||||
@ -799,6 +800,7 @@ func (sg *SunGrow) GetDevicePoints(psIds ...valueTypes.Integer) error {
|
||||
break
|
||||
}
|
||||
points.AppendMap(data)
|
||||
|
||||
// api raw getPowerStationData '{"date_id":"2022","date_type":"3","ps_id":"1171348"}'
|
||||
ep = sg.GetByStruct("AppService.getPowerStationData", getPowerStationData.RequestData{ PsId: psId, DateType: "3", DateID: "2022"}, DefaultCacheTimeout)
|
||||
if sg.Error != nil {
|
||||
@ -1086,7 +1088,7 @@ func (sg *SunGrow) GetDevices(print bool) (getDeviceList.Devices, error) {
|
||||
DeviceModelID: valueTypes.SetIntegerValue(0),
|
||||
TypeName: valueTypes.SetStringValue("Ps Id"),
|
||||
DeviceState: psId.PsHealthStatus,
|
||||
DevStatus: psId.PsStatus.String(),
|
||||
DevStatus: psId.PsStatus,
|
||||
Uuid: valueTypes.SetIntegerValue(0),
|
||||
|
||||
// PsFaultStatus: d.PsFaultStatus,
|
||||
|
@ -449,7 +449,7 @@ func (m *Mqtt) GetLastReset(pointType string) string {
|
||||
if !pt.Valid {
|
||||
break
|
||||
}
|
||||
if pt.TimeSpan == "" {
|
||||
if pt.UpdateFreq == "" {
|
||||
break
|
||||
}
|
||||
ret = pt.WhenReset()
|
||||
|
Loading…
x
Reference in New Issue
Block a user