Guest User

Untitled

a guest
Aug 6th, 2020
27
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. [Trace - 08:19:59.197 AM] Sending request 'initialize - (0)'.
  2. Params: {"processId":2541,"clientInfo":{"name":"vscode","version":"1.47.3"},"rootPath":"/Users/andig/htdocs/evcc","rootUri":"file:///Users/andig/htdocs/evcc","capabilities":{"workspace":{"applyEdit":true,"workspaceEdit":{"documentChanges":true,"resourceOperations":["create","rename","delete"],"failureHandling":"textOnlyTransactional"},"didChangeConfiguration":{"dynamicRegistration":true},"didChangeWatchedFiles":{"dynamicRegistration":true},"symbol":{"dynamicRegistration":true,"symbolKind":{"valueSet":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]}},"executeCommand":{"dynamicRegistration":true},"configuration":true,"workspaceFolders":true},"textDocument":{"publishDiagnostics":{"relatedInformation":true,"versionSupport":false,"tagSupport":{"valueSet":[1,2]}},"synchronization":{"dynamicRegistration":true,"willSave":true,"willSaveWaitUntil":true,"didSave":true},"completion":{"dynamicRegistration":true,"contextSupport":true,"completionItem":{"snippetSupport":true,"commitCharactersSupport":true,"documentationFormat":["markdown","plaintext"],"deprecatedSupport":true,"preselectSupport":true,"tagSupport":{"valueSet":[1]}},"completionItemKind":{"valueSet":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]}},"hover":{"dynamicRegistration":true,"contentFormat":["markdown","plaintext"]},"signatureHelp":{"dynamicRegistration":true,"signatureInformation":{"documentationFormat":["markdown","plaintext"],"parameterInformation":{"labelOffsetSupport":true}},"contextSupport":true},"definition":{"dynamicRegistration":true,"linkSupport":true},"references":{"dynamicRegistration":true},"documentHighlight":{"dynamicRegistration":true},"documentSymbol":{"dynamicRegistration":true,"symbolKind":{"valueSet":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]},"hierarchicalDocumentSymbolSupport":true},"codeAction":{"dynamicRegistration":true,"isPreferredSupport":true,"codeActionLiteralSupport":{"codeActionKind":{"valueSet":["","quickfix","refactor","refactor.extract","refactor.inline","refactor.rewrite","source","source.organizeImports"]}}},"codeLens":{"dynamicRegistration":true},"formatting":{"dynamicRegistration":true},"rangeFormatting":{"dynamicRegistration":true},"onTypeFormatting":{"dynamicRegistration":true},"rename":{"dynamicRegistration":true,"prepareSupport":true},"documentLink":{"dynamicRegistration":true,"tooltipSupport":true},"typeDefinition":{"dynamicRegistration":true,"linkSupport":true},"implementation":{"dynamicRegistration":true,"linkSupport":true},"colorProvider":{"dynamicRegistration":true},"foldingRange":{"dynamicRegistration":true,"rangeLimit":5000,"lineFoldingOnly":true},"declaration":{"dynamicRegistration":true,"linkSupport":true},"selectionRange":{"dynamicRegistration":true}},"window":{"workDoneProgress":true}},"initializationOptions":{},"trace":"off","workspaceFolders":[{"uri":"file:///Users/andig/htdocs/evcc","name":"evcc"},{"uri":"file:///Users/andig/htdocs/evcc.wiki","name":"evcc.wiki"},{"uri":"file:///Users/andig/htdocs/TWCManager","name":"TWCManager"},{"uri":"file:///Users/andig/htdocs/whatsapp","name":"whatsapp"},{"uri":"file:///Users/andig/htdocs/gridx-modbus","name":"gridx-modbus"},{"uri":"file:///Users/andig/htdocs/evcc-config","name":"evcc-config"}]}
  3.  
  4.  
  5. [Trace - 08:19:59.213 AM] Received response 'initialize - (0)' in 15ms.
  6. Result: {"capabilities":{"textDocumentSync":{"openClose":true,"change":2,"save":{}},"completionProvider":{"triggerCharacters":["."]},"hoverProvider":true,"signatureHelpProvider":{"triggerCharacters":["(",","]},"definitionProvider":true,"typeDefinitionProvider":true,"implementationProvider":true,"referencesProvider":true,"documentHighlightProvider":true,"documentSymbolProvider":true,"codeActionProvider":{"codeActionKinds":["quickfix","refactor.extract","refactor.rewrite","source.fixAll","source.organizeImports"]},"codeLensProvider":{},"documentLinkProvider":{},"workspaceSymbolProvider":true,"documentFormattingProvider":true,"documentOnTypeFormattingProvider":{"firstTriggerCharacter":""},"renameProvider":{"prepareProvider":true},"foldingRangeProvider":true,"executeCommandProvider":{"commands":["generate","fill_struct","regenerate_cgo","test","tidy","undeclared_name","upgrade_dependency","vendor","extract_variable","extract_function"]},"workspace":{"workspaceFolders":{"supported":true,"changeNotifications":"workspace/didChangeWorkspaceFolders"}}},"serverInfo":{"name":"gopls","version":"Build info\n----------\ngolang.org/x/tools/gopls 0.4.4\n golang.org/x/tools/gopls@v0.4.4 h1:8djGYsaZ0ByP0vaXg4T+mnyfDcHpWKSZ+tpQSGv9ahk=\n github.com/BurntSushi/toml@v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=\n github.com/google/go-cmp@v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w=\n github.com/sergi/go-diff@v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0=\n golang.org/x/mod@v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4=\n golang.org/x/sync@v0.0.0-20200625203802-6e8e738ad208 h1:qwRHBd0NqMbJxfbotnDhm2ByMI1Shq4Y6oRJo21SGJA=\n golang.org/x/tools@v0.0.0-20200729181040-64cdafbe085c h1:jLQLIAedRoS9I2Py7l/ZAGGzUxLFsdg42JXEpS/a+ow=\n golang.org/x/xerrors@v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=\n honnef.co/go/tools@v0.0.1-2020.1.4 h1:UoveltGrhghAA7ePc+e+QYDHXrBps2PqFZiHkGR/xK8=\n mvdan.cc/gofumpt@v0.0.0-20200709182408-4fd085cb6d5f h1:gi7cb8HTDZ6q8VqsUpkdoFi3vxwHMneQ6+Q5Ap5hjPE=\n mvdan.cc/xurls/v2@v2.2.0 h1:NSZPykBXJFCetGZykLAxaL6SIpvbVy/UFEniIfHAa8A=\n\nGo info\n-------\ngo version go1.14.6 darwin/amd64\n\n"}}
  7.  
  8.  
  9. [Trace - 08:19:59.289 AM] Sending notification 'initialized'.
  10. Params: {}
  11.  
  12.  
  13. [Trace - 08:19:59.303 AM] Received notification 'window/logMessage'.
  14. Params: {"type":3,"message":"2020/08/06 08:19:59 Build info\n----------\ngolang.org/x/tools/gopls 0.4.4\n golang.org/x/tools/gopls@v0.4.4 h1:8djGYsaZ0ByP0vaXg4T+mnyfDcHpWKSZ+tpQSGv9ahk=\n github.com/BurntSushi/toml@v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=\n github.com/google/go-cmp@v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w=\n github.com/sergi/go-diff@v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0=\n golang.org/x/mod@v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4=\n golang.org/x/sync@v0.0.0-20200625203802-6e8e738ad208 h1:qwRHBd0NqMbJxfbotnDhm2ByMI1Shq4Y6oRJo21SGJA=\n golang.org/x/tools@v0.0.0-20200729181040-64cdafbe085c h1:jLQLIAedRoS9I2Py7l/ZAGGzUxLFsdg42JXEpS/a+ow=\n golang.org/x/xerrors@v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=\n honnef.co/go/tools@v0.0.1-2020.1.4 h1:UoveltGrhghAA7ePc+e+QYDHXrBps2PqFZiHkGR/xK8=\n mvdan.cc/gofumpt@v0.0.0-20200709182408-4fd085cb6d5f h1:gi7cb8HTDZ6q8VqsUpkdoFi3vxwHMneQ6+Q5Ap5hjPE=\n mvdan.cc/xurls/v2@v2.2.0 h1:NSZPykBXJFCetGZykLAxaL6SIpvbVy/UFEniIfHAa8A=\n\nGo info\n-------\ngo version go1.14.6 darwin/amd64\n\n\n"}
  15.  
  16.  
  17. [Trace - 08:19:59.303 AM] Received request 'workspace/configuration - (1)'.
  18. Params: {"items":[{"scopeUri":"file:///Users/andig/htdocs/evcc","section":"gopls"},{"scopeUri":"file:///Users/andig/htdocs/evcc","section":"gopls-evcc"}]}
  19.  
  20.  
  21. [Info - 8:19:59 AM] 2020/08/06 08:19:59 Build info
  22. ----------
  23. golang.org/x/tools/gopls 0.4.4
  24. golang.org/x/tools/gopls@v0.4.4 h1:8djGYsaZ0ByP0vaXg4T+mnyfDcHpWKSZ+tpQSGv9ahk=
  25. github.com/BurntSushi/toml@v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
  26. github.com/google/go-cmp@v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w=
  27. github.com/sergi/go-diff@v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0=
  28. golang.org/x/mod@v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4=
  29. golang.org/x/sync@v0.0.0-20200625203802-6e8e738ad208 h1:qwRHBd0NqMbJxfbotnDhm2ByMI1Shq4Y6oRJo21SGJA=
  30. golang.org/x/tools@v0.0.0-20200729181040-64cdafbe085c h1:jLQLIAedRoS9I2Py7l/ZAGGzUxLFsdg42JXEpS/a+ow=
  31. golang.org/x/xerrors@v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
  32. honnef.co/go/tools@v0.0.1-2020.1.4 h1:UoveltGrhghAA7ePc+e+QYDHXrBps2PqFZiHkGR/xK8=
  33. mvdan.cc/gofumpt@v0.0.0-20200709182408-4fd085cb6d5f h1:gi7cb8HTDZ6q8VqsUpkdoFi3vxwHMneQ6+Q5Ap5hjPE=
  34. mvdan.cc/xurls/v2@v2.2.0 h1:NSZPykBXJFCetGZykLAxaL6SIpvbVy/UFEniIfHAa8A=
  35.  
  36. Go info
  37. -------
  38. go version go1.14.6 darwin/amd64
  39.  
  40.  
  41.  
  42. [Trace - 08:19:59.434 AM] Sending response 'workspace/configuration - (1)' in 131ms.
  43. Result: [null,null]
  44.  
  45.  
  46. [Trace - 08:19:59.558 AM] Received notification 'window/logMessage'.
  47. Params: {"type":3,"message":"2020/08/06 08:19:59 go env for /Users/andig/htdocs/evcc\n(root /Users/andig/htdocs/evcc)\n(valid build configuration = true)\n(build flags: [])\nGOINSECURE=\nGONOPROXY=\nGOSUMDB=sum.golang.org\nGOMODCACHE=\nGOROOT=/usr/local/Cellar/go/1.14.6/libexec\nGO111MODULE=\nGOFLAGS=\nGONOSUMDB=\nGOPRIVATE=\nGOPROXY=https://proxy.golang.org,direct\nGOCACHE=/Users/andig/Library/Caches/go-build\nGOMOD=/Users/andig/htdocs/evcc/go.mod\nGOPATH=/Users/andig/go\n\n"}
  48.  
  49.  
  50. [Trace - 08:19:59.558 AM] Received request 'workspace/configuration - (2)'.
  51. Params: {"items":[{"scopeUri":"file:///Users/andig/htdocs/evcc.wiki","section":"gopls"},{"scopeUri":"file:///Users/andig/htdocs/evcc.wiki","section":"gopls-evcc.wiki"}]}
  52.  
  53.  
  54. [Info - 8:19:59 AM] 2020/08/06 08:19:59 go env for /Users/andig/htdocs/evcc
  55. (root /Users/andig/htdocs/evcc)
  56. (valid build configuration = true)
  57. (build flags: [])
  58. GOINSECURE=
  59. GONOPROXY=
  60. GOSUMDB=sum.golang.org
  61. GOMODCACHE=
  62. GOROOT=/usr/local/Cellar/go/1.14.6/libexec
  63. GO111MODULE=
  64. GOFLAGS=
  65. GONOSUMDB=
  66. GOPRIVATE=
  67. GOPROXY=https://proxy.golang.org,direct
  68. GOCACHE=/Users/andig/Library/Caches/go-build
  69. GOMOD=/Users/andig/htdocs/evcc/go.mod
  70. GOPATH=/Users/andig/go
  71.  
  72.  
  73. [Trace - 08:19:59.621 AM] Sending response 'workspace/configuration - (2)' in 62ms.
  74. Result: [null,null]
  75.  
  76.  
  77. [Trace - 08:19:59.676 AM] Received request 'workspace/configuration - (3)'.
  78. Params: {"items":[{"scopeUri":"file:///Users/andig/htdocs/TWCManager","section":"gopls"},{"scopeUri":"file:///Users/andig/htdocs/TWCManager","section":"gopls-TWCManager"}]}
  79.  
  80.  
  81. [Trace - 08:19:59.682 AM] Received notification 'window/logMessage'.
  82. Params: {"type":3,"message":"2020/08/06 08:19:59 go env for /Users/andig/htdocs/evcc.wiki\n(root /Users/andig/htdocs/evcc.wiki)\n(valid build configuration = false)\n(build flags: [])\nGOFLAGS=\nGOPATH=/Users/andig/go\nGONOSUMDB=\nGOPROXY=https://proxy.golang.org,direct\nGONOPROXY=\nGOPRIVATE=\nGOSUMDB=sum.golang.org\nGO111MODULE=\nGOCACHE=/Users/andig/Library/Caches/go-build\nGOMOD=\nGOINSECURE=\nGOMODCACHE=\nGOROOT=/usr/local/Cellar/go/1.14.6/libexec\n\n"}
  83.  
  84.  
  85. [Trace - 08:19:59.717 AM] Received notification 'window/logMessage'.
  86. Params: {"type":3,"message":"2020/08/06 08:19:59 go/packages.Load\n\tsnapshot=0\n\tdirectory=/Users/andig/htdocs/evcc.wiki\n\tquery=[./ builtin]\n\tpackages=2\n"}
  87.  
  88.  
  89. [Trace - 08:19:59.782 AM] Sending response 'workspace/configuration - (3)' in 105ms.
  90. Result: [null,null]
  91.  
  92.  
  93. [Info - 8:19:59 AM] 2020/08/06 08:19:59 go env for /Users/andig/htdocs/evcc.wiki
  94. (root /Users/andig/htdocs/evcc.wiki)
  95. (valid build configuration = false)
  96. (build flags: [])
  97. GOFLAGS=
  98. GOPATH=/Users/andig/go
  99. GONOSUMDB=
  100. GOPROXY=https://proxy.golang.org,direct
  101. GONOPROXY=
  102. GOPRIVATE=
  103. GOSUMDB=sum.golang.org
  104. GO111MODULE=
  105. GOCACHE=/Users/andig/Library/Caches/go-build
  106. GOMOD=
  107. GOINSECURE=
  108. GOMODCACHE=
  109. GOROOT=/usr/local/Cellar/go/1.14.6/libexec
  110.  
  111.  
  112. [Info - 8:19:59 AM] 2020/08/06 08:19:59 go/packages.Load
  113. snapshot=0
  114. directory=/Users/andig/htdocs/evcc.wiki
  115. query=[./ builtin]
  116. packages=2
  117.  
  118. [Trace - 08:19:59.842 AM] Received request 'workspace/configuration - (4)'.
  119. Params: {"items":[{"scopeUri":"file:///Users/andig/htdocs/whatsapp","section":"gopls"},{"scopeUri":"file:///Users/andig/htdocs/whatsapp","section":"gopls-whatsapp"}]}
  120.  
  121.  
  122. [Trace - 08:19:59.843 AM] Received notification 'window/logMessage'.
  123. Params: {"type":3,"message":"2020/08/06 08:19:59 go env for /Users/andig/htdocs/TWCManager\n(root /Users/andig/htdocs/TWCManager)\n(valid build configuration = false)\n(build flags: [])\nGOPROXY=https://proxy.golang.org,direct\nGO111MODULE=\nGOROOT=/usr/local/Cellar/go/1.14.6/libexec\nGOSUMDB=sum.golang.org\nGOPRIVATE=\nGOFLAGS=\nGOINSECURE=\nGOMOD=\nGOMODCACHE=\nGOPATH=/Users/andig/go\nGOCACHE=/Users/andig/Library/Caches/go-build\nGONOPROXY=\nGONOSUMDB=\n\n"}
  124.  
  125.  
  126. [Trace - 08:19:59.873 AM] Received notification 'window/logMessage'.
  127. Params: {"type":3,"message":"2020/08/06 08:19:59 go/packages.Load\n\tsnapshot=0\n\tdirectory=/Users/andig/htdocs/TWCManager\n\tquery=[./ builtin]\n\tpackages=2\n"}
  128.  
  129.  
  130. [Trace - 08:19:59.889 AM] Sending response 'workspace/configuration - (4)' in 46ms.
  131. Result: [null,null]
  132.  
  133.  
  134. [Info - 8:19:59 AM] 2020/08/06 08:19:59 go env for /Users/andig/htdocs/TWCManager
  135. (root /Users/andig/htdocs/TWCManager)
  136. (valid build configuration = false)
  137. (build flags: [])
  138. GOPROXY=https://proxy.golang.org,direct
  139. GO111MODULE=
  140. GOROOT=/usr/local/Cellar/go/1.14.6/libexec
  141. GOSUMDB=sum.golang.org
  142. GOPRIVATE=
  143. GOFLAGS=
  144. GOINSECURE=
  145. GOMOD=
  146. GOMODCACHE=
  147. GOPATH=/Users/andig/go
  148. GOCACHE=/Users/andig/Library/Caches/go-build
  149. GONOPROXY=
  150. GONOSUMDB=
  151.  
  152.  
  153. [Info - 8:19:59 AM] 2020/08/06 08:19:59 go/packages.Load
  154. snapshot=0
  155. directory=/Users/andig/htdocs/TWCManager
  156. query=[./ builtin]
  157. packages=2
  158.  
  159. [Trace - 08:20:00.000 AM] Received request 'workspace/configuration - (5)'.
  160. Params: {"items":[{"scopeUri":"file:///Users/andig/htdocs/gridx-modbus","section":"gopls"},{"scopeUri":"file:///Users/andig/htdocs/gridx-modbus","section":"gopls-gridx-modbus"}]}
  161.  
  162.  
  163. [Trace - 08:20:00.000 AM] Received notification 'window/logMessage'.
  164. Params: {"type":3,"message":"2020/08/06 08:20:00 go env for /Users/andig/htdocs/whatsapp\n(root /Users/andig/htdocs/whatsapp)\n(valid build configuration = true)\n(build flags: [])\nGOPRIVATE=\nGOROOT=/usr/local/Cellar/go/1.14.6/libexec\nGOMODCACHE=\nGOPROXY=https://proxy.golang.org,direct\nGOSUMDB=sum.golang.org\nGOFLAGS=\nGOMOD=/Users/andig/htdocs/whatsapp/go.mod\nGO111MODULE=\nGOCACHE=/Users/andig/Library/Caches/go-build\nGOINSECURE=\nGONOSUMDB=\nGONOPROXY=\nGOPATH=/Users/andig/go\n\n"}
  165.  
  166.  
  167. [Trace - 08:20:00.148 AM] Sending response 'workspace/configuration - (5)' in 148ms.
  168. Result: [null,null]
  169.  
  170.  
  171. [Info - 8:20:00 AM] 2020/08/06 08:20:00 go env for /Users/andig/htdocs/whatsapp
  172. (root /Users/andig/htdocs/whatsapp)
  173. (valid build configuration = true)
  174. (build flags: [])
  175. GOPRIVATE=
  176. GOROOT=/usr/local/Cellar/go/1.14.6/libexec
  177. GOMODCACHE=
  178. GOPROXY=https://proxy.golang.org,direct
  179. GOSUMDB=sum.golang.org
  180. GOFLAGS=
  181. GOMOD=/Users/andig/htdocs/whatsapp/go.mod
  182. GO111MODULE=
  183. GOCACHE=/Users/andig/Library/Caches/go-build
  184. GOINSECURE=
  185. GONOSUMDB=
  186. GONOPROXY=
  187. GOPATH=/Users/andig/go
  188.  
  189.  
  190. [Trace - 08:20:00.201 AM] Received request 'workspace/configuration - (6)'.
  191. Params: {"items":[{"scopeUri":"file:///Users/andig/htdocs/evcc-config","section":"gopls"},{"scopeUri":"file:///Users/andig/htdocs/evcc-config","section":"gopls-evcc-config"}]}
  192.  
  193.  
  194. [Trace - 08:20:00.203 AM] Received notification 'window/logMessage'.
  195. Params: {"type":3,"message":"2020/08/06 08:20:00 go env for /Users/andig/htdocs/gridx-modbus\n(root /Users/andig/htdocs/gridx-modbus)\n(valid build configuration = false)\n(build flags: [])\nGOINSECURE=\nGOPRIVATE=\nGO111MODULE=\nGOCACHE=/Users/andig/Library/Caches/go-build\nGOMOD=\nGOSUMDB=sum.golang.org\nGOFLAGS=\nGONOPROXY=\nGONOSUMDB=\nGOPATH=/Users/andig/go\nGOMODCACHE=\nGOPROXY=https://proxy.golang.org,direct\nGOROOT=/usr/local/Cellar/go/1.14.6/libexec\n\n"}
  196.  
  197.  
  198. [Trace - 08:20:00.240 AM] Sending response 'workspace/configuration - (6)' in 39ms.
  199. Result: [null,null]
  200.  
  201.  
  202. [Info - 8:20:00 AM] 2020/08/06 08:20:00 go env for /Users/andig/htdocs/gridx-modbus
  203. (root /Users/andig/htdocs/gridx-modbus)
  204. (valid build configuration = false)
  205. (build flags: [])
  206. GOINSECURE=
  207. GOPRIVATE=
  208. GO111MODULE=
  209. GOCACHE=/Users/andig/Library/Caches/go-build
  210. GOMOD=
  211. GOSUMDB=sum.golang.org
  212. GOFLAGS=
  213. GONOPROXY=
  214. GONOSUMDB=
  215. GOPATH=/Users/andig/go
  216. GOMODCACHE=
  217. GOPROXY=https://proxy.golang.org,direct
  218. GOROOT=/usr/local/Cellar/go/1.14.6/libexec
  219.  
  220.  
  221. [Trace - 08:20:00.373 AM] Received request 'client/registerCapability - (7)'.
  222. Params: {"registrations":[{"id":"workspace/didChangeConfiguration","method":"workspace/didChangeConfiguration"},{"id":"workspace/didChangeWorkspaceFolders","method":"workspace/didChangeWorkspaceFolders"},{"id":"workspace/didChangeWatchedFiles","method":"workspace/didChangeWatchedFiles","registerOptions":{"watchers":[{"globPattern":"/Users/andig/htdocs/evcc/**/*.{go,mod,sum}","kind":7}]}},{"id":"workspace/didChangeWatchedFiles","method":"workspace/didChangeWatchedFiles","registerOptions":{"watchers":[{"globPattern":"/Users/andig/htdocs/evcc.wiki/**/*.{go,mod,sum}","kind":7}]}},{"id":"workspace/didChangeWatchedFiles","method":"workspace/didChangeWatchedFiles","registerOptions":{"watchers":[{"globPattern":"/Users/andig/htdocs/TWCManager/**/*.{go,mod,sum}","kind":7}]}},{"id":"workspace/didChangeWatchedFiles","method":"workspace/didChangeWatchedFiles","registerOptions":{"watchers":[{"globPattern":"/Users/andig/htdocs/whatsapp/**/*.{go,mod,sum}","kind":7}]}},{"id":"workspace/didChangeWatchedFiles","method":"workspace/didChangeWatchedFiles","registerOptions":{"watchers":[{"globPattern":"/Users/andig/htdocs/gridx-modbus/**/*.{go,mod,sum}","kind":7}]}},{"id":"workspace/didChangeWatchedFiles","method":"workspace/didChangeWatchedFiles","registerOptions":{"watchers":[{"globPattern":"/Users/andig/htdocs/evcc-config/**/*.{go,mod,sum}","kind":7}]}}]}
  223.  
  224.  
  225. [Trace - 08:20:00.379 AM] Received notification 'window/logMessage'.
  226. Params: {"type":3,"message":"2020/08/06 08:20:00 go env for /Users/andig/htdocs/evcc-config\n(root /Users/andig/htdocs/evcc-config)\n(valid build configuration = true)\n(build flags: [])\nGONOSUMDB=\nGOMOD=/Users/andig/htdocs/evcc-config/go.mod\nGOMODCACHE=\nGOPATH=/Users/andig/go\nGOPRIVATE=\nGOSUMDB=sum.golang.org\nGOFLAGS=\nGOINSECURE=\nGOROOT=/usr/local/Cellar/go/1.14.6/libexec\nGO111MODULE=\nGONOPROXY=\nGOCACHE=/Users/andig/Library/Caches/go-build\nGOPROXY=https://proxy.golang.org,direct\n\n"}
  227.  
  228.  
  229. [Trace - 08:20:00.603 AM] Sending response 'client/registerCapability - (7)' in 230ms.
  230. Result:
  231.  
  232.  
  233. [Info - 8:20:00 AM] 2020/08/06 08:20:00 go env for /Users/andig/htdocs/evcc-config
  234. (root /Users/andig/htdocs/evcc-config)
  235. (valid build configuration = true)
  236. (build flags: [])
  237. GONOSUMDB=
  238. GOMOD=/Users/andig/htdocs/evcc-config/go.mod
  239. GOMODCACHE=
  240. GOPATH=/Users/andig/go
  241. GOPRIVATE=
  242. GOSUMDB=sum.golang.org
  243. GOFLAGS=
  244. GOINSECURE=
  245. GOROOT=/usr/local/Cellar/go/1.14.6/libexec
  246. GO111MODULE=
  247. GONOPROXY=
  248. GOCACHE=/Users/andig/Library/Caches/go-build
  249. GOPROXY=https://proxy.golang.org,direct
  250.  
  251.  
  252. [Trace - 08:20:01.105 AM] Received notification 'window/logMessage'.
  253. Params: {"type":3,"message":"2020/08/06 08:20:01 go/packages.Load\n\tsnapshot=0\n\tdirectory=/Users/andig/htdocs/gridx-modbus\n\tquery=[./ builtin]\n\tpackages=4\n"}
  254.  
  255.  
  256. [Info - 8:20:01 AM] 2020/08/06 08:20:01 go/packages.Load
  257. snapshot=0
  258. directory=/Users/andig/htdocs/gridx-modbus
  259. query=[./ builtin]
  260. packages=4
  261.  
  262. [Trace - 08:20:01.292 AM] Received notification 'window/logMessage'.
  263. Params: {"type":1,"message":"2020/08/06 08:20:01 no dep handle: no metadata for github.com/grid-x/serial\n\tpackage=\"github.com/grid-x/serial\"\n"}
  264.  
  265.  
  266. [Error - 8:20:01 AM] 2020/08/06 08:20:01 no dep handle: no metadata for github.com/grid-x/serial
  267. package="github.com/grid-x/serial"
  268.  
  269. [Trace - 08:20:01.422 AM] Received notification 'window/logMessage'.
  270. Params: {"type":1,"message":"2020/08/06 08:20:01 no dep handle: no metadata for github.com/grid-x/serial\n\tpackage=\"github.com/grid-x/serial\"\n"}
  271.  
  272.  
  273. [Error - 8:20:01 AM] 2020/08/06 08:20:01 no dep handle: no metadata for github.com/grid-x/serial
  274. package="github.com/grid-x/serial"
  275.  
  276. [Trace - 08:20:01.899 AM] Received notification 'window/logMessage'.
  277. Params: {"type":3,"message":"2020/08/06 08:20:01 go/packages.Load\n\tsnapshot=0\n\tdirectory=/Users/andig/htdocs/whatsapp\n\tquery=[./... builtin]\n\tpackages=2\n"}
  278.  
  279.  
  280. [Info - 8:20:02 AM] 2020/08/06 08:20:01 go/packages.Load
  281. snapshot=0
  282. directory=/Users/andig/htdocs/whatsapp
  283. query=[./... builtin]
  284. packages=2
  285.  
  286. [Trace - 08:20:02.501 AM] Received notification 'window/logMessage'.
  287. Params: {"type":3,"message":"2020/08/06 08:20:02 go/packages.Load\n\tsnapshot=0\n\tdirectory=/Users/andig/htdocs/evcc-config\n\tquery=[./... builtin]\n\tpackages=6\n"}
  288.  
  289.  
  290. [Info - 8:20:02 AM] 2020/08/06 08:20:02 go/packages.Load
  291. snapshot=0
  292. directory=/Users/andig/htdocs/evcc-config
  293. query=[./... builtin]
  294. packages=6
  295.  
  296. [Trace - 08:20:03.619 AM] Received notification 'window/logMessage'.
  297. Params: {"type":3,"message":"2020/08/06 08:20:03 go/packages.Load\n\tsnapshot=0\n\tdirectory=/Users/andig/htdocs/evcc\n\tquery=[./... builtin]\n\tpackages=46\n"}
  298.  
  299.  
  300. [Info - 8:20:03 AM] 2020/08/06 08:20:03 go/packages.Load
  301. snapshot=0
  302. directory=/Users/andig/htdocs/evcc
  303. query=[./... builtin]
  304. packages=46
  305.  
  306. [Trace - 08:20:06.414 AM] Received notification 'window/logMessage'.
  307. Params: {"type":3,"message":"2020/08/06 08:20:06 go/packages.Load\n\tsnapshot=0\n\tdirectory=/Users/andig/htdocs/evcc.wiki\n\tquery=[./]\n\tpackages=1\n"}
  308.  
  309.  
  310. [Info - 8:20:06 AM] 2020/08/06 08:20:06 go/packages.Load
  311. snapshot=0
  312. directory=/Users/andig/htdocs/evcc.wiki
  313. query=[./]
  314. packages=1
  315.  
  316. [Trace - 08:20:06.443 AM] Received notification 'window/logMessage'.
  317. Params: {"type":3,"message":"2020/08/06 08:20:06 go/packages.Load\n\tsnapshot=0\n\tdirectory=/Users/andig/htdocs/TWCManager\n\tquery=[./]\n\tpackages=1\n"}
  318.  
  319.  
  320. [Info - 8:20:06 AM] 2020/08/06 08:20:06 go/packages.Load
  321. snapshot=0
  322. directory=/Users/andig/htdocs/TWCManager
  323. query=[./]
  324. packages=1
  325.  
  326. [Trace - 08:20:07.241 AM] Received notification 'window/logMessage'.
  327. Params: {"type":3,"message":"2020/08/06 08:20:07 go/packages.Load\n\tsnapshot=0\n\tdirectory=/Users/andig/htdocs/gridx-modbus\n\tquery=[./]\n\tpackages=3\n"}
  328.  
  329.  
  330. [Info - 8:20:07 AM] 2020/08/06 08:20:07 go/packages.Load
  331. snapshot=0
  332. directory=/Users/andig/htdocs/gridx-modbus
  333. query=[./]
  334. packages=3
  335.  
  336. [Trace - 08:20:07.280 AM] Sending notification 'workspace/didChangeWorkspaceFolders'.
  337. Params: {"event":{"added":[],"removed":[{"uri":"file:///Users/andig/htdocs/evcc.wiki","name":"evcc.wiki"}]}}
  338.  
  339.  
  340. [Trace - 08:20:07.280 AM] Sending notification 'workspace/didChangeWorkspaceFolders'.
  341. Params: {"event":{"added":[],"removed":[{"uri":"file:///Users/andig/htdocs/evcc.wiki","name":"evcc.wiki"}]}}
  342.  
  343.  
  344. [Trace - 08:20:07.418 AM] Received notification 'window/showMessage'.
  345. Params: {"type":2,"message":"You are neither in a module nor in your GOPATH. If you are using modules, please open your editor to a directory in your module. If you believe this warning is incorrect, please file an issue: https://github.com/golang/go/issues/new."}
  346.  
  347.  
  348. [Trace - 08:20:07.418 AM] Received notification 'textDocument/publishDiagnostics'.
  349. Params: {"uri":"file:///Users/andig/htdocs/gridx-modbus/serial.go","diagnostics":[{"range":{"start":{"line":11,"character":1},"end":{"line":11,"character":17}},"severity":1,"source":"compiler","message":"could not import github.com/grid-x/serial (no package for import github.com/grid-x/serial)"}]}
  350.  
  351.  
  352. [Trace - 08:20:07.418 AM] Received notification 'textDocument/publishDiagnostics'.
  353. Params: {"uri":"file:///Users/andig/htdocs/gridx-modbus/asciiclient.go","diagnostics":[{"range":{"start":{"line":33,"character":9},"end":{"line":33,"character":16}},"severity":1,"source":"compiler","message":"handler.Address undefined (type *ASCIIClientHandler has no field or method Address)"},{"range":{"start":{"line":34,"character":9},"end":{"line":34,"character":16}},"severity":1,"source":"compiler","message":"handler.Timeout undefined (type *ASCIIClientHandler has no field or method Timeout)"}]}
  354.  
  355.  
  356. [Trace - 08:20:07.425 AM] Received notification 'textDocument/publishDiagnostics'.
  357. Params: {"uri":"file:///Users/andig/htdocs/gridx-modbus/rtuclient.go","diagnostics":[{"range":{"start":{"line":53,"character":9},"end":{"line":53,"character":16}},"severity":1,"source":"compiler","message":"handler.Address undefined (type *RTUClientHandler has no field or method Address)"},{"range":{"start":{"line":54,"character":9},"end":{"line":54,"character":16}},"severity":1,"source":"compiler","message":"handler.Timeout undefined (type *RTUClientHandler has no field or method Timeout)"},{"range":{"start":{"line":284,"character":7},"end":{"line":284,"character":15}},"severity":1,"source":"compiler","message":"mb.BaudRate undefined (type *rtuSerialTransporter has no field or method BaudRate)"},{"range":{"start":{"line":284,"character":27},"end":{"line":284,"character":35}},"severity":1,"source":"compiler","message":"mb.BaudRate undefined (type *rtuSerialTransporter has no field or method BaudRate)"},{"range":{"start":{"line":288,"character":33},"end":{"line":288,"character":41}},"severity":1,"source":"compiler","message":"mb.BaudRate undefined (type *rtuSerialTransporter has no field or method BaudRate)"},{"range":{"start":{"line":289,"character":29},"end":{"line":289,"character":37}},"severity":1,"source":"compiler","message":"mb.BaudRate undefined (type *rtuSerialTransporter has no field or method BaudRate)"}]}
  358.  
  359.  
  360. [Trace - 08:20:10.999 AM] Sending notification 'textDocument/didOpen'.
  361. Params: {"textDocument":{"uri":"file:///Users/andig/htdocs/gridx-modbus/asciiclient.go","languageId":"go","version":1,"text":"// Copyright 2014 Quoc-Viet Nguyen. All rights reserved.\n// This software may be modified and distributed under the terms\n// of the BSD license. See the LICENSE file for details.\n\npackage modbus\n\nimport (\n\t\"bytes\"\n\t\"encoding/hex\"\n\t\"fmt\"\n\t\"time\"\n)\n\nconst (\n\tasciiEnd = \"\\r\\n\"\n\tasciiMinSize = 3\n\tasciiMaxSize = 513\n\n\thexTable = \"0123456789ABCDEF\"\n)\n\n// Modbus ASCII defines ':' but in the field often '>' is seen.\nvar asciiStart = []string{\":\", \">\"}\n\n// ASCIIClientHandler implements Packager and Transporter interface.\ntype ASCIIClientHandler struct {\n\tasciiPackager\n\tasciiSerialTransporter\n}\n\n// NewASCIIClientHandler allocates and initializes a ASCIIClientHandler.\nfunc NewASCIIClientHandler(address string) *ASCIIClientHandler {\n\thandler := &ASCIIClientHandler{}\n\thandler.Address = address\n\thandler.Timeout = serialTimeout\n\thandler.IdleTimeout = serialIdleTimeout\n\treturn handler\n}\n\n// ASCIIClient creates ASCII client with default handler and given connect string.\nfunc ASCIIClient(address string) Client {\n\thandler := NewASCIIClientHandler(address)\n\treturn NewClient(handler)\n}\n\n// asciiPackager implements Packager interface.\ntype asciiPackager struct {\n\tSlaveID byte\n}\n\n// SetSlave sets modbus slave id for the next client operations\nfunc (mb *asciiPackager) SetSlave(slaveID byte) {\n\tmb.SlaveID = slaveID\n}\n\n// Encode encodes PDU in a ASCII frame:\n// Start : 1 char\n// Address : 2 chars\n// Function : 2 chars\n// Data : 0 up to 2x252 chars\n// LRC : 2 chars\n// End : 2 chars\nfunc (mb *asciiPackager) Encode(pdu *ProtocolDataUnit) (adu []byte, err error) {\n\tvar buf bytes.Buffer\n\n\tif _, err = buf.WriteString(asciiStart[0]); err != nil {\n\t\treturn\n\t}\n\tif err = writeHex(&buf, []byte{mb.SlaveID, pdu.FunctionCode}); err != nil {\n\t\treturn\n\t}\n\tif err = writeHex(&buf, pdu.Data); err != nil {\n\t\treturn\n\t}\n\t// Exclude the beginning colon and terminating CRLF pair characters\n\tvar lrc lrc\n\tlrc.reset()\n\tlrc.pushByte(mb.SlaveID).pushByte(pdu.FunctionCode).pushBytes(pdu.Data)\n\tif err = writeHex(&buf, []byte{lrc.value()}); err != nil {\n\t\treturn\n\t}\n\tif _, err = buf.WriteString(asciiEnd); err != nil {\n\t\treturn\n\t}\n\tadu = buf.Bytes()\n\treturn\n}\n\n// Verify verifies response length, frame boundary and slave id.\nfunc (mb *asciiPackager) Verify(aduRequest []byte, aduResponse []byte) (err error) {\n\tlength := len(aduResponse)\n\t// Minimum size (including address, function and LRC)\n\tif length < asciiMinSize+6 {\n\t\terr = fmt.Errorf(\"modbus: response length '%v' does not meet minimum '%v'\", length, 9)\n\t\treturn\n\t}\n\t// Length excluding colon must be an even number\n\tif length%2 != 1 {\n\t\terr = fmt.Errorf(\"modbus: response length '%v' is not an even number\", length-1)\n\t\treturn\n\t}\n\t// First char must be a colon\n\tstr := string(aduResponse[0:len(asciiStart[0])])\n\tif !isStartCharacter(str) {\n\t\terr = fmt.Errorf(\"modbus: response frame '%v'... is not started with '%v'\", str, asciiStart)\n\t\treturn\n\t}\n\t// 2 last chars must be \\r\\n\n\tstr = string(aduResponse[len(aduResponse)-len(asciiEnd):])\n\tif str != asciiEnd {\n\t\terr = fmt.Errorf(\"modbus: response frame ...'%v' is not ended with '%v'\", str, asciiEnd)\n\t\treturn\n\t}\n\t// Slave id\n\tresponseVal, err := readHex(aduResponse[1:])\n\tif err != nil {\n\t\treturn\n\t}\n\trequestVal, err := readHex(aduRequest[1:])\n\tif err != nil {\n\t\treturn\n\t}\n\tif responseVal != requestVal {\n\t\terr = fmt.Errorf(\"modbus: response slave id '%v' does not match request '%v'\", responseVal, requestVal)\n\t\treturn\n\t}\n\treturn\n}\n\n// Decode extracts PDU from ASCII frame and verify LRC.\nfunc (mb *asciiPackager) Decode(adu []byte) (pdu *ProtocolDataUnit, err error) {\n\tpdu = &ProtocolDataUnit{}\n\t// Slave address\n\taddress, err := readHex(adu[1:])\n\tif err != nil {\n\t\treturn\n\t}\n\t// Function code\n\tif pdu.FunctionCode, err = readHex(adu[3:]); err != nil {\n\t\treturn\n\t}\n\t// Data\n\tdataEnd := len(adu) - 4\n\tdata := adu[5:dataEnd]\n\tpdu.Data = make([]byte, hex.DecodedLen(len(data)))\n\tif _, err = hex.Decode(pdu.Data, data); err != nil {\n\t\treturn\n\t}\n\t// LRC\n\tlrcVal, err := readHex(adu[dataEnd:])\n\tif err != nil {\n\t\treturn\n\t}\n\t// Calculate checksum\n\tvar lrc lrc\n\tlrc.reset()\n\tlrc.pushByte(address).pushByte(pdu.FunctionCode).pushBytes(pdu.Data)\n\tif lrcVal != lrc.value() {\n\t\terr = fmt.Errorf(\"modbus: response lrc '%v' does not match expected '%v'\", lrcVal, lrc.value())\n\t\treturn\n\t}\n\treturn\n}\n\n// asciiSerialTransporter implements Transporter interface.\ntype asciiSerialTransporter struct {\n\tserialPort\n}\n\nfunc (mb *asciiSerialTransporter) Send(aduRequest []byte) (aduResponse []byte, err error) {\n\tmb.serialPort.mu.Lock()\n\tdefer mb.serialPort.mu.Unlock()\n\n\t// Make sure port is connected\n\tif err = mb.serialPort.connect(); err != nil {\n\t\treturn\n\t}\n\t// Start the timer to close when idle\n\tmb.serialPort.lastActivity = time.Now()\n\tmb.serialPort.startCloseTimer()\n\n\t// Send the request\n\tmb.serialPort.logf(\"modbus: send % x\\n\", aduRequest)\n\tif _, err = mb.port.Write(aduRequest); err != nil {\n\t\treturn\n\t}\n\t// Get the response\n\tvar n int\n\tvar data [asciiMaxSize]byte\n\tlength := 0\n\tfor {\n\t\tif n, err = mb.port.Read(data[length:]); err != nil {\n\t\t\treturn\n\t\t}\n\t\tlength += n\n\t\tif length >= asciiMaxSize || n == 0 {\n\t\t\tbreak\n\t\t}\n\t\t// Expect end of frame in the data received\n\t\tif length > asciiMinSize {\n\t\t\tif string(data[length-len(asciiEnd):length]) == asciiEnd {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\taduResponse = data[:length]\n\tmb.serialPort.logf(\"modbus: recv % x\\n\", aduResponse)\n\treturn\n}\n\n// writeHex encodes byte to string in hexadecimal, e.g. 0xA5 => \"A5\"\n// (encoding/hex only supports lowercase string).\nfunc writeHex(buf *bytes.Buffer, value []byte) (err error) {\n\tvar str [2]byte\n\tfor _, v := range value {\n\t\tstr[0] = hexTable[v>>4]\n\t\tstr[1] = hexTable[v&0x0F]\n\n\t\tif _, err = buf.Write(str[:]); err != nil {\n\t\t\treturn\n\t\t}\n\t}\n\treturn\n}\n\n// readHex decodes hexa string to byte, e.g. \"8C\" => 0x8C.\nfunc readHex(data []byte) (value byte, err error) {\n\tvar dst [1]byte\n\tif _, err = hex.Decode(dst[:], data[0:2]); err != nil {\n\t\treturn\n\t}\n\tvalue = dst[0]\n\treturn\n}\n\n// isStartCharacter confirms that the given character is a Modbus ASCII start character.\nfunc isStartCharacter(str string) bool {\n\tfor i := range asciiStart {\n\t\tif str == asciiStart[i] {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n"}}
  362.  
  363.  
  364. [Trace - 08:20:11.000 AM] Sending request 'textDocument/documentLink - (1)'.
  365. Params: {"textDocument":{"uri":"file:///Users/andig/htdocs/gridx-modbus/asciiclient.go"}}
  366.  
  367.  
  368. [Trace - 08:20:11.019 AM] Received notification 'window/logMessage'.
  369. Params: {"type":1,"message":"2020/08/06 08:20:11 no dep handle: no metadata for github.com/grid-x/serial\n\tpackage=\"github.com/grid-x/serial\"\n"}
  370.  
  371.  
  372. [Trace - 08:20:11.019 AM] Received notification 'window/logMessage'.
  373. Params: {"type":1,"message":"2020/08/06 08:20:11 no dep handle: no metadata for github.com/grid-x/serial\n\tpackage=\"github.com/grid-x/serial\"\n"}
  374.  
  375.  
  376. [Error - 8:20:11 AM] 2020/08/06 08:20:11 no dep handle: no metadata for github.com/grid-x/serial
  377. package="github.com/grid-x/serial"
  378.  
  379. [Error - 8:20:11 AM] 2020/08/06 08:20:11 no dep handle: no metadata for github.com/grid-x/serial
  380. package="github.com/grid-x/serial"
  381.  
  382. [Trace - 08:20:11.064 AM] Received response 'textDocument/documentLink - (1)' in 64ms.
  383. Result: [{"range":{"start":{"line":7,"character":2},"end":{"line":7,"character":7}},"target":"https://pkg.go.dev/bytes"},{"range":{"start":{"line":8,"character":2},"end":{"line":8,"character":14}},"target":"https://pkg.go.dev/encoding/hex"},{"range":{"start":{"line":9,"character":2},"end":{"line":9,"character":5}},"target":"https://pkg.go.dev/fmt"},{"range":{"start":{"line":10,"character":2},"end":{"line":10,"character":6}},"target":"https://pkg.go.dev/time"}]
  384.  
  385.  
  386. [Trace - 08:20:11.105 AM] Sending request 'textDocument/codeAction - (2)'.
  387. Params: {"textDocument":{"uri":"file:///Users/andig/htdocs/gridx-modbus/asciiclient.go"},"range":{"start":{"line":0,"character":0},"end":{"line":0,"character":0}},"context":{"diagnostics":[]}}
  388.  
  389.  
  390. [Trace - 08:20:11.105 AM] Sending request 'textDocument/documentSymbol - (3)'.
  391. Params: {"textDocument":{"uri":"file:///Users/andig/htdocs/gridx-modbus/asciiclient.go"}}
  392.  
  393.  
  394. [Trace - 08:20:11.117 AM] Received response 'textDocument/codeAction - (2)' in 12ms.
  395. Result: null
  396.  
  397.  
  398. [Trace - 08:20:11.118 AM] Received response 'textDocument/documentSymbol - (3)' in 12ms.
  399. Result: [{"name":"asciiEnd","detail":"untyped string","kind":14,"range":{"start":{"line":13,"character":0},"end":{"line":19,"character":1}},"selectionRange":{"start":{"line":14,"character":1},"end":{"line":14,"character":9}}},{"name":"asciiMinSize","detail":"untyped int","kind":14,"range":{"start":{"line":13,"character":0},"end":{"line":19,"character":1}},"selectionRange":{"start":{"line":15,"character":1},"end":{"line":15,"character":13}}},{"name":"asciiMaxSize","detail":"untyped int","kind":14,"range":{"start":{"line":13,"character":0},"end":{"line":19,"character":1}},"selectionRange":{"start":{"line":16,"character":1},"end":{"line":16,"character":13}}},{"name":"hexTable","detail":"untyped string","kind":14,"range":{"start":{"line":13,"character":0},"end":{"line":19,"character":1}},"selectionRange":{"start":{"line":18,"character":1},"end":{"line":18,"character":9}}},{"name":"asciiStart","detail":"[]string","kind":13,"range":{"start":{"line":22,"character":0},"end":{"line":22,"character":35}},"selectionRange":{"start":{"line":22,"character":4},"end":{"line":22,"character":14}}},{"name":"ASCIIClientHandler","detail":"struct{...}","kind":23,"range":{"start":{"line":25,"character":5},"end":{"line":28,"character":1}},"selectionRange":{"start":{"line":25,"character":5},"end":{"line":25,"character":23}},"children":[{"name":"asciiPackager","detail":"struct{...}","kind":8,"range":{"start":{"line":26,"character":1},"end":{"line":26,"character":14}},"selectionRange":{"start":{"line":26,"character":1},"end":{"line":26,"character":14}}},{"name":"asciiSerialTransporter","detail":"struct{...}","kind":8,"range":{"start":{"line":27,"character":1},"end":{"line":27,"character":23}},"selectionRange":{"start":{"line":27,"character":1},"end":{"line":27,"character":23}}}]},{"name":"NewASCIIClientHandler","detail":"(address string)","kind":12,"range":{"start":{"line":31,"character":0},"end":{"line":37,"character":1}},"selectionRange":{"start":{"line":31,"character":5},"end":{"line":31,"character":26}}},{"name":"ASCIIClient","detail":"(address string)","kind":12,"range":{"start":{"line":40,"character":0},"end":{"line":43,"character":1}},"selectionRange":{"start":{"line":40,"character":5},"end":{"line":40,"character":16}}},{"name":"asciiPackager","detail":"struct{...}","kind":23,"range":{"start":{"line":46,"character":5},"end":{"line":48,"character":1}},"selectionRange":{"start":{"line":46,"character":5},"end":{"line":46,"character":18}},"children":[{"name":"SlaveID","detail":"byte","kind":8,"range":{"start":{"line":47,"character":1},"end":{"line":47,"character":13}},"selectionRange":{"start":{"line":47,"character":1},"end":{"line":47,"character":8}}}]},{"name":"(*asciiPackager).SetSlave","detail":"(slaveID byte)","kind":6,"range":{"start":{"line":51,"character":0},"end":{"line":53,"character":1}},"selectionRange":{"start":{"line":51,"character":25},"end":{"line":51,"character":33}}},{"name":"(*asciiPackager).Encode","detail":"(pdu *ProtocolDataUnit)","kind":6,"range":{"start":{"line":62,"character":0},"end":{"line":86,"character":1}},"selectionRange":{"start":{"line":62,"character":25},"end":{"line":62,"character":31}}},{"name":"(*asciiPackager).Verify","detail":"(aduRequest []byte, aduResponse []byte)","kind":6,"range":{"start":{"line":89,"character":0},"end":{"line":127,"character":1}},"selectionRange":{"start":{"line":89,"character":25},"end":{"line":89,"character":31}}},{"name":"(*asciiPackager).Decode","detail":"(adu []byte)","kind":6,"range":{"start":{"line":130,"character":0},"end":{"line":162,"character":1}},"selectionRange":{"start":{"line":130,"character":25},"end":{"line":130,"character":31}}},{"name":"asciiSerialTransporter","detail":"struct{...}","kind":23,"range":{"start":{"line":165,"character":5},"end":{"line":167,"character":1}},"selectionRange":{"start":{"line":165,"character":5},"end":{"line":165,"character":27}},"children":[{"name":"serialPort","detail":"struct{...}","kind":8,"range":{"start":{"line":166,"character":1},"end":{"line":166,"character":11}},"selectionRange":{"start":{"line":166,"character":1},"end":{"line":166,"character":11}}}]},{"name":"(*asciiSerialTransporter).Send","detail":"(aduRequest []byte)","kind":6,"range":{"start":{"line":169,"character":0},"end":{"line":208,"character":1}},"selectionRange":{"start":{"line":169,"character":34},"end":{"line":169,"character":38}}},{"name":"writeHex","detail":"(buf *bytes.Buffer, value []byte)","kind":12,"range":{"start":{"line":212,"character":0},"end":{"line":223,"character":1}},"selectionRange":{"start":{"line":212,"character":5},"end":{"line":212,"character":13}}},{"name":"readHex","detail":"(data []byte)","kind":12,"range":{"start":{"line":226,"character":0},"end":{"line":233,"character":1}},"selectionRange":{"start":{"line":226,"character":5},"end":{"line":226,"character":12}}},{"name":"isStartCharacter","detail":"(str string)","kind":12,"range":{"start":{"line":236,"character":0},"end":{"line":243,"character":1}},"selectionRange":{"start":{"line":236,"character":5},"end":{"line":236,"character":21}}}]
  400.  
  401.  
  402. [Trace - 08:20:11.337 AM] Received notification 'window/logMessage'.
  403. Params: {"type":3,"message":"2020/08/06 08:20:11 go/packages.Load\n\tsnapshot=1\n\tdirectory=/Users/andig/htdocs/gridx-modbus\n\tquery=[./]\n\tpackages=3\n"}
  404.  
  405.  
  406. [Info - 8:20:11 AM] 2020/08/06 08:20:11 go/packages.Load
  407. snapshot=1
  408. directory=/Users/andig/htdocs/gridx-modbus
  409. query=[./]
  410. packages=3
  411.  
  412. [Trace - 08:20:11.372 AM] Sending request 'textDocument/codeLens - (4)'.
  413. Params: {"textDocument":{"uri":"file:///Users/andig/htdocs/gridx-modbus/asciiclient.go"}}
  414.  
  415.  
  416. [Trace - 08:20:11.373 AM] Received response 'textDocument/codeLens - (4)' in 0ms.
  417. Result: null
  418.  
  419.  
  420. [Trace - 08:20:11.384 AM] Sending request 'textDocument/foldingRange - (5)'.
  421. Params: {"textDocument":{"uri":"file:///Users/andig/htdocs/gridx-modbus/asciiclient.go"}}
  422.  
  423.  
  424. [Trace - 08:20:11.385 AM] Received response 'textDocument/foldingRange - (5)' in 1ms.
  425. Result: [{"startLine":0,"startCharacter":56,"endLine":2,"endCharacter":56,"kind":"comment"},{"startLine":6,"startCharacter":8,"endLine":10,"endCharacter":7,"kind":"imports"},{"startLine":13,"startCharacter":7,"endLine":18,"endCharacter":30},{"startLine":25,"startCharacter":32,"endLine":27,"endCharacter":23},{"startLine":31,"startCharacter":64,"endLine":36,"endCharacter":15},{"startLine":40,"startCharacter":41,"endLine":42,"endCharacter":26},{"startLine":46,"startCharacter":27,"endLine":47,"endCharacter":13},{"startLine":51,"startCharacter":49,"endLine":52,"endCharacter":21},{"startLine":55,"startCharacter":39,"endLine":61,"endCharacter":29,"kind":"comment"},{"startLine":62,"startCharacter":80,"endLine":85,"endCharacter":7},{"startLine":65,"startCharacter":57,"endLine":66,"endCharacter":8},{"startLine":68,"startCharacter":76,"endLine":69,"endCharacter":8},{"startLine":71,"startCharacter":48,"endLine":72,"endCharacter":8},{"startLine":78,"startCharacter":59,"endLine":79,"endCharacter":8},{"startLine":81,"startCharacter":52,"endLine":82,"endCharacter":8},{"startLine":89,"startCharacter":84,"endLine":126,"endCharacter":7},{"startLine":92,"startCharacter":29,"endLine":94,"endCharacter":8},{"startLine":97,"startCharacter":19,"endLine":99,"endCharacter":8},{"startLine":103,"startCharacter":28,"endLine":105,"endCharacter":8},{"startLine":109,"startCharacter":21,"endLine":111,"endCharacter":8},{"startLine":115,"startCharacter":16,"endLine":116,"endCharacter":8},{"startLine":119,"startCharacter":16,"endLine":120,"endCharacter":8},{"startLine":122,"startCharacter":31,"endLine":124,"endCharacter":8},{"startLine":130,"startCharacter":80,"endLine":161,"endCharacter":7},{"startLine":134,"startCharacter":16,"endLine":135,"endCharacter":8},{"startLine":138,"startCharacter":58,"endLine":139,"endCharacter":8},{"startLine":145,"startCharacter":53,"endLine":146,"endCharacter":8},{"startLine":150,"startCharacter":16,"endLine":151,"endCharacter":8},{"startLine":157,"startCharacter":27,"endLine":159,"endCharacter":8},{"startLine":165,"startCharacter":36,"endLine":166,"endCharacter":11},{"startLine":169,"startCharacter":91,"endLine":207,"endCharacter":7},{"startLine":174,"startCharacter":47,"endLine":175,"endCharacter":8},{"startLine":183,"startCharacter":52,"endLine":184,"endCharacter":8},{"startLine":190,"startCharacter":6,"endLine":203,"endCharacter":3},{"startLine":191,"startCharacter":55,"endLine":192,"endCharacter":9},{"startLine":195,"startCharacter":39,"endLine":196,"endCharacter":8},{"startLine":199,"startCharacter":28,"endLine":202,"endCharacter":4},{"startLine":200,"startCharacter":61,"endLine":201,"endCharacter":9},{"startLine":210,"startCharacter":68,"endLine":211,"endCharacter":49,"kind":"comment"},{"startLine":212,"startCharacter":60,"endLine":222,"endCharacter":7},{"startLine":214,"startCharacter":26,"endLine":220,"endCharacter":3},{"startLine":218,"startCharacter":45,"endLine":219,"endCharacter":9},{"startLine":226,"startCharacter":51,"endLine":232,"endCharacter":7},{"startLine":228,"startCharacter":56,"endLine":229,"endCharacter":8},{"startLine":236,"startCharacter":40,"endLine":242,"endCharacter":13},{"startLine":237,"startCharacter":28,"endLine":240,"endCharacter":3},{"startLine":238,"startCharacter":27,"endLine":239,"endCharacter":14}]
  426.  
  427.  
  428. [Trace - 08:20:11.684 AM] Sending request 'textDocument/codeAction - (6)'.
  429. Params: {"textDocument":{"uri":"file:///Users/andig/htdocs/gridx-modbus/asciiclient.go"},"range":{"start":{"line":0,"character":0},"end":{"line":0,"character":0}},"context":{"diagnostics":[]}}
  430.  
  431.  
  432. [Trace - 08:20:11.686 AM] Received response 'textDocument/codeAction - (6)' in 1ms.
  433. Result: null
  434.  
  435.  
  436. [Trace - 08:20:14.933 AM] Sending request 'textDocument/hover - (7)'.
  437. Params: {"textDocument":{"uri":"file:///Users/andig/htdocs/gridx-modbus/asciiclient.go"},"position":{"line":33,"character":12}}
  438.  
  439.  
  440. [Trace - 08:20:14.934 AM] Received response 'textDocument/hover - (7)' in 0ms.
  441. Result: null
  442.  
  443.  
  444. [Trace - 08:20:15.094 AM] Sending request 'textDocument/codeAction - (8)'.
  445. Params: {"textDocument":{"uri":"file:///Users/andig/htdocs/gridx-modbus/asciiclient.go"},"range":{"start":{"line":33,"character":9},"end":{"line":33,"character":16}},"context":{"diagnostics":[{"range":{"start":{"line":33,"character":9},"end":{"line":33,"character":16}},"message":"handler.Address undefined (type *ASCIIClientHandler has no field or method Address)","severity":1,"source":"compiler"}],"only":["quickfix"]}}
  446.  
  447.  
  448. [Trace - 08:20:15.096 AM] Received response 'textDocument/codeAction - (8)' in 1ms.
  449. Result: null
  450.  
  451.  
  452. [Trace - 08:20:21.823 AM] Sending request 'textDocument/hover - (9)'.
  453. Params: {"textDocument":{"uri":"file:///Users/andig/htdocs/gridx-modbus/asciiclient.go"},"position":{"line":24,"character":18}}
  454.  
  455.  
  456. [Trace - 08:20:21.823 AM] Received response 'textDocument/hover - (9)' in 0ms.
  457. Result: null
  458.  
  459.  
  460. [Trace - 08:20:22.884 AM] Sending request 'textDocument/hover - (10)'.
  461. Params: {"textDocument":{"uri":"file:///Users/andig/htdocs/gridx-modbus/asciiclient.go"},"position":{"line":27,"character":8}}
  462.  
  463.  
  464. [Trace - 08:20:22.885 AM] Received response 'textDocument/hover - (10)' in 0ms.
  465. Result: {"contents":{"kind":"markdown","value":"```go\nasciiSerialTransporter struct {\n\tserialPort\n}\n```\n\nasciiSerialTransporter implements Transporter interface\\.\n"},"range":{"start":{"line":27,"character":1},"end":{"line":27,"character":23}}}
  466.  
  467.  
  468. [Trace - 08:20:23.090 AM] Sending request 'textDocument/hover - (11)'.
  469. Params: {"textDocument":{"uri":"file:///Users/andig/htdocs/gridx-modbus/asciiclient.go"},"position":{"line":26,"character":8}}
  470.  
  471.  
  472. [Trace - 08:20:23.091 AM] Received response 'textDocument/hover - (11)' in 0ms.
  473. Result: {"contents":{"kind":"markdown","value":"```go\nasciiPackager struct {\n\tSlaveID byte\n}\n```\n\nasciiPackager implements Packager interface\\.\n"},"range":{"start":{"line":26,"character":1},"end":{"line":26,"character":14}}}
  474.  
  475.  
  476. [Trace - 08:20:23.219 AM] Sending request 'textDocument/definition - (12)'.
  477. Params: {"textDocument":{"uri":"file:///Users/andig/htdocs/gridx-modbus/asciiclient.go"},"position":{"line":26,"character":8}}
  478.  
  479.  
  480. [Trace - 08:20:23.220 AM] Received response 'textDocument/definition - (12)' in 0ms.
  481. Result: [{"uri":"file:///Users/andig/htdocs/gridx-modbus/asciiclient.go","range":{"start":{"line":46,"character":5},"end":{"line":46,"character":18}}}]
  482.  
  483.  
  484. [Trace - 08:20:23.778 AM] Sending request 'textDocument/documentHighlight - (13)'.
  485. Params: {"textDocument":{"uri":"file:///Users/andig/htdocs/gridx-modbus/asciiclient.go"},"position":{"line":26,"character":8}}
  486.  
  487.  
  488. [Trace - 08:20:23.779 AM] Received response 'textDocument/documentHighlight - (13)' in 0ms.
  489. Result: [{"range":{"start":{"line":26,"character":1},"end":{"line":26,"character":14}},"kind":1}]
  490.  
  491.  
  492. [Trace - 08:20:23.894 AM] Sending request 'textDocument/definition - (14)'.
  493. Params: {"textDocument":{"uri":"file:///Users/andig/htdocs/gridx-modbus/asciiclient.go"},"position":{"line":26,"character":8}}
  494.  
  495.  
  496. [Trace - 08:20:23.895 AM] Received response 'textDocument/definition - (14)' in 1ms.
  497. Result: [{"uri":"file:///Users/andig/htdocs/gridx-modbus/asciiclient.go","range":{"start":{"line":46,"character":5},"end":{"line":46,"character":18}}}]
  498.  
  499.  
  500. [Trace - 08:20:23.920 AM] Sending request 'textDocument/documentSymbol - (15)'.
  501. Params: {"textDocument":{"uri":"file:///Users/andig/htdocs/gridx-modbus/asciiclient.go"}}
  502.  
  503.  
  504. [Trace - 08:20:23.920 AM] Received response 'textDocument/documentSymbol - (15)' in 0ms.
  505. Result: [{"name":"asciiEnd","detail":"untyped string","kind":14,"range":{"start":{"line":13,"character":0},"end":{"line":19,"character":1}},"selectionRange":{"start":{"line":14,"character":1},"end":{"line":14,"character":9}}},{"name":"asciiMinSize","detail":"untyped int","kind":14,"range":{"start":{"line":13,"character":0},"end":{"line":19,"character":1}},"selectionRange":{"start":{"line":15,"character":1},"end":{"line":15,"character":13}}},{"name":"asciiMaxSize","detail":"untyped int","kind":14,"range":{"start":{"line":13,"character":0},"end":{"line":19,"character":1}},"selectionRange":{"start":{"line":16,"character":1},"end":{"line":16,"character":13}}},{"name":"hexTable","detail":"untyped string","kind":14,"range":{"start":{"line":13,"character":0},"end":{"line":19,"character":1}},"selectionRange":{"start":{"line":18,"character":1},"end":{"line":18,"character":9}}},{"name":"asciiStart","detail":"[]string","kind":13,"range":{"start":{"line":22,"character":0},"end":{"line":22,"character":35}},"selectionRange":{"start":{"line":22,"character":4},"end":{"line":22,"character":14}}},{"name":"ASCIIClientHandler","detail":"struct{...}","kind":23,"range":{"start":{"line":25,"character":5},"end":{"line":28,"character":1}},"selectionRange":{"start":{"line":25,"character":5},"end":{"line":25,"character":23}},"children":[{"name":"asciiPackager","detail":"struct{...}","kind":8,"range":{"start":{"line":26,"character":1},"end":{"line":26,"character":14}},"selectionRange":{"start":{"line":26,"character":1},"end":{"line":26,"character":14}}},{"name":"asciiSerialTransporter","detail":"struct{...}","kind":8,"range":{"start":{"line":27,"character":1},"end":{"line":27,"character":23}},"selectionRange":{"start":{"line":27,"character":1},"end":{"line":27,"character":23}}}]},{"name":"NewASCIIClientHandler","detail":"(address string)","kind":12,"range":{"start":{"line":31,"character":0},"end":{"line":37,"character":1}},"selectionRange":{"start":{"line":31,"character":5},"end":{"line":31,"character":26}}},{"name":"ASCIIClient","detail":"(address string)","kind":12,"range":{"start":{"line":40,"character":0},"end":{"line":43,"character":1}},"selectionRange":{"start":{"line":40,"character":5},"end":{"line":40,"character":16}}},{"name":"asciiPackager","detail":"struct{...}","kind":23,"range":{"start":{"line":46,"character":5},"end":{"line":48,"character":1}},"selectionRange":{"start":{"line":46,"character":5},"end":{"line":46,"character":18}},"children":[{"name":"SlaveID","detail":"byte","kind":8,"range":{"start":{"line":47,"character":1},"end":{"line":47,"character":13}},"selectionRange":{"start":{"line":47,"character":1},"end":{"line":47,"character":8}}}]},{"name":"(*asciiPackager).SetSlave","detail":"(slaveID byte)","kind":6,"range":{"start":{"line":51,"character":0},"end":{"line":53,"character":1}},"selectionRange":{"start":{"line":51,"character":25},"end":{"line":51,"character":33}}},{"name":"(*asciiPackager).Encode","detail":"(pdu *ProtocolDataUnit)","kind":6,"range":{"start":{"line":62,"character":0},"end":{"line":86,"character":1}},"selectionRange":{"start":{"line":62,"character":25},"end":{"line":62,"character":31}}},{"name":"(*asciiPackager).Verify","detail":"(aduRequest []byte, aduResponse []byte)","kind":6,"range":{"start":{"line":89,"character":0},"end":{"line":127,"character":1}},"selectionRange":{"start":{"line":89,"character":25},"end":{"line":89,"character":31}}},{"name":"(*asciiPackager).Decode","detail":"(adu []byte)","kind":6,"range":{"start":{"line":130,"character":0},"end":{"line":162,"character":1}},"selectionRange":{"start":{"line":130,"character":25},"end":{"line":130,"character":31}}},{"name":"asciiSerialTransporter","detail":"struct{...}","kind":23,"range":{"start":{"line":165,"character":5},"end":{"line":167,"character":1}},"selectionRange":{"start":{"line":165,"character":5},"end":{"line":165,"character":27}},"children":[{"name":"serialPort","detail":"struct{...}","kind":8,"range":{"start":{"line":166,"character":1},"end":{"line":166,"character":11}},"selectionRange":{"start":{"line":166,"character":1},"end":{"line":166,"character":11}}}]},{"name":"(*asciiSerialTransporter).Send","detail":"(aduRequest []byte)","kind":6,"range":{"start":{"line":169,"character":0},"end":{"line":208,"character":1}},"selectionRange":{"start":{"line":169,"character":34},"end":{"line":169,"character":38}}},{"name":"writeHex","detail":"(buf *bytes.Buffer, value []byte)","kind":12,"range":{"start":{"line":212,"character":0},"end":{"line":223,"character":1}},"selectionRange":{"start":{"line":212,"character":5},"end":{"line":212,"character":13}}},{"name":"readHex","detail":"(data []byte)","kind":12,"range":{"start":{"line":226,"character":0},"end":{"line":233,"character":1}},"selectionRange":{"start":{"line":226,"character":5},"end":{"line":226,"character":12}}},{"name":"isStartCharacter","detail":"(str string)","kind":12,"range":{"start":{"line":236,"character":0},"end":{"line":243,"character":1}},"selectionRange":{"start":{"line":236,"character":5},"end":{"line":236,"character":21}}}]
  506.  
  507.  
  508. [Trace - 08:20:24.151 AM] Sending request 'textDocument/codeAction - (16)'.
  509. Params: {"textDocument":{"uri":"file:///Users/andig/htdocs/gridx-modbus/asciiclient.go"},"range":{"start":{"line":46,"character":5},"end":{"line":46,"character":5}},"context":{"diagnostics":[]}}
  510.  
  511.  
  512. [Trace - 08:20:24.153 AM] Received response 'textDocument/codeAction - (16)' in 1ms.
  513. Result: null
  514.  
  515.  
  516. [Trace - 08:20:30.759 AM] Sending notification '$/setTraceNotification'.
  517. Params: {"value":"off"}
  518.  
  519.  
  520. [Trace - 08:20:30.759 AM] Sending notification 'workspace/didChangeConfiguration'.
  521. Params: {"settings":null}
  522.  
  523.  
  524. [Trace - 08:20:30.759 AM] Received request 'workspace/configuration - (8)'.
  525. Params: {"items":[{"scopeUri":"file:///Users/andig/htdocs/evcc","section":"gopls"},{"scopeUri":"file:///Users/andig/htdocs/evcc","section":"gopls-evcc"}]}
  526.  
  527.  
  528. [Trace - 08:20:30.769 AM] Sending response 'workspace/configuration - (8)' in 10ms.
  529. Result: [null,null]
  530.  
  531.  
  532. [Trace - 08:20:30.770 AM] Received request 'workspace/configuration - (9)'.
  533. Params: {"items":[{"scopeUri":"file:///Users/andig/htdocs/evcc-config","section":"gopls"},{"scopeUri":"file:///Users/andig/htdocs/evcc-config","section":"gopls-evcc-config"}]}
  534.  
  535.  
  536. [Trace - 08:20:30.772 AM] Sending response 'workspace/configuration - (9)' in 1ms.
  537. Result: [null,null]
  538.  
  539.  
  540. [Trace - 08:20:30.772 AM] Received request 'workspace/configuration - (10)'.
  541. Params: {"items":[{"scopeUri":"file:///Users/andig/htdocs/TWCManager","section":"gopls"},{"scopeUri":"file:///Users/andig/htdocs/TWCManager","section":"gopls-TWCManager"}]}
  542.  
  543.  
  544. [Trace - 08:20:30.773 AM] Sending response 'workspace/configuration - (10)' in 1ms.
  545. Result: [null,null]
  546.  
  547.  
  548. [Trace - 08:20:30.773 AM] Received request 'workspace/configuration - (11)'.
  549. Params: {"items":[{"scopeUri":"file:///Users/andig/htdocs/whatsapp","section":"gopls"},{"scopeUri":"file:///Users/andig/htdocs/whatsapp","section":"gopls-whatsapp"}]}
  550.  
  551.  
  552. [Trace - 08:20:30.774 AM] Sending response 'workspace/configuration - (11)' in 0ms.
  553. Result: [null,null]
  554.  
  555.  
  556. [Trace - 08:20:30.775 AM] Received request 'workspace/configuration - (12)'.
  557. Params: {"items":[{"scopeUri":"file:///Users/andig/htdocs/gridx-modbus","section":"gopls"},{"scopeUri":"file:///Users/andig/htdocs/gridx-modbus","section":"gopls-gridx-modbus"}]}
  558.  
  559.  
  560. [Trace - 08:20:30.776 AM] Sending response 'workspace/configuration - (12)' in 1ms.
  561. Result: [null,null]
  562.  
  563.  
  564. [Trace - 08:20:30.814 AM] Received notification 'window/logMessage'.
  565. Params: {"type":3,"message":"2020/08/06 08:20:30 go/packages.Load\n\tsnapshot=0\n\tdirectory=/Users/andig/htdocs/TWCManager\n\tquery=[./]\n\tpackages=1\n"}
  566.  
  567.  
  568. [Info - 8:20:30 AM] 2020/08/06 08:20:30 go/packages.Load
  569. snapshot=0
  570. directory=/Users/andig/htdocs/TWCManager
  571. query=[./]
  572. packages=1
  573.  
  574. [Trace - 08:20:30.972 AM] Received notification 'window/logMessage'.
  575. Params: {"type":3,"message":"2020/08/06 08:20:30 go/packages.Load\n\tsnapshot=1\n\tdirectory=/Users/andig/htdocs/gridx-modbus\n\tquery=[./]\n\tpackages=3\n"}
  576.  
  577.  
  578. [Info - 8:20:30 AM] 2020/08/06 08:20:30 go/packages.Load
  579. snapshot=1
  580. directory=/Users/andig/htdocs/gridx-modbus
  581. query=[./]
  582. packages=3
  583.  
  584. [Trace - 08:20:30.974 AM] Received notification 'window/showMessage'.
  585. Params: {"type":2,"message":"You are neither in a module nor in your GOPATH. If you are using modules, please open your editor to a directory in your module. If you believe this warning is incorrect, please file an issue: https://github.com/golang/go/issues/new."}
  586.  
  587.  
  588. [Trace - 08:20:32.805 AM] Sending notification '$/setTraceNotification'.
  589. Params: {"value":"off"}
  590.  
  591.  
  592. [Trace - 08:20:32.805 AM] Sending notification 'workspace/didChangeConfiguration'.
  593. Params: {"settings":null}
  594.  
  595.  
  596. [Trace - 08:20:32.805 AM] Received request 'workspace/configuration - (13)'.
  597. Params: {"items":[{"scopeUri":"file:///Users/andig/htdocs/evcc","section":"gopls"},{"scopeUri":"file:///Users/andig/htdocs/evcc","section":"gopls-evcc"}]}
  598.  
  599.  
  600. [Trace - 08:20:32.813 AM] Sending response 'workspace/configuration - (13)' in 7ms.
  601. Result: [null,null]
  602.  
  603.  
  604. [Trace - 08:20:32.813 AM] Received request 'workspace/configuration - (14)'.
  605. Params: {"items":[{"scopeUri":"file:///Users/andig/htdocs/evcc-config","section":"gopls"},{"scopeUri":"file:///Users/andig/htdocs/evcc-config","section":"gopls-evcc-config"}]}
  606.  
  607.  
  608. [Trace - 08:20:32.815 AM] Sending response 'workspace/configuration - (14)' in 1ms.
  609. Result: [null,null]
  610.  
  611.  
  612. [Trace - 08:20:32.816 AM] Received request 'workspace/configuration - (15)'.
  613. Params: {"items":[{"scopeUri":"file:///Users/andig/htdocs/TWCManager","section":"gopls"},{"scopeUri":"file:///Users/andig/htdocs/TWCManager","section":"gopls-TWCManager"}]}
  614.  
  615.  
  616. [Trace - 08:20:32.819 AM] Sending response 'workspace/configuration - (15)' in 2ms.
  617. Result: [null,null]
  618.  
  619.  
  620. [Trace - 08:20:32.820 AM] Received request 'workspace/configuration - (16)'.
  621. Params: {"items":[{"scopeUri":"file:///Users/andig/htdocs/whatsapp","section":"gopls"},{"scopeUri":"file:///Users/andig/htdocs/whatsapp","section":"gopls-whatsapp"}]}
  622.  
  623.  
  624. [Trace - 08:20:32.826 AM] Sending response 'workspace/configuration - (16)' in 6ms.
  625. Result: [null,null]
  626.  
  627.  
  628. [Trace - 08:20:32.830 AM] Received request 'workspace/configuration - (17)'.
  629. Params: {"items":[{"scopeUri":"file:///Users/andig/htdocs/gridx-modbus","section":"gopls"},{"scopeUri":"file:///Users/andig/htdocs/gridx-modbus","section":"gopls-gridx-modbus"}]}
  630.  
  631.  
  632. [Trace - 08:20:32.833 AM] Sending response 'workspace/configuration - (17)' in 2ms.
  633. Result: [null,null]
  634.  
  635.  
  636. [Trace - 08:20:32.874 AM] Received notification 'window/logMessage'.
  637. Params: {"type":3,"message":"2020/08/06 08:20:32 go/packages.Load\n\tsnapshot=0\n\tdirectory=/Users/andig/htdocs/TWCManager\n\tquery=[./]\n\tpackages=1\n"}
  638.  
  639.  
  640. [Info - 8:20:32 AM] 2020/08/06 08:20:32 go/packages.Load
  641. snapshot=0
  642. directory=/Users/andig/htdocs/TWCManager
  643. query=[./]
  644. packages=1
  645.  
  646. [Trace - 08:20:33.049 AM] Received notification 'window/logMessage'.
  647. Params: {"type":3,"message":"2020/08/06 08:20:33 go/packages.Load\n\tsnapshot=1\n\tdirectory=/Users/andig/htdocs/gridx-modbus\n\tquery=[./]\n\tpackages=3\n"}
  648.  
  649.  
  650. [Info - 8:20:33 AM] 2020/08/06 08:20:33 go/packages.Load
  651. snapshot=1
  652. directory=/Users/andig/htdocs/gridx-modbus
  653. query=[./]
  654. packages=3
  655.  
  656. [Trace - 08:20:33.050 AM] Received notification 'window/showMessage'.
  657. Params: {"type":2,"message":"You are neither in a module nor in your GOPATH. If you are using modules, please open your editor to a directory in your module. If you believe this warning is incorrect, please file an issue: https://github.com/golang/go/issues/new."}
  658.  
  659.  
  660. [Trace - 08:20:33.949 AM] Sending request 'textDocument/hover - (17)'.
  661. Params: {"textDocument":{"uri":"file:///Users/andig/htdocs/gridx-modbus/asciiclient.go"},"position":{"line":41,"character":25}}
  662.  
  663.  
  664. [Trace - 08:20:33.951 AM] Received response 'textDocument/hover - (17)' in 2ms.
  665. Result: {"contents":{"kind":"markdown","value":"```go\nfunc NewASCIIClientHandler(address string) *ASCIIClientHandler\n```\n\n[`modbus.NewASCIIClientHandler` on pkg.go.dev](https://pkg.go.dev/_/Users/andig/htdocs/gridx-modbus#NewASCIIClientHandler)\n\nNewASCIIClientHandler allocates and initializes a ASCIIClientHandler\\.\n"},"range":{"start":{"line":41,"character":12},"end":{"line":41,"character":33}}}
  666.  
  667.  
  668. [Trace - 08:20:35.589 AM] Sending request 'textDocument/documentSymbol - (18)'.
  669. Params: {"textDocument":{"uri":"file:///Users/andig/htdocs/gridx-modbus/asciiclient.go"}}
  670.  
  671.  
  672. [Trace - 08:20:35.590 AM] Received response 'textDocument/documentSymbol - (18)' in 0ms.
  673. Result: [{"name":"asciiEnd","detail":"untyped string","kind":14,"range":{"start":{"line":13,"character":0},"end":{"line":19,"character":1}},"selectionRange":{"start":{"line":14,"character":1},"end":{"line":14,"character":9}}},{"name":"asciiMinSize","detail":"untyped int","kind":14,"range":{"start":{"line":13,"character":0},"end":{"line":19,"character":1}},"selectionRange":{"start":{"line":15,"character":1},"end":{"line":15,"character":13}}},{"name":"asciiMaxSize","detail":"untyped int","kind":14,"range":{"start":{"line":13,"character":0},"end":{"line":19,"character":1}},"selectionRange":{"start":{"line":16,"character":1},"end":{"line":16,"character":13}}},{"name":"hexTable","detail":"untyped string","kind":14,"range":{"start":{"line":13,"character":0},"end":{"line":19,"character":1}},"selectionRange":{"start":{"line":18,"character":1},"end":{"line":18,"character":9}}},{"name":"asciiStart","detail":"[]string","kind":13,"range":{"start":{"line":22,"character":0},"end":{"line":22,"character":35}},"selectionRange":{"start":{"line":22,"character":4},"end":{"line":22,"character":14}}},{"name":"ASCIIClientHandler","detail":"struct{...}","kind":23,"range":{"start":{"line":25,"character":5},"end":{"line":28,"character":1}},"selectionRange":{"start":{"line":25,"character":5},"end":{"line":25,"character":23}},"children":[{"name":"asciiPackager","detail":"struct{...}","kind":8,"range":{"start":{"line":26,"character":1},"end":{"line":26,"character":14}},"selectionRange":{"start":{"line":26,"character":1},"end":{"line":26,"character":14}}},{"name":"asciiSerialTransporter","detail":"struct{...}","kind":8,"range":{"start":{"line":27,"character":1},"end":{"line":27,"character":23}},"selectionRange":{"start":{"line":27,"character":1},"end":{"line":27,"character":23}}}]},{"name":"NewASCIIClientHandler","detail":"(address string)","kind":12,"range":{"start":{"line":31,"character":0},"end":{"line":37,"character":1}},"selectionRange":{"start":{"line":31,"character":5},"end":{"line":31,"character":26}}},{"name":"ASCIIClient","detail":"(address string)","kind":12,"range":{"start":{"line":40,"character":0},"end":{"line":43,"character":1}},"selectionRange":{"start":{"line":40,"character":5},"end":{"line":40,"character":16}}},{"name":"asciiPackager","detail":"struct{...}","kind":23,"range":{"start":{"line":46,"character":5},"end":{"line":48,"character":1}},"selectionRange":{"start":{"line":46,"character":5},"end":{"line":46,"character":18}},"children":[{"name":"SlaveID","detail":"byte","kind":8,"range":{"start":{"line":47,"character":1},"end":{"line":47,"character":13}},"selectionRange":{"start":{"line":47,"character":1},"end":{"line":47,"character":8}}}]},{"name":"(*asciiPackager).SetSlave","detail":"(slaveID byte)","kind":6,"range":{"start":{"line":51,"character":0},"end":{"line":53,"character":1}},"selectionRange":{"start":{"line":51,"character":25},"end":{"line":51,"character":33}}},{"name":"(*asciiPackager).Encode","detail":"(pdu *ProtocolDataUnit)","kind":6,"range":{"start":{"line":62,"character":0},"end":{"line":86,"character":1}},"selectionRange":{"start":{"line":62,"character":25},"end":{"line":62,"character":31}}},{"name":"(*asciiPackager).Verify","detail":"(aduRequest []byte, aduResponse []byte)","kind":6,"range":{"start":{"line":89,"character":0},"end":{"line":127,"character":1}},"selectionRange":{"start":{"line":89,"character":25},"end":{"line":89,"character":31}}},{"name":"(*asciiPackager).Decode","detail":"(adu []byte)","kind":6,"range":{"start":{"line":130,"character":0},"end":{"line":162,"character":1}},"selectionRange":{"start":{"line":130,"character":25},"end":{"line":130,"character":31}}},{"name":"asciiSerialTransporter","detail":"struct{...}","kind":23,"range":{"start":{"line":165,"character":5},"end":{"line":167,"character":1}},"selectionRange":{"start":{"line":165,"character":5},"end":{"line":165,"character":27}},"children":[{"name":"serialPort","detail":"struct{...}","kind":8,"range":{"start":{"line":166,"character":1},"end":{"line":166,"character":11}},"selectionRange":{"start":{"line":166,"character":1},"end":{"line":166,"character":11}}}]},{"name":"(*asciiSerialTransporter).Send","detail":"(aduRequest []byte)","kind":6,"range":{"start":{"line":169,"character":0},"end":{"line":208,"character":1}},"selectionRange":{"start":{"line":169,"character":34},"end":{"line":169,"character":38}}},{"name":"writeHex","detail":"(buf *bytes.Buffer, value []byte)","kind":12,"range":{"start":{"line":212,"character":0},"end":{"line":223,"character":1}},"selectionRange":{"start":{"line":212,"character":5},"end":{"line":212,"character":13}}},{"name":"readHex","detail":"(data []byte)","kind":12,"range":{"start":{"line":226,"character":0},"end":{"line":233,"character":1}},"selectionRange":{"start":{"line":226,"character":5},"end":{"line":226,"character":12}}},{"name":"isStartCharacter","detail":"(str string)","kind":12,"range":{"start":{"line":236,"character":0},"end":{"line":243,"character":1}},"selectionRange":{"start":{"line":236,"character":5},"end":{"line":236,"character":21}}}]
  674.  
  675.  
  676. [Trace - 08:20:35.819 AM] Sending request 'textDocument/codeAction - (19)'.
  677. Params: {"textDocument":{"uri":"file:///Users/andig/htdocs/gridx-modbus/asciiclient.go"},"range":{"start":{"line":26,"character":8},"end":{"line":26,"character":8}},"context":{"diagnostics":[]}}
  678.  
  679.  
  680. [Trace - 08:20:35.826 AM] Received response 'textDocument/codeAction - (19)' in 7ms.
  681. Result: null
  682.  
  683.  
  684. [Trace - 08:20:37.190 AM] Sending request 'textDocument/hover - (20)'.
  685. Params: {"textDocument":{"uri":"file:///Users/andig/htdocs/gridx-modbus/asciiclient.go"},"position":{"line":27,"character":15}}
  686.  
  687.  
  688. [Trace - 08:20:37.191 AM] Received response 'textDocument/hover - (20)' in 0ms.
  689. Result: {"contents":{"kind":"markdown","value":"```go\nasciiSerialTransporter struct {\n\tserialPort\n}\n```\n\nasciiSerialTransporter implements Transporter interface\\.\n"},"range":{"start":{"line":27,"character":1},"end":{"line":27,"character":23}}}
  690.  
  691.  
  692. [Trace - 08:20:39.269 AM] Sending request 'textDocument/codeAction - (21)'.
  693. Params: {"textDocument":{"uri":"file:///Users/andig/htdocs/gridx-modbus/asciiclient.go"},"range":{"start":{"line":27,"character":15},"end":{"line":27,"character":15}},"context":{"diagnostics":[]}}
  694.  
  695.  
  696. [Trace - 08:20:39.271 AM] Received response 'textDocument/codeAction - (21)' in 1ms.
  697. Result: null
  698.  
  699.  
  700. [Trace - 08:20:40.492 AM] Sending request 'textDocument/codeAction - (22)'.
  701. Params: {"textDocument":{"uri":"file:///Users/andig/htdocs/gridx-modbus/asciiclient.go"},"range":{"start":{"line":27,"character":13},"end":{"line":27,"character":13}},"context":{"diagnostics":[]}}
  702.  
  703.  
  704. [Trace - 08:20:40.494 AM] Received response 'textDocument/codeAction - (22)' in 1ms.
  705. Result: null
  706.  
  707.  
  708. [Trace - 08:20:41.115 AM] Received notification 'window/logMessage'.
  709. Params: {"type":3,"message":"2020/08/06 08:20:41 background imports cache refresh starting\n"}
  710.  
  711.  
  712. [Info - 8:20:41 AM] 2020/08/06 08:20:41 background imports cache refresh starting
  713.  
  714. [Trace - 08:20:41.422 AM] Received notification 'window/logMessage'.
  715. Params: {"type":3,"message":"2020/08/06 08:20:41 background refresh finished after 308.250758ms\n"}
  716.  
  717.  
  718. [Info - 8:20:41 AM] 2020/08/06 08:20:41 background refresh finished after 308.250758ms
  719.  
  720. [Trace - 08:20:47.528 AM] Sending notification 'textDocument/didClose'.
  721. Params: {"textDocument":{"uri":"file:///Users/andig/htdocs/gridx-modbus/asciiclient.go"}}
  722.  
  723.  
  724. [Trace - 08:20:47.790 AM] Sending notification 'textDocument/didOpen'.
  725. Params: {"textDocument":{"uri":"file:///Users/andig/htdocs/evcc/core/loadpoint.go","languageId":"go","version":1,"text":"package core\n\nimport (\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/andig/evcc/api\"\n\t\"github.com/andig/evcc/core/wrapper\"\n\t\"github.com/andig/evcc/push\"\n\t\"github.com/andig/evcc/util\"\n\t\"github.com/pkg/errors\"\n\n\tevbus \"github.com/asaskevich/EventBus\"\n\t\"github.com/avast/retry-go\"\n\t\"github.com/benbjohnson/clock\"\n)\n\nconst (\n\tevChargeStart = \"start\" // update chargeTimer\n\tevChargeStop = \"stop\" // update chargeTimer\n\tevChargeCurrent = \"current\" // update fakeChargeMeter\n\tevChargePower = \"power\" // update chargeRater\n\tevVehicleConnect = \"connect\" // vehicle connected\n\tevVehicleDisconnect = \"disconnect\" // vehicle disconnected\n\n\tminActiveCurrent = 1 // minimum current at which a phase is treated as active\n)\n\n// ThresholdConfig defines enable/disable hysteresis parameters\ntype ThresholdConfig struct {\n\tDelay time.Duration\n\tThreshold float64\n}\n\n// LoadPoint is responsible for controlling charge depending on\n// SoC needs and power availability.\ntype LoadPoint struct {\n\tclock clock.Clock // mockable time\n\tbus evbus.Bus // event bus\n\tpushChan chan<- push.Event // notifications\n\tuiChan chan<- util.Param // client push messages\n\tlpChan chan<- *LoadPoint // update requests\n\tlog *util.Logger\n\n\t// exposed public configuration\n\tsync.Mutex // guard status\n\tMode api.ChargeMode `mapstructure:\"mode\"` // Charge mode, guarded by mutex\n\tTargetSoC int `mapstructure:\"targetSoC\"` // Target SoC, guarded by mutex\n\n\tTitle string `mapstructure:\"title\"` // UI title\n\tPhases int64 `mapstructure:\"phases\"` // Phases- required for converting power and current\n\tChargerRef string `mapstructure:\"charger\"` // Charger reference\n\tVehicleRef string `mapstructure:\"vehicle\"` // Vehicle reference\n\tMeters struct {\n\t\tChargeMeterRef string `mapstructure:\"charge\"` // Charge meter reference\n\t}\n\tSoC struct {\n\t\tAlwaysUpdate bool `mapstructure:\"alwaysUpdate\"`\n\t\tLevels []int `mapstructure:\"levels\"`\n\t}\n\tOnDisconnect struct {\n\t\tMode api.ChargeMode `mapstructure:\"mode\"` // Charge mode to apply when car disconnected\n\t\tTargetSoC int `mapstructure:\"targetSoC\"` // Target SoC to apply when car disconnected\n\t}\n\tEnable, Disable ThresholdConfig\n\n\thandler Handler\n\tHandlerConfig `mapstructure:\",squash\"` // handle charger state and current\n\n\tchargeTimer api.ChargeTimer\n\tchargeRater api.ChargeRater\n\n\tchargeMeter api.Meter // Charger usage meter\n\tvehicle api.Vehicle // Vehicle\n\n\t// cached state\n\tstatus api.ChargeStatus // Charger status\n\tcharging bool // Charging cycle\n\tchargePower float64 // Charging power\n\tconnectedTime time.Time // Time when vehicle was connected\n\tpvTimer time.Time // PV enabled/disable timer\n\n\tsocCharge float64 // Vehicle SoC\n\tchargedEnergy float64 // Charged energy while connected\n\tdeltaChargedEnergy float64 // Charged energy for single cycle\n\tchargeDuration time.Duration // Charge duration\n}\n\n// NewLoadPointFromConfig creates a new loadpoint\nfunc NewLoadPointFromConfig(log *util.Logger, cp configProvider, other map[string]interface{}) *LoadPoint {\n\tlp := NewLoadPoint(log)\n\tif err := util.DecodeOther(other, &lp); err != nil {\n\t\tlog.FATAL.Fatal(err)\n\t}\n\n\t// set sane defaults\n\tlp.Mode = api.ChargeModeString(string(lp.Mode))\n\tlp.OnDisconnect.Mode = api.ChargeModeString(string(lp.OnDisconnect.Mode))\n\n\tlp.TargetSoC = 100\n\tif len(lp.SoC.Levels) > 0 {\n\t\tlp.TargetSoC = lp.SoC.Levels[len(lp.SoC.Levels)-1]\n\t}\n\n\tif lp.Meters.ChargeMeterRef != \"\" {\n\t\tlp.chargeMeter = cp.Meter(lp.Meters.ChargeMeterRef)\n\t}\n\tif lp.VehicleRef != \"\" {\n\t\tlp.vehicle = cp.Vehicle(lp.VehicleRef)\n\t}\n\n\tif lp.ChargerRef == \"\" {\n\t\tlp.log.FATAL.Fatal(\"missing charger\")\n\t}\n\tcharger := cp.Charger(lp.ChargerRef)\n\tlp.configureChargerType(charger)\n\n\tif lp.Enable.Threshold > lp.Disable.Threshold {\n\t\tlog.WARN.Printf(\"PV mode enable threshold (%.0fW) is larger than disable threshold (%.0fW)\", lp.Enable.Threshold, lp.Disable.Threshold)\n\t}\n\n\tlp.handler = &ChargerHandler{\n\t\tlog: lp.log,\n\t\tclock: lp.clock,\n\t\tbus: lp.bus,\n\t\tcharger: charger,\n\t\tHandlerConfig: lp.HandlerConfig,\n\t}\n\n\treturn lp\n}\n\n// NewLoadPoint creates a LoadPoint with sane defaults\nfunc NewLoadPoint(log *util.Logger) *LoadPoint {\n\tclock := clock.New()\n\tbus := evbus.New()\n\n\tlp := &LoadPoint{\n\t\tlog: log, // logger\n\t\tclock: clock, // mockable time\n\t\tbus: bus, // event bus\n\t\tMode: api.ModeOff,\n\t\tPhases: 1,\n\t\tstatus: api.StatusNone,\n\t\tHandlerConfig: HandlerConfig{\n\t\t\tMinCurrent: 6, // A\n\t\t\tMaxCurrent: 16, // A\n\t\t\tSensitivity: 10, // A\n\t\t\tGuardDuration: 5 * time.Minute,\n\t\t},\n\t}\n\n\treturn lp\n}\n\n// GetMode returns loadpoint charge mode\nfunc (lp *LoadPoint) GetMode() api.ChargeMode {\n\tlp.Lock()\n\tdefer lp.Unlock()\n\treturn lp.Mode\n}\n\n// SetMode sets loadpoint charge mode\nfunc (lp *LoadPoint) SetMode(mode api.ChargeMode) {\n\tlp.Lock()\n\tdefer lp.Unlock()\n\n\tlp.log.INFO.Printf(\"set charge mode: %s\", string(mode))\n\n\t// apply immediately\n\tif lp.Mode != mode {\n\t\tlp.Mode = mode\n\t\tlp.publish(\"mode\", mode)\n\t\tlp.lpChan <- lp // request loadpoint update\n\t}\n}\n\n// GetTargetSoC returns loadpoint charge targetSoC\nfunc (lp *LoadPoint) GetTargetSoC() int {\n\tlp.Lock()\n\tdefer lp.Unlock()\n\treturn lp.TargetSoC\n}\n\n// SetTargetSoC sets loadpoint charge targetSoC\nfunc (lp *LoadPoint) SetTargetSoC(targetSoC int) {\n\tlp.Lock()\n\tdefer lp.Unlock()\n\n\tlp.log.INFO.Println(\"set target soc:\", targetSoC)\n\n\t// apply immediately\n\tif lp.TargetSoC != targetSoC {\n\t\tlp.TargetSoC = targetSoC\n\t\tlp.publish(\"targetSoC\", targetSoC)\n\t\tlp.lpChan <- lp // request loadpoint update\n\t}\n}\n\n// configureChargerType ensures that chargeMeter, Rate and Timer can use charger capabilities\nfunc (lp *LoadPoint) configureChargerType(charger api.Charger) {\n\t// ensure charge meter exists\n\tif lp.chargeMeter == nil {\n\t\tif mt, ok := charger.(api.Meter); ok {\n\t\t\tlp.chargeMeter = mt\n\t\t} else {\n\t\t\tmt := &wrapper.ChargeMeter{}\n\t\t\t_ = lp.bus.Subscribe(evChargeCurrent, lp.evChargeCurrentHandler)\n\t\t\t_ = lp.bus.Subscribe(evChargeStop, func() {\n\t\t\t\tmt.SetPower(0)\n\t\t\t})\n\t\t\tlp.chargeMeter = mt\n\t\t}\n\t}\n\n\t// ensure charge rater exists\n\tif rt, ok := charger.(api.ChargeRater); ok {\n\t\tlp.chargeRater = rt\n\t} else {\n\t\trt := wrapper.NewChargeRater(lp.log, lp.chargeMeter)\n\t\t_ = lp.bus.Subscribe(evChargePower, rt.SetChargePower)\n\t\t_ = lp.bus.Subscribe(evChargeStart, rt.StartCharge)\n\t\t_ = lp.bus.Subscribe(evChargeStop, rt.StopCharge)\n\t\tlp.chargeRater = rt\n\t}\n\n\t// ensure charge timer exists\n\tif ct, ok := charger.(api.ChargeTimer); ok {\n\t\tlp.chargeTimer = ct\n\t} else {\n\t\tct := wrapper.NewChargeTimer()\n\t\t_ = lp.bus.Subscribe(evChargeStart, ct.StartCharge)\n\t\t_ = lp.bus.Subscribe(evChargeStop, ct.StopCharge)\n\t\tlp.chargeTimer = ct\n\t}\n}\n\n// notify sends push messages to clients\nfunc (lp *LoadPoint) notify(event string) {\n\tlp.pushChan <- push.Event{Event: event}\n}\n\n// publish sends values to UI and databases\nfunc (lp *LoadPoint) publish(key string, val interface{}) {\n\tlp.uiChan <- util.Param{Key: key, Val: val}\n}\n\n// evChargeStartHandler sends external start event\nfunc (lp *LoadPoint) evChargeStartHandler() {\n\tlp.log.INFO.Println(\"start charging ->\")\n\tlp.notify(evChargeStart)\n}\n\n// evChargeStopHandler sends external stop event\nfunc (lp *LoadPoint) evChargeStopHandler() {\n\tlp.log.INFO.Println(\"stop charging <-\")\n\tlp.chargedEnergy += lp.deltaChargedEnergy\n\tlp.notify(evChargeStop)\n}\n\n// evVehicleConnectHandler sends external start event\nfunc (lp *LoadPoint) evVehicleConnectHandler() {\n\tlp.log.INFO.Printf(\"car connected\")\n\n\t// energy\n\tlp.chargedEnergy = 0\n\tlp.publish(\"chargedEnergy\", 0)\n\n\t// duration\n\tlp.connectedTime = lp.clock.Now()\n\tlp.publish(\"connectedDuration\", 0)\n\n\tlp.notify(evVehicleConnect)\n}\n\n// evVehicleDisconnectHandler sends external start event\nfunc (lp *LoadPoint) evVehicleDisconnectHandler() {\n\tlp.log.INFO.Println(\"car disconnected\")\n\n\t// energy and duration\n\tlp.publish(\"chargedEnergy\", lp.chargedEnergy)\n\tlp.publish(\"connectedDuration\", lp.clock.Since(lp.connectedTime))\n\n\tlp.notify(evVehicleDisconnect)\n\n\t// set default mode on disconnect\n\tif lp.OnDisconnect.Mode != \"\" {\n\t\tlp.SetMode(lp.OnDisconnect.Mode)\n\t}\n\tif lp.OnDisconnect.TargetSoC != 0 {\n\t\tlp.SetTargetSoC(lp.OnDisconnect.TargetSoC)\n\t}\n}\n\n// evChargeCurrentHandler updates the dummy charge meter's charge power. This simplifies the main flow\n// where the charge meter can always be treated as present. It assumes that the charge meter cannot consume\n// more than total household consumption. If physical charge meter is present this handler is not used.\nfunc (lp *LoadPoint) evChargeCurrentHandler(current int64) {\n\tpower := float64(current*lp.Phases) * Voltage\n\n\tif !lp.handler.Enabled() || lp.status != api.StatusC {\n\t\t// if disabled we cannot be charging\n\t\tpower = 0\n\t}\n\t// TODO\n\t// else if power > 0 && lp.Site.pvMeter != nil {\n\t// \t// limit charge power to generation plus grid consumption/ minus grid delivery\n\t// \t// as the charger cannot have consumed more than that\n\t// \t// consumedPower := consumedPower(lp.pvPower, lp.batteryPower, lp.gridPower)\n\t// \tconsumedPower := lp.Site.consumedPower()\n\t// \tpower = math.Min(power, consumedPower)\n\t// }\n\n\t// handler only called if charge meter was replaced by dummy\n\tlp.chargeMeter.(*wrapper.ChargeMeter).SetPower(power)\n\n\t// expose for UI\n\tlp.publish(\"chargeCurrent\", current)\n}\n\n// Name returns the human-readable loadpoint title\nfunc (lp *LoadPoint) Name() string {\n\treturn lp.Title\n}\n\n// Prepare loadpoint configuration by adding missing helper elements\nfunc (lp *LoadPoint) Prepare(uiChan chan<- util.Param, pushChan chan<- push.Event, lpChan chan<- *LoadPoint) {\n\tlp.uiChan = uiChan\n\tlp.pushChan = pushChan\n\tlp.lpChan = lpChan\n\n\t// event handlers\n\t_ = lp.bus.Subscribe(evChargeStart, lp.evChargeStartHandler)\n\t_ = lp.bus.Subscribe(evChargeStop, lp.evChargeStopHandler)\n\t_ = lp.bus.Subscribe(evVehicleConnect, lp.evVehicleConnectHandler)\n\t_ = lp.bus.Subscribe(evVehicleDisconnect, lp.evVehicleDisconnectHandler)\n\n\t// publish initial values\n\tlp.Lock()\n\tlp.publish(\"mode\", lp.Mode)\n\tlp.publish(\"targetSoC\", lp.TargetSoC)\n\tlp.Unlock()\n\n\t// prepare charger status\n\tlp.handler.Prepare()\n}\n\n// connected returns the EVs connection state\nfunc (lp *LoadPoint) connected() bool {\n\treturn lp.status == api.StatusB || lp.status == api.StatusC\n}\n\n// targetSocReached checks if targetSoC configured and reached\nfunc (lp *LoadPoint) targetSocReached(socCharge, targetSoC float64) bool {\n\t// check for vehicle != nil is not necessary as socCharge would be zero then\n\treturn targetSoC > 0 && targetSoC < 100 && socCharge >= targetSoC\n}\n\n// updateChargerStatus updates car status and detects car connected/disconnected events\nfunc (lp *LoadPoint) updateChargerStatus() error {\n\tstatus, err := lp.handler.Status()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tlp.log.DEBUG.Printf(\"charger status: %s\", status)\n\n\tif prevStatus := lp.status; status != prevStatus {\n\t\tlp.status = status\n\n\t\t// changed from A - connected\n\t\tif prevStatus == api.StatusA {\n\t\t\tlp.bus.Publish(evVehicleConnect)\n\t\t}\n\n\t\t// changed to C - start/stop charging cycle - handle before disconnect to update energy\n\t\tif lp.charging = status == api.StatusC; lp.charging {\n\t\t\tlp.bus.Publish(evChargeStart)\n\t\t} else if prevStatus == api.StatusC {\n\t\t\tlp.bus.Publish(evChargeStop)\n\t\t}\n\n\t\t// changed to A - disconnected\n\t\tif status == api.StatusA {\n\t\t\tlp.bus.Publish(evVehicleDisconnect)\n\t\t}\n\n\t\t// update whenever there is a state change\n\t\tlp.bus.Publish(evChargeCurrent, lp.handler.TargetCurrent())\n\t}\n\n\treturn nil\n}\n\n// detectPhases uses MeterCurrent interface to count phases with current >=1A\nfunc (lp *LoadPoint) detectPhases() {\n\tif phaseMeter, ok := lp.chargeMeter.(api.MeterCurrent); ok {\n\t\ti1, i2, i3, err := phaseMeter.Currents()\n\t\tif err != nil {\n\t\t\tlp.log.ERROR.Printf(\"charge meter error: %v\", err)\n\t\t\treturn\n\t\t}\n\n\t\tvar phases int64\n\t\tfor _, i := range []float64{i1, i2, i3} {\n\t\t\tif i >= minActiveCurrent {\n\t\t\t\tphases++\n\t\t\t}\n\t\t}\n\n\t\tif phases > 0 {\n\t\t\tlp.Phases = min(phases, lp.Phases)\n\t\t\tlp.log.TRACE.Printf(\"detected phases: %d (%v)\", lp.Phases, []float64{i1, i2, i3})\n\n\t\t\tlp.publish(\"activePhases\", lp.Phases)\n\t\t}\n\t}\n}\n\n// maxCurrent calculates the maximum target current for PV mode\nfunc (lp *LoadPoint) maxCurrent(mode api.ChargeMode, sitePower float64) int64 {\n\t// calculate target charge current from delta power and actual current\n\teffectiveCurrent := lp.handler.TargetCurrent()\n\tif lp.status != api.StatusC {\n\t\teffectiveCurrent = 0\n\t}\n\tdeltaCurrent := powerToCurrent(-sitePower, lp.Phases)\n\ttargetCurrent := clamp(effectiveCurrent+deltaCurrent, 0, lp.MaxCurrent)\n\n\tlp.log.DEBUG.Printf(\"max charge current: %dA = %dA + %dA (%.0fW @ %dp)\", targetCurrent, effectiveCurrent, deltaCurrent, sitePower, lp.Phases)\n\n\t// in MinPV mode return at least minCurrent\n\tif mode == api.ModeMinPV && targetCurrent < lp.MinCurrent {\n\t\treturn lp.MinCurrent\n\t}\n\n\t// in PV mode disable if not connected and minCurrent not possible\n\tif mode == api.ModePV && lp.status != api.StatusC {\n\t\tlp.pvTimer = time.Time{}\n\n\t\tif targetCurrent < lp.MinCurrent {\n\t\t\treturn 0\n\t\t}\n\n\t\treturn lp.MinCurrent\n\t}\n\n\t// read only once to simplify testing\n\tenabled := lp.handler.Enabled()\n\n\tif mode == api.ModePV && enabled && targetCurrent < lp.MinCurrent {\n\t\t// kick off disable sequence\n\t\tif sitePower >= lp.Disable.Threshold {\n\t\t\tlp.log.DEBUG.Printf(\"site power %.0fW >= disable threshold %.0fW\", sitePower, lp.Disable.Threshold)\n\n\t\t\tif lp.pvTimer.IsZero() {\n\t\t\t\tlp.log.DEBUG.Println(\"start pv disable timer\")\n\t\t\t\tlp.pvTimer = lp.clock.Now()\n\t\t\t}\n\n\t\t\tif lp.clock.Since(lp.pvTimer) >= lp.Disable.Delay {\n\t\t\t\tlp.log.DEBUG.Println(\"pv disable timer elapsed\")\n\t\t\t\treturn 0\n\t\t\t}\n\t\t} else {\n\t\t\t// reset timer\n\t\t\tlp.pvTimer = lp.clock.Now()\n\t\t}\n\n\t\treturn lp.MinCurrent\n\t}\n\n\tif mode == api.ModePV && !enabled {\n\t\t// kick off enable sequence\n\t\tif targetCurrent >= lp.MinCurrent ||\n\t\t\t(lp.Enable.Threshold != 0 && sitePower <= lp.Enable.Threshold) {\n\t\t\tlp.log.DEBUG.Printf(\"site power %.0fW < enable threshold %.0fW\", sitePower, lp.Enable.Threshold)\n\n\t\t\tif lp.pvTimer.IsZero() {\n\t\t\t\tlp.log.DEBUG.Println(\"start pv enable timer\")\n\t\t\t\tlp.pvTimer = lp.clock.Now()\n\t\t\t}\n\n\t\t\tif lp.clock.Since(lp.pvTimer) >= lp.Enable.Delay {\n\t\t\t\tlp.log.DEBUG.Println(\"pv enable timer elapsed\")\n\t\t\t\treturn lp.MinCurrent\n\t\t\t}\n\t\t} else {\n\t\t\t// reset timer\n\t\t\tlp.pvTimer = lp.clock.Now()\n\t\t}\n\n\t\treturn 0\n\t}\n\n\t// reset timer to disabled state\n\tlp.log.DEBUG.Printf(\"pv timer reset\")\n\tlp.pvTimer = time.Time{}\n\n\treturn targetCurrent\n}\n\n// updateChargeMete updates and publishes single meter\nfunc (lp *LoadPoint) updateChargeMeter() {\n\terr := retry.Do(func() error {\n\t\tvalue, err := lp.chargeMeter.CurrentPower()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tlp.chargePower = value // update value if no error\n\t\tlp.log.DEBUG.Printf(\"charge power: %.0fW\", value)\n\t\tlp.publish(\"chargePower\", value)\n\n\t\treturn nil\n\t}, retryOptions...)\n\n\tif err != nil {\n\t\terr = errors.Wrapf(err, \"updating charge meter\")\n\t\tlp.log.ERROR.Printf(\"%v\", err)\n\t}\n}\n\n// publish charged energy and duration\nfunc (lp *LoadPoint) publishChargeProgress() {\n\tif f, err := lp.chargeRater.ChargedEnergy(); err == nil {\n\t\tlp.deltaChargedEnergy = 1e3 * f // convert to Wh\n\t} else {\n\t\tlp.log.ERROR.Printf(\"charge rater error: %v\", err)\n\t}\n\n\tif d, err := lp.chargeTimer.ChargingTime(); err == nil {\n\t\tlp.chargeDuration = d.Round(time.Second)\n\t} else {\n\t\tlp.log.ERROR.Printf(\"charge timer error: %v\", err)\n\t}\n\n\tlp.publish(\"chargedEnergy\", lp.chargedEnergy+lp.deltaChargedEnergy)\n\tlp.publish(\"chargeDuration\", lp.chargeDuration)\n}\n\n// remainingChargeDuration returns the remaining charge time\nfunc (lp *LoadPoint) remainingChargeDuration(chargePercent float64) time.Duration {\n\tif !lp.charging {\n\t\treturn -1\n\t}\n\n\tif lp.chargePower > 0 && lp.vehicle != nil {\n\t\tchargePercent = chargePercent / 100.0\n\t\ttargetPercent := float64(lp.TargetSoC) / 100\n\n\t\tif chargePercent >= targetPercent {\n\t\t\treturn 0\n\t\t}\n\n\t\twhTotal := float64(lp.vehicle.Capacity()) * 1e3\n\t\twhRemaining := (targetPercent - chargePercent) * whTotal\n\t\treturn time.Duration(float64(time.Hour) * whRemaining / lp.chargePower).Round(time.Second)\n\t}\n\n\treturn -1\n}\n\n// publish state of charge and remaining charge duration\nfunc (lp *LoadPoint) publishSoC() {\n\tif lp.vehicle == nil {\n\t\treturn\n\t}\n\n\tif lp.SoC.AlwaysUpdate || lp.connected() {\n\t\tf, err := lp.vehicle.ChargeState()\n\t\tif err == nil {\n\t\t\tlp.socCharge = f\n\t\t\tlp.log.DEBUG.Printf(\"vehicle soc: %.0f%%\", lp.socCharge)\n\t\t\tlp.publish(\"socCharge\", lp.socCharge)\n\t\t\tlp.publish(\"chargeEstimate\", lp.remainingChargeDuration(f))\n\t\t\treturn\n\t\t}\n\t\tlp.log.ERROR.Printf(\"vehicle error: %v\", err)\n\t}\n\n\tlp.publish(\"socCharge\", -1)\n\tlp.publish(\"chargeEstimate\", -1)\n}\n\n// Update is the main control function. It reevaluates meters and charger state\nfunc (lp *LoadPoint) Update(sitePower float64) {\n\tmode := lp.GetMode()\n\tlp.publish(\"mode\", string(mode))\n\n\t// read and publish meters first\n\tlp.updateChargeMeter()\n\n\t// update ChargeRater here to make sure initial meter update is caught\n\tlp.bus.Publish(evChargeCurrent, lp.handler.TargetCurrent())\n\tlp.bus.Publish(evChargePower, lp.chargePower)\n\n\t// update progress and soc before status is updated\n\tlp.publishChargeProgress()\n\tlp.publishSoC()\n\n\t// read and publish status\n\tif err := lp.updateChargerStatus(); err != nil {\n\t\tlp.log.ERROR.Printf(\"charge controller error: %v\", err)\n\t\treturn\n\t}\n\n\tlp.publish(\"connected\", lp.connected())\n\tlp.publish(\"charging\", lp.charging)\n\n\t// sync settings with charger\n\tif lp.status != api.StatusA {\n\t\tlp.handler.SyncEnabled()\n\t}\n\n\t// phase detection - run only when actually charging\n\tif lp.charging {\n\t\tlp.detectPhases()\n\t}\n\n\t// check if car connected and ready for charging\n\tvar err error\n\n\t// execute loading strategy\n\tswitch {\n\tcase !lp.connected():\n\t\t// always disable charger if not connected\n\t\t// https://github.com/andig/evcc/issues/105\n\t\terr = lp.handler.Ramp(0)\n\n\tcase lp.targetSocReached(lp.socCharge, float64(lp.TargetSoC)):\n\t\terr = lp.handler.Ramp(0)\n\n\tcase mode == api.ModeOff:\n\t\terr = lp.handler.Ramp(0, true)\n\n\tcase mode == api.ModeNow:\n\t\terr = lp.handler.Ramp(lp.MaxCurrent, true)\n\n\tcase mode == api.ModeMinPV || mode == api.ModePV:\n\t\ttargetCurrent := lp.maxCurrent(mode, sitePower)\n\t\tlp.log.DEBUG.Printf(\"target charge current: %dA\", targetCurrent)\n\n\t\terr = lp.handler.Ramp(targetCurrent)\n\t}\n\n\tif err != nil {\n\t\tlp.log.ERROR.Println(err)\n\t}\n}\n"}}
  726.  
  727.  
  728. [Trace - 08:20:47.792 AM] Sending request 'textDocument/documentLink - (23)'.
  729. Params: {"textDocument":{"uri":"file:///Users/andig/htdocs/evcc/core/loadpoint.go"}}
  730.  
  731.  
  732. [Trace - 08:20:47.792 AM] Sending request 'textDocument/codeAction - (24)'.
  733. Params: {"textDocument":{"uri":"file:///Users/andig/htdocs/evcc/core/loadpoint.go"},"range":{"start":{"line":0,"character":0},"end":{"line":0,"character":0}},"context":{"diagnostics":[]}}
  734.  
  735.  
  736. [Trace - 08:20:47.792 AM] Sending request 'textDocument/documentSymbol - (25)'.
  737. Params: {"textDocument":{"uri":"file:///Users/andig/htdocs/evcc/core/loadpoint.go"}}
  738.  
  739.  
  740. [Trace - 08:20:47.807 AM] Received response 'textDocument/documentLink - (23)' in 14ms.
  741. Result: [{"range":{"start":{"line":3,"character":2},"end":{"line":3,"character":6}},"target":"https://pkg.go.dev/sync"},{"range":{"start":{"line":4,"character":2},"end":{"line":4,"character":6}},"target":"https://pkg.go.dev/time"},{"range":{"start":{"line":6,"character":2},"end":{"line":6,"character":27}},"target":"https://pkg.go.dev/github.com/andig/evcc/api"},{"range":{"start":{"line":7,"character":2},"end":{"line":7,"character":36}},"target":"https://pkg.go.dev/github.com/andig/evcc/core/wrapper"},{"range":{"start":{"line":8,"character":2},"end":{"line":8,"character":28}},"target":"https://pkg.go.dev/github.com/andig/evcc/push"},{"range":{"start":{"line":9,"character":2},"end":{"line":9,"character":28}},"target":"https://pkg.go.dev/github.com/andig/evcc/util"},{"range":{"start":{"line":10,"character":2},"end":{"line":10,"character":23}},"target":"https://pkg.go.dev/github.com/pkg/errors@v0.9.1"},{"range":{"start":{"line":12,"character":8},"end":{"line":12,"character":38}},"target":"https://pkg.go.dev/github.com/asaskevich/EventBus@v0.0.0-20200428142821-4fc0642a29f3"},{"range":{"start":{"line":13,"character":2},"end":{"line":13,"character":27}},"target":"https://pkg.go.dev/github.com/avast/retry-go@v2.6.0+incompatible"},{"range":{"start":{"line":14,"character":2},"end":{"line":14,"character":30}},"target":"https://pkg.go.dev/github.com/benbjohnson/clock@v1.0.3"},{"range":{"start":{"line":305,"character":25},"end":{"line":305,"character":32}},"target":"https://lp.Site"},{"range":{"start":{"line":309,"character":22},"end":{"line":309,"character":29}},"target":"https://lp.Site"},{"range":{"start":{"line":627,"character":5},"end":{"line":627,"character":45}},"target":"https://github.com/andig/evcc/issues/105"}]
  742.  
  743.  
  744. [Trace - 08:20:47.812 AM] Received response 'textDocument/codeAction - (24)' in 19ms.
  745. Result: null
  746.  
  747.  
  748. [Trace - 08:20:47.813 AM] Received response 'textDocument/documentSymbol - (25)' in 20ms.
  749. Result: [{"name":"evChargeStart","detail":"untyped string","kind":14,"range":{"start":{"line":17,"character":0},"end":{"line":26,"character":1}},"selectionRange":{"start":{"line":18,"character":1},"end":{"line":18,"character":14}}},{"name":"evChargeStop","detail":"untyped string","kind":14,"range":{"start":{"line":17,"character":0},"end":{"line":26,"character":1}},"selectionRange":{"start":{"line":19,"character":1},"end":{"line":19,"character":13}}},{"name":"evChargeCurrent","detail":"untyped string","kind":14,"range":{"start":{"line":17,"character":0},"end":{"line":26,"character":1}},"selectionRange":{"start":{"line":20,"character":1},"end":{"line":20,"character":16}}},{"name":"evChargePower","detail":"untyped string","kind":14,"range":{"start":{"line":17,"character":0},"end":{"line":26,"character":1}},"selectionRange":{"start":{"line":21,"character":1},"end":{"line":21,"character":14}}},{"name":"evVehicleConnect","detail":"untyped string","kind":14,"range":{"start":{"line":17,"character":0},"end":{"line":26,"character":1}},"selectionRange":{"start":{"line":22,"character":1},"end":{"line":22,"character":17}}},{"name":"evVehicleDisconnect","detail":"untyped string","kind":14,"range":{"start":{"line":17,"character":0},"end":{"line":26,"character":1}},"selectionRange":{"start":{"line":23,"character":1},"end":{"line":23,"character":20}}},{"name":"minActiveCurrent","detail":"untyped int","kind":14,"range":{"start":{"line":17,"character":0},"end":{"line":26,"character":1}},"selectionRange":{"start":{"line":25,"character":1},"end":{"line":25,"character":17}}},{"name":"ThresholdConfig","detail":"struct{...}","kind":23,"range":{"start":{"line":29,"character":5},"end":{"line":32,"character":1}},"selectionRange":{"start":{"line":29,"character":5},"end":{"line":29,"character":20}},"children":[{"name":"Delay","detail":"int64","kind":8,"range":{"start":{"line":30,"character":1},"end":{"line":30,"character":24}},"selectionRange":{"start":{"line":30,"character":1},"end":{"line":30,"character":6}}},{"name":"Threshold","detail":"float64","kind":8,"range":{"start":{"line":31,"character":1},"end":{"line":31,"character":18}},"selectionRange":{"start":{"line":31,"character":1},"end":{"line":31,"character":10}}}]},{"name":"LoadPoint","detail":"struct{...}","kind":23,"range":{"start":{"line":36,"character":5},"end":{"line":86,"character":1}},"selectionRange":{"start":{"line":36,"character":5},"end":{"line":36,"character":14}},"children":[{"name":"clock","detail":"interface{...}","kind":8,"range":{"start":{"line":37,"character":1},"end":{"line":37,"character":21}},"selectionRange":{"start":{"line":37,"character":1},"end":{"line":37,"character":6}}},{"name":"bus","detail":"interface{...}","kind":8,"range":{"start":{"line":38,"character":1},"end":{"line":38,"character":19}},"selectionRange":{"start":{"line":38,"character":1},"end":{"line":38,"character":4}}},{"name":"pushChan","detail":"chan\u003c- push.Event","kind":8,"range":{"start":{"line":39,"character":1},"end":{"line":39,"character":27}},"selectionRange":{"start":{"line":39,"character":1},"end":{"line":39,"character":9}}},{"name":"uiChan","detail":"chan\u003c- util.Param","kind":8,"range":{"start":{"line":40,"character":1},"end":{"line":40,"character":27}},"selectionRange":{"start":{"line":40,"character":1},"end":{"line":40,"character":7}}},{"name":"lpChan","detail":"chan\u003c- *LoadPoint","kind":8,"range":{"start":{"line":41,"character":1},"end":{"line":41,"character":27}},"selectionRange":{"start":{"line":41,"character":1},"end":{"line":41,"character":7}}},{"name":"log","detail":"*util.Logger","kind":8,"range":{"start":{"line":42,"character":1},"end":{"line":42,"character":22}},"selectionRange":{"start":{"line":42,"character":1},"end":{"line":42,"character":4}}},{"name":"Mutex","detail":"struct{...}","kind":8,"range":{"start":{"line":45,"character":1},"end":{"line":45,"character":11}},"selectionRange":{"start":{"line":45,"character":1},"end":{"line":45,"character":11}}},{"name":"Mode","detail":"string","kind":8,"range":{"start":{"line":46,"character":1},"end":{"line":46,"character":48}},"selectionRange":{"start":{"line":46,"character":1},"end":{"line":46,"character":5}}},{"name":"TargetSoC","detail":"int","kind":8,"range":{"start":{"line":47,"character":1},"end":{"line":47,"character":53}},"selectionRange":{"start":{"line":47,"character":1},"end":{"line":47,"character":10}}},{"name":"Title","detail":"string","kind":8,"range":{"start":{"line":49,"character":1},"end":{"line":49,"character":41}},"selectionRange":{"start":{"line":49,"character":1},"end":{"line":49,"character":6}}},{"name":"Phases","detail":"int64","kind":8,"range":{"start":{"line":50,"character":1},"end":{"line":50,"character":42}},"selectionRange":{"start":{"line":50,"character":1},"end":{"line":50,"character":7}}},{"name":"ChargerRef","detail":"string","kind":8,"range":{"start":{"line":51,"character":1},"end":{"line":51,"character":43}},"selectionRange":{"start":{"line":51,"character":1},"end":{"line":51,"character":11}}},{"name":"VehicleRef","detail":"string","kind":8,"range":{"start":{"line":52,"character":1},"end":{"line":52,"character":43}},"selectionRange":{"start":{"line":52,"character":1},"end":{"line":52,"character":11}}},{"name":"Meters","detail":"struct{...}","kind":8,"range":{"start":{"line":53,"character":1},"end":{"line":55,"character":2}},"selectionRange":{"start":{"line":53,"character":1},"end":{"line":53,"character":7}}},{"name":"SoC","detail":"struct{...}","kind":8,"range":{"start":{"line":56,"character":1},"end":{"line":59,"character":2}},"selectionRange":{"start":{"line":56,"character":1},"end":{"line":56,"character":4}}},{"name":"OnDisconnect","detail":"struct{...}","kind":8,"range":{"start":{"line":60,"character":1},"end":{"line":63,"character":2}},"selectionRange":{"start":{"line":60,"character":1},"end":{"line":60,"character":13}}},{"name":"Enable","detail":"struct{...}","kind":8,"range":{"start":{"line":64,"character":1},"end":{"line":64,"character":32}},"selectionRange":{"start":{"line":64,"character":1},"end":{"line":64,"character":7}}},{"name":"Disable","detail":"struct{...}","kind":8,"range":{"start":{"line":64,"character":1},"end":{"line":64,"character":32}},"selectionRange":{"start":{"line":64,"character":9},"end":{"line":64,"character":16}}},{"name":"handler","detail":"interface{...}","kind":8,"range":{"start":{"line":66,"character":1},"end":{"line":66,"character":22}},"selectionRange":{"start":{"line":66,"character":1},"end":{"line":66,"character":8}}},{"name":"HandlerConfig","detail":"struct{...}","kind":8,"range":{"start":{"line":67,"character":1},"end":{"line":67,"character":39}},"selectionRange":{"start":{"line":67,"character":1},"end":{"line":67,"character":14}}},{"name":"chargeTimer","detail":"interface{...}","kind":8,"range":{"start":{"line":69,"character":1},"end":{"line":69,"character":28}},"selectionRange":{"start":{"line":69,"character":1},"end":{"line":69,"character":12}}},{"name":"chargeRater","detail":"interface{...}","kind":8,"range":{"start":{"line":70,"character":1},"end":{"line":70,"character":28}},"selectionRange":{"start":{"line":70,"character":1},"end":{"line":70,"character":12}}},{"name":"chargeMeter","detail":"interface{...}","kind":8,"range":{"start":{"line":72,"character":1},"end":{"line":72,"character":22}},"selectionRange":{"start":{"line":72,"character":1},"end":{"line":72,"character":12}}},{"name":"vehicle","detail":"interface{...}","kind":8,"range":{"start":{"line":73,"character":1},"end":{"line":73,"character":24}},"selectionRange":{"start":{"line":73,"character":1},"end":{"line":73,"character":8}}},{"name":"status","detail":"string","kind":8,"range":{"start":{"line":76,"character":1},"end":{"line":76,"character":31}},"selectionRange":{"start":{"line":76,"character":1},"end":{"line":76,"character":7}}},{"name":"charging","detail":"bool","kind":8,"range":{"start":{"line":77,"character":1},"end":{"line":77,"character":19}},"selectionRange":{"start":{"line":77,"character":1},"end":{"line":77,"character":9}}},{"name":"chargePower","detail":"float64","kind":8,"range":{"start":{"line":78,"character":1},"end":{"line":78,"character":22}},"selectionRange":{"start":{"line":78,"character":1},"end":{"line":78,"character":12}}},{"name":"connectedTime","detail":"struct{...}","kind":8,"range":{"start":{"line":79,"character":1},"end":{"line":79,"character":24}},"selectionRange":{"start":{"line":79,"character":1},"end":{"line":79,"character":14}}},{"name":"pvTimer","detail":"struct{...}","kind":8,"range":{"start":{"line":80,"character":1},"end":{"line":80,"character":24}},"selectionRange":{"start":{"line":80,"character":1},"end":{"line":80,"character":8}}},{"name":"socCharge","detail":"float64","kind":8,"range":{"start":{"line":82,"character":1},"end":{"line":82,"character":27}},"selectionRange":{"start":{"line":82,"character":1},"end":{"line":82,"character":10}}},{"name":"chargedEnergy","detail":"float64","kind":8,"range":{"start":{"line":83,"character":1},"end":{"line":83,"character":27}},"selectionRange":{"start":{"line":83,"character":1},"end":{"line":83,"character":14}}},{"name":"deltaChargedEnergy","detail":"float64","kind":8,"range":{"start":{"line":84,"character":1},"end":{"line":84,"character":27}},"selectionRange":{"start":{"line":84,"character":1},"end":{"line":84,"character":19}}},{"name":"chargeDuration","detail":"int64","kind":8,"range":{"start":{"line":85,"character":1},"end":{"line":85,"character":33}},"selectionRange":{"start":{"line":85,"character":1},"end":{"line":85,"character":15}}}]},{"name":"NewLoadPointFromConfig","detail":"(log *util.Logger, cp configProvider, other map[string]interface{})","kind":12,"range":{"start":{"line":89,"character":0},"end":{"line":130,"character":1}},"selectionRange":{"start":{"line":89,"character":5},"end":{"line":89,"character":27}}},{"name":"NewLoadPoint","detail":"(log *util.Logger)","kind":12,"range":{"start":{"line":133,"character":0},"end":{"line":153,"character":1}},"selectionRange":{"start":{"line":133,"character":5},"end":{"line":133,"character":17}}},{"name":"(*LoadPoint).GetMode","detail":"()","kind":6,"range":{"start":{"line":156,"character":0},"end":{"line":160,"character":1}},"selectionRange":{"start":{"line":156,"character":21},"end":{"line":156,"character":28}}},{"name":"(*LoadPoint).SetMode","detail":"(mode api.ChargeMode)","kind":6,"range":{"start":{"line":163,"character":0},"end":{"line":175,"character":1}},"selectionRange":{"start":{"line":163,"character":21},"end":{"line":163,"character":28}}},{"name":"(*LoadPoint).GetTargetSoC","detail":"()","kind":6,"range":{"start":{"line":178,"character":0},"end":{"line":182,"character":1}},"selectionRange":{"start":{"line":178,"character":21},"end":{"line":178,"character":33}}},{"name":"(*LoadPoint).SetTargetSoC","detail":"(targetSoC int)","kind":6,"range":{"start":{"line":185,"character":0},"end":{"line":197,"character":1}},"selectionRange":{"start":{"line":185,"character":21},"end":{"line":185,"character":33}}},{"name":"(*LoadPoint).configureChargerType","detail":"(charger api.Charger)","kind":6,"range":{"start":{"line":200,"character":0},"end":{"line":235,"character":1}},"selectionRange":{"start":{"line":200,"character":21},"end":{"line":200,"character":41}}},{"name":"(*LoadPoint).notify","detail":"(event string)","kind":6,"range":{"start":{"line":238,"character":0},"end":{"line":240,"character":1}},"selectionRange":{"start":{"line":238,"character":21},"end":{"line":238,"character":27}}},{"name":"(*LoadPoint).publish","detail":"(key string, val interface{})","kind":6,"range":{"start":{"line":243,"character":0},"end":{"line":245,"character":1}},"selectionRange":{"start":{"line":243,"character":21},"end":{"line":243,"character":28}}},{"name":"(*LoadPoint).evChargeStartHandler","detail":"()","kind":6,"range":{"start":{"line":248,"character":0},"end":{"line":251,"character":1}},"selectionRange":{"start":{"line":248,"character":21},"end":{"line":248,"character":41}}},{"name":"(*LoadPoint).evChargeStopHandler","detail":"()","kind":6,"range":{"start":{"line":254,"character":0},"end":{"line":258,"character":1}},"selectionRange":{"start":{"line":254,"character":21},"end":{"line":254,"character":40}}},{"name":"(*LoadPoint).evVehicleConnectHandler","detail":"()","kind":6,"range":{"start":{"line":261,"character":0},"end":{"line":273,"character":1}},"selectionRange":{"start":{"line":261,"character":21},"end":{"line":261,"character":44}}},{"name":"(*LoadPoint).evVehicleDisconnectHandler","detail":"()","kind":6,"range":{"start":{"line":276,"character":0},"end":{"line":292,"character":1}},"selectionRange":{"start":{"line":276,"character":21},"end":{"line":276,"character":47}}},{"name":"(*LoadPoint).evChargeCurrentHandler","detail":"(current int64)","kind":6,"range":{"start":{"line":297,"character":0},"end":{"line":318,"character":1}},"selectionRange":{"start":{"line":297,"character":21},"end":{"line":297,"character":43}}},{"name":"(*LoadPoint).Name","detail":"()","kind":6,"range":{"start":{"line":321,"character":0},"end":{"line":323,"character":1}},"selectionRange":{"start":{"line":321,"character":21},"end":{"line":321,"character":25}}},{"name":"(*LoadPoint).Prepare","detail":"(uiChan chan\u003c- util.Param, pushChan chan\u003c- push.Event, lpChan chan\u003c- *LoadPoint)","kind":6,"range":{"start":{"line":326,"character":0},"end":{"line":345,"character":1}},"selectionRange":{"start":{"line":326,"character":21},"end":{"line":326,"character":28}}},{"name":"(*LoadPoint).connected","detail":"()","kind":6,"range":{"start":{"line":348,"character":0},"end":{"line":350,"character":1}},"selectionRange":{"start":{"line":348,"character":21},"end":{"line":348,"character":30}}},{"name":"(*LoadPoint).targetSocReached","detail":"(socCharge float64, targetSoC float64)","kind":6,"range":{"start":{"line":353,"character":0},"end":{"line":356,"character":1}},"selectionRange":{"start":{"line":353,"character":21},"end":{"line":353,"character":37}}},{"name":"(*LoadPoint).updateChargerStatus","detail":"()","kind":6,"range":{"start":{"line":359,"character":0},"end":{"line":392,"character":1}},"selectionRange":{"start":{"line":359,"character":21},"end":{"line":359,"character":40}}},{"name":"(*LoadPoint).detectPhases","detail":"()","kind":6,"range":{"start":{"line":395,"character":0},"end":{"line":417,"character":1}},"selectionRange":{"start":{"line":395,"character":21},"end":{"line":395,"character":33}}},{"name":"(*LoadPoint).maxCurrent","detail":"(mode api.ChargeMode, sitePower float64)","kind":6,"range":{"start":{"line":420,"character":0},"end":{"line":500,"character":1}},"selectionRange":{"start":{"line":420,"character":21},"end":{"line":420,"character":31}}},{"name":"(*LoadPoint).updateChargeMeter","detail":"()","kind":6,"range":{"start":{"line":503,"character":0},"end":{"line":521,"character":1}},"selectionRange":{"start":{"line":503,"character":21},"end":{"line":503,"character":38}}},{"name":"(*LoadPoint).publishChargeProgress","detail":"()","kind":6,"range":{"start":{"line":524,"character":0},"end":{"line":539,"character":1}},"selectionRange":{"start":{"line":524,"character":21},"end":{"line":524,"character":42}}},{"name":"(*LoadPoint).remainingChargeDuration","detail":"(chargePercent float64)","kind":6,"range":{"start":{"line":542,"character":0},"end":{"line":561,"character":1}},"selectionRange":{"start":{"line":542,"character":21},"end":{"line":542,"character":44}}},{"name":"(*LoadPoint).publishSoC","detail":"()","kind":6,"range":{"start":{"line":564,"character":0},"end":{"line":583,"character":1}},"selectionRange":{"start":{"line":564,"character":21},"end":{"line":564,"character":31}}},{"name":"(*LoadPoint).Update","detail":"(sitePower float64)","kind":6,"range":{"start":{"line":586,"character":0},"end":{"line":649,"character":1}},"selectionRange":{"start":{"line":586,"character":21},"end":{"line":586,"character":27}}}]
  750.  
  751.  
  752. [Trace - 08:20:47.852 AM] Received notification 'window/logMessage'.
  753. Params: {"type":3,"message":"2020/08/06 08:20:47 go/packages.Load\n\tsnapshot=2\n\tdirectory=/Users/andig/htdocs/gridx-modbus\n\tquery=[./]\n\tpackages=3\n"}
  754.  
  755.  
  756. [Trace - 08:20:47.853 AM] Received notification 'window/logMessage'.
  757. Params: {"type":1,"message":"2020/08/06 08:20:47 no dep handle: no metadata for github.com/grid-x/serial\n\tpackage=\"github.com/grid-x/serial\"\n"}
  758.  
  759.  
  760. [Trace - 08:20:47.853 AM] Sending request 'textDocument/foldingRange - (26)'.
  761. Params: {"textDocument":{"uri":"file:///Users/andig/htdocs/evcc/core/loadpoint.go"}}
  762.  
  763.  
  764. [Trace - 08:20:47.853 AM] Received notification 'window/logMessage'.
  765. Params: {"type":1,"message":"2020/08/06 08:20:47 no dep handle: no metadata for github.com/grid-x/serial\n\tpackage=\"github.com/grid-x/serial\"\n"}
  766.  
  767.  
  768. [Info - 8:20:47 AM] 2020/08/06 08:20:47 go/packages.Load
  769. snapshot=2
  770. directory=/Users/andig/htdocs/gridx-modbus
  771. query=[./]
  772. packages=3
  773.  
  774. [Error - 8:20:47 AM] 2020/08/06 08:20:47 no dep handle: no metadata for github.com/grid-x/serial
  775. package="github.com/grid-x/serial"
  776.  
  777. [Error - 8:20:47 AM] 2020/08/06 08:20:47 no dep handle: no metadata for github.com/grid-x/serial
  778. package="github.com/grid-x/serial"
  779.  
  780. [Trace - 08:20:47.858 AM] Received response 'textDocument/foldingRange - (26)' in 5ms.
  781. Result: [{"startLine":2,"startCharacter":8,"endLine":14,"endCharacter":31,"kind":"imports"},{"startLine":17,"startCharacter":7,"endLine":25,"endCharacter":21},{"startLine":29,"startCharacter":29,"endLine":31,"endCharacter":18},{"startLine":34,"startCharacter":63,"endLine":35,"endCharacter":36,"kind":"comment"},{"startLine":36,"startCharacter":23,"endLine":85,"endCharacter":33},{"startLine":53,"startCharacter":20,"endLine":54,"endCharacter":47},{"startLine":56,"startCharacter":13,"endLine":58,"endCharacter":44},{"startLine":60,"startCharacter":22,"endLine":62,"endCharacter":53},{"startLine":89,"startCharacter":107,"endLine":129,"endCharacter":10},{"startLine":91,"startCharacter":53,"endLine":92,"endCharacter":22},{"startLine":100,"startCharacter":28,"endLine":101,"endCharacter":52},{"startLine":104,"startCharacter":36,"endLine":105,"endCharacter":53},{"startLine":107,"startCharacter":25,"endLine":108,"endCharacter":40},{"startLine":111,"startCharacter":25,"endLine":112,"endCharacter":39},{"startLine":117,"startCharacter":48,"endLine":118,"endCharacter":137},{"startLine":121,"startCharacter":30,"endLine":126,"endCharacter":33},{"startLine":133,"startCharacter":48,"endLine":152,"endCharacter":10},{"startLine":137,"startCharacter":18,"endLine":149,"endCharacter":3},{"startLine":144,"startCharacter":31,"endLine":148,"endCharacter":33},{"startLine":156,"startCharacter":47,"endLine":159,"endCharacter":15},{"startLine":163,"startCharacter":51,"endLine":174,"endCharacter":2},{"startLine":170,"startCharacter":21,"endLine":173,"endCharacter":17},{"startLine":178,"startCharacter":41,"endLine":181,"endCharacter":20},{"startLine":185,"startCharacter":50,"endLine":196,"endCharacter":2},{"startLine":192,"startCharacter":31,"endLine":195,"endCharacter":17},{"startLine":200,"startCharacter":64,"endLine":234,"endCharacter":2},{"startLine":202,"startCharacter":27,"endLine":212,"endCharacter":3},{"startLine":203,"startCharacter":40,"endLine":204,"endCharacter":22},{"startLine":205,"startCharacter":10,"endLine":211,"endCharacter":22},{"startLine":208,"startCharacter":46,"endLine":209,"endCharacter":18},{"startLine":216,"startCharacter":45,"endLine":217,"endCharacter":21},{"startLine":218,"startCharacter":9,"endLine":223,"endCharacter":21},{"startLine":227,"startCharacter":45,"endLine":228,"endCharacter":21},{"startLine":229,"startCharacter":9,"endLine":233,"endCharacter":21},{"startLine":238,"startCharacter":43,"endLine":239,"endCharacter":40},{"startLine":243,"startCharacter":59,"endLine":244,"endCharacter":44},{"startLine":248,"startCharacter":45,"endLine":250,"endCharacter":25},{"startLine":254,"startCharacter":44,"endLine":257,"endCharacter":24},{"startLine":261,"startCharacter":48,"endLine":272,"endCharacter":28},{"startLine":276,"startCharacter":51,"endLine":291,"endCharacter":2},{"startLine":286,"startCharacter":32,"endLine":287,"endCharacter":34},{"startLine":289,"startCharacter":36,"endLine":290,"endCharacter":44},{"startLine":294,"startCharacter":102,"endLine":296,"endCharacter":103,"kind":"comment"},{"startLine":297,"startCharacter":60,"endLine":317,"endCharacter":37},{"startLine":300,"startCharacter":55,"endLine":302,"endCharacter":11},{"startLine":304,"startCharacter":8,"endLine":311,"endCharacter":5,"kind":"comment"},{"startLine":321,"startCharacter":36,"endLine":322,"endCharacter":16},{"startLine":326,"startCharacter":110,"endLine":344,"endCharacter":21},{"startLine":348,"startCharacter":39,"endLine":349,"endCharacter":60},{"startLine":353,"startCharacter":74,"endLine":355,"endCharacter":66},{"startLine":359,"startCharacter":50,"endLine":391,"endCharacter":11},{"startLine":361,"startCharacter":16,"endLine":362,"endCharacter":12},{"startLine":367,"startCharacter":51,"endLine":388,"endCharacter":61},{"startLine":371,"startCharacter":32,"endLine":372,"endCharacter":35},{"startLine":376,"startCharacter":55,"endLine":377,"endCharacter":32},{"startLine":378,"startCharacter":39,"endLine":379,"endCharacter":31},{"startLine":383,"startCharacter":28,"endLine":384,"endCharacter":38},{"startLine":395,"startCharacter":37,"endLine":416,"endCharacter":2},{"startLine":396,"startCharacter":61,"endLine":415,"endCharacter":3},{"startLine":398,"startCharacter":17,"endLine":400,"endCharacter":9},{"startLine":404,"startCharacter":43,"endLine":407,"endCharacter":4},{"startLine":405,"startCharacter":29,"endLine":406,"endCharacter":12},{"startLine":410,"startCharacter":17,"endLine":414,"endCharacter":40},{"startLine":420,"startCharacter":79,"endLine":499,"endCharacter":21},{"startLine":423,"startCharacter":30,"endLine":424,"endCharacter":22},{"startLine":432,"startCharacter":60,"endLine":433,"endCharacter":22},{"startLine":437,"startCharacter":52,"endLine":444,"endCharacter":22},{"startLine":440,"startCharacter":36,"endLine":441,"endCharacter":11},{"startLine":450,"startCharacter":68,"endLine":469,"endCharacter":22},{"startLine":452,"startCharacter":40,"endLine":463,"endCharacter":4},{"startLine":455,"startCharacter":27,"endLine":457,"endCharacter":31},{"startLine":460,"startCharacter":54,"endLine":462,"endCharacter":12},{"startLine":464,"startCharacter":10,"endLine":466,"endCharacter":30},{"startLine":472,"startCharacter":36,"endLine":492,"endCharacter":10},{"startLine":475,"startCharacter":67,"endLine":486,"endCharacter":4},{"startLine":478,"startCharacter":27,"endLine":480,"endCharacter":31},{"startLine":483,"startCharacter":53,"endLine":485,"endCharacter":24},{"startLine":487,"startCharacter":10,"endLine":489,"endCharacter":30},{"startLine":503,"startCharacter":42,"endLine":520,"endCharacter":2},{"startLine":504,"startCharacter":31,"endLine":514,"endCharacter":12},{"startLine":506,"startCharacter":17,"endLine":507,"endCharacter":13},{"startLine":517,"startCharacter":16,"endLine":519,"endCharacter":32},{"startLine":524,"startCharacter":46,"endLine":538,"endCharacter":48},{"startLine":525,"startCharacter":58,"endLine":526,"endCharacter":33},{"startLine":527,"startCharacter":9,"endLine":528,"endCharacter":52},{"startLine":531,"startCharacter":57,"endLine":532,"endCharacter":42},{"startLine":533,"startCharacter":9,"endLine":534,"endCharacter":52},{"startLine":542,"startCharacter":83,"endLine":560,"endCharacter":10},{"startLine":543,"startCharacter":18,"endLine":544,"endCharacter":11},{"startLine":547,"startCharacter":45,"endLine":557,"endCharacter":92},{"startLine":551,"startCharacter":37,"endLine":552,"endCharacter":11},{"startLine":564,"startCharacter":35,"endLine":582,"endCharacter":33},{"startLine":565,"startCharacter":23,"endLine":566,"endCharacter":8},{"startLine":569,"startCharacter":43,"endLine":578,"endCharacter":47},{"startLine":571,"startCharacter":17,"endLine":576,"endCharacter":9},{"startLine":586,"startCharacter":48,"endLine":648,"endCharacter":2},{"startLine":602,"startCharacter":49,"endLine":604,"endCharacter":8},{"startLine":611,"startCharacter":30,"endLine":612,"endCharacter":26},{"startLine":616,"startCharacter":17,"endLine":617,"endCharacter":19},{"startLine":624,"startCharacter":9,"endLine":643,"endCharacter":38},{"startLine":625,"startCharacter":22,"endLine":628,"endCharacter":26},{"startLine":626,"startCharacter":44,"endLine":627,"endCharacter":45,"kind":"comment"},{"startLine":630,"startCharacter":63,"endLine":631,"endCharacter":26},{"startLine":633,"startCharacter":26,"endLine":634,"endCharacter":32},{"startLine":636,"startCharacter":26,"endLine":637,"endCharacter":44},{"startLine":639,"startCharacter":50,"endLine":643,"endCharacter":38},{"startLine":646,"startCharacter":16,"endLine":647,"endCharacter":27}]
  782.  
  783.  
  784. [Trace - 08:20:47.879 AM] Sending request 'textDocument/codeLens - (27)'.
  785. Params: {"textDocument":{"uri":"file:///Users/andig/htdocs/evcc/core/loadpoint.go"}}
  786.  
  787.  
  788. [Trace - 08:20:47.881 AM] Received response 'textDocument/codeLens - (27)' in 2ms.
  789. Result: null
  790.  
  791.  
  792. [Trace - 08:20:50.467 AM] Sending request 'textDocument/hover - (28)'.
  793. Params: {"textDocument":{"uri":"file:///Users/andig/htdocs/evcc/core/loadpoint.go"},"position":{"line":537,"character":8}}
  794.  
  795.  
  796. [Trace - 08:20:50.468 AM] Received response 'textDocument/hover - (28)' in 1ms.
  797. Result: {"contents":{"kind":"markdown","value":"```go\nfunc (*LoadPoint).publish(key string, val interface{})\n```\n\npublish sends values to UI and databases\n"},"range":{"start":{"line":537,"character":4},"end":{"line":537,"character":11}}}
  798.  
  799.  
  800. [Trace - 08:20:52.342 AM] Sending request 'textDocument/hover - (29)'.
  801. Params: {"textDocument":{"uri":"file:///Users/andig/htdocs/evcc/core/loadpoint.go"},"position":{"line":538,"character":43}}
  802.  
  803.  
  804. [Trace - 08:20:52.343 AM] Received response 'textDocument/hover - (29)' in 1ms.
  805. Result: {"contents":{"kind":"markdown","value":"```go\nfield chargeDuration time.Duration\n```\n\nCharge duration\n"},"range":{"start":{"line":538,"character":33},"end":{"line":538,"character":47}}}
  806.  
  807.  
  808. [Trace - 08:21:17.814 AM] Received notification 'window/logMessage'.
  809. Params: {"type":3,"message":"2020/08/06 08:21:17 background imports cache refresh starting\n"}
  810.  
  811.  
  812. [Info - 8:21:17 AM] 2020/08/06 08:21:17 background imports cache refresh starting
  813.  
  814. [Trace - 08:21:33.037 AM] Received notification 'window/logMessage'.
  815. Params: {"type":3,"message":"2020/08/06 08:21:33 background refresh finished after 15.22328943s\n"}
  816.  
  817.  
  818. [Info - 8:21:33 AM] 2020/08/06 08:21:33 background refresh finished after 15.22328943s
  819.  
RAW Paste Data