senec 0.17.2 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: eaa5f023a77fd7232adff21888f19a4f8e5869e9100142ebadd7eebd49b90e7c
4
- data.tar.gz: 8b12f81e7aee5193c66b866eb313e451d199a2e1aff4d5ed135d0e0c435f88f1
3
+ metadata.gz: a6af14cd79b5176290de5c80e492c31a4e0891770b720fd5017b2b830898838b
4
+ data.tar.gz: 59477e8b56dea17973fa2e1e7e05e4266d67172f9be54375c120fdd2bbca885a
5
5
  SHA512:
6
- metadata.gz: 177e65e03d19d3fd4282903155eccd176e8eb3e2224d9fcb89302466f80e55db09a886b12d4086aba11edf9d9d5b07a4d5ba4c379e8813760765e619c8f90d20
7
- data.tar.gz: ada3a35782b06a65bf75ecba3990729348c81fd2ad8ed6957e024b39f67cad735e0ff7113279886495366ec06e30c28e0f58346fa9ff02e20e5debec7a5456a1
6
+ metadata.gz: 19c4f8ae182ef21edaf0e07d62fda3ad45640ac43018c19af26dd125b34987981497f6adade28dcf31e873566fff63f82e5a83639813a1406a8fc0831c81fc8f
7
+ data.tar.gz: 3bac421adcf8eca7f5f07bdf4ef2a4a5deba0515058cb630f9797cf3c0b64c674123685ba4441c7c0404b097961872a0a730d1d1a5165003c217bbd85ee8912d
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2020-2024 Georg Ledermann <georg@ledermann.dev>
3
+ Copyright (c) 2020-2025 Georg Ledermann <georg@ledermann.dev>
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -69,14 +69,43 @@ puts Senec::Cloud::Dashboard[connection].find("123456").data
69
69
  # {"stromerzeugung"=>{"wert"=>0.01, "einheit"=>"W"},
70
70
  # ....
71
71
 
72
- # Get the Technical Data of a specific system (by ID):
72
+ # Dashboard data can be requested in different versions, v1 and v2 are available, v1 is the default.
73
+ # To request the data in version 2, pass the version parameter to the `data` method:
74
+ puts Senec::Cloud::Dashboard[connection].first.data(version: 'v2')
75
+
76
+ # => {
77
+ # 'currently' => {
78
+ # 'powerGenerationInW' => 1.0e-05,
79
+ # 'powerConsumptionInW' => 1350.37,
80
+ # 'gridFeedInInW' => 1.0e-05,
81
+ # 'gridDrawInW' => 1321.26966059603,
82
+ # 'batteryChargeInW' => 1.0e-05,
83
+ # 'batteryDischargeInW' => 11.6411423841,
84
+ # 'batteryLevelInPercent' => 1.0e-05,
85
+ # 'selfSufficiencyInPercent' => 2.16,
86
+ # 'wallboxInW' => 1.0e-05
87
+ # },
88
+ # 'today' => {
89
+ # 'powerGenerationInWh' => 3.90625,
90
+ # 'powerConsumptionInWh' => 9119.14,
91
+ # 'gridFeedInInWh' => 0.0,
92
+ # 'gridDrawInWh' => 9011.71875,
93
+ # 'batteryChargeInWh' => 0.0,
94
+ # 'batteryDischargeInWh' => 107.421875,
95
+ # 'batteryLevelInPercent' => 1.0e-05,
96
+ # 'selfSufficiencyInPercent' => 1.18,
97
+ # 'wallboxInWh' => 0.0
98
+ # },
99
+ # 'timestamp' => '2025-01-11T06:45:09Z',
100
+ # 'electricVehicleConnected' => false
101
+ # }
73
102
 
103
+ # Get the Technical Data of a specific system (by ID):
74
104
  puts Senec::Cloud::TechnicalData[connection].find("123456").data
75
105
 
76
106
  # => {"systemOverview"=>{"systemId"=>123456, "productName"=>"SENEC.Home V3 hybrid duo", ...
77
107
 
78
108
  # Get the Technical Data of first systems (without knowing the ID):
79
-
80
109
  puts Senec::Cloud::TechnicalData[connection].first.data
81
110
 
82
111
  # => {"systemOverview"=>{"systemId"=>123456, "productName"=>"SENEC.Home V3 hybrid duo", ...
@@ -153,7 +182,7 @@ Bug reports and pull requests are welcome on GitHub at https://github.com/solect
153
182
 
154
183
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
155
184
 
156
- Copyright (c) 2020-2024 Georg Ledermann
185
+ Copyright (c) 2020-2025 Georg Ledermann
157
186
 
158
187
  ## Code of Conduct
159
188
 
@@ -7,14 +7,23 @@ require_relative 'connection'
7
7
  # connection = Senec::Cloud::Connection.new(username: '...', password: '...')
8
8
  #
9
9
  # # Get the data of a specific system:
10
- # Dashboard[connection].find('123456')
10
+ # Dashboard[connection].find('123456').data
11
11
  #
12
12
  # # Get the data of the default system:
13
- # Dashboard[connection].first
13
+ # Dashboard[connection].first.data
14
+ #
15
+ # By default, it returns v1 data. To get v2 data, use:
16
+ #
17
+ # Dashboard[connection].find('123456').data(version: 'v2')
18
+ # or
19
+ # Dashboard[connection].first.data(version: 'v2')
14
20
  #
15
21
  module Senec
16
22
  module Cloud
17
23
  class Dashboard
24
+ AVAILABLE_VERSIONS = %w[v1 v2].freeze
25
+ DEFAULT_VERSION = 'v1'.freeze
26
+
18
27
  class Finder
19
28
  def initialize(connection)
20
29
  @connection = connection
@@ -22,7 +31,7 @@ module Senec
22
31
  attr_reader :connection
23
32
 
24
33
  def find(system_id)
25
- Dashboard.new(connection:, system_id:).tap(&:load_data)
34
+ Dashboard.new(connection:, system_id:)
26
35
  end
27
36
 
28
37
  def first
@@ -41,17 +50,18 @@ module Senec
41
50
  @system_id = system_id
42
51
 
43
52
  # Useful for testing only
44
- @data = data
53
+ @data = {
54
+ 'v1' => data,
55
+ 'v2' => data
56
+ }
45
57
  end
46
58
 
47
- def load_data
48
- raise 'Data already present!' if @data
49
-
50
- @system_id ||= connection.default_system_id
51
- @data = fetch_data
59
+ def data(version: DEFAULT_VERSION)
60
+ @data ||= {}
61
+ @data[version] ||= fetch_data(version:)
52
62
  end
53
63
 
54
- attr_reader :system_id, :data
64
+ attr_reader :system_id
55
65
 
56
66
  private
57
67
 
@@ -59,10 +69,11 @@ module Senec
59
69
  @connection.get(path, params:)
60
70
  end
61
71
 
62
- def fetch_data
72
+ def fetch_data(version:)
73
+ raise ArgumentError unless AVAILABLE_VERSIONS.include?(version)
63
74
  return unless system_id
64
75
 
65
- get("/v1/senec/systems/#{system_id}/dashboard")
76
+ get("/#{version}/senec/systems/#{system_id}/dashboard")
66
77
  end
67
78
  end
68
79
  end
data/lib/senec/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Senec
2
- VERSION = '0.17.2'.freeze
2
+ VERSION = '0.18.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: senec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.17.2
4
+ version: 0.18.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Georg Ledermann
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2024-08-23 00:00:00.000000000 Z
10
+ date: 2025-01-11 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: faraday
@@ -60,18 +59,13 @@ extensions: []
60
59
  extra_rdoc_files: []
61
60
  files:
62
61
  - ".env.test"
63
- - ".github/workflows/push.yml"
64
- - ".gitignore"
65
62
  - ".rspec"
66
63
  - ".rubocop.yml"
67
64
  - ".vscode/settings.json"
68
65
  - CODE_OF_CONDUCT.md
69
- - Gemfile
70
66
  - LICENSE
71
67
  - README.md
72
68
  - Rakefile
73
- - bin/console
74
- - bin/setup
75
69
  - lib/senec.rb
76
70
  - lib/senec/cloud/connection.rb
77
71
  - lib/senec/cloud/dashboard.rb
@@ -84,7 +78,6 @@ files:
84
78
  - lib/senec/local/state.rb
85
79
  - lib/senec/local/value.rb
86
80
  - lib/senec/version.rb
87
- - senec.gemspec
88
81
  homepage: https://github.com/solectrus/senec
89
82
  licenses:
90
83
  - MIT
@@ -93,7 +86,6 @@ metadata:
93
86
  source_code_uri: https://github.com/solectrus/senec
94
87
  changelog_uri: https://github.com/solectrus/senec/releases
95
88
  rubygems_mfa_required: 'true'
96
- post_install_message:
97
89
  rdoc_options: []
98
90
  require_paths:
99
91
  - lib
@@ -108,8 +100,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
108
100
  - !ruby/object:Gem::Version
109
101
  version: '0'
110
102
  requirements: []
111
- rubygems_version: 3.5.17
112
- signing_key:
103
+ rubygems_version: 3.6.2
113
104
  specification_version: 4
114
105
  summary: Unofficial Ruby Client for SENEC Home
115
106
  test_files: []
@@ -1,37 +0,0 @@
1
- name: Continuous integration
2
-
3
- on: push
4
-
5
- jobs:
6
- test:
7
- runs-on: ubuntu-latest
8
-
9
- strategy:
10
- fail-fast: false
11
- matrix:
12
- ruby: ['3.2', '3.3']
13
-
14
- env:
15
- CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
16
-
17
- steps:
18
- - name: Checkout the code
19
- uses: actions/checkout@v4
20
-
21
- - name: Set up Ruby
22
- uses: ruby/setup-ruby@v1
23
- with:
24
- bundler-cache: true
25
- ruby-version: ${{ matrix.ruby }}
26
-
27
- - name: Lint with RuboCop
28
- run: bundle exec rubocop
29
-
30
- - name: Run tests
31
- run: bundle exec dotenv -f ".env.test" rspec
32
-
33
- - name: Send test coverage to CodeClimate
34
- uses: paambaati/codeclimate-action@v8
35
- if: ${{ env.CC_TEST_REPORTER_ID }}
36
- with:
37
- coverageCommand: true
data/.gitignore DELETED
@@ -1,13 +0,0 @@
1
- /.bundle/
2
- /.yardoc
3
- /_yardoc/
4
- /coverage/
5
- /doc/
6
- /pkg/
7
- /spec/reports/
8
- /tmp/
9
- .env
10
-
11
- # rspec failure tracking
12
- .rspec_status
13
- Gemfile.lock
data/Gemfile DELETED
@@ -1,43 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- # Specify your gem's dependencies in senec.gemspec
4
- gemspec
5
-
6
- # Support for encoding and decoding binary data using a Base64 representation. (https://github.com/ruby/base64)
7
- gem 'base64'
8
-
9
- # Arbitrary-precision decimal floating-point number library. (https://github.com/ruby/bigdecimal)
10
- gem 'bigdecimal'
11
-
12
- # Rake is a Make-like program implemented in Ruby (https://github.com/ruby/rake)
13
- gem 'rake'
14
-
15
- # rspec-3.13.0 (http://github.com/rspec)
16
- gem 'rspec'
17
-
18
- # Automatic Ruby code style checking tool. (https://github.com/rubocop/rubocop)
19
- gem 'rubocop', require: false
20
-
21
- # Automatic performance checking tool for Ruby code. (https://github.com/rubocop/rubocop-performance)
22
- gem 'rubocop-performance', require: false
23
-
24
- # Code style checking for RSpec files (https://github.com/rubocop/rubocop-rspec)
25
- gem 'rubocop-rspec', require: false
26
-
27
- # A RuboCop plugin for Rake (https://github.com/rubocop/rubocop-rake)
28
- gem 'rubocop-rake', require: false
29
-
30
- # Thread-safety checks via static analysis (https://github.com/rubocop/rubocop-thread_safety)
31
- gem 'rubocop-thread_safety', require: false
32
-
33
- # Loads environment variables from `.env`. (https://github.com/bkeepers/dotenv)
34
- gem 'dotenv'
35
-
36
- # Record your test suite's HTTP interactions and replay them during future test runs for fast, deterministic, accurate tests. (https://benoittgt.github.io/vcr)
37
- gem 'vcr'
38
-
39
- # Code coverage for Ruby (https://github.com/simplecov-ruby/simplecov)
40
- gem 'simplecov'
41
-
42
- # Library for stubbing HTTP requests in Ruby. (https://github.com/bblimke/webmock)
43
- gem 'webmock'
data/bin/console DELETED
@@ -1,14 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'bundler/setup'
4
- require 'senec'
5
-
6
- # You can add fixtures and/or initialization code here to make experimenting
7
- # with your gem easier. You can also use a different console, if you like.
8
-
9
- # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
11
- # Pry.start
12
-
13
- require 'irb'
14
- IRB.start(__FILE__)
data/bin/setup DELETED
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
- set -vx
5
-
6
- bundle install
7
-
8
- # Do any other automated setup that you need to do here
data/senec.gemspec DELETED
@@ -1,32 +0,0 @@
1
- require_relative 'lib/senec/version'
2
-
3
- Gem::Specification.new do |spec|
4
- spec.name = 'senec'
5
- spec.version = Senec::VERSION
6
- spec.authors = ['Georg Ledermann']
7
- spec.email = ['georg@ledermann.dev']
8
-
9
- spec.summary = 'Unofficial Ruby Client for SENEC Home'
10
- spec.description = 'Access your local SENEC Solar Battery Storage System'
11
- spec.homepage = 'https://github.com/solectrus/senec'
12
- spec.license = 'MIT'
13
- spec.required_ruby_version = Gem::Requirement.new('>= 3.2.0')
14
- spec.add_dependency 'faraday'
15
- spec.add_dependency 'faraday-net_http_persistent'
16
- spec.add_dependency 'faraday-request-timer'
17
-
18
- spec.metadata['homepage_uri'] = spec.homepage
19
- spec.metadata['source_code_uri'] = 'https://github.com/solectrus/senec'
20
- spec.metadata['changelog_uri'] = 'https://github.com/solectrus/senec/releases'
21
- spec.metadata['rubygems_mfa_required'] = 'true'
22
-
23
- # Specify which files should be added to the gem when it is released.
24
- # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
25
- spec.files =
26
- Dir.chdir(File.expand_path(__dir__)) do
27
- `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
28
- end
29
- spec.bindir = 'exe'
30
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
31
- spec.require_paths = ['lib']
32
- end