iobroker.senec 1.3.4 → 1.3.5-beta

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 CHANGED
@@ -370,6 +370,10 @@ This channel contains calculated values. Currently these are day/week/month/year
370
370
  *Read-only number, which designates the number of wallbox [0..3]. This is only available on systems with configured wallboxes.*
371
371
 
372
372
  ## Changelog
373
+ ### 1.3.5-beta (NoBl)
374
+ * Added more state attributes (if you have updated descriptions or anything, please open an issue!)
375
+ * Workaround in case SENEC reports bogus request data
376
+
373
377
  ### 1.3.4 (NoBl)
374
378
  * Moved from request to axios
375
379
  * Added more state attributes (if you have updated descriptions or anything, please open an issue!)
package/io-package.json CHANGED
@@ -1,8 +1,20 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "senec",
4
- "version": "1.3.4",
4
+ "version": "1.3.5-beta",
5
5
  "news": {
6
+ "1.3.5-beta": {
7
+ "en": "Added more state attributes (if you have updated descriptions or anything, please open an issue!), Workaround in case SENEC reports bogus request data",
8
+ "de": "Weitere Beschreibungen für Datenpunkte hinzugefügt (wenn Sie hierzu Updates, fehlende Datenpunkte, etc haben, öffnen Sie bitte ein Ticket auf github; Problemumgehung für den Fall, dass SENEC gefälschte Anfragedaten meldet",
9
+ "ru": "Добавлено больше атрибутов состояния (если вы обновили описания или что-то еще, пожалуйста, откройте проблему!), Обходной путь в случае, если SENEC сообщает о фиктивных данных запроса",
10
+ "pt": "Adicionados mais atributos de estado (se você atualizou as descrições ou qualquer coisa, abra um problema!), Solução alternativa caso a SENEC relate dados de solicitação falsos",
11
+ "nl": "Meer statusattributen toegevoegd (als je beschrijvingen hebt bijgewerkt of iets dergelijks, open dan een probleem!), Tijdelijke oplossing voor het geval SENEC valse verzoekgegevens meldt",
12
+ "fr": "Ajout de plus d'attributs d'état (si vous avez mis à jour des descriptions ou quoi que ce soit, veuillez ouvrir un problème !), Solution de contournement au cas où SENEC signale de fausses données de demande",
13
+ "it": "Aggiunti più attributi di stato (se hai descrizioni aggiornate o altro, apri un problema!), Soluzione alternativa nel caso in cui SENEC segnali dati di richiesta fasulli",
14
+ "es": "Se agregaron más atributos de estado (si tiene descripciones actualizadas o algo, ¡abra un problema!), Solución alternativa en caso de que SENEC informe datos de solicitud falsos",
15
+ "pl": "Dodano więcej atrybutów stanu (jeśli zaktualizowałeś opisy lub cokolwiek, otwórz problem!), Obejście w przypadku, gdy SENEC zgłosi fałszywe dane żądania",
16
+ "zh-cn": "添加了更多的状态属性(如果您有更新的描述或任何内容,请打开一个问题!),以防 SENEC 报告虚假请求数据的解决方法"
17
+ },
6
18
  "1.3.4": {
7
19
  "en": "Moved from request to axios, Added more state attributes (if you have updated descriptions or anything, please open an issue!)",
8
20
  "de": "Poll von request zu axios geändert, weitere Zustandsattribute hinzugefügt (wenn Sie aktuellere Beschreibungen, ... haben, bitte issue auf GitHub eröffnen!)",
package/lib/state_attr.js CHANGED
@@ -872,6 +872,14 @@ const state_attr = {
872
872
  datetype: false,
873
873
  iptype: false,
874
874
  multiply: 1
875
+ },
876
+ 'BAT1.DRM0_ASSERT': {
877
+ name: 'DRM0_ASSERT',
878
+ unit: '',
879
+ booltype: false,
880
+ datetype: false,
881
+ iptype: false,
882
+ multiply: 1
875
883
  },
876
884
  'BAT1.CEI_LIMIT': {
877
885
  name: 'CEI_LIMIT',
@@ -2168,6 +2176,14 @@ const state_attr = {
2168
2176
  datetype: false,
2169
2177
  iptype: false,
2170
2178
  multiply: 1
2179
+ },
2180
+ 'BMS.MANUFACTURER': {
2181
+ name: 'Manufacturer',
2182
+ unit: '',
2183
+ booltype: false,
2184
+ datetype: false,
2185
+ iptype: false,
2186
+ multiply: 1
2171
2187
  },
2172
2188
  'BMS.MAX_CELL_VOLTAGE': {
2173
2189
  name: 'Max Cell Voltage',
@@ -2216,6 +2232,22 @@ const state_attr = {
2216
2232
  datetype: false,
2217
2233
  iptype: false,
2218
2234
  multiply: 1
2235
+ },
2236
+ 'BMS.NOM_CHARGEPOWER_MODULE': {
2237
+ name: 'Nominal Chargepower Module',
2238
+ unit: 'W',
2239
+ booltype: false,
2240
+ datetype: false,
2241
+ iptype: false,
2242
+ multiply: 1
2243
+ },
2244
+ 'BMS.NOM_DISCHARGEPOWER_MODULE': {
2245
+ name: 'Nominal Dischargepower Module',
2246
+ unit: 'W',
2247
+ booltype: false,
2248
+ datetype: false,
2249
+ iptype: false,
2250
+ multiply: 1
2219
2251
  },
2220
2252
  'BMS.NR_ACTIVE': {
2221
2253
  name: 'NR_ACTIVE',
@@ -2416,6 +2448,22 @@ const state_attr = {
2416
2448
  datetype: false,
2417
2449
  iptype: false,
2418
2450
  multiply: 1
2451
+ },
2452
+ 'CASC.BATPOWERSUM': {
2453
+ name: 'Battery power sum',
2454
+ unit: 'W',
2455
+ booltype: false,
2456
+ datetype: false,
2457
+ iptype: false,
2458
+ multiply: 1
2459
+ },
2460
+ 'CASC.POWER': {
2461
+ name: 'Power',
2462
+ unit: 'W',
2463
+ booltype: false,
2464
+ datetype: false,
2465
+ iptype: false,
2466
+ multiply: 1
2419
2467
  },
2420
2468
  'CASC.POWER0': {
2421
2469
  name: 'CASC.POWER0',
@@ -2464,6 +2512,30 @@ const state_attr = {
2464
2512
  datetype: false,
2465
2513
  iptype: false,
2466
2514
  multiply: 1
2515
+ },
2516
+ 'CASC.PVGEN': {
2517
+ name: 'PV generation',
2518
+ unit: 'W',
2519
+ booltype: false,
2520
+ datetype: false,
2521
+ iptype: false,
2522
+ multiply: 1
2523
+ },
2524
+ 'CASC.PVMASTER': {
2525
+ name: 'PV master',
2526
+ unit: '',
2527
+ booltype: false,
2528
+ datetype: false,
2529
+ iptype: false,
2530
+ multiply: 1
2531
+ },
2532
+ 'CASC.SOC': {
2533
+ name: 'SOC (State of charge)',
2534
+ unit: '%',
2535
+ booltype: false,
2536
+ datetype: false,
2537
+ iptype: false,
2538
+ multiply: 1
2467
2539
  },
2468
2540
  'CASC.SOC0': {
2469
2541
  name: 'CASC.SOC0',
@@ -2512,6 +2584,14 @@ const state_attr = {
2512
2584
  datetype: false,
2513
2585
  iptype: false,
2514
2586
  multiply: 1
2587
+ },
2588
+ 'CASC.STATE': {
2589
+ name: 'State',
2590
+ unit: '',
2591
+ booltype: false,
2592
+ datetype: false,
2593
+ iptype: false,
2594
+ multiply: 1
2515
2595
  },
2516
2596
  'CASC.STATE0': {
2517
2597
  name: 'CASC.STATE0',
@@ -2560,6 +2640,14 @@ const state_attr = {
2560
2640
  datetype: false,
2561
2641
  iptype: false,
2562
2642
  multiply: 1
2643
+ },
2644
+ 'CASC.TARGET': {
2645
+ name: 'Target',
2646
+ unit: '',
2647
+ booltype: false,
2648
+ datetype: false,
2649
+ iptype: false,
2650
+ multiply: 1
2563
2651
  },
2564
2652
  'CASC.TARGET0': {
2565
2653
  name: 'CASC.TARGET0',
@@ -2728,6 +2816,14 @@ const state_attr = {
2728
2816
  datetype: false,
2729
2817
  iptype: false,
2730
2818
  multiply: 1
2819
+ },
2820
+ 'DEBUG.SECTIONS': {
2821
+ name: 'Sections',
2822
+ unit: '',
2823
+ booltype: false,
2824
+ datetype: false,
2825
+ iptype: false,
2826
+ multiply: 1
2731
2827
  },
2732
2828
  'DEBUG.STACK_MONITOR': {
2733
2829
  name: 'DEBUG.STACK_MONITOR',
@@ -2833,7 +2929,7 @@ const state_attr = {
2833
2929
  iptype: false,
2834
2930
  multiply: 1
2835
2931
  },
2836
- 'ENERGY.FORCE_FULL_CHARGE': {
2932
+ 'ENERGY.FORCE_FULL_CHARGE': {
2837
2933
  name: 'Force Full Charge',
2838
2934
  unit: '',
2839
2935
  booltype: true,
@@ -2841,6 +2937,14 @@ const state_attr = {
2841
2937
  iptype: false,
2842
2938
  multiply: 1
2843
2939
  },
2940
+ 'ENERGY.CAPTESTMODULE': {
2941
+ name: 'Capacity Test Module',
2942
+ unit: '',
2943
+ booltype: true,
2944
+ datetype: false,
2945
+ iptype: false,
2946
+ multiply: 1
2947
+ },
2844
2948
  'ENERGY.GRID_POWER_OFFSET': {
2845
2949
  name: 'GRID_POWER_OFFSET',
2846
2950
  unit: '',
@@ -3297,10 +3401,18 @@ const state_attr = {
3297
3401
  iptype: false,
3298
3402
  multiply: 1
3299
3403
  },
3300
- 'ENERGY.OFFPEAK_RUNNING': {
3301
- name: 'Offpeak Running',
3302
- unit: '',
3303
- booltype: true,
3404
+ 'ENERGY.OFFPEAK_CURRENT': {
3405
+ name: 'Offpeak Current',
3406
+ unit: 'A',
3407
+ booltype: false,
3408
+ datetype: false,
3409
+ iptype: false,
3410
+ multiply: 1
3411
+ },
3412
+ 'ENERGY.OFFPEAK_POWER': {
3413
+ name: 'Offpeak Power',
3414
+ unit: 'W',
3415
+ booltype: false,
3304
3416
  datetype: false,
3305
3417
  iptype: false,
3306
3418
  multiply: 1
@@ -3536,6 +3648,14 @@ const state_attr = {
3536
3648
  datetype: false,
3537
3649
  iptype: false,
3538
3650
  multiply: 1
3651
+ },
3652
+ 'FACTORY.DESIGN_CAPACITY': {
3653
+ name: 'Design capactiy',
3654
+ unit: 'kWh',
3655
+ booltype: false,
3656
+ datetype: false,
3657
+ iptype: false,
3658
+ multiply: 0.001
3539
3659
  },
3540
3660
  'FACTORY.FAC_SANITY': {
3541
3661
  name: 'FAC_SANITY',
@@ -3544,6 +3664,22 @@ const state_attr = {
3544
3664
  datetype: false,
3545
3665
  iptype: false,
3546
3666
  multiply: 1
3667
+ },
3668
+ 'FACTORY.MAX_CHARGE_POWER_DC': {
3669
+ name: 'maximum charge power DC',
3670
+ unit: 'W',
3671
+ booltype: false,
3672
+ datetype: false,
3673
+ iptype: false,
3674
+ multiply: 1
3675
+ },
3676
+ 'FACTORY.MAX_DISCHARGE_POWER_DC': {
3677
+ name: 'maximum discharge power DC',
3678
+ unit: 'W',
3679
+ booltype: false,
3680
+ datetype: false,
3681
+ iptype: false,
3682
+ multiply: 1
3547
3683
  },
3548
3684
  'FACTORY.PM_TYPE': {
3549
3685
  name: 'PM_TYPE',
@@ -3961,10 +4097,114 @@ const state_attr = {
3961
4097
  iptype: false,
3962
4098
  multiply: 1
3963
4099
  },
3964
- 'GRIDCONFIG.VDELVFRTDISABLE': {
3965
- name: 'VDELVFRTDISABLE',
4100
+ 'GRIDCONFIG.VDE_FREQDROPPROT': {
4101
+ name: 'VDE_FREQDROPPROT',
3966
4102
  unit: '',
3967
- booltype: true,
4103
+ booltype: false,
4104
+ datetype: false,
4105
+ iptype: false,
4106
+ multiply: 1
4107
+ },
4108
+ 'GRIDCONFIG.VDE_FREQDROPPROTDELAY': {
4109
+ name: 'VDE_FREQDROPPROTDELAY',
4110
+ unit: '',
4111
+ booltype: false,
4112
+ datetype: false,
4113
+ iptype: false,
4114
+ multiply: 1
4115
+ },
4116
+ 'GRIDCONFIG.VDE_FREQRISEPROT': {
4117
+ name: 'VDE_FREQRISEPROT',
4118
+ unit: '',
4119
+ booltype: false,
4120
+ datetype: false,
4121
+ iptype: false,
4122
+ multiply: 1
4123
+ },
4124
+ 'GRIDCONFIG.VDE_FREQRISEPROTDELAY': {
4125
+ name: 'VDE_FREQRISEPROTDELAY',
4126
+ unit: '',
4127
+ booltype: false,
4128
+ datetype: false,
4129
+ iptype: false,
4130
+ multiply: 1
4131
+ },
4132
+ 'GRIDCONFIG.VDE_UNDERFREQLIMIT': {
4133
+ name: 'VDE_UNDERFREQLIMIT',
4134
+ unit: '',
4135
+ booltype: false,
4136
+ datetype: false,
4137
+ iptype: false,
4138
+ multiply: 1
4139
+ },
4140
+ 'GRIDCONFIG.VDE_VOLTDROPPROT': {
4141
+ name: 'VDE_VOLTDROPPROT',
4142
+ unit: '',
4143
+ booltype: false,
4144
+ datetype: false,
4145
+ iptype: false,
4146
+ multiply: 1
4147
+ },
4148
+ 'GRIDCONFIG.VDE_VOLTDROPPROTAVG': {
4149
+ name: 'VDE_VOLTDROPPROTAVG',
4150
+ unit: '',
4151
+ booltype: false,
4152
+ datetype: false,
4153
+ iptype: false,
4154
+ multiply: 1
4155
+ },
4156
+ 'GRIDCONFIG.VDE_VOLTDROPPROTAVG': {
4157
+ name: 'VDE_VOLTDROPPROTAVG',
4158
+ unit: '',
4159
+ booltype: false,
4160
+ datetype: false,
4161
+ iptype: false,
4162
+ multiply: 1
4163
+ },
4164
+ 'GRIDCONFIG.VDE_VOLTDROPPROTAVGDELAY': {
4165
+ name: 'VDE_VOLTDROPPROTAVGDELAY',
4166
+ unit: '',
4167
+ booltype: false,
4168
+ datetype: false,
4169
+ iptype: false,
4170
+ multiply: 1
4171
+ },
4172
+ 'GRIDCONFIG.VDE_VOLTDROPPROTDELAY': {
4173
+ name: 'VDE_VOLTDROPPROTDELAY',
4174
+ unit: '',
4175
+ booltype: false,
4176
+ datetype: false,
4177
+ iptype: false,
4178
+ multiply: 1
4179
+ },
4180
+ 'GRIDCONFIG.VDE_VOLTRISEPROT': {
4181
+ name: 'VDE_VOLTRISEPROT',
4182
+ unit: '',
4183
+ booltype: false,
4184
+ datetype: false,
4185
+ iptype: false,
4186
+ multiply: 1
4187
+ },
4188
+ 'GRIDCONFIG.VDE_VOLTRISEPROTAVG': {
4189
+ name: 'VDE_VOLTRISEPROTAVG',
4190
+ unit: '',
4191
+ booltype: false,
4192
+ datetype: false,
4193
+ iptype: false,
4194
+ multiply: 1
4195
+ },
4196
+ 'GRIDCONFIG.VDE_VOLTRISEPROTAVGDELAY': {
4197
+ name: 'VDE_VOLTRISEPROTAVGDELAY',
4198
+ unit: '',
4199
+ booltype: false,
4200
+ datetype: false,
4201
+ iptype: false,
4202
+ multiply: 1
4203
+ },
4204
+ 'GRIDCONFIG.VDE_VOLTRISEPROTDELAY': {
4205
+ name: 'VDE_VOLTRISEPROTDELAY',
4206
+ unit: '',
4207
+ booltype: false,
3968
4208
  datetype: false,
3969
4209
  iptype: false,
3970
4210
  multiply: 1
@@ -4224,6 +4464,110 @@ const state_attr = {
4224
4464
  datetype: false,
4225
4465
  iptype: false,
4226
4466
  multiply: 1
4467
+ },
4468
+ 'PV1.INTERNAL_INV_ERROR_TEXT': {
4469
+ name: 'Internal inverter error text',
4470
+ unit: '',
4471
+ booltype: false,
4472
+ datetype: false,
4473
+ iptype: false,
4474
+ multiply: 1
4475
+ },
4476
+ 'PV1.INTERNAL_INV_ERR_STATE_VALID': {
4477
+ name: 'Internal inverter error state valid',
4478
+ unit: '',
4479
+ booltype: true,
4480
+ datetype: false,
4481
+ iptype: false,
4482
+ multiply: 1
4483
+ },
4484
+ 'PV1.INTERNAL_INV_STATE': {
4485
+ name: 'Internal inverter state',
4486
+ unit: '',
4487
+ booltype: false,
4488
+ datetype: false,
4489
+ iptype: false,
4490
+ multiply: 1
4491
+ },
4492
+ 'PV1.INTERNAL_MD_AVAIL': {
4493
+ name: 'Internal MD available',
4494
+ unit: '',
4495
+ booltype: true,
4496
+ datetype: false,
4497
+ iptype: false,
4498
+ multiply: 1
4499
+ },
4500
+ 'PV1.INTERNAL_MD_MANUFACTURER': {
4501
+ name: 'Internal MD manufacturer',
4502
+ unit: '',
4503
+ booltype: false,
4504
+ datetype: false,
4505
+ iptype: false,
4506
+ multiply: 1
4507
+ },
4508
+ 'PV1.INTERNAL_MD_MODEL': {
4509
+ name: 'Internal MD model',
4510
+ unit: '',
4511
+ booltype: false,
4512
+ datetype: false,
4513
+ iptype: false,
4514
+ multiply: 1
4515
+ },
4516
+ 'PV1.INTERNAL_MD_SERIAL': {
4517
+ name: 'Internal MD serial',
4518
+ unit: '',
4519
+ booltype: false,
4520
+ datetype: false,
4521
+ iptype: false,
4522
+ multiply: 1
4523
+ },
4524
+ 'PV1.INTERNAL_MD_VERSION': {
4525
+ name: 'Internal MD version',
4526
+ unit: '',
4527
+ booltype: false,
4528
+ datetype: false,
4529
+ iptype: false,
4530
+ multiply: 1
4531
+ },
4532
+ 'PV1.INTERNAL_PV_AVAIL': {
4533
+ name: 'Internal PV available',
4534
+ unit: '',
4535
+ booltype: true,
4536
+ datetype: false,
4537
+ iptype: false,
4538
+ multiply: 1
4539
+ },
4540
+ 'PV1.INV_MODEL': {
4541
+ name: 'Inverter model',
4542
+ unit: '',
4543
+ booltype: false,
4544
+ datetype: false,
4545
+ iptype: false,
4546
+ multiply: 1
4547
+ },
4548
+ 'PV1.INV_SERIAL': {
4549
+ name: 'Inverter serial',
4550
+ unit: '',
4551
+ booltype: false,
4552
+ datetype: false,
4553
+ iptype: false,
4554
+ multiply: 1
4555
+ },
4556
+ 'PV1.INV_VERSIONS': {
4557
+ name: 'Inverter versions',
4558
+ unit: '',
4559
+ booltype: false,
4560
+ datetype: false,
4561
+ iptype: false,
4562
+ multiply: 1
4563
+ },
4564
+ 'PV1.MPP_AVAIL': {
4565
+ name: 'MPP available',
4566
+ unit: '',
4567
+ booltype: true,
4568
+ datetype: false,
4569
+ iptype: false,
4570
+ multiply: 1
4227
4571
  },
4228
4572
  'PV1.MPP_VOL': {
4229
4573
  name: 'Voltage DC',
@@ -4248,6 +4592,30 @@ const state_attr = {
4248
4592
  datetype: false,
4249
4593
  iptype: false,
4250
4594
  multiply: 1
4595
+ },
4596
+ 'PV1.POWER_RATIO_L1': {
4597
+ name: 'PV1 Power Ratio L1',
4598
+ unit: '%',
4599
+ booltype: false,
4600
+ datetype: false,
4601
+ iptype: false,
4602
+ multiply: 1
4603
+ },
4604
+ 'PV1.POWER_RATIO_L2': {
4605
+ name: 'PV1 Power Ratio L2',
4606
+ unit: '%',
4607
+ booltype: false,
4608
+ datetype: false,
4609
+ iptype: false,
4610
+ multiply: 1
4611
+ },
4612
+ 'PV1.POWER_RATIO_L3': {
4613
+ name: 'PV1 Power Ratio L3',
4614
+ unit: '%',
4615
+ booltype: false,
4616
+ datetype: false,
4617
+ iptype: false,
4618
+ multiply: 1
4251
4619
  },
4252
4620
  'PV1.PV_MISSING': {
4253
4621
  name: 'PV_MISSING',
@@ -4520,6 +4888,14 @@ const state_attr = {
4520
4888
  datetype: false,
4521
4889
  iptype: false,
4522
4890
  multiply: 1
4891
+ },
4892
+ 'RTC.TIMESTAMP_MS': {
4893
+ name: 'RTC.TIMESTAMP_MS',
4894
+ unit: '',
4895
+ booltype: false,
4896
+ datetype: false,
4897
+ iptype: false,
4898
+ multiply: 1
4523
4899
  },
4524
4900
  'RTC.UTC_OFFSET': {
4525
4901
  name: 'RTC.UTC_OFFSET',
@@ -4736,6 +5112,14 @@ const state_attr = {
4736
5112
  datetype: false,
4737
5113
  iptype: false,
4738
5114
  multiply: 1
5115
+ },
5116
+ 'STATISTIC.LIVE_PV_GEN_MASTER': {
5117
+ name: 'Live PV Generation Master',
5118
+ unit: 'kWh',
5119
+ booltype: false,
5120
+ datetype: false,
5121
+ iptype: false,
5122
+ multiply: 1
4739
5123
  },
4740
5124
  'STATISTIC.LIVE_WB_ENERGY': {
4741
5125
  name: 'Live Wallbox Energy',
@@ -5040,6 +5424,110 @@ const state_attr = {
5040
5424
  datetype: false,
5041
5425
  iptype: false,
5042
5426
  multiply: 1
5427
+ },
5428
+ 'STECA.BAT': {
5429
+ name: 'Bat',
5430
+ unit: '',
5431
+ booltype: false,
5432
+ datetype: false,
5433
+ iptype: false,
5434
+ multiply: 1
5435
+ },
5436
+ 'STECA.BDC_STATE': {
5437
+ name: 'BDC State',
5438
+ unit: '',
5439
+ booltype: false,
5440
+ datetype: false,
5441
+ iptype: false,
5442
+ multiply: 1
5443
+ },
5444
+ 'STECA.ERROR': {
5445
+ name: 'Error',
5446
+ unit: '',
5447
+ booltype: false,
5448
+ datetype: false,
5449
+ iptype: false,
5450
+ multiply: 1
5451
+ },
5452
+ 'STECA.ERRORTEXT': {
5453
+ name: 'Error text',
5454
+ unit: '',
5455
+ booltype: false,
5456
+ datetype: false,
5457
+ iptype: false,
5458
+ multiply: 1
5459
+ },
5460
+ 'STECA.ISLAND': {
5461
+ name: 'Island',
5462
+ unit: '',
5463
+ booltype: false,
5464
+ datetype: false,
5465
+ iptype: false,
5466
+ multiply: 1
5467
+ },
5468
+ 'STECA.NUM_PV_CONFIG_POSSIBLE': {
5469
+ name: '# PV config possible',
5470
+ unit: '',
5471
+ booltype: false,
5472
+ datetype: false,
5473
+ iptype: false,
5474
+ multiply: 1
5475
+ },
5476
+ 'STECA.PV': {
5477
+ name: 'PV',
5478
+ unit: '',
5479
+ booltype: false,
5480
+ datetype: false,
5481
+ iptype: false,
5482
+ multiply: 1
5483
+ },
5484
+ 'STECA.PVSS': {
5485
+ name: 'PVSS',
5486
+ unit: '',
5487
+ booltype: false,
5488
+ datetype: false,
5489
+ iptype: false,
5490
+ multiply: 1
5491
+ },
5492
+ 'STECA.PV_CONFIG_POSSIBLE': {
5493
+ name: 'PV config possible',
5494
+ unit: '',
5495
+ booltype: true,
5496
+ datetype: false,
5497
+ iptype: false,
5498
+ multiply: 1
5499
+ },
5500
+ 'STECA.PV_INPUTS': {
5501
+ name: 'PV Inputs',
5502
+ unit: '',
5503
+ booltype: false,
5504
+ datetype: false,
5505
+ iptype: false,
5506
+ multiply: 1
5507
+ },
5508
+ 'STECA.RELAYS': {
5509
+ name: 'RELAYS',
5510
+ unit: '',
5511
+ booltype: false,
5512
+ datetype: false,
5513
+ iptype: false,
5514
+ multiply: 1
5515
+ },
5516
+ 'STECA.STARTUP': {
5517
+ name: 'STARTUP',
5518
+ unit: '',
5519
+ booltype: false,
5520
+ datetype: false,
5521
+ iptype: false,
5522
+ multiply: 1
5523
+ },
5524
+ 'STECA.STARTUP_ADD': {
5525
+ name: 'Startup add',
5526
+ unit: '',
5527
+ booltype: false,
5528
+ datetype: false,
5529
+ iptype: false,
5530
+ multiply: 1
5043
5531
  },
5044
5532
  'SYS_UPDATE.BOOTLOADER_VERSION': {
5045
5533
  name: 'Bootloader Version',
@@ -5200,6 +5688,22 @@ const state_attr = {
5200
5688
  datetype: false,
5201
5689
  iptype: false,
5202
5690
  multiply: 1
5691
+ },
5692
+ 'WALLBOX.ALLOW_INTERCHARGE': {
5693
+ name: 'ALLOW_INTERCHARGE',
5694
+ unit: '',
5695
+ booltype: false,
5696
+ datetype: false,
5697
+ iptype: false,
5698
+ multiply: 1
5699
+ },
5700
+ 'WALLBOX.BUS_ADR': {
5701
+ name: 'Bus ADR',
5702
+ unit: '',
5703
+ booltype: false,
5704
+ datetype: false,
5705
+ iptype: false,
5706
+ multiply: 1
5203
5707
  },
5204
5708
  'WALLBOX.CS_ENABLED': {
5205
5709
  name: 'WALLBOX.CS_ENABLED',
@@ -5208,6 +5712,14 @@ const state_attr = {
5208
5712
  datetype: false,
5209
5713
  iptype: false,
5210
5714
  multiply: 1
5715
+ },
5716
+ 'WALLBOX.DETECTION_MODE': {
5717
+ name: 'Detection Mode',
5718
+ unit: '',
5719
+ booltype: false,
5720
+ datetype: false,
5721
+ iptype: false,
5722
+ multiply: 1
5211
5723
  },
5212
5724
  'WALLBOX.EV_CONNECTED': {
5213
5725
  name: 'WALLBOX.EV_CONNECTED',
@@ -5280,9 +5792,17 @@ const state_attr = {
5280
5792
  datetype: false,
5281
5793
  iptype: false,
5282
5794
  multiply: 1
5795
+ },
5796
+ 'WALLBOX.LOAD_IMBALANCE_ENABLED': {
5797
+ name: 'Load imbalance enabled',
5798
+ unit: '',
5799
+ booltype: true,
5800
+ datetype: false,
5801
+ iptype: false,
5802
+ multiply: 1
5283
5803
  },
5284
5804
  'WALLBOX.LOAD_IMBALANCE_DETECTED': {
5285
- name: 'WALLBOX.LOAD_IMBALANCE_DETECTED',
5805
+ name: 'Load imbalance detected',
5286
5806
  unit: '',
5287
5807
  booltype: true,
5288
5808
  datetype: false,
@@ -5328,6 +5848,22 @@ const state_attr = {
5328
5848
  datetype: false,
5329
5849
  iptype: false,
5330
5850
  multiply: 1
5851
+ },
5852
+ 'WALLBOX.MAX_PHASE_CURRENT_BY_GRID': {
5853
+ name: 'MAX_PHASE_CURRENT_BY_GRID',
5854
+ unit: 'A',
5855
+ booltype: false,
5856
+ datetype: false,
5857
+ iptype: false,
5858
+ multiply: 1
5859
+ },
5860
+ 'WALLBOX.MAX_TOTAL_CURRENT_BY_GRID': {
5861
+ name: 'MAX_TOTAL_CURRENT_BY_GRID',
5862
+ unit: 'A',
5863
+ booltype: false,
5864
+ datetype: false,
5865
+ iptype: false,
5866
+ multiply: 1
5331
5867
  },
5332
5868
  'WALLBOX.METER_ENABLED': {
5333
5869
  name: 'WALLBOX.METER_ENABLED',
@@ -5344,6 +5880,14 @@ const state_attr = {
5344
5880
  datetype: false,
5345
5881
  iptype: false,
5346
5882
  multiply: 1
5883
+ },
5884
+ 'WALLBOX.MIN_CHARGING_CURRENT': {
5885
+ name: 'MIN_CHARGING_CURRENT',
5886
+ unit: 'A',
5887
+ booltype: false,
5888
+ datetype: false,
5889
+ iptype: false,
5890
+ multiply: 1
5347
5891
  },
5348
5892
  'WALLBOX.MINOR_REV': {
5349
5893
  name: 'WALLBOX.MINOR_REV',
@@ -5360,14 +5904,46 @@ const state_attr = {
5360
5904
  datetype: false,
5361
5905
  iptype: false,
5362
5906
  multiply: 1
5907
+ },
5908
+ 'WALLBOX.PROHIBIT_USAGE': {
5909
+ name: 'Prohibit usage',
5910
+ unit: '',
5911
+ booltype: true,
5912
+ datetype: false,
5913
+ iptype: false,
5914
+ multiply: 1
5915
+ },
5916
+ 'WALLBOX.SAP_NUMBER': {
5917
+ name: 'SAP number',
5918
+ unit: '',
5919
+ booltype: false,
5920
+ datetype: false,
5921
+ iptype: false,
5922
+ multiply: 1
5363
5923
  },
5364
5924
  'WALLBOX.SERIAL_NUMBER': {
5365
- name: 'WALLBOX.SERIAL_NUMBER',
5925
+ name: 'Serial number',
5366
5926
  unit: '',
5367
5927
  booltype: false,
5368
5928
  datetype: false,
5369
5929
  iptype: false,
5370
5930
  multiply: 1
5931
+ },
5932
+ 'WALLBOX.SERIAL_NUMBER_INTERNAL': {
5933
+ name: 'Serial number internal',
5934
+ unit: '',
5935
+ booltype: false,
5936
+ datetype: false,
5937
+ iptype: false,
5938
+ multiply: 1
5939
+ },
5940
+ 'WALLBOX.SET_IDEFAULT': {
5941
+ name: 'SET_IDEFAULT',
5942
+ unit: 'A',
5943
+ booltype: false,
5944
+ datetype: false,
5945
+ iptype: false,
5946
+ multiply: 1
5371
5947
  },
5372
5948
  'WALLBOX.SET_ICMAX': {
5373
5949
  name: 'SET_ICMAX',
@@ -5376,6 +5952,14 @@ const state_attr = {
5376
5952
  datetype: false,
5377
5953
  iptype: false,
5378
5954
  multiply: 1
5955
+ },
5956
+ 'WALLBOX.SMART_CHARGE_ACTIVE': {
5957
+ name: 'Smart charge active',
5958
+ unit: '',
5959
+ booltype: true,
5960
+ datetype: false,
5961
+ iptype: false,
5962
+ multiply: 1
5379
5963
  },
5380
5964
  'WALLBOX.SOCKET_ENABLED': {
5381
5965
  name: 'WALLBOX.SOCKET_ENABLED',
@@ -5400,6 +5984,14 @@ const state_attr = {
5400
5984
  datetype: false,
5401
5985
  iptype: false,
5402
5986
  multiply: 1
5987
+ },
5988
+ 'WALLBOX.UID': {
5989
+ name: 'UID',
5990
+ unit: '',
5991
+ booltype: false,
5992
+ datetype: false,
5993
+ iptype: false,
5994
+ multiply: 1
5403
5995
  },
5404
5996
  'WALLBOX.UTMP': {
5405
5997
  name: 'WALLBOX.UTMP',
@@ -5544,6 +6136,14 @@ const state_attr = {
5544
6136
  datetype: false,
5545
6137
  iptype: false,
5546
6138
  multiply: 1
6139
+ },
6140
+ 'WIZARD.DEVICE_WB_TYPE': {
6141
+ name: 'Device WB Type',
6142
+ unit: '',
6143
+ booltype: false,
6144
+ datetype: false,
6145
+ iptype: false,
6146
+ multiply: 1
5547
6147
  },
5548
6148
  'WIZARD.FEATURECODE_ENTERED': {
5549
6149
  name: 'Featurecode entered',
@@ -5691,6 +6291,14 @@ const state_attr = {
5691
6291
  datetype: false,
5692
6292
  iptype: false,
5693
6293
  multiply: 1
6294
+ },
6295
+ 'WIZARD.POWER_METER_SERIAL': {
6296
+ name: 'Power Meter Serial',
6297
+ unit: '',
6298
+ booltype: false,
6299
+ datetype: false,
6300
+ iptype: false,
6301
+ multiply: 1
5694
6302
  },
5695
6303
  'WIZARD.PS_ENABLE': {
5696
6304
  name: 'PeakShaving ENABLE',
@@ -5763,6 +6371,14 @@ const state_attr = {
5763
6371
  datetype: false,
5764
6372
  iptype: false,
5765
6373
  multiply: 1
6374
+ },
6375
+ 'WIZARD.SETUP_HV_PHASE': {
6376
+ name: 'SETUP_HV_PHASE',
6377
+ unit: '',
6378
+ booltype: true,
6379
+ datetype: false,
6380
+ iptype: false,
6381
+ multiply: 1
5766
6382
  },
5767
6383
  'WIZARD.SETUP_NUMBER_WALLBOXES': {
5768
6384
  name: '# Wallboxes',
@@ -5845,6 +6461,14 @@ const state_attr = {
5845
6461
  datetype: false,
5846
6462
  iptype: false,
5847
6463
  multiply: 1
6464
+ },
6465
+ 'WIZARD.SETUP_USE_DRM0': {
6466
+ name: 'SETUP_USE_DRM0',
6467
+ unit: '',
6468
+ booltype: true,
6469
+ datetype: false,
6470
+ iptype: false,
6471
+ multiply: 1
5848
6472
  },
5849
6473
  'WIZARD.SETUP_USED_PHASE': {
5850
6474
  name: 'SETUP_USED_PHASE',
@@ -5885,6 +6509,30 @@ const state_attr = {
5885
6509
  datetype: false,
5886
6510
  iptype: false,
5887
6511
  multiply: 1
6512
+ },
6513
+ 'WIZARD.SG_READY_ENABLE_OVERWRITE': {
6514
+ name: 'SG_READY_ENABLE_OVERWRITE',
6515
+ unit: '',
6516
+ booltype: true,
6517
+ datetype: false,
6518
+ iptype: false,
6519
+ multiply: 1
6520
+ },
6521
+ 'WIZARD.SG_READY_OVERWRITE_RELAY': {
6522
+ name: 'SG_READY_OVERWRITE_RELAY',
6523
+ unit: '',
6524
+ booltype: true,
6525
+ datetype: false,
6526
+ iptype: false,
6527
+ multiply: 1
6528
+ },
6529
+ 'WIZARD.TEST_EG_METER': {
6530
+ name: 'TEST_EG_METER',
6531
+ unit: '',
6532
+ booltype: true,
6533
+ datetype: false,
6534
+ iptype: false,
6535
+ multiply: 1
5888
6536
  },
5889
6537
  'WIZARD.TEST_GENERATION_METER': {
5890
6538
  name: 'TEST_GENERATION_METER',
@@ -5998,6 +6646,14 @@ const state_attr = {
5998
6646
  iptype: false,
5999
6647
  multiply: 1
6000
6648
  },
6649
+ 'WIZARD.ZEROMODULE': {
6650
+ name: 'ZEROMODULE',
6651
+ unit: '',
6652
+ booltype: false,
6653
+ datetype: false,
6654
+ iptype: false,
6655
+ multiply: 1
6656
+ },
6001
6657
 
6002
6658
  }
6003
6659
 
package/main.js CHANGED
@@ -66,29 +66,29 @@ class Senec extends utils.Adapter {
66
66
  * Fallback to default values in case they are out of scope
67
67
  */
68
68
  async checkConfig() {
69
- this.log.debug("Configured polling interval high priority: " + this.config.interval);
69
+ this.log.debug("(checkConf) Configured polling interval high priority: " + this.config.interval);
70
70
  if (this.config.interval < 1 || this.config.interval > 3600) {
71
- this.log.warn("Config interval high priority " + this.config.interval + " not [1..3600] seconds. Using default: 10");
71
+ this.log.warn("(checkConf) Config interval high priority " + this.config.interval + " not [1..3600] seconds. Using default: 10");
72
72
  this.config.interval = 10;
73
73
  }
74
- this.log.debug("Configured polling interval low priority: " + this.config.intervalLow);
74
+ this.log.debug("(checkConf) Configured polling interval low priority: " + this.config.intervalLow);
75
75
  if (this.config.intervalLow < 60 || this.config.intervalLow > 3600) {
76
- this.log.warn("Config interval low priority " + this.config.intervalLow + " not [60..3600] minutes. Using default: 60");
76
+ this.log.warn("(checkConf) Config interval low priority " + this.config.intervalLow + " not [60..3600] minutes. Using default: 60");
77
77
  this.config.intervalLow = 60;
78
78
  }
79
- this.log.debug("Configured polling timeout: " + this.config.pollingTimeout);
79
+ this.log.debug("(checkConf) Configured polling timeout: " + this.config.pollingTimeout);
80
80
  if (this.config.pollingTimeout < 1000 || this.config.pollingTimeout > 10000) {
81
- this.log.warn("Config timeout " + this.config.pollingTimeout + " not [1000..10000] ms. Using default: 5000");
81
+ this.log.warn("(checkConf) Config timeout " + this.config.pollingTimeout + " not [1000..10000] ms. Using default: 5000");
82
82
  this.config.pollingTimeout = 5000;
83
83
  }
84
- this.log.debug("Configured num of retries: " + this.config.retries);
84
+ this.log.debug("(checkConf) Configured num of retries: " + this.config.retries);
85
85
  if (this.config.retries < 0 || this.config.retries > 999) {
86
- this.log.warn("Config num of retries " + this.config.retries + " not [0..999] seconds. Using default: 10");
86
+ this.log.warn("(checkConf) Config num of retries " + this.config.retries + " not [0..999] seconds. Using default: 10");
87
87
  this.config.retries = 10;
88
88
  }
89
- this.log.debug("Configured retry multiplier: " + this.config.retrymultiplier);
89
+ this.log.debug("(checkConf) Configured retry multiplier: " + this.config.retrymultiplier);
90
90
  if (this.config.retrymultiplier < 1 || this.config.retrymultiplier > 10) {
91
- this.log.warn("Config retry multiplier " + this.config.retrymultiplier + " not [1..10] seconds. Using default: 2");
91
+ this.log.warn("(checkConf) Config retry multiplier " + this.config.retrymultiplier + " not [1..10] seconds. Using default: 2");
92
92
  this.config.retrymultiplier = 2;
93
93
  }
94
94
  }
@@ -121,30 +121,32 @@ class Senec extends utils.Adapter {
121
121
  url: pUrl,
122
122
  data: pForm,
123
123
  timeout: pollingTimeout
124
- }).then(
124
+ })
125
+ .then(
125
126
  async (response) => {
126
127
  const content = response.data;
127
- caller.log.debug('received data (' + response.status + '): ' + JSON.stringify(content));
128
+ caller.log.debug('(Poll) received data (' + response.status + '): ' + JSON.stringify(content));
128
129
  resolve(JSON.stringify(content));
129
130
  }
130
- ).catch(
131
- (error) => {
132
- if (error.response) {
133
- // The request was made and the server responded with a status code
134
- caller.log.warn('received error ' + error.response.status + ' response from SENEC with content: ' + JSON.stringify(error.response.data));
135
- reject(error.response.status);
136
- } else if (error.request) {
137
- // The request was made but no response was received
138
- // `error.request` is an instance of XMLHttpRequest in the browser and an instance of http.ClientRequest in node.js<div></div>
139
- caller.log.info(error.message);
140
- reject(error.message);
141
- } else {
142
- // Something happened in setting up the request that triggered an Error
143
- caller.log.info(error.message);
144
- reject(error.status);
145
- }
146
- }
147
- );
131
+ )
132
+ .catch(
133
+ (error) => {
134
+ if (error.response) {
135
+ // The request was made and the server responded with a status code
136
+ caller.log.warn('(Poll) received error ' + error.response.status + ' response from SENEC with content: ' + JSON.stringify(error.response.data));
137
+ reject(error.response.status);
138
+ } else if (error.request) {
139
+ // The request was made but no response was received
140
+ // `error.request` is an instance of XMLHttpRequest in the browser and an instance of http.ClientRequest in node.js<div></div>
141
+ caller.log.info(error.message);
142
+ reject(error.message);
143
+ } else {
144
+ // Something happened in setting up the request that triggered an Error
145
+ caller.log.info(error.message);
146
+ reject(error.status);
147
+ }
148
+ }
149
+ );
148
150
  });
149
151
  }
150
152
 
@@ -155,7 +157,7 @@ class Senec extends utils.Adapter {
155
157
  async readSenecV21() {
156
158
  // read by webinterface are the following values. Not all are "high priority" though.
157
159
  // "STATISTIC":{"STAT_DAY_E_HOUSE":"","STAT_DAY_E_PV":"","STAT_DAY_BAT_CHARGE":"","STAT_DAY_BAT_DISCHARGE":"","STAT_DAY_E_GRID_IMPORT":"","STAT_DAY_E_GRID_EXPORT":"","STAT_YEAR_E_PU1_ARR":""}
158
- // "ENERGY":{"STAT_STATE":"","STAT_STATE_DECODE":"","GUI_BAT_DATA_POWER":"","GUI_INVERTER_POWER":"","GUI_HOUSE_POW":"","GUI_GRID_POW":"","STAT_MAINT_REQUIRED":"","GUI_BAT_DATA_FUEL_CHARGE":"","GUI_CHARGING_INFO":"","GUI_BOOSTING_INFO":""}
160
+ // "ENERGY":{"STAT_STATE":"","GUI_BAT_DATA_POWER":"","GUI_INVERTER_POWER":"","GUI_HOUSE_POW":"","GUI_GRID_POW":"","STAT_MAINT_REQUIRED":"","GUI_BAT_DATA_FUEL_CHARGE":"","GUI_CHARGING_INFO":"","GUI_BOOSTING_INFO":""}
159
161
  // "WIZARD":{"CONFIG_LOADED":""},"SYS_UPDATE":{"UPDATE_AVAILABLE":""}
160
162
  // "PV1":{"POWER_RATIO":""},"WIZARD":{"MAC_ADDRESS_BYTES":""},"BAT1OBJ1":{"BMS_NR_INSTALLED":"","SPECIAL_TIMEOUT":"","INV_CYCLE":"","TEMP1":"","TEMP2":"","TEMP3":"","TEMP4":"","TEMP5":"","SW_VERSION":"","SW_VERSION2":"","SW_VERSION3":"","I_DC":""},"BAT1OBJ2":{"TEMP1":"","TEMP2":"","TEMP3":"","TEMP4":"","TEMP5":"","I_DC":""},"BAT1OBJ3":{"TEMP1":"","TEMP2":"","TEMP3":"","TEMP4":"","TEMP5":"","I_DC":""},"PWR_UNIT":{"POWER_L1":"","POWER_L2":"","POWER_L3":""},"BAT1":{"CEI_LIMIT":""},"BMS":{}
161
163
  // "PM1OBJ1":{"FREQ":"","U_AC":"","I_AC":"","P_AC":"","P_TOTAL":""},"PM1OBJ2":{"FREQ":"","U_AC":"","I_AC":"","P_AC":"","P_TOTAL":""}
@@ -163,9 +165,8 @@ class Senec extends utils.Adapter {
163
165
 
164
166
  const url = 'http://' + this.config.senecip + '/lala.cgi';
165
167
  var form = '{';
166
- form += '"ENERGY":{"STAT_STATE":"","STAT_STATE_DECODE":"","GUI_BAT_DATA_POWER":"","GUI_INVERTER_POWER":"","GUI_HOUSE_POW":"","GUI_GRID_POW":"","GUI_BAT_DATA_FUEL_CHARGE":"","GUI_CHARGING_INFO":"","GUI_BOOSTING_INFO":"","GUI_BAT_DATA_POWER":"","GUI_BAT_DATA_VOLTAGE":"","GUI_BAT_DATA_CURRENT":"","GUI_BAT_DATA_FUEL_CHARGE":"","GUI_BAT_DATA_OA_CHARGING":"","STAT_LIMITED_NET_SKEW":""}';
167
- // MPP_INT got replaced by MPP_POWER but might still be in use by some machines. Can be removed at a later point in time. (includes state_attr) 2020-10-22
168
- form += ',"PV1":{"POWER_RATIO":"","MPP_POWER":"","MPP_INT":""}';
168
+ form += '"ENERGY":{"STAT_STATE":"","GUI_BAT_DATA_POWER":"","GUI_INVERTER_POWER":"","GUI_HOUSE_POW":"","GUI_GRID_POW":"","GUI_BAT_DATA_FUEL_CHARGE":"","GUI_CHARGING_INFO":"","GUI_BOOSTING_INFO":"","GUI_BAT_DATA_POWER":"","GUI_BAT_DATA_VOLTAGE":"","GUI_BAT_DATA_CURRENT":"","GUI_BAT_DATA_FUEL_CHARGE":"","GUI_BAT_DATA_OA_CHARGING":"","STAT_LIMITED_NET_SKEW":""}';
169
+ form += ',"PV1":{"POWER_RATIO":"","MPP_POWER":""}';
169
170
  form += ',"PWR_UNIT":{"POWER_L1":"","POWER_L2":"","POWER_L3":""}';
170
171
  form += ',"PM1OBJ1":{"FREQ":"","U_AC":"","I_AC":"","P_AC":"","P_TOTAL":""}';
171
172
  form += ',"PM1OBJ2":{"FREQ":"","U_AC":"","I_AC":"","P_AC":"","P_TOTAL":""}';
@@ -173,7 +174,13 @@ class Senec extends utils.Adapter {
173
174
  form += '}';
174
175
 
175
176
  try {
176
- const body = await this.doGet(url, form, this, this.config.pollingTimeout);
177
+ var body = await this.doGet(url, form, this, this.config.pollingTimeout);
178
+ if (body.includes('\\"')) {
179
+ // in rare cases senec reports back extra escape sequences on some machines ...
180
+ this.log.info("(Poll) Double escapes detected! Body inc: " + body);
181
+ body = body.replace(/\\"/g, '"');
182
+ this.log.info("(Poll) Double escapes autofixed! Body out: " + body);
183
+ }
177
184
  var obj = JSON.parse(body, reviverNumParse);
178
185
  await this.evalPoll(obj);
179
186
 
@@ -203,7 +210,13 @@ class Senec extends utils.Adapter {
203
210
  const form = '{"STATISTIC":{},"ENERGY":{},"FEATURES":{},"LOG":{},"SYS_UPDATE":{},"WIZARD":{},"BMS":{},"BAT1":{},"BAT1OBJ1":{},"BAT1OBJ2":{},"BAT1OBJ2":{},"BAT1OBJ3":{},"BAT1OBJ4":{},"PWR_UNIT":{},"PM1OBJ1":{},"PM1OBJ2":{},"PV1":{},"FACTORY":{},"GRIDCONFIG":{},"EG_CONTROL":{},"RTC":{},"PM1":{},"TEMPMEASURE":{},"DEBUG":{},"SOCKETS":{},"CASC":{},"WALLBOX":{},"CONNX50":{},"STECA":{}}';
204
211
 
205
212
  try {
206
- const body = await this.doGet(url, form, this, this.config.pollingTimeout);
213
+ var body = await this.doGet(url, form, this, this.config.pollingTimeout);
214
+ if (body.includes('\\"')) {
215
+ // in rare cases senec reports back extra escape sequences on some machines ...
216
+ this.log.info("(Poll) Double escapes detected! Body inc: " + body);
217
+ body = body.replace(/\\"/g, '"');
218
+ this.log.info("(Poll) Double escapes autofixed! Body out: " + body);
219
+ }
207
220
  var obj = JSON.parse(body, reviverNumParse);
208
221
 
209
222
  await this.evalPoll(obj);
@@ -226,7 +239,12 @@ class Senec extends utils.Adapter {
226
239
  * sets a state's value and creates the state if it doesn't exist yet
227
240
  */
228
241
  async doState(name, value, description, unit, write) {
229
- this.log.silly('Update: ' + name + ': ' + value);
242
+ if (!isNaN(name.substring(0, 1))) {
243
+ // keys cannot start with digits! Possibly SENEC delivering erraneous data
244
+ this.log.debug('(doState) Invalid datapoint: ' + name + ': ' + value);
245
+ return;
246
+ }
247
+ this.log.silly('(doState) Update: ' + name + ': ' + value);
230
248
  await this.setObjectNotExistsAsync(name, {
231
249
  type: 'state',
232
250
  common: {
@@ -243,19 +261,19 @@ class Senec extends utils.Adapter {
243
261
  // Check object for changes:
244
262
  var obj = await this.getObjectAsync(name);
245
263
  if (obj.common.name != description) {
246
- this.log.debug("Updating object: " + name + " (desc): " + obj.common.name + " -> " + description);
264
+ this.log.debug("(doState) Updating object: " + name + " (desc): " + obj.common.name + " -> " + description);
247
265
  await this.extendObject(name, {common: {name: description}});
248
266
  }
249
267
  if (obj.common.type != typeof(value)) {
250
- this.log.debug("Updating object: " + name + " (type): " + obj.common.type + " -> " + typeof(value));
268
+ this.log.debug("(doState) Updating object: " + name + " (type): " + obj.common.type + " -> " + typeof(value));
251
269
  await this.extendObject(name, {common: {type: typeof(value)}});
252
270
  }
253
271
  if (obj.common.unit != unit) {
254
- this.log.debug("Updating object: " + name + " (unit): " + obj.common.unit + " -> " + unit);
272
+ this.log.debug("(doState) Updating object: " + name + " (unit): " + obj.common.unit + " -> " + unit);
255
273
  await this.extendObject(name, {common: {unit: unit}});
256
274
  }
257
275
  if (obj.common.write != write) {
258
- this.log.debug("Updating object: " + name + " (write): " + obj.common.write + " -> " + write);
276
+ this.log.debug("(doState) Updating object: " + name + " (write): " + obj.common.write + " -> " + write);
259
277
  await this.extendObject(name, {common: {write: write}});
260
278
  }
261
279
 
@@ -265,7 +283,7 @@ class Senec extends utils.Adapter {
265
283
  await this.checkUpdateSelfStat(name);
266
284
  return;
267
285
  }
268
- this.log.silly('Update: ' + name + ': ' + oldState.val + ' -> ' + value);
286
+ this.log.debug('(doState) Update: ' + name + ': ' + oldState.val + ' -> ' + value);
269
287
  }
270
288
  await this.setStateAsync(name, {
271
289
  val: value,
@@ -284,15 +302,15 @@ class Senec extends utils.Adapter {
284
302
  var lang = 1; // fallback to english
285
303
  var langState = await this.getStateAsync('WIZARD.GUI_LANG');
286
304
  if (langState) lang = langState.val;
287
- this.log.silly("Senec language: " + lang);
305
+ this.log.silly("(Decode) Senec language: " + lang);
288
306
  var key = name;
289
307
  if (!isNaN(name.substring(name.lastIndexOf('.')) + 1)) key = name.substring(0, name.lastIndexOf('.'));
290
- this.log.silly("Checking: " + name + " -> " + key);
308
+ this.log.silly("(Decode) Checking: " + name + " -> " + key);
291
309
 
292
310
  if (state_trans[key + "." + lang] !== undefined) {
293
- this.log.silly("Trans found for: " + key + "." + lang);
311
+ this.log.silly("(Decode) Trans found for: " + key + "." + lang);
294
312
  const trans = (state_trans[key + "." + lang] !== undefined ? (state_trans[key + "." + lang][value] !== undefined ? state_trans[key + "." + lang][value] : "(unknown)") : "(unknown)");
295
- this.log.debug("Trans " + key + ":" + value + " = " + trans);
313
+ this.log.silly("(Decode) Trans " + key + ":" + value + " = " + trans);
296
314
  const desc = (state_attr[key + "_Text"] !== undefined) ? state_attr[key + "_Text"].name : key;
297
315
  await this.doState(name + "_Text", trans, desc, "", true);
298
316
  }
@@ -317,7 +335,7 @@ class Senec extends utils.Adapter {
317
335
  if (value2 !== "VARIABLE_NOT_FOUND" && key2 !== "OBJECT_NOT_FOUND") {
318
336
  const key = key1 + '.' + key2;
319
337
  if (state_attr[key] === undefined) {
320
- this.log.debug('REPORT_TO_DEV: State attribute definition missing for: ' + key + ', Val: ' + value2);
338
+ this.log.info('REPORT_TO_DEV: State attribute definition missing for: ' + key + ', Val: ' + value2);
321
339
  }
322
340
  const desc = (state_attr[key] !== undefined) ? state_attr[key].name : key2;
323
341
  const unit = (state_attr[key] !== undefined) ? state_attr[key].unit : "";
@@ -366,7 +384,7 @@ class Senec extends utils.Adapter {
366
384
  const unitRefDay = (state_attr[key + ".ref" + day] !== undefined) ? state_attr[key + ".ref" + day].unit : "";
367
385
 
368
386
  if (refDay != curDay) {
369
- this.log.debug("New " + day + " (or first value seen). Updating stat data for: " + name.substring(10));
387
+ this.log.debug("(Calc) New " + day + " (or first value seen). Updating stat data for: " + name.substring(10));
370
388
  // Change of day
371
389
  await this.doState(key + ".ref" + day, curDay, descRefDay, unitRefDay, false);
372
390
  await this.doState(key + yesterday, valToday, descYesterday, unitYesterday, false);
@@ -374,10 +392,10 @@ class Senec extends utils.Adapter {
374
392
  if (valRef < valCur) {
375
393
  await this.doState(key + refValue, valCur, descRef, unitRef, true);
376
394
  } else {
377
- this.log.warning("Not updating reference value for: " + name.substring(10) + "! Old RefValue (" + valRef + ") >= new RefValue (" + valCur + "). Impossible situation. If this is intentional, please update via admin!");
395
+ this.log.warning("(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!");
378
396
  }
379
397
  } else {
380
- this.log.debug("Updating " + day +" value for: " + name.substring(10) + ": " + Number((valCur - valRef).toFixed(2)));
398
+ this.log.silly("(Calc) Updating " + day +" value for: " + name.substring(10) + ": " + Number((valCur - valRef).toFixed(2)));
381
399
  // update today's value
382
400
  await this.doState(key + today, Number((valCur - valRef).toFixed(2)), descToday, unitToday, false);
383
401
  }
@@ -418,7 +436,7 @@ class Senec extends utils.Adapter {
418
436
  const unitRefDay = (state_attr[key + ".ref" + day] !== undefined) ? state_attr[key + ".ref" + day].unit : "";
419
437
 
420
438
  if (refDay != curDay) {
421
- this.log.debug("New " + day + " (or first value seen). Updating Autarky data for: " + key + " " + day);
439
+ this.log.debug("(Autarky) New " + day + " (or first value seen). Updating Autarky data for: " + key + " " + day);
422
440
  // Change of day
423
441
  await this.doState(key + ".ref" + day, curDay, descRefDay, unitRefDay, false);
424
442
  await this.doState(key + yesterday, valToday, descYesterday, unitYesterday, false);
@@ -428,7 +446,7 @@ class Senec extends utils.Adapter {
428
446
  // update today's value - but beware of div/0
429
447
  var newVal = 0;
430
448
  if (valHouseCons > 0) newVal = Number((((valPVGen - valGridExp - valBatCharge + valBatDischarge) / valHouseCons) * 100).toFixed(0));
431
- this.log.debug("Updating Autarky " + day +" value for: " + key + today + ": " + newVal);
449
+ this.log.silly("(Autarky) Updating Autarky " + day +" value for: " + key + today + ": " + newVal);
432
450
  if (valHouseCons > 0) await this.doState(key + today, newVal, descToday, unitToday, false);
433
451
  }
434
452
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.senec",
3
- "version": "1.3.4",
3
+ "version": "1.3.5-beta",
4
4
  "description": "Senec Home",
5
5
  "author": {
6
6
  "name": "NoBl",