iobroker.sprinklecontrol 0.2.13 → 0.2.14

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.
Files changed (71) hide show
  1. package/{Lizenz → LICENSE} +21 -21
  2. package/README.md +60 -110
  3. package/admin/i18n/de/translations.json +134 -0
  4. package/admin/i18n/en/translations.json +134 -0
  5. package/admin/i18n/es/translations.json +134 -0
  6. package/admin/i18n/fr/translations.json +134 -0
  7. package/admin/i18n/it/translations.json +134 -0
  8. package/admin/i18n/nl/translations.json +134 -0
  9. package/admin/i18n/pl/translations.json +134 -0
  10. package/admin/i18n/pt/translations.json +134 -0
  11. package/admin/i18n/ru/translations.json +134 -0
  12. package/admin/i18n/uk/translations.json +134 -0
  13. package/admin/i18n/zh-cn/translations.json +134 -0
  14. package/admin/index_m.html +904 -907
  15. package/admin/index_m.js +779 -779
  16. package/admin/style.css +453 -158
  17. package/admin/words.js +143 -136
  18. package/io-package.json +256 -189
  19. package/lib/adapter-config.d.ts +19 -16
  20. package/lib/evaporation.js +443 -412
  21. package/lib/myConfig.js +373 -359
  22. package/lib/sendMessageText.js +162 -199
  23. package/lib/tools.js +148 -125
  24. package/lib/valveControl.js +918 -887
  25. package/main.js +2041 -1828
  26. package/package.json +50 -32
  27. package/.gitattributes +0 -2
  28. package/admin/admin.d.ts +0 -1
  29. package/docs/de/img/E-Mail.jpg +0 -0
  30. package/docs/de/img/Extraeinstellungen.jpg +0 -0
  31. package/docs/de/img/Pumpeneinstellung.jpg +0 -0
  32. package/docs/de/img/Pushover.jpg +0 -0
  33. package/docs/de/img/Select_ID.jpg +0 -0
  34. package/docs/de/img/Telegram.jpg +0 -0
  35. package/docs/de/img/Ventil-Haupteinstellung.jpg +0 -0
  36. package/docs/de/img/Ventil-Pumpeneinstellung.jpg +0 -0
  37. package/docs/de/img/WhatsApp.jpg +0 -0
  38. package/docs/de/img/Zeiteinstellung.jpg +0 -0
  39. package/docs/de/img/addTime.jpg +0 -0
  40. package/docs/de/img/analog.jpg +0 -0
  41. package/docs/de/img/ber-verdunstung.jpg +0 -0
  42. package/docs/de/img/bew-einstellung.jpg +0 -0
  43. package/docs/de/img/bew-feste-tage.jpg +0 -0
  44. package/docs/de/img/bistabil.jpg +0 -0
  45. package/docs/de/img/bodenf-analog.jpg +0 -0
  46. package/docs/de/img/bodenf-bistabil.jpg +0 -0
  47. package/docs/de/img/calculation.jpg +0 -0
  48. package/docs/de/img/control.jpg +0 -0
  49. package/docs/de/img/einschaltpunkt-giessen.jpg +0 -0
  50. package/docs/de/img/festeTage.jpg +0 -0
  51. package/docs/de/img/main.jpg +0 -0
  52. package/docs/de/img/main_tab.jpg +0 -0
  53. package/docs/de/img/max-bodenfeuchtigkeit.jpg +0 -0
  54. package/docs/de/img/schaltverhalten.jpg +0 -0
  55. package/docs/de/img/sprinklecontrol.png +0 -0
  56. package/docs/de/img/verdunstDiagra.jpg +0 -0
  57. package/docs/de/img/verdunstung.jpg +0 -0
  58. package/docs/de/img/zus-bew-einstellung.jpg +0 -0
  59. package/docs/de/sprinklecontrol.md +0 -656
  60. package/docs/en/img/schaltverhalten.jpg +0 -0
  61. package/docs/en/img/screenshot1.jpg +0 -0
  62. package/docs/en/img/screenshot2.jpg +0 -0
  63. package/docs/en/img/screenshot3.jpg +0 -0
  64. package/docs/en/img/screenshot4.jpg +0 -0
  65. package/docs/en/img/screenshot5.jpg +0 -0
  66. package/docs/en/img/screenshot6.jpg +0 -0
  67. package/docs/en/img/screenshot7.jpg +0 -0
  68. package/docs/en/img/screenshot8.jpg +0 -0
  69. package/docs/en/img/sprinklecontrol.png +0 -0
  70. package/docs/en/sprinklecontrol.md +0 -230
  71. package/main.test.js +0 -30
package/admin/index_m.js CHANGED
@@ -1,780 +1,780 @@
1
- /**
2
- * @license
3
- * iobroker.sprinklecontrol - Copyright (c) by Dirk-Peter-md
4
- * Please visit https://github.com/Dirk-Peter-md/ioBroker.sprinklecontrol for licence-agreement and further information
5
- */
6
-
7
- //Settings
8
-
9
- /**
10
- * This will be called by the admin adapter when the settings page loads
11
- * Dies wird vom Adapter Administrator aufgerufen, wenn die Einstellungsseite geladen wird
12
- * @param {object} settings - represents the adapter config object
13
- * @param {object} onChange - callback
14
- */
15
- function load(settings, onChange) {
16
- // example: select elements with id=key and class=value and insert value
17
- // Beispiel: Wählen Sie Elemente mit id = key und class = value aus und fügen Sie einen Wert ein
18
- if (!settings) return;
19
- $('.value').each(function () {
20
- let $key = $(this);
21
- let id = $key.attr('id');
22
-
23
- // check which type of html element
24
- // do not call onChange direct, because onChange could expect some arguments
25
- // Rufen Sie onChange nicht direkt auf, da onChange einige Argumente erwarten kann
26
- if ($key.attr('type') === 'checkbox') {
27
- $key.prop('checked', settings[id]) // read setting value from adapter config object and set checkbox in config page → Lesen Sie den Einstellungswert aus dem Adapterkonfigurationsobjekt und setzen Sie das Kontrollkästchen auf der Konfigurationsseite
28
- .on('change', () => {
29
- showHideSettings();
30
- onChange(); // set listener to checkbox and call onChange if the value has changed => setze listener auf checkbox und rufe onChange auf, wenn sich der Wert geändert hat
31
- });
32
- } else {
33
- $key.val(settings[id])
34
- .on('change', () => onChange())
35
- .on('keyup', () => onChange())
36
- ;
37
- }
38
- });
39
-
40
-
41
- //var events = [];
42
-
43
- let events = settings.events || [];
44
-
45
- showHideSettings();
46
-
47
- values2table('events', events, onChange, tableOnReady);
48
-
49
- $('#responseOIDDialog').on('click', function () {
50
- let devices = table2values('events');
51
- let id = 0;
52
- for (let i = 0; i < devices.length; i++) {
53
- id = id +1;
54
- }
55
- setTimeout(function () {
56
- $('#events .values-input[data-name="enabled"][data-index="' + id + '"]').prop('checked', true);
57
- $('#events .values-input[data-name="wateringTime"][data-index="' + id + '"]').val('20').trigger('change');
58
- $('#events .values-input[data-name="wateringAdd"][data-index="' + id + '"]').val('200').trigger('change');
59
- $('#events .values-input[data-name="wateringInterval"][data-index="' + id + '"]').val('0').trigger('change');
60
- $('#events .values-input[data-name="addWateringTime"][data-index="' + id + '"]').val('0').trigger('change');
61
- $('#events .values-input[data-name="addTriggersIrrigation"][data-index="' + id + '"]').val('50').trigger('change');
62
- $('#events .values-input[data-name="maxSoilMoistureIrrigation"][data-index="' + id + '"]').val('8').trigger('change');
63
- $('#events .values-input[data-name="maxSoilMoistureRainPct"][data-index="' + id + '"]').val('120').trigger('change');
64
- $('#events .values-input[data-name="triggersIrrigation"][data-index="' + id + '"]').val('50').trigger('change');
65
- $('#events .values-input[data-name="pipeFlow"][data-index="' + id + '"]').val('700').trigger('change');
66
- $('#events .values-input[data-name="methodControlSM"][data-index="' + id + '"]').val('calculation').trigger('change');
67
- //$('#events .values-input[data-name="methodControlSM"][data-index="' + id + '"]').select().trigger('change'); // select() > val
68
- //$('#events .values-input[data-name="triggerSM"][data-index="' + id + '"]').val().trigger('change');
69
- $('#events .values-input[data-name="analogZPct"][data-index="' + id + '"]').val('0').trigger('change');
70
- $('#events .values-input[data-name="analogOHPct"][data-index="' + id + '"]').val('100').trigger('change');
71
- $('#events .values-input[data-name="startDay"][data-index="' + id + '"]').val('threeRd').trigger('change');
72
- //$('#events .values-input[data-name="startDay"][data-index="' + id + '"]').select().trigger('change');
73
- // boolean
74
- $('#events .values-input[data-name="booster"][data-index="' + id + '"]').prop('checked', false);
75
- $('#events .values-input[data-name="endIrrigation"][data-index="' + id + '"]').prop('checked', true);
76
- $('#events .values-input[data-name="inGreenhouse"][data-index="' + id + '"]').prop('checked', false);
77
-
78
- $('#events .values-input[data-name="sun"][data-index="' + id + '"]').prop('checked', false);
79
- $('#events .values-input[data-name="mon"][data-index="' + id + '"]').prop('checked', false);
80
- $('#events .values-input[data-name="tue"][data-index="' + id + '"]').prop('checked', false);
81
- $('#events .values-input[data-name="wed"][data-index="' + id + '"]').prop('checked', false);
82
- $('#events .values-input[data-name="thur"][data-index="' + id + '"]').prop('checked', false);
83
- $('#events .values-input[data-name="fri"][data-index="' + id + '"]').prop('checked', false);
84
- $('#events .values-input[data-name="sat"][data-index="' + id + '"]').prop('checked', false);
85
-
86
- }, 1000);
87
-
88
- initSelectId(function (sid) {
89
- sid.selectId('show', $('#events .values-input[data-name="name"][data-index="' + id + '"]').val(), function (newId) {
90
- if (newId) {
91
- $('#events .values-input[data-name="name"][data-index="' + id + '"]').val(newId).trigger('change');
92
- socket.emit('getObject', newId, function (err, obj) {
93
- let name = getName(obj);
94
- $('#events .values-input[data-name="sprinkleName"][data-index="' + id + '"]').val(name).trigger('change');
95
- });
96
- }
97
- });
98
- });
99
- });
100
-
101
- // Registerkarte Sprinkler => Irrigation settings
102
-
103
- $('#triggerSMDialogPopUp').on('click', function () {
104
- initSelectId(function (sid) {
105
- sid.selectId('show', $('#triggerSM').val(), function (newId) {
106
- if (newId) {
107
- $('#triggerSM').val(newId).trigger('change');
108
- }
109
- });
110
- });
111
- });
112
-
113
- // Registerkarte Pump Settings
114
-
115
- $('#triggerControlVoltageDialogPopUp').on('click', function () {
116
- initSelectId(function (sid) {
117
- sid.selectId('show', $('#triggerControlVoltage').val(), function (newId) {
118
- if (newId) {
119
- $('#triggerControlVoltage').val(newId).trigger('change');
120
- }
121
- });
122
- });
123
- });
124
-
125
- $('#triggerMainPumpDialogPopUp').on('click', function () {
126
- initSelectId(function (sid) {
127
- sid.selectId('show', $('#triggerMainPump').val(), function (newId) {
128
- if (newId) {
129
- $('#triggerMainPump').val(newId).trigger('change');
130
- }
131
- });
132
- });
133
- });
134
-
135
- $('#triggerCisternPumpDialogPopUp').on('click', function () {
136
- initSelectId(function (sid) {
137
- sid.selectId('show', $('#triggerCisternPump').val(), function (newId) {
138
- if (newId) {
139
- $('#triggerCisternPump').val(newId).trigger('change');
140
- }
141
- });
142
- });
143
- });
144
-
145
- $('#actualValueLevelDialogPopUp').on('click', function () {
146
- initSelectId(function (sid) {
147
- sid.selectId('show', $('#actualValueLevel').val(), function (newId) {
148
- if (newId) {
149
- $('#actualValueLevel').val(newId).trigger('change');
150
- }
151
- });
152
- });
153
- });
154
-
155
- // Registerkarte Extra Settings
156
-
157
- $('#sensorOutsideTemperatureDialogPopUp').on('click', function () {
158
- initSelectId(function (sid) {
159
- sid.selectId('show', $('#sensorOutsideTemperature').val(), function (newId) {
160
- if (newId) {
161
- $('#sensorOutsideTemperature').val(newId).trigger('change');
162
- }
163
- });
164
- });
165
- });
166
-
167
- $('#sensorOutsideHumidityDialogPopUp').on('click', function () {
168
- initSelectId(function (sid) {
169
- sid.selectId('show', $('#sensorOutsideHumidity').val(), function (newId) {
170
- if (newId) {
171
- $('#sensorOutsideHumidity').val(newId).trigger('change');
172
- }
173
- });
174
- });
175
- });
176
-
177
- $('#sensorWindSpeedDialogPopUp').on('click', function () {
178
- initSelectId(function (sid) {
179
- sid.selectId('show', $('#sensorWindSpeed').val(), function (newId) {
180
- if (newId) {
181
- $('#sensorWindSpeed').val(newId).trigger('change');
182
- }
183
- });
184
- });
185
- });
186
-
187
- $('#sensorBrightnessDialogPopUp').on('click', function () {
188
- initSelectId(function (sid) {
189
- sid.selectId('show', $('#sensorBrightness').val(), function (newId) {
190
- if (newId) {
191
- $('#sensorBrightness').val(newId).trigger('change');
192
- }
193
- });
194
- });
195
- });
196
-
197
- $('#sensorRainfallDialogPopUp').on('click', function () {
198
- initSelectId(function (sid) {
199
- sid.selectId('show', $('#sensorRainfall').val(), function (newId) {
200
- if (newId) {
201
- $('#sensorRainfall').val(newId).trigger('change');
202
- }
203
- });
204
- });
205
- });
206
-
207
- $('#pathRainForecastDialogPopUp').on('click', function () {
208
- initSelectId(function (sid) {
209
- sid.selectId('show', $('#pathRainForecast').val(), function (newId) {
210
- if (newId) {
211
- $('#pathRainForecast').val(newId).trigger('change');
212
- }
213
- });
214
- });
215
- });
216
-
217
- onChange(false);
218
- // reinitialize all the Materialize labels on the page if you are dynamically adding inputs:
219
- // Initialisieren Sie alle Materialise-Beschriftungen auf der Seite neu, wenn Sie dynamisch Eingaben hinzufügen:
220
-
221
- $('.timepicker').timepicker({
222
- "twelveHour": false
223
- });
224
-
225
- if (M) M.updateTextFields();
226
-
227
- getAdapterInstances('feiertage', function (instances) {
228
- fillInstances('publicHolInstance', instances, settings['publicHolInstance']);
229
- });
230
-
231
- getAdapterInstances('daswetter', function (instances) {
232
- fillInstances('weatherForInstance', instances, settings['weatherForInstance']);
233
- });
234
-
235
- getAdapterInstances('telegram', function (instances) {
236
- fillInstances('telegramInstance', instances, settings['telegramInstance']);
237
- });
238
-
239
- getAdapterInstances('whatsapp-cmb', function (instances) {
240
- fillInstances('whatsappInstance', instances, settings['whatsappInstance']);
241
- });
242
-
243
- getAdapterInstances('email', function (instances) {
244
- fillInstances('emailInstance', instances, settings['emailInstance']);
245
- });
246
-
247
- getAdapterInstances('pushover', function (instances) {
248
- fillInstances('pushoverInstance', instances, settings['pushoverInstance']);
249
- });
250
-
251
- sendTo(null, 'getTelegramUser', null, function (obj) {
252
- fillTelegramUser(settings['telegramUser'], obj);
253
- });
254
- fillPosition();
255
- }
256
-
257
- /**
258
- * Automatic filling in of astronomical data if the field is empty.
259
- * Automatisches Ausfüllen von astronomischen Daten, wenn das Feld leer ist.
260
- */
261
- function fillPosition() {
262
- socket.emit('getObject', 'system.config', function (err, obj) {
263
- let $mLongitude = $('#longitude');
264
- if ($mLongitude.val() === '') {
265
- $mLongitude.val(obj.common.longitude).trigger('change');
266
- }
267
- let $mLatitude = $('#latitude');
268
- if ($mLatitude.val() === '') {
269
- $mLatitude.val(obj.common.latitude).trigger('change');
270
- }
271
- });
272
- }
273
-
274
- /**
275
- *
276
- * @param id
277
- * @param obj
278
- */
279
- function fillTelegramUser(id, obj) {
280
- /*let user = str.replace(/[{}"\\]/g,"").split(',');*/
281
- /*obj = {"0123456789":{"firstName":"Dirk","userName":"Dirk_Peter"}};*/
282
- let $sel = $('#telegramUser');
283
- $sel.html('<option value="allTelegramUsers">' + _('All Receiver') + '</option>');
284
- for(let key in obj){
285
- if (obj.hasOwnProperty (key)) {
286
- let names = [];
287
- let userName;
288
- obj[key].userName && names.push(obj[key].userName);
289
- obj[key].firstName && names.push(obj[key].firstName);
290
- if (obj[key].userName) {
291
- userName = obj[key].userName;
292
- } else {
293
- userName = obj[key].firstName
294
- }
295
- $sel.append('<option value="' + userName + '"' + (id === userName ? ' selected' : '') + '>' + names.join(' / ') +'</option>');
296
- }
297
- }
298
- $sel.select();
299
- }
300
-
301
- /**
302
- *
303
- * @param {string} id
304
- * @param arr
305
- * @param val
306
- */
307
- function fillInstances(id, arr, val) {
308
- let $sel = $('#' + id);
309
- $sel.html('<option value="">' + _('none') + '</option>');
310
- for (let i = 0; i < arr.length; i++) {
311
- let _id = arr[i]._id.replace('system.adapter.', '');
312
- $sel.append('<option value="' + _id + '"' + (_id === val ? ' selected' : '') + '>' + _id + '</option>');
313
- }
314
- $sel.select();
315
- }
316
-
317
- /**
318
- *
319
- */
320
- function tableOnReady() {
321
- $('#events .table-values-div .table-values .values-buttons[data-command="edit2"]').on('click', function () {
322
- let id = $(this).data('index');
323
- initSelectId(function (sid) {
324
- sid.selectId('show', $('#events .values-input[data-name="name"][data-index="' + id + '"]').val(), function (newId) {
325
- if (newId) {
326
- $('#events .values-input[data-name="name"][data-index="' + id + '"]').val(newId).trigger('change');
327
- socket.emit('getObject', newId, function (err, obj) {
328
- let name = getName(obj);
329
- $('#events .values-input[data-name="sprinkleName"][data-index="' + id + '"]').val(name).trigger('change');
330
- });
331
- }
332
- });
333
- });
334
- });
335
-
336
- $('#events .table-values-div .table-values .values-buttons[data-command="edit"]').on('click', function () {
337
- let id = $(this).data('index');
338
- $('#triggerID').val($('#events .values-input[data-name="triggerID"][data-index="' + id + '"]').val());
339
- $('#wateringTime').val($('#events .values-input[data-name="wateringTime"][data-index="' + id + '"]').val());
340
- $('#wateringAdd').val($('#events .values-input[data-name="wateringAdd"][data-index="' + id + '"]').val());
341
- $('#wateringInterval').val($('#events .values-input[data-name="wateringInterval"][data-index="' + id + '"]').val());
342
- $('#addWateringTime').val($('#events .values-input[data-name="addWateringTime"][data-index="' + id + '"]').val());
343
- $('#addTriggersIrrigation').val($('#events .values-input[data-name="addTriggersIrrigation"][data-index="' + id + '"]').val());
344
- $('#maxSoilMoistureIrrigation').val($('#events .values-input[data-name="maxSoilMoistureIrrigation"][data-index="' + id + '"]').val());
345
- $('#maxSoilMoistureRainPct').val($('#events .values-input[data-name="maxSoilMoistureRainPct"][data-index="' + id + '"]').val());
346
- $('#triggersIrrigation').val($('#events .values-input[data-name="triggersIrrigation"][data-index="' + id + '"]').val());
347
- $('#pipeFlow').val($('#events .values-input[data-name="pipeFlow"][data-index="' + id + '"]').val());
348
- $('#methodControlSM').val($('#events .values-input[data-name="methodControlSM"][data-index="' + id + '"]').val());
349
- $('#methodControlSM').select().trigger('change');
350
- $('#triggerSM').val($('#events .values-input[data-name="triggerSM"][data-index="' + id + '"]').val());
351
- $('#analogZPct').val($('#events .values-input[data-name="analogZPct"][data-index="' + id + '"]').val());
352
- $('#analogOHPct').val($('#events .values-input[data-name="analogOHPct"][data-index="' + id + '"]').val());
353
- $('#startDay').val($('#events .values-input[data-name="startDay"][data-index="' + id + '"]').val());
354
- $('#startDay').select().trigger('change');
355
- // boolean
356
- $('#booster').prop('checked', ($('#events .values-input[data-name="booster"][data-index="' + id + '"]')).prop('checked'));
357
- $('#endIrrigation').prop('checked', ($('#events .values-input[data-name="endIrrigation"][data-index="' +id + '"]')).prop('checked'));
358
- $('#inGreenhouse').prop('checked', ($('#events .values-input[data-name="inGreenhouse"][data-index="' +id + '"]')).prop('checked'));
359
- $('#sun').prop('checked', ($('#events .values-input[data-name="sun"][data-index="' +id + '"]')).prop('checked'));
360
- $('#mon').prop('checked', ($('#events .values-input[data-name="mon"][data-index="' +id + '"]')).prop('checked'));
361
- $('#tue').prop('checked', ($('#events .values-input[data-name="tue"][data-index="' +id + '"]')).prop('checked'));
362
- $('#wed').prop('checked', ($('#events .values-input[data-name="wed"][data-index="' +id + '"]')).prop('checked'));
363
- $('#thur').prop('checked', ($('#events .values-input[data-name="thur"][data-index="' +id + '"]')).prop('checked'));
364
- $('#fri').prop('checked', ($('#events .values-input[data-name="fri"][data-index="' +id + '"]')).prop('checked'));
365
- $('#sat').prop('checked', ($('#events .values-input[data-name="sat"][data-index="' +id + '"]')).prop('checked'));
366
-
367
- $('#dialogDeviceEditSprinkle').html($('#events .values-input[data-name="sprinkleName"][data-index="' + id + '"]').val());
368
-
369
- setTimeout(function () {
370
- initDialogSprinkle(function (sid) {
371
- let newTriggerID = $('#triggerID').val();
372
- let newWateringTime = $('#wateringTime').val();
373
- let newWateringAdd = $('#wateringAdd').val();
374
- let newWateringInterval = $('#wateringInterval').val();
375
- let newAddWateringTime = $('#addWateringTime').val();
376
- let newAddTriggersIrrigation = $('#addTriggersIrrigation').val();
377
- let newMaxSoilMoistureIrrigation = $('#maxSoilMoistureIrrigation').val();
378
- let newMaxSoilMoistureRainPct = $('#maxSoilMoistureRainPct').val();
379
- let newTriggersIrrigation = $('#triggersIrrigation').val();
380
- let newPipeFlow = $('#pipeFlow').val();
381
- let newMethodControlSM = $('#methodControlSM').val();
382
- let newTriggerSM = $('#triggerSM').val();
383
- let newAnalogZPct = $('#analogZPct').val();
384
- let newAnalogOHPct = $('#analogOHPct').val();
385
- let newStartDay = $('#startDay').val();
386
- // boolean
387
- let newBooster = $('#booster').prop('checked');
388
- let newEndIrrigation = $('#endIrrigation').prop('checked');
389
- let newInGreenhouse = $('#inGreenhouse').prop('checked');
390
- let newSun = $('#sun').prop('checked');
391
- let newMon = $('#mon').prop('checked');
392
- let newTue = $('#tue').prop('checked');
393
- let newWed = $('#wed').prop('checked');
394
- let newThur = $('#thur').prop('checked');
395
- let newFri = $('#fri').prop('checked');
396
- let newSat = $('#sat').prop('checked');
397
-
398
- $('#events .values-input[data-name="triggerID"][data-index="' + id + '"]').val(newTriggerID).trigger('change');
399
- $('#events .values-input[data-name="wateringTime"][data-index="' + id + '"]').val(newWateringTime).trigger('change');
400
- $('#events .values-input[data-name="wateringAdd"][data-index="' + id + '"]').val(newWateringAdd).trigger('change');
401
- $('#events .values-input[data-name="wateringInterval"][data-index="' + id + '"]').val(newWateringInterval).trigger('change');
402
- $('#events .values-input[data-name="addWateringTime"][data-index="' + id + '"]').val(newAddWateringTime).trigger('change');
403
- $('#events .values-input[data-name="addTriggersIrrigation"][data-index="' + id + '"]').val(newAddTriggersIrrigation).trigger('change');
404
- $('#events .values-input[data-name="maxSoilMoistureIrrigation"][data-index="' + id + '"]').val(newMaxSoilMoistureIrrigation).trigger('change');
405
- $('#events .values-input[data-name="maxSoilMoistureRainPct"][data-index="' + id + '"]').val(newMaxSoilMoistureRainPct).trigger('change');
406
- $('#events .values-input[data-name="triggersIrrigation"][data-index="' + id + '"]').val(newTriggersIrrigation).trigger('change');
407
- $('#events .values-input[data-name="pipeFlow"][data-index="' + id + '"]').val(newPipeFlow).trigger('change');
408
- $('#events .values-input[data-name="methodControlSM"][data-index="' + id + '"]').val(newMethodControlSM).trigger('change');
409
- $('#events .values-input[data-name="triggerSM"][data-index="' + id + '"]').val(newTriggerSM).trigger('change');
410
- $('#events .values-input[data-name="analogZPct"][data-index="' + id + '"]').val(newAnalogZPct).trigger('change');
411
- $('#events .values-input[data-name="analogOHPct"][data-index="' + id + '"]').val(newAnalogOHPct).trigger('change');
412
- $('#events .values-input[data-name="startDay"][data-index="' + id + '"]').val(newStartDay).trigger('change');
413
- // boolean
414
- $('#events .values-input[data-name="booster"][data-index="' + id + '"]').prop('checked',newBooster);
415
- $('#events .values-input[data-name="endIrrigation"][data-index="' + id + '"]').prop('checked',newEndIrrigation);
416
- $('#events .values-input[data-name="inGreenhouse"][data-index="' + id + '"]').prop('checked',newInGreenhouse);
417
- $('#events .values-input[data-name="sun"][data-index="' + id + '"]').prop('checked',newSun);
418
- $('#events .values-input[data-name="mon"][data-index="' + id + '"]').prop('checked',newMon);
419
- $('#events .values-input[data-name="tue"][data-index="' + id + '"]').prop('checked',newTue);
420
- $('#events .values-input[data-name="wed"][data-index="' + id + '"]').prop('checked',newWed);
421
- $('#events .values-input[data-name="thur"][data-index="' + id + '"]').prop('checked',newThur);
422
- $('#events .values-input[data-name="fri"][data-index="' + id + '"]').prop('checked',newFri);
423
- $('#events .values-input[data-name="sat"][data-index="' + id + '"]').prop('checked',newSat);
424
-
425
- });
426
- }, 20)
427
- });
428
- }
429
-
430
- /**
431
- * This will be called by the admin adapter when the user presses the Save or Save and Close button
432
- * Dies wird vom Admin-Adapter aufgerufen, wenn der Benutzer die Schaltfläche Speichern oder Speichern und Schließen drückt
433
- * @param {object} callback - JSON object which holds keys and their values that will be written to adapter config object
434
- * - JSON-Objekt, das Schlüssel und deren Werte enthält, die in das Adapterkonfigurationsobjekt geschrieben werden
435
- */
436
- function save(callback) {
437
- // example: select elements with class=value and build settings object
438
- // Beispiel: Wählen Sie Elemente mit class = value aus und erstellen Sie das Einstellungsobjekt
439
- let obj = {};
440
- $('#mainSettings .value').each(function () {
441
- let $this = $(this);
442
- if ($this.attr('type') === 'checkbox') {
443
- obj[$this.attr('id')] = $this.prop('checked');
444
- } else if ($this.attr('type') === 'number') {
445
- obj[$this.attr('id')] = parseFloat($this.val());
446
- } else {
447
- obj[$this.attr('id')] = $this.val();
448
- }
449
- });
450
-
451
- // Get edited table
452
- obj.events = table2values('events'); //es wird nicht devices abgespeichert, sondern der Inhalt der Tabelle (all Zeilen müssen value="" haben)
453
-
454
-
455
- callback(obj);
456
- }
457
-
458
- /**
459
- * Show and hide the display depending on the events
460
- *
461
- * Anzeige je nach Ereignissen ein- und ausblenden
462
- * @param callback
463
- */
464
- function showHideSettings(callback) {
465
- /** additional irrigation activated =>
466
- * zusätzliche Bewässerung aktiviert
467
- * @type {boolean}
468
- */
469
- let selAddStartTime = false;
470
-
471
- // Zeiteinstellungen => Feiertagseinstellung sichtbar bei combobox
472
- $('#wateringStartTime').on('change', function () {
473
- if ($(this).val() === 'livingTime') { /*Start zur festen Zeit*/
474
- $('.visTimeShift').hide();
475
- $('.visWeekLiving').show();
476
- } else if ($(this).val() === 'livingSunrise') { /*Start mit Sonnenaufgang*/
477
- $('.visTimeShift').show();
478
- $('.visWeekLiving').hide();
479
- } else if ($(this).val() === 'livingGoldenHourEnd') { /*Start mit dem Ende der Golden hour*/
480
- $('.visTimeShift').hide();
481
- $('.visWeekLiving').hide();
482
- } else if ($(this).val() === 'livingSunset') { /*Start mit Sonnenaufgang*/
483
- $('.visTimeShift').show();
484
- $('.visWeekLiving').hide();
485
- }
486
- }).trigger('change');
487
-
488
- // Pumpeneinstellungen → Zisterne sichtbar bei checkbox
489
- if ($('#cisternSettings').prop('checked')) {
490
- $('.cisternObjekt').show();
491
- } else {
492
- $('.cisternObjekt').hide();
493
- }
494
-
495
-
496
- // Additional start time => sichtbar je nach auswahl
497
- $('#selectAddStartTime').on('change',function(){
498
- if ($(this).val() === 'noAddStartTime') {
499
- selAddStartTime = false;
500
- $('.showGreaterETpCur').hide();
501
- $('.showAddStartTime').hide();
502
- $('.showExtSig').hide();
503
- } else if ($(this).val() === 'greaterETpCurrent') {
504
- selAddStartTime = true;
505
- $('.showGreaterETpCur').show();
506
- $('.showAddStartTime').show();
507
- $('.showExtSig').hide();
508
- } else if ($(this).val() === 'withExternalSignal') {
509
- selAddStartTime = true;
510
- $('.showGreaterETpCur').hide();
511
- $('.showAddStartTime').show();
512
- $('.showExtSig').show();
513
- } else {
514
- selAddStartTime = false;
515
- $('.showGreaterETpCur').hide();
516
- $('.showAddStartTime').hide();
517
- $('.showExtSig').hide();
518
- }
519
- }).trigger('change');
520
-
521
- // Zeiteinstellungen => Feiertagseinstellung sichtbar bei checkbox
522
- let mPublicWeekend = $('#publicWeekend').prop('checked');
523
- if (mPublicWeekend) {
524
- $('.publicWeek').show();
525
- $('.publicWeekHol').show();
526
- } else {
527
- $('.publicWeek').hide();
528
- $('.publicWeekHol').hide();
529
- }
530
-
531
- if ($('#publicHolidays').prop('checked') && mPublicWeekend) {
532
- $('.publicHol').show();
533
- } else {
534
- $('.publicHol').hide();
535
- }
536
-
537
- // zusätzliche Einstellungen => Wettervorhersage
538
- let mWeatherForecast = $('#weatherForecast').prop('checked');
539
- if (mWeatherForecast) {
540
- $('.weatherFor').show();
541
- } else {
542
- $('.weatherFor').hide();
543
- }
544
-
545
- // individuelle Wettervorhersage
546
- $('#weatherForecastService').on('change', function () {
547
- if ($(this).val() === 'ownDataPoint') {
548
- $('.showOwnDataPoint').show();
549
- $('.showDasWetter').hide();
550
- } else if ($(this).val() === 'dasWetter') {
551
- $('.showOwnDataPoint').hide();
552
- $('.showDasWetter').show();
553
- }
554
- }).trigger('change');
555
-
556
- // Benachrichtigung Karte Ein / Aus
557
- if ($('#notificationEnabled').prop('checked')) {
558
- $('.tab-notification').show();
559
- } else {
560
- $('.tab-notification').hide();
561
- }
562
-
563
-
564
- // Benachrichtigung - Typ auswahl
565
- $('#notificationsType').on('change', function () {
566
- if ($(this).val() === 'Telegram') {
567
- $('.email').hide();
568
- $('.pushover').hide();
569
- $('.telegram').show();
570
- $('.whatsapp').hide();
571
- } else if ($(this).val() === 'E-Mail') {
572
- $('.email').show();
573
- $('.telegram').hide();
574
- $('.pushover').hide();
575
- $('.whatsapp').hide();
576
- } else if ($(this).val() === 'Pushover') {
577
- $('.pushover').show();
578
- $('.telegram').hide();
579
- $('.email').hide();
580
- $('.whatsapp').hide();
581
- } else if ($(this).val() === 'WhatsApp') {
582
- $('.whatsapp').show();
583
- $('.telegram').hide();
584
- $('.email').hide();
585
- $('.pushover').hide();
586
- }
587
- }).trigger('change');
588
-
589
- // Sensorauswahl in Sprinkler - Main settings
590
- $('#methodControlSM').on('change',function(){
591
-
592
- if ($(this).val() === 'calculation') {
593
- if (selAddStartTime) {
594
- $('.showAddWateringTime').show();
595
- $('.showAddTriggersIrrigation').hide();
596
- }else{
597
- $('.showAddWateringTime').hide();
598
- $('.showAddTriggersIrrigation').hide();
599
- }
600
- $('.visInGreenhouse').show()
601
- $('.visSensor').hide();
602
- $('.visAnalog').hide();
603
- $('.visCalculation').show();
604
- $('.visNotAnalog').show();
605
- $('.visFixDay').hide();
606
-
607
- } else if ($(this).val() === 'bistable') {
608
- if (mWeatherForecast) {
609
- $('.visInGreenhouse').show()
610
- } else {
611
- $('.visInGreenhouse').hide()
612
- }
613
- if (selAddStartTime) {
614
- $('.showAddWateringTime').show();
615
- $('.showAddTriggersIrrigation').hide();
616
- }else{
617
- $('.showAddWateringTime').hide();
618
- $('.showAddTriggersIrrigation').hide();
619
- }
620
- $('.visSensor').show();
621
- $('.visAnalog').hide();
622
- $('.visCalculation').hide();
623
- $('.visNotAnalog').hide();
624
- $('.visFixDay').hide();
625
-
626
- } else if ($(this).val() === 'analog') {
627
- if (mWeatherForecast) {
628
- $('.visInGreenhouse').show()
629
- } else {
630
- $('.visInGreenhouse').hide()
631
- }
632
- if (selAddStartTime) {
633
- $('.showAddWateringTime').show();
634
- $('.showAddTriggersIrrigation').show();
635
- }else{
636
- $('.showAddWateringTime').hide();
637
- $('.showAddTriggersIrrigation').hide();
638
- }
639
- $('.visSensor').show();
640
- $('.visAnalog').show();
641
- $('.visCalculation').hide();
642
- $('.visNotAnalog').show();
643
- $('.visFixDay').hide();
644
-
645
- } else if ($(this).val() === 'fixDay') {
646
- if (mWeatherForecast) {
647
- $('.visInGreenhouse').show()
648
- } else {
649
- $('.visInGreenhouse').hide()
650
- }
651
- if (selAddStartTime) {
652
- $('.showAddWateringTime').show();
653
- $('.showAddTriggersIrrigation').hide();
654
- }else{
655
- $('.showAddWateringTime').hide();
656
- $('.showAddTriggersIrrigation').hide();
657
- }
658
- $('.visSensor').hide();
659
- $('.visAnalog').hide();
660
- $('.visCalculation').hide();
661
- $('.visNotAnalog').hide();
662
- $('.visFixDay').show();
663
- } else {
664
- $(this).val('calculation');
665
- if (selAddStartTime) {
666
- $('.showAddWateringTime').show();
667
- $('.showAddTriggersIrrigation').show();
668
- }else{
669
- $('.showAddWateringTime').hide();
670
- $('.showAddTriggersIrrigation').hide();
671
- }
672
- $('.visInGreenhouse').show()
673
- $('.visSensor').hide();
674
- $('.visAnalog').hide();
675
- $('.visCalculation').show();
676
- $('.visNotAnalog').show();
677
- $('.visFixDay').hide();
678
- }
679
- }).trigger('change');
680
-
681
- // Wochentags-Auswahl in Sprinkler - Main settings
682
- $('#startDay').on('change', function () {
683
- if (($(this).val() === 'fixDay')) {
684
- $('.visFixDaysWeek').show();
685
- } else {
686
- $('.visFixDaysWeek').hide();
687
- }
688
- }).trigger('change');
689
- }
690
-
691
- let selectId;
692
-
693
- /**
694
- *
695
- * @param {object} callback
696
- * @returns {*}
697
- */
698
- function initSelectId(callback) {
699
- if (selectId) {
700
- return callback(selectId);
701
- }
702
- socket.emit('getObjects', function (err, objs) {
703
- selectId = $('#dialog-select-member').selectId('init', {
704
- noMultiselect: true,
705
- objects: objs,
706
- imgPath: '../../lib/css/fancytree/',
707
- filter: {type: 'state'},
708
- name: 'scenes-select-state',
709
- texts: {
710
- select: _('Select'),
711
- cancel: _('Cancel'),
712
- all: _('All'),
713
- id: _('ID'),
714
- name: _('Name'),
715
- role: _('Role'),
716
- room: _('Room'),
717
- value: _('Value'),
718
- selectid: _('Select ID'),
719
- from: _('From'),
720
- lc: _('Last changed'),
721
- ts: _('Time stamp'),
722
- wait: _('Processing...'),
723
- ack: _('Acknowledged'),
724
- selectAll: _('Select all'),
725
- unselectAll: _('Deselect all'),
726
- invertSelection: _('Invert selection')
727
- },
728
- columns: ['image', 'name', 'role', 'room']
729
- });
730
- callback(selectId);
731
- });
732
- }
733
-
734
- /**
735
- *
736
- * @param obj
737
- * @returns {string|*}
738
- */
739
- function getName(obj) {
740
- if (obj && obj.common && obj.common.name) {
741
- let name = obj.common.name;
742
- if (typeof name === 'object') {
743
- name = name[systemLang] || name.en;
744
- }
745
- return name;
746
- } else if (obj && obj.name) {
747
- let name = obj.name;
748
- if (typeof name === 'object') {
749
- name = name[systemLang] || name.en;
750
- }
751
- return name;
752
- } else {
753
- let parts = obj.id.split('.');
754
- let last = parts.pop();
755
- return last[0].toUpperCase() + last.substring(1).toLowerCase();
756
- }
757
- }
758
-
759
- /**
760
- *
761
- * @param callback
762
- */
763
- function initDialogSprinkle(callback) {
764
- let $editDialog = $('#dialog-sprinkle-edit');
765
- if (!$editDialog.data('inited')) {
766
- $editDialog.data('inited', true);
767
- $editDialog.modal({
768
- dismissible: false
769
- });
770
-
771
- $editDialog.find('.btn-set').on('click', function () {
772
- let $editDialog = $('#dialog-sprinkle-edit');
773
- let callback = $editDialog.data('callback');
774
- if (typeof callback === 'function') callback();
775
- $editDialog.data('callback', null);
776
- });
777
- }
778
- $editDialog.data('callback', callback);
779
- $editDialog.modal('open');
1
+ /**
2
+ * @license
3
+ * iobroker.sprinklecontrol - Copyright (c) by Dirk-Peter-md
4
+ * Please visit https://github.com/Dirk-Peter-md/ioBroker.sprinklecontrol for licence-agreement and further information
5
+ */
6
+
7
+ //Settings
8
+
9
+ /**
10
+ * This will be called by the admin adapter when the settings page loads
11
+ * Dies wird vom Adapter Administrator aufgerufen, wenn die Einstellungsseite geladen wird
12
+ * @param {object} settings - represents the adapter config object
13
+ * @param {object} onChange - callback
14
+ */
15
+ function load(settings, onChange) {
16
+ // example: select elements with id=key and class=value and insert value
17
+ // Beispiel: Wählen Sie Elemente mit id = key und class = value aus und fügen Sie einen Wert ein
18
+ if (!settings) return;
19
+ $('.value').each(function () {
20
+ const $key = $(this);
21
+ const id = $key.attr('id');
22
+
23
+ // check which type of html element
24
+ // do not call onChange direct, because onChange could expect some arguments
25
+ // Rufen Sie onChange nicht direkt auf, da onChange einige Argumente erwarten kann
26
+ if ($key.attr('type') === 'checkbox') {
27
+ $key.prop('checked', settings[id]) // read setting value from adapter config object and set checkbox in config page → Lesen Sie den Einstellungswert aus dem Adapterkonfigurationsobjekt und setzen Sie das Kontrollkästchen auf der Konfigurationsseite
28
+ .on('change', () => {
29
+ showHideSettings();
30
+ onChange(); // set listener to checkbox and call onChange if the value has changed => setze listener auf checkbox und rufe onChange auf, wenn sich der Wert geändert hat
31
+ });
32
+ } else {
33
+ $key.val(settings[id])
34
+ .on('change', () => onChange())
35
+ .on('keyup', () => onChange())
36
+ ;
37
+ }
38
+ });
39
+
40
+
41
+ //var events = [];
42
+
43
+ const events = settings.events || [];
44
+
45
+ showHideSettings();
46
+
47
+ values2table('events', events, onChange, tableOnReady);
48
+
49
+ $('#responseOIDDialog').on('click', function () {
50
+ const devices = table2values('events');
51
+ let id = 0;
52
+ for (let i = 0; i < devices.length; i++) {
53
+ id = id +1;
54
+ }
55
+ setTimeout(function () {
56
+ $('#events .values-input[data-name="enabled"][data-index="' + id + '"]').prop('checked', true);
57
+ $('#events .values-input[data-name="wateringTime"][data-index="' + id + '"]').val('20').trigger('change');
58
+ $('#events .values-input[data-name="wateringAdd"][data-index="' + id + '"]').val('200').trigger('change');
59
+ $('#events .values-input[data-name="wateringInterval"][data-index="' + id + '"]').val('0').trigger('change');
60
+ $('#events .values-input[data-name="addWateringTime"][data-index="' + id + '"]').val('0').trigger('change');
61
+ $('#events .values-input[data-name="addTriggersIrrigation"][data-index="' + id + '"]').val('50').trigger('change');
62
+ $('#events .values-input[data-name="maxSoilMoistureIrrigation"][data-index="' + id + '"]').val('8').trigger('change');
63
+ $('#events .values-input[data-name="maxSoilMoistureRainPct"][data-index="' + id + '"]').val('120').trigger('change');
64
+ $('#events .values-input[data-name="triggersIrrigation"][data-index="' + id + '"]').val('50').trigger('change');
65
+ $('#events .values-input[data-name="pipeFlow"][data-index="' + id + '"]').val('700').trigger('change');
66
+ $('#events .values-input[data-name="methodControlSM"][data-index="' + id + '"]').val('calculation').trigger('change');
67
+ //$('#events .values-input[data-name="methodControlSM"][data-index="' + id + '"]').select().trigger('change'); // select() > val
68
+ //$('#events .values-input[data-name="triggerSM"][data-index="' + id + '"]').val().trigger('change');
69
+ $('#events .values-input[data-name="analogZPct"][data-index="' + id + '"]').val('0').trigger('change');
70
+ $('#events .values-input[data-name="analogOHPct"][data-index="' + id + '"]').val('100').trigger('change');
71
+ $('#events .values-input[data-name="startDay"][data-index="' + id + '"]').val('threeRd').trigger('change');
72
+ //$('#events .values-input[data-name="startDay"][data-index="' + id + '"]').select().trigger('change');
73
+ // boolean
74
+ $('#events .values-input[data-name="booster"][data-index="' + id + '"]').prop('checked', false);
75
+ $('#events .values-input[data-name="endIrrigation"][data-index="' + id + '"]').prop('checked', true);
76
+ $('#events .values-input[data-name="inGreenhouse"][data-index="' + id + '"]').prop('checked', false);
77
+
78
+ $('#events .values-input[data-name="sun"][data-index="' + id + '"]').prop('checked', false);
79
+ $('#events .values-input[data-name="mon"][data-index="' + id + '"]').prop('checked', false);
80
+ $('#events .values-input[data-name="tue"][data-index="' + id + '"]').prop('checked', false);
81
+ $('#events .values-input[data-name="wed"][data-index="' + id + '"]').prop('checked', false);
82
+ $('#events .values-input[data-name="thur"][data-index="' + id + '"]').prop('checked', false);
83
+ $('#events .values-input[data-name="fri"][data-index="' + id + '"]').prop('checked', false);
84
+ $('#events .values-input[data-name="sat"][data-index="' + id + '"]').prop('checked', false);
85
+
86
+ }, 1000);
87
+
88
+ initSelectId(function (sid) {
89
+ sid.selectId('show', $('#events .values-input[data-name="name"][data-index="' + id + '"]').val(), function (newId) {
90
+ if (newId) {
91
+ $('#events .values-input[data-name="name"][data-index="' + id + '"]').val(newId).trigger('change');
92
+ socket.emit('getObject', newId, function (err, obj) {
93
+ const name = getName(obj);
94
+ $('#events .values-input[data-name="sprinkleName"][data-index="' + id + '"]').val(name).trigger('change');
95
+ });
96
+ }
97
+ });
98
+ });
99
+ });
100
+
101
+ // Registerkarte Sprinkler => Irrigation settings
102
+
103
+ $('#triggerSMDialogPopUp').on('click', function () {
104
+ initSelectId(function (sid) {
105
+ sid.selectId('show', $('#triggerSM').val(), function (newId) {
106
+ if (newId) {
107
+ $('#triggerSM').val(newId).trigger('change');
108
+ }
109
+ });
110
+ });
111
+ });
112
+
113
+ // Registerkarte Pump Settings
114
+
115
+ $('#triggerControlVoltageDialogPopUp').on('click', function () {
116
+ initSelectId(function (sid) {
117
+ sid.selectId('show', $('#triggerControlVoltage').val(), function (newId) {
118
+ if (newId) {
119
+ $('#triggerControlVoltage').val(newId).trigger('change');
120
+ }
121
+ });
122
+ });
123
+ });
124
+
125
+ $('#triggerMainPumpDialogPopUp').on('click', function () {
126
+ initSelectId(function (sid) {
127
+ sid.selectId('show', $('#triggerMainPump').val(), function (newId) {
128
+ if (newId) {
129
+ $('#triggerMainPump').val(newId).trigger('change');
130
+ }
131
+ });
132
+ });
133
+ });
134
+
135
+ $('#triggerCisternPumpDialogPopUp').on('click', function () {
136
+ initSelectId(function (sid) {
137
+ sid.selectId('show', $('#triggerCisternPump').val(), function (newId) {
138
+ if (newId) {
139
+ $('#triggerCisternPump').val(newId).trigger('change');
140
+ }
141
+ });
142
+ });
143
+ });
144
+
145
+ $('#actualValueLevelDialogPopUp').on('click', function () {
146
+ initSelectId(function (sid) {
147
+ sid.selectId('show', $('#actualValueLevel').val(), function (newId) {
148
+ if (newId) {
149
+ $('#actualValueLevel').val(newId).trigger('change');
150
+ }
151
+ });
152
+ });
153
+ });
154
+
155
+ // Registerkarte Extra Settings
156
+
157
+ $('#sensorOutsideTemperatureDialogPopUp').on('click', function () {
158
+ initSelectId(function (sid) {
159
+ sid.selectId('show', $('#sensorOutsideTemperature').val(), function (newId) {
160
+ if (newId) {
161
+ $('#sensorOutsideTemperature').val(newId).trigger('change');
162
+ }
163
+ });
164
+ });
165
+ });
166
+
167
+ $('#sensorOutsideHumidityDialogPopUp').on('click', function () {
168
+ initSelectId(function (sid) {
169
+ sid.selectId('show', $('#sensorOutsideHumidity').val(), function (newId) {
170
+ if (newId) {
171
+ $('#sensorOutsideHumidity').val(newId).trigger('change');
172
+ }
173
+ });
174
+ });
175
+ });
176
+
177
+ $('#sensorWindSpeedDialogPopUp').on('click', function () {
178
+ initSelectId(function (sid) {
179
+ sid.selectId('show', $('#sensorWindSpeed').val(), function (newId) {
180
+ if (newId) {
181
+ $('#sensorWindSpeed').val(newId).trigger('change');
182
+ }
183
+ });
184
+ });
185
+ });
186
+
187
+ $('#sensorBrightnessDialogPopUp').on('click', function () {
188
+ initSelectId(function (sid) {
189
+ sid.selectId('show', $('#sensorBrightness').val(), function (newId) {
190
+ if (newId) {
191
+ $('#sensorBrightness').val(newId).trigger('change');
192
+ }
193
+ });
194
+ });
195
+ });
196
+
197
+ $('#sensorRainfallDialogPopUp').on('click', function () {
198
+ initSelectId(function (sid) {
199
+ sid.selectId('show', $('#sensorRainfall').val(), function (newId) {
200
+ if (newId) {
201
+ $('#sensorRainfall').val(newId).trigger('change');
202
+ }
203
+ });
204
+ });
205
+ });
206
+
207
+ $('#pathRainForecastDialogPopUp').on('click', function () {
208
+ initSelectId(function (sid) {
209
+ sid.selectId('show', $('#pathRainForecast').val(), function (newId) {
210
+ if (newId) {
211
+ $('#pathRainForecast').val(newId).trigger('change');
212
+ }
213
+ });
214
+ });
215
+ });
216
+
217
+ onChange(false);
218
+ // reinitialize all the Materialize labels on the page if you are dynamically adding inputs:
219
+ // Initialisieren Sie alle Materialise-Beschriftungen auf der Seite neu, wenn Sie dynamisch Eingaben hinzufügen:
220
+
221
+ $('.timepicker').timepicker({
222
+ 'twelveHour': false
223
+ });
224
+
225
+ if (M) M.updateTextFields();
226
+
227
+ getAdapterInstances('feiertage', function (instances) {
228
+ fillInstances('publicHolInstance', instances, settings['publicHolInstance']);
229
+ });
230
+
231
+ getAdapterInstances('daswetter', function (instances) {
232
+ fillInstances('weatherForInstance', instances, settings['weatherForInstance']);
233
+ });
234
+
235
+ getAdapterInstances('telegram', function (instances) {
236
+ fillInstances('telegramInstance', instances, settings['telegramInstance']);
237
+ });
238
+
239
+ getAdapterInstances('whatsapp-cmb', function (instances) {
240
+ fillInstances('whatsappInstance', instances, settings['whatsappInstance']);
241
+ });
242
+
243
+ getAdapterInstances('email', function (instances) {
244
+ fillInstances('emailInstance', instances, settings['emailInstance']);
245
+ });
246
+
247
+ getAdapterInstances('pushover', function (instances) {
248
+ fillInstances('pushoverInstance', instances, settings['pushoverInstance']);
249
+ });
250
+
251
+ sendTo(null, 'getTelegramUser', null, function (obj) {
252
+ fillTelegramUser(settings['telegramUser'], obj);
253
+ });
254
+ fillPosition();
255
+ }
256
+
257
+ /**
258
+ * Automatic filling in of astronomical data if the field is empty.
259
+ * Automatisches Ausfüllen von astronomischen Daten, wenn das Feld leer ist.
260
+ */
261
+ function fillPosition() {
262
+ socket.emit('getObject', 'system.config', function (err, obj) {
263
+ const $mLongitude = $('#longitude');
264
+ if ($mLongitude.val() === '') {
265
+ $mLongitude.val(obj.common.longitude).trigger('change');
266
+ }
267
+ const $mLatitude = $('#latitude');
268
+ if ($mLatitude.val() === '') {
269
+ $mLatitude.val(obj.common.latitude).trigger('change');
270
+ }
271
+ });
272
+ }
273
+
274
+ /**
275
+ *
276
+ * @param id
277
+ * @param obj
278
+ */
279
+ function fillTelegramUser(id, obj) {
280
+ /*let user = str.replace(/[{}"\\]/g,"").split(',');*/
281
+ /*obj = {"0123456789":{"firstName":"Dirk","userName":"Dirk_Peter"}};*/
282
+ const $sel = $('#telegramUser');
283
+ $sel.html('<option value="allTelegramUsers">' + _('All Receiver') + '</option>');
284
+ for(const key in obj){
285
+ if (obj.hasOwnProperty (key)) {
286
+ const names = [];
287
+ let userName;
288
+ obj[key].userName && names.push(obj[key].userName);
289
+ obj[key].firstName && names.push(obj[key].firstName);
290
+ if (obj[key].userName) {
291
+ userName = obj[key].userName;
292
+ } else {
293
+ userName = obj[key].firstName;
294
+ }
295
+ $sel.append('<option value="' + userName + '"' + (id === userName ? ' selected' : '') + '>' + names.join(' / ') +'</option>');
296
+ }
297
+ }
298
+ $sel.select();
299
+ }
300
+
301
+ /**
302
+ *
303
+ * @param {string} id
304
+ * @param arr
305
+ * @param val
306
+ */
307
+ function fillInstances(id, arr, val) {
308
+ const $sel = $('#' + id);
309
+ $sel.html('<option value="">' + _('none') + '</option>');
310
+ for (let i = 0; i < arr.length; i++) {
311
+ const _id = arr[i]._id.replace('system.adapter.', '');
312
+ $sel.append('<option value="' + _id + '"' + (_id === val ? ' selected' : '') + '>' + _id + '</option>');
313
+ }
314
+ $sel.select();
315
+ }
316
+
317
+ /**
318
+ *
319
+ */
320
+ function tableOnReady() {
321
+ $('#events .table-values-div .table-values .values-buttons[data-command="edit2"]').on('click', function () {
322
+ const id = $(this).data('index');
323
+ initSelectId(function (sid) {
324
+ sid.selectId('show', $('#events .values-input[data-name="name"][data-index="' + id + '"]').val(), function (newId) {
325
+ if (newId) {
326
+ $('#events .values-input[data-name="name"][data-index="' + id + '"]').val(newId).trigger('change');
327
+ socket.emit('getObject', newId, function (err, obj) {
328
+ const name = getName(obj);
329
+ $('#events .values-input[data-name="sprinkleName"][data-index="' + id + '"]').val(name).trigger('change');
330
+ });
331
+ }
332
+ });
333
+ });
334
+ });
335
+
336
+ $('#events .table-values-div .table-values .values-buttons[data-command="edit"]').on('click', function () {
337
+ const id = $(this).data('index');
338
+ $('#triggerID').val($('#events .values-input[data-name="triggerID"][data-index="' + id + '"]').val());
339
+ $('#wateringTime').val($('#events .values-input[data-name="wateringTime"][data-index="' + id + '"]').val());
340
+ $('#wateringAdd').val($('#events .values-input[data-name="wateringAdd"][data-index="' + id + '"]').val());
341
+ $('#wateringInterval').val($('#events .values-input[data-name="wateringInterval"][data-index="' + id + '"]').val());
342
+ $('#addWateringTime').val($('#events .values-input[data-name="addWateringTime"][data-index="' + id + '"]').val());
343
+ $('#addTriggersIrrigation').val($('#events .values-input[data-name="addTriggersIrrigation"][data-index="' + id + '"]').val());
344
+ $('#maxSoilMoistureIrrigation').val($('#events .values-input[data-name="maxSoilMoistureIrrigation"][data-index="' + id + '"]').val());
345
+ $('#maxSoilMoistureRainPct').val($('#events .values-input[data-name="maxSoilMoistureRainPct"][data-index="' + id + '"]').val());
346
+ $('#triggersIrrigation').val($('#events .values-input[data-name="triggersIrrigation"][data-index="' + id + '"]').val());
347
+ $('#pipeFlow').val($('#events .values-input[data-name="pipeFlow"][data-index="' + id + '"]').val());
348
+ $('#methodControlSM').val($('#events .values-input[data-name="methodControlSM"][data-index="' + id + '"]').val());
349
+ $('#methodControlSM').select().trigger('change');
350
+ $('#triggerSM').val($('#events .values-input[data-name="triggerSM"][data-index="' + id + '"]').val());
351
+ $('#analogZPct').val($('#events .values-input[data-name="analogZPct"][data-index="' + id + '"]').val());
352
+ $('#analogOHPct').val($('#events .values-input[data-name="analogOHPct"][data-index="' + id + '"]').val());
353
+ $('#startDay').val($('#events .values-input[data-name="startDay"][data-index="' + id + '"]').val());
354
+ $('#startDay').select().trigger('change');
355
+ // boolean
356
+ $('#booster').prop('checked', ($('#events .values-input[data-name="booster"][data-index="' + id + '"]')).prop('checked'));
357
+ $('#endIrrigation').prop('checked', ($('#events .values-input[data-name="endIrrigation"][data-index="' +id + '"]')).prop('checked'));
358
+ $('#inGreenhouse').prop('checked', ($('#events .values-input[data-name="inGreenhouse"][data-index="' +id + '"]')).prop('checked'));
359
+ $('#sun').prop('checked', ($('#events .values-input[data-name="sun"][data-index="' +id + '"]')).prop('checked'));
360
+ $('#mon').prop('checked', ($('#events .values-input[data-name="mon"][data-index="' +id + '"]')).prop('checked'));
361
+ $('#tue').prop('checked', ($('#events .values-input[data-name="tue"][data-index="' +id + '"]')).prop('checked'));
362
+ $('#wed').prop('checked', ($('#events .values-input[data-name="wed"][data-index="' +id + '"]')).prop('checked'));
363
+ $('#thur').prop('checked', ($('#events .values-input[data-name="thur"][data-index="' +id + '"]')).prop('checked'));
364
+ $('#fri').prop('checked', ($('#events .values-input[data-name="fri"][data-index="' +id + '"]')).prop('checked'));
365
+ $('#sat').prop('checked', ($('#events .values-input[data-name="sat"][data-index="' +id + '"]')).prop('checked'));
366
+
367
+ $('#dialogDeviceEditSprinkle').html($('#events .values-input[data-name="sprinkleName"][data-index="' + id + '"]').val());
368
+
369
+ setTimeout(function () {
370
+ initDialogSprinkle(function (sid) {
371
+ const newTriggerID = $('#triggerID').val();
372
+ const newWateringTime = $('#wateringTime').val();
373
+ const newWateringAdd = $('#wateringAdd').val();
374
+ const newWateringInterval = $('#wateringInterval').val();
375
+ const newAddWateringTime = $('#addWateringTime').val();
376
+ const newAddTriggersIrrigation = $('#addTriggersIrrigation').val();
377
+ const newMaxSoilMoistureIrrigation = $('#maxSoilMoistureIrrigation').val();
378
+ const newMaxSoilMoistureRainPct = $('#maxSoilMoistureRainPct').val();
379
+ const newTriggersIrrigation = $('#triggersIrrigation').val();
380
+ const newPipeFlow = $('#pipeFlow').val();
381
+ const newMethodControlSM = $('#methodControlSM').val();
382
+ const newTriggerSM = $('#triggerSM').val();
383
+ const newAnalogZPct = $('#analogZPct').val();
384
+ const newAnalogOHPct = $('#analogOHPct').val();
385
+ const newStartDay = $('#startDay').val();
386
+ // boolean
387
+ const newBooster = $('#booster').prop('checked');
388
+ const newEndIrrigation = $('#endIrrigation').prop('checked');
389
+ const newInGreenhouse = $('#inGreenhouse').prop('checked');
390
+ const newSun = $('#sun').prop('checked');
391
+ const newMon = $('#mon').prop('checked');
392
+ const newTue = $('#tue').prop('checked');
393
+ const newWed = $('#wed').prop('checked');
394
+ const newThur = $('#thur').prop('checked');
395
+ const newFri = $('#fri').prop('checked');
396
+ const newSat = $('#sat').prop('checked');
397
+
398
+ $('#events .values-input[data-name="triggerID"][data-index="' + id + '"]').val(newTriggerID).trigger('change');
399
+ $('#events .values-input[data-name="wateringTime"][data-index="' + id + '"]').val(newWateringTime).trigger('change');
400
+ $('#events .values-input[data-name="wateringAdd"][data-index="' + id + '"]').val(newWateringAdd).trigger('change');
401
+ $('#events .values-input[data-name="wateringInterval"][data-index="' + id + '"]').val(newWateringInterval).trigger('change');
402
+ $('#events .values-input[data-name="addWateringTime"][data-index="' + id + '"]').val(newAddWateringTime).trigger('change');
403
+ $('#events .values-input[data-name="addTriggersIrrigation"][data-index="' + id + '"]').val(newAddTriggersIrrigation).trigger('change');
404
+ $('#events .values-input[data-name="maxSoilMoistureIrrigation"][data-index="' + id + '"]').val(newMaxSoilMoistureIrrigation).trigger('change');
405
+ $('#events .values-input[data-name="maxSoilMoistureRainPct"][data-index="' + id + '"]').val(newMaxSoilMoistureRainPct).trigger('change');
406
+ $('#events .values-input[data-name="triggersIrrigation"][data-index="' + id + '"]').val(newTriggersIrrigation).trigger('change');
407
+ $('#events .values-input[data-name="pipeFlow"][data-index="' + id + '"]').val(newPipeFlow).trigger('change');
408
+ $('#events .values-input[data-name="methodControlSM"][data-index="' + id + '"]').val(newMethodControlSM).trigger('change');
409
+ $('#events .values-input[data-name="triggerSM"][data-index="' + id + '"]').val(newTriggerSM).trigger('change');
410
+ $('#events .values-input[data-name="analogZPct"][data-index="' + id + '"]').val(newAnalogZPct).trigger('change');
411
+ $('#events .values-input[data-name="analogOHPct"][data-index="' + id + '"]').val(newAnalogOHPct).trigger('change');
412
+ $('#events .values-input[data-name="startDay"][data-index="' + id + '"]').val(newStartDay).trigger('change');
413
+ // boolean
414
+ $('#events .values-input[data-name="booster"][data-index="' + id + '"]').prop('checked',newBooster);
415
+ $('#events .values-input[data-name="endIrrigation"][data-index="' + id + '"]').prop('checked',newEndIrrigation);
416
+ $('#events .values-input[data-name="inGreenhouse"][data-index="' + id + '"]').prop('checked',newInGreenhouse);
417
+ $('#events .values-input[data-name="sun"][data-index="' + id + '"]').prop('checked',newSun);
418
+ $('#events .values-input[data-name="mon"][data-index="' + id + '"]').prop('checked',newMon);
419
+ $('#events .values-input[data-name="tue"][data-index="' + id + '"]').prop('checked',newTue);
420
+ $('#events .values-input[data-name="wed"][data-index="' + id + '"]').prop('checked',newWed);
421
+ $('#events .values-input[data-name="thur"][data-index="' + id + '"]').prop('checked',newThur);
422
+ $('#events .values-input[data-name="fri"][data-index="' + id + '"]').prop('checked',newFri);
423
+ $('#events .values-input[data-name="sat"][data-index="' + id + '"]').prop('checked',newSat);
424
+
425
+ });
426
+ }, 20);
427
+ });
428
+ }
429
+
430
+ /**
431
+ * This will be called by the admin adapter when the user presses the Save or Save and Close button
432
+ * Dies wird vom Admin-Adapter aufgerufen, wenn der Benutzer die Schaltfläche Speichern oder Speichern und Schließen drückt
433
+ * @param {object} callback - JSON object which holds keys and their values that will be written to adapter config object
434
+ * - JSON-Objekt, das Schlüssel und deren Werte enthält, die in das Adapterkonfigurationsobjekt geschrieben werden
435
+ */
436
+ function save(callback) {
437
+ // example: select elements with class=value and build settings object
438
+ // Beispiel: Wählen Sie Elemente mit class = value aus und erstellen Sie das Einstellungsobjekt
439
+ const obj = {};
440
+ $('#mainSettings .value').each(function () {
441
+ const $this = $(this);
442
+ if ($this.attr('type') === 'checkbox') {
443
+ obj[$this.attr('id')] = $this.prop('checked');
444
+ } else if ($this.attr('type') === 'number') {
445
+ obj[$this.attr('id')] = parseFloat($this.val());
446
+ } else {
447
+ obj[$this.attr('id')] = $this.val();
448
+ }
449
+ });
450
+
451
+ // Get edited table
452
+ obj.events = table2values('events'); //es wird nicht devices abgespeichert, sondern der Inhalt der Tabelle (all Zeilen müssen value="" haben)
453
+
454
+
455
+ callback(obj);
456
+ }
457
+
458
+ /**
459
+ * Show and hide the display depending on the events
460
+ *
461
+ * Anzeige je nach Ereignissen ein- und ausblenden
462
+ * @param callback
463
+ */
464
+ function showHideSettings(callback) {
465
+ /** additional irrigation activated =>
466
+ * zusätzliche Bewässerung aktiviert
467
+ * @type {boolean}
468
+ */
469
+ let selAddStartTime = false;
470
+
471
+ // Zeiteinstellungen => Feiertagseinstellung sichtbar bei combobox
472
+ $('#wateringStartTime').on('change', function () {
473
+ if ($(this).val() === 'livingTime') { /*Start zur festen Zeit*/
474
+ $('.visTimeShift').hide();
475
+ $('.visWeekLiving').show();
476
+ } else if ($(this).val() === 'livingSunrise') { /*Start mit Sonnenaufgang*/
477
+ $('.visTimeShift').show();
478
+ $('.visWeekLiving').hide();
479
+ } else if ($(this).val() === 'livingGoldenHourEnd') { /*Start mit dem Ende der Golden hour*/
480
+ $('.visTimeShift').hide();
481
+ $('.visWeekLiving').hide();
482
+ } else if ($(this).val() === 'livingSunset') { /*Start mit Sonnenaufgang*/
483
+ $('.visTimeShift').show();
484
+ $('.visWeekLiving').hide();
485
+ }
486
+ }).trigger('change');
487
+
488
+ // Pumpeneinstellungen → Zisterne sichtbar bei checkbox
489
+ if ($('#cisternSettings').prop('checked')) {
490
+ $('.cisternObjekt').show();
491
+ } else {
492
+ $('.cisternObjekt').hide();
493
+ }
494
+
495
+
496
+ // Additional start time => sichtbar je nach auswahl
497
+ $('#selectAddStartTime').on('change',function(){
498
+ if ($(this).val() === 'noAddStartTime') {
499
+ selAddStartTime = false;
500
+ $('.showGreaterETpCur').hide();
501
+ $('.showAddStartTime').hide();
502
+ $('.showExtSig').hide();
503
+ } else if ($(this).val() === 'greaterETpCurrent') {
504
+ selAddStartTime = true;
505
+ $('.showGreaterETpCur').show();
506
+ $('.showAddStartTime').show();
507
+ $('.showExtSig').hide();
508
+ } else if ($(this).val() === 'withExternalSignal') {
509
+ selAddStartTime = true;
510
+ $('.showGreaterETpCur').hide();
511
+ $('.showAddStartTime').show();
512
+ $('.showExtSig').show();
513
+ } else {
514
+ selAddStartTime = false;
515
+ $('.showGreaterETpCur').hide();
516
+ $('.showAddStartTime').hide();
517
+ $('.showExtSig').hide();
518
+ }
519
+ }).trigger('change');
520
+
521
+ // Zeiteinstellungen => Feiertagseinstellung sichtbar bei checkbox
522
+ const mPublicWeekend = $('#publicWeekend').prop('checked');
523
+ if (mPublicWeekend) {
524
+ $('.publicWeek').show();
525
+ $('.publicWeekHol').show();
526
+ } else {
527
+ $('.publicWeek').hide();
528
+ $('.publicWeekHol').hide();
529
+ }
530
+
531
+ if ($('#publicHolidays').prop('checked') && mPublicWeekend) {
532
+ $('.publicHol').show();
533
+ } else {
534
+ $('.publicHol').hide();
535
+ }
536
+
537
+ // zusätzliche Einstellungen => Wettervorhersage
538
+ const mWeatherForecast = $('#weatherForecast').prop('checked');
539
+ if (mWeatherForecast) {
540
+ $('.weatherFor').show();
541
+ } else {
542
+ $('.weatherFor').hide();
543
+ }
544
+
545
+ // individuelle Wettervorhersage
546
+ $('#weatherForecastService').on('change', function () {
547
+ if ($(this).val() === 'ownDataPoint') {
548
+ $('.showOwnDataPoint').show();
549
+ $('.showDasWetter').hide();
550
+ } else if ($(this).val() === 'dasWetter') {
551
+ $('.showOwnDataPoint').hide();
552
+ $('.showDasWetter').show();
553
+ }
554
+ }).trigger('change');
555
+
556
+ // Benachrichtigung Karte Ein / Aus
557
+ if ($('#notificationEnabled').prop('checked')) {
558
+ $('.tab-notification').show();
559
+ } else {
560
+ $('.tab-notification').hide();
561
+ }
562
+
563
+
564
+ // Benachrichtigung - Typ auswahl
565
+ $('#notificationsType').on('change', function () {
566
+ if ($(this).val() === 'Telegram') {
567
+ $('.email').hide();
568
+ $('.pushover').hide();
569
+ $('.telegram').show();
570
+ $('.whatsapp').hide();
571
+ } else if ($(this).val() === 'E-Mail') {
572
+ $('.email').show();
573
+ $('.telegram').hide();
574
+ $('.pushover').hide();
575
+ $('.whatsapp').hide();
576
+ } else if ($(this).val() === 'Pushover') {
577
+ $('.pushover').show();
578
+ $('.telegram').hide();
579
+ $('.email').hide();
580
+ $('.whatsapp').hide();
581
+ } else if ($(this).val() === 'WhatsApp') {
582
+ $('.whatsapp').show();
583
+ $('.telegram').hide();
584
+ $('.email').hide();
585
+ $('.pushover').hide();
586
+ }
587
+ }).trigger('change');
588
+
589
+ // Sensorauswahl in Sprinkler - Main settings
590
+ $('#methodControlSM').on('change',function(){
591
+
592
+ if ($(this).val() === 'calculation') {
593
+ if (selAddStartTime) {
594
+ $('.showAddWateringTime').show();
595
+ $('.showAddTriggersIrrigation').hide();
596
+ }else{
597
+ $('.showAddWateringTime').hide();
598
+ $('.showAddTriggersIrrigation').hide();
599
+ }
600
+ $('.visInGreenhouse').show();
601
+ $('.visSensor').hide();
602
+ $('.visAnalog').hide();
603
+ $('.visCalculation').show();
604
+ $('.visNotAnalog').show();
605
+ $('.visFixDay').hide();
606
+
607
+ } else if ($(this).val() === 'bistable') {
608
+ if (mWeatherForecast) {
609
+ $('.visInGreenhouse').show();
610
+ } else {
611
+ $('.visInGreenhouse').hide();
612
+ }
613
+ if (selAddStartTime) {
614
+ $('.showAddWateringTime').show();
615
+ $('.showAddTriggersIrrigation').hide();
616
+ }else{
617
+ $('.showAddWateringTime').hide();
618
+ $('.showAddTriggersIrrigation').hide();
619
+ }
620
+ $('.visSensor').show();
621
+ $('.visAnalog').hide();
622
+ $('.visCalculation').hide();
623
+ $('.visNotAnalog').hide();
624
+ $('.visFixDay').hide();
625
+
626
+ } else if ($(this).val() === 'analog') {
627
+ if (mWeatherForecast) {
628
+ $('.visInGreenhouse').show();
629
+ } else {
630
+ $('.visInGreenhouse').hide();
631
+ }
632
+ if (selAddStartTime) {
633
+ $('.showAddWateringTime').show();
634
+ $('.showAddTriggersIrrigation').show();
635
+ }else{
636
+ $('.showAddWateringTime').hide();
637
+ $('.showAddTriggersIrrigation').hide();
638
+ }
639
+ $('.visSensor').show();
640
+ $('.visAnalog').show();
641
+ $('.visCalculation').hide();
642
+ $('.visNotAnalog').show();
643
+ $('.visFixDay').hide();
644
+
645
+ } else if ($(this).val() === 'fixDay') {
646
+ if (mWeatherForecast) {
647
+ $('.visInGreenhouse').show();
648
+ } else {
649
+ $('.visInGreenhouse').hide();
650
+ }
651
+ if (selAddStartTime) {
652
+ $('.showAddWateringTime').show();
653
+ $('.showAddTriggersIrrigation').hide();
654
+ }else{
655
+ $('.showAddWateringTime').hide();
656
+ $('.showAddTriggersIrrigation').hide();
657
+ }
658
+ $('.visSensor').hide();
659
+ $('.visAnalog').hide();
660
+ $('.visCalculation').hide();
661
+ $('.visNotAnalog').hide();
662
+ $('.visFixDay').show();
663
+ } else {
664
+ $(this).val('calculation');
665
+ if (selAddStartTime) {
666
+ $('.showAddWateringTime').show();
667
+ $('.showAddTriggersIrrigation').show();
668
+ }else{
669
+ $('.showAddWateringTime').hide();
670
+ $('.showAddTriggersIrrigation').hide();
671
+ }
672
+ $('.visInGreenhouse').show();
673
+ $('.visSensor').hide();
674
+ $('.visAnalog').hide();
675
+ $('.visCalculation').show();
676
+ $('.visNotAnalog').show();
677
+ $('.visFixDay').hide();
678
+ }
679
+ }).trigger('change');
680
+
681
+ // Wochentags-Auswahl in Sprinkler - Main settings
682
+ $('#startDay').on('change', function () {
683
+ if (($(this).val() === 'fixDay')) {
684
+ $('.visFixDaysWeek').show();
685
+ } else {
686
+ $('.visFixDaysWeek').hide();
687
+ }
688
+ }).trigger('change');
689
+ }
690
+
691
+ let selectId;
692
+
693
+ /**
694
+ *
695
+ * @param {object} callback
696
+ * @returns {*}
697
+ */
698
+ function initSelectId(callback) {
699
+ if (selectId) {
700
+ return callback(selectId);
701
+ }
702
+ socket.emit('getObjects', function (err, objs) {
703
+ selectId = $('#dialog-select-member').selectId('init', {
704
+ noMultiselect: true,
705
+ objects: objs,
706
+ imgPath: '../../lib/css/fancytree/',
707
+ filter: {type: 'state'},
708
+ name: 'scenes-select-state',
709
+ texts: {
710
+ select: _('Select'),
711
+ cancel: _('Cancel'),
712
+ all: _('All'),
713
+ id: _('ID'),
714
+ name: _('Name'),
715
+ role: _('Role'),
716
+ room: _('Room'),
717
+ value: _('Value'),
718
+ selectid: _('Select ID'),
719
+ from: _('From'),
720
+ lc: _('Last changed'),
721
+ ts: _('Time stamp'),
722
+ wait: _('Processing...'),
723
+ ack: _('Acknowledged'),
724
+ selectAll: _('Select all'),
725
+ unselectAll: _('Deselect all'),
726
+ invertSelection: _('Invert selection')
727
+ },
728
+ columns: ['image', 'name', 'role', 'room']
729
+ });
730
+ callback(selectId);
731
+ });
732
+ }
733
+
734
+ /**
735
+ *
736
+ * @param obj
737
+ * @returns {string|*}
738
+ */
739
+ function getName(obj) {
740
+ if (obj && obj.common && obj.common.name) {
741
+ let name = obj.common.name;
742
+ if (typeof name === 'object') {
743
+ name = name[systemLang] || name.en;
744
+ }
745
+ return name;
746
+ } else if (obj && obj.name) {
747
+ let name = obj.name;
748
+ if (typeof name === 'object') {
749
+ name = name[systemLang] || name.en;
750
+ }
751
+ return name;
752
+ } else {
753
+ const parts = obj.id.split('.');
754
+ const last = parts.pop();
755
+ return last[0].toUpperCase() + last.substring(1).toLowerCase();
756
+ }
757
+ }
758
+
759
+ /**
760
+ *
761
+ * @param callback
762
+ */
763
+ function initDialogSprinkle(callback) {
764
+ const $editDialog = $('#dialog-sprinkle-edit');
765
+ if (!$editDialog.data('inited')) {
766
+ $editDialog.data('inited', true);
767
+ $editDialog.modal({
768
+ dismissible: false
769
+ });
770
+
771
+ $editDialog.find('.btn-set').on('click', function () {
772
+ const $editDialog = $('#dialog-sprinkle-edit');
773
+ const callback = $editDialog.data('callback');
774
+ if (typeof callback === 'function') callback();
775
+ $editDialog.data('callback', null);
776
+ });
777
+ }
778
+ $editDialog.data('callback', callback);
779
+ $editDialog.modal('open');
780
780
  }