iobroker.senec 1.6.5 → 1.6.7

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.
@@ -404,306 +404,6 @@ const state_trans = {
404
404
  18: 'Senec.Home V3 Hybrid duo (18)',
405
405
  19: 'Senec.Home V3 Hybrid (19)'
406
406
  },
407
- 'STATISTIC.CURRENT_STATE.0': {
408
- 0: 'INITIALZUSTAND (0)',
409
- 1: 'KEINE KOMMUNIKATION LADEGERAET (1)',
410
- 2: 'FEHLER LEISTUNGSMESSGERAET (2)',
411
- 3: 'RUNDSTEUEREMPFAENGER (3)',
412
- 4: 'ERSTLADUNG (4)',
413
- 5: 'WARTUNGSLADUNG (5)',
414
- 6: 'WARTUNGSLADUNG FERTIG (6)',
415
- 7: 'WARTUNG NOTWENDIG (7)',
416
- 8: 'MAN. SICHERHEITSLADUNG (8)',
417
- 9: 'SICHERHEITSLADUNG FERTIG (9)',
418
- 10: 'VOLLLADUNG (10)',
419
- 11: 'AUSGLEICHSLADUNG: LADEN (11)',
420
- 12: 'SULFATLADUNG: LADEN (12)',
421
- 13: 'AKKU VOLL (13)',
422
- 14: 'LADEN (14)',
423
- 15: 'AKKU LEER (15)',
424
- 16: 'ENTLADEN (16)',
425
- 17: 'PV + ENTLADEN (17)',
426
- 18: 'NETZ + ENTLADEN (18)',
427
- 19: 'PASSIV (19)',
428
- 20: 'AUSGESCHALTET (20)',
429
- 21: 'EIGENVERBRAUCH (21)',
430
- 22: 'NEUSTART (22)',
431
- 23: 'MAN. AUSGLEICHSLADUNG: LADEN (23)',
432
- 24: 'MAN. SULFATLADUNG: LADEN (24)',
433
- 25: 'SICHERHEITSLADUNG (25)',
434
- 26: 'AKKU-SCHUTZBETRIEB (26)',
435
- 27: 'EG FEHLER (27)',
436
- 28: 'EG LADEN (28)',
437
- 29: 'EG ENTLADEN (29)',
438
- 30: 'EG PASSIV (30)',
439
- 31: 'EG LADEN VERBOTEN (31)',
440
- 32: 'EG ENTLADEN VERBOTEN (32)',
441
- 33: 'NOTLADUNG (33)',
442
- 34: 'SOFTWAREAKTUALISIERUNG (34)',
443
- 35: 'FEHLER: NA-SCHUTZ (35)',
444
- 36: 'FEHLER: NA-SCHUTZ NETZ (36)',
445
- 37: 'FEHLER: NA-SCHUTZ HARDWARE (37)',
446
- 38: 'KEINE SERVERVERBINDUNG (38)',
447
- 39: 'BMS FEHLER (39)',
448
- 40: 'WARTUNG: FILTER (40)',
449
- 41: 'SCHLAFMODUS (41)',
450
- 42: 'WARTE AUF ÜBERSCHUSS (42)',
451
- 43: 'KAPAZITÄTSTEST: LADEN (43)',
452
- 44: 'KAPAZITÄTSTEST: ENTLADEN (44)',
453
- 45: 'MAN. SULFATLADUNG: WARTEN (45)',
454
- 46: 'MAN. SULFATLADUNG: FERTIG (46)',
455
- 47: 'MAN. SULFATLADUNG: FEHLER (47)',
456
- 48: 'AUSGLEICHSLADUNG: WARTEN (48)',
457
- 49: 'NOTLADUNG: FEHLER (49)',
458
- 50: 'MAN: AUSGLEICHSLADUNG: WARTEN (50)',
459
- 51: 'MAN: AUSGLEICHSLADUNG: FEHLER (51)',
460
- 52: 'MAN: AUSGLEICHSLADUNG: FERTIG (52)',
461
- 53: 'AUTO: SULFATLADUNG: WARTEN (53)',
462
- 54: 'LADESCHLUSSPHASE (54)',
463
- 55: 'BATTERIETRENNSCHALTER AUS (55)',
464
- 56: 'PEAK-SHAVING: WARTEN (56)',
465
- 57: 'FEHLER LADEGERAET (57)',
466
- 58: 'NPU-FEHLER (58)',
467
- 59: 'BMS OFFLINE (59)',
468
- 60: 'WARTUNGSLADUNG FEHLER (60)',
469
- 61: 'MAN. SICHERHEITSLADUNG FEHLER (61)',
470
- 62: 'SICHERHEITSLADUNG FEHLER (62)',
471
- 63: 'KEINE MASTERVERBINDUNG (63)',
472
- 64: 'LITHIUM SICHERHEITSMODUS AKTIV (64)',
473
- 65: 'LITHIUM SICHERHEITSMODUS BEENDET (65)',
474
- 66: 'FEHLER BATTERIESPANNUNG (66)',
475
- 67: 'BMS DC AUSGESCHALTET (67)',
476
- 68: 'NETZINITIALISIERUNG (68)',
477
- 69: 'NETZSTABILISIERUNG (69)',
478
- 70: 'FERNABSCHALTUNG (70)',
479
- 71: 'OFFPEAK-LADEN (71)',
480
- 72: 'FEHLER HALBBRÜCKE (72)',
481
- 73: 'BMS: FEHLER BETRIEBSTEMPERATUR (73)',
482
- 74: 'FACOTRY SETTINGS NICHT GEFUNDEN (74)',
483
- 75: 'NETZERSATZBETRIEB (75)',
484
- 76: 'NETZERSATZBETRIEB AKKU LEER (76)',
485
- 77: 'NETZERSATZBETRIEB FEHLER (77)',
486
- 78: 'INITIALISIERUNG (78)',
487
- 79: 'INSTALLATIONSMODUS (79)',
488
- 80: 'NETZAUSFALL (80)',
489
- 81: 'BMS UPDATE ERFORDERLICH (81)',
490
- 82: 'BMS KONFIGURATION ERFORDERLICH (82)',
491
- 83: 'ISOLATIONSTEST (83)',
492
- 84: 'SELBSTTEST (84)',
493
- 85: 'EXTERNE STEUERUNG (85)',
494
- 86: 'TEMPERATUR SENSOR FEHLER (86)',
495
- 87: 'NETZBETREIBER: LADEN GESPERRT (87)',
496
- 88: 'NETZBETREIBER: ENTLADEN GESPERRT (88)',
497
- 89: 'RESERVEKAPAZITÄT (89)',
498
- 90: 'SELBSTTEST FEHLER (90)',
499
- 91: 'ISOLATIONSFEHLER (91)',
500
- 92: 'PV-MODUS (92)',
501
- 93: 'FERNABSCHALTUNG NETZBETREIBER (93)',
502
- 94: 'FEHLER DRM0 (94)',
503
- 95: 'BATTERIEDIAGNOSE (95)',
504
- 96: 'BATTERIE BALANCIERUNG (96)',
505
- 97: 'SICHERHEITSENTLADUNG (97)'
506
- },
507
- 'STATISTIC.CURRENT_STATE.1': {
508
- 0: 'INITIALSTATE',
509
- 1: 'ERROR INVERTER COMMUNICATION',
510
- 2: 'ERROR ELECTRICY METER',
511
- 3: 'RIPPLE CONTROL RECEIVER',
512
- 4: 'INITIAL CHARGE',
513
- 5: 'MAINTENANCE CHARGE',
514
- 6: 'MAINTENANCE READY',
515
- 7: 'MAINTENANCE REQUIRED',
516
- 8: 'MAN. SAFETY CHARGE',
517
- 9: 'SAFETY CHARGE READY',
518
- 10: 'FULL CHARGE',
519
- 11: 'EQUALIZATION: CHARGE',
520
- 12: 'DESULFATATION: CHARGE',
521
- 13: 'BATTERY FULL',
522
- 14: 'CHARGE',
523
- 15: 'BATTERY EMPTY',
524
- 16: 'DISCHARGE',
525
- 17: 'PV + DISCHARGE',
526
- 18: 'GRID + DISCHARGE',
527
- 19: 'PASSIVE',
528
- 20: 'OFF',
529
- 21: 'OWN CONSUMPTION',
530
- 22: 'RESTART',
531
- 23: 'MAN. EQUALIZATION: CHARGE',
532
- 24: 'MAN. DESULFATATION: CHARGE',
533
- 25: 'SAFETY CHARGE',
534
- 26: 'BATTERY PROTECTION MODE',
535
- 27: 'EG ERROR',
536
- 28: 'EG CHARGE',
537
- 29: 'EG DISCHARGE',
538
- 30: 'EG PASSIVE',
539
- 31: 'EG PROHIBIT CHARGE',
540
- 32: 'EG PROHIBIT DISCHARGE',
541
- 33: 'EMERGANCY CHARGE',
542
- 34: 'SOFTWARE UPDATE',
543
- 35: 'NSP ERROR',
544
- 36: 'NSP ERROR: GRID',
545
- 37: 'NSP ERROR: HARDWRE',
546
- 38: 'NO SERVER CONNECTION',
547
- 39: 'BMS ERROR',
548
- 40: 'MAINTENANCE: FILTER',
549
- 41: 'SLEEPING MODE',
550
- 42: 'WAITING EXCESS',
551
- 43: 'CAPACITY TEST: CHARGE',
552
- 44: 'CAPACITY TEST: DISCHARGE',
553
- 45: 'MAN. DESULFATATION: WAIT',
554
- 46: 'MAN. DESULFATATION: READY',
555
- 47: 'MAN. DESULFATATION: ERROR',
556
- 48: 'EQUALIZATION: WAIT',
557
- 49: 'EMERGANCY CHARGE: ERROR',
558
- 50: 'MAN. EQUALIZATION: WAIT',
559
- 51: 'MAN. EQUALIZATION: ERROR',
560
- 52: 'MAN: EQUALIZATION: READY',
561
- 53: 'AUTO. DESULFATATION: WAIT',
562
- 54: 'ABSORPTION PHASE',
563
- 55: 'DC-SWITCH OFF',
564
- 56: 'PEAK-SHAVING: WAIT',
565
- 57: 'ERROR BATTERY INVERTER',
566
- 58: 'NPU-ERROR',
567
- 59: 'BMS OFFLINE',
568
- 60: 'MAINTENANCE CHARGE ERROR',
569
- 61: 'MAN. SAFETY CHARGE ERROR',
570
- 62: 'SAFETY CHARGE ERROR',
571
- 63: 'NO CONNECTION TO MASTER',
572
- 64: 'LITHIUM SAFE MODE ACTIVE',
573
- 65: 'LITHIUM SAFE MODE DONE',
574
- 66: 'BATTERY VOLTAGE ERROR',
575
- 67: 'BMS DC SWITCHED OFF',
576
- 68: 'GRID INITIALIZATION',
577
- 69: 'GRID STABILIZATION',
578
- 70: 'REMOTE SHUTDOWN',
579
- 71: 'OFFPEAK-CHARGE',
580
- 72: 'ERROR HALFBRIDGE',
581
- 73: 'BMS: ERROR OPERATING TEMPERATURE',
582
- 74: 'FACOTRY SETTINGS NOT FOUND',
583
- 75: 'BACKUP POWER MODE - ACTIVE',
584
- 76: 'BACKUP POWER MODE - BATTERY EMPTY',
585
- 77: 'BACKUP POWER MODE ERROR',
586
- 78: 'INITIALISING',
587
- 79: 'INSTALLATION MODE',
588
- 80: 'GRID OFFLINE',
589
- 81: 'BMS UPDATE NEEDED',
590
- 82: 'BMS CONFIGURATION NEEDED',
591
- 83: 'INSULATION TEST',
592
- 84: 'SELFTEST',
593
- 85: 'EXTERNAL CONTROL',
594
- 86: 'ERROR: TEMPERATURESENSOR',
595
- 87: 'GRID OPERATOR: CHARGE PROHIBITED',
596
- 88: 'GRID OPERATOR: DISCHARGE PROHIBITED',
597
- 89: 'SPARE CAPACITY',
598
- 90: 'SELFTEST ERROR',
599
- 91: 'EARTH FAULT',
600
- 92: 'PV-MODE',
601
- 93: 'REMOTE SHUTDOWN GRID OPERATOR',
602
- 94: 'ERROR DRM0',
603
- 95: 'BATTERY DIAGNOSIS',
604
- 96: 'BATTERY BALANCING',
605
- 97: 'SAFETY DISCHARGE'
606
- },
607
- 'STATISTIC.CURRENT_STATE.2': {
608
- 0: 'STATO INIZIALE',
609
- 1: 'ERRORE COMMUNICAZIONE INVERTER',
610
- 2: 'ERRORE WATTMETRO',
611
- 3: 'RICEVITORE RIPPLE CONTROL',
612
- 4: 'PRIMA CARICA',
613
- 5: 'CARICA DI MANTENIMENTO',
614
- 6: 'CARICA DI MANTENIMENTO COMPLETATA',
615
- 7: 'MANUTENZIONE: NECESSARIA',
616
- 8: 'CARICA DI SICUREZZA MANUALE',
617
- 9: 'CARICA DI SICUREZZA COMPLETA',
618
- 10: 'CARICA COMPLETA',
619
- 11: 'CARICA DI EQUALIZZAZIONE',
620
- 12: 'CARICA DI DESOLFATAZIONE',
621
- 13: 'ACCUMULATORE CARICO',
622
- 14: 'CARICA',
623
- 15: 'ACCUMULATORE SCARICO',
624
- 16: 'SCARICA',
625
- 17: 'FV + SCARICA',
626
- 18: 'RETE + SCARICA',
627
- 19: 'PASSIVO',
628
- 20: 'SPENTO',
629
- 21: 'AUTOCONSUMO',
630
- 22: 'RIAVVIO',
631
- 23: 'CARICA DI EQUALIZZAZIONE MANUALE',
632
- 24: 'CARICA DI DESOLFATAZIONE MANUALE',
633
- 25: 'CARICA DI SICUREZZA',
634
- 26: 'MODALITÀ PROTEZIONE ACCUMULATORE',
635
- 27: 'ERRORE EG',
636
- 28: 'EG: CARICA',
637
- 29: 'EG: SCARICA',
638
- 30: 'EG: PASSIVO',
639
- 31: 'CARICA EG PROIBITA',
640
- 32: 'SCARICAMENTO EG PROIBITO',
641
- 33: 'CARICA D\'EMERGENZA',
642
- 34: 'AGGIORNAMENTO SOFTWARE',
643
- 35: 'ERRORE SPI',
644
- 36: 'ERRORE SPI: RETE ',
645
- 37: 'ERRORE SPI: HARDWARE ',
646
- 38: 'NESSUNA CONNESSIONE AL SERVER',
647
- 39: 'ERRORE BMS',
648
- 40: 'SOSTITUZIONE DEL FILTRO NECESSARIA',
649
- 41: 'BATTERIA AL LITIO SPENTA',
650
- 42: 'IN ATTESA DI SURPLUS ENERGETICO',
651
- 43: 'TEST DI CAPACITÀ: CARICA',
652
- 44: 'TEST DI CAPACITÀ: SCARICA',
653
- 45: 'CARICA DI DESOLFATAZIONE MANUALE: ATTESA',
654
- 46: 'CARICA DI DESOLFATAZIONE MANUALE: COMPLETA',
655
- 47: 'CARICA DI DESOLFATAZIONE MANUALE: ERRORE',
656
- 48: 'EQUALIZZAZIONE: ATTESA',
657
- 49: 'CARICA D\'EMERGENZA: ERRORE',
658
- 50: 'EQUALIZZAZIONE MANUALE: ATTESA',
659
- 51: 'EQUALIZZAZIONE MANUALE: ERRORE',
660
- 52: 'EQUALIZZAZIONE MANUALE: COMPLETA',
661
- 53: 'CARICA DI DESOLFATAZIONE: ATTESA',
662
- 54: 'FASE FINALE CARICA',
663
- 55: 'SEZIONATORE BATTERIA OFF',
664
- 56: 'PEAK SHAVING: ATTESA',
665
- 57: 'ERRORE DISPOSITIVO DI CARICA',
666
- 58: 'ERRORE NPU',
667
- 59: 'BMS DISCONESSO',
668
- 60: 'CARICA DI MANUTENZIONE ERRORE',
669
- 61: 'CARICA DI SICUREZZA MANUALE ERRORE',
670
- 62: 'CARICA DI SICUREZZA ERRORE',
671
- 63: 'NESSUNA CONNESSIONE MASTER',
672
- 64: 'MODALITA DI PROTEZIONE LITIO ATTIVA',
673
- 65: 'MODALITA DI PROTEZIONE LITIO COMPLETA',
674
- 66: 'ERORE DI TENSIONE BATTERIA',
675
- 67: 'BMS DC SPENTO',
676
- 68: 'INIZIALIZZAZIONE DELLA RETE',
677
- 69: 'STABILIZZAZIONE DELLA RETE',
678
- 70: 'ARRESTO REMOTO',
679
- 71: 'OFFPEAK-CARICA',
680
- 72: 'ERRORE MEZZO PONTE',
681
- 73: 'BMS: ERRORE TEMPERATURA DI FUNZIONAMENTO',
682
- 74: 'FACOTRY SETTINGS NON TROVATO',
683
- 75: 'FUNZIONAMENTO ISOLATO',
684
- 76: 'FUNZIONAMENTO ISOLATO ACCUMULATORE SCARICO',
685
- 77: 'ERORE DI FUNZIONAMENTO ISOLATO',
686
- 78: 'INIZIALIZZAZIONE',
687
- 79: 'MODALITA INSTALLAZIONE',
688
- 80: 'RETE OFFLINE',
689
- 81: 'AGGIORNAMENTO BMS NECESSARIO',
690
- 82: 'CONFIGURAZIONE BMS NECESSARIA',
691
- 83: 'TEST DI ISOLAMENTO',
692
- 84: 'AUTOTEST',
693
- 85: 'CONTROLLO ESTERNO',
694
- 86: 'ERRORE SENSORE DI TEMPERATURA',
695
- 87: 'OPERATORE DI RETE: CARICA BLOCCATA',
696
- 88: 'OPERATORE DI RETE: SCARICA BLOCCATA',
697
- 89: 'CAPACITA INUTILIZZATA',
698
- 90: 'ERRORE DI AUTOTEST',
699
- 91: 'FAGLIA TERRESTRE',
700
- 92: 'MODALITÀ FOTOVOLTAICA',
701
- 93: 'SPEGNIMENTO A DISTANZA OPERATORE DI RETE',
702
- 94: 'ERRORE DRM0',
703
- 95: 'DIAGNOSI DELLA BATTERIA',
704
- 96: 'BILANCIAMENTO DELLA BATTERIA',
705
- 97: 'SCARICO DI SICUREZZA'
706
- },
707
407
  'WALLBOX.STATE.0' : {
708
408
  161: 'Warte auf E-Fahrzeug (161)',
709
409
  177: 'E-Fahrzeug fragt Ladung an (177)',
package/main.js CHANGED
@@ -23,13 +23,13 @@ const apiSystemsUrl = apiUrl + "/anlagen";
23
23
  const apiKnownSystems = []
24
24
 
25
25
  let apiConnected = false;
26
+ let lalaConnected = false;
26
27
  let apiLoginToken = "";
27
28
  let retry = 0; // retry-counter
28
29
  let retryLowPrio = 0; // retry-counter
29
30
  let connectVia = "http://";
30
31
 
31
- const allKnownObjects = new Set(["BAT1","BAT1OBJ1","BAT1OBJ2","BAT1OBJ3","BMS","BMS_PARA","CASC","DEBUG","DISPLAY","ENERGY","FACTORY","FEATURES","FILE","GRIDCONFIG","ISKRA","LOG","PM1","PM1OBJ1","PM1OBJ2","PV1","PWR_UNIT","RTC","SELFTEST_RESULTS","SOCKETS","STATISTIC","STECA","SYS_UPDATE","TEMPMEASURE","TEST","UPDATE","WALLBOX","WIZARD"]);
32
- // STATISTICS is faded out by senec. Keeping it while we still have machines getting it. This will also deprecate all calculated valued in the "_calc" branch.
32
+ const allKnownObjects = new Set(["BAT1","BAT1OBJ1","BMS","BMS_PARA","BMZ_CURRENT_LIMITS","CASC","CELL_DEVIATION_ROC","CURRENT_IMBALANCE_CONTROL","DEBUG","ENERGY","FACTORY","FEATURES","GRIDCONFIG","ISKRA","LOG","PM1","PM1OBJ1","PM1OBJ2","PV1","PWR_UNIT","RTC","SENEC_IO_INPUT","SENEC_IO_OUTPUT","SELFTEST_RESULTS","SOCKETS","STECA","SYS_UPDATE","TEMPMEASURE","TEST","UPDATE","WALLBOX","WIZARD"]);
33
33
 
34
34
  const highPrioObjects = new Map;
35
35
  let lowPrioForm = "";
@@ -63,14 +63,32 @@ class Senec extends utils.Adapter {
63
63
  this.setState('info.connection', false, true);
64
64
  try {
65
65
  await this.checkConfig();
66
- await this.initPollSettings();
67
- await this.checkConnection();
68
- await this.initSenecAppApi();
69
- if (apiConnected) await this.getApiSystems();
70
- await this.pollSenec(true, 0); // highPrio
71
- await this.pollSenec(false, 0); // lowPrio
72
- if (apiConnected) await this.pollSenecAppApi(0); // App API
73
- this.setState('info.connection', true, true);
66
+ if (this.config.lala_use) {
67
+ this.log.info("Usage of lala.cgi configured.");
68
+ await this.initPollSettings();
69
+ await this.checkConnection();
70
+ if (lalaConnected) {
71
+ await this.pollSenec(true, 0); // highPrio
72
+ await this.pollSenec(false, 0); // lowPrio
73
+ }
74
+ } else {
75
+ this.log.warn("Usage of lala.cgi not configured. Only polling SENEC App API if configured.");
76
+ }
77
+ if (this.config.api_use) {
78
+ this.log.info("Usage of SENEC App API configured.");
79
+ await this.initSenecAppApi();
80
+ if (apiConnected) {
81
+ await this.getApiSystems();
82
+ await this.pollSenecAppApi(0); // App API
83
+ }
84
+ } else {
85
+ this.log.warn("Usage of SENEC App API not configured. Only polling appliance via local network if configured.");
86
+ }
87
+ if (lalaConnected || apiConnected) {
88
+ this.setState('info.connection', true, true);
89
+ } else {
90
+ this.log.error("Neither local connection nor API connection configured. Please check config!");
91
+ }
74
92
  } catch (error) {
75
93
  this.log.error(error);
76
94
  this.setState('info.connection', false, true);
@@ -130,11 +148,6 @@ class Senec extends utils.Adapter {
130
148
  ["FREQ","U_AC","I_AC","P_AC","P_TOTAL"].forEach(item => objectsSet.add(item));
131
149
  if (this.config.disclaimer && this.config.highPrio_PM1OBJ2_active) this.addUserDps(value, objectsSet, this.config.highPrio_PM1OBJ2);
132
150
  break;
133
- case "STATISTIC":
134
- // soon to be deprecated
135
- ["LIVE_GRID_EXPORT","LIVE_GRID_IMPORT","LIVE_HOUSE_CONS","LIVE_PV_GEN","LIVE_BAT_CHARGE_MASTER","LIVE_BAT_DISCHARGE_MASTER"].forEach(item => objectsSet.add(item));
136
- if (this.config.disclaimer && this.config.highPrio_STATISTIC_active) this.addUserDps(value, objectsSet, this.config.highPrio_STATISTIC);
137
- break;
138
151
  case "WALLBOX":
139
152
  if (this.config.disclaimer && this.config.highPrio_WALLBOX_active) this.addUserDps(value, objectsSet, this.config.highPrio_WALLBOX);
140
153
  break;
@@ -144,15 +157,6 @@ class Senec extends utils.Adapter {
144
157
  case "BAT1OBJ1":
145
158
  if (this.config.disclaimer && this.config.highPrio_BAT1OBJ1_active) this.addUserDps(value, objectsSet, this.config.highPrio_BAT1OBJ1);
146
159
  break;
147
- case "BAT1OBJ2":
148
- if (this.config.disclaimer && this.config.highPrio_BAT1OBJ2_active) this.addUserDps(value, objectsSet, this.config.highPrio_BAT2OBJ1);
149
- break;
150
- case "BAT1OBJ3":
151
- if (this.config.disclaimer && this.config.highPrio_BAT1OBJ3_active) this.addUserDps(value, objectsSet, this.config.highPrio_BAT3OBJ1);
152
- break;
153
- case "BAT1OBJ4":
154
- if (this.config.disclaimer && this.config.highPrio_BAT1OBJ4_active) this.addUserDps(value, objectsSet, this.config.highPrio_BAT4OBJ1);
155
- break;
156
160
  case "TEMPMEASURE":
157
161
  if (this.config.disclaimer && this.config.highPrio_TEMPMEASURE_active) this.addUserDps(value, objectsSet, this.config.highPrio_TEMPMEASURE);
158
162
  break;
@@ -242,6 +246,7 @@ class Senec extends utils.Adapter {
242
246
  this.log.info('connecting to Senec: ' + url);
243
247
  const body = await this.doGet(url, form, this, this.config.pollingTimeout, true);
244
248
  this.log.info('connected to Senec: ' + url);
249
+ lalaConnected = true;
245
250
  } catch (error) {
246
251
  throw new Error("Error connecting to Senec (IP: " + connectVia + this.config.senecip + "). Exiting! (" + error + "). Try to toggle https-mode in settings and check FQDN of SENEC appliance.");
247
252
  }
@@ -468,6 +473,7 @@ class Senec extends utils.Adapter {
468
473
  * Decodes Statistik information from SENEC App API
469
474
  */
470
475
  async decodeStatistik(system, obj, period) {
476
+ if (obj == null || obj == undefined || obj.aggregation == null || obj.aggregation == undefined) return; // could happen (e.g.) if we pull information for "last year" when the appliance isn't that old yet
471
477
  const pfx = "_api.Anlagen." + system + ".Statistik." + period + ".";
472
478
  for (const[key, value] of Object.entries(obj.aggregation)) {
473
479
  // only reading 'aggregation' - no interest in fine granular information
@@ -620,7 +626,6 @@ class Senec extends utils.Adapter {
620
626
  val: value,
621
627
  ack: true
622
628
  });
623
- await this.checkUpdateSelfStat(name); // soon to be deprecated
624
629
  await this.doDecode(name, value);
625
630
  }
626
631
 
@@ -646,16 +651,6 @@ class Senec extends utils.Adapter {
646
651
  await this.doState(name + "_Text", trans, desc, "", true);
647
652
  }
648
653
  }
649
-
650
- /**
651
- * Helper routine
652
- */
653
- async checkUpdateSelfStat(name) {
654
- // soon to be deprecated
655
- if (name === "STATISTIC.LIVE_GRID_EXPORT" || name === "STATISTIC.LIVE_GRID_IMPORT" || name === "STATISTIC.LIVE_HOUSE_CONS" || name === "STATISTIC.LIVE_PV_GEN" || name === "STATISTIC.LIVE_BAT_CHARGE_MASTER" || name === "STATISTIC.LIVE_BAT_DISCHARGE_MASTER") {
656
- await this.updateSelfStat(name);
657
- }
658
- }
659
654
 
660
655
  /**
661
656
  * evaluates data polled from SENEC system.
@@ -684,109 +679,6 @@ class Senec extends utils.Adapter {
684
679
  }
685
680
  }
686
681
  }
687
-
688
- async updateSelfStat(name, value) {
689
- // soon to be deprecated
690
- await this.updateSelfStatHelper(name, value, ".today", ".yesterday", ".refValue", "Day", getCurDay());
691
- await this.updateSelfStatHelper(name, value, ".week", ".lastWeek", ".refValueWeek", "Week", getCurWeek());
692
- await this.updateSelfStatHelper(name, value, ".month", ".lastMonth", ".refValueMonth", "Month", getCurMonth());
693
- await this.updateSelfStatHelper(name, value, ".year", ".lastYear", ".refValueYear", "Year", getCurYear());
694
- return;
695
- }
696
-
697
- async updateSelfStatHelper(name, value, today, yesterday, refValue, day, curDay) {
698
- // soon to be deprecated
699
- const key = "_calc." + name.substring(10);
700
-
701
- const refDayObj = await this.getStateAsync(key + ".ref" + day);
702
- const refDay = refDayObj ? refDayObj.val : -1;
703
-
704
- const valCurObj = await this.getStateAsync(name);
705
- const valCur = valCurObj ? valCurObj.val : 0;
706
-
707
- const valRefObj = await this.getStateAsync(key + refValue);
708
- const valRef = valRefObj ? valRefObj.val : 0;
709
- const valTodayObj = await this.getStateAsync(key + today);
710
- const valToday = valTodayObj ? valTodayObj.val : 0;
711
-
712
- const descToday = (state_attr[key + today] !== undefined) ? state_attr[key + today].name : key;
713
- const unitToday = (state_attr[key + today] !== undefined) ? state_attr[key + today].unit : "";
714
- const descYesterday = (state_attr[key + yesterday] !== undefined) ? state_attr[key + yesterday].name : key;
715
- const unitYesterday = (state_attr[key + yesterday] !== undefined) ? state_attr[key + yesterday].unit : "";
716
- const descRef = (state_attr[key + refValue] !== undefined) ? state_attr[key + refValue].name : key;
717
- const unitRef = (state_attr[key + refValue] !== undefined) ? state_attr[key + refValue].unit : "";
718
- const descRefDay = (state_attr[key + ".ref" + day] !== undefined) ? state_attr[key + ".ref" + day].name : key;
719
- const unitRefDay = (state_attr[key + ".ref" + day] !== undefined) ? state_attr[key + ".ref" + day].unit : "";
720
-
721
- if (refDay != curDay) {
722
- this.log.debug("(Calc) New " + day + " (or first value seen). Updating stat data for: " + name.substring(10));
723
- // Change of day
724
- await this.doState(key + ".ref" + day, curDay, descRefDay, unitRefDay, false);
725
- await this.doState(key + yesterday, valToday, descYesterday, unitYesterday, false);
726
- await this.doState(key + today, 0, descToday, unitToday, false);
727
- if (valRef < valCur) {
728
- await this.doState(key + refValue, valCur, descRef, unitRef, true);
729
- } else {
730
- this.log.warn("(Calc) Not updating reference value for: " + name.substring(10) + "! Old RefValue (" + valRef + ") >= new RefValue (" + valCur + "). Impossible situation. If this is intentional, please update via admin!");
731
- }
732
- } else {
733
- this.log.debug("(Calc) Updating " + day +" value for: " + name.substring(10) + ": " + Number((valCur - valRef).toFixed(2)));
734
- // update today's value
735
- await this.doState(key + today, Number((valCur - valRef).toFixed(2)), descToday, unitToday, false);
736
- }
737
-
738
- if (name === "STATISTIC.LIVE_HOUSE_CONS") await this.updateAutarkyHelper(today, yesterday, day, curDay); // otherwise we get way too many updates
739
-
740
- }
741
-
742
- async updateAutarkyHelper(today, yesterday, day, curDay) {
743
- // soon to be deprecated
744
- const key = "_calc.Autarky";
745
-
746
- // reference object to decide on change of day
747
- const refDayObj = await this.getStateAsync(key + ".ref" + day);
748
- const refDay = refDayObj ? refDayObj.val : -1;
749
- // current day's value (needed in case of day-change)
750
- const valTodayObj = await this.getStateAsync(key + today);
751
- const valToday = valTodayObj ? valTodayObj.val : 0;
752
-
753
- // reading values required for calc
754
- const valBatChargeObj = await this.getStateAsync("_calc.LIVE_BAT_CHARGE_MASTER" + today);
755
- const valBatCharge = valBatChargeObj ? valBatChargeObj.val : 0;
756
- const valBatDischargeObj = await this.getStateAsync("_calc.LIVE_BAT_DISCHARGE_MASTER" + today);
757
- const valBatDischarge = valBatDischargeObj ? valBatDischargeObj.val : 0;
758
- const valGridExpObj = await this.getStateAsync("_calc.LIVE_GRID_EXPORT" + today);
759
- const valGridExp = valGridExpObj ? valGridExpObj.val : 0;
760
- const valGridImpObj = await this.getStateAsync("_calc.LIVE_GRID_IMPORT" + today);
761
- const valGridImp = valGridImpObj ? valGridImpObj.val : 0;
762
- const valHouseConsObj = await this.getStateAsync("_calc.LIVE_HOUSE_CONS" + today);
763
- const valHouseCons = valHouseConsObj ? valHouseConsObj.val : 1;
764
- const valPVGenObj = await this.getStateAsync("_calc.LIVE_PV_GEN" + today);
765
- const valPVGen = valPVGenObj ? valPVGenObj.val : 0;
766
-
767
- const descToday = (state_attr[key + today] !== undefined) ? state_attr[key + today].name : key;
768
- const unitToday = (state_attr[key + today] !== undefined) ? state_attr[key + today].unit : "%";
769
- const descYesterday = (state_attr[key + yesterday] !== undefined) ? state_attr[key + yesterday].name : key;
770
- const unitYesterday = (state_attr[key + yesterday] !== undefined) ? state_attr[key + yesterday].unit : "%";
771
- const descRefDay = (state_attr[key + ".ref" + day] !== undefined) ? state_attr[key + ".ref" + day].name : key;
772
- const unitRefDay = (state_attr[key + ".ref" + day] !== undefined) ? state_attr[key + ".ref" + day].unit : "";
773
-
774
- if (refDay != curDay) {
775
- this.log.debug("(Autarky) New " + day + " (or first value seen). Updating Autarky data for: " + key + " " + day);
776
- // Change of day
777
- await this.doState(key + ".ref" + day, curDay, descRefDay, unitRefDay, false);
778
- await this.doState(key + yesterday, valToday, descYesterday, unitYesterday, false);
779
- // await this.doState(key + today, 0, descToday, unitToday, false); // we don't need to reset autarky to 0 because it is calculated by reference values.
780
- // instead do the regular calc right after the change of day
781
- }
782
- // update today's value - but beware of div/0
783
- var newVal = 0;
784
- if (valHouseCons > 0) {
785
- newVal = Number((((valPVGen - valGridExp - valBatCharge + valBatDischarge) / valHouseCons) * 100).toFixed(0));
786
- this.log.debug("(Autarky) Updating Autarky " + day +" value for: " + key + today + ": " + newVal);
787
- await this.doState(key + today, newVal, descToday, unitToday, false);
788
- }
789
- }
790
682
 
791
683
  }
792
684
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.senec",
3
- "version": "1.6.5",
3
+ "version": "1.6.7",
4
4
  "description": "Senec Home",
5
5
  "author": {
6
6
  "name": "NoBl",
@@ -19,6 +19,9 @@
19
19
  "solar",
20
20
  "photovoltaic"
21
21
  ],
22
+ "engines": {
23
+ "node": ">=16.0.0"
24
+ },
22
25
  "repository": {
23
26
  "type": "git",
24
27
  "url": "https://github.com/nobl/ioBroker.senec.git"
@@ -37,17 +40,17 @@
37
40
  "@tsconfig/node14": "^14.1.0",
38
41
  "@types/chai": "^4.3.6",
39
42
  "@types/chai-as-promised": "^7.1.6",
40
- "@types/mocha": "^10.0.1",
41
- "@types/node": "^20.5.9",
42
- "@types/proxyquire": "^1.3.28",
43
+ "@types/mocha": "^10.0.2",
44
+ "@types/node": "^20.8.0",
45
+ "@types/proxyquire": "^1.3.29",
43
46
  "@types/sinon": "^10.0.16",
44
47
  "@types/sinon-chai": "^3.2.9",
45
- "chai": "^4.3.8",
48
+ "chai": "^4.3.10",
46
49
  "chai-as-promised": "^7.1.1",
47
- "eslint": "^8.48.0",
50
+ "eslint": "^8.50.0",
48
51
  "mocha": "^10.2.0",
49
52
  "proxyquire": "^2.1.3",
50
- "sinon": "^15.2.0",
53
+ "sinon": "^16.0.0",
51
54
  "sinon-chai": "^3.7.0",
52
55
  "typescript": "~5.2.2"
53
56
  },