iobroker.acinfinity 0.3.1

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.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 raspilaurent
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,86 @@
1
+ # ioBroker.acinfinity
2
+
3
+ ![Logo](admin/acinfinity.png)
4
+
5
+ [![NPM version](https://img.shields.io/npm/v/iobroker.acinfinity.svg)](https://www.npmjs.com/package/iobroker.acinfinity)
6
+ [![Downloads](https://img.shields.io/npm/dm/iobroker.acinfinity.svg)](https://www.npmjs.com/package/iobroker.acinfinity)
7
+ ![Number of Installations](https://iobroker.live/badges/acinfinity-installed.svg)
8
+ ![Test and Release](https://github.com/DEIN_USERNAME/ioBroker.acinfinity/workflows/Test%20and%20Release/badge.svg)
9
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
10
+
11
+ ## AC Infinity Adapter for ioBroker
12
+
13
+ This adapter allows you to control your AC Infinity devices via ioBroker.
14
+
15
+ ## ALL CREDITS TO: https://github.com/dalinicus/homeassistant-acinfinity
16
+
17
+ ## Features
18
+
19
+ * Control AC Infinity fans, timers, and other connected devices
20
+ * Monitor temperature, humidity, and VPD (Vapor Pressure Deficit) values
21
+ * Configure automatic mode settings based on environmental conditions
22
+ * Full support for all controller functions including scheduling and cyclical operations
23
+
24
+ ## Haftungsausschluss
25
+
26
+ Die Nutzung dieser Software erfolgt ausdrücklich auf eigene Gefahr. Es wird keinerlei Garantie für die Funktionsfähigkeit, Fehlerfreiheit oder Eignung für einen bestimmten Zweck übernommen.
27
+ Jegliche Haftung für direkte oder indirekte Schäden, einschließlich, aber nicht beschränkt auf Geräteausfälle, Datenverluste oder Fehlverhalten des Systems, wird ausdrücklich ausgeschlossen.
28
+ Der Entwickler übernimmt keine Verantwortung für etwaige Schäden, die durch die Verwendung dieser Software entstehen. Die Nutzung erfolgt in vollem Umfang auf eigenes Risiko.
29
+
30
+ ## Disclaimer
31
+
32
+ The use of this software is entirely at your own risk. No guarantees are made regarding functionality, reliability, or suitability for any particular purpose.
33
+ Any liability for direct or indirect damages – including but not limited to hardware failures, data loss, or system malfunctions – is expressly disclaimed.
34
+ The developer accepts no responsibility for any harm or issues arising from the use of this software. You use it entirely at your own risk.
35
+
36
+
37
+ ## Setup
38
+
39
+ 1. Enter your AC Infinity email and password
40
+ 2. Set the polling interval (minimum 5 seconds)
41
+ 3. Click Save & Close
42
+
43
+ ## Usage
44
+
45
+ After installation, the adapter will create device objects for each of your AC Infinity devices. You can control:
46
+
47
+ * Basic on/off functionality
48
+ * Fan speed settings
49
+ * Timer, cycle, and schedule modes
50
+ * Temperature and humidity thresholds
51
+ * VPD settings
52
+ * Advanced configuration options
53
+
54
+ ## Troubleshooting
55
+
56
+ * If connection issues occur, check your AC Infinity credentials
57
+ * For debugging, you can enable verbose logging in the instance settings
58
+
59
+ ## Changelog
60
+
61
+ ### 0.3.1 (2025-03-27)
62
+ * Initial release
63
+
64
+ ## License
65
+
66
+ MIT License
67
+
68
+ Copyright (c) 2025 raspilaurent
69
+
70
+ Permission is hereby granted, free of charge, to any person obtaining a copy
71
+ of this software and associated documentation files (the "Software"), to deal
72
+ in the Software without restriction, including without limitation the rights
73
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
74
+ copies of the Software, and to permit persons to whom the Software is
75
+ furnished to do so, subject to the following conditions:
76
+
77
+ The above copyright notice and this permission notice shall be included in all
78
+ copies or substantial portions of the Software.
79
+
80
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
81
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
82
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
83
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
84
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
85
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
86
+ SOFTWARE.
Binary file
@@ -0,0 +1,151 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <!-- Load ioBroker scripts and styles-->
5
+ <link rel="stylesheet" type="text/css" href="../../css/adapter.css" />
6
+ <link rel="stylesheet" type="text/css" href="../../lib/css/materialize.css">
7
+
8
+ <script type="text/javascript" src="../../lib/js/jquery-3.2.1.min.js"></script>
9
+ <script type="text/javascript" src="../../socket.io/socket.io.js"></script>
10
+ <script type="text/javascript" src="../../js/translate.js"></script>
11
+ <script type="text/javascript" src="../../lib/js/materialize.js"></script>
12
+ <script type="text/javascript" src="../../js/adapter-settings.js"></script>
13
+
14
+ <!-- Load our own files -->
15
+ <link rel="stylesheet" type="text/css" href="style.css" />
16
+ <script type="text/javascript" src="words.js"></script>
17
+
18
+ <style>
19
+ body {
20
+ background-color: #f5f5f5;
21
+ }
22
+ .adapter-container {
23
+ background-color: white;
24
+ border-radius: 2px;
25
+ box-shadow: 0 2px 2px 0 rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.2), 0 1px 5px 0 rgba(0,0,0,0.12);
26
+ margin: 20px;
27
+ padding: 20px;
28
+ max-width: 600px;
29
+ }
30
+ .logo {
31
+ max-height: 48px;
32
+ margin-bottom: 15px;
33
+ }
34
+ .input-field {
35
+ margin-bottom: 20px;
36
+ }
37
+ .input-field label {
38
+ color: rgba(0,0,0,0.62);
39
+ }
40
+ .input-field input:focus {
41
+ border-bottom: 1px solid #2196F3;
42
+ box-shadow: 0 1px 0 0 #2196F3;
43
+ }
44
+ .input-field .helper-text {
45
+ color: rgba(0,0,0,0.54);
46
+ font-size: 12px;
47
+ }
48
+ .warning-text {
49
+ color: #FF9800;
50
+ }
51
+ h4 {
52
+ color: rgba(0,0,0,0.87);
53
+ font-size: 24px;
54
+ margin-bottom: 20px;
55
+ }
56
+ .btn {
57
+ background-color: #2196F3;
58
+ }
59
+ .btn:hover {
60
+ background-color: #1976D2;
61
+ }
62
+ </style>
63
+
64
+ <script type="text/javascript">
65
+ function load(settings, onChange) {
66
+ if (!settings) return;
67
+ $('.value').each(function () {
68
+ var $key = $(this);
69
+ var id = $key.attr('id');
70
+ if ($key.attr('type') === 'checkbox') {
71
+ $key.prop('checked', settings[id])
72
+ .on('change', () => onChange());
73
+ } else {
74
+ $key.val(settings[id])
75
+ .on('change', () => onChange())
76
+ .on('keyup', () => onChange());
77
+ }
78
+ });
79
+ onChange(false);
80
+ if (M) M.updateTextFields();
81
+
82
+ $('#password').on('focus', function() {
83
+ $('#password-hint').show();
84
+ }).on('blur', function() {
85
+ $('#password-hint').hide();
86
+ });
87
+
88
+ $('#pollingInterval').on('change keyup', function() {
89
+ var value = parseInt($(this).val());
90
+ if (value < 10) {
91
+ $('#pollingIntervalWarning').show();
92
+ $(this).addClass('invalid');
93
+ } else {
94
+ $('#pollingIntervalWarning').hide();
95
+ $(this).removeClass('invalid');
96
+ }
97
+ });
98
+ }
99
+
100
+ function save(callback) {
101
+ var obj = {};
102
+ $('.value').each(function () {
103
+ var $this = $(this);
104
+ if ($this.attr('type') === 'checkbox') {
105
+ obj[$this.attr('id')] = $this.prop('checked');
106
+ } else if ($this.attr('type') === 'number') {
107
+ obj[$this.attr('id')] = parseFloat($this.val());
108
+ } else {
109
+ obj[$this.attr('id')] = $this.val();
110
+ }
111
+ });
112
+
113
+ if (obj.pollingInterval < 10) {
114
+ obj.pollingInterval = 10;
115
+ }
116
+
117
+ callback(obj);
118
+ }
119
+ </script>
120
+ </head>
121
+ <body>
122
+ <div class="m adapter-container">
123
+ <div class="row">
124
+ <div class="col s12">
125
+ <img src="acinfinity.png" class="logo" alt="AC Infinity Logo">
126
+
127
+ <h4 class="translate">AC Infinity Adapter Settings</h4>
128
+
129
+ <div class="row">
130
+ <div class="input-field col s12">
131
+ <input class="value" id="email" type="text">
132
+ <label for="email" class="translate">AC Infinity E-Mail</label>
133
+ </div>
134
+
135
+ <div class="input-field col s12">
136
+ <input class="value" id="password" type="password">
137
+ <label for="password" class="translate">AC Infinity Passwort</label>
138
+ <span id="password-hint" class="helper-text warning-text translate" style="display:none;">Note: AC Infinity truncates passwords to 25 characters.</span>
139
+ </div>
140
+
141
+ <div class="input-field col s12">
142
+ <input class="value" id="pollingInterval" type="number" min="10">
143
+ <label for="pollingInterval" class="translate">Abfrageintervall (Sekunden)</label>
144
+ <span id="pollingIntervalWarning" class="helper-text warning-text translate" style="display:none;">Minimum polling interval is 10 seconds.</span>
145
+ </div>
146
+ </div>
147
+ </div>
148
+ </div>
149
+ </div>
150
+ </body>
151
+ </html>
@@ -0,0 +1,77 @@
1
+ {
2
+ "i18n": true,
3
+ "type": "panel",
4
+ "items": {
5
+ "warning": {
6
+ "type": "panel",
7
+ "items": {
8
+ "warningTitle": {
9
+ "type": "staticText",
10
+ "text": "WARNING / WARNUNG",
11
+ "style": {
12
+ "color": "red",
13
+ "fontSize": "18px",
14
+ "fontWeight": "bold",
15
+ "textAlign": "center"
16
+ },
17
+ "sm": 12,
18
+ "md": 12,
19
+ "lg": 12,
20
+ "xl": 12,
21
+ "xs": 12
22
+ },
23
+ "warningText": {
24
+ "type": "staticText",
25
+ "text": "This adapter is in an early development stage. You use this adapter at your own risk. The author assumes no liability for any damage.<br><br>Dieser Adapter befindet sich in einem frühen Entwicklungsstadium. Sie verwenden diesen Adapter auf eigene Gefahr. Der Autor übernimmt keine Haftung für eventuelle Schäden.",
26
+ "style": {
27
+ "color": "red",
28
+ "fontWeight": "bold",
29
+ "textAlign": "center",
30
+ "marginBottom": "20px"
31
+ },
32
+ "sm": 12,
33
+ "md": 12,
34
+ "lg": 12,
35
+ "xl": 12,
36
+ "xs": 12
37
+ }
38
+ }
39
+ },
40
+ "settings": {
41
+ "type": "panel",
42
+ "items": {
43
+ "email": {
44
+ "type": "text",
45
+ "label": "AC Infinity E-Mail",
46
+ "newLine": true,
47
+ "sm": 12,
48
+ "md": 12,
49
+ "lg": 12,
50
+ "xl": 12,
51
+ "xs": 12
52
+ },
53
+ "password": {
54
+ "type": "password",
55
+ "label": "AC Infinity Password / Passwort",
56
+ "newLine": true,
57
+ "sm": 12,
58
+ "md": 12,
59
+ "lg": 12,
60
+ "xl": 12,
61
+ "xs": 12
62
+ },
63
+ "pollingInterval": {
64
+ "type": "number",
65
+ "label": "Polling Interval / Abfrageintervall (seconds)",
66
+ "min": 5,
67
+ "default": 30,
68
+ "sm": 12,
69
+ "md": 6,
70
+ "lg": 4,
71
+ "xl": 3,
72
+ "xs": 12
73
+ }
74
+ }
75
+ }
76
+ }
77
+ }
package/admin/words.js ADDED
@@ -0,0 +1,54 @@
1
+ /*global systemDictionary:true */
2
+ 'use strict';
3
+
4
+ systemDictionary = {
5
+ 'AC Infinity Adapter Settings': {
6
+ 'en': 'AC Infinity Adapter Settings',
7
+ 'de': 'AC Infinity Adapter Einstellungen'
8
+ },
9
+ 'AC Infinity Email': {
10
+ 'en': 'AC Infinity Email',
11
+ 'de': 'AC Infinity E-Mail'
12
+ },
13
+ 'Email address used for AC Infinity login': {
14
+ 'en': 'Email address used for AC Infinity login',
15
+ 'de': 'E-Mail-Adresse für AC Infinity Login'
16
+ },
17
+ 'AC Infinity Password': {
18
+ 'en': 'AC Infinity Password',
19
+ 'de': 'AC Infinity Passwort'
20
+ },
21
+ 'Password used for AC Infinity login': {
22
+ 'en': 'Password used for AC Infinity login',
23
+ 'de': 'Passwort für AC Infinity Login'
24
+ },
25
+ 'Polling Interval (seconds)': {
26
+ 'en': 'Polling Interval (seconds)',
27
+ 'de': 'Abfrageintervall (Sekunden)'
28
+ },
29
+ 'Minimum polling interval is 5 seconds.': {
30
+ 'en': 'Minimum polling interval is 5 seconds.',
31
+ 'de': 'Minimales Abfrageintervall beträgt 5 Sekunden.'
32
+ },
33
+ 'Note: AC Infinity truncates passwords to 25 characters.': {
34
+ 'en': 'Note: AC Infinity truncates passwords to 25 characters.',
35
+ 'de': 'Hinweis: AC Infinity kürzt Passwörter auf 25 Zeichen.'
36
+ },
37
+ // Zusätzliche Begriffe, die möglicherweise im Interface verwendet werden
38
+ 'WARNING / WARNUNG': {
39
+ 'en': 'WARNING',
40
+ 'de': 'WARNUNG'
41
+ },
42
+ 'This adapter is in an early development stage. You use this adapter at your own risk. The author assumes no liability for any damage.': {
43
+ 'en': 'This adapter is in an early development stage. You use this adapter at your own risk. The author assumes no liability for any damage.',
44
+ 'de': 'Dieser Adapter befindet sich in einem frühen Entwicklungsstadium. Sie verwenden diesen Adapter auf eigene Gefahr. Der Autor übernimmt keine Haftung für eventuelle Schäden.'
45
+ },
46
+ 'Polling Interval / Abfrageintervall (seconds)': {
47
+ 'en': 'Polling Interval (seconds)',
48
+ 'de': 'Abfrageintervall (Sekunden)'
49
+ },
50
+ 'AC Infinity Password / Passwort': {
51
+ 'en': 'AC Infinity Password',
52
+ 'de': 'AC Infinity Passwort'
53
+ }
54
+ };
@@ -0,0 +1,97 @@
1
+ {
2
+ "common": {
3
+ "name": "acinfinity",
4
+ "version": "0.3.1",
5
+ "news": {
6
+ "0.3.1": {
7
+ "en": "Initial version",
8
+ "de": "Erste Version"
9
+ }
10
+ },
11
+ "title": "AC Infinity (BETA-VERSION - USE AT YOUR OWN RISK)",
12
+ "titleLang": {
13
+ "en": "AC Infinity (BETA-VERSION - USE AT YOUR OWN RISK)",
14
+ "de": "AC Infinity (BETA-VERSION - NUTZUNG AUF EIGENE GEFAHR)"
15
+ },
16
+ "desc": {
17
+ "en": "Adapter for controlling AC Infinity smart devices",
18
+ "de": "Adapter für die Steuerung von AC Infinity Smart-Geräten"
19
+ },
20
+ "authors": [
21
+ "laurent Standard raspi@laurent-vite.de"
22
+ ],
23
+ "keywords": [
24
+ "ac infinity",
25
+ "climate control",
26
+ "Controller 69pro+"
27
+ ],
28
+ "license": "MIT",
29
+ "platform": "Javascript/Node.js",
30
+ "main": "main.js",
31
+ "icon": "acinfinity.png",
32
+ "enabled": true,
33
+ "extIcon": "https://raw.githubusercontent.com/raspilaurent/ioBroker.acinfinity/master/admin/acinfinity.png",
34
+ "readme": "https://github.com/raspilaurent/ioBroker.acinfinity/blob/master/README.md",
35
+ "loglevel": "info",
36
+ "mode": "daemon",
37
+ "type": "climate-control",
38
+ "compact": true,
39
+ "connectionType": "cloud",
40
+ "dataSource": "poll",
41
+ "materialize": true,
42
+ "noConfig": false,
43
+ "adminUI": {
44
+ "config": "json"
45
+ },
46
+ "dependencies": [
47
+ {
48
+ "js-controller": ">=5.0.19"
49
+ },
50
+ {
51
+ "admin": ">=6.17.14"
52
+ }
53
+ ],
54
+ "globalDependencies": []
55
+ },
56
+ "native": {
57
+ "email": "",
58
+ "password": "",
59
+ "pollingInterval": 30
60
+ },
61
+ "objects": [],
62
+ "instanceObjects": [
63
+ {
64
+ "_id": "info",
65
+ "type": "channel",
66
+ "common": {
67
+ "name": "Information"
68
+ },
69
+ "native": {}
70
+ },
71
+ {
72
+ "_id": "info.connection",
73
+ "type": "state",
74
+ "common": {
75
+ "role": "indicator.connected",
76
+ "name": "Device or service connected",
77
+ "type": "boolean",
78
+ "read": true,
79
+ "write": false,
80
+ "def": false
81
+ },
82
+ "native": {}
83
+ },
84
+ {
85
+ "_id": "info.token",
86
+ "type": "state",
87
+ "common": {
88
+ "role": "text",
89
+ "name": "Login token",
90
+ "type": "string",
91
+ "read": true,
92
+ "write": false
93
+ },
94
+ "native": {}
95
+ }
96
+ ]
97
+ }