mirror of
https://github.com/MickMake/GoSungrow.git
synced 2025-04-10 04:39:14 +02:00
v1.4.1 docs
This commit is contained in:
parent
6778af7233
commit
006d970cde
@ -28,6 +28,15 @@ I'm currently using it in my [HomeAssistant](https://www.home-assistant.io/) ins
|
||||

|
||||
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
|
||||
## What state is it in?
|
||||
|
||||
This is currently usable for my needs, (seeing all data in [HomeAssistant](https://www.home-assistant.io/)), but there's quite a few API endpoints that need to be implemented for completeness.
|
||||
|
@ -136,38 +136,6 @@ func cmdMqttRunFunc(_ *cobra.Command, _ []string) error {
|
||||
// break
|
||||
// }
|
||||
|
||||
// var psId int64
|
||||
// psId, Cmd.Error = Cmd.SunGrow.GetPsId()
|
||||
// if err != nil {
|
||||
// break
|
||||
// }
|
||||
//
|
||||
// fmt.Printf("# Found SunGrow device %d\n", psId)
|
||||
// // Also getPowerStatistics, getHouseholdStoragePsReport, getPsList, getUpTimePoint,
|
||||
// ep := Cmd.SunGrow.QueryDevice(psId)
|
||||
// if ep.IsError() {
|
||||
// Cmd.Error = ep.GetError()
|
||||
// break
|
||||
// }
|
||||
//
|
||||
// data := ep.GetData()
|
||||
// fmt.Printf("# Adding %d entries to HASSIO.\n", len(data.Entries))
|
||||
// for i, r := range data.Entries {
|
||||
// fmt.Printf("%s ", r.PointId)
|
||||
// Cmd.Error = foo.SensorPublishConfig(r.PointId, r.PointName, r.Unit, i)
|
||||
// if err != nil {
|
||||
// break
|
||||
// }
|
||||
// Cmd.Error = foo.SensorPublishState(r.PointId, r.Value)
|
||||
// if err != nil {
|
||||
// break
|
||||
// }
|
||||
// }
|
||||
// fmt.Println()
|
||||
// if err != nil {
|
||||
// break
|
||||
// }
|
||||
|
||||
Cmd.Error = MqttCron()
|
||||
if Cmd.Error != nil {
|
||||
break
|
||||
|
BIN
docs/Grafana1.png
Normal file
BIN
docs/Grafana1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 195 KiB |
BIN
docs/Grafana2.png
Normal file
BIN
docs/Grafana2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 180 KiB |
BIN
docs/Grafana3.png
Normal file
BIN
docs/Grafana3.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 208 KiB |
BIN
docs/Grafana4.png
Normal file
BIN
docs/Grafana4.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 193 KiB |
16
go.mod
16
go.mod
@ -5,7 +5,7 @@ go 1.17
|
||||
require (
|
||||
github.com/acarl005/textcol v0.0.0
|
||||
github.com/eclipse/paho.mqtt.golang v1.3.5
|
||||
github.com/go-co-op/gocron v1.12.0
|
||||
github.com/go-co-op/gocron v1.13.0
|
||||
github.com/go-git/go-billy/v5 v5.3.1
|
||||
github.com/go-git/go-git/v5 v5.4.2
|
||||
github.com/mattn/go-colorable v0.1.12
|
||||
@ -16,14 +16,14 @@ require (
|
||||
github.com/wcharczuk/go-chart/v2 v2.1.0
|
||||
github.com/willf/pad v0.0.0-20200313202418-172aa767f2a4
|
||||
go.pennock.tech/tabular v1.1.3
|
||||
golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8
|
||||
golang.org/x/sys v0.0.0-20220209214540-3681064d5158
|
||||
google.golang.org/api v0.68.0
|
||||
golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b
|
||||
golang.org/x/sys v0.0.0-20220307203707-22a9840ba4d7
|
||||
google.golang.org/api v0.71.0
|
||||
gopkg.in/alecthomas/kingpin.v2 v2.2.6
|
||||
)
|
||||
|
||||
require (
|
||||
cloud.google.com/go/compute v1.2.0 // indirect
|
||||
cloud.google.com/go/compute v1.5.0 // indirect
|
||||
github.com/Microsoft/go-winio v0.4.16 // indirect
|
||||
github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7 // indirect
|
||||
github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d // indirect
|
||||
@ -60,12 +60,12 @@ require (
|
||||
go.opencensus.io v0.23.0 // indirect
|
||||
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 // indirect
|
||||
golang.org/x/image v0.0.0-20200927104501-e162460cd6b5 // indirect
|
||||
golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d // indirect
|
||||
golang.org/x/net v0.0.0-20220225172249-27dd8689420f // indirect
|
||||
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect
|
||||
golang.org/x/text v0.3.7 // indirect
|
||||
google.golang.org/appengine v1.6.7 // indirect
|
||||
google.golang.org/genproto v0.0.0-20220204002441-d6cc3cc0770e // indirect
|
||||
google.golang.org/grpc v1.43.0 // indirect
|
||||
google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8 // indirect
|
||||
google.golang.org/grpc v1.44.0 // indirect
|
||||
google.golang.org/protobuf v1.27.1 // indirect
|
||||
gopkg.in/ini.v1 v1.66.2 // indirect
|
||||
gopkg.in/warnings.v0 v0.1.2 // indirect
|
||||
|
47
go.sum
47
go.sum
@ -36,8 +36,9 @@ cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUM
|
||||
cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
|
||||
cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
|
||||
cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow=
|
||||
cloud.google.com/go/compute v1.2.0 h1:EKki8sSdvDU0OO9mAXGwPXOTOgPz2l08R0/IutDH11I=
|
||||
cloud.google.com/go/compute v1.2.0/go.mod h1:xlogom/6gr8RJGBe7nT2eGsQYAFUbbv8dbC29qE3Xmw=
|
||||
cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM=
|
||||
cloud.google.com/go/compute v1.5.0 h1:b1zWmYuuHz7gO9kDcM/EpHGr06UgsYNRpNJzI2kFiLM=
|
||||
cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M=
|
||||
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
|
||||
cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
|
||||
cloud.google.com/go/firestore v1.6.1/go.mod h1:asNXNOzBdyVQmEU+ggO8UPodTkEVFW5Qx+rwHnAz+EY=
|
||||
@ -138,8 +139,8 @@ github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5
|
||||
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
||||
github.com/gliderlabs/ssh v0.2.2 h1:6zsha5zo/TWhRhwqCD3+EarCAgZ2yN28ipRnGPnwkI0=
|
||||
github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0=
|
||||
github.com/go-co-op/gocron v1.12.0 h1:RahikbAIhp/wlNBraICMZfby7bdkeCXe+QQSW323Lpo=
|
||||
github.com/go-co-op/gocron v1.12.0/go.mod h1:qtlsoMpHlSdIZ3E/xuZzrrAbeX3u5JtPvWf2TcdutU0=
|
||||
github.com/go-co-op/gocron v1.13.0 h1:BjkuNImPy5NuIPEifhWItFG7pYyr27cyjS6BN9w/D4c=
|
||||
github.com/go-co-op/gocron v1.13.0/go.mod h1:GD5EIEly1YNW+LovFVx5dzbYVcIc8544K99D8UVRpGo=
|
||||
github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4=
|
||||
github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E=
|
||||
github.com/go-git/go-billy/v5 v5.2.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0=
|
||||
@ -539,8 +540,10 @@ golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5o
|
||||
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
|
||||
golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8=
|
||||
golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d h1:LO7XpTYMwTqxjLcGWPijK3vRXg1aWdlNOVOHRq45d7c=
|
||||
golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
||||
golang.org/x/net v0.0.0-20220225172249-27dd8689420f h1:oA4XRj0qtSt8Yo1Zms0CUlsT3KG69V2UGQWPBxujDmc=
|
||||
golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||
@ -557,8 +560,9 @@ golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ
|
||||
golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
||||
golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
||||
golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
||||
golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 h1:RerP+noqYHUQ8CMRcPlC2nvTa4dcBIjegkuWdcUDuqg=
|
||||
golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
||||
golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b h1:clP8eMhB30EHdc0bd2Twtq6kgU7yl5ub2cQLSdrv1Dg=
|
||||
golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc=
|
||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
@ -640,12 +644,15 @@ golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBc
|
||||
golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20211205182925-97ca703d548d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220204135822-1c1b9b1eba6a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220209214540-3681064d5158 h1:rm+CHSpPEEW2IsXUib1ThaHIjuBVZjxNgSKmBLFfD4c=
|
||||
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E=
|
||||
golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220307203707-22a9840ba4d7 h1:8IVLkfbr2cLhv0a/vKq4UFUcJym8RmDoDboxCFWEjYE=
|
||||
golang.org/x/sys v0.0.0-20220307203707-22a9840ba4d7/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY=
|
||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
@ -751,9 +758,10 @@ google.golang.org/api v0.59.0/go.mod h1:sT2boj7M9YJxZzgeZqXogmhfmRWDtPzT31xkieUb
|
||||
google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I=
|
||||
google.golang.org/api v0.62.0/go.mod h1:dKmwPCydfsad4qCH08MSdgWjfHOyfpd4VtDGgRFdavw=
|
||||
google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo=
|
||||
google.golang.org/api v0.66.0/go.mod h1:I1dmXYpX7HGwz/ejRxwQp2qj5bFAz93HiCU1C1oYd9M=
|
||||
google.golang.org/api v0.68.0 h1:9eJiHhwJKIYX6sX2fUZxQLi7pDRA/MYu8c12q6WbJik=
|
||||
google.golang.org/api v0.68.0/go.mod h1:sOM8pTpwgflXRhz+oC8H2Dr+UcbMqkPPWNJo88Q7TH8=
|
||||
google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g=
|
||||
google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA=
|
||||
google.golang.org/api v0.71.0 h1:SgWof18M8V2NylsX7bL4fM28j+nFdRopHZbdipaaw20=
|
||||
google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8=
|
||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
||||
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||
@ -826,10 +834,12 @@ google.golang.org/genproto v0.0.0-20211203200212-54befc351ae9/go.mod h1:5CzLGKJ6
|
||||
google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||
google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||
google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||
google.golang.org/genproto v0.0.0-20220114231437-d2e6a121cae0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||
google.golang.org/genproto v0.0.0-20220201184016-50beb8ab5c44/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||
google.golang.org/genproto v0.0.0-20220204002441-d6cc3cc0770e h1:hXl9hnyOkeznztYpYxVPAVZfPzcbO6Q0C+nLXodza8k=
|
||||
google.golang.org/genproto v0.0.0-20220204002441-d6cc3cc0770e/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||
google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||
google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||
google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
|
||||
google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
|
||||
google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8 h1:U9V52f6rAgINH7kT+musA1qF8kWyVOxzF8eYuOVuFwQ=
|
||||
google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
|
||||
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
||||
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
|
||||
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
|
||||
@ -857,8 +867,9 @@ google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnD
|
||||
google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=
|
||||
google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=
|
||||
google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU=
|
||||
google.golang.org/grpc v1.43.0 h1:Eeu7bZtDZ2DpRCsLhUlcrLnvYaMK1Gz86a+hMVvELmM=
|
||||
google.golang.org/grpc v1.43.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU=
|
||||
google.golang.org/grpc v1.44.0 h1:weqSxi/TMs1SqFRMHCtBgXRs8k3X39QIDEZ0pRcttUg=
|
||||
google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU=
|
||||
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw=
|
||||
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
||||
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
|
||||
|
@ -56,6 +56,7 @@ func CreatePoints(points []string) TemplatePoints {
|
||||
for _, p := range points {
|
||||
pa := strings.Split(p, ".")
|
||||
if len(pa) == 2 {
|
||||
pa[1] = "p" + strings.TrimPrefix(pa[1], "p")
|
||||
ret = append(ret, TemplatePoint{
|
||||
Description: "",
|
||||
PsKey: pa[0],
|
||||
|
@ -17,6 +17,7 @@ import (
|
||||
"net/http"
|
||||
)
|
||||
|
||||
|
||||
type Web struct {
|
||||
Url EndPointUrl
|
||||
Body []byte
|
||||
@ -30,6 +31,7 @@ type Web struct {
|
||||
httpResponse *http.Response
|
||||
}
|
||||
|
||||
|
||||
func (w *Web) SetUrl(u string) error {
|
||||
w.Url = SetUrl(u)
|
||||
// w.Error = w.Url.Error
|
||||
|
2
iSolarCloud/cache.go
Normal file
2
iSolarCloud/cache.go
Normal file
@ -0,0 +1,2 @@
|
||||
package iSolarCloud
|
||||
|
@ -2,4 +2,4 @@ package iSolarCloud
|
||||
|
||||
import "time"
|
||||
|
||||
const DefaultCacheTimeout = time.Hour
|
||||
const DefaultCacheTimeout = time.Minute * 5
|
||||
|
@ -2,244 +2,9 @@ package iSolarCloud
|
||||
|
||||
import (
|
||||
"GoSungrow/Only"
|
||||
"GoSungrow/iSolarCloud/AppService/getPsDetailWithPsType"
|
||||
"GoSungrow/iSolarCloud/AppService/getPsList"
|
||||
"GoSungrow/iSolarCloud/AppService/queryMutiPointDataList"
|
||||
"GoSungrow/iSolarCloud/api"
|
||||
"GoSungrow/iSolarCloud/api/output"
|
||||
"errors"
|
||||
"fmt"
|
||||
"strconv"
|
||||
"time"
|
||||
)
|
||||
|
||||
|
||||
func (sg *SunGrow) GetByJson(endpoint string, request string) api.EndPoint {
|
||||
var ret api.EndPoint
|
||||
for range Only.Once {
|
||||
ret = sg.GetEndpoint(endpoint)
|
||||
if sg.Error != nil {
|
||||
break
|
||||
}
|
||||
if ret.IsError() {
|
||||
sg.Error = ret.GetError()
|
||||
break
|
||||
}
|
||||
|
||||
if request != "" {
|
||||
ret = ret.SetRequestByJson(output.Json(request))
|
||||
if ret.IsError() {
|
||||
fmt.Println(ret.Help())
|
||||
sg.Error = ret.GetError()
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
ret = ret.Call()
|
||||
if ret.IsError() {
|
||||
fmt.Println(ret.Help())
|
||||
sg.Error = ret.GetError()
|
||||
break
|
||||
}
|
||||
|
||||
switch {
|
||||
case sg.OutputType.IsNone():
|
||||
|
||||
case sg.OutputType.IsFile():
|
||||
sg.Error = ret.WriteDataFile()
|
||||
|
||||
case sg.OutputType.IsRaw():
|
||||
fmt.Println(ret.GetJsonData(true))
|
||||
|
||||
case sg.OutputType.IsJson():
|
||||
fmt.Println(ret.GetJsonData(false))
|
||||
|
||||
default:
|
||||
}
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
||||
func (sg *SunGrow) GetByStruct(endpoint string, request interface{}, cache time.Duration) api.EndPoint {
|
||||
var ret api.EndPoint
|
||||
for range Only.Once {
|
||||
ret = sg.GetEndpoint(endpoint)
|
||||
if sg.Error != nil {
|
||||
break
|
||||
}
|
||||
if ret.IsError() {
|
||||
sg.Error = ret.GetError()
|
||||
break
|
||||
}
|
||||
|
||||
if request != nil {
|
||||
ret = ret.SetRequest(request)
|
||||
if ret.IsError() {
|
||||
sg.Error = ret.GetError()
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
ret = ret.SetCacheTimeout(cache)
|
||||
// if ret.CheckCache() {
|
||||
// ret = ret.ReadCache()
|
||||
// if !ret.IsError() {
|
||||
// break
|
||||
// }
|
||||
// }
|
||||
|
||||
ret = ret.Call()
|
||||
if ret.IsError() {
|
||||
sg.Error = ret.GetError()
|
||||
break
|
||||
}
|
||||
|
||||
// sg.Error = ret.WriteCache()
|
||||
// if sg.Error != nil {
|
||||
// break
|
||||
// }
|
||||
}
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
func (sg *SunGrow) GetPointData(date string, pointNames api.TemplatePoints) error {
|
||||
for range Only.Once {
|
||||
if len(pointNames) == 0 {
|
||||
sg.Error = errors.New("no points defined")
|
||||
break
|
||||
}
|
||||
|
||||
if date == "" {
|
||||
date = api.NewDateTime("").String()
|
||||
}
|
||||
when := api.NewDateTime(date)
|
||||
|
||||
var psId int64
|
||||
psId, sg.Error = sg.GetPsId()
|
||||
if sg.Error != nil {
|
||||
break
|
||||
}
|
||||
|
||||
ep := sg.GetByStruct(
|
||||
"AppService.queryMutiPointDataList",
|
||||
queryMutiPointDataList.RequestData {
|
||||
PsID: psId,
|
||||
PsKey: pointNames.PrintKeys(),
|
||||
Points: pointNames.PrintPoints(),
|
||||
MinuteInterval: "5",
|
||||
StartTimeStamp: when.GetDayStartTimestamp(),
|
||||
EndTimeStamp: when.GetDayEndTimestamp(),
|
||||
},
|
||||
DefaultCacheTimeout,
|
||||
)
|
||||
if sg.Error != nil {
|
||||
break
|
||||
}
|
||||
|
||||
ep2 := queryMutiPointDataList.Assert(ep)
|
||||
table := ep2.GetDataTable(pointNames)
|
||||
if table.Error != nil {
|
||||
sg.Error = table.Error
|
||||
break
|
||||
}
|
||||
|
||||
sg.Error = sg.Output(ep2, &table, "")
|
||||
if sg.Error != nil {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
return sg.Error
|
||||
}
|
||||
|
||||
func (sg *SunGrow) Output(endpoint api.EndPoint, table *output.Table, graphFilter string) error {
|
||||
for range Only.Once {
|
||||
switch {
|
||||
case sg.OutputType.IsNone():
|
||||
|
||||
case sg.OutputType.IsHuman():
|
||||
if table == nil {
|
||||
break
|
||||
}
|
||||
table.Print()
|
||||
|
||||
case sg.OutputType.IsFile():
|
||||
if table == nil {
|
||||
break
|
||||
}
|
||||
sg.Error = table.WriteCsvFile()
|
||||
|
||||
case sg.OutputType.IsRaw():
|
||||
fmt.Println(endpoint.GetJsonData(true))
|
||||
|
||||
case sg.OutputType.IsJson():
|
||||
fmt.Println(endpoint.GetJsonData(false))
|
||||
|
||||
case sg.OutputType.IsGraph():
|
||||
if table == nil {
|
||||
break
|
||||
}
|
||||
sg.Error = table.SetGraphFromJson(output.Json(graphFilter))
|
||||
if sg.Error != nil {
|
||||
break
|
||||
}
|
||||
sg.Error = table.CreateGraph()
|
||||
if sg.Error != nil {
|
||||
break
|
||||
}
|
||||
|
||||
default:
|
||||
}
|
||||
}
|
||||
|
||||
return sg.Error
|
||||
}
|
||||
|
||||
func (sg *SunGrow) GetPsId() (int64, error) {
|
||||
var ret int64
|
||||
|
||||
for range Only.Once {
|
||||
|
||||
ep := sg.GetByStruct("AppService.getPsList", nil, DefaultCacheTimeout)
|
||||
if ep.IsError() {
|
||||
sg.Error = ep.GetError()
|
||||
break
|
||||
}
|
||||
|
||||
_getPsList := getPsList.AssertResultData(ep)
|
||||
ret = _getPsList.GetPsId()
|
||||
}
|
||||
|
||||
return ret, sg.Error
|
||||
}
|
||||
|
||||
func (sg *SunGrow) GetPsKeys() ([]string, error) {
|
||||
var ret []string
|
||||
|
||||
for range Only.Once {
|
||||
var psId int64
|
||||
psId, sg.Error = sg.GetPsId()
|
||||
if sg.Error != nil {
|
||||
break
|
||||
}
|
||||
|
||||
ep := sg.GetByStruct(
|
||||
"AppService.getPsDetailWithPsType",
|
||||
getPsDetailWithPsType.RequestData{PsId: strconv.FormatInt(psId, 10)},
|
||||
DefaultCacheTimeout)
|
||||
if ep.IsError() {
|
||||
sg.Error = ep.GetError()
|
||||
break
|
||||
}
|
||||
|
||||
ep2 := getPsDetailWithPsType.Assert(ep)
|
||||
ret = ep2.GetPsKeys()
|
||||
}
|
||||
|
||||
return ret, sg.Error
|
||||
}
|
||||
|
||||
func fillArray(count int, args []string) []string {
|
||||
var ret []string
|
||||
for range Only.Once {
|
||||
|
@ -135,7 +135,7 @@ func (sg *SunGrow) GetTemplatePoints(template string) error {
|
||||
ss := sg.GetPointNamesFromTemplate(template)
|
||||
for _, s := range ss {
|
||||
sg.Error = table.AddRow(
|
||||
s.PointId,
|
||||
api.NameDevicePoint(s.PsKey, s.PointId),
|
||||
s.Description,
|
||||
s.Unit,
|
||||
)
|
||||
@ -436,7 +436,6 @@ func (sg *SunGrow) GetRealTimeData(psKey string) error {
|
||||
}
|
||||
|
||||
func (sg *SunGrow) GetPsDetails(psid string) error {
|
||||
|
||||
for range Only.Once {
|
||||
var psId int64
|
||||
if psid == "" {
|
||||
@ -472,3 +471,97 @@ func (sg *SunGrow) GetPsDetails(psid string) error {
|
||||
|
||||
return sg.Error
|
||||
}
|
||||
|
||||
func (sg *SunGrow) GetPointData(date string, pointNames api.TemplatePoints) error {
|
||||
for range Only.Once {
|
||||
if len(pointNames) == 0 {
|
||||
sg.Error = errors.New("no points defined")
|
||||
break
|
||||
}
|
||||
|
||||
if date == "" {
|
||||
date = api.NewDateTime("").String()
|
||||
}
|
||||
when := api.NewDateTime(date)
|
||||
|
||||
var psId int64
|
||||
psId, sg.Error = sg.GetPsId()
|
||||
if sg.Error != nil {
|
||||
break
|
||||
}
|
||||
|
||||
ep := sg.GetByStruct(
|
||||
"AppService.queryMutiPointDataList",
|
||||
queryMutiPointDataList.RequestData {
|
||||
PsID: psId,
|
||||
PsKey: pointNames.PrintKeys(),
|
||||
Points: pointNames.PrintPoints(),
|
||||
MinuteInterval: "5",
|
||||
StartTimeStamp: when.GetDayStartTimestamp(),
|
||||
EndTimeStamp: when.GetDayEndTimestamp(),
|
||||
},
|
||||
DefaultCacheTimeout,
|
||||
)
|
||||
if sg.Error != nil {
|
||||
break
|
||||
}
|
||||
|
||||
ep2 := queryMutiPointDataList.Assert(ep)
|
||||
table := ep2.GetDataTable(pointNames)
|
||||
if table.Error != nil {
|
||||
sg.Error = table.Error
|
||||
break
|
||||
}
|
||||
|
||||
sg.Error = sg.Output(ep2, &table, "")
|
||||
if sg.Error != nil {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
return sg.Error
|
||||
}
|
||||
|
||||
func (sg *SunGrow) GetPsId() (int64, error) {
|
||||
var ret int64
|
||||
|
||||
for range Only.Once {
|
||||
|
||||
ep := sg.GetByStruct("AppService.getPsList", nil, DefaultCacheTimeout)
|
||||
if ep.IsError() {
|
||||
sg.Error = ep.GetError()
|
||||
break
|
||||
}
|
||||
|
||||
_getPsList := getPsList.AssertResultData(ep)
|
||||
ret = _getPsList.GetPsId()
|
||||
}
|
||||
|
||||
return ret, sg.Error
|
||||
}
|
||||
|
||||
func (sg *SunGrow) GetPsKeys() ([]string, error) {
|
||||
var ret []string
|
||||
|
||||
for range Only.Once {
|
||||
var psId int64
|
||||
psId, sg.Error = sg.GetPsId()
|
||||
if sg.Error != nil {
|
||||
break
|
||||
}
|
||||
|
||||
ep := sg.GetByStruct(
|
||||
"AppService.getPsDetailWithPsType",
|
||||
getPsDetailWithPsType.RequestData{PsId: strconv.FormatInt(psId, 10)},
|
||||
DefaultCacheTimeout)
|
||||
if ep.IsError() {
|
||||
sg.Error = ep.GetError()
|
||||
break
|
||||
}
|
||||
|
||||
ep2 := getPsDetailWithPsType.Assert(ep)
|
||||
ret = ep2.GetPsKeys()
|
||||
}
|
||||
|
||||
return ret, sg.Error
|
||||
}
|
||||
|
@ -12,9 +12,12 @@ import (
|
||||
"GoSungrow/iSolarCloud/api"
|
||||
"GoSungrow/iSolarCloud/api/output"
|
||||
"errors"
|
||||
"fmt"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
|
||||
type SunGrow struct {
|
||||
ApiRoot api.Web
|
||||
Auth login.EndPoint
|
||||
@ -23,11 +26,6 @@ type SunGrow struct {
|
||||
NeedLogin bool
|
||||
|
||||
OutputType output.OutputType
|
||||
// EndPoint api.EndPoint
|
||||
|
||||
// OutputString string
|
||||
// OutputArray [][]interface{}
|
||||
// OutputType
|
||||
}
|
||||
|
||||
func NewSunGro(baseUrl string, cacheDir string) *SunGrow {
|
||||
@ -99,6 +97,95 @@ func (sg *SunGrow) GetEndpoint(ae string) api.EndPoint {
|
||||
return ep
|
||||
}
|
||||
|
||||
func (sg *SunGrow) GetByJson(endpoint string, request string) api.EndPoint {
|
||||
var ret api.EndPoint
|
||||
for range Only.Once {
|
||||
ret = sg.GetEndpoint(endpoint)
|
||||
if sg.Error != nil {
|
||||
break
|
||||
}
|
||||
if ret.IsError() {
|
||||
sg.Error = ret.GetError()
|
||||
break
|
||||
}
|
||||
|
||||
if request != "" {
|
||||
ret = ret.SetRequestByJson(output.Json(request))
|
||||
if ret.IsError() {
|
||||
fmt.Println(ret.Help())
|
||||
sg.Error = ret.GetError()
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
ret = ret.Call()
|
||||
if ret.IsError() {
|
||||
fmt.Println(ret.Help())
|
||||
sg.Error = ret.GetError()
|
||||
break
|
||||
}
|
||||
|
||||
switch {
|
||||
case sg.OutputType.IsNone():
|
||||
|
||||
case sg.OutputType.IsFile():
|
||||
sg.Error = ret.WriteDataFile()
|
||||
|
||||
case sg.OutputType.IsRaw():
|
||||
fmt.Println(ret.GetJsonData(true))
|
||||
|
||||
case sg.OutputType.IsJson():
|
||||
fmt.Println(ret.GetJsonData(false))
|
||||
|
||||
default:
|
||||
}
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
||||
func (sg *SunGrow) GetByStruct(endpoint string, request interface{}, cache time.Duration) api.EndPoint {
|
||||
var ret api.EndPoint
|
||||
for range Only.Once {
|
||||
ret = sg.GetEndpoint(endpoint)
|
||||
if sg.Error != nil {
|
||||
break
|
||||
}
|
||||
if ret.IsError() {
|
||||
sg.Error = ret.GetError()
|
||||
break
|
||||
}
|
||||
|
||||
if request != nil {
|
||||
ret = ret.SetRequest(request)
|
||||
if ret.IsError() {
|
||||
sg.Error = ret.GetError()
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
ret = ret.SetCacheTimeout(cache)
|
||||
// if ret.CheckCache() {
|
||||
// ret = ret.ReadCache()
|
||||
// if !ret.IsError() {
|
||||
// break
|
||||
// }
|
||||
// }
|
||||
|
||||
ret = ret.Call()
|
||||
if ret.IsError() {
|
||||
sg.Error = ret.GetError()
|
||||
break
|
||||
}
|
||||
|
||||
// sg.Error = ret.WriteCache()
|
||||
// if sg.Error != nil {
|
||||
// break
|
||||
// }
|
||||
}
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
func (sg *SunGrow) SplitEndPoint(ae string) (string, string) {
|
||||
var area string
|
||||
var endpoint string
|
||||
@ -141,6 +228,49 @@ func (sg *SunGrow) AreaNotExists(area string) bool {
|
||||
return sg.Areas.NotExists(area)
|
||||
}
|
||||
|
||||
func (sg *SunGrow) Output(endpoint api.EndPoint, table *output.Table, graphFilter string) error {
|
||||
for range Only.Once {
|
||||
switch {
|
||||
case sg.OutputType.IsNone():
|
||||
|
||||
case sg.OutputType.IsHuman():
|
||||
if table == nil {
|
||||
break
|
||||
}
|
||||
table.Print()
|
||||
|
||||
case sg.OutputType.IsFile():
|
||||
if table == nil {
|
||||
break
|
||||
}
|
||||
sg.Error = table.WriteCsvFile()
|
||||
|
||||
case sg.OutputType.IsRaw():
|
||||
fmt.Println(endpoint.GetJsonData(true))
|
||||
|
||||
case sg.OutputType.IsJson():
|
||||
fmt.Println(endpoint.GetJsonData(false))
|
||||
|
||||
case sg.OutputType.IsGraph():
|
||||
if table == nil {
|
||||
break
|
||||
}
|
||||
sg.Error = table.SetGraphFromJson(output.Json(graphFilter))
|
||||
if sg.Error != nil {
|
||||
break
|
||||
}
|
||||
sg.Error = table.CreateGraph()
|
||||
if sg.Error != nil {
|
||||
break
|
||||
}
|
||||
|
||||
default:
|
||||
}
|
||||
}
|
||||
|
||||
return sg.Error
|
||||
}
|
||||
|
||||
func (sg *SunGrow) Login(auth login.SunGrowAuth) error {
|
||||
for range Only.Once {
|
||||
a := sg.GetEndpoint(AppService.GetAreaName() + ".login")
|
||||
|
@ -266,6 +266,11 @@ func (m *Mqtt) SensorPublishConfig(point api.DataEntry) error {
|
||||
|
||||
case "℃":
|
||||
class = "temperature"
|
||||
// point.Unit = "C"
|
||||
|
||||
case "C":
|
||||
class = "temperature"
|
||||
point.Unit = "℃"
|
||||
|
||||
case "%":
|
||||
class = "battery"
|
||||
|
Loading…
x
Reference in New Issue
Block a user