v2.3.2 - Support update freqs.

This commit is contained in:
MickMake 2022-10-19 01:37:11 +11:00
parent 064b963b85
commit 02151a60b0
33 changed files with 3877 additions and 2425 deletions

253
.idea/workspace.xml generated
View File

@ -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[&quot;p83012&quot;]" language="go" />
<watch expression="tp[&quot;getPsDetail.1129147.P83012Value&quot;]" language="go" />
<watch expression="entries.Map[&quot;virtual.1171348_14_1_2.power_pv_active&quot;]" language="go" />
<watch expression="power_pv_active" language="go" />
<watch expression="des" language="go" />
<watch expression="dm.Map[&quot;virtual.1171348_14_1_2.power_pv_active&quot;]" language="go" />
</configuration>
</watches-manager>
</component>

View File

@ -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: "",

View File

@ -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(""))
}
}

View File

@ -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"`

View File

@ -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 {

View File

@ -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
}

View File

@ -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 {

View File

@ -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
}

View File

@ -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
}

View File

@ -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

View File

@ -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,
)

View File

@ -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 {

View File

@ -6,4 +6,106 @@ const (
NullAreaName = "NullArea"
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
View 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, ".")
// }

View File

@ -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

View 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
}

View 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
}

View File

@ -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"`

View File

@ -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: ""},

View File

@ -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: "",
})
}
}

View File

@ -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,
)
}
}

View File

@ -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
}
}

View File

@ -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 {

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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
}

View File

@ -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)

View File

@ -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

View File

@ -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())

View File

@ -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,

View File

@ -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()