iobroker.sbfspot 4.0.8 → 4.1.2

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/main.js CHANGED
@@ -15,8 +15,12 @@ Copyright(C)[2016-2020][René Glaß]
15
15
  "use strict";
16
16
 
17
17
  const utils = require("@iobroker/adapter-core");
18
+ //const { json } = require("stream/consumers");
18
19
  const SunCalc = require("suncalc2");
19
20
 
21
+
22
+
23
+
20
24
  let adapter;
21
25
  function startAdapter(options) {
22
26
  options = options || {};
@@ -57,7 +61,7 @@ async function main() {
57
61
  adapter.terminate ? adapter.terminate(11) : process.exit(11);
58
62
  }
59
63
 
60
- await CheckInverterVariables();
64
+ //await CheckInverterVariables();
61
65
 
62
66
  killTimer = setTimeout(function () {
63
67
  //adapter.stop();
@@ -110,6 +114,7 @@ async function main() {
110
114
 
111
115
  await GetInverter(i, rows);
112
116
 
117
+ await DB_CheckLastUploads(serial);
113
118
 
114
119
  let rows1 = await DB_GetInvertersData(serial);
115
120
 
@@ -151,12 +156,8 @@ async function main() {
151
156
  }
152
157
 
153
158
  }
154
-
155
159
  }
156
-
157
-
158
160
  }
159
-
160
161
  }
161
162
  } else {
162
163
  //
@@ -165,8 +166,6 @@ async function main() {
165
166
  }
166
167
  }
167
168
  DB_Disconnect();
168
-
169
-
170
169
  }
171
170
  else {
172
171
  adapter.log.info("nothing to do, because no daylight ... ");
@@ -185,18 +184,23 @@ async function main() {
185
184
  }
186
185
 
187
186
  async function GetSystemDateformat() {
188
- const ret = await adapter.getForeignObjectAsync("system.config");
189
-
190
- if (typeof ret != undefined && ret != null) {
191
- //dateformat = ret.common.dateFormat;
192
- longitude = ret.common.longitude;
193
- latitude = ret.common.latitude;
194
- adapter.log.debug("system longitude " + longitude + " latitude " + latitude);
187
+ try {
188
+ const ret = await adapter.getForeignObjectAsync("system.config");
189
+
190
+ if (typeof ret != undefined && ret != null) {
191
+ //dateformat = ret.common.dateFormat;
192
+ longitude = ret.common.longitude;
193
+ latitude = ret.common.latitude;
194
+ adapter.log.debug("system: longitude " + longitude + " latitude " + latitude);
195
+ }
196
+ else {
197
+ adapter.log.error("system.config not available. longitude and latitude set to Berlin");
198
+ longitude = 52.520008;
199
+ latitude = 13.404954;
200
+ }
195
201
  }
196
- else {
197
- adapter.log.error("system.config not available. longitude and latitude set to Berlin");
198
- longitude = 52.520008;
199
- latitude = 13.404954;
202
+ catch (e) {
203
+ adapter.log.error("exception in GetSystemDateformat [" + e + "]");
200
204
  }
201
205
  }
202
206
 
@@ -324,16 +328,53 @@ async function AddInverterVariables(serial) {
324
328
  await AddObject(serial.toString() + ".history.last12Months", "state", "SMA inverter history last 12 Months (JSON)", "string", "value", "", true, false);
325
329
  await AddObject(serial.toString() + ".history.years", "state", "SMA inverter history years (JSON)", "string", "value", "", true, false);
326
330
 
331
+ await AddObject(serial.toString() + ".sbfspot.LastUpload", "state", "date/time of last upload to sbfspot", "string", "value", "", true, false);
332
+ await AddObject(serial.toString() + ".sbfspot.notUploaded", "state", "number of datapoints waiting for upload", "number", "value", "", true, false);
333
+
327
334
 
328
335
  adapter.log.debug("AddInverterVariables done " );
329
336
  }
330
337
 
331
338
 
339
+ async function CreateObject(key, obj) {
340
+
341
+ const obj_new = await adapter.getObjectAsync(key);
342
+ //adapter.log.warn("got object " + JSON.stringify(obj_new));
343
+
344
+ if (obj_new != null) {
345
+
346
+ if ((obj_new.common.role != obj.common.role
347
+ || obj_new.common.type != obj.common.type
348
+ || (obj_new.common.unit != obj.common.unit && obj.common.unit != null)
349
+ || obj_new.common.read != obj.common.read
350
+ || obj_new.common.write != obj.common.write
351
+ || obj_new.common.name != obj.common.name)
352
+ && obj.type === "state"
353
+ ) {
354
+ adapter.log.warn("change object " + JSON.stringify(obj) + " " + JSON.stringify(obj_new));
355
+ await adapter.extendObject(key, {
356
+ common: {
357
+ name: obj.common.name,
358
+ role: obj.common.role,
359
+ type: obj.common.type,
360
+ unit: obj.common.unit,
361
+ read: obj.common.read,
362
+ write: obj.common.write
363
+ }
364
+ });
365
+ }
366
+ }
367
+ else {
368
+ await adapter.setObjectNotExistsAsync(key, obj);
369
+ }
370
+ }
371
+
372
+
332
373
  async function AddObject(key, type, common_name, common_type, common_role, common_unit, common_read, common_write) {
333
374
 
334
375
  adapter.log.debug("addObject " + key);
335
376
 
336
- await adapter.setObjectNotExistsAsync(key, {
377
+ let obj= {
337
378
  type: type,
338
379
  common: {
339
380
  name: common_name,
@@ -346,37 +387,9 @@ async function AddObject(key, type, common_name, common_type, common_role, commo
346
387
  native: {
347
388
  location: key
348
389
  }
349
- });
350
-
351
- const obj = await adapter.getObjectAsync(key);
352
-
353
- if (obj != null) {
354
- //adapter.log.debug(" got Object " + JSON.stringify(obj));
355
- if (obj.type != type
356
- || obj.common.name != common_name
357
- || obj.common.type != common_type
358
- || obj.common.role != common_role
359
- || obj.common.unit != common_unit
360
- || obj.common.read != common_read
361
- || obj.common.write != common_write ) {
362
- adapter.log.debug(" !!! need to extend for " + key);
363
- await adapter.extendObject(key, {
364
- type: type,
365
- common: {
366
- name: common_name,
367
- type: common_type,
368
- role: common_role,
369
- unit: common_unit,
370
- read: common_read,
371
- write: common_write
372
- },
373
- native: {
374
- location: key
375
- }
376
- });
377
- }
390
+ };
378
391
 
379
- }
392
+ await CreateObject(key, obj);
380
393
  }
381
394
 
382
395
 
@@ -387,11 +400,11 @@ sbfspot.0 2021-07-08 19:30:13.024 info State value to set for "sbfspot.0.2000562
387
400
  sbfspot.0 2021-07-08 19:30:12.888 info State value to set for "sbfspot.0.2000562095.history.last30Days" has to be type "number" but received type "string"
388
401
  */
389
402
 
390
-
403
+ /*
391
404
  async function CheckInverterVariables() {
392
405
 
393
406
  }
394
-
407
+ */
395
408
 
396
409
 
397
410
  async function DB_Connect() {
@@ -467,49 +480,78 @@ async function DB_Connect() {
467
480
  return ret;
468
481
  }
469
482
 
483
+ async function DB_Query(query) {
470
484
 
485
+ adapter.log.debug(query);
486
+ let retRows;
471
487
 
488
+ if (adapter.config.databasetype == "mySQL" || adapter.config.databasetype == "MariaDB") {
472
489
 
490
+ const [rows, fields] = await mysql_connection.execute(query);
491
+ retRows = rows;
473
492
 
474
- async function DB_GetInverters() {
493
+ } else {
494
+ const stmt = sqlite_db.prepare(query);
495
+
496
+ const rows = stmt.all();
497
+ retRows = rows;
498
+ }
499
+
500
+ adapter.log.debug(JSON.stringify(retRows));
501
+
502
+ return retRows;
503
+ }
504
+
505
+ async function DB_CheckLastUploads(serial) {
475
506
 
476
- let retRows;
477
507
  try {
478
- const query = "SELECT * from Inverters";
479
- //numOfInverters = 0;
480
- adapter.log.debug(query);
508
+ let query = "SELECT `TimeStamp` FROM `DayData` WHERE `PVoutput` is null ";
481
509
 
510
+ let rows = await DB_Query(query);
482
511
 
512
+ let notUploaded = rows.length;
483
513
 
484
- if (adapter.config.databasetype == "mySQL" || adapter.config.databasetype == "MariaDB") {
514
+ await adapter.setStateAsync(serial + ".sbfspot.notUploaded", { ack: true, val: notUploaded });
485
515
 
486
- const [rows, fields] = await mysql_connection.execute(query);
516
+ query = "SELECT `TimeStamp` FROM `DayData` WHERE `PVoutput` = 1 ORDER BY TimeStamp DESC LIMIT 1 ";
487
517
 
488
- retRows = rows;
518
+ rows = await DB_Query(query);
489
519
 
490
- //await GetInverter(0, rows);
520
+ if (rows.length > 0) {
521
+ let updateTimestamp = rows[0].TimeStamp;
522
+ const oDate = new Date(updateTimestamp * 1000);
523
+ const oDateNow = new Date();
491
524
 
492
-
493
- } else {
525
+ oDateNow.setDate(oDateNow.getDate() - 1);
494
526
 
495
- const stmt = sqlite_db.prepare(query);
496
527
 
497
- const rows = stmt.all();
498
- retRows = rows;
499
- //await GetInverter(0, rows);
528
+ if (oDate < oDateNow) {
529
+ adapter.log.error("no upload to sbfspot since " + oDate.toLocaleString());
530
+ }
531
+
532
+ let lastUpload = oDate.toLocaleString();
500
533
 
501
-
534
+ await adapter.setStateAsync(serial + ".sbfspot.LastUpload", { ack: true, val: lastUpload });
502
535
  }
536
+ }
537
+ catch (e) {
538
+ adapter.log.error("exception in DB_CheckLastUploads [" + e + "]");
539
+ }
540
+ }
503
541
 
504
-
505
542
 
506
543
 
544
+ async function DB_GetInverters() {
545
+
546
+ let retRows;
547
+ try {
548
+ const query = "SELECT * from Inverters";
549
+ retRows = await DB_Query(query);
507
550
  }
508
551
  catch (e) {
509
552
  adapter.log.error("exception in DB_GetInverters [" + e + "]");
510
553
  }
511
554
 
512
-
513
555
  return retRows;
514
556
  }
515
557
 
@@ -574,28 +616,7 @@ async function DB_GetInvertersData(serial) {
574
616
  try {
575
617
  //SELECT * from SpotData where Serial ='2000562095' ORDER BY TimeStamp DESC LIMIT 1
576
618
  const query = "SELECT * from SpotData where Serial =" + serial + " ORDER BY TimeStamp DESC LIMIT 1";
577
- adapter.log.debug(query);
578
- if (adapter.config.databasetype == "mySQL" || adapter.config.databasetype == "MariaDB") {
579
- //we only get one row = last one
580
-
581
- const [rows, fields] = await mysql_connection.execute(query);
582
-
583
- retRows = rows;
584
- //await GetInverterData(0, rows, serial);
585
-
586
-
587
- } else {
588
-
589
- const stmt = sqlite_db.prepare(query);
590
-
591
- const rows = stmt.all();
592
-
593
- retRows = rows;
594
-
595
- //await GetInverterData(0, rows, serial);
596
-
597
-
598
- }
619
+ retRows = await DB_Query(query);
599
620
  }
600
621
  catch (e) {
601
622
  adapter.log.error("exception in DB_GetInvertersData [" + e + "]");
@@ -701,25 +722,7 @@ async function DB_CalcHistory_LastMonth(serial) {
701
722
  } else {
702
723
  query = "SELECT strftime('%Y-%m-%d', datetime(TimeStamp, 'unixepoch')) as date, Max(`EToday`) as ertrag FROM `SpotData` WHERE `Serial` = '" + serial + "' AND TimeStamp>= " + datefrom.getTime() / 1000 + " AND TimeStamp<= " + dateto.getTime() / 1000 + " Group By strftime('%Y-%m-%d', datetime(TimeStamp, 'unixepoch'))";
703
724
  }
704
- adapter.log.debug(query);
705
- if (adapter.config.databasetype == "mySQL" || adapter.config.databasetype == "MariaDB") {
706
-
707
- const [rows, fields] = await mysql_connection.execute(query);
708
-
709
- retRows = rows;
710
- //await calcHistory_LastMonth(0, rows, serial);
711
-
712
-
713
- } else {
714
-
715
- const stmt = sqlite_db.prepare(query);
716
-
717
- const rows = stmt.all();
718
- retRows = rows;
719
- //await CalcHistory_LastMonth(0, rows, serial);
720
-
721
-
722
- }
725
+ retRows = await DB_Query(query);
723
726
  }
724
727
  catch (e) {
725
728
  adapter.log.error("exception in DB_CalcHistory_LastMonth [" + e + "]");
@@ -784,26 +787,7 @@ async function DB_CalcHistory_Prepare(serial) {
784
787
  } else {
785
788
  query = "SELECT strftime('%Y-%m-%d', datetime(TimeStamp, 'unixepoch')) as date, ETotal FROM `SpotData` WHERE `Serial` = '" + serial + "' ORDER by `TimeStamp` ASC LIMIT 1";
786
789
  }
787
- adapter.log.debug(query);
788
-
789
- if (adapter.config.databasetype == "mySQL" || adapter.config.databasetype == "MariaDB") {
790
-
791
- const [rows, fields] = await mysql_connection.execute(query);
792
-
793
- retRows = rows;
794
- //await CalcHistory_Prepare(0, rows, serial);
795
-
796
-
797
- } else {
798
-
799
-
800
- const stmt = sqlite_db.prepare(query);
801
-
802
- const rows = stmt.all();
803
- retRows = rows;
804
- //await CalcHistory_Prepare(0, rows, serial);
805
-
806
- }
790
+ retRows = await DB_Query(query);
807
791
  }
808
792
  catch (e) {
809
793
  adapter.log.error("exception in DB_CalcHistory_Prepare [" + e + "]");
@@ -860,25 +844,7 @@ async function DB_CalcHistory_Today(serial) {
860
844
  } else {
861
845
  query = "SELECT strftime('%H:%m', datetime(TimeStamp, 'unixepoch')) as time, Max(`EToday`) as ertrag FROM `SpotData` WHERE `Serial` = '" + serial + "' AND TimeStamp>= " + datefrom.getTime() / 1000 + " AND TimeStamp<= " + dateto.getTime() / 1000 + " Group By strftime('%H-%m', datetime(TimeStamp, 'unixepoch'))";
862
846
  }
863
- adapter.log.debug(query);
864
- if (adapter.config.databasetype == "mySQL" || adapter.config.databasetype == "MariaDB") {
865
-
866
- const [rows, fields] = await mysql_connection.execute(query);
867
- retRows = rows;
868
-
869
- //await CalcHistory_Today(0, rows, serial);
870
-
871
-
872
- } else {
873
-
874
- const stmt = sqlite_db.prepare(query);
875
-
876
- const rows = stmt.all();
877
- retRows = rows;
878
- //await CalcHistory_Today(0, rows, serial);
879
-
880
-
881
- }
847
+ retRows = await DB_Query(query);
882
848
  }
883
849
  catch (e) {
884
850
  adapter.log.error("exception in DB_CalcHistory_Today [" + e + "]");
@@ -908,12 +874,11 @@ async function CalcHistory_Today(err, rows, serial) {
908
874
  "time": data["time"],
909
875
  "value": data["ertrag"]
910
876
  });
911
- //adapter.log.debug(JSON.stringify(oLastDays));
877
+
912
878
  }
913
879
 
914
880
  await adapter.setStateAsync(serial + ".history.today", { ack: true, val: JSON.stringify(oLastDays) });
915
881
 
916
- //await DB_CalcHistory_Years(serial);
917
882
  } else {
918
883
  adapter.log.error("Error while performing Query in CalcHistory_Today. " + err);
919
884
  }
@@ -937,27 +902,7 @@ async function DB_CalcHistory_Years(serial) {
937
902
  } else {
938
903
  query = "SELECT strftime('%Y', datetime(TimeStamp, 'unixepoch')) as date, Max(`ETotal`) as ertrag, Min(`ETotal`) as startertrag FROM `SpotData` WHERE `Serial` = '" + serial + "' Group By strftime('%Y', datetime(TimeStamp, 'unixepoch'))";
939
904
  }
940
- adapter.log.debug(query);
941
- if (adapter.config.databasetype == "mySQL" || adapter.config.databasetype == "MariaDB") {
942
-
943
- const [rows, fields] = await mysql_connection.execute(query);
944
-
945
- retRows = rows;
946
- //await CalcHistory_Years(0, rows, serial);
947
-
948
-
949
- } else {
950
-
951
- const stmt = sqlite_db.prepare(query);
952
-
953
- const rows = stmt.all();
954
- retRows = rows;
955
-
956
- //await CalcHistory_Years(0, rows, serial);
957
-
958
-
959
-
960
- }
905
+ retRows = await DB_Query(query);
961
906
  }
962
907
  catch (e) {
963
908
  adapter.log.error("exception in DB_CalcHistory_Years [" + e + "]");
@@ -1053,7 +998,6 @@ async function CalcHistory_Years(err, rows, serial) {
1053
998
  adapter.log.debug(JSON.stringify(oLastYears));
1054
999
  await adapter.setStateAsync(serial + ".history.years", { ack: true, val: JSON.stringify(oLastYears) });
1055
1000
 
1056
- //await DB_CalcHistory_Months(serial);
1057
1001
  } else {
1058
1002
  adapter.log.error("Error while performing Query in CalcHistory_Years. " + err);
1059
1003
  }
@@ -1086,24 +1030,7 @@ async function DB_CalcHistory_Months(serial) {
1086
1030
  } else {
1087
1031
  query = "SELECT strftime('%Y-%m', datetime(TimeStamp, 'unixepoch')) as date, Max(`ETotal`) as ertrag FROM `SpotData` WHERE `Serial` = '" + serial + "' AND TimeStamp>= " + datefrom.getTime() / 1000 + " AND TimeStamp<= " + dateto.getTime() / 1000 + " Group By strftime('%Y-%m', datetime(TimeStamp, 'unixepoch'))";
1088
1032
  }
1089
- adapter.log.debug(query);
1090
- if (adapter.config.databasetype == "mySQL" || adapter.config.databasetype == "MariaDB") {
1091
-
1092
- const [rows, fields] = await mysql_connection.execute(query);
1093
- retRows = rows;
1094
- //await CalcHistory_Months(0, rows, serial);
1095
-
1096
-
1097
- } else {
1098
-
1099
- const stmt = sqlite_db.prepare(query);
1100
-
1101
- const rows = stmt.all();
1102
- retRows = rows;
1103
- //await CalcHistory_Months(0, rows, serial);
1104
-
1105
-
1106
- }
1033
+ retRows = await DB_Query(query);
1107
1034
  }
1108
1035
  catch (e) {
1109
1036
  adapter.log.error("exception in DB_CalcHistory_Months [" + e + "]");
@@ -1122,7 +1049,6 @@ async function CalcHistory_Months(err, rows, serial) {
1122
1049
  adapter.log.debug("rows " + JSON.stringify(rows));
1123
1050
 
1124
1051
  const oLastMonth = [];
1125
- //var monthdata = {};
1126
1052
 
1127
1053
  for (const i in rows) {
1128
1054
 
@@ -1132,12 +1058,11 @@ async function CalcHistory_Months(err, rows, serial) {
1132
1058
  "month": data["date"],
1133
1059
  "value": data["ertrag"]
1134
1060
  });
1135
- //adapter.log.debug(JSON.stringify(oLastDays));
1061
+
1136
1062
  }
1137
1063
 
1138
1064
  await adapter.setStateAsync(serial + ".history.last12Months", { ack: true, val: JSON.stringify(oLastMonth) });
1139
1065
 
1140
- //DB_Disconnect();
1141
1066
  } else {
1142
1067
  adapter.log.error("Error while performing Query in CalcHistory_Months. " + err);
1143
1068
  }
@@ -1189,10 +1114,6 @@ async function DB_AddDummyData() {
1189
1114
 
1190
1115
  function DB_Disconnect() {
1191
1116
 
1192
- //numOfInverters--;
1193
- // wait for all data paths... last data path will close connection
1194
-
1195
- //if (numOfInverters == 0) {
1196
1117
  adapter.log.debug("disconnect database");
1197
1118
  if (adapter.config.databasetype == "mySQL" || adapter.config.databasetype == "MariaDB") {
1198
1119
  if (typeof mysql_connection != undefined && mysql_connection != null) {
@@ -1205,124 +1126,10 @@ function DB_Disconnect() {
1205
1126
  }
1206
1127
 
1207
1128
  adapter.log.info("all done ... ");
1208
-
1209
-
1210
- //} else {
1211
- // adapter.log.debug("need to wait for disconnect");
1212
- //}
1213
1129
  }
1214
1130
 
1215
1131
 
1216
- /**
1217
- * @param {string} timeVal
1218
- * @param {string} timeLimit
1219
- */
1220
- /*
1221
- function IsLater(timeVal, timeLimit) {
1222
1132
 
1223
- let ret = false;
1224
- try {
1225
- adapter.log.debug("check IsLater : " + timeVal + " " + timeLimit);
1226
-
1227
- if (typeof timeVal === "string" && typeof timeLimit === "string") {
1228
- const valIn = timeVal.split(":");
1229
- const valLimits = timeLimit.split(":");
1230
-
1231
- if (valIn.length > 1 && valLimits.length > 1) {
1232
-
1233
- if (parseInt(valIn[0]) > parseInt(valLimits[0])
1234
- || (parseInt(valIn[0]) == parseInt(valLimits[0]) && parseInt(valIn[1]) > parseInt(valLimits[1]))) {
1235
- ret = true;
1236
- adapter.log.debug("yes, IsLater : " + timeVal + " " + timeLimit);
1237
- }
1238
- }
1239
- else {
1240
- adapter.log.error("string does not contain : " + timeVal + " " + timeLimit);
1241
- }
1242
- }
1243
- else {
1244
- adapter.log.error("not a string " + typeof timeVal + " " + typeof timeLimit);
1245
- }
1246
- }
1247
- catch (e) {
1248
- adapter.log.error("exception in IsLater [" + e + "]");
1249
- }
1250
- return ret;
1251
- }
1252
- */
1253
- /**
1254
- * @param {string } timeVal
1255
- * @param {string } [timeLimit]
1256
- */
1257
- /*
1258
- function IsEarlier(timeVal, timeLimit) {
1259
-
1260
- let ret = false;
1261
- try {
1262
- adapter.log.debug("check IsEarlier : " + timeVal + " " + timeLimit);
1263
-
1264
- if (typeof timeVal === "string" && typeof timeLimit === "string") {
1265
- const valIn = timeVal.split(":");
1266
- const valLimits = timeLimit.split(":");
1267
-
1268
- if (valIn.length > 1 && valLimits.length > 1) {
1269
-
1270
- if (parseInt(valIn[0]) < parseInt(valLimits[0])
1271
- || (parseInt(valIn[0]) == parseInt(valLimits[0]) && parseInt(valIn[1]) < parseInt(valLimits[1]))) {
1272
- ret = true;
1273
- adapter.log.debug("yes, IsEarlier : " + timeVal + " " + timeLimit);
1274
- }
1275
- }
1276
- else {
1277
- adapter.log.error("string does not contain : " + timeVal + " " + timeLimit);
1278
- }
1279
- }
1280
- else {
1281
- adapter.log.error("not a string " + typeof timeVal + " " + typeof timeLimit);
1282
- }
1283
- }
1284
- catch (e) {
1285
- adapter.log.error("exception in IsEarlier [" + e + "]");
1286
- }
1287
- return ret;
1288
- }
1289
- */
1290
- /**
1291
- * @param {string} timeVal
1292
- * @param {string} timeLimit
1293
- */
1294
- /*
1295
- function IsEqual(timeVal, timeLimit) {
1296
-
1297
- let ret = false;
1298
- try {
1299
- adapter.log.debug("check IsEqual : " + timeVal + " " + timeLimit);
1300
-
1301
- if (typeof timeVal === "string" && typeof timeLimit === "string") {
1302
- const valIn = timeVal.split(":");
1303
- const valLimits = timeLimit.split(":");
1304
-
1305
- if (valIn.length > 1 && valLimits.length > 1) {
1306
-
1307
- if (parseInt(valIn[0]) === parseInt(valLimits[0]) && parseInt(valIn[1]) === parseInt(valLimits[1])) {
1308
- ret = true;
1309
- adapter.log.debug("yes, IsEqual : " + timeVal + " " + timeLimit);
1310
- }
1311
- }
1312
- else {
1313
- adapter.log.error("string does not contain : " + timeVal + " " + timeLimit);
1314
- }
1315
- }
1316
- else {
1317
- adapter.log.error("not a string " + typeof timeVal + " " + typeof timeLimit);
1318
- }
1319
- }
1320
- catch (e) {
1321
- adapter.log.error("exception in IsEqual [" + e + "]");
1322
- }
1323
- return ret;
1324
- }
1325
- */
1326
1133
 
1327
1134
  // If started as allInOne/compact mode => return function to create instance
1328
1135
  if (module && module.parent) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.sbfspot",
3
- "version": "4.0.8",
3
+ "version": "4.1.2",
4
4
  "description": "sbfspot (SMA inverter) Adapter",
5
5
  "author": {
6
6
  "name": "René G.",
@@ -18,31 +18,30 @@
18
18
  "url": "https://github.com/rg-engineering/ioBroker.sbfspot"
19
19
  },
20
20
  "dependencies": {
21
- "@iobroker/adapter-core": "2.5.1",
22
- "@sentry/node": "6.14.1",
23
- "better-sqlite3": "7.4.4",
24
- "mysql2": "2.3.2",
21
+ "@iobroker/adapter-core": "2.6.0",
22
+ "better-sqlite3": "7.6.2",
23
+ "mysql2": "2.3.3",
25
24
  "suncalc2": "1.8.1"
26
25
  },
27
26
  "devDependencies": {
28
- "@iobroker/testing": "2.5.2",
29
- "@types/chai": "4.2.22",
30
- "@types/chai-as-promised": "7.1.4",
27
+ "@iobroker/testing": "3.0.2",
28
+ "@types/chai": "4.3.3",
29
+ "@types/chai-as-promised": "7.1.5",
31
30
  "@types/gulp": "4.0.9",
32
- "@types/mocha": "9.0.0",
33
- "@types/node": "16.11.6",
31
+ "@types/mocha": "9.1.1",
32
+ "@types/node": "18.7.3",
34
33
  "@types/proxyquire": "1.3.28",
35
34
  "@types/request-promise-native": "1.0.18",
36
- "@types/sinon": "10.0.6",
37
- "@types/sinon-chai": "3.2.5",
38
- "axios": "0.24.0",
39
- "chai": "4.3.4",
35
+ "@types/sinon": "10.0.13",
36
+ "@types/sinon-chai": "3.2.8",
37
+ "axios": "0.27.2",
38
+ "chai": "4.3.6",
40
39
  "chai-as-promised": "7.1.1",
41
- "eslint": "8.1.0",
40
+ "eslint": "8.22.0",
42
41
  "gulp": "4.0.2",
43
- "mocha": "9.1.3",
42
+ "mocha": "10.0.0",
44
43
  "proxyquire": "2.1.3",
45
- "sinon": "12.0.1",
44
+ "sinon": "14.0.0",
46
45
  "sinon-chai": "3.7.0"
47
46
  },
48
47
  "main": "main.js",