atrea_control 1.2.1 → 1.3.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 +4 -4
- data/.gitignore +1 -0
- data/CHANGELOG.md +5 -0
- data/Gemfile.lock +3 -3
- data/lib/atrea_control/duplex.rb +55 -33
- data/lib/atrea_control/version.rb +3 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4a5ccc9d8596b46a4ec4c2eb98e26b820c62bfdbf91c8c1b732adc9f858f31bf
|
4
|
+
data.tar.gz: bac1c0183608fe7f16c679578203fba54c10d8e2270be7d0bf68fb1f17d7cce4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 657e441b8aa3ecfaa5eb8905ff6e22064d70d43984156bd15c6b7dfc17f6ed92e1a7c8318cd7febeb2ce68c621ff06f69561cd8861b642f2313f4421df098597
|
7
|
+
data.tar.gz: 97dcc1fa4810f952e4b89d2f610c93a2359debb663b0138f8bf3d5771ca9e4ddfb96be2d9c8e0a0a2a2667f1daa4533606704adfc9a89571a4d0852800cf7bf1
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
atrea_control (1.
|
4
|
+
atrea_control (1.3.0)
|
5
5
|
nokogiri (~> 1.12)
|
6
6
|
rest-client (~> 2.1)
|
7
7
|
selenium-webdriver (~> 3.142)
|
@@ -25,9 +25,9 @@ GEM
|
|
25
25
|
http-cookie (1.0.4)
|
26
26
|
domain_name (~> 0.5)
|
27
27
|
method_source (1.0.0)
|
28
|
-
mime-types (3.
|
28
|
+
mime-types (3.4.1)
|
29
29
|
mime-types-data (~> 3.2015)
|
30
|
-
mime-types-data (3.2021.
|
30
|
+
mime-types-data (3.2021.1115)
|
31
31
|
netrc (0.11.0)
|
32
32
|
nokogiri (1.12.5-x86_64-darwin)
|
33
33
|
racc (~> 1.4)
|
data/lib/atrea_control/duplex.rb
CHANGED
@@ -14,6 +14,8 @@ module AtreaControl
|
|
14
14
|
# @return [DateTime] store time of last update
|
15
15
|
attr_reader :valid_for
|
16
16
|
|
17
|
+
attr_accessor :user_id, :unit_id, :auth_token
|
18
|
+
|
17
19
|
# @param [String] login
|
18
20
|
# @param [String] password
|
19
21
|
# @param [Hash] sensors_map which box is related to sensor ID
|
@@ -32,7 +34,7 @@ module AtreaControl
|
|
32
34
|
|
33
35
|
options = Selenium::WebDriver::Firefox::Options.new
|
34
36
|
options.headless! unless ENV["NO_HEADLESS"]
|
35
|
-
@driver ||= Selenium::WebDriver.for :firefox,
|
37
|
+
@driver ||= Selenium::WebDriver.for :firefox, capabilities: [options]
|
36
38
|
end
|
37
39
|
|
38
40
|
def logged?
|
@@ -48,10 +50,12 @@ module AtreaControl
|
|
48
50
|
@login_in_progress = true
|
49
51
|
logger.debug "start new login"
|
50
52
|
driver.get CONTROL_URI
|
51
|
-
submit_login_form
|
53
|
+
submit_login_form unless logged?
|
52
54
|
finish_login
|
53
|
-
|
55
|
+
refresh!
|
54
56
|
inspect
|
57
|
+
ensure
|
58
|
+
@login_in_progress = false
|
55
59
|
end
|
56
60
|
|
57
61
|
# Submit given credentials and proceed login
|
@@ -70,26 +74,30 @@ module AtreaControl
|
|
70
74
|
def open_dashboard
|
71
75
|
uri = driver.find_element(tag_name: "object").attribute "data"
|
72
76
|
driver.get uri
|
77
|
+
user_id && unit_id && auth_token
|
73
78
|
logger.debug "#{name} login success"
|
74
79
|
end
|
75
80
|
|
76
81
|
# @return [String]
|
77
82
|
def name
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
#
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
#
|
90
|
-
|
91
|
-
|
92
|
-
|
83
|
+
@name ||= driver.find_element(css: "div#pageTitle > h2")&.text if logged?
|
84
|
+
@name
|
85
|
+
end
|
86
|
+
|
87
|
+
# # @return [String] ID of logged user
|
88
|
+
# def user_id
|
89
|
+
# @user_id ||= driver.execute_script("return window._user")
|
90
|
+
# end
|
91
|
+
#
|
92
|
+
# # @return [String] ID of recuperation unit
|
93
|
+
# def unit_id
|
94
|
+
# @unit_id ||= driver.execute_script("return window._unit")
|
95
|
+
# end
|
96
|
+
#
|
97
|
+
# # @return [String] session token
|
98
|
+
# def auth_token
|
99
|
+
# @auth_token ||= user&.[]("auth")
|
100
|
+
# end
|
93
101
|
|
94
102
|
# Window.user object from atrea
|
95
103
|
# @return [Hash, nil]
|
@@ -107,8 +115,8 @@ module AtreaControl
|
|
107
115
|
|
108
116
|
# quit selenium browser
|
109
117
|
def close
|
110
|
-
@user_auth = nil
|
111
118
|
driver.quit
|
119
|
+
ensure
|
112
120
|
remove_instance_variable :@driver
|
113
121
|
end
|
114
122
|
|
@@ -116,8 +124,7 @@ module AtreaControl
|
|
116
124
|
|
117
125
|
def as_json(_options = nil)
|
118
126
|
{
|
119
|
-
|
120
|
-
current_mode: current_mode_name,
|
127
|
+
current_mode: current_mode,
|
121
128
|
current_power: current_power,
|
122
129
|
outdoor_temperature: outdoor_temperature,
|
123
130
|
valid_for: valid_for,
|
@@ -130,9 +137,9 @@ module AtreaControl
|
|
130
137
|
as_json.to_json(*args)
|
131
138
|
end
|
132
139
|
|
133
|
-
def inspect
|
134
|
-
|
135
|
-
end
|
140
|
+
# def inspect
|
141
|
+
# "<AtreaControl name: '#{name}' outdoor_temperature: '#{outdoor_temperature}°C' current_power: '#{current_power}%' current_mode: '#{current_mode}' valid_for: '#{valid_for}'>"
|
142
|
+
# end
|
136
143
|
|
137
144
|
def call_unit!
|
138
145
|
return false if @login_in_progress
|
@@ -141,18 +148,25 @@ module AtreaControl
|
|
141
148
|
parse_response(response_comm_unit)
|
142
149
|
@valid_for = Time.now
|
143
150
|
as_json
|
144
|
-
rescue RestClient::Forbidden
|
145
|
-
logger.debug "session expired..."
|
146
|
-
close if @logged
|
147
|
-
login && call_unit!
|
148
151
|
end
|
149
152
|
|
150
153
|
private
|
151
154
|
|
155
|
+
# @see scripts.php -> loadRD5Values(node, init)
|
156
|
+
# @note
|
157
|
+
# if(values[key]>32767) values[key]-=65536;
|
158
|
+
# if(params[key] && params[key].offset)
|
159
|
+
# values[key]=values[key]-params[key].offset;
|
160
|
+
# if(params[key] && params[key].coef)
|
161
|
+
# values[key]=values[key]/params[key].coef;
|
152
162
|
def parse_response(response)
|
153
163
|
xml = Nokogiri::XML response.body
|
154
164
|
sensors_values = @sensors.transform_values do |id|
|
155
|
-
xml.xpath("//O[@I=\"#{id}\"]/@V").last&.value
|
165
|
+
value = xml.xpath("//O[@I=\"#{id}\"]/@V").last&.value.to_i
|
166
|
+
value -= 65_536 if value > 32_767
|
167
|
+
# value -= 0 if "offset"
|
168
|
+
# value -= 0 if "coef"
|
169
|
+
value
|
156
170
|
end
|
157
171
|
refresh_data(sensors_values)
|
158
172
|
end
|
@@ -160,7 +174,7 @@ module AtreaControl
|
|
160
174
|
# @param [Hash] values
|
161
175
|
# @return [Hash]
|
162
176
|
def refresh_data(values)
|
163
|
-
@outdoor_temperature = values[:outdoor_temperature].to_f / 10
|
177
|
+
@outdoor_temperature = values[:outdoor_temperature].to_f / 10.0
|
164
178
|
@current_power = values[:current_power].to_f
|
165
179
|
@current_mode = mode_map[values[:current_mode]]
|
166
180
|
|
@@ -169,7 +183,7 @@ module AtreaControl
|
|
169
183
|
|
170
184
|
# ? I10204 ?
|
171
185
|
def mode_map
|
172
|
-
{
|
186
|
+
{ 0 => "Vypnuto", 1 => "Automat", 2 => "Větrání", 6 => "Rozvážení" }
|
173
187
|
end
|
174
188
|
|
175
189
|
def logger
|
@@ -194,13 +208,21 @@ module AtreaControl
|
|
194
208
|
# @return [RestClient::Response]
|
195
209
|
def response_comm_unit
|
196
210
|
params = {
|
197
|
-
_user: user_id,
|
211
|
+
_user: user_id.to_i,
|
198
212
|
_unit: unit_id,
|
199
|
-
auth:
|
213
|
+
auth: auth_token || "null",
|
200
214
|
_t: "config/xml.xml",
|
201
215
|
}
|
202
216
|
autologin_token = CGI.escape([@login, @password].join("\b"))
|
203
217
|
RestClient.get "https://control.atrea.eu/comm/sw/unit.php", { Cookie: "autoLogin=#{autologin_token}", params: params }
|
204
218
|
end
|
219
|
+
|
220
|
+
# Update tokens based on current state
|
221
|
+
def refresh!
|
222
|
+
@user_id = driver.execute_script("return window._user")
|
223
|
+
@unit_id = driver.execute_script("return window._unit")
|
224
|
+
@auth_token = user&.[]("auth")
|
225
|
+
end
|
226
|
+
|
205
227
|
end
|
206
228
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: atrea_control
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lukáš Pokorný
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-12-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|