iobroker.sprinklecontrol 0.2.12 → 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.
- package/{Lizenz → LICENSE} +21 -21
- package/README.md +80 -129
- package/admin/i18n/de/translations.json +134 -0
- package/admin/i18n/en/translations.json +134 -0
- package/admin/i18n/es/translations.json +134 -0
- package/admin/i18n/fr/translations.json +134 -0
- package/admin/i18n/it/translations.json +134 -0
- package/admin/i18n/nl/translations.json +134 -0
- package/admin/i18n/pl/translations.json +134 -0
- package/admin/i18n/pt/translations.json +134 -0
- package/admin/i18n/ru/translations.json +134 -0
- package/admin/i18n/uk/translations.json +134 -0
- package/admin/i18n/zh-cn/translations.json +134 -0
- package/admin/index_m.html +904 -907
- package/admin/index_m.js +779 -780
- package/admin/style.css +453 -158
- package/admin/words.js +143 -136
- package/io-package.json +268 -189
- package/lib/adapter-config.d.ts +19 -16
- package/lib/evaporation.js +443 -412
- package/lib/myConfig.js +373 -359
- package/lib/sendMessageText.js +162 -199
- package/lib/tools.js +148 -118
- package/lib/valveControl.js +918 -888
- package/main.js +2041 -1764
- package/package.json +51 -30
- package/.commitmessage +0 -4
- package/.gitattributes +0 -2
- package/admin/admin.d.ts +0 -1
- package/docs/de/img/E-Mail.jpg +0 -0
- package/docs/de/img/Extraeinstellungen.jpg +0 -0
- package/docs/de/img/Pumpeneinstellung.jpg +0 -0
- package/docs/de/img/Pushover.jpg +0 -0
- package/docs/de/img/Select_ID.jpg +0 -0
- package/docs/de/img/Telegram.jpg +0 -0
- package/docs/de/img/Ventil-Haupteinstellung.jpg +0 -0
- package/docs/de/img/Ventil-Pumpeneinstellung.jpg +0 -0
- package/docs/de/img/WhatsApp.jpg +0 -0
- package/docs/de/img/Zeiteinstellung.jpg +0 -0
- package/docs/de/img/analog.jpg +0 -0
- package/docs/de/img/bistabil.jpg +0 -0
- package/docs/de/img/control.jpg +0 -0
- package/docs/de/img/festeTage.jpg +0 -0
- package/docs/de/img/main.jpg +0 -0
- package/docs/de/img/main_tab.jpg +0 -0
- package/docs/de/img/schaltverhalten.jpg +0 -0
- package/docs/de/img/sprinklecontrol.png +0 -0
- package/docs/de/img/verdunstDiagra.jpg +0 -0
- package/docs/de/img/verdunstung.jpg +0 -0
- package/docs/de/sprinklecontrol.md +0 -588
- package/docs/en/img/schaltverhalten.jpg +0 -0
- package/docs/en/img/screenshot1.jpg +0 -0
- package/docs/en/img/screenshot2.jpg +0 -0
- package/docs/en/img/screenshot3.jpg +0 -0
- package/docs/en/img/screenshot4.jpg +0 -0
- package/docs/en/img/screenshot5.jpg +0 -0
- package/docs/en/img/screenshot6.jpg +0 -0
- package/docs/en/img/screenshot7.jpg +0 -0
- package/docs/en/img/screenshot8.jpg +0 -0
- package/docs/en/img/sprinklecontrol.png +0 -0
- package/docs/en/sprinklecontrol.md +0 -230
- package/main.test.js +0 -30
package/lib/sendMessageText.js
CHANGED
|
@@ -1,200 +1,163 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
/*
|
|
3
|
-
info: log aufbau sendMessageText.js: #4.*
|
|
4
|
-
*/
|
|
5
|
-
/**
|
|
6
|
-
* The adapter instance
|
|
7
|
-
*
|
|
8
|
-
*/
|
|
9
|
-
let adapter;
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
ObjMessage.instance
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
device: ObjMessage.deviceID
|
|
164
|
-
});
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
break;
|
|
168
|
-
|
|
169
|
-
case 'WhatsApp' :
|
|
170
|
-
if (ObjMessage.enabled &&
|
|
171
|
-
ObjMessage.instance !== '' &&
|
|
172
|
-
ObjMessage.instance !== null &&
|
|
173
|
-
ObjMessage.instance !== undefined) {
|
|
174
|
-
sendMessage = '<b><u>SprinkleControl:</u></b>\n' + sendMessage;
|
|
175
|
-
sendMessage = sendMessage.replace(/\n/g,'%0A'); // Zeilenumbruch
|
|
176
|
-
sendMessage = sendMessage.replace(/<b>|<\/b>/g, '*'); // Fett Bold
|
|
177
|
-
sendMessage = sendMessage.replace(/<i>|<\/i>/g, '_'); // kursive Italic
|
|
178
|
-
sendMessage = sendMessage.replace(/<u>|<\/u>/g, ''); // unterstrichen
|
|
179
|
-
adapter.log.debug(`start sendMessageText per WhatsApp on used WhatsApp-Instance: ${ObjMessage.instance}`);
|
|
180
|
-
// Send WhatsApp Message
|
|
181
|
-
adapter.sendTo(ObjMessage.instance, 'send', {
|
|
182
|
-
text: sendMessage
|
|
183
|
-
});
|
|
184
|
-
}
|
|
185
|
-
break;
|
|
186
|
-
}
|
|
187
|
-
}, ObjMessage.waiting);
|
|
188
|
-
},
|
|
189
|
-
|
|
190
|
-
/**
|
|
191
|
-
* Nachrichtenversandabfrage => true (Ja)
|
|
192
|
-
* @returns {boolean}
|
|
193
|
-
*/
|
|
194
|
-
onlySendError () {
|
|
195
|
-
return (adapter.config.notificationEnabled && adapter.config.notificationsType && ObjMessage.onlyError);
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
}
|
|
199
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
/*
|
|
3
|
+
info: log aufbau sendMessageText.js: #4.*
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* The adapter instance
|
|
7
|
+
*
|
|
8
|
+
*/
|
|
9
|
+
let adapter;
|
|
10
|
+
let ObjMessage = {};
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Modul zum Versenden von Nachrichten mittels Telegram, E-Mail, Pushover oder WhatsApp
|
|
14
|
+
* der passende Adapter muss installiert sein!
|
|
15
|
+
*
|
|
16
|
+
*/
|
|
17
|
+
const sendMessageText = {
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
*
|
|
21
|
+
* @param myAdapter - Kopie von Adapter main.js
|
|
22
|
+
*/
|
|
23
|
+
initConfigMessage (myAdapter) {
|
|
24
|
+
adapter = myAdapter;
|
|
25
|
+
switch (adapter.config.notificationsType) {
|
|
26
|
+
case 'Telegram':
|
|
27
|
+
ObjMessage = { enabled: adapter.config.notificationEnabled || false, notificationsType: adapter.config.notificationsType, type: 'message', instance: adapter.config.telegramInstance, silentNotice: adapter.config.telegramSilentNotice, noticeType: (adapter.config.telegramNoticeType === 'longTelegramNotice'), user: adapter.config.telegramUser, onlyError: adapter.config.telegramOnlyError, waiting: (Math.round(adapter.config.telegramWaitToSend) * 1000) || 0
|
|
28
|
+
};
|
|
29
|
+
break;
|
|
30
|
+
|
|
31
|
+
case 'E-Mail':
|
|
32
|
+
ObjMessage = { enabled: adapter.config.notificationEnabled || false, notificationsType: adapter.config.notificationsType, type: 'message', instance: adapter.config.emailInstance, noticeType: (adapter.config.emailNoticeType === 'longEmailNotice'), emailReceiver: adapter.config.emailReceiver, emailSender: adapter.config.emailSender, onlyError: adapter.config.emailOnlyError, waiting: (Math.round(adapter.config.emailWaitToSend) * 1000) || 0
|
|
33
|
+
};
|
|
34
|
+
break;
|
|
35
|
+
|
|
36
|
+
case 'Pushover':
|
|
37
|
+
ObjMessage = { enabled: adapter.config.notificationEnabled || false, notificationsType: adapter.config.notificationsType, type: 'message', sound: adapter.config.pushoverSound, instance: adapter.config.pushoverInstance, silentNotice: adapter.config.pushoverSilentNotice, noticeType: (adapter.config.pushoverNoticeType === 'longPushoverNotice'), deviceID: adapter.config.pushoverDeviceID, onlyError: adapter.config.pushoverOnlyError, waiting: (Math.round(adapter.config.pushoverWaitToSend) * 1000) || 0
|
|
38
|
+
};
|
|
39
|
+
break;
|
|
40
|
+
|
|
41
|
+
case 'WhatsApp':
|
|
42
|
+
ObjMessage = { enabled: adapter.config.notificationEnabled || false, notificationsType: adapter.config.notificationsType, type: 'message', instance: adapter.config.whatsappInstance, noticeType: (adapter.config.whatsappNoticeType === 'longWhatsappNotice'), onlyError: adapter.config.whatsappOnlyError, waiting: (Math.round(adapter.config.whatsappWaitToSend) * 1000) || 0
|
|
43
|
+
};
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
/**
|
|
48
|
+
* send Message ist für Telegram formatiert und muss für andere Empfänger umformatiert werden
|
|
49
|
+
*
|
|
50
|
+
*@param message - Botschaft
|
|
51
|
+
*/
|
|
52
|
+
sendMessage (message) {
|
|
53
|
+
|
|
54
|
+
let sendMessage = message;
|
|
55
|
+
|
|
56
|
+
setTimeout(function () {
|
|
57
|
+
switch (ObjMessage.notificationsType) {
|
|
58
|
+
case 'Telegram':
|
|
59
|
+
if (ObjMessage.enabled &&
|
|
60
|
+
ObjMessage.instance !== '' &&
|
|
61
|
+
ObjMessage.instance !== null &&
|
|
62
|
+
ObjMessage.instance !== undefined) {
|
|
63
|
+
adapter.log.debug('start sendMessageText per Telegram');
|
|
64
|
+
sendMessage = `<b><u>SprinkleControl:</u></b>\n${ sendMessage }`;
|
|
65
|
+
// send Telegram Message
|
|
66
|
+
if ((ObjMessage.User) && (ObjMessage.User !== 'allTelegramUsers')) {
|
|
67
|
+
adapter.sendTo(ObjMessage.instance, 'send', {
|
|
68
|
+
user: ObjMessage.User,
|
|
69
|
+
text: sendMessage,
|
|
70
|
+
disable_notification: ObjMessage.SilentNotice,
|
|
71
|
+
parse_mode: 'HTML'
|
|
72
|
+
});
|
|
73
|
+
} else {
|
|
74
|
+
adapter.sendTo(ObjMessage.instance, 'send', {
|
|
75
|
+
text: sendMessage,
|
|
76
|
+
disable_notification: ObjMessage.SilentNotice,
|
|
77
|
+
parse_mode: 'HTML'
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
break;
|
|
82
|
+
|
|
83
|
+
case 'E-Mail':
|
|
84
|
+
|
|
85
|
+
if (ObjMessage.enabled &&
|
|
86
|
+
ObjMessage.instance !== '' &&
|
|
87
|
+
ObjMessage.instance !== null &&
|
|
88
|
+
ObjMessage.instance !== undefined) {
|
|
89
|
+
sendMessage = `<b><u>SprinkleControl:</u></b>\n${ sendMessage}`;
|
|
90
|
+
sendMessage = sendMessage.replace(/\n/g, '<br />');
|
|
91
|
+
adapter.log.debug(`start sendMessageText per E-Mail on used E-Mail-Instance: ${ObjMessage.instance}`);
|
|
92
|
+
// Send E-Mail Message
|
|
93
|
+
adapter.sendTo(ObjMessage.instance, 'send', {
|
|
94
|
+
html: sendMessage,
|
|
95
|
+
to: ObjMessage.emailReceiver,
|
|
96
|
+
subject: 'SprinkleControl',
|
|
97
|
+
from: ObjMessage.emailSender
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
break;
|
|
101
|
+
|
|
102
|
+
case 'Pushover' :
|
|
103
|
+
|
|
104
|
+
if (ObjMessage.enabled &&
|
|
105
|
+
ObjMessage.instance !== '' &&
|
|
106
|
+
ObjMessage.instance !== null &&
|
|
107
|
+
ObjMessage.instance !== undefined) {
|
|
108
|
+
adapter.log.debug(`start sendMessageText per E-Mail on used E-Mail-Instance: ${ObjMessage.instance}`);
|
|
109
|
+
// Send pushover Message
|
|
110
|
+
if (ObjMessage.SilentNotice === 'true' || ObjMessage.SilentNotice === true) {
|
|
111
|
+
adapter.sendTo(ObjMessage.instance, 'send', {
|
|
112
|
+
message: sendMessage,
|
|
113
|
+
sound: ObjMessage.sound,
|
|
114
|
+
priority: -1,
|
|
115
|
+
html: 1,
|
|
116
|
+
title: 'SprinkleControl',
|
|
117
|
+
device: ObjMessage.deviceID
|
|
118
|
+
});
|
|
119
|
+
} else {
|
|
120
|
+
adapter.sendTo(ObjMessage.instance, 'send', {
|
|
121
|
+
message: sendMessage,
|
|
122
|
+
sound: ObjMessage.sound,
|
|
123
|
+
html: 1,
|
|
124
|
+
title: 'SprinkleControl',
|
|
125
|
+
device: ObjMessage.deviceID
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
break;
|
|
130
|
+
|
|
131
|
+
case 'WhatsApp' :
|
|
132
|
+
if (ObjMessage.enabled &&
|
|
133
|
+
ObjMessage.instance !== '' &&
|
|
134
|
+
ObjMessage.instance !== null &&
|
|
135
|
+
ObjMessage.instance !== undefined) {
|
|
136
|
+
sendMessage = `<b><u>SprinkleControl:</u></b>\n${ sendMessage}`;
|
|
137
|
+
sendMessage = sendMessage.replace(/\n/g,'%0A'); // Zeilenumbruch
|
|
138
|
+
sendMessage = sendMessage.replace(/<b>|<\/b>/g, '*'); // Fett Bold
|
|
139
|
+
sendMessage = sendMessage.replace(/<i>|<\/i>/g, '_'); // kursive Italic
|
|
140
|
+
sendMessage = sendMessage.replace(/<u>|<\/u>/g, ''); // unterstrichen
|
|
141
|
+
adapter.log.debug(`start sendMessageText per WhatsApp on used WhatsApp-Instance: ${ObjMessage.instance}`);
|
|
142
|
+
// Send WhatsApp Message
|
|
143
|
+
adapter.sendTo(ObjMessage.instance, 'send', {
|
|
144
|
+
text: sendMessage
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
break;
|
|
148
|
+
}
|
|
149
|
+
}, ObjMessage.waiting);
|
|
150
|
+
},
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Nachrichtenversandabfrage => true (Ja)
|
|
154
|
+
*
|
|
155
|
+
* @returns
|
|
156
|
+
*/
|
|
157
|
+
onlySendError () {
|
|
158
|
+
return (adapter.config.notificationEnabled && adapter.config.notificationsType && ObjMessage.onlyError);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
};
|
|
162
|
+
|
|
200
163
|
module.exports = sendMessageText;
|
package/lib/tools.js
CHANGED
|
@@ -1,118 +1,148 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* func addTime (02:12:24 + 00:15) || (
|
|
6
|
-
*
|
|
7
|
-
* @param
|
|
8
|
-
* @
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
const
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
if(
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
if(tmp.length
|
|
29
|
-
if(tmp.length <
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
* @
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* func addTime (02:12:24 + 00:15) || (15)sek => 02:12:39
|
|
6
|
+
*
|
|
7
|
+
* @param time1 - z.B. 02:12:24 || 7944
|
|
8
|
+
* @param time2 -z.B. 00:15 || 15 | Null
|
|
9
|
+
* @returns - (h > 0) ? 02:12:39 : 12:39
|
|
10
|
+
*/
|
|
11
|
+
function addTime(time1, time2){
|
|
12
|
+
const wert = string2seconds(time1) + string2seconds(time2);
|
|
13
|
+
return seconds2string(wert);
|
|
14
|
+
|
|
15
|
+
// private functions
|
|
16
|
+
function seconds2string(n){
|
|
17
|
+
n = Math.abs(n);
|
|
18
|
+
const h = Math.trunc(n / 3600);
|
|
19
|
+
const m = Math.trunc((n / 60 ) % 60);
|
|
20
|
+
const sec = Math.trunc(n % 60);
|
|
21
|
+
return (h === 0)?(`${frmt(m)}:${frmt(sec)}`):(`${frmt(h)}:${frmt(m)}:${frmt(sec)}`);
|
|
22
|
+
} // end function seconds2string
|
|
23
|
+
|
|
24
|
+
function string2seconds(n) {
|
|
25
|
+
if(!n || (n === '--:--')) return 0;
|
|
26
|
+
if(Number.isInteger(n)) return n;
|
|
27
|
+
const tmp = n.split(':').reverse();
|
|
28
|
+
if(!tmp.length) tmp[0] = 0; // Sekunden
|
|
29
|
+
if(tmp.length < 2) tmp[1] = 0; // Minuten
|
|
30
|
+
if(tmp.length < 3) tmp[2] = 0; // Stunden
|
|
31
|
+
while(tmp[0] > 59) {
|
|
32
|
+
tmp[0] -= 60;
|
|
33
|
+
++tmp[1];
|
|
34
|
+
}
|
|
35
|
+
while(tmp[1] > 59) {
|
|
36
|
+
tmp[1] -= 60;
|
|
37
|
+
++tmp[2];
|
|
38
|
+
}
|
|
39
|
+
return (tmp[2] * 3600 + tmp[1] * 60 + 1 * tmp[0]);
|
|
40
|
+
} // string2seconds
|
|
41
|
+
|
|
42
|
+
function frmt(n) {
|
|
43
|
+
return n < 10 ? `0${n}` : n;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
} // end - function addTime
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* func Format Time
|
|
51
|
+
* → hier wird der übergebene Zeitstempel, myDate, in das angegebene Format, timeFormat, umgewandelt.
|
|
52
|
+
* Ist myDate nicht angegeben, so wird die aktuelle Zeit verwendet.
|
|
53
|
+
*
|
|
54
|
+
* @param adapter
|
|
55
|
+
* @param myDate
|
|
56
|
+
* @param timeFormat - 'kW': Rückgabe der KW;
|
|
57
|
+
* - 'dayNr': Tag des Jahres (Tagesnummer)
|
|
58
|
+
* - 'day': Wochentag
|
|
59
|
+
* - 'dd.mm. hh:mm': Rückgabe Datum und Zeit
|
|
60
|
+
* - 'hh:mm': Rückgabe der Zeit
|
|
61
|
+
* - 'past': true => Heute schon vorbei
|
|
62
|
+
* @returns
|
|
63
|
+
*/
|
|
64
|
+
function formatTime(adapter, myDate, timeFormat) { // 'kW' 'dd.mm. hh:mm' 'hh:mm'
|
|
65
|
+
/**
|
|
66
|
+
* @param s
|
|
67
|
+
*/
|
|
68
|
+
function zweiStellen (s) {
|
|
69
|
+
while (s.toString().length < 2) {
|
|
70
|
+
s = `0${s}`;
|
|
71
|
+
}
|
|
72
|
+
return s;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const d = (myDate) ? new Date(myDate) : new Date();
|
|
76
|
+
const tag = zweiStellen(d.getDate());
|
|
77
|
+
const monat = zweiStellen(d.getMonth() + 1);
|
|
78
|
+
const stunde = zweiStellen(d.getHours());
|
|
79
|
+
const minute = zweiStellen(d.getMinutes());
|
|
80
|
+
const currentThursday = new Date(d.getTime() +(3-((d.getDay()+6) % 7)) * 86400000);
|
|
81
|
+
// At the beginning or end of a year the thursday could be in another year.
|
|
82
|
+
const yearOfThursday = currentThursday.getFullYear();
|
|
83
|
+
// Get first Thursday of the year
|
|
84
|
+
const firstThursday = new Date(new Date(yearOfThursday,0,4).getTime() +(3-((new Date(yearOfThursday,0,4).getDay()+6) % 7)) * 86400000);
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
switch (timeFormat) {
|
|
88
|
+
// Berechnung der Tagesnummer
|
|
89
|
+
case 'dayNr': {
|
|
90
|
+
const start = new Date(d.getFullYear(), 0, 0);
|
|
91
|
+
// @ts-ignore
|
|
92
|
+
const diff = (d - start) + ((start.getTimezoneOffset() - d.getTimezoneOffset()) * 60 * 1000);
|
|
93
|
+
const oneDay = 1000 * 60 * 60 * 24;
|
|
94
|
+
return Math.floor(diff / oneDay);
|
|
95
|
+
}
|
|
96
|
+
// formatTime('','kW');
|
|
97
|
+
case 'kW': {
|
|
98
|
+
// +1 we start with week number 1
|
|
99
|
+
// +0.5 an easy and dirty way to round result (in combination with Math.floor)
|
|
100
|
+
return Math.floor(1 + 0.5 + (currentThursday.getTime() - firstThursday.getTime()) / 86400000/7);
|
|
101
|
+
}
|
|
102
|
+
// Wochentag 0:So;1:Mo;...6:Sa
|
|
103
|
+
case 'day': {
|
|
104
|
+
return d.getDay();
|
|
105
|
+
}
|
|
106
|
+
// 'hh:mm'
|
|
107
|
+
case 'hh:mm': {
|
|
108
|
+
return `${stunde}:${minute}`;
|
|
109
|
+
}
|
|
110
|
+
// 'dd.mm. hh:mm'
|
|
111
|
+
case 'dd.mm. hh:mm': {
|
|
112
|
+
return `${tag}.${monat} ${stunde}:${minute}`;
|
|
113
|
+
}
|
|
114
|
+
// true → Heute schon vorbei
|
|
115
|
+
case 'past': {
|
|
116
|
+
const cd = new Date();
|
|
117
|
+
const cStunde = zweiStellen(cd.getHours());
|
|
118
|
+
const cMinute = zweiStellen(cd.getMinutes());
|
|
119
|
+
return ((stunde > cStunde) || ((stunde === cStunde) && (minute >= cMinute)));
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
default: {
|
|
123
|
+
adapter.log.info('function formatTime: falsches Format angegeben');
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* TREND - Zwischenwert ermitteln
|
|
131
|
+
*
|
|
132
|
+
* @param a1 - Istwert a1 der Zeitachse
|
|
133
|
+
* @param a2 - Istwert a2 der Zeitachse
|
|
134
|
+
* @param b1 - Sollwert b1 der Wertachse
|
|
135
|
+
* @param b2 - Sollwert b2 der Wertachse
|
|
136
|
+
* @param sollA3 - Sollwert soll_A3 der Zeitachse
|
|
137
|
+
* @returns Zwischenwert
|
|
138
|
+
*/
|
|
139
|
+
function trend (a1,a2,b1,b2,sollA3) {
|
|
140
|
+
return (sollA3-a1)*(b2-b1)/(a2-a1)+b1;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
module.exports = {
|
|
145
|
+
addTime,
|
|
146
|
+
formatTime,
|
|
147
|
+
trend
|
|
148
|
+
};
|