iobroker.sbfspot 4.4.1 → 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/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2017-2024 René G. <info@rg-engineering.eu>
3
+ Copyright (c) 2017-2025 René G. <info@rg-engineering.eu>
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
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
- [detailed installation on arm based systems ](docs/en/install_arm.md)
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,15 @@ 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
+
73
+ ### 4.4.2 (2025-02-27)
74
+ * (René) changes requested by adapter checker
75
+ * (René) dependencies updated
76
+
66
77
  ### 4.4.1 (2024-12-15)
67
78
  * (René) translations
68
79
 
@@ -218,7 +229,7 @@ sometimes npm intall must be called more then one time to successfully install a
218
229
  ## License
219
230
  MIT License
220
231
 
221
- Copyright (c) 2017-2024 René G. <info@rg-engineering.eu>
232
+ Copyright (c) 2017-2025 René G. <info@rg-engineering.eu>
222
233
 
223
234
  Permission is hereby granted, free of charge, to any person obtaining a copy
224
235
  of this software and associated documentation files (the "Software"), to deal
@@ -1,24 +1,32 @@
1
1
  {
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"
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
- "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"
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,34 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "sbfspot",
4
- "version": "4.4.1",
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
+ },
19
+ "4.4.2": {
20
+ "en": "changes requested by adapter checker\ndependencies updated",
21
+ "de": "änderungen, die von adapter checker angefordert werden\naktualisierte abhängigkeiten",
22
+ "ru": "изменения, запрошенные adapter checker\nобновленные зависимости",
23
+ "pt": "alterações solicitadas pelo verificador do adaptador\ndependências atualizadas",
24
+ "nl": "wijzigingen gevraagd door adaptercontrole\nafhankelijkheden bijgewerkt",
25
+ "fr": "modifications demandées par l'adaptateur checker\ndépendances mises à jour",
26
+ "it": "modifiche richieste da adattatore checker\ndipendenze aggiornate",
27
+ "es": "cambios solicitados por el adaptador\ndependencias actualizadas",
28
+ "pl": "zmiany wymagane przez sprawdzacz adaptera\nzaktualizowane zależności",
29
+ "uk": "зміни, які вимагаються перевіркою адаптера\nоновлені залежності",
30
+ "zh-cn": "适配器检查器要求的更改\n更新依赖关系"
31
+ },
6
32
  "4.4.1": {
7
33
  "en": "translations",
8
34
  "de": "übersetzungen",
@@ -67,32 +93,6 @@
67
93
  "pl": "(René) zmiana zależności\nAktualizacja zależności mySql",
68
94
  "uk": "(Рене) зміна залежностей\n(René) mySql оновлення залежності",
69
95
  "zh-cn": "(René) 属地变化\n(René) MySql 依赖性更新"
70
- },
71
- "4.3.2": {
72
- "en": "(René) change of dependencies",
73
- "de": "(René) Veränderung der Abhängigkeiten",
74
- "ru": "(René) изменение зависимостей",
75
- "pt": "(René) mudança de dependências",
76
- "nl": "(René) verandering van afhankelijkheden",
77
- "fr": "(René) changement de dépendances",
78
- "it": "(René) cambiamento delle dipendenze",
79
- "es": "(René) cambio de dependencia",
80
- "pl": "(René) zmiana zależności",
81
- "uk": "(Рене) зміна залежностей",
82
- "zh-cn": "(René) 属地变化"
83
- },
84
- "4.3.1": {
85
- "en": "(René) bug fix for data history in VIS-2",
86
- "de": "Fehlerbehebung für die Datenhistorie in VIS-2",
87
- "ru": "(René) исправление ошибок для истории данных в VIS-2",
88
- "pt": "(René) correção de bugs para histórico de dados no VIS-2",
89
- "nl": "(René) bug fix voor gegevensgeschiedenis in VIS-2",
90
- "fr": "Correction du bogue (René) pour l'historique des données dans VIS-2",
91
- "it": "(René) bug fix per la cronologia dei dati in VIS-2",
92
- "es": "(René) bug fix for data history in VIS-2",
93
- "pl": "(René) fix dla historii danych w VIS-2",
94
- "uk": "(René) Виправлення помилок для історії даних в VIS-2",
95
- "zh-cn": "(René) VIS-2中数据历史的错误修正"
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": "schedule",
125
+ "mode": "daemon",
126
126
  "schedule": "*/15 * * * *",
127
127
  "icon": "sbfspot.png",
128
128
  "enabled": true,
@@ -145,6 +145,11 @@
145
145
  "js-controller": ">=5.0.19"
146
146
  }
147
147
  ],
148
+ "globalDependencies": [
149
+ {
150
+ "admin": ">=7.4.10"
151
+ }
152
+ ],
148
153
  "plugins": {
149
154
  "sentry": {
150
155
  "dsn": "https://5369ea829c024fdf92b71a7b82f1f410@o390433.ingest.sentry.io/5434783"
@@ -202,6 +207,26 @@
202
207
  "agree",
203
208
  "cancel"
204
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
+ ]
205
230
  }
206
231
  ]
207
232
  },
@@ -215,5 +240,11 @@
215
240
  "sqlite_path": "",
216
241
  "install_date": "2001-08-25",
217
242
  "GetDataOnlyWhenDaylight": true
218
- }
243
+ },
244
+ "protectedNative": [
245
+ "sbfspotPassword"
246
+ ],
247
+ "encryptedNative": [
248
+ "sbfspotPassword"
249
+ ]
219
250
  }
@@ -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
- adapter.terminate ? adapter.terminate(11) : process.exit(11);
143
+ // adapter.terminate ? adapter.terminate(11) : process.exit(11);
66
144
  }
67
145
 
68
146
  //await CheckInverterVariables();
69
147
 
70
- killTimer = setTimeout(function () {
71
- //adapter.stop();
72
- adapter.log.error("force terminate ");
73
- adapter.terminate ? adapter.terminate(11) : process.exit(11);
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
- clearTimeout(killTimer);
182
- adapter.log.debug("timer killed");
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": "4.4.1",
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": ">= 18"
21
+ "node": ">= 20"
22
22
  },
23
23
  "dependencies": {
24
24
  "@iobroker/adapter-core": "^3.2.3",
25
- "better-sqlite3": "^11.6.0",
26
- "mysql2": "^3.11.5",
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": {
@@ -31,10 +32,11 @@
31
32
  "@alcalzone/release-script-plugin-iobroker": "^3.7.2",
32
33
  "@alcalzone/release-script-plugin-license": "^3.7.0",
33
34
  "@alcalzone/release-script-plugin-manual-review": "^3.7.0",
34
- "@iobroker/adapter-dev": "^1.3.0",
35
- "@iobroker/testing": "^5.0.0",
36
- "chai": "^5.1.2",
37
- "mocha": "^11.0.1"
35
+ "@iobroker/adapter-dev": "^1.4.0",
36
+ "@iobroker/testing": "^5.0.4",
37
+ "chai": "^5.2.0",
38
+ "eslint": "^9.28.0",
39
+ "mocha": "^11.5.0"
38
40
  },
39
41
  "main": "main.js",
40
42
  "bugs": {