atrea_control 1.3.1 → 2.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 68f9514437807e5b2866e168be26f647b86e5691b790995a6601cbfaed0a8076
4
- data.tar.gz: 0bbc369ca0fb7ef6e678785be170f7ce17404acd5c8e8f5972a1f7ac58b4e654
3
+ metadata.gz: 2a74f7162054ee182984e730f2d1459b911dfb8776300c2b568554be607a1add
4
+ data.tar.gz: 620367c6b128607aec63a52680bfd9b94376684ed0fa06f80b0f77032fc23e4b
5
5
  SHA512:
6
- metadata.gz: 326fbbe14ad1021edbb031928fc2fb99e835fe419dd28acd2e77f73c2547915bc8ff8db8180333960eb5d21508c089edc2e730a455247437f2cc338976f93840
7
- data.tar.gz: 50c81e105c82a2ae3197d8c21c899c8a6bcc53ad97fbc34bca61d2913b774d82b598aee27a18bf517d44e83a5d8ed3ce4e833d96a2ea575c7e3dceec2fbc157e
6
+ metadata.gz: b2d690b2bdac464a3b37015c54a1b326fbd6b21c6f67eb68cfb0e708e25018eee5e24ed8168796e6b051604f7ca06dc74eae5b5d2561280b538a09020807b65a
7
+ data.tar.gz: ccb084a5a96f23ae536068782bde603e23222949f03780493f868fa3f260fa85cb32daab8d5cac8a61cdc00bd57deacb9405910fcde8fdfa9fc5dec900bf2ec1
@@ -10,7 +10,7 @@ jobs:
10
10
  - name: Set up Ruby
11
11
  uses: ruby/setup-ruby@v1
12
12
  with:
13
- ruby-version: 2.7.2
13
+ ruby-version: 2.7
14
14
  bundler-cache: true
15
15
  - uses: browser-actions/setup-firefox@latest
16
16
  - name: Run tests
data/CHANGELOG.md CHANGED
@@ -1,4 +1,30 @@
1
1
  ## [Unreleased]
2
+
3
+ ## [2.0.2] - 2022-01-20
4
+ ### Added
5
+ - debug unit values
6
+ - try token-based login (without success)
7
+
8
+ ## [2.0.1] - 2021-12-26
9
+ ### Fixed
10
+ - write correct arguments
11
+
12
+ ## [2.0.0] - 2021-12-26
13
+ ### Changed
14
+ - refactored codebase to more readable classes
15
+ - selenium used only for login and then close => obtain SID (and user with unit)
16
+ - login waiting mechanism
17
+ ### Added
18
+ - found way how to change mode & power (tell unit to change)
19
+
20
+ ## [1.4.1] - 2021-12-18
21
+ ### Changed
22
+ - little refactor
23
+
24
+ ## [1.4.0] - 2021-12-12
25
+ ### Changed
26
+ - founded way to get config and data from Atrea server
27
+
2
28
  ## [1.3.1] - 2021-12-11
3
29
  ### Changed
4
30
  - version of selenium
data/Gemfile.lock CHANGED
@@ -1,7 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- atrea_control (1.3.0)
4
+ atrea_control (2.0.1)
5
+ i18n (~> 1.8)
5
6
  nokogiri (~> 1.12)
6
7
  rest-client (~> 2.1)
7
8
  selenium-webdriver (~> 4.1)
@@ -14,9 +15,10 @@ GEM
14
15
  ast (2.4.2)
15
16
  childprocess (4.1.0)
16
17
  coderay (1.1.3)
18
+ concurrent-ruby (1.1.9)
17
19
  crack (0.4.5)
18
20
  rexml
19
- diff-lcs (1.4.4)
21
+ diff-lcs (1.5.0)
20
22
  docile (1.4.0)
21
23
  domain_name (0.5.20190701)
22
24
  unf (>= 0.0.5, < 1.0.0)
@@ -24,6 +26,8 @@ GEM
24
26
  http-accept (1.7.0)
25
27
  http-cookie (1.0.4)
26
28
  domain_name (~> 0.5)
29
+ i18n (1.8.11)
30
+ concurrent-ruby (~> 1.0)
27
31
  method_source (1.0.0)
28
32
  mime-types (3.4.1)
29
33
  mime-types-data (~> 3.2015)
@@ -63,16 +67,16 @@ GEM
63
67
  diff-lcs (>= 1.2.0, < 2.0)
64
68
  rspec-support (~> 3.10.0)
65
69
  rspec-support (3.10.3)
66
- rubocop (1.23.0)
70
+ rubocop (1.24.0)
67
71
  parallel (~> 1.10)
68
72
  parser (>= 3.0.0.0)
69
73
  rainbow (>= 2.2.2, < 4.0)
70
74
  regexp_parser (>= 1.8, < 3.0)
71
75
  rexml
72
- rubocop-ast (>= 1.12.0, < 2.0)
76
+ rubocop-ast (>= 1.15.0, < 2.0)
73
77
  ruby-progressbar (~> 1.7)
74
78
  unicode-display_width (>= 1.4.0, < 3.0)
75
- rubocop-ast (1.14.0)
79
+ rubocop-ast (1.15.0)
76
80
  parser (>= 3.0.1.1)
77
81
  rubocop-rspec (2.6.0)
78
82
  rubocop (~> 1.19)
data/README.md CHANGED
@@ -10,7 +10,9 @@ This gem provide simple DSL by parsing content of https://control.atrea.eu with
10
10
  * temperature
11
11
  * fan power
12
12
  * power mode
13
-
13
+ * allow change
14
+ * power
15
+ * mode
14
16
 
15
17
  ## Installation
16
18
 
@@ -30,27 +32,59 @@ Or install it yourself as:
30
32
 
31
33
  ## Usage
32
34
 
33
- UI map of sensors is required = each box have own ID contains sensor ID. Its required for correct element lookup.
34
-
35
- Default sensor map:
35
+ At the begin you need obtain `user_id`, `unit_id` and `sid` (auth token). For this use "Login"
36
36
  ```ruby
37
- def default_sensors_map
38
- {
39
- outdoor_temperature: "I10208",
40
- current_power: "H10704",
41
- current_mode: "H10705",
42
- }
43
- end
37
+ tokens = AtreaControl::Duplex::Login.user_tokens login: "myhome", password: "sup3r-S3CR3T-kocicka"
38
+ tokens # => { user_id: "1234", unit_id: "85425324672", sid: 4012 }
44
39
  ```
40
+ I recommend to store then somewhere...
41
+ Then you can call Unit for data...
42
+
45
43
  Example usage:
46
44
  ```ruby
47
- control = AtreaControl::Duplex.new login: "myhome", password: "sup3r-S3CR3T-kocicka", sensors_map: { current_power: "H10704" }
48
- control.login # => true (takes max 5.minutes)
49
- control.current_mode # => "Bathroom"
50
- control.current_power # => 37.0
45
+ control = AtreaControl::Duplex::Unit.new user_id: "1234", unit_id: "85425324672", sid: 4012
46
+ control.values # => { current_power: 88.0, current_mode: "CO2" }
47
+ control.power # => 88.0
48
+ ```
49
+ ### Dig deeper
50
+ `AtreaControl::Duplex::Unit` expect optional argument `user_ctrl` which should be object respond to
51
+
52
+ `name` (String) = Name of unit
53
+ `sensors` (Hash) = Map of sensors, for example: `{ outdoor_temperature: "HI10208", current_power: "H10704" }`
54
+ `modes` (Hash) = Is a map of "changable" modes - in unit its something like "builtin?" modes. They are translated by unit lang - `{ "0" => "Vypnuto", "1" => "Automat" }`
55
+ `user_modes` (Hash) = Is a map user specific modes, based on home switches / devices (D1, D2, D3, IN1, IN2 ...). They are translated by user texts - `{ "D1" => "Koupelna", "D2" => "CO2", "IN1" => "ovladač" }`
56
+
57
+ __Please check [lib/atrea_control/duplex/user_ctrl.rb](./lib/atrea_control/duplex/user_ctrl.rb) for more details !__
58
+
59
+ ## Development / TODO
60
+ Login is currently done by selenium - fill login form.
61
+ I found that Atre submit form to BE, generate some "empty" HTML and JS which onLoad start doing request to queue for "login".
62
+
63
+ Re-login user, add login procedure into queue:
64
+ ```bash
65
+ curl -X POST -d "comm=config%2Flogin.cgi" "https://control.atrea.eu/apps/rd5Control/handle.php?action=unitLogin&user=XXXX&unit=NNNNNNN&table=userUnits&idPwd=YYYYYYY&NFP"
66
+ ```
67
+ Response is time in seconds when login will ready:
68
+ ```xml
69
+ <root><sended time="264"/></root>
70
+ ```
71
+ Based it su shown countdown ...
72
+
73
+
74
+ Request for current queue status
75
+ ```bash
76
+ curl 'https://control.atrea.eu/apps/rd5Control/handle.php?Sync=1&action=unitQuery&query=loged&user=XXXX&unit=NNNNNNN'
77
+ ```
78
+ if queue is processed:
79
+ ```xml
80
+ <root><login uconn="16395889" sid="010101" ver="3001009"/></root>
81
+ ```
82
+ else
83
+ ```xml
84
+ <root><login uconn="16390480" sid="0"/></root>
51
85
  ```
52
86
 
53
- ## Development
87
+ Goal is to obtain "SID".
54
88
 
55
89
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
56
90
 
@@ -3,14 +3,14 @@
3
3
  require_relative "lib/atrea_control/version"
4
4
 
5
5
  Gem::Specification.new do |spec|
6
- spec.name = "atrea_control"
7
- spec.version = AtreaControl::VERSION
8
- spec.authors = ["Lukáš Pokorný"]
9
- spec.email = ["pokorny@luk4s.cz"]
10
-
11
- spec.summary = "Get data control.atrea.eu"
12
- spec.description = "Read data from web controller of RD5 duplex by Atrea."
13
- spec.homepage = "https://github.com/luk4s/atrea_control"
6
+ spec.name = "atrea_control"
7
+ spec.version = AtreaControl::VERSION
8
+ spec.authors = ["Lukáš Pokorný"]
9
+ spec.email = ["pokorny@luk4s.cz"]
10
+
11
+ spec.summary = "Get data control.atrea.eu"
12
+ spec.description = "Read data from web controller of RD5 duplex by Atrea."
13
+ spec.homepage = "https://github.com/luk4s/atrea_control"
14
14
  spec.required_ruby_version = Gem::Requirement.new(">= 2.7.2")
15
15
 
16
16
  spec.metadata["allowed_push_host"] = "https://rubygems.org"
@@ -18,14 +18,16 @@ Gem::Specification.new do |spec|
18
18
  spec.metadata["homepage_uri"] = spec.homepage
19
19
  spec.metadata["source_code_uri"] = "https://github.com/luk4s/atrea_control"
20
20
  spec.metadata["changelog_uri"] = "https://github.com/luk4s/atrea_control/CHANGELOG.md"
21
-
21
+ spec.metadata = {
22
+ "rubygems_mfa_required" => "true",
23
+ }
22
24
  # Specify which files should be added to the gem when it is released.
23
25
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
24
26
  spec.files = Dir.chdir(File.expand_path(__dir__)) do
25
27
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{\A(?:test|spec|features)/}) }
26
28
  end
27
- spec.bindir = "exe"
28
- spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
29
+ spec.bindir = "exe"
30
+ spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
29
31
  spec.require_paths = ["lib"]
30
32
 
31
33
  # Uncomment to register a new dependency of your gem
@@ -34,7 +36,9 @@ Gem::Specification.new do |spec|
34
36
  # For more information and examples about making a new gem, checkout our
35
37
  # guide at: https://bundler.io/guides/creating_gem.html
36
38
 
39
+ spec.add_dependency "i18n", "~> 1.8"
37
40
  spec.add_dependency "nokogiri", "~> 1.12"
38
41
  spec.add_dependency "rest-client", "~> 2.1"
39
42
  spec.add_dependency "selenium-webdriver", "~> 4.1"
43
+
40
44
  end
@@ -0,0 +1,269 @@
1
+ ---
2
+ cs:
3
+ mainTitle: Váš specialista na rekuperaci tepla a ekonomii vzduchotechnických systémů
4
+ save: Uložit
5
+ cancel: Storno
6
+ copy: Kopírovat
7
+ refresh: Obnovit
8
+ change: Změnit
9
+ pleaseWait: Prosím, čekejte ...
10
+ backToHome: Návrat na hlavní stranu
11
+ mainPage: Hlavní strana
12
+ serviceMenu: Servisní menu
13
+ activeFrom: Aktivní od
14
+ hours: Hodiny
15
+ minutes: Minuty
16
+ record: Záznam
17
+ allowed: Povoleno
18
+ netSetup: Nastavení sítě
19
+ getFromDHCP: Načíst hodnoty ze serveru DHCP
20
+ useNextValues: Použít následující hodnoty
21
+ addressIP: IP adresa
22
+ subnetMask: Maska podsítě
23
+ defaultGW: Výchozí brána
24
+ serverDNS: DNS server
25
+ FTPsetup: Nastavení hesla FTP serveru
26
+ passwordOld: Původní heslo
27
+ passwordNew: Nové heslo
28
+ passwordConfirm: Potvrzení nového hesla
29
+ airCond: Vzduchotechnika
30
+ airCondSetup: Nastavení vzduchotechniky
31
+ temperature: Teplota
32
+ tempSetup: Nastavení teploty
33
+ notInDemo: V demo verzi není podporováno
34
+ thisTimeExist: Zadaný čas již existuje
35
+ serviceSetup: Servisní nastavení
36
+ activeAlarms: Aktivní alarmy
37
+ alarmHistory: Historie alarmů
38
+ unitStarted: Start jednotky
39
+ active: Aktivní
40
+ noAlarmDefined: Není definován žádný alarm
41
+ noAlarmDetected: Není detekován žádný alarm
42
+ values: Hodnoty
43
+ parameters: Parametry
44
+ badInput: Chybné zadání
45
+ allowedRange: Povolený rozsah
46
+ start: Start
47
+ stop: Stop
48
+ text: Text
49
+ digiVer: Verze DIGI modulu
50
+ rdVer: Verze RD modulu
51
+ unitAddress: Adresa jednotky
52
+ currentMode: Aktuální mód provozu
53
+ damageWarning: Pozor nastavením těchto parametrů lze způsobit neadekvátní reakci
54
+ větrací jednotky, což může zapříčinit její poruchu či poškození. Za neuvážené
55
+ změny v nastavení výstupů nenese výrobce zařízení žádnou zodpovědnost!
56
+ parameter: Parametr
57
+ value: Hodnota
58
+ minimum: Minimum
59
+ maximum: Maximum
60
+ defValue: Výchozí hodnota
61
+ warning: Varování
62
+ error: Nastav
63
+ accessPrompt: Kontrola přístupu, zadejte přístupový kód
64
+ accessDenied: Přístup odepřen, chybný kód nebo příliš mnoho přihlášených!
65
+ swVer: Verze software
66
+ orderNum: Číslo zakázky
67
+ userSetup: Uživatelské nastavení
68
+ switchman: Manuál
69
+ valueOutOfRange: Hodnota leží mimo rozsah
70
+ fwStep1: Krok 1. - Uložení nastavení
71
+ fwStep2: Krok 2. - Update firmware
72
+ fwSTep3: Krok 3. - Obnova nastavení
73
+ saveSettings: Uložit nastavení
74
+ updateIt: Provést update
75
+ restoreSettings: Obnovit nastavení
76
+ parsNotSaved: Parametry nebyly dosud uloženy
77
+ errLengthCoo: Chyba dat, použijte jiný prohlížeč
78
+ parsSaved: Parametry uloženy
79
+ updateInProcess: Probíhá update, prosím čekejte
80
+ updateNoFile: Nebyl nalezen žádný soubor pro update
81
+ updateSucess: UPDATE dokončen
82
+ updateError: Chyba při updatu
83
+ manControlOn: Ruční řízení povoleno
84
+ manControlOff: Ruční řízení neaktivní
85
+ notConnected: Nepřipojeno
86
+ PgFW_FS1: Obnova/Záloha nastavení
87
+ PgFW_S1: Provedení zálohy servisního nastavení
88
+ PgFW_SB1: Zálohovat
89
+ PgFW_S2: Obnova servisního nastavení ze zálohy
90
+ PgFW_SB2: Obnovit
91
+ PgFW_S3: Obnova nastavení do výrobních hodnot
92
+ PgFW_SB3: Obnovit
93
+ PgFW_FS2: Update
94
+ PgFW_U2: Stažení aplikace pro update
95
+ PgFW_UB1: Otevřít
96
+ PgFW_SB1c: 'Přejete si vytvořit zálohu servisního nastavení? '
97
+ PgFW_SB2c: Opravdu si přejete obnovit servisní nastavení ze zálohy?
98
+ PgFW_SB3c: Opravdu si přejete obnovit výrobní nastavení?
99
+ fwUnit: FW Jednotky
100
+ fwAvail: Dostupný FW
101
+ restInProgress: Probíhá obnova nastavení
102
+ restart: Restart
103
+ activate: Aktivovat
104
+ deactivate: Deaktivovat
105
+ badTimeZone: Nesprávné časové pásmo
106
+ badTime: Nesprávné nastavení času
107
+ setByPC: Nastavit podle PC
108
+ msgFindAddr: Zadejte novou adresu jednotky.
109
+ dtFilterChange: Datum výměny filtru
110
+ confirmFilter: Potvrdit výměnu
111
+ confFilterQuest: Opravdu byl filtr vyměněn?
112
+ 'off': Vypnuto
113
+ 'on': Zapnuto
114
+ dayOfWeek: Den v týdnu
115
+ monday: Pondělí
116
+ tuesday: Úterý
117
+ wednesday: Středa
118
+ thursday: Čtvrtek
119
+ friday: Pátek
120
+ saturday: Sobota
121
+ sunday: Neděle
122
+ medium: Střední
123
+ night: Noc
124
+ day: Den
125
+ power: Výkon
126
+ automatic: Týdenní program
127
+ manual: Ruční
128
+ temporary: Dočasné
129
+ non: Není
130
+ mode: Režim
131
+ perVentilation: Periodické větrání
132
+ ventilation: Větrání
133
+ circulation: Cirkulace
134
+ startUp: Náběh
135
+ runDown: Doběh
136
+ defrosting: Odtávání rekuperátoru
137
+ external: Externě
138
+ inactive: Vypnuto
139
+ zone: Zóna
140
+ heating: Topná
141
+ nonHeating: Netopná
142
+ dateTime: Datum a čas
143
+ filterChange: Výměna filtru
144
+ notWhenAuto: Řízení teploty je nastaveno na automatiku, změna je platná pouze do
145
+ příští změny režimu.
146
+ heatingSched: Rozvrh topná sezóna
147
+ nonHeatingSched: Rozvrh netopná sezóna
148
+ userSetting: Uživatelské nastavení
149
+ season: Sezóna
150
+ modeAC: Režim VZT
151
+ modeTemp: Režim teploty
152
+ controlSetting: Nastavení regulace
153
+ tempSenzorDev: Korekce čidla teploty ovladače
154
+ inputBlock: Blokování vstupu
155
+ personsCount: Počet osob
156
+ thermostatFcn: Funkce termostatu
157
+ holidayParty: Dovolená / párty
158
+ texts: Texty
159
+ txtZone1: Text pro zónu 1
160
+ txtZone2: Text pro zónu 2
161
+ txtZone12: Text pro zónu 1 2
162
+ swInfo: Informace o SW
163
+ alarms: Alarmy
164
+ controlAC: Řízení VZT
165
+ controlTemp: Řízení teploty
166
+ currentPower: Aktuální výkon
167
+ requiredPower: Požadovaný výkon
168
+ requiredTemp: Požadovaná teplota
169
+ requiredMode: Požadovaný režim
170
+ indoorTemp: Vnitřní teplota
171
+ inletTemp: Teplota přívodu
172
+ czech: Česky
173
+ german: Německy
174
+ english: Anglicky
175
+ eqVent: Rovnotlaké větrání
176
+ ventCirc: Větrání s cirkulací
177
+ circDepend: Cirkulace závislá
178
+ overPrVent: Přetlakové větrání
179
+ devHeating: Odchylka pro topení
180
+ devCooling: Odchylka pro chlazení
181
+ devCoolMax: Odchylka pro chlazení na max.
182
+ productNumber: Výrobní číslo
183
+ unitType: Typ jednotky
184
+ polish: Polsky
185
+ bySens: Auto - větrání
186
+ hpDefrosting: Odmražení TČ
187
+ userLogin: Přihlášení uživatele
188
+ passwordInput: Zadejte heslo
189
+ loginCmd: Přihlásit
190
+ weeklyProgram: Týdenní program
191
+ italiano: Italsky
192
+ nightBefCool: Noční předchlazení
193
+ passwordMenu: Změna hesla
194
+ enterAllFields: Zadejte všechny údaje!
195
+ passwordNoChk: Nové heslo a jeho potvrzeni se neshoduje!
196
+ passwordBad: Heslo může obsahovat pouze znaky a-z, A-Z a číslice!
197
+ passwordSaved: Heslo bylo uloženo.
198
+ passwordSaveErr: Chyba při ukládání hesla.
199
+ unavail: Nedostupná
200
+ disabledRange: Nepovolený rozsah
201
+ emergMode: Nouzový režim
202
+ outdoorTemp: Venkovní teplota
203
+ currentZone: Aktuální zóna
204
+ components: Komponenty
205
+ all: Vše
206
+ modeAuto: Automat
207
+ disbalance: Rozvážení
208
+ saveActive: Uložit / Aktivovat
209
+ holidays: Svátky
210
+ vacations: Prázdniny
211
+ unitDesign: Provedení
212
+ unitSpec: Specifikace
213
+ partyStart: Spustit v
214
+ partyEnd: Ukončit v
215
+ tsNtsSwitch: Přepnutí TS/NTS
216
+ tsNtsTemp: Teplota TS/NTS
217
+ in1Block: Blokace cidla IN1
218
+ in2Block: Blokace cidla IN2
219
+ hystHeat: Hystereze topení
220
+ hystCool: Hystereze chlazení
221
+ set: Nastavit
222
+ timeZone: Časové pásmo
223
+ settingTZ: Nastavení časového pásma
224
+ producer: Výrobce
225
+ unitLine: Řada
226
+ unitSize: Velikost jednotky
227
+ unitIntDesign: Vnitřní uspořádání
228
+ currentConfig: Aktuální nastavení
229
+ monthName1: Leden
230
+ monthName2: Únor
231
+ monthName3: Březen
232
+ monthName4: Duben
233
+ monthName5: Květen
234
+ monthName6: Červen
235
+ monthName7: Červenec
236
+ monthName8: Srpen
237
+ monthName9: Září
238
+ monthName10: Říjen
239
+ monthName11: Listopad
240
+ monthName12: Prosinec
241
+ holidayTip: Svátek / Prázdniny
242
+ prodCodeInput: Zadejte kód výrobce
243
+ logType: Typ logu
244
+ current: Aktuální
245
+ week: Týden
246
+ month: Měsíc
247
+ selectDay: Vyberte den
248
+ show: Zobrazit
249
+ dataNotFound: Data nenalezena
250
+ logLive: On-line
251
+ holidayVacation: Svátky a prázdniny
252
+ timeAutoSwitch: Automatické přepnutí na letní čas
253
+ timeSyncInet: Synchronizace času s Internetem
254
+ unitTime: Čas jednotky
255
+ inputs: Vstupy
256
+ outputs: Výstupy
257
+ others: Ostatní
258
+ heatIconTip: Aktivní topení
259
+ coolIconTip: Aktivní chlazení
260
+ partyIconTip: Aktivní režim Párty/Dovolená
261
+ alarmIconTip: Aktivní alarm
262
+ PgFW_S2A: Záloha z
263
+ reset: Reset
264
+ commun: Komunikace
265
+ serverPing: Služba "Connect server"
266
+ acsService: Přístup servisu
267
+ acsDistr: Přístup distributora
268
+ lastCommun: Poslední komunikace
269
+ unitName: Jméno jednotky