mirror of
https://github.com/MickMake/GoSungrow.git
synced 2025-03-26 17:41:42 +01:00
576 lines
15 KiB
Go
576 lines
15 KiB
Go
package iSolarCloud
|
|
|
|
import (
|
|
"GoSungrow/iSolarCloud/AppService/getHouseholdStoragePsReport"
|
|
"GoSungrow/iSolarCloud/AppService/getKpiInfo"
|
|
"GoSungrow/iSolarCloud/AppService/getPowerDevicePointInfo"
|
|
"GoSungrow/iSolarCloud/AppService/getPowerStationData"
|
|
"GoSungrow/iSolarCloud/AppService/getPsDetail"
|
|
"GoSungrow/iSolarCloud/AppService/getPsDetailWithPsType"
|
|
"GoSungrow/iSolarCloud/AppService/getPsList"
|
|
"GoSungrow/iSolarCloud/AppService/queryDeviceList"
|
|
"GoSungrow/iSolarCloud/AppService/queryMutiPointDataList"
|
|
"GoSungrow/iSolarCloud/WebAppService/getDevicePointAttrs"
|
|
"GoSungrow/iSolarCloud/api"
|
|
"GoSungrow/iSolarCloud/api/GoStruct/output"
|
|
"GoSungrow/iSolarCloud/api/GoStruct/valueTypes"
|
|
"fmt"
|
|
"github.com/MickMake/GoUnify/Only"
|
|
"math"
|
|
"os"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
|
|
// GetPowerDevicePointInfo - AppService.getPowerDevicePointInfo
|
|
func (sg *SunGrow) GetPowerDevicePointInfo(min valueTypes.Integer, max valueTypes.Integer) ([]getPowerDevicePointInfo.ResultData, error) {
|
|
var ret []getPowerDevicePointInfo.ResultData
|
|
for range Only.Once {
|
|
_, _ = fmt.Fprintf(os.Stderr,"Scanning from %s to %s.", min, max)
|
|
for id := min.Value(); id < max.Value(); id++ {
|
|
PrintPause(id, 20)
|
|
|
|
ep := sg.GetByStruct(getPowerDevicePointInfo.EndPointName,
|
|
getPowerDevicePointInfo.RequestData {
|
|
Id: valueTypes.SetIntegerValue(id),
|
|
},
|
|
time.Hour*24,
|
|
)
|
|
if sg.IsError() {
|
|
break
|
|
}
|
|
|
|
data := getPowerDevicePointInfo.Assert(ep)
|
|
ret = append(ret, data.Response.ResultData)
|
|
}
|
|
_, _ = fmt.Fprintf(os.Stderr,"\n")
|
|
}
|
|
|
|
return ret, sg.Error
|
|
}
|
|
|
|
func (sg *SunGrow) GetAllPointsData(psIds ...string) error {
|
|
for range Only.Once {
|
|
var points api.DataMap
|
|
|
|
pids := sg.SetPsIds(psIds...)
|
|
if sg.Error != nil {
|
|
break
|
|
}
|
|
|
|
// getPsList
|
|
ep := sg.GetByStruct(getPsList.EndPointName, getPsList.RequestData{}, DefaultCacheTimeout)
|
|
if sg.IsError() {
|
|
break
|
|
}
|
|
PsList := getPsList.Assert(ep)
|
|
data := PsList.GetEndPointData()
|
|
if PsList.Error != nil {
|
|
sg.Error = PsList.Error
|
|
break
|
|
}
|
|
points.AppendMap(data)
|
|
|
|
for _, psId := range pids {
|
|
// pid := strconv.Itoa(int(psId))
|
|
|
|
// GoSungrow api raw getIncomeSettingInfos '{"ps_id":"1171348"}'
|
|
// // getPowerStationForHousehold
|
|
// // GoSungrow api raw getPowerStationForHousehold '{"ps_id":"1171348"}'
|
|
|
|
// // getAreaList
|
|
// getAreaList.Disabled
|
|
//
|
|
// // getPsReport
|
|
// getPsReport.Disabled
|
|
|
|
// // getPowerStatistics
|
|
// // api raw getPowerStatistics '{"ps_id":"1171348"}'
|
|
// ep = sg.GetByStruct(getPowerStatistics.EndPointName, getPowerStatistics.RequestData{ PsId: pid }, DefaultCacheTimeout)
|
|
// if sg.Error != nil {
|
|
// break
|
|
// }
|
|
// PowerStatistics := getPowerStatistics.Assert(ep)
|
|
// data = PowerStatistics.GetEndPointData()
|
|
// if PowerStatistics.Error != nil {
|
|
// sg.Error = PowerStatistics.Error
|
|
// break
|
|
// }
|
|
// points.AppendMap(data)
|
|
|
|
// getPowerStationData
|
|
// api raw getPowerStationData '{"date_id":"20221007","date_type":"1","ps_id":"1171348"}'
|
|
ep = sg.GetByStruct(getPowerStationData.EndPointName,
|
|
getPowerStationData.RequestData{ PsId: psId, DateType: valueTypes.SetStringValue("1"), DateId: valueTypes.SetDateTimeString("20221007")},
|
|
DefaultCacheTimeout)
|
|
if sg.IsError() {
|
|
break
|
|
}
|
|
PowerStationData := getPowerStationData.Assert(ep)
|
|
data = PowerStationData.GetEndPointData()
|
|
if PowerStationData.Error != nil {
|
|
sg.Error = PowerStationData.Error
|
|
break
|
|
}
|
|
points.AppendMap(data)
|
|
|
|
// api raw getPowerStationData '{"date_id":"202210","date_type":"2","ps_id":"1171348"}'
|
|
ep = sg.GetByStruct(getPowerStationData.EndPointName,
|
|
getPowerStationData.RequestData{ PsId: psId, DateType: valueTypes.SetStringValue("2"), DateId: valueTypes.SetDateTimeString("202210")},
|
|
DefaultCacheTimeout)
|
|
if sg.IsError() {
|
|
break
|
|
}
|
|
PowerStationData = getPowerStationData.Assert(ep)
|
|
data = PowerStationData.GetEndPointData()
|
|
if PowerStationData.Error != nil {
|
|
sg.Error = PowerStationData.Error
|
|
break
|
|
}
|
|
points.AppendMap(data)
|
|
|
|
// api raw getPowerStationData '{"date_id":"2022","date_type":"3","ps_id":"1171348"}'
|
|
ep = sg.GetByStruct(getPowerStationData.EndPointName,
|
|
getPowerStationData.RequestData{ PsId: psId, DateType: valueTypes.SetStringValue("3"), DateId: valueTypes.SetDateTimeString("2022")},
|
|
DefaultCacheTimeout)
|
|
if sg.IsError() {
|
|
break
|
|
}
|
|
PowerStationData = getPowerStationData.Assert(ep)
|
|
data = PowerStationData.GetEndPointData()
|
|
if PowerStationData.Error != nil {
|
|
sg.Error = PowerStationData.Error
|
|
break
|
|
}
|
|
points.AppendMap(data)
|
|
|
|
|
|
// queryDeviceList
|
|
// api get AppService.queryDeviceList '{"ps_id":"1171348"}'
|
|
ep = sg.GetByStruct(queryDeviceList.EndPointName, queryDeviceList.RequestData{ PsId: psId }, DefaultCacheTimeout)
|
|
if sg.IsError() {
|
|
break
|
|
}
|
|
DeviceList := queryDeviceList.Assert(ep)
|
|
data = DeviceList.GetEndPointData()
|
|
if DeviceList.Error != nil {
|
|
sg.Error = DeviceList.Error
|
|
break
|
|
}
|
|
points.AppendMap(data)
|
|
|
|
|
|
// getHouseholdStoragePsReport
|
|
// api get getHouseholdStoragePsReport '{"date_id":"20221001","date_type":"1","ps_id":"1129147"}'
|
|
ep = sg.GetByStruct(getHouseholdStoragePsReport.EndPointName,
|
|
getHouseholdStoragePsReport.RequestData{ DateId: valueTypes.SetDateTimeString("20221001"), DateType: valueTypes.SetStringValue("1"), PsId: psId },
|
|
DefaultCacheTimeout,
|
|
)
|
|
if sg.IsError() {
|
|
break
|
|
}
|
|
HouseholdStoragePsReport := getHouseholdStoragePsReport.Assert(ep)
|
|
data = HouseholdStoragePsReport.GetEndPointData()
|
|
if HouseholdStoragePsReport.Error != nil {
|
|
sg.Error = HouseholdStoragePsReport.Error
|
|
break
|
|
}
|
|
points.AppendMap(data)
|
|
|
|
|
|
// getPsDetailWithPsType
|
|
ep = sg.GetByStruct(getPsDetailWithPsType.EndPointName, getPsDetailWithPsType.RequestData{ PsId: psId }, DefaultCacheTimeout)
|
|
if sg.IsError() {
|
|
break
|
|
}
|
|
PsDetailWithPsType := getPsDetailWithPsType.Assert(ep)
|
|
data = PsDetailWithPsType.GetEndPointData()
|
|
if PsDetailWithPsType.Error != nil {
|
|
sg.Error = PsDetailWithPsType.Error
|
|
break
|
|
}
|
|
points.AppendMap(data)
|
|
|
|
|
|
// getPsDetail
|
|
ep = sg.GetByStruct(getPsDetail.EndPointName, getPsDetail.RequestData{ PsId: psId }, DefaultCacheTimeout)
|
|
if sg.IsError() {
|
|
break
|
|
}
|
|
PsDetail := getPsDetail.Assert(ep)
|
|
data = PsDetail.GetEndPointData()
|
|
if PsDetail.Error != nil {
|
|
sg.Error = PsDetailWithPsType.Error
|
|
break
|
|
}
|
|
points.AppendMap(data)
|
|
|
|
|
|
// getKpiInfo
|
|
ep = sg.GetByStruct(getKpiInfo.EndPointName, getKpiInfo.RequestData{ }, DefaultCacheTimeout)
|
|
if sg.IsError() {
|
|
break
|
|
}
|
|
KpiInfo := getKpiInfo.Assert(ep)
|
|
data = KpiInfo.GetEndPointData()
|
|
if KpiInfo.Error != nil {
|
|
sg.Error = KpiInfo.Error
|
|
break
|
|
}
|
|
points.AppendMap(data)
|
|
|
|
|
|
// // getPowerDevicePointInfo
|
|
// ep = sg.GetByStruct(getPowerDevicePointInfo.EndPointName, getPowerDevicePointInfo.RequestData{ Id: psId }, DefaultCacheTimeout)
|
|
// if sg.Error != nil {
|
|
// break
|
|
// }
|
|
// ep4 := getPowerDevicePointInfo.Assert(ep)
|
|
// data = ep4.GetEndPointData()
|
|
// if ep4.Error != nil {
|
|
// sg.Error = ep4.Error
|
|
// break
|
|
// }
|
|
// points.AppendMap(data)
|
|
|
|
|
|
// // queryDeviceRealTimeDataByPsKeys
|
|
// ep = sg.GetByStruct(queryDeviceRealTimeDataByPsKeys.EndPointName, queryDeviceRealTimeDataByPsKeys.RequestData{ PsKeyList: psId }, DefaultCacheTimeout)
|
|
// if sg.Error != nil {
|
|
// break
|
|
// }
|
|
// DeviceRealTimeDataByPsKeys := queryDeviceRealTimeDataByPsKeys.Assert(ep)
|
|
// data = DeviceRealTimeDataByPsKeys.GetEndPointData()
|
|
// if DeviceRealTimeDataByPsKeys.Error != nil {
|
|
// sg.Error = DeviceRealTimeDataByPsKeys.Error
|
|
// break
|
|
// }
|
|
// points.AppendMap(data)
|
|
|
|
}
|
|
|
|
fmt.Println(points.String())
|
|
}
|
|
|
|
return sg.Error
|
|
}
|
|
|
|
|
|
// DevicePointAttrs - Return all points associated with psIds and device_type filter.
|
|
func (sg *SunGrow) DevicePointAttrs(psIds []string, deviceType string) (getDevicePointAttrs.Points, error) {
|
|
var points getDevicePointAttrs.Points
|
|
|
|
for range Only.Once {
|
|
var pids valueTypes.PsIds
|
|
pids = sg.SetPsIds(psIds...)
|
|
if sg.Error != nil {
|
|
break
|
|
}
|
|
|
|
for _, pid := range pids {
|
|
var p getDevicePointAttrs.Points
|
|
p, sg.Error = sg.GetDevicePointAttrs(pid)
|
|
if sg.Error != nil {
|
|
break
|
|
}
|
|
|
|
for _, point := range p {
|
|
if deviceType == "" {
|
|
points = append(points, point)
|
|
continue
|
|
}
|
|
if point.DeviceType.MatchString(deviceType) {
|
|
points = append(points, point)
|
|
continue
|
|
}
|
|
}
|
|
|
|
// @TODO - Include AppService.getPowerDevicePointNames
|
|
// points2 := cmds.Api.SunGrow.GetDevicePointNames(pid)
|
|
// if c.Error != nil {
|
|
// break
|
|
// }
|
|
// if len(points) == 0 {
|
|
// continue
|
|
// }
|
|
}
|
|
if sg.Error != nil {
|
|
break
|
|
}
|
|
}
|
|
|
|
return points, sg.Error
|
|
}
|
|
|
|
// DevicePointAttrsMap - Return all points associated with psIds and device_type filter.
|
|
func (sg *SunGrow) DevicePointAttrsMap(psIds []string, deviceType string) (getDevicePointAttrs.PointsMap, error) {
|
|
points := make(getDevicePointAttrs.PointsMap)
|
|
|
|
for range Only.Once {
|
|
var pa getDevicePointAttrs.Points
|
|
pa, sg.Error = sg.DevicePointAttrs(psIds, deviceType)
|
|
if sg.Error != nil {
|
|
break
|
|
}
|
|
|
|
for index := range pa {
|
|
points[pa[index].Id.String()] = &pa[index]
|
|
}
|
|
}
|
|
|
|
return points, sg.Error
|
|
}
|
|
|
|
// GetDevicePointAttrs - WebAppService.getDevicePointAttrs Uuid: PsId: DeviceType
|
|
func (sg *SunGrow) GetDevicePointAttrs(psId valueTypes.PsId) (getDevicePointAttrs.Points, error) {
|
|
var ret getDevicePointAttrs.Points
|
|
|
|
for range Only.Once {
|
|
var tree PsTree
|
|
tree, sg.Error = sg.PsTreeMenu(psId.String())
|
|
if sg.Error != nil {
|
|
break
|
|
}
|
|
|
|
for _, pid := range tree.Devices {
|
|
ep := sg.GetByStruct(getDevicePointAttrs.EndPointName,
|
|
getDevicePointAttrs.RequestData {
|
|
Uuid: pid.UUID,
|
|
PsId2: pid.PsId,
|
|
DeviceType2: pid.DeviceType,
|
|
},
|
|
time.Hour * 24,
|
|
)
|
|
if sg.IsError() {
|
|
break
|
|
}
|
|
|
|
data := getDevicePointAttrs.Assert(ep)
|
|
ret = append(ret, data.Points()...)
|
|
// more := sg.GetDevicePointNames(pid.DeviceType)
|
|
}
|
|
}
|
|
|
|
return ret, sg.Error
|
|
}
|
|
|
|
|
|
func (sg *SunGrow) PointData(startDate string, endDate string, interval string, points ...string) error {
|
|
for range Only.Once {
|
|
// _, _ = sg.QueryMultiPointDataList(
|
|
// valueTypes.SetDateTimeString(startDate),
|
|
// valueTypes.SetDateTimeString(endDate),
|
|
// valueTypes.SetIntegerString(interval),
|
|
// valueTypes.SetPointIdsString(points...),
|
|
// )
|
|
|
|
data := sg.NewSunGrowData()
|
|
// req := iSolarCloud.RequestArgs {
|
|
// StartTimeStamp: startDate,
|
|
// EndTimeStamp: endDate,
|
|
// }
|
|
// var req iSolarCloud.RequestArgs
|
|
// data.Request.SetPoints(points)
|
|
|
|
sd := valueTypes.NewDateTime(startDate)
|
|
var ed valueTypes.DateTime
|
|
if endDate == "" {
|
|
ed = sd
|
|
ed.SetDayEnd()
|
|
} else {
|
|
ed = valueTypes.NewDateTime(endDate)
|
|
}
|
|
|
|
// _, _ = fmt.Fprintf(os.Stderr,"Points: %s\n", strings.Join(points, " "))
|
|
data.SetArgs(
|
|
"StartTimeStamp:" + sd.Format(valueTypes.DateTimeLayoutSecond),
|
|
"EndTimeStamp:" + ed.Format(valueTypes.DateTimeLayoutSecond),
|
|
"MinuteInterval:" + interval,
|
|
"Points:" + strings.Join(points, ","),
|
|
)
|
|
data.SetEndpoints(queryMutiPointDataList.EndPointName)
|
|
|
|
sg.Error = data.GetData()
|
|
if sg.Error != nil {
|
|
break
|
|
}
|
|
|
|
sg.Error = data.OutputDataTables()
|
|
if sg.Error != nil {
|
|
break
|
|
}
|
|
}
|
|
|
|
return sg.Error
|
|
}
|
|
|
|
func (sg *SunGrow) PointScan(min string, max string) (string, error) {
|
|
var ret string
|
|
|
|
for range Only.Once {
|
|
if min == "" || max == "" {
|
|
min = "0"
|
|
max = "1000"
|
|
}
|
|
|
|
minI := valueTypes.SetIntegerString(min)
|
|
if minI.Error != nil {
|
|
sg.Error = minI.Error
|
|
break
|
|
}
|
|
|
|
maxI := valueTypes.SetIntegerString(max)
|
|
if maxI.Error != nil {
|
|
sg.Error = maxI.Error
|
|
break
|
|
}
|
|
|
|
var data []getPowerDevicePointInfo.ResultData
|
|
data, sg.Error = sg.GetPowerDevicePointInfo(minI, maxI)
|
|
if sg.Error != nil {
|
|
break
|
|
}
|
|
|
|
table := output.NewTable(
|
|
"DeviceType",
|
|
"Id",
|
|
"Period",
|
|
"Point Id",
|
|
"Point Name",
|
|
"Show Point Name",
|
|
"Translation Id",
|
|
)
|
|
|
|
for _, d := range data {
|
|
sg.Error = table.AddRow(d.DeviceType.String(),
|
|
d.Id.String(),
|
|
d.Period.String(),
|
|
d.PointId.String(),
|
|
d.PointName.String(),
|
|
d.ShowPointName.String(),
|
|
d.TranslationId.String(),
|
|
)
|
|
if sg.Error != nil {
|
|
break
|
|
}
|
|
}
|
|
if sg.Error != nil {
|
|
break
|
|
}
|
|
|
|
ret = table.String()
|
|
}
|
|
|
|
return ret, sg.Error
|
|
}
|
|
|
|
|
|
func PrintPause(index int64, max int) {
|
|
for range Only.Once {
|
|
if index == 0 {
|
|
_, _ = fmt.Fprintf(os.Stderr,"\n%.3d ", index)
|
|
break
|
|
}
|
|
|
|
m := math.Mod(float64(index), float64(max))
|
|
if m == 0 {
|
|
_, _ = fmt.Fprintf(os.Stderr,"PAUSE")
|
|
time.Sleep(time.Millisecond * 500)
|
|
// fmt.Printf("\r%s%.3d ", strings.Repeat(" ", 4), pni)
|
|
_, _ = fmt.Fprintf(os.Stderr,"\r%.3d ", index)
|
|
} else {
|
|
time.Sleep(time.Millisecond * 100)
|
|
_, _ = fmt.Fprintf(os.Stderr,".")
|
|
}
|
|
}
|
|
}
|
|
|
|
// QueryMultiPointDataList - AppService.queryMutiPointDataList MinuteInterval:5 StartTimeStamp:20221001000000 EndTimeStamp:20221001235900 PsId:1129147 Points:1129147_14_1_1.p13148,1129147_14_1_1.p13147,1129147_14_1_1.p13146,1129147_14_1_1.p13145,1129147_14_1_1.p13144,1129147_14_1_1.p13143
|
|
func (sg *SunGrow) QueryMultiPointDataList(startDate valueTypes.DateTime, endDate valueTypes.DateTime, interval valueTypes.Integer, points valueTypes.PointIds) (queryMutiPointDataList.Data, error) {
|
|
var ret queryMutiPointDataList.Data
|
|
for range Only.Once {
|
|
if len(points.PointIds) == 0 {
|
|
break
|
|
}
|
|
|
|
psids := points.PsIds()
|
|
if len(psids) == 0 {
|
|
break
|
|
}
|
|
psId := psids[0]
|
|
|
|
if !interval.Valid {
|
|
interval.SetValue(5)
|
|
}
|
|
|
|
if startDate.IsZero() {
|
|
startDate.SetValue(time.Now())
|
|
startDate.SetDayStart()
|
|
}
|
|
startDate.SetDateType(valueTypes.DateTimeLayoutSecond)
|
|
|
|
if endDate.IsZero() {
|
|
endDate.SetValue(startDate.Value())
|
|
endDate.SetDayEnd()
|
|
}
|
|
endDate.SetDateType(valueTypes.DateTimeLayoutSecond)
|
|
|
|
if !interval.Valid {
|
|
interval.SetValue(5)
|
|
}
|
|
|
|
ep := sg.GetByStruct(
|
|
"AppService.queryMutiPointDataList",
|
|
queryMutiPointDataList.RequestData {
|
|
PsId: psId,
|
|
StartTimeStamp: startDate,
|
|
EndTimeStamp: endDate,
|
|
MinuteInterval: interval,
|
|
PsKeys: *points.PsKeys(),
|
|
Points: points,
|
|
},
|
|
time.Hour * 24,
|
|
)
|
|
if sg.IsError() {
|
|
break
|
|
}
|
|
|
|
var response SunGrowDataResponse
|
|
response.Data = ep.GetEndPointData()
|
|
|
|
response.Data.ProcessMap()
|
|
if response.Data.Error != nil {
|
|
sg.Error = response.Data.Error
|
|
break
|
|
}
|
|
|
|
response.Options = OutputOptions {
|
|
OutputType: sg.OutputType,
|
|
SaveAsFile: sg.SaveAsFile,
|
|
GraphRequest: output.GraphRequest{},
|
|
}
|
|
|
|
// // Outputs that can drop through to DataTables.
|
|
// if sg.OutputType.IsTable() || sg.OutputType.IsXLSX() || sg.OutputType.IsCsv() || sg.OutputType.IsXML() {
|
|
// table := response.Data.CreateResultTable(false)
|
|
// table.OutputType = sg.OutputType
|
|
// table.SetSaveFile(sg.SaveAsFile)
|
|
// // table.AppendTitle(" - %s", sg.TitleSuffix)
|
|
// // table.AppendFilePrefix(sg.FileSuffix)
|
|
// sg.Error = table.Output()
|
|
// if sg.Error != nil {
|
|
// break
|
|
// }
|
|
// }
|
|
|
|
sg.Error = response.OutputDataTables()
|
|
if sg.IsError() {
|
|
break
|
|
}
|
|
|
|
}
|
|
|
|
return ret, sg.Error
|
|
}
|