iobroker.sbfspot 4.4.2 → 5.0.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.
- package/README.md +9 -2
- package/admin/i18n/de/translations.json +30 -22
- package/admin/i18n/en/translations.json +30 -22
- package/admin/{jsonConfig.json → jsonConfig.json5} +149 -4
- package/io-package.json +35 -15
- package/lib/scripts/InstallSBFspot.sh +127 -0
- package/lib/scripts/UpdateSBFspot.sh +27 -0
- package/main.js +170 -11
- package/package.json +8 -6
package/README.md
CHANGED
|
@@ -32,11 +32,13 @@ This adapter reads data from SMA power inverters using sbfspot.
|
|
|
32
32
|
Now both database types (mySQL and sqlite) are supported.
|
|
33
33
|
Since version 0.2.3 there is a own vis widget based on flot available to show historical data.
|
|
34
34
|
|
|
35
|
-
## Installation
|
|
35
|
+
## Installation / Update
|
|
36
36
|
|
|
37
37
|
please follow installation instructions for sbfspot under https://github.com/SBFspot/SBFspot/wiki
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
|
|
40
|
+
in /opt/iobroker/node_modules/iobroker.sbfspot/lib/scripts you can find a scripts to install and update SBFspot on debian based systems.
|
|
41
|
+
|
|
40
42
|
|
|
41
43
|
## Hints
|
|
42
44
|
* use latest version from sbfspot from https://github.com/SBFspot/SBFspot
|
|
@@ -63,6 +65,11 @@ sometimes npm intall must be called more then one time to successfully install a
|
|
|
63
65
|
Placeholder for the next version (at the beginning of the line):
|
|
64
66
|
### **WORK IN PROGRESS**
|
|
65
67
|
-->
|
|
68
|
+
### 5.0.0 (2025-06-07)
|
|
69
|
+
* (René) ATTENTION breaking change: adapter type changed from scheduled to daemon
|
|
70
|
+
* (René) update hints added to admin
|
|
71
|
+
* (René) suggestions from adapter checker
|
|
72
|
+
|
|
66
73
|
### 4.4.2 (2025-02-27)
|
|
67
74
|
* (René) changes requested by adapter checker
|
|
68
75
|
* (René) dependencies updated
|
|
@@ -1,24 +1,32 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
2
|
+
"Attention": "adapter, sbfspot und Datenbank sollten auf demselben System laufen",
|
|
3
|
+
"GetDataOnlyWhenDaylight": "Daten nur bei Tageslicht abrufen",
|
|
4
|
+
"History4Vis2": "History für VIS-2-Widgets erstellen",
|
|
5
|
+
"configuration": "Konfiguration",
|
|
6
|
+
"install_date": "Installationsdatum der PV-Anlage",
|
|
7
|
+
"install_date_desc": "verwendet für die Berechnung der History in vis Widget",
|
|
8
|
+
"mySQL, MariaDB configuration": "mySQL, MariaDB-Konfiguration",
|
|
9
|
+
"page-mysql": "mySQL / MariaDB",
|
|
10
|
+
"page-sqlite": "SQLite",
|
|
11
|
+
"path_to_DB_file": "Pfad zur SQLite-Datenbankdatei",
|
|
12
|
+
"path_to_DB_file_descr": "geben Sie den kompletten Pfad inkl. Datenbankdateiname an, z.B. /home/pi/sbfspot/smadata/SBFspot.db",
|
|
13
|
+
"sbfspot_DB_IP": "Datenbank-IP",
|
|
14
|
+
"sbfspot_DB_IP_descr": "Sie können \"localhost\" als IP verwenden",
|
|
15
|
+
"sbfspot_DB_databasename": "Datenbank-Name",
|
|
16
|
+
"sbfspot_DB_password": "Kennwort des Datenbank-Benutzers",
|
|
17
|
+
"sbfspot_DB_port": "Datenbankport",
|
|
18
|
+
"sbfspot_DB_port_descr": "Standard 3306",
|
|
19
|
+
"sbfspot_DB_user": "Benutzer der Datenbank",
|
|
20
|
+
"sbfspot_adapter_settings": "sbfspot Adapter Einstellungen",
|
|
21
|
+
"sqlite configuration": "SQLite-Konfiguration",
|
|
22
|
+
"type_of_DB": "Type der Datenbank",
|
|
23
|
+
"used to calculate statistics": "Wird zur Berechnung statistischer Daten verwendet",
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
"current installed version": "aktuell installierte Version",
|
|
27
|
+
"available version": "verfügbare Version",
|
|
28
|
+
"supported version": "derzeit vom Adapter unterstützte Version",
|
|
29
|
+
"Update hint": "Updatehinweis für SBFspot",
|
|
30
|
+
"link to sbfspot wiki with installation instruction": "Link zum SBFspot-Wiki mit Installationsanweisungen",
|
|
31
|
+
"readIntervalsbfspot": "Intervall zum Lesen von Daten aus der SBFspot-Datenbank [min]"
|
|
24
32
|
}
|
|
@@ -1,24 +1,32 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
2
|
+
"Attention": "adapter, sbfspot and database should run on the same system",
|
|
3
|
+
"GetDataOnlyWhenDaylight": "get data only when daylight",
|
|
4
|
+
"History4Vis2": "Create history value for VIS-2 widget",
|
|
5
|
+
"configuration": "configuration",
|
|
6
|
+
"install_date": "install date PV-System",
|
|
7
|
+
"install_date_desc": "used for calculation of history in vis widget",
|
|
8
|
+
"mySQL, MariaDB configuration": "mySQL, MariaDB configuration",
|
|
9
|
+
"page-mysql": "mySQL / MariaDB",
|
|
10
|
+
"page-sqlite": "SQLite",
|
|
11
|
+
"path_to_DB_file": "path to SQLite database file",
|
|
12
|
+
"path_to_DB_file_descr": "enter the complete path incl. database file name e.g. /home/pi/sbfspot/smadata/SBFspot.db",
|
|
13
|
+
"sbfspot_DB_IP": "database IP",
|
|
14
|
+
"sbfspot_DB_IP_descr": "you can use 'localhost' as IP",
|
|
15
|
+
"sbfspot_DB_databasename": "database name",
|
|
16
|
+
"sbfspot_DB_password": "database password",
|
|
17
|
+
"sbfspot_DB_port": "database port",
|
|
18
|
+
"sbfspot_DB_port_descr": "default 3306",
|
|
19
|
+
"sbfspot_DB_user": "database user",
|
|
20
|
+
"sbfspot_adapter_settings": "sbfspot adapter settings",
|
|
21
|
+
"sqlite configuration": "SQLite configuration",
|
|
22
|
+
"type_of_DB": "type of database",
|
|
23
|
+
"used to calculate statistics": "used to calculate statistic data",
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
"current installed version": "current installed version",
|
|
27
|
+
"available version": "available version",
|
|
28
|
+
"supported version": "supported version",
|
|
29
|
+
"Update hint": "update hint",
|
|
30
|
+
"link to sbfspot wiki with installation instruction": "link to SBFspot wiki with installation instruction",
|
|
31
|
+
"readIntervalsbfspot": "interval to read data from SBFspot database [min]"
|
|
24
32
|
}
|
|
@@ -18,6 +18,141 @@
|
|
|
18
18
|
"xl": 1.2
|
|
19
19
|
},
|
|
20
20
|
|
|
21
|
+
"InstallUpdatehdr": {
|
|
22
|
+
"type": "header",
|
|
23
|
+
"text": "Update hint",
|
|
24
|
+
"size": 2
|
|
25
|
+
},
|
|
26
|
+
|
|
27
|
+
"currentversiontxt": {
|
|
28
|
+
"type": "staticText",
|
|
29
|
+
"newLine": true,
|
|
30
|
+
"text": "current installed version",
|
|
31
|
+
"xs": 12,
|
|
32
|
+
"sm": 2,
|
|
33
|
+
"md": 2,
|
|
34
|
+
"lg": 2,
|
|
35
|
+
"xl": 2
|
|
36
|
+
},
|
|
37
|
+
|
|
38
|
+
"currentversion": {
|
|
39
|
+
"type": "textSendTo",
|
|
40
|
+
"label": "current istalled sbfspot version",
|
|
41
|
+
"command": "checkCurrentVersion",
|
|
42
|
+
"jsonData": "{\"test\": \"aaa\", \"test2\": \"bbb\" }",
|
|
43
|
+
"alsoDependsOn": [ "checkCurrentVersion" ],
|
|
44
|
+
"xs": 12,
|
|
45
|
+
"sm": 12,
|
|
46
|
+
"md": 6,
|
|
47
|
+
"lg": 4,
|
|
48
|
+
"xl": 4
|
|
49
|
+
|
|
50
|
+
},
|
|
51
|
+
|
|
52
|
+
"installableversiontxt": {
|
|
53
|
+
"type": "staticText",
|
|
54
|
+
"newLine": true,
|
|
55
|
+
"text": "available version",
|
|
56
|
+
"xs": 12,
|
|
57
|
+
"sm": 2,
|
|
58
|
+
"md": 2,
|
|
59
|
+
"lg": 2,
|
|
60
|
+
"xl": 2
|
|
61
|
+
},
|
|
62
|
+
"installableversion": {
|
|
63
|
+
"type": "textSendTo",
|
|
64
|
+
"label": "available version",
|
|
65
|
+
"command": "checkInstallableversion",
|
|
66
|
+
"jsonData": "{\"test\": \"aaa\", \"test2\": \"bbb\" }",
|
|
67
|
+
"alsoDependsOn": [ "checkInstallableversion" ],
|
|
68
|
+
"xs": 12,
|
|
69
|
+
"sm": 12,
|
|
70
|
+
"md": 6,
|
|
71
|
+
"lg": 4,
|
|
72
|
+
"xl": 4
|
|
73
|
+
},
|
|
74
|
+
|
|
75
|
+
"supportedversiontxt": {
|
|
76
|
+
"type": "staticText",
|
|
77
|
+
"newLine": true,
|
|
78
|
+
"text": "supported version",
|
|
79
|
+
"xs": 12,
|
|
80
|
+
"sm": 2,
|
|
81
|
+
"md": 2,
|
|
82
|
+
"lg": 2,
|
|
83
|
+
"xl": 2
|
|
84
|
+
},
|
|
85
|
+
"supportedversion": {
|
|
86
|
+
"type": "textSendTo",
|
|
87
|
+
"label": "supported version",
|
|
88
|
+
"command": "checkSupportedVersion",
|
|
89
|
+
"jsonData": "{\"test\": \"aaa\", \"test2\": \"bbb\" }",
|
|
90
|
+
"alsoDependsOn": [ "checkSupportedversion" ],
|
|
91
|
+
"xs": 12,
|
|
92
|
+
"sm": 12,
|
|
93
|
+
"md": 6,
|
|
94
|
+
"lg": 4,
|
|
95
|
+
"xl": 4
|
|
96
|
+
|
|
97
|
+
},
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
//just a link
|
|
102
|
+
"EbusReadme": {
|
|
103
|
+
"type": "staticLink",
|
|
104
|
+
"text": "link to sbfspot wiki with installation instruction",
|
|
105
|
+
"href": "https://github.com/SBFspot/SBFspot/wiki",
|
|
106
|
+
"button": true,
|
|
107
|
+
"icon": "info",
|
|
108
|
+
"newLine": true,
|
|
109
|
+
"xs": 12,
|
|
110
|
+
"sm": 12,
|
|
111
|
+
"md": 6,
|
|
112
|
+
"lg": 4,
|
|
113
|
+
"xl": 4
|
|
114
|
+
},
|
|
115
|
+
//für debian based systeme
|
|
116
|
+
/*
|
|
117
|
+
"sbfspothintinstallUpdate": {
|
|
118
|
+
"type": "staticText",
|
|
119
|
+
"text": "hint_sbfspot_installupdate",
|
|
120
|
+
"newLine": true,
|
|
121
|
+
"xs": 12,
|
|
122
|
+
"sm": 12,
|
|
123
|
+
"md": 12,
|
|
124
|
+
"lg": 12,
|
|
125
|
+
"xl": 12
|
|
126
|
+
} ,
|
|
127
|
+
*/
|
|
128
|
+
/* "Install": {
|
|
129
|
+
"type": "sendTo",
|
|
130
|
+
"command": "Install",
|
|
131
|
+
"label": "InstallBtn",
|
|
132
|
+
"tooltip": "InstallBtnHint",
|
|
133
|
+
"newLine": true,
|
|
134
|
+
"xs": 12,
|
|
135
|
+
"sm": 12,
|
|
136
|
+
"md": 12,
|
|
137
|
+
"lg": 12,
|
|
138
|
+
"xl": 12
|
|
139
|
+
},
|
|
140
|
+
"Update": {
|
|
141
|
+
"type": "sendTo",
|
|
142
|
+
"command": "Update",
|
|
143
|
+
"label": "UpdateBtn",
|
|
144
|
+
"tooltip": "UpdateBtnHint",
|
|
145
|
+
"newLine": true,
|
|
146
|
+
"xs": 12,
|
|
147
|
+
"sm": 12,
|
|
148
|
+
"md": 12,
|
|
149
|
+
"lg": 12,
|
|
150
|
+
"xl": 12
|
|
151
|
+
}
|
|
152
|
+
*/
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
|
|
21
156
|
"dividerHdr1": {
|
|
22
157
|
"newLine": true,
|
|
23
158
|
"type": "header",
|
|
@@ -79,10 +214,20 @@
|
|
|
79
214
|
"md": 4,
|
|
80
215
|
"lg": 4,
|
|
81
216
|
"xl": 4
|
|
217
|
+
},
|
|
218
|
+
"readInterval": {
|
|
219
|
+
"newLine": true,
|
|
220
|
+
"type": "number",
|
|
221
|
+
"label": "readIntervalsbfspot",
|
|
222
|
+
"min": 5,
|
|
223
|
+
"max": 300,
|
|
224
|
+
"default": 5,
|
|
225
|
+
"xs": 12,
|
|
226
|
+
"sm": 12,
|
|
227
|
+
"md": 4,
|
|
228
|
+
"lg": 4,
|
|
229
|
+
"xl": 4
|
|
82
230
|
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
231
|
}
|
|
87
232
|
},
|
|
88
233
|
"tab-mysql": {
|
|
@@ -135,6 +280,7 @@
|
|
|
135
280
|
"newLine": true,
|
|
136
281
|
"type": "password",
|
|
137
282
|
"label": "sbfspot_DB_password",
|
|
283
|
+
"visible": true,
|
|
138
284
|
"help": "",
|
|
139
285
|
"xs": 12,
|
|
140
286
|
"sm": 12,
|
|
@@ -167,7 +313,6 @@
|
|
|
167
313
|
"size": 2
|
|
168
314
|
},
|
|
169
315
|
|
|
170
|
-
|
|
171
316
|
"sqlite_path": {
|
|
172
317
|
"type": "text",
|
|
173
318
|
"label": "path_to_DB_file",
|
package/io-package.json
CHANGED
|
@@ -1,8 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "sbfspot",
|
|
4
|
-
"version": "
|
|
4
|
+
"version": "5.0.0",
|
|
5
5
|
"news": {
|
|
6
|
+
"5.0.0": {
|
|
7
|
+
"en": "ATTENTION breaking change: adapter type changed from scheduled to daemon\nupdate hints added to admin\nsuggestions from adapter checker",
|
|
8
|
+
"de": "ATTENTION Brechwechsel: Adaptertyp geändert von geplant nach Daemon\nupdate-hinweise zu admin hinzugefügt\nvorschläge von adapter checker",
|
|
9
|
+
"ru": "Изменение типа адаптера: переход с запланированного на демон\nобновление подсказок, добавленных в admin\nпредложения от adapter checker",
|
|
10
|
+
"pt": "Alteração de ruptura ATTENÇÃO: tipo de adaptador alterado de programado para daemon\natualizar dicas adicionadas ao administrador\nsugestões do verificador do adaptador",
|
|
11
|
+
"nl": "ATTENTIE break change: adapter type veranderd van gepland naar daemon\nhints aan admin bijwerken\nsuggesties van adaptercontrole",
|
|
12
|
+
"fr": "Changement de rupture ATTENTION : le type d'adaptateur est passé de programmé à démon\nmise à jour des conseils ajoutés à admin\nsuggestions de l'adaptateur checker",
|
|
13
|
+
"it": "ATTENZIONE cambio di rottura: tipo adattatore cambiato da programmato a demone\naggiornamento suggerimenti aggiunti a admin\nsuggerimenti da adattatore checker",
|
|
14
|
+
"es": "Cambio de ruptura de ATTENTION: tipo de adaptador cambiado de programado a daemon\nsugerencias de actualización añadidos a admin\nsugerencias del adaptador",
|
|
15
|
+
"pl": "UWAGA zmiana łamania: typ adaptera zmieniony z zaplanowanego na demona\naktualizacji wskazówki dodane do admin\nsugestie z sprawdzania adaptera",
|
|
16
|
+
"uk": "Зміна зміни тенції: тип адаптера змінено з запланованого на дамон\nоновлення натяків додано в адмін\nпропозиції від адаптера",
|
|
17
|
+
"zh-cn": "注意断开更改:适配器类型从预定更改为守护进程\n添加到管理员的更新提示\n来自适配器检查器的建议"
|
|
18
|
+
},
|
|
6
19
|
"4.4.2": {
|
|
7
20
|
"en": "changes requested by adapter checker\ndependencies updated",
|
|
8
21
|
"de": "änderungen, die von adapter checker angefordert werden\naktualisierte abhängigkeiten",
|
|
@@ -80,19 +93,6 @@
|
|
|
80
93
|
"pl": "(René) zmiana zależności\nAktualizacja zależności mySql",
|
|
81
94
|
"uk": "(Рене) зміна залежностей\n(René) mySql оновлення залежності",
|
|
82
95
|
"zh-cn": "(René) 属地变化\n(René) MySql 依赖性更新"
|
|
83
|
-
},
|
|
84
|
-
"4.3.2": {
|
|
85
|
-
"en": "(René) change of dependencies",
|
|
86
|
-
"de": "(René) Veränderung der Abhängigkeiten",
|
|
87
|
-
"ru": "(René) изменение зависимостей",
|
|
88
|
-
"pt": "(René) mudança de dependências",
|
|
89
|
-
"nl": "(René) verandering van afhankelijkheden",
|
|
90
|
-
"fr": "(René) changement de dépendances",
|
|
91
|
-
"it": "(René) cambiamento delle dipendenze",
|
|
92
|
-
"es": "(René) cambio de dependencia",
|
|
93
|
-
"pl": "(René) zmiana zależności",
|
|
94
|
-
"uk": "(Рене) зміна залежностей",
|
|
95
|
-
"zh-cn": "(René) 属地变化"
|
|
96
96
|
}
|
|
97
97
|
},
|
|
98
98
|
"titleLang": {
|
|
@@ -122,7 +122,7 @@
|
|
|
122
122
|
"uk": "Адаптер інвертора SMA (sbfspot) із віджетом vis"
|
|
123
123
|
},
|
|
124
124
|
"platform": "Javascript/Node.js",
|
|
125
|
-
"mode": "
|
|
125
|
+
"mode": "daemon",
|
|
126
126
|
"schedule": "*/15 * * * *",
|
|
127
127
|
"icon": "sbfspot.png",
|
|
128
128
|
"enabled": true,
|
|
@@ -207,6 +207,26 @@
|
|
|
207
207
|
"agree",
|
|
208
208
|
"cancel"
|
|
209
209
|
]
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
"condition": {
|
|
213
|
+
"operand": "and",
|
|
214
|
+
"rules": [
|
|
215
|
+
"oldVersion<=4.4.2",
|
|
216
|
+
"newVersion>4.4.2"
|
|
217
|
+
]
|
|
218
|
+
},
|
|
219
|
+
"title": {
|
|
220
|
+
"en": "type of adapter changed"
|
|
221
|
+
},
|
|
222
|
+
"text": {
|
|
223
|
+
"en": "type of adapter changed to deamon. It might be necessary to create a new instance of adapter."
|
|
224
|
+
},
|
|
225
|
+
"level": "warn",
|
|
226
|
+
"buttons": [
|
|
227
|
+
"agree",
|
|
228
|
+
"cancel"
|
|
229
|
+
]
|
|
210
230
|
}
|
|
211
231
|
]
|
|
212
232
|
},
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
#todo
|
|
5
|
+
|
|
6
|
+
# Config Daten von au�en �bergebbar
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
cd ~
|
|
10
|
+
mkdir projects
|
|
11
|
+
cd projects
|
|
12
|
+
|
|
13
|
+
sudo apt update
|
|
14
|
+
|
|
15
|
+
sudo apt -y install make g++
|
|
16
|
+
sudo apt -y --no-install-recommends install bluetooth libbluetooth-dev
|
|
17
|
+
sudo apt -y install libboost-date-time-dev libboost-system-dev libboost-filesystem-dev libboost-regex-dev
|
|
18
|
+
sudo apt -y install libboost-all-dev
|
|
19
|
+
|
|
20
|
+
sudo apt -y install sqlite3 libsqlite3-dev
|
|
21
|
+
|
|
22
|
+
sudo mkdir /var/sbfspot.3
|
|
23
|
+
sudo mkdir /var/sbfspot.3/smadata
|
|
24
|
+
sudo mkdir /var/sbfspot.3/logs
|
|
25
|
+
sudo chown -R $USER:$USER /var/sbfspot.3/
|
|
26
|
+
sudo chmod -R 777 /var/sbfspot.3/
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
sudo apt -y install git
|
|
30
|
+
git clone https://github.com/SBFspot/SBFspot.git
|
|
31
|
+
|
|
32
|
+
cd SBFspot
|
|
33
|
+
git checkout tags/V3.9.12
|
|
34
|
+
|
|
35
|
+
cd ~/projects/SBFspot/SBFspot
|
|
36
|
+
make sqlite
|
|
37
|
+
|
|
38
|
+
sudo make install_sqlite
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
cd /usr/local/bin/sbfspot.3
|
|
42
|
+
sudo cp SBFspot.default.cfg SBFspot.cfg
|
|
43
|
+
|
|
44
|
+
sudo sed -i 's/BTAddress=00:00:00:00:00:00/BTAddress=01:01:01:01:01:01/' SBFspot.cfg
|
|
45
|
+
|
|
46
|
+
sudo sed -i 's/OutputPath=\/home\/pi\/smadata\/%Y/OutputPath=\/var\/sbfspot.3\/smadata\/%Y/' SBFspot.cfg
|
|
47
|
+
sudo sed -i 's/OutputPathEvents=\/home\/pi\/smadata\/%Y\/Events/OutputPathEvents=\/var\/sbfspot.3\/smadata\/%Y\/Events/' SBFspot.cfg
|
|
48
|
+
sudo sed -i 's/SQL_Database=\/home\/pi\/smadata\/SBFspot.db/SQL_Database=\/var\/sbfspot.3\/smadata\/SBFspot.db/' SBFspot.cfg
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
cd /usr/local/bin/sbfspot.3
|
|
52
|
+
|
|
53
|
+
sudo touch daydata
|
|
54
|
+
sudo chmod 775 daydata
|
|
55
|
+
sudo chown $USER:$USER daydata
|
|
56
|
+
|
|
57
|
+
cat >> daydata << EOF
|
|
58
|
+
#!/bin/bash
|
|
59
|
+
#
|
|
60
|
+
log=/var/sbfspot.3/logs/MyPlant_$(date '+%Y%m%d').log
|
|
61
|
+
/usr/local/bin/sbfspot.3/SBFspot -v -ad1 -am0 -ae0 >>$log
|
|
62
|
+
EOF
|
|
63
|
+
|
|
64
|
+
sudo chmod +x daydata
|
|
65
|
+
|
|
66
|
+
sudo touch monthdata
|
|
67
|
+
sudo chmod 775 monthdata
|
|
68
|
+
sudo chown $USER:$USER monthdata
|
|
69
|
+
|
|
70
|
+
cat >> monthdata << EOF
|
|
71
|
+
#!/bin/bash
|
|
72
|
+
#
|
|
73
|
+
log=/var/sbfspot.3/logs/MyPlant_$(date '+%Y%m').log
|
|
74
|
+
/usr/local/bin/sbfspot.3/SBFspot -v -sp0 -ad0 -am1 -ae1 -finq >>$log
|
|
75
|
+
EOF
|
|
76
|
+
|
|
77
|
+
sudo chmod +x monthdata
|
|
78
|
+
|
|
79
|
+
(crontab -l 2>/dev/null; echo "*/5 6-22 * * * /usr/local/bin/sbfspot.3/daydata") | crontab -
|
|
80
|
+
(crontab -l 2>/dev/null; echo "55 05 * * * /usr/local/bin/sbfspot.3/monthdata") | crontab -
|
|
81
|
+
|
|
82
|
+
cd /var/sbfspot.3/smadata
|
|
83
|
+
sqlite3 SBFspot.db < ~/projects/SBFspot/SBFspot/CreateSQLiteDB.sql
|
|
84
|
+
|
|
85
|
+
sudo apt -y install libcurl4-openssl-dev
|
|
86
|
+
|
|
87
|
+
cd ~/projects/SBFspot/SBFspotUploadDaemon
|
|
88
|
+
make sqlite
|
|
89
|
+
|
|
90
|
+
sudo make install_sqlite
|
|
91
|
+
|
|
92
|
+
cd /usr/local/bin/sbfspot.3
|
|
93
|
+
sudo cp SBFspotUpload.default.cfg SBFspotUpload.cfg
|
|
94
|
+
|
|
95
|
+
sudo sed -i 's/PVoutput_SID=/PVoutput_SID=123456789/' SBFspotUpload.cfg
|
|
96
|
+
sudo sed -i 's/PVoutput_Key=/PVoutput_Key=123456789/' SBFspotUpload.cfg
|
|
97
|
+
|
|
98
|
+
sudo sed -i 's/SQL_Database=\/home\/pi\/smadata\/SBFspot.db/SQL_Database=\/var\/sbfspot.3\/smadata\/SBFspot.db/' SBFspotUpload.cfg
|
|
99
|
+
|
|
100
|
+
sudo sed -i 's/LogDir=\/var\log\/sbfspot.3\//LogDir=\/var\/sbfspot.3\/logs\/' SBFspotUpload.cfg
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
cd /usr/local/bin/sbfspot.3/
|
|
104
|
+
|
|
105
|
+
sudo touch SBFspotUpload.service
|
|
106
|
+
sudo chmod 775 SBFspotUpload.service
|
|
107
|
+
sudo chown $USER:$USER SBFspotUpload.service
|
|
108
|
+
|
|
109
|
+
cat >> SBFspotUpload.service << EOF
|
|
110
|
+
[Unit]
|
|
111
|
+
Description=SBFspot Upload Daemon
|
|
112
|
+
After=mysql.service mariadb.service network.target
|
|
113
|
+
|
|
114
|
+
[Service]
|
|
115
|
+
User=datalogger
|
|
116
|
+
Type=simple
|
|
117
|
+
TimeoutStopSec=10
|
|
118
|
+
ExecStart=/usr/local/bin/sbfspot.3/SBFspotUploadDaemon
|
|
119
|
+
Restart=on-success
|
|
120
|
+
RestartSec=10
|
|
121
|
+
|
|
122
|
+
[Install]
|
|
123
|
+
WantedBy=multi-user.target
|
|
124
|
+
EOF
|
|
125
|
+
|
|
126
|
+
sudo systemctl enable /usr/local/bin/sbfspot.3/SBFspotUpload.service
|
|
127
|
+
sudo systemctl start SBFspotUpload
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
|
|
3
|
+
sudo service ebusd stop
|
|
4
|
+
|
|
5
|
+
cd ~
|
|
6
|
+
cd projects
|
|
7
|
+
cd ebusd
|
|
8
|
+
|
|
9
|
+
git fetch
|
|
10
|
+
|
|
11
|
+
git pull
|
|
12
|
+
git checkout tags/25.1
|
|
13
|
+
|
|
14
|
+
cmake .
|
|
15
|
+
|
|
16
|
+
make
|
|
17
|
+
|
|
18
|
+
./src/ebusd/ebusd --help
|
|
19
|
+
|
|
20
|
+
./src/ebusd/ebusd --version
|
|
21
|
+
|
|
22
|
+
make install
|
|
23
|
+
|
|
24
|
+
sudo service ebusd start
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
edit /etc/default/ebusd
|
package/main.js
CHANGED
|
@@ -17,9 +17,14 @@ Copyright(C)[2016-2020][René Glaß]
|
|
|
17
17
|
const utils = require("@iobroker/adapter-core");
|
|
18
18
|
//const { json } = require("stream/consumers");
|
|
19
19
|
const SunCalc = require("suncalc2");
|
|
20
|
+
const axios = require("axios");
|
|
21
|
+
const { promisify } = require('util');
|
|
22
|
+
const exec = promisify(require('child_process').exec)
|
|
23
|
+
const os = require('os');
|
|
20
24
|
|
|
21
25
|
//const bluetooth_test = require("./lib/SMA_Bluetooth").test;
|
|
22
26
|
|
|
27
|
+
const supportedVersion="3.9.12"
|
|
23
28
|
|
|
24
29
|
let adapter;
|
|
25
30
|
function startAdapter(options) {
|
|
@@ -33,7 +38,60 @@ function startAdapter(options) {
|
|
|
33
38
|
} catch (e) {
|
|
34
39
|
adapter.log.error("exception catch after ready [" + e + "]");
|
|
35
40
|
}
|
|
41
|
+
},
|
|
42
|
+
|
|
43
|
+
//#######################################
|
|
44
|
+
// is called when adapter shuts down
|
|
45
|
+
unload: function (callback) {
|
|
46
|
+
try {
|
|
47
|
+
|
|
48
|
+
if (intervalID != null) {
|
|
49
|
+
clearInterval(intervalID);
|
|
50
|
+
}
|
|
51
|
+
if (updateTimerID != null) {
|
|
52
|
+
clearTimeout(updateTimerID);
|
|
53
|
+
}
|
|
54
|
+
adapter && adapter.log && adapter.log.info && adapter.log.info("cleaned everything up...");
|
|
55
|
+
//to do stop intervall
|
|
56
|
+
callback();
|
|
57
|
+
} catch (e) {
|
|
58
|
+
callback();
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
|
|
62
|
+
stateChange: async (id, state) => {
|
|
63
|
+
//await HandleStateChange(id, state);
|
|
64
|
+
},
|
|
65
|
+
|
|
66
|
+
//#######################################
|
|
67
|
+
//
|
|
68
|
+
message: async (obj) => {
|
|
69
|
+
if (obj) {
|
|
70
|
+
switch (obj.command) {
|
|
71
|
+
case "Install":
|
|
72
|
+
adapter.log.debug("message install called");
|
|
73
|
+
break;
|
|
74
|
+
case "Update":
|
|
75
|
+
adapter.log.debug("message update called");
|
|
76
|
+
break;
|
|
77
|
+
case "checkInstallableversion":
|
|
78
|
+
await CheckVersion("installable", obj);
|
|
79
|
+
break;
|
|
80
|
+
case "checkCurrentVersion":
|
|
81
|
+
await CheckVersion("current", obj);
|
|
82
|
+
break;
|
|
83
|
+
case "checkSupportedVersion":
|
|
84
|
+
await CheckVersion("supported", obj);
|
|
85
|
+
break;
|
|
86
|
+
default:
|
|
87
|
+
adapter.log.error("unknown message " + obj.command);
|
|
88
|
+
break;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
36
91
|
}
|
|
92
|
+
//#######################################
|
|
93
|
+
|
|
94
|
+
|
|
37
95
|
});
|
|
38
96
|
adapter = new utils.Adapter(options);
|
|
39
97
|
return adapter;
|
|
@@ -53,25 +111,45 @@ let sqlite_db;
|
|
|
53
111
|
let mysql_connection;
|
|
54
112
|
|
|
55
113
|
let killTimer;
|
|
114
|
+
let intervalID = null;
|
|
115
|
+
|
|
56
116
|
|
|
57
117
|
async function main() {
|
|
58
118
|
|
|
119
|
+
let readInterval = 5;
|
|
120
|
+
if (parseInt(adapter.config.readInterval) > 0) {
|
|
121
|
+
readInterval = adapter.config.readInterval;
|
|
122
|
+
}
|
|
123
|
+
adapter.log.debug("read every " + readInterval + " minutes");
|
|
124
|
+
intervalID = setInterval(Do, readInterval * 60 * 1000);
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
//read at adapterstart
|
|
128
|
+
await Do();
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
async function Do() {
|
|
133
|
+
|
|
59
134
|
|
|
60
135
|
//bluetooth_test();
|
|
61
136
|
|
|
62
137
|
|
|
138
|
+
//todo check access righst for sqlite file and folder...
|
|
139
|
+
|
|
140
|
+
|
|
63
141
|
if (adapter.config.databasetype === undefined) {
|
|
64
142
|
adapter.log.error("databasetype not defined. check and update settings and save");
|
|
65
|
-
|
|
143
|
+
// adapter.terminate ? adapter.terminate(11) : process.exit(11);
|
|
66
144
|
}
|
|
67
145
|
|
|
68
146
|
//await CheckInverterVariables();
|
|
69
147
|
|
|
70
|
-
killTimer = setTimeout(function () {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
}, 2*60*1000);
|
|
148
|
+
//killTimer = setTimeout(function () {
|
|
149
|
+
// //adapter.stop();
|
|
150
|
+
// adapter.log.error("force terminate ");
|
|
151
|
+
// adapter.terminate ? adapter.terminate(11) : process.exit(11);
|
|
152
|
+
//}, 2*60*1000);
|
|
75
153
|
|
|
76
154
|
|
|
77
155
|
let daylight = false;
|
|
@@ -177,12 +255,12 @@ async function main() {
|
|
|
177
255
|
}
|
|
178
256
|
|
|
179
257
|
|
|
180
|
-
if (killTimer) {
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
}
|
|
258
|
+
//if (killTimer) {
|
|
259
|
+
// clearTimeout(killTimer);
|
|
260
|
+
// adapter.log.debug("timer killed");
|
|
261
|
+
//}
|
|
184
262
|
|
|
185
|
-
adapter.terminate ? adapter.terminate(11) : process.exit(11);
|
|
263
|
+
//adapter.terminate ? adapter.terminate(11) : process.exit(11);
|
|
186
264
|
|
|
187
265
|
|
|
188
266
|
}
|
|
@@ -1166,6 +1244,87 @@ function DB_Disconnect() {
|
|
|
1166
1244
|
}
|
|
1167
1245
|
|
|
1168
1246
|
|
|
1247
|
+
async function CheckVersion(version, msg) {
|
|
1248
|
+
|
|
1249
|
+
if (version == "installable") {
|
|
1250
|
+
|
|
1251
|
+
const version = await GetLatestVersionGithub();
|
|
1252
|
+
|
|
1253
|
+
adapter.sendTo(msg.from, msg.command, version, msg.callback);
|
|
1254
|
+
}
|
|
1255
|
+
else if (version == "current") {
|
|
1256
|
+
|
|
1257
|
+
const version = await GetInstalledVersion();
|
|
1258
|
+
|
|
1259
|
+
adapter.sendTo(msg.from, msg.command, version, msg.callback);
|
|
1260
|
+
}
|
|
1261
|
+
else if (version == "supported") {
|
|
1262
|
+
adapter.sendTo(msg.from, msg.command, supportedVersion, msg.callback);
|
|
1263
|
+
}
|
|
1264
|
+
|
|
1265
|
+
}
|
|
1266
|
+
|
|
1267
|
+
|
|
1268
|
+
async function GetLatestVersionGithub() {
|
|
1269
|
+
|
|
1270
|
+
let latestVersion = "unknown";
|
|
1271
|
+
|
|
1272
|
+
try {
|
|
1273
|
+
const url = " https://api.github.com/repos/SBFspot/SBFspot/releases/latest";
|
|
1274
|
+
adapter.log.debug("call " + url);
|
|
1275
|
+
|
|
1276
|
+
let result = await axios.get(url, { timeout: 5000 });
|
|
1277
|
+
|
|
1278
|
+
if (result != null && result.status == 200 && result.data != null) {
|
|
1279
|
+
adapter.log.info("installable version " + JSON.stringify(result.data.name));
|
|
1280
|
+
|
|
1281
|
+
latestVersion = result.data.name;
|
|
1282
|
+
}
|
|
1283
|
+
else {
|
|
1284
|
+
latestVersion = "unknown / no result";
|
|
1285
|
+
}
|
|
1286
|
+
}
|
|
1287
|
+
catch (e) {
|
|
1288
|
+
adapter.log.error("exception in GetLatestVersionGithub [" + e + "]");
|
|
1289
|
+
latestVersion = "unknown / error";
|
|
1290
|
+
}
|
|
1291
|
+
return latestVersion;
|
|
1292
|
+
|
|
1293
|
+
|
|
1294
|
+
}
|
|
1295
|
+
|
|
1296
|
+
|
|
1297
|
+
|
|
1298
|
+
async function GetInstalledVersion() {
|
|
1299
|
+
|
|
1300
|
+
let Version = "unknown";
|
|
1301
|
+
|
|
1302
|
+
try {
|
|
1303
|
+
if (os.type() == "Linux") {
|
|
1304
|
+
const cmd = " /usr/local/bin/sbfspot.3/SBFspot -version";
|
|
1305
|
+
|
|
1306
|
+
adapter.log.debug("call " + cmd);
|
|
1307
|
+
|
|
1308
|
+
let res = await exec(cmd);
|
|
1309
|
+
|
|
1310
|
+
Version = res.stdout;
|
|
1311
|
+
|
|
1312
|
+
adapter.log.info("result " + Version);
|
|
1313
|
+
}
|
|
1314
|
+
else {
|
|
1315
|
+
adapter.log.error("sbfspot version cannot be detected on " + os.type());
|
|
1316
|
+
Version = "unknown on " + os.type();
|
|
1317
|
+
}
|
|
1318
|
+
}
|
|
1319
|
+
catch (e) {
|
|
1320
|
+
adapter.log.error("exception in GetInstalledVersion [" + e + "]");
|
|
1321
|
+
Version = "unknown / error"
|
|
1322
|
+
}
|
|
1323
|
+
return Version;
|
|
1324
|
+
|
|
1325
|
+
}
|
|
1326
|
+
|
|
1327
|
+
|
|
1169
1328
|
|
|
1170
1329
|
|
|
1171
1330
|
// If started as allInOne/compact mode => return function to create instance
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "iobroker.sbfspot",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "5.0.0",
|
|
4
4
|
"description": "sbfspot (SMA inverter) Adapter",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "René G.",
|
|
@@ -18,12 +18,13 @@
|
|
|
18
18
|
"url": "https://github.com/rg-engineering/ioBroker.sbfspot"
|
|
19
19
|
},
|
|
20
20
|
"engines": {
|
|
21
|
-
"node": ">=
|
|
21
|
+
"node": ">= 20"
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
24
|
"@iobroker/adapter-core": "^3.2.3",
|
|
25
|
-
"
|
|
26
|
-
"
|
|
25
|
+
"axios": "^1.9.0",
|
|
26
|
+
"better-sqlite3": "^11.10.0",
|
|
27
|
+
"mysql2": "^3.14.1",
|
|
27
28
|
"suncalc2": "^1.8.1"
|
|
28
29
|
},
|
|
29
30
|
"devDependencies": {
|
|
@@ -32,9 +33,10 @@
|
|
|
32
33
|
"@alcalzone/release-script-plugin-license": "^3.7.0",
|
|
33
34
|
"@alcalzone/release-script-plugin-manual-review": "^3.7.0",
|
|
34
35
|
"@iobroker/adapter-dev": "^1.4.0",
|
|
35
|
-
"@iobroker/testing": "^5.0.
|
|
36
|
+
"@iobroker/testing": "^5.0.4",
|
|
36
37
|
"chai": "^5.2.0",
|
|
37
|
-
"
|
|
38
|
+
"eslint": "^9.28.0",
|
|
39
|
+
"mocha": "^11.5.0"
|
|
38
40
|
},
|
|
39
41
|
"main": "main.js",
|
|
40
42
|
"bugs": {
|