senec 0.14.0 → 0.15.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: adfa786a844f0a43a8e3a87763249da55e2e6165e80600ada958fe7aed674d32
4
- data.tar.gz: ff9d52cc6e3fd5be19d49d474ee145526cbe0930438859b05423c92163b95274
3
+ metadata.gz: 1b624e179ea03733c86e4cbe7c93221809921317a274f33fd291ae007dafec2e
4
+ data.tar.gz: 4c96d04accfa2f6a091ffa0051a939c9d2e5f69196a0f45b6a33a24c50b80de7
5
5
  SHA512:
6
- metadata.gz: c7b507db12c1b6712da5ba93b2780ac34b31c0ff5c108714d0b540f1e43a270ee30f4f4de234c5948e29a1b2d28f872aed1590f87945b6ac56e7e32b80ee7d43
7
- data.tar.gz: c2739c6d4ef96c3d359e1d0a1398a5ce07363517db15c6032fb339aadbe802758751149af0f4d4d1b58e3d9a649367ed82667905a68259b7bce0ae3fc373f29a
6
+ metadata.gz: 9f3e1c33b8240d88495faef212b811b4301718a84ddc1b1b994ed07a7c08653db49046b185ff42490308e29afca2a59b9a0cec0a0eeed390fbe785c6d78bd864
7
+ data.tar.gz: 111937617cf40d17e6b850b158918c93a0cd661f7d8231483685b2048f5df8a91fa4780aa228fb136e2945c6ef6eb33bbfc1dbb9987b9fd9e033e984f443912b
data/.env.test CHANGED
@@ -1,3 +1,6 @@
1
1
  SENEC_USERNAME=mail@example.com
2
2
  SENEC_PASSWORD=topsecret
3
3
  SENEC_SYSTEM_ID=123456
4
+
5
+ SENEC_HOST=senec
6
+ SENEC_SCHEMA=https
@@ -9,7 +9,7 @@ jobs:
9
9
  strategy:
10
10
  fail-fast: false
11
11
  matrix:
12
- ruby: ['3.2']
12
+ ruby: ['3.2', '3.3']
13
13
 
14
14
  env:
15
15
  CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
data/Gemfile CHANGED
@@ -3,6 +3,12 @@ source 'https://rubygems.org'
3
3
  # Specify your gem's dependencies in senec.gemspec
4
4
  gemspec
5
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
+
6
12
  # Rake is a Make-like program implemented in Ruby (https://github.com/ruby/rake)
7
13
  gem 'rake'
8
14
 
data/LICENSE.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2020,2023 Georg Ledermann
3
+ Copyright (c) 2020-2024 Georg Ledermann
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
@@ -36,7 +36,7 @@ puts connection.systems
36
36
 
37
37
  # => [{"id"=>"123456", "steuereinheitnummer"=>"S123XXX", "gehaeusenummer"=>"DE-V3-XXXX", "strasse"=>"Musterstraße", "hausnummer"=>"27a", "postleitzahl"=>"99999", "ort"=>"Musterort", "laendercode"=>"DE", "zeitzone"=>"Europe/Berlin", "wallboxIds"=>["1"], "systemType"=>"V3"}]
38
38
 
39
- # Get the data of first systems (without knowing the ID):
39
+ # Get the Dashboard data of first systems (without knowing the ID):
40
40
  puts Senec::Cloud::Dashboard[connection].first.data
41
41
 
42
42
  # => {"aktuell"=>
@@ -62,13 +62,24 @@ puts Senec::Cloud::Dashboard[connection].first.data
62
62
  # "zeitstempel"=>"2023-11-26T18:45:23Z",
63
63
  # "electricVehicleConnected"=>false}
64
64
 
65
-
66
- # Get the data of a specific system (by ID):
67
- puts Senc::Cloud::Dashboard[connection].find("123456").data
65
+ # Get the Dashboard data of a specific system (by ID):
66
+ puts Senec::Cloud::Dashboard[connection].find("123456").data
68
67
 
69
68
  # => {"aktuell"=>
70
69
  # {"stromerzeugung"=>{"wert"=>0.01, "einheit"=>"W"},
71
70
  # ....
71
+
72
+ # Get the Technical Data of a specific system (by ID):
73
+
74
+ puts Senec::Cloud::TechnicalData[connection].find("123456").data
75
+
76
+ # => {"systemOverview"=>{"systemId"=>123456, "productName"=>"SENEC.Home V3 hybrid duo", ...
77
+
78
+ # Get the Technical Data of first systems (without knowing the ID):
79
+
80
+ puts Senec::Cloud::TechnicalData[connection].first.data
81
+
82
+ # => {"systemOverview"=>{"systemId"=>123456, "productName"=>"SENEC.Home V3 hybrid duo", ...
72
83
  ```
73
84
 
74
85
  ### Local access (V2.1 and V3 only)
@@ -142,7 +153,7 @@ Bug reports and pull requests are welcome on GitHub at https://github.com/solect
142
153
 
143
154
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
144
155
 
145
- Copyright (c) 2020,2023 Georg Ledermann
156
+ Copyright (c) 2020-2024 Georg Ledermann
146
157
 
147
158
  ## Code of Conduct
148
159
 
@@ -1,9 +1,10 @@
1
1
  module Senec
2
2
  module Cloud
3
3
  class Connection
4
- def initialize(username:, password:)
4
+ def initialize(username:, password:, token: nil)
5
5
  @username = username
6
6
  @password = password
7
+ @token = token
7
8
  end
8
9
 
9
10
  attr_reader :username, :password
@@ -34,12 +35,12 @@ module Senec
34
35
  end
35
36
  end
36
37
 
37
- private
38
-
39
38
  def token
40
39
  @token ||= login['token']
41
40
  end
42
41
 
42
+ private
43
+
43
44
  def login
44
45
  post('/v1/senec/login', { username:, password: })
45
46
  end
@@ -0,0 +1,69 @@
1
+ require_relative 'connection'
2
+
3
+ # Model for the Senec technical data.
4
+ #
5
+ # Example use:
6
+ #
7
+ # connection = Senec::Cloud::Connection.new(username: '...', password: '...')
8
+ #
9
+ # # Get the data of a specific system:
10
+ # TechnicalData[connection].find('123456')
11
+ #
12
+ # # Get the data of the default system:
13
+ # TechnicalData[connection].first
14
+ #
15
+ module Senec
16
+ module Cloud
17
+ class TechnicalData
18
+ class Finder
19
+ def initialize(connection)
20
+ @connection = connection
21
+ end
22
+ attr_reader :connection
23
+
24
+ def find(system_id)
25
+ TechnicalData.new(connection:, system_id:).tap(&:load_data)
26
+ end
27
+
28
+ def first
29
+ find(connection.default_system_id)
30
+ end
31
+ end
32
+
33
+ def self.[](connection)
34
+ Finder.new(connection)
35
+ end
36
+
37
+ def initialize(connection: nil, system_id: nil, data: nil)
38
+ raise ArgumentError unless connection.nil? ^ data.nil?
39
+
40
+ @connection = connection
41
+ @system_id = system_id
42
+
43
+ # Useful for testing only
44
+ @data = data
45
+ end
46
+
47
+ def load_data
48
+ raise 'Data already present!' if @data
49
+
50
+ @system_id ||= connection.default_system_id
51
+ @data = fetch_data
52
+ end
53
+
54
+ attr_reader :system_id, :data
55
+
56
+ private
57
+
58
+ def get(path, params: nil)
59
+ @connection.get(path, params:)
60
+ end
61
+
62
+ def fetch_data
63
+ return unless system_id
64
+
65
+ get("/v1/senec/systems/#{system_id}/technical-data")
66
+ end
67
+ end
68
+ end
69
+ end
data/lib/senec/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Senec
2
- VERSION = '0.14.0'.freeze
2
+ VERSION = '0.15.0'.freeze
3
3
  end
data/lib/senec.rb CHANGED
@@ -5,4 +5,5 @@ require 'senec/local/request'
5
5
  require 'senec/local/error'
6
6
 
7
7
  require 'senec/cloud/dashboard'
8
+ require 'senec/cloud/technical_data'
8
9
  require 'senec/cloud/error'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: senec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.14.0
4
+ version: 0.15.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Georg Ledermann
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-12-13 00:00:00.000000000 Z
11
+ date: 2024-01-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -76,6 +76,7 @@ files:
76
76
  - lib/senec/cloud/connection.rb
77
77
  - lib/senec/cloud/dashboard.rb
78
78
  - lib/senec/cloud/error.rb
79
+ - lib/senec/cloud/technical_data.rb
79
80
  - lib/senec/local/connection.rb
80
81
  - lib/senec/local/constants.rb
81
82
  - lib/senec/local/error.rb
@@ -107,7 +108,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
107
108
  - !ruby/object:Gem::Version
108
109
  version: '0'
109
110
  requirements: []
110
- rubygems_version: 3.4.22
111
+ rubygems_version: 3.5.5
111
112
  signing_key:
112
113
  specification_version: 4
113
114
  summary: Unofficial Ruby Client for SENEC Home