iobroker.weather-warnings 0.3.1 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/admin/i18n/de/translations.json +3 -2
- package/admin/i18n/en/translations.json +4 -2
- package/admin/i18n/es/translations.json +2 -1
- package/admin/i18n/fr/translations.json +2 -1
- package/admin/i18n/it/translations.json +2 -1
- package/admin/i18n/nl/translations.json +2 -1
- package/admin/i18n/pl/translations.json +2 -1
- package/admin/i18n/pt/translations.json +2 -1
- package/admin/i18n/ru/translations.json +2 -1
- package/admin/i18n/uk/translations.json +2 -1
- package/admin/i18n/zh-cn/translations.json +2 -1
- package/admin/jsonConfig.json +12 -0
- package/build/lib/notification.js +8 -18
- package/build/lib/notification.js.map +2 -2
- package/build/lib/provider.js +1 -1
- package/build/lib/provider.js.map +1 -1
- package/build/main.js +1 -7
- package/build/main.js.map +2 -2
- package/io-package.json +16 -15
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -111,6 +111,9 @@ Warnung: ${Warntypename} am ${startdayofweek} um ${starttime} Stufe: ${warnlevel
|
|
|
111
111
|
Placeholder for the next version (at the beginning of the line):
|
|
112
112
|
### **WORK IN PROGRESS**
|
|
113
113
|
-->
|
|
114
|
+
### 0.3.2 (2023-10-10)
|
|
115
|
+
* add alexa volumen
|
|
116
|
+
|
|
114
117
|
### 0.3.1 (2023-10-10)
|
|
115
118
|
* (ticaki) added alexa
|
|
116
119
|
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"SelectNotificationService": "Wählen Sie die Adapterinstanz aus.",
|
|
7
7
|
"TypeFilter": "Die folgenden Warnungstypen werden aus Benachrichtigungen herausgefiltert.",
|
|
8
8
|
"WarnLanguage": "Sprache der abgerufenen Warnungen.",
|
|
9
|
-
"
|
|
9
|
+
"alexa2_Enabled": "Alexa aktivieren",
|
|
10
10
|
"bulgarian": "bulgarisch",
|
|
11
11
|
"croatian": "kroatisch",
|
|
12
12
|
"czech": "tschechisch",
|
|
@@ -209,5 +209,6 @@
|
|
|
209
209
|
"email_Header_hint": "${emailheader} ist hier das einzige funktionierende Token. (Neue Warnung oder Entwarnung)",
|
|
210
210
|
"email_Footer": "Fußzeile für E-Mail",
|
|
211
211
|
"dividerDirs": "Interne Verzeichnisse",
|
|
212
|
-
"alexa2_device_ids": "Gerät/Gruppe"
|
|
212
|
+
"alexa2_device_ids": "Gerät/Gruppe",
|
|
213
|
+
"alexa2_volumen": "Volumen"
|
|
213
214
|
}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"SelectNotificationService": "Select adapter instance.",
|
|
8
8
|
"TypeFilter": "The following warning types are filtered out of the notifications.",
|
|
9
9
|
"WarnLanguage": "Languange of retrieved warnings.",
|
|
10
|
-
"
|
|
10
|
+
"alexa2_Enabled": "Activate alexa",
|
|
11
11
|
"bulgarian": "bulgarian",
|
|
12
12
|
"croatian": "croatian",
|
|
13
13
|
"czech": "czech",
|
|
@@ -208,5 +208,7 @@
|
|
|
208
208
|
"email_Header_hint":"${emailheader} is the only working token here. (New warning or All clear)",
|
|
209
209
|
"email_Footer":"Footer for email",
|
|
210
210
|
"dividerDirs":"Internal directories",
|
|
211
|
-
"alexa2_device_ids":"Device/Group"
|
|
211
|
+
"alexa2_device_ids":"Device/Group",
|
|
212
|
+
"alexa2_volumen": "Volume"
|
|
213
|
+
|
|
212
214
|
}
|
|
@@ -208,5 +208,6 @@
|
|
|
208
208
|
"email_Header_hint": "${emailheader} es el único token que funciona aquí. (Nueva advertencia o Todo claro)",
|
|
209
209
|
"email_Footer": "Pie de página para correo electrónico",
|
|
210
210
|
"dividerDirs": "Directorios internos",
|
|
211
|
-
"alexa2_device_ids": "Dispositivo/Grupo"
|
|
211
|
+
"alexa2_device_ids": "Dispositivo/Grupo",
|
|
212
|
+
"alexa2_volumen": "Volumen"
|
|
212
213
|
}
|
|
@@ -208,5 +208,6 @@
|
|
|
208
208
|
"email_Header_hint": "${emailheader} est le seul jeton fonctionnel ici. (Nouvel avertissement ou Tout est clair)",
|
|
209
209
|
"email_Footer": "Pied de page pour l'e-mail",
|
|
210
210
|
"dividerDirs": "Annuaires internes",
|
|
211
|
-
"alexa2_device_ids": "Appareil/Groupe"
|
|
211
|
+
"alexa2_device_ids": "Appareil/Groupe",
|
|
212
|
+
"alexa2_volumen": "Volume"
|
|
212
213
|
}
|
|
@@ -208,5 +208,6 @@
|
|
|
208
208
|
"email_Header_hint": "${emailheader} è l'unico token funzionante qui. (Nuovo avviso o Tutto chiaro)",
|
|
209
209
|
"email_Footer": "Piè di pagina per e-mail",
|
|
210
210
|
"dividerDirs": "Directory interne",
|
|
211
|
-
"alexa2_device_ids": "Dispositivo/Gruppo"
|
|
211
|
+
"alexa2_device_ids": "Dispositivo/Gruppo",
|
|
212
|
+
"alexa2_volumen": "Volume"
|
|
212
213
|
}
|
|
@@ -208,5 +208,6 @@
|
|
|
208
208
|
"email_Header_hint": "${emailheader} is hier het enige werkende token. (Nieuwe waarschuwing of Alles gewist)",
|
|
209
209
|
"email_Footer": "Voettekst voor e-mail",
|
|
210
210
|
"dividerDirs": "Interne mappen",
|
|
211
|
-
"alexa2_device_ids": "Apparaat/groep"
|
|
211
|
+
"alexa2_device_ids": "Apparaat/groep",
|
|
212
|
+
"alexa2_volumen": "Volume"
|
|
212
213
|
}
|
|
@@ -208,5 +208,6 @@
|
|
|
208
208
|
"email_Header_hint": "Jedynym działającym tokenem jest tutaj ${emailheader}. (Nowe ostrzeżenie lub Wszystko jasne)",
|
|
209
209
|
"email_Footer": "Stopka do e-maila",
|
|
210
210
|
"dividerDirs": "Katalogi wewnętrzne",
|
|
211
|
-
"alexa2_device_ids": "Urządzenie/grupa"
|
|
211
|
+
"alexa2_device_ids": "Urządzenie/grupa",
|
|
212
|
+
"alexa2_volumen": "Tom"
|
|
212
213
|
}
|
|
@@ -208,5 +208,6 @@
|
|
|
208
208
|
"email_Header_hint": "${emailheader} é o único token funcional aqui. (Novo aviso ou Tudo limpo)",
|
|
209
209
|
"email_Footer": "Rodapé para e-mail",
|
|
210
210
|
"dividerDirs": "Diretórios internos",
|
|
211
|
-
"alexa2_device_ids": "Dispositivo/Grupo"
|
|
211
|
+
"alexa2_device_ids": "Dispositivo/Grupo",
|
|
212
|
+
"alexa2_volumen": "Volume"
|
|
212
213
|
}
|
|
@@ -208,5 +208,6 @@
|
|
|
208
208
|
"email_Header_hint": "${emailheader} — единственный работающий токен здесь. (Новое предупреждение или Все ясно)",
|
|
209
209
|
"email_Footer": "Нижний колонтитул электронной почты",
|
|
210
210
|
"dividerDirs": "Внутренние каталоги",
|
|
211
|
-
"alexa2_device_ids": "Устройство/группа"
|
|
211
|
+
"alexa2_device_ids": "Устройство/группа",
|
|
212
|
+
"alexa2_volumen": "Объем"
|
|
212
213
|
}
|
|
@@ -208,5 +208,6 @@
|
|
|
208
208
|
"email_Header_hint": "${emailheader} — єдиний робочий маркер тут. (Нове попередження або все очищено)",
|
|
209
209
|
"email_Footer": "Нижній колонтитул електронної пошти",
|
|
210
210
|
"dividerDirs": "Внутрішні каталоги",
|
|
211
|
-
"alexa2_device_ids": "Пристрій/група"
|
|
211
|
+
"alexa2_device_ids": "Пристрій/група",
|
|
212
|
+
"alexa2_volumen": "Обсяг"
|
|
212
213
|
}
|
package/admin/jsonConfig.json
CHANGED
|
@@ -1027,6 +1027,18 @@
|
|
|
1027
1027
|
"label": "alexa2_device_ids",
|
|
1028
1028
|
"newLine": true
|
|
1029
1029
|
},
|
|
1030
|
+
"alexa2_volumen": {
|
|
1031
|
+
"type": "number",
|
|
1032
|
+
"label": "alexa2_volumen",
|
|
1033
|
+
"min": 0,
|
|
1034
|
+
"max": 100,
|
|
1035
|
+
"step": 1,
|
|
1036
|
+
"disabled": "data.alexa2_Adapter == 'none'",
|
|
1037
|
+
"sm": 8,
|
|
1038
|
+
"md": 4,
|
|
1039
|
+
"lg": 2,
|
|
1040
|
+
"newLine": false
|
|
1041
|
+
},
|
|
1030
1042
|
"alexa2_DwdEnabled": {
|
|
1031
1043
|
"type": "checkbox",
|
|
1032
1044
|
"sm": 6,
|
|
@@ -176,30 +176,20 @@ class NotificationClass extends library.BaseClass {
|
|
|
176
176
|
const devices = this.adapter.config.alexa2_device_ids;
|
|
177
177
|
if (devices.length == 0)
|
|
178
178
|
break;
|
|
179
|
-
|
|
180
|
-
deviceSerialNumber: devices[0],
|
|
181
|
-
sequenceNodes: [],
|
|
182
|
-
sequenceType: "ParallelNode"
|
|
183
|
-
};
|
|
179
|
+
let opt = `${this.adapter.config.alexa2_volumen}`;
|
|
184
180
|
for (const a in devices) {
|
|
185
|
-
const optsub = { sequenceType: "SerialNode", nodes: [] };
|
|
186
|
-
optsub.nodes.push({
|
|
187
|
-
command: "speak-volume",
|
|
188
|
-
value: "15",
|
|
189
|
-
device: devices[a]
|
|
190
|
-
});
|
|
191
181
|
for (const msg of messages) {
|
|
192
182
|
if (Array.isArray(msg))
|
|
193
183
|
continue;
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
184
|
+
opt += `;${msg.text}`;
|
|
185
|
+
}
|
|
186
|
+
if (opt != `${this.adapter.config.alexa2_volumen}`) {
|
|
187
|
+
await this.adapter.setForeignStateAsync(
|
|
188
|
+
`${this.options.adapter}.Echo-Devices.${devices[a]}.Commands.speak`,
|
|
189
|
+
opt
|
|
190
|
+
);
|
|
199
191
|
}
|
|
200
|
-
opt.sequenceNodes.push(optsub);
|
|
201
192
|
}
|
|
202
|
-
await this.adapter.sendToAsync(this.options.adapter, "sendSequenceCommand", opt);
|
|
203
193
|
}
|
|
204
194
|
break;
|
|
205
195
|
case "history":
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/lib/notification.ts"],
|
|
4
|
-
"sourcesContent": ["import WeatherWarnings from '../main';\nimport { genericStateObjects } from './def/definitionen';\nimport * as NotificationType from './def/notificationService-def';\nimport * as library from './library';\nimport * as Provider from './def/provider-def';\nimport { MessagesClass } from './messages';\n\nexport class NotificationClass extends library.BaseClass {\n options: NotificationType.BaseType;\n takeThemAll = false;\n config: NotificationType.ConfigType;\n providerDB: any;\n removeAllSend: boolean = true;\n\n //clearAll(): void {}\n\n constructor(adapter: WeatherWarnings, notifcationOptions: NotificationType.BaseType) {\n super(adapter, notifcationOptions.name);\n this.log.debug(`Create notification service ${this.name}`);\n this.options = notifcationOptions;\n this.config = NotificationType.serciceCapabilities[notifcationOptions.name];\n }\n\n /**\n * Initialisiere class - create channel, states etc\n */\n async init(): Promise<void> {\n switch (this.name as NotificationType.Type) {\n case 'history':\n case 'json':\n {\n let dp = '';\n let def: any = genericStateObjects.history;\n const providers = this.adapter.providerController!.providers.filter((a) =>\n this.options.service.includes(a.service),\n );\n const targets = [...providers, this.adapter.providerController!];\n for (const a in targets) {\n switch (this.name as NotificationType.Type) {\n case 'history':\n {\n dp = `${targets[a].name}.history`;\n def = genericStateObjects.history;\n }\n break;\n case 'json':\n {\n dp = `${targets[a].name}.activeWarnings_json`;\n def = genericStateObjects.activeWarningsJson;\n }\n break;\n }\n const state = this.adapter.library.getdb(dp);\n if (state == undefined) {\n await this.adapter.library.writedp(dp, '[]', def);\n }\n }\n }\n break;\n }\n }\n\n /**\n * Send this message after filtering to services REWRITED\n * @param messages the message with MessageClassRef Ref can be null\n * @param action <string>\n * @param override <boolean> override new/removeall handling\n * @returns\n */\n async sendMessage(\n providers: Provider.BaseProvider[],\n allowActions: NotificationType.ActionsUnionType[],\n override: boolean = false,\n ): Promise<void> {\n let activeWarnings = 0;\n const result: NotificationType.MessageType[] = [];\n for (const a in providers) {\n if (this.options.service.indexOf(providers[a].service) == -1) continue;\n //const resultProvider: NotificationType.MessageType[] = [];\n for (const b in providers[a].messages) {\n const message = providers[a].messages[b];\n if (\n message &&\n (this.options.filter.level === undefined || this.options.filter.level <= message.level) &&\n this.options.filter.type.indexOf(String(message.genericType)) == -1\n ) {\n if (message.notDeleted) activeWarnings++;\n for (const c in this.options.actions) {\n const action: keyof NotificationType.ActionsType = c as keyof NotificationType.ActionsType;\n if (\n this.options.actions[action] == 'none' ||\n this.options.actions[action] == '' ||\n action == undefined\n )\n continue;\n\n if (!allowActions.includes(action)) continue;\n\n if (!this.config.notifications.includes(action)) continue;\n\n const msg = await this.getMessage(\n message,\n this.config.notifications,\n this.options.actions[action as keyof typeof this.options.actions]!,\n action,\n override,\n );\n if (msg.text != '') {\n msg.action = action;\n msg.provider = providers[a];\n msg.message = message;\n //if (this.config.notifications.includes('all'))\n result.push(msg); // hier sammele die Nachrichten\n\n //else this.sendNotifications(msg, message, action); // hier versende die Nachrichten aber nicht an Dienste mit all\n }\n }\n }\n }\n //if (resultProvider.length > 0) await this.sendNotifications(resultProvider); // hier an alle\n\n //if (this.config.notifications.includes('all')) result = result.concat(resultProvider); // hier sammele die Nachrichten\n }\n if (result.length > 0 && activeWarnings > 0) {\n await this.sendNotifications(result); // hier an alle\n this.removeAllSend = false;\n } else {\n // no active Warnings every where, notification filter dont care.\n\n if (\n this.config.notifications.includes('removeAll') &&\n this.options.actions['removeAll'] != 'none' &&\n (override || (!this.removeAllSend && activeWarnings == 0))\n ) {\n const templates = this.adapter.config.templateTable;\n const tempid = templates.findIndex((a) => a.templateKey == this.options.actions['removeAll']);\n if (tempid != -1) {\n this.sendNotifications([\n {\n text: templates[tempid].template.replaceAll('\\\\', ''),\n startts: 1,\n template: templates[tempid].template,\n action: 'removeAll',\n },\n ]);\n }\n this.removeAllSend = true;\n }\n }\n }\n async getMessage(\n message: MessagesClass,\n templateType: NotificationType.ActionsUnionType[],\n templateKey: string,\n action: NotificationType.ActionsUnionType,\n override: boolean = false,\n ): Promise<NotificationType.MessageType> {\n return await message.getMessage(templateType, templateKey, action, override);\n }\n\n async sendNotifications(messages: NotificationType.MessageType[]): Promise<boolean> {\n if (!Array.isArray(messages) || messages.length == 0) return false;\n\n switch (this.name as NotificationType.Type) {\n case 'telegram':\n {\n for (const msg of messages) {\n const opt = { text: msg.text, disable_notification: true };\n\n await this.adapter.sendToAsync(this.options.adapter, 'send', opt);\n this.log.debug(`Send the message: ${msg.text}`);\n }\n }\n break;\n case 'pushover':\n {\n for (const msg of messages) {\n const opt = { message: msg.text };\n //newMsg.title = topic;newMsg.device sound = `none`\n await this.adapter.sendToAsync(this.options.adapter, 'send', opt);\n this.log.debug(`Send the message: ${msg.text}`);\n }\n }\n break;\n case 'whatsapp':\n {\n for (const msg of messages) {\n if (Array.isArray(msg)) return false;\n const service = this.options.adapter.replace('whatsapp', 'whatsapp-cmb');\n // obj.message.phone\n const opt = { text: msg.text };\n\n await this.adapter.sendToAsync(service, 'send', opt);\n this.log.debug(`Send the message: ${msg.text}`);\n }\n }\n break;\n case 'alexa2':\n {\n const devices = this.adapter.config.alexa2_device_ids;\n if (devices.length == 0) break;\n const opt: any = {\n // value\n deviceSerialNumber: devices[0], // Serial number of one device to get Meta data which will be used if no device is pecified on the commands\n sequenceNodes: [], // list of sequences or commands\n sequenceType: 'ParallelNode', // \"SerialNode\" or \"ParallelNode\" for the provided sequenceNodes on main level. Default is \"SerialNode\"\n };\n for (const a in devices) {\n const optsub: any = { sequenceType: 'SerialNode', nodes: [] };\n optsub.nodes.push({\n command: 'speak-volume',\n value: '15',\n device: devices[a],\n });\n for (const msg of messages) {\n if (Array.isArray(msg)) continue;\n optsub.nodes.push({\n command: 'announcement',\n value: msg.text,\n device: devices[a],\n });\n }\n opt.sequenceNodes.push(optsub);\n }\n await this.adapter.sendToAsync(this.options.adapter, 'sendSequenceCommand', opt);\n }\n break;\n case 'history':\n {\n for (const msg of messages) {\n if (Array.isArray(msg)) return false;\n if (!msg || !msg.provider || !this.adapter.config.history_Enabled || !msg.message) return false;\n let newMsg = msg.text;\n if (this.adapter.config.history_allinOne) {\n newMsg = JSON.stringify({ ...msg.message.formatedData, ts: Date.now() });\n }\n const targets = [msg.provider.name, msg.provider.providerController.name];\n for (const a in targets) {\n try {\n const dp = `${targets[a]}.history`;\n const state = this.adapter.library.getdb(dp);\n let json: object[] = [];\n if (state && state.val && typeof state.val == 'string' && state.val != '')\n json = JSON.parse(state.val);\n json.unshift(typeof newMsg == 'object' ? JSON.parse(newMsg) : newMsg);\n json.splice(500);\n await this.adapter.library.writedp(\n dp,\n JSON.stringify(json),\n genericStateObjects.history,\n );\n } catch (error) {\n this.log.error(\n `${this.name} template has wrong formate. ${this.name} deactivated! template: ${\n msg.action ? this.options.actions[msg.action] : 'unknown'\n }, message: ${msg}`,\n );\n this.adapter.config.history_Enabled = false;\n return false;\n }\n }\n }\n }\n break;\n case 'json':\n {\n // testrun to get a good error\n let result: any[] = [];\n let providers: string[] = [];\n for (const a in messages) {\n try {\n const temp = this.adapter.config.json_parse\n ? JSON.parse(messages[a].text)\n : messages[a].text;\n result.push({\n startts: messages[a].startts,\n message: temp,\n provider: messages[a].provider,\n });\n providers.push(messages[a].provider !== undefined ? messages[a].provider!.name : '');\n } catch (error) {\n this.log.error(\n `Json template has wrong formate. Conversion deactivated! template: ${messages[a].template}, message: ${messages[a].text}`,\n );\n this.adapter.config.json_parse = false;\n continue;\n }\n }\n // double providers\n providers = providers.filter((i, p) => {\n if (i != '') {\n if (providers.indexOf(i) == p) return true;\n }\n return false;\n });\n // double message\n result = result.filter((i, p) => {\n if (i.message != '' && i.provider) {\n if (\n result.findIndex(\n (i2) => i2.provider.name == i.provider.name && i2.message == i.message,\n ) == p\n )\n return true;\n }\n return false;\n });\n // sort\n result.sort((a, b) => {\n if (a.provider > b.provider) return 1;\n else if (a.provider < b.provider) return -1;\n else return a.startts - b.startts;\n });\n for (const p of providers) {\n const dp = p + '.activeWarnings_json';\n const data = result.filter((a) => a.provider && a.provider.name == p).map((a) => a.message);\n await this.adapter.library.writedp(\n dp,\n JSON.stringify(data),\n genericStateObjects.activeWarningsJson,\n );\n }\n // filter double all\n result = result.filter((i, p) => {\n if (i.message != '' && i.provider) {\n if (result.findIndex((i2) => i2.message == i.message) == p) return true;\n }\n return false;\n });\n {\n const dp = this.adapter.providerController!.name + '.activeWarnings_json';\n await this.adapter.library.writedp(\n dp,\n JSON.stringify(result.map((a) => a.message)),\n genericStateObjects.activeWarningsJson,\n );\n }\n }\n break;\n case 'email':\n {\n const result = messages.filter((i, p) => {\n if (i.text != '' && i.provider) {\n if (messages.findIndex((i2) => i2.text != i.text) == p) return true;\n }\n return false;\n });\n result.sort((a, b) => a.startts - b.startts);\n const flat: string[] = result.map((a) => a.text);\n\n let message = flat.join(this.adapter.config.email_line_break);\n const templates = this.adapter.config.templateTable;\n\n if (this.adapter.config.email_Header !== 'none') {\n const tempid = templates.findIndex((a) => a.templateKey == this.adapter.config.email_Header);\n if (tempid != -1) {\n let token = 'notification.warning';\n if (messages[0].action == 'removeAll') token = 'notification.allclear';\n const temp = templates[tempid].template.replace(\n '${emailheader}',\n await this.adapter.library.getTranslation(token),\n );\n message = temp + message;\n }\n }\n if (this.adapter.config.email_Footer !== 'none') {\n const tempid = templates.findIndex((a) => a.templateKey == this.adapter.config.email_Header);\n if (tempid != -1) {\n message = message + templates[tempid];\n }\n }\n await this.adapter.sendToAsync(this.options.adapter, 'send', message);\n this.log.debug(`Send the message: ${message}`);\n }\n break;\n }\n\n return true;\n }\n}\n"],
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["import WeatherWarnings from '../main';\nimport { genericStateObjects } from './def/definitionen';\nimport * as NotificationType from './def/notificationService-def';\nimport * as library from './library';\nimport * as Provider from './def/provider-def';\nimport { MessagesClass } from './messages';\n\nexport class NotificationClass extends library.BaseClass {\n options: NotificationType.BaseType;\n takeThemAll = false;\n config: NotificationType.ConfigType;\n providerDB: any;\n removeAllSend: boolean = true;\n\n //clearAll(): void {}\n\n constructor(adapter: WeatherWarnings, notifcationOptions: NotificationType.BaseType) {\n super(adapter, notifcationOptions.name);\n this.log.debug(`Create notification service ${this.name}`);\n this.options = notifcationOptions;\n this.config = NotificationType.serciceCapabilities[notifcationOptions.name];\n }\n\n /**\n * Initialisiere class - create channel, states etc\n */\n async init(): Promise<void> {\n switch (this.name as NotificationType.Type) {\n case 'history':\n case 'json':\n {\n let dp = '';\n let def: any = genericStateObjects.history;\n const providers = this.adapter.providerController!.providers.filter((a) =>\n this.options.service.includes(a.service),\n );\n const targets = [...providers, this.adapter.providerController!];\n for (const a in targets) {\n switch (this.name as NotificationType.Type) {\n case 'history':\n {\n dp = `${targets[a].name}.history`;\n def = genericStateObjects.history;\n }\n break;\n case 'json':\n {\n dp = `${targets[a].name}.activeWarnings_json`;\n def = genericStateObjects.activeWarningsJson;\n }\n break;\n }\n const state = this.adapter.library.getdb(dp);\n if (state == undefined) {\n await this.adapter.library.writedp(dp, '[]', def);\n }\n }\n }\n break;\n }\n }\n\n /**\n * Send this message after filtering to services REWRITED\n * @param messages the message with MessageClassRef Ref can be null\n * @param action <string>\n * @param override <boolean> override new/removeall handling\n * @returns\n */\n async sendMessage(\n providers: Provider.BaseProvider[],\n allowActions: NotificationType.ActionsUnionType[],\n override: boolean = false,\n ): Promise<void> {\n let activeWarnings = 0;\n const result: NotificationType.MessageType[] = [];\n for (const a in providers) {\n if (this.options.service.indexOf(providers[a].service) == -1) continue;\n //const resultProvider: NotificationType.MessageType[] = [];\n for (const b in providers[a].messages) {\n const message = providers[a].messages[b];\n if (\n message &&\n (this.options.filter.level === undefined || this.options.filter.level <= message.level) &&\n this.options.filter.type.indexOf(String(message.genericType)) == -1\n ) {\n if (message.notDeleted) activeWarnings++;\n for (const c in this.options.actions) {\n const action: keyof NotificationType.ActionsType = c as keyof NotificationType.ActionsType;\n if (\n this.options.actions[action] == 'none' ||\n this.options.actions[action] == '' ||\n action == undefined\n )\n continue;\n\n if (!allowActions.includes(action)) continue;\n\n if (!this.config.notifications.includes(action)) continue;\n\n const msg = await this.getMessage(\n message,\n this.config.notifications,\n this.options.actions[action as keyof typeof this.options.actions]!,\n action,\n override,\n );\n if (msg.text != '') {\n msg.action = action;\n msg.provider = providers[a];\n msg.message = message;\n //if (this.config.notifications.includes('all'))\n result.push(msg); // hier sammele die Nachrichten\n\n //else this.sendNotifications(msg, message, action); // hier versende die Nachrichten aber nicht an Dienste mit all\n }\n }\n }\n }\n //if (resultProvider.length > 0) await this.sendNotifications(resultProvider); // hier an alle\n\n //if (this.config.notifications.includes('all')) result = result.concat(resultProvider); // hier sammele die Nachrichten\n }\n if (result.length > 0 && activeWarnings > 0) {\n await this.sendNotifications(result); // hier an alle\n this.removeAllSend = false;\n } else {\n // no active Warnings every where, notification filter dont care.\n\n if (\n this.config.notifications.includes('removeAll') &&\n this.options.actions['removeAll'] != 'none' &&\n (override || (!this.removeAllSend && activeWarnings == 0))\n ) {\n const templates = this.adapter.config.templateTable;\n const tempid = templates.findIndex((a) => a.templateKey == this.options.actions['removeAll']);\n if (tempid != -1) {\n this.sendNotifications([\n {\n text: templates[tempid].template.replaceAll('\\\\', ''),\n startts: 1,\n template: templates[tempid].template,\n action: 'removeAll',\n },\n ]);\n }\n this.removeAllSend = true;\n }\n }\n }\n async getMessage(\n message: MessagesClass,\n templateType: NotificationType.ActionsUnionType[],\n templateKey: string,\n action: NotificationType.ActionsUnionType,\n override: boolean = false,\n ): Promise<NotificationType.MessageType> {\n return await message.getMessage(templateType, templateKey, action, override);\n }\n\n async sendNotifications(messages: NotificationType.MessageType[]): Promise<boolean> {\n if (!Array.isArray(messages) || messages.length == 0) return false;\n\n switch (this.name as NotificationType.Type) {\n case 'telegram':\n {\n for (const msg of messages) {\n const opt = { text: msg.text, disable_notification: true };\n\n await this.adapter.sendToAsync(this.options.adapter, 'send', opt);\n this.log.debug(`Send the message: ${msg.text}`);\n }\n }\n break;\n case 'pushover':\n {\n for (const msg of messages) {\n const opt = { message: msg.text };\n //newMsg.title = topic;newMsg.device sound = `none`\n await this.adapter.sendToAsync(this.options.adapter, 'send', opt);\n this.log.debug(`Send the message: ${msg.text}`);\n }\n }\n break;\n case 'whatsapp':\n {\n for (const msg of messages) {\n if (Array.isArray(msg)) return false;\n const service = this.options.adapter.replace('whatsapp', 'whatsapp-cmb');\n // obj.message.phone\n const opt = { text: msg.text };\n\n await this.adapter.sendToAsync(service, 'send', opt);\n this.log.debug(`Send the message: ${msg.text}`);\n }\n }\n break;\n case 'alexa2':\n {\n const devices = this.adapter.config.alexa2_device_ids;\n\n if (devices.length == 0) break;\n\n let opt = `${this.adapter.config.alexa2_volumen}`;\n for (const a in devices) {\n for (const msg of messages) {\n if (Array.isArray(msg)) continue;\n opt += `;${msg.text}`;\n }\n if (opt != `${this.adapter.config.alexa2_volumen}`) {\n await this.adapter.setForeignStateAsync(\n `${this.options.adapter}.Echo-Devices.${devices[a]}.Commands.speak`,\n opt,\n );\n }\n }\n /*\n const opt: any = {\n // value\n deviceSerialNumber: devices[0], // Serial number of one device to get Meta data which will be used if no device is pecified on the commands\n sequenceNodes: [], // list of sequences or commands\n sequenceType: 'ParallelNode', // \"SerialNode\" or \"ParallelNode\" for the provided sequenceNodes on main level. Default is \"SerialNode\"\n };\n for (const a in devices) {\n const optsub: any = { sequenceType: 'SerialNode', nodes: [] };\n optsub.nodes.push({\n command: 'speak-volume',\n value: 1, //this.adapter.config.alexa2_volumen,\n device: devices[a],\n });\n for (const msg of messages) {\n if (Array.isArray(msg)) continue;\n optsub.nodes.push({\n command: 'speak',\n value: `${this.adapter.config.alexa2_volumen};${msg.text}`,\n device: devices[a],\n });\n }\n opt.sequenceNodes.push(optsub);\n }\n this.log.debug(\n JSON.stringify(\n await this.adapter.sendToAsync(this.options.adapter, 'sendSequenceCommand', opt),\n ),\n );*/\n }\n break;\n case 'history':\n {\n for (const msg of messages) {\n if (Array.isArray(msg)) return false;\n if (!msg || !msg.provider || !this.adapter.config.history_Enabled || !msg.message) return false;\n let newMsg = msg.text;\n if (this.adapter.config.history_allinOne) {\n newMsg = JSON.stringify({ ...msg.message.formatedData, ts: Date.now() });\n }\n const targets = [msg.provider.name, msg.provider.providerController.name];\n for (const a in targets) {\n try {\n const dp = `${targets[a]}.history`;\n const state = this.adapter.library.getdb(dp);\n let json: object[] = [];\n if (state && state.val && typeof state.val == 'string' && state.val != '')\n json = JSON.parse(state.val);\n json.unshift(typeof newMsg == 'object' ? JSON.parse(newMsg) : newMsg);\n json.splice(500);\n await this.adapter.library.writedp(\n dp,\n JSON.stringify(json),\n genericStateObjects.history,\n );\n } catch (error) {\n this.log.error(\n `${this.name} template has wrong formate. ${this.name} deactivated! template: ${\n msg.action ? this.options.actions[msg.action] : 'unknown'\n }, message: ${msg}`,\n );\n this.adapter.config.history_Enabled = false;\n return false;\n }\n }\n }\n }\n break;\n case 'json':\n {\n // testrun to get a good error\n let result: any[] = [];\n let providers: string[] = [];\n for (const a in messages) {\n try {\n const temp = this.adapter.config.json_parse\n ? JSON.parse(messages[a].text)\n : messages[a].text;\n result.push({\n startts: messages[a].startts,\n message: temp,\n provider: messages[a].provider,\n });\n providers.push(messages[a].provider !== undefined ? messages[a].provider!.name : '');\n } catch (error) {\n this.log.error(\n `Json template has wrong formate. Conversion deactivated! template: ${messages[a].template}, message: ${messages[a].text}`,\n );\n this.adapter.config.json_parse = false;\n continue;\n }\n }\n // double providers\n providers = providers.filter((i, p) => {\n if (i != '') {\n if (providers.indexOf(i) == p) return true;\n }\n return false;\n });\n // double message\n result = result.filter((i, p) => {\n if (i.message != '' && i.provider) {\n if (\n result.findIndex(\n (i2) => i2.provider.name == i.provider.name && i2.message == i.message,\n ) == p\n )\n return true;\n }\n return false;\n });\n // sort\n result.sort((a, b) => {\n if (a.provider > b.provider) return 1;\n else if (a.provider < b.provider) return -1;\n else return a.startts - b.startts;\n });\n for (const p of providers) {\n const dp = p + '.activeWarnings_json';\n const data = result.filter((a) => a.provider && a.provider.name == p).map((a) => a.message);\n await this.adapter.library.writedp(\n dp,\n JSON.stringify(data),\n genericStateObjects.activeWarningsJson,\n );\n }\n // filter double all\n result = result.filter((i, p) => {\n if (i.message != '' && i.provider) {\n if (result.findIndex((i2) => i2.message == i.message) == p) return true;\n }\n return false;\n });\n {\n const dp = this.adapter.providerController!.name + '.activeWarnings_json';\n await this.adapter.library.writedp(\n dp,\n JSON.stringify(result.map((a) => a.message)),\n genericStateObjects.activeWarningsJson,\n );\n }\n }\n break;\n case 'email':\n {\n const result = messages.filter((i, p) => {\n if (i.text != '' && i.provider) {\n if (messages.findIndex((i2) => i2.text != i.text) == p) return true;\n }\n return false;\n });\n result.sort((a, b) => a.startts - b.startts);\n const flat: string[] = result.map((a) => a.text);\n\n let message = flat.join(this.adapter.config.email_line_break);\n const templates = this.adapter.config.templateTable;\n\n if (this.adapter.config.email_Header !== 'none') {\n const tempid = templates.findIndex((a) => a.templateKey == this.adapter.config.email_Header);\n if (tempid != -1) {\n let token = 'notification.warning';\n if (messages[0].action == 'removeAll') token = 'notification.allclear';\n const temp = templates[tempid].template.replace(\n '${emailheader}',\n await this.adapter.library.getTranslation(token),\n );\n message = temp + message;\n }\n }\n if (this.adapter.config.email_Footer !== 'none') {\n const tempid = templates.findIndex((a) => a.templateKey == this.adapter.config.email_Header);\n if (tempid != -1) {\n message = message + templates[tempid];\n }\n }\n await this.adapter.sendToAsync(this.options.adapter, 'send', message);\n this.log.debug(`Send the message: ${message}`);\n }\n break;\n }\n\n return true;\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/build/lib/provider.js
CHANGED
|
@@ -41,7 +41,7 @@ var import_messages = require("./messages");
|
|
|
41
41
|
var NotificationClass = __toESM(require("./notification"));
|
|
42
42
|
var import_test_warnings = require("./test-warnings");
|
|
43
43
|
var messagesDef = __toESM(require("./def/messages-def"));
|
|
44
|
-
const DIV = "
|
|
44
|
+
const DIV = "-";
|
|
45
45
|
class BaseProvider extends import_library.BaseClass {
|
|
46
46
|
service;
|
|
47
47
|
url = "";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/lib/provider.ts"],
|
|
4
|
-
"sourcesContent": ["// Provider\n\nimport axios from 'axios';\nimport WeatherWarnings from '../main';\nimport * as definitionen from './def/definitionen';\nimport { BaseClass, Library } from './library';\nimport * as providerDef from './def/provider-def';\nimport { MessagesClass } from './messages';\nimport * as NotificationClass from './notification';\nimport { getTestData } from './test-warnings';\nimport * as NotificationType from './def/notificationService-def';\nimport * as messagesDef from './def/messages-def';\nexport const DIV = '/';\ntype ProviderOptionsTypeInternal = {\n service: providerDef.providerServices;\n warncellId: string | [string, string];\n} & (StringProviderOptionsType | CoordinateProviderOptionsType);\n\ntype ProviderOptionsType = ProviderOptionsTypeInternal;\n\ntype StringProviderOptionsType = BaseProviderOptionsType & {\n warncellId: string;\n};\ntype CoordinateProviderOptionsType = BaseProviderOptionsType & {\n warncellId: [string, string];\n};\ntype BaseProviderOptionsType = {\n providerController: ProviderController;\n language: string;\n filter: providerDef.messageFilterType;\n customName: string;\n};\n\n/** Base class for every provider */\nexport class BaseProvider extends BaseClass {\n service: providerDef.providerServices;\n url: string = '';\n warncellId: string | Array<string> = '';\n rawData: providerDef.DataImportType = null;\n library: Library;\n messages: MessagesClass[] = [];\n providerController: ProviderController;\n filter: providerDef.messageFilterType;\n customName: string = '';\n warncellIdString: string;\n constructor(adapter: WeatherWarnings, options: ProviderOptionsTypeInternal, name: string) {\n let warncell = typeof options.warncellId == 'string' ? options.warncellId : options.warncellId.join(DIV);\n warncell = warncell.replaceAll('.', '_');\n super(adapter, 'provider.' + `${name}.${warncell}`);\n\n this.warncellIdString = warncell;\n this.service = options.service;\n this.library = this.adapter.library;\n this.providerController = options.providerController;\n this.setService(options.service);\n this.log.setLogPrefix(`${name}-${options.warncellId}`);\n this.filter = options.filter;\n this.customName = options.customName;\n\n const temp = this.library.cloneGenericObject(\n //@ts-expect-error ist vorhanden\n definitionen.statesObjectsWarnings[this.service]._channel,\n ) as ioBroker.DeviceObject;\n temp.common.name = name.toUpperCase();\n this.library.writedp('provider.' + name, undefined, temp);\n\n this.init();\n }\n async init(): Promise<void> {\n const temp = this.library.cloneGenericObject(definitionen.defaultChannel) as ioBroker.ChannelObject;\n temp.common.name = this.customName;\n await this.library.writedp(`${this.name}`, undefined, temp);\n await this.adapter.extendObjectAsync(`${this.name}`, {\n common: { name: this.customName },\n });\n\n await this.library.writedp(`${this.name}.info`, undefined, definitionen.genericStateObjects.info._channel);\n await this.library.writedp(\n `${this.name}.formatedKeys`,\n undefined,\n definitionen.genericStateObjects.formatedKeysDevice,\n );\n\n this.setConnected(false);\n }\n\n delete(): void {\n this.rawData = null;\n this.setConnected(false);\n }\n\n getService(): providerDef.providerServices {\n if (!this.service) {\n throw new Error(`baseProvider.getService service is ${this.service == '' ? `''` : `undefined`}`);\n }\n return this.service;\n }\n /*getStatesObjectsWarnings(key: string): { [key: string]: ioBroker.Object } {\n return statesObjectsWarnings[this.service][key];\n }*/\n\n setService(service: providerDef.providerServices): boolean {\n if (\n !service ||\n ['dwdService', 'zamgService', 'uwzService', 'ninaService', 'metroService'].indexOf(service) === -1\n ) {\n throw new Error(`baseProvider.setService service ${service} is unknowed!`);\n }\n this.service = service;\n return true;\n }\n\n /**\n * @param url if '' url from PROVIDER_OPTIONS is taken\n * @param keys [string] values to replace - placeholder # # #+ +# #++ ++# and so on\n */\n setUrl(url: string = '', keys: string[]): string {\n if (!url) {\n this.url = definitionen.PROVIDER_OPTIONS[this.service]['url'];\n } else {\n this.url = url;\n }\n let placeholder = '# #';\n for (const k in keys) {\n this.url = this.url.replace(placeholder, keys[k]);\n placeholder = placeholder.slice(0, 1) + '+' + placeholder.slice(1, -1) + '+' + placeholder.slice(-1);\n }\n return this.url;\n }\n async setConnected(status: boolean): Promise<void> {\n this.providerController.connection = this.providerController.connection || status;\n const objDef = await this.library.getObjectDefFromJson(`info.connection`, definitionen.genericStateObjects);\n this.library.writedp(`${this.name}.info.connection`, !!status, objDef);\n }\n async update(): Promise<void> {\n // tue nichts\n }\n static async setAlerts(\n that: BaseProvider | ProviderController,\n prefix: string,\n data: { [key: string]: string | number | boolean },\n ): Promise<void> {\n await that.library.writeFromJson(\n prefix + '.alerts',\n 'allService.alerts',\n definitionen.statesObjectsWarnings,\n data,\n false,\n );\n }\n async getAlertsAndWrite(): Promise<messagesDef.genericWarntypeAlertJsonType> {\n const reply: any = {};\n for (const t in messagesDef.genericWarntyp) {\n reply[messagesDef.genericWarntyp[Number(t) as keyof messagesDef.genericWarntypeType].id] = {\n level: -1,\n start: 1,\n end: 1,\n headline: '',\n active: false,\n type: -1,\n };\n }\n\n if (!reply) throw new Error('error(234) reply not definied');\n for (const a in this.messages) {\n const m = this.messages[a];\n if (!m) continue;\n const name = messagesDef.genericWarntyp[m.genericType].id;\n if (reply[name] === undefined) continue;\n if (m.endtime < Date.now()) continue;\n\n if (m.starttime < Date.now() && reply[name].level < m.level) {\n reply[name] = {\n level: m.level,\n start: m.starttime,\n end: m.endtime,\n headline: m.formatedData !== undefined ? String(m.formatedData.headline) : '',\n active: m.starttime <= Date.now() && m.endtime >= Date.now(),\n type: -1,\n };\n }\n }\n await BaseProvider.setAlerts(this, this.name, reply);\n return reply;\n }\n // General function that retrieves data\n async getDataFromProvider(): Promise<providerDef.DataImportType> {\n if (!this.url || !this.warncellId) {\n this.log.debug(\n // eslint-disable-next-line prettier/prettier\n `Warn (31) this.url: ${this.url} this.warncellid: ${this.warncellId} this.service: ${this.getService()}`,\n );\n }\n try {\n if (this.unload) {\n return;\n }\n\n // show text mode in Info states\n const objDef = await this.library.getObjectDefFromJson(`info.testMode`, definitionen.genericStateObjects);\n this.library.writedp(`${this.name}.info.testMode`, this.adapter.config.useTestWarnings, objDef);\n if (this.adapter.config.useTestWarnings) {\n return this.library.cloneGenericObject(\n getTestData(this.service, this.adapter) as object,\n ) as providerDef.DataImportType;\n } else {\n const data = await axios.get(this.url);\n if (data.status == 200) {\n await this.setConnected(true);\n\n const result = typeof data.data == 'object' ? data.data : JSON.parse(data.data);\n\n this.library.writedp(\n `${this.name}.warning.warning_json`,\n JSON.stringify(result),\n definitionen.genericStateObjects.warnings_json,\n );\n if (this.adapter.config.useJsonHistory) {\n const dp = `${this.name}.warning.jsonHistory`;\n const state = this.library.readdp(dp);\n let history: object[] = [];\n if (state && state.val && typeof state.val == 'string') history = JSON.parse(state.val);\n history.unshift(result);\n this.library.writedp(dp, JSON.stringify(history), definitionen.genericStateObjects.jsonHistory);\n }\n this.library.writedp(\n `${this.name}.lastUpdate`,\n Date.now(),\n definitionen.genericStateObjects.lastUpdate,\n );\n return result;\n } else {\n this.log.warn('Warn(23) ' + data.statusText);\n }\n }\n } catch (error) {\n if (axios.isAxiosError(error)) {\n this.log.warn(`Warn(21) axios error for ${this.getService()} url: ${this.url}`);\n } else {\n this.log.error(`Error(22) no data for ${this.getService()} from ${this.url} with Error ${error}`);\n }\n }\n await this.setConnected(false);\n return null;\n }\n //** Called at the end of updateData() from every childclass */\n async finishUpdateData(): Promise<void> {\n for (let m = 0; m < this.messages.length; m++) {\n this.messages.sort((a, b) => {\n return a.starttime - b.starttime;\n });\n await this.messages[m].writeFormatedKeys(m);\n\n await this.messages[m].formatMessages();\n }\n this.library.garbageColleting(`${this.name}.formatedKeys`, (this.providerController.refreshTime || 600000) / 2);\n }\n /**\n * generic write function for flat Objects\n * @param prefix {string} prefix in datatree\n * @param data json object flat\n * @returns void\n */\n async dumpData(prefix: string, data: providerDef.DataImportType): Promise<void> {\n if (!prefix || !data || typeof data !== 'object') return;\n for (const key in data) {\n //@ts-expect-error write code for next line\n this.adapter.library.writeState(`${prefix}`, key, data[key]);\n }\n }\n async updateData(data: any, counter: number): Promise<void> {\n if (!data) return;\n this.library.writedp(`${this.name}.warning`, undefined, definitionen.genericStateObjects.warningDevice);\n await this.library.writeFromJson(\n `${this.name}.warning.${('00' + counter.toString()).slice(-2)}`,\n `${this.service}.raw`,\n definitionen.statesObjectsWarnings,\n data,\n );\n }\n /** Remove marked Messages. */\n async clearMessages(): Promise<void> {\n for (let m = 0; m < this.messages.length; m++) {\n this.messages[m].newMessage = false;\n if (this.messages[m].notDeleted == false) {\n this.log.debug('Remove a warning from db.');\n this.messages.splice(Number(m--), 1);\n }\n }\n }\n}\n\n// nuzte klassen um Daten zu parsen\nexport class DWDProvider extends BaseProvider {\n constructor(adapter: WeatherWarnings, options: StringProviderOptionsType) {\n super(adapter, { ...options, service: 'dwdService' }, `dwd`);\n this.warncellId = options.warncellId;\n const url =\n definitionen.PROVIDER_OPTIONS.dwdService.url_base +\n (this.warncellId.startsWith('9') || this.warncellId.startsWith('10')\n ? definitionen.PROVIDER_OPTIONS.dwdService.url_appendix_land\n : definitionen.PROVIDER_OPTIONS.dwdService.url_appendix_town) +\n definitionen.PROVIDER_OPTIONS.dwdService.url_language;\n this.url = this.setUrl(url, [this.warncellId, options.language]);\n }\n async updateData(): Promise<void> {\n const result = (await this.getDataFromProvider()) as providerDef.dataImportDwdType;\n if (!result) return;\n\n this.log.debug(`Got ${result.features.length} warnings from server`);\n result.features.sort((a, b) => {\n return new Date(a.properties.ONSET).getTime() - new Date(b.properties.ONSET).getTime();\n });\n this.messages.forEach((a) => (a.notDeleted = false));\n for (let a = 0; a < this.adapter.numOfRawWarnings && a < result.features.length; a++) {\n const w = result.features[a];\n if (w.properties.STATUS == 'Test') continue;\n await super.updateData(w.properties, a);\n\n /**\n * filter messages dwd\n */\n const index = this.messages.findIndex((m) => m.rawWarning.IDENTIFIER == w.properties.IDENTIFIER);\n\n if (index == -1) {\n const nmessage = new MessagesClass(\n this.adapter,\n 'dwd-msg',\n this,\n w.properties,\n this.providerController,\n );\n await nmessage.updateFormated();\n\n if (nmessage && nmessage.filter(this.filter)) this.messages.push(nmessage);\n } else {\n this.messages[index].updateData(w.properties);\n }\n }\n this.library.garbageColleting(`${this.name}.warning`);\n\n for (let m = 0; m < this.messages.length; m++) {\n const msg = this.messages[m];\n //const formatedData = await msg.updateFormatedData();\n if (msg.rawWarning.MSGTYPE == 'Update') {\n for (let m2 = 0; m2 < this.messages.length; m2++) {\n const oldmsg = this.messages[m2];\n if (msg === oldmsg) continue;\n if (oldmsg.newMessage) continue;\n //if (oldmsg.notDeleted) continue;\n if (oldmsg.formatedData === undefined) continue; // \u00FCberfl\u00FCssig?\n if (oldmsg.rawWarning.EC_II == msg.rawWarning.EC_II) {\n msg.silentUpdate();\n this.log.debug('Remove a warning from db.(Update)');\n this.messages[m2].delete();\n this.messages.splice(Number(m2--), 1);\n m--;\n break;\n }\n }\n }\n }\n /**\n * Hier war ich dran\n */\n //this.library.writeJson('', '', this.rawData, this.getStatesObjectsWarnings('raw').false);\n await this.finishUpdateData();\n }\n}\n\nexport class ZAMGProvider extends BaseProvider {\n constructor(adapter: WeatherWarnings, options: CoordinateProviderOptionsType) {\n super(adapter, { ...options, service: 'zamgService' }, `zamg`);\n this.warncellId = options.warncellId;\n this.setUrl('', [this.warncellId[0], this.warncellId[1], options.language]);\n }\n\n async updateData(): Promise<void> {\n const result = (await this.getDataFromProvider()) as providerDef.dataImportZamgType;\n if (!result) return;\n\n if (!result.properties || !result.properties.warnings) {\n this.log.debug(`Got 0 warnings from server`);\n return;\n } else this.log.debug(`Got ${result.properties.warnings.length} warnings from server`);\n result.properties.warnings.sort((a, b) => {\n return Number(a.properties.rawinfo.start) - Number(b.properties.rawinfo.start);\n });\n this.messages.forEach((a) => (a.notDeleted = false));\n for (let a = 0; a < this.adapter.numOfRawWarnings && a < result.properties.warnings.length; a++) {\n // special case for zamg\n result.properties.warnings[a].properties.location = result.properties.location.properties.name;\n result.properties.warnings[a].properties.nachrichtentyp = result.properties.warnings[a].type;\n await super.updateData(result.properties.warnings[a].properties, a);\n\n const index = this.messages.findIndex(\n (m) => m.rawWarning.warnid == result.properties.warnings[a].properties.warnid,\n );\n if (index == -1) {\n const nmessage = new MessagesClass(\n this.adapter,\n 'zamg-msg',\n this,\n result.properties.warnings[a].properties,\n this.providerController,\n );\n await nmessage.updateFormated();\n if (nmessage && nmessage.filter(this.filter)) this.messages.push(nmessage);\n } else {\n this.messages[index].updateData(result.properties.warnings[a].properties);\n }\n }\n this.library.garbageColleting(`${this.name}.warning`);\n await this.finishUpdateData();\n }\n}\n\nexport class UWZProvider extends BaseProvider {\n constructor(adapter: WeatherWarnings, options: StringProviderOptionsType) {\n super(adapter, { ...options, service: 'uwzService' }, `uwz`);\n this.warncellId = options.warncellId.toUpperCase();\n this.setUrl('', [this.warncellId, options.language]);\n }\n async updateData(): Promise<void> {\n const result = (await this.getDataFromProvider()) as providerDef.dataImportUWZType;\n if (!result || !result.results || result.results == null) {\n this.log.warn('Invalid result from uwz server!');\n return;\n }\n result.results.sort((a, b) => {\n if (a && b && a.dtgStart && b.dtgStart) return a.dtgStart - b.dtgStart;\n return 0;\n });\n this.messages.forEach((a) => (a.notDeleted = false));\n for (let a = 0; a < this.adapter.numOfRawWarnings && a < result.results.length; a++) {\n if (result.results[a] == null) continue;\n await super.updateData(result.results[a], a);\n\n const index = this.messages.findIndex((m) => m.rawWarning.payload.id == result.results[a].payload.id);\n if (index == -1) {\n const nmessage = new MessagesClass(\n this.adapter,\n 'uwz-msg',\n this,\n result.results[a],\n this.providerController,\n );\n await nmessage.updateFormated();\n if (nmessage && nmessage.filter(this.filter)) this.messages.push(nmessage);\n } else {\n this.messages[index].updateData(result.results[a]);\n }\n }\n\n this.log.debug(`Got ${result.results.length} warnings from server`);\n\n this.library.garbageColleting(`${this.name}.warning`);\n await this.finishUpdateData();\n }\n}\nexport class NINAProvider extends BaseProvider {\n constructor(adapter: WeatherWarnings, options: CoordinateProviderOptionsType) {\n super(adapter, { ...options, service: 'ninaService' }, `nina`);\n }\n}\nexport class METROProvider extends BaseProvider {\n constructor(adapter: WeatherWarnings, options: CoordinateProviderOptionsType) {\n super(adapter, { ...options, service: 'metroService' }, `nina`);\n }\n}\n\nexport class ProviderController extends BaseClass {\n providers: providerDef.ProviderClassType[] = [];\n refreshTimeRef: any = null;\n alertTimeoutRef: any = null;\n connection = true;\n name = 'provider';\n refreshTime: number = 300000;\n library: Library;\n notificationServices: NotificationClass.NotificationClass[] = [];\n\n pushOn = false;\n\n constructor(adapter: WeatherWarnings) {\n super(adapter, 'provider');\n this.library = this.adapter.library;\n\n this.doEndOfUpdater.bind(this);\n }\n async init(): Promise<void> {\n this.pushOn = !this.adapter.config.notPushAtStart; // ups wrong variable name PushAtStart\n this.refreshTime = this.adapter.config.refreshTime * 60000;\n }\n /**\n * Create a notificationService\n * @param optionList specialcase: adapter == '' then it is createn anyway\n * @returns\n */\n async createNotificationService(optionList: NotificationType.OptionsType): Promise<void> {\n for (const a in optionList) {\n const options = optionList[a as keyof NotificationType.OptionsType];\n if (options === undefined) return;\n const objs =\n options.adapter != ''\n ? await this.adapter.getObjectViewAsync('system', 'instance', {\n startkey: `system.adapter.${options.adapter}`,\n endkey: `system.adapter.${options.adapter}`,\n })\n : null;\n if (!options.useadapter || (objs && objs.rows && objs.rows.length > 0)) {\n const noti = new NotificationClass.NotificationClass(this.adapter, options);\n this.notificationServices.push(noti);\n await noti.init();\n } else {\n this.log.error(`Configuration: ${options.name} is active, but dont find ${options.adapter} adapter!`);\n if (this.adapter && this.adapter.stop) this.adapter.stop();\n else {\n throw new Error(\n `Configuration: ${options.name} is active, but dont find ${options.adapter} adapter!`,\n );\n }\n }\n }\n }\n\n createProviderIfNotExist(options: ProviderOptionsType): providerDef.ProviderClassType {\n const index = this.providers.findIndex(\n (p) =>\n p &&\n ((typeof p.warncellId == 'string' && p.warncellIdString == options.warncellId) ||\n (typeof options.warncellId == 'object' && options.warncellId.join(DIV) == p.warncellIdString)) &&\n p.getService() == options.service,\n );\n if (index == -1) {\n let p: providerDef.ProviderClassType;\n switch (options.service) {\n case 'dwdService':\n if (Array.isArray(options.warncellId)) {\n throw new Error('Error 122 warncellId is a Array');\n }\n p = new DWDProvider(this.adapter, {\n ...options,\n warncellId: options.warncellId,\n providerController: this,\n });\n break;\n case 'uwzService':\n if (Array.isArray(options.warncellId)) {\n throw new Error('Error 123 warncellId is a Array');\n }\n p = new UWZProvider(this.adapter, {\n ...options,\n warncellId: options.warncellId,\n providerController: this,\n });\n break;\n case 'zamgService':\n if (!Array.isArray(options.warncellId)) {\n throw new Error('Error 124 warncellId is not an Array');\n }\n p = new ZAMGProvider(this.adapter, {\n ...options,\n warncellId: options.warncellId,\n providerController: this,\n });\n break;\n case 'ninaService':\n if (!Array.isArray(options.warncellId)) {\n throw new Error('Error 125 warncellId is not an Array');\n }\n p = new NINAProvider(this.adapter, {\n ...options,\n warncellId: options.warncellId,\n providerController: this,\n language: this.adapter.config.dwdLanguage,\n });\n break;\n default:\n throw new Error('Error 126 service is not defined');\n //todo add metroServicce\n }\n if (p) this.providers.push(p);\n return p;\n } else {\n this.log.error('Attempt to create an existing provider.');\n return this.providers[index];\n }\n }\n\n delete(): void {\n super.delete();\n for (const p of this.providers) {\n if (p) p.delete();\n }\n this.providers = [];\n if (this.refreshTimeRef) this.adapter.clearTimeout(this.refreshTimeRef);\n if (this.alertTimeoutRef) this.adapter.clearTimeout(this.alertTimeoutRef);\n }\n\n updateEndless(that: ProviderController): void {\n //that.adapter.config.useTestWarnings = !that.adapter.config.useTestWarnings;\n that.connection = false;\n if (that.refreshTimeRef) that.adapter.clearTimeout(that.refreshTimeRef);\n if (that.providers.length == 0) {\n that.setConnected(false);\n return;\n }\n updater(that);\n async function updater(self: any, index: number = 0): Promise<void> {\n const that = self; //as ProviderController;\n if (that.unload) return;\n if (index < that.providers.length) {\n if (that.providers[index]) await that.providers[index].updateData();\n index++;\n that.refreshTimeRef = that.adapter.setTimeout(updater, 500, that, index);\n } else {\n await that.doEndOfUpdater();\n that.refreshTimeRef = that.adapter.setTimeout(that.updateEndless, that.refreshTime || 600000, that);\n }\n }\n }\n updateAlertEndless(that: any): void {\n if (that.unload) return;\n\n that.checkAlerts();\n /** update every minute after 1.333 seconds. Avoid the full minute, full second and half second :) */\n const timeout = 61333 - (Date.now() % 60000);\n that.alertTimeoutRef = that.adapter.setTimeout(that.updateAlertEndless, timeout, that);\n }\n\n checkAlerts(): void {\n for (const p in this.providers) {\n this.providers[p].getAlertsAndWrite();\n }\n }\n\n async doEndOfUpdater(): Promise<void> {\n this.setConnected();\n await this.updateMesssages();\n let activMessages = 0;\n for (const a in this.providers) {\n let am = 0;\n for (const b in this.providers[a].messages) {\n if (this.providers[a].messages[b].notDeleted) {\n am++;\n }\n }\n this.adapter.library.writedp(\n `${this.providers[a].name}.activeWarnings`,\n am,\n definitionen.genericStateObjects.activeWarnings,\n );\n activMessages += am;\n }\n\n if (this.pushOn) {\n for (const push of this.notificationServices) {\n await push.sendMessage(this.providers, ['new', 'remove', 'all']);\n }\n }\n this.pushOn = true;\n await this.adapter.library.writedp(\n `${this.name}.activeWarnings`,\n activMessages,\n definitionen.genericStateObjects.activeWarnings,\n );\n this.providers.forEach((a) => a.clearMessages());\n\n this.log.debug(`We have ${activMessages} active messages.`);\n }\n providersExist(): boolean {\n return this.providers.length > 0;\n }\n async setConnected(status: boolean = this.connection): Promise<void> {\n const objDef = await this.adapter.library.getObjectDefFromJson(\n `info.connection`,\n definitionen.genericStateObjects,\n );\n this.adapter.library.writedp(`info.connection`, !!status, objDef);\n }\n setAllowedDirs(allowedDirs: any): void {\n const dirs = [];\n for (const a in allowedDirs) {\n if (!allowedDirs[a].dpWarning)\n dirs.push(`^provider\\\\.${a.replace(`Service`, ``)}\\\\.[a-zA-Z0-9#_]+\\\\.warning`);\n if (!allowedDirs[a].dpMessage)\n dirs.push(`^provider\\\\.${a.replace(`Service`, ``)}\\\\.[a-zA-Z0-9#_]+\\\\.alerts`);\n /*if (!allowedDirs[a].dpFormated)\n dirs.push(`^provider\\\\.${a.replace(`Service`, ``)}\\\\.[a-zA-Z0-9#_]+\\\\.messages`);*/\n if (!allowedDirs[a].dpAlerts)\n dirs.push(`^provider\\\\.${a.replace(`Service`, ``)}\\\\.[a-zA-Z0-9#_]+\\\\.formatedKeys`);\n\n this.library.setAllowedDirs(dirs);\n }\n }\n async updateMesssages(): Promise<void> {\n for (const a in this.providers) {\n for (const b in this.providers[a].messages) {\n await this.providers[a].messages[b].updateFormatedData(true);\n await this.providers[a].messages[b].writeFormatedKeys(Number(b));\n }\n }\n }\n}\n"],
|
|
4
|
+
"sourcesContent": ["// Provider\n\nimport axios from 'axios';\nimport WeatherWarnings from '../main';\nimport * as definitionen from './def/definitionen';\nimport { BaseClass, Library } from './library';\nimport * as providerDef from './def/provider-def';\nimport { MessagesClass } from './messages';\nimport * as NotificationClass from './notification';\nimport { getTestData } from './test-warnings';\nimport * as NotificationType from './def/notificationService-def';\nimport * as messagesDef from './def/messages-def';\nexport const DIV = '-';\ntype ProviderOptionsTypeInternal = {\n service: providerDef.providerServices;\n warncellId: string | [string, string];\n} & (StringProviderOptionsType | CoordinateProviderOptionsType);\n\ntype ProviderOptionsType = ProviderOptionsTypeInternal;\n\ntype StringProviderOptionsType = BaseProviderOptionsType & {\n warncellId: string;\n};\ntype CoordinateProviderOptionsType = BaseProviderOptionsType & {\n warncellId: [string, string];\n};\ntype BaseProviderOptionsType = {\n providerController: ProviderController;\n language: string;\n filter: providerDef.messageFilterType;\n customName: string;\n};\n\n/** Base class for every provider */\nexport class BaseProvider extends BaseClass {\n service: providerDef.providerServices;\n url: string = '';\n warncellId: string | Array<string> = '';\n rawData: providerDef.DataImportType = null;\n library: Library;\n messages: MessagesClass[] = [];\n providerController: ProviderController;\n filter: providerDef.messageFilterType;\n customName: string = '';\n warncellIdString: string;\n constructor(adapter: WeatherWarnings, options: ProviderOptionsTypeInternal, name: string) {\n let warncell = typeof options.warncellId == 'string' ? options.warncellId : options.warncellId.join(DIV);\n warncell = warncell.replaceAll('.', '_');\n super(adapter, 'provider.' + `${name}.${warncell}`);\n\n this.warncellIdString = warncell;\n this.service = options.service;\n this.library = this.adapter.library;\n this.providerController = options.providerController;\n this.setService(options.service);\n this.log.setLogPrefix(`${name}-${options.warncellId}`);\n this.filter = options.filter;\n this.customName = options.customName;\n\n const temp = this.library.cloneGenericObject(\n //@ts-expect-error ist vorhanden\n definitionen.statesObjectsWarnings[this.service]._channel,\n ) as ioBroker.DeviceObject;\n temp.common.name = name.toUpperCase();\n this.library.writedp('provider.' + name, undefined, temp);\n\n this.init();\n }\n async init(): Promise<void> {\n const temp = this.library.cloneGenericObject(definitionen.defaultChannel) as ioBroker.ChannelObject;\n temp.common.name = this.customName;\n await this.library.writedp(`${this.name}`, undefined, temp);\n await this.adapter.extendObjectAsync(`${this.name}`, {\n common: { name: this.customName },\n });\n\n await this.library.writedp(`${this.name}.info`, undefined, definitionen.genericStateObjects.info._channel);\n await this.library.writedp(\n `${this.name}.formatedKeys`,\n undefined,\n definitionen.genericStateObjects.formatedKeysDevice,\n );\n\n this.setConnected(false);\n }\n\n delete(): void {\n this.rawData = null;\n this.setConnected(false);\n }\n\n getService(): providerDef.providerServices {\n if (!this.service) {\n throw new Error(`baseProvider.getService service is ${this.service == '' ? `''` : `undefined`}`);\n }\n return this.service;\n }\n /*getStatesObjectsWarnings(key: string): { [key: string]: ioBroker.Object } {\n return statesObjectsWarnings[this.service][key];\n }*/\n\n setService(service: providerDef.providerServices): boolean {\n if (\n !service ||\n ['dwdService', 'zamgService', 'uwzService', 'ninaService', 'metroService'].indexOf(service) === -1\n ) {\n throw new Error(`baseProvider.setService service ${service} is unknowed!`);\n }\n this.service = service;\n return true;\n }\n\n /**\n * @param url if '' url from PROVIDER_OPTIONS is taken\n * @param keys [string] values to replace - placeholder # # #+ +# #++ ++# and so on\n */\n setUrl(url: string = '', keys: string[]): string {\n if (!url) {\n this.url = definitionen.PROVIDER_OPTIONS[this.service]['url'];\n } else {\n this.url = url;\n }\n let placeholder = '# #';\n for (const k in keys) {\n this.url = this.url.replace(placeholder, keys[k]);\n placeholder = placeholder.slice(0, 1) + '+' + placeholder.slice(1, -1) + '+' + placeholder.slice(-1);\n }\n return this.url;\n }\n async setConnected(status: boolean): Promise<void> {\n this.providerController.connection = this.providerController.connection || status;\n const objDef = await this.library.getObjectDefFromJson(`info.connection`, definitionen.genericStateObjects);\n this.library.writedp(`${this.name}.info.connection`, !!status, objDef);\n }\n async update(): Promise<void> {\n // tue nichts\n }\n static async setAlerts(\n that: BaseProvider | ProviderController,\n prefix: string,\n data: { [key: string]: string | number | boolean },\n ): Promise<void> {\n await that.library.writeFromJson(\n prefix + '.alerts',\n 'allService.alerts',\n definitionen.statesObjectsWarnings,\n data,\n false,\n );\n }\n async getAlertsAndWrite(): Promise<messagesDef.genericWarntypeAlertJsonType> {\n const reply: any = {};\n for (const t in messagesDef.genericWarntyp) {\n reply[messagesDef.genericWarntyp[Number(t) as keyof messagesDef.genericWarntypeType].id] = {\n level: -1,\n start: 1,\n end: 1,\n headline: '',\n active: false,\n type: -1,\n };\n }\n\n if (!reply) throw new Error('error(234) reply not definied');\n for (const a in this.messages) {\n const m = this.messages[a];\n if (!m) continue;\n const name = messagesDef.genericWarntyp[m.genericType].id;\n if (reply[name] === undefined) continue;\n if (m.endtime < Date.now()) continue;\n\n if (m.starttime < Date.now() && reply[name].level < m.level) {\n reply[name] = {\n level: m.level,\n start: m.starttime,\n end: m.endtime,\n headline: m.formatedData !== undefined ? String(m.formatedData.headline) : '',\n active: m.starttime <= Date.now() && m.endtime >= Date.now(),\n type: -1,\n };\n }\n }\n await BaseProvider.setAlerts(this, this.name, reply);\n return reply;\n }\n // General function that retrieves data\n async getDataFromProvider(): Promise<providerDef.DataImportType> {\n if (!this.url || !this.warncellId) {\n this.log.debug(\n // eslint-disable-next-line prettier/prettier\n `Warn (31) this.url: ${this.url} this.warncellid: ${this.warncellId} this.service: ${this.getService()}`,\n );\n }\n try {\n if (this.unload) {\n return;\n }\n\n // show text mode in Info states\n const objDef = await this.library.getObjectDefFromJson(`info.testMode`, definitionen.genericStateObjects);\n this.library.writedp(`${this.name}.info.testMode`, this.adapter.config.useTestWarnings, objDef);\n if (this.adapter.config.useTestWarnings) {\n return this.library.cloneGenericObject(\n getTestData(this.service, this.adapter) as object,\n ) as providerDef.DataImportType;\n } else {\n const data = await axios.get(this.url);\n if (data.status == 200) {\n await this.setConnected(true);\n\n const result = typeof data.data == 'object' ? data.data : JSON.parse(data.data);\n\n this.library.writedp(\n `${this.name}.warning.warning_json`,\n JSON.stringify(result),\n definitionen.genericStateObjects.warnings_json,\n );\n if (this.adapter.config.useJsonHistory) {\n const dp = `${this.name}.warning.jsonHistory`;\n const state = this.library.readdp(dp);\n let history: object[] = [];\n if (state && state.val && typeof state.val == 'string') history = JSON.parse(state.val);\n history.unshift(result);\n this.library.writedp(dp, JSON.stringify(history), definitionen.genericStateObjects.jsonHistory);\n }\n this.library.writedp(\n `${this.name}.lastUpdate`,\n Date.now(),\n definitionen.genericStateObjects.lastUpdate,\n );\n return result;\n } else {\n this.log.warn('Warn(23) ' + data.statusText);\n }\n }\n } catch (error) {\n if (axios.isAxiosError(error)) {\n this.log.warn(`Warn(21) axios error for ${this.getService()} url: ${this.url}`);\n } else {\n this.log.error(`Error(22) no data for ${this.getService()} from ${this.url} with Error ${error}`);\n }\n }\n await this.setConnected(false);\n return null;\n }\n //** Called at the end of updateData() from every childclass */\n async finishUpdateData(): Promise<void> {\n for (let m = 0; m < this.messages.length; m++) {\n this.messages.sort((a, b) => {\n return a.starttime - b.starttime;\n });\n await this.messages[m].writeFormatedKeys(m);\n\n await this.messages[m].formatMessages();\n }\n this.library.garbageColleting(`${this.name}.formatedKeys`, (this.providerController.refreshTime || 600000) / 2);\n }\n /**\n * generic write function for flat Objects\n * @param prefix {string} prefix in datatree\n * @param data json object flat\n * @returns void\n */\n async dumpData(prefix: string, data: providerDef.DataImportType): Promise<void> {\n if (!prefix || !data || typeof data !== 'object') return;\n for (const key in data) {\n //@ts-expect-error write code for next line\n this.adapter.library.writeState(`${prefix}`, key, data[key]);\n }\n }\n async updateData(data: any, counter: number): Promise<void> {\n if (!data) return;\n this.library.writedp(`${this.name}.warning`, undefined, definitionen.genericStateObjects.warningDevice);\n await this.library.writeFromJson(\n `${this.name}.warning.${('00' + counter.toString()).slice(-2)}`,\n `${this.service}.raw`,\n definitionen.statesObjectsWarnings,\n data,\n );\n }\n /** Remove marked Messages. */\n async clearMessages(): Promise<void> {\n for (let m = 0; m < this.messages.length; m++) {\n this.messages[m].newMessage = false;\n if (this.messages[m].notDeleted == false) {\n this.log.debug('Remove a warning from db.');\n this.messages.splice(Number(m--), 1);\n }\n }\n }\n}\n\n// nuzte klassen um Daten zu parsen\nexport class DWDProvider extends BaseProvider {\n constructor(adapter: WeatherWarnings, options: StringProviderOptionsType) {\n super(adapter, { ...options, service: 'dwdService' }, `dwd`);\n this.warncellId = options.warncellId;\n const url =\n definitionen.PROVIDER_OPTIONS.dwdService.url_base +\n (this.warncellId.startsWith('9') || this.warncellId.startsWith('10')\n ? definitionen.PROVIDER_OPTIONS.dwdService.url_appendix_land\n : definitionen.PROVIDER_OPTIONS.dwdService.url_appendix_town) +\n definitionen.PROVIDER_OPTIONS.dwdService.url_language;\n this.url = this.setUrl(url, [this.warncellId, options.language]);\n }\n async updateData(): Promise<void> {\n const result = (await this.getDataFromProvider()) as providerDef.dataImportDwdType;\n if (!result) return;\n\n this.log.debug(`Got ${result.features.length} warnings from server`);\n result.features.sort((a, b) => {\n return new Date(a.properties.ONSET).getTime() - new Date(b.properties.ONSET).getTime();\n });\n this.messages.forEach((a) => (a.notDeleted = false));\n for (let a = 0; a < this.adapter.numOfRawWarnings && a < result.features.length; a++) {\n const w = result.features[a];\n if (w.properties.STATUS == 'Test') continue;\n await super.updateData(w.properties, a);\n\n /**\n * filter messages dwd\n */\n const index = this.messages.findIndex((m) => m.rawWarning.IDENTIFIER == w.properties.IDENTIFIER);\n\n if (index == -1) {\n const nmessage = new MessagesClass(\n this.adapter,\n 'dwd-msg',\n this,\n w.properties,\n this.providerController,\n );\n await nmessage.updateFormated();\n\n if (nmessage && nmessage.filter(this.filter)) this.messages.push(nmessage);\n } else {\n this.messages[index].updateData(w.properties);\n }\n }\n this.library.garbageColleting(`${this.name}.warning`);\n\n for (let m = 0; m < this.messages.length; m++) {\n const msg = this.messages[m];\n //const formatedData = await msg.updateFormatedData();\n if (msg.rawWarning.MSGTYPE == 'Update') {\n for (let m2 = 0; m2 < this.messages.length; m2++) {\n const oldmsg = this.messages[m2];\n if (msg === oldmsg) continue;\n if (oldmsg.newMessage) continue;\n //if (oldmsg.notDeleted) continue;\n if (oldmsg.formatedData === undefined) continue; // \u00FCberfl\u00FCssig?\n if (oldmsg.rawWarning.EC_II == msg.rawWarning.EC_II) {\n msg.silentUpdate();\n this.log.debug('Remove a warning from db.(Update)');\n this.messages[m2].delete();\n this.messages.splice(Number(m2--), 1);\n m--;\n break;\n }\n }\n }\n }\n /**\n * Hier war ich dran\n */\n //this.library.writeJson('', '', this.rawData, this.getStatesObjectsWarnings('raw').false);\n await this.finishUpdateData();\n }\n}\n\nexport class ZAMGProvider extends BaseProvider {\n constructor(adapter: WeatherWarnings, options: CoordinateProviderOptionsType) {\n super(adapter, { ...options, service: 'zamgService' }, `zamg`);\n this.warncellId = options.warncellId;\n this.setUrl('', [this.warncellId[0], this.warncellId[1], options.language]);\n }\n\n async updateData(): Promise<void> {\n const result = (await this.getDataFromProvider()) as providerDef.dataImportZamgType;\n if (!result) return;\n\n if (!result.properties || !result.properties.warnings) {\n this.log.debug(`Got 0 warnings from server`);\n return;\n } else this.log.debug(`Got ${result.properties.warnings.length} warnings from server`);\n result.properties.warnings.sort((a, b) => {\n return Number(a.properties.rawinfo.start) - Number(b.properties.rawinfo.start);\n });\n this.messages.forEach((a) => (a.notDeleted = false));\n for (let a = 0; a < this.adapter.numOfRawWarnings && a < result.properties.warnings.length; a++) {\n // special case for zamg\n result.properties.warnings[a].properties.location = result.properties.location.properties.name;\n result.properties.warnings[a].properties.nachrichtentyp = result.properties.warnings[a].type;\n await super.updateData(result.properties.warnings[a].properties, a);\n\n const index = this.messages.findIndex(\n (m) => m.rawWarning.warnid == result.properties.warnings[a].properties.warnid,\n );\n if (index == -1) {\n const nmessage = new MessagesClass(\n this.adapter,\n 'zamg-msg',\n this,\n result.properties.warnings[a].properties,\n this.providerController,\n );\n await nmessage.updateFormated();\n if (nmessage && nmessage.filter(this.filter)) this.messages.push(nmessage);\n } else {\n this.messages[index].updateData(result.properties.warnings[a].properties);\n }\n }\n this.library.garbageColleting(`${this.name}.warning`);\n await this.finishUpdateData();\n }\n}\n\nexport class UWZProvider extends BaseProvider {\n constructor(adapter: WeatherWarnings, options: StringProviderOptionsType) {\n super(adapter, { ...options, service: 'uwzService' }, `uwz`);\n this.warncellId = options.warncellId.toUpperCase();\n this.setUrl('', [this.warncellId, options.language]);\n }\n async updateData(): Promise<void> {\n const result = (await this.getDataFromProvider()) as providerDef.dataImportUWZType;\n if (!result || !result.results || result.results == null) {\n this.log.warn('Invalid result from uwz server!');\n return;\n }\n result.results.sort((a, b) => {\n if (a && b && a.dtgStart && b.dtgStart) return a.dtgStart - b.dtgStart;\n return 0;\n });\n this.messages.forEach((a) => (a.notDeleted = false));\n for (let a = 0; a < this.adapter.numOfRawWarnings && a < result.results.length; a++) {\n if (result.results[a] == null) continue;\n await super.updateData(result.results[a], a);\n\n const index = this.messages.findIndex((m) => m.rawWarning.payload.id == result.results[a].payload.id);\n if (index == -1) {\n const nmessage = new MessagesClass(\n this.adapter,\n 'uwz-msg',\n this,\n result.results[a],\n this.providerController,\n );\n await nmessage.updateFormated();\n if (nmessage && nmessage.filter(this.filter)) this.messages.push(nmessage);\n } else {\n this.messages[index].updateData(result.results[a]);\n }\n }\n\n this.log.debug(`Got ${result.results.length} warnings from server`);\n\n this.library.garbageColleting(`${this.name}.warning`);\n await this.finishUpdateData();\n }\n}\nexport class NINAProvider extends BaseProvider {\n constructor(adapter: WeatherWarnings, options: CoordinateProviderOptionsType) {\n super(adapter, { ...options, service: 'ninaService' }, `nina`);\n }\n}\nexport class METROProvider extends BaseProvider {\n constructor(adapter: WeatherWarnings, options: CoordinateProviderOptionsType) {\n super(adapter, { ...options, service: 'metroService' }, `nina`);\n }\n}\n\nexport class ProviderController extends BaseClass {\n providers: providerDef.ProviderClassType[] = [];\n refreshTimeRef: any = null;\n alertTimeoutRef: any = null;\n connection = true;\n name = 'provider';\n refreshTime: number = 300000;\n library: Library;\n notificationServices: NotificationClass.NotificationClass[] = [];\n\n pushOn = false;\n\n constructor(adapter: WeatherWarnings) {\n super(adapter, 'provider');\n this.library = this.adapter.library;\n\n this.doEndOfUpdater.bind(this);\n }\n async init(): Promise<void> {\n this.pushOn = !this.adapter.config.notPushAtStart; // ups wrong variable name PushAtStart\n this.refreshTime = this.adapter.config.refreshTime * 60000;\n }\n /**\n * Create a notificationService\n * @param optionList specialcase: adapter == '' then it is createn anyway\n * @returns\n */\n async createNotificationService(optionList: NotificationType.OptionsType): Promise<void> {\n for (const a in optionList) {\n const options = optionList[a as keyof NotificationType.OptionsType];\n if (options === undefined) return;\n const objs =\n options.adapter != ''\n ? await this.adapter.getObjectViewAsync('system', 'instance', {\n startkey: `system.adapter.${options.adapter}`,\n endkey: `system.adapter.${options.adapter}`,\n })\n : null;\n if (!options.useadapter || (objs && objs.rows && objs.rows.length > 0)) {\n const noti = new NotificationClass.NotificationClass(this.adapter, options);\n this.notificationServices.push(noti);\n await noti.init();\n } else {\n this.log.error(`Configuration: ${options.name} is active, but dont find ${options.adapter} adapter!`);\n if (this.adapter && this.adapter.stop) this.adapter.stop();\n else {\n throw new Error(\n `Configuration: ${options.name} is active, but dont find ${options.adapter} adapter!`,\n );\n }\n }\n }\n }\n\n createProviderIfNotExist(options: ProviderOptionsType): providerDef.ProviderClassType {\n const index = this.providers.findIndex(\n (p) =>\n p &&\n ((typeof p.warncellId == 'string' && p.warncellIdString == options.warncellId) ||\n (typeof options.warncellId == 'object' && options.warncellId.join(DIV) == p.warncellIdString)) &&\n p.getService() == options.service,\n );\n if (index == -1) {\n let p: providerDef.ProviderClassType;\n switch (options.service) {\n case 'dwdService':\n if (Array.isArray(options.warncellId)) {\n throw new Error('Error 122 warncellId is a Array');\n }\n p = new DWDProvider(this.adapter, {\n ...options,\n warncellId: options.warncellId,\n providerController: this,\n });\n break;\n case 'uwzService':\n if (Array.isArray(options.warncellId)) {\n throw new Error('Error 123 warncellId is a Array');\n }\n p = new UWZProvider(this.adapter, {\n ...options,\n warncellId: options.warncellId,\n providerController: this,\n });\n break;\n case 'zamgService':\n if (!Array.isArray(options.warncellId)) {\n throw new Error('Error 124 warncellId is not an Array');\n }\n p = new ZAMGProvider(this.adapter, {\n ...options,\n warncellId: options.warncellId,\n providerController: this,\n });\n break;\n case 'ninaService':\n if (!Array.isArray(options.warncellId)) {\n throw new Error('Error 125 warncellId is not an Array');\n }\n p = new NINAProvider(this.adapter, {\n ...options,\n warncellId: options.warncellId,\n providerController: this,\n language: this.adapter.config.dwdLanguage,\n });\n break;\n default:\n throw new Error('Error 126 service is not defined');\n //todo add metroServicce\n }\n if (p) this.providers.push(p);\n return p;\n } else {\n this.log.error('Attempt to create an existing provider.');\n return this.providers[index];\n }\n }\n\n delete(): void {\n super.delete();\n for (const p of this.providers) {\n if (p) p.delete();\n }\n this.providers = [];\n if (this.refreshTimeRef) this.adapter.clearTimeout(this.refreshTimeRef);\n if (this.alertTimeoutRef) this.adapter.clearTimeout(this.alertTimeoutRef);\n }\n\n updateEndless(that: ProviderController): void {\n //that.adapter.config.useTestWarnings = !that.adapter.config.useTestWarnings;\n that.connection = false;\n if (that.refreshTimeRef) that.adapter.clearTimeout(that.refreshTimeRef);\n if (that.providers.length == 0) {\n that.setConnected(false);\n return;\n }\n updater(that);\n async function updater(self: any, index: number = 0): Promise<void> {\n const that = self; //as ProviderController;\n if (that.unload) return;\n if (index < that.providers.length) {\n if (that.providers[index]) await that.providers[index].updateData();\n index++;\n that.refreshTimeRef = that.adapter.setTimeout(updater, 500, that, index);\n } else {\n await that.doEndOfUpdater();\n that.refreshTimeRef = that.adapter.setTimeout(that.updateEndless, that.refreshTime || 600000, that);\n }\n }\n }\n updateAlertEndless(that: any): void {\n if (that.unload) return;\n\n that.checkAlerts();\n /** update every minute after 1.333 seconds. Avoid the full minute, full second and half second :) */\n const timeout = 61333 - (Date.now() % 60000);\n that.alertTimeoutRef = that.adapter.setTimeout(that.updateAlertEndless, timeout, that);\n }\n\n checkAlerts(): void {\n for (const p in this.providers) {\n this.providers[p].getAlertsAndWrite();\n }\n }\n\n async doEndOfUpdater(): Promise<void> {\n this.setConnected();\n await this.updateMesssages();\n let activMessages = 0;\n for (const a in this.providers) {\n let am = 0;\n for (const b in this.providers[a].messages) {\n if (this.providers[a].messages[b].notDeleted) {\n am++;\n }\n }\n this.adapter.library.writedp(\n `${this.providers[a].name}.activeWarnings`,\n am,\n definitionen.genericStateObjects.activeWarnings,\n );\n activMessages += am;\n }\n\n if (this.pushOn) {\n for (const push of this.notificationServices) {\n await push.sendMessage(this.providers, ['new', 'remove', 'all']);\n }\n }\n this.pushOn = true;\n await this.adapter.library.writedp(\n `${this.name}.activeWarnings`,\n activMessages,\n definitionen.genericStateObjects.activeWarnings,\n );\n this.providers.forEach((a) => a.clearMessages());\n\n this.log.debug(`We have ${activMessages} active messages.`);\n }\n providersExist(): boolean {\n return this.providers.length > 0;\n }\n async setConnected(status: boolean = this.connection): Promise<void> {\n const objDef = await this.adapter.library.getObjectDefFromJson(\n `info.connection`,\n definitionen.genericStateObjects,\n );\n this.adapter.library.writedp(`info.connection`, !!status, objDef);\n }\n setAllowedDirs(allowedDirs: any): void {\n const dirs = [];\n for (const a in allowedDirs) {\n if (!allowedDirs[a].dpWarning)\n dirs.push(`^provider\\\\.${a.replace(`Service`, ``)}\\\\.[a-zA-Z0-9#_]+\\\\.warning`);\n if (!allowedDirs[a].dpMessage)\n dirs.push(`^provider\\\\.${a.replace(`Service`, ``)}\\\\.[a-zA-Z0-9#_]+\\\\.alerts`);\n /*if (!allowedDirs[a].dpFormated)\n dirs.push(`^provider\\\\.${a.replace(`Service`, ``)}\\\\.[a-zA-Z0-9#_]+\\\\.messages`);*/\n if (!allowedDirs[a].dpAlerts)\n dirs.push(`^provider\\\\.${a.replace(`Service`, ``)}\\\\.[a-zA-Z0-9#_]+\\\\.formatedKeys`);\n\n this.library.setAllowedDirs(dirs);\n }\n }\n async updateMesssages(): Promise<void> {\n for (const a in this.providers) {\n for (const b in this.providers[a].messages) {\n await this.providers[a].messages[b].updateFormatedData(true);\n await this.providers[a].messages[b].writeFormatedKeys(Number(b));\n }\n }\n }\n}\n"],
|
|
5
5
|
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,mBAAkB;AAElB,mBAA8B;AAC9B,qBAAmC;AAEnC,sBAA8B;AAC9B,wBAAmC;AACnC,2BAA4B;AAE5B,kBAA6B;AACtB,MAAM,MAAM;AAsBZ,MAAM,qBAAqB,yBAAU;AAAA,EACxC;AAAA,EACA,MAAc;AAAA,EACd,aAAqC;AAAA,EACrC,UAAsC;AAAA,EACtC;AAAA,EACA,WAA4B,CAAC;AAAA,EAC7B;AAAA,EACA;AAAA,EACA,aAAqB;AAAA,EACrB;AAAA,EACA,YAAY,SAA0B,SAAsC,MAAc;AACtF,QAAI,WAAW,OAAO,QAAQ,cAAc,WAAW,QAAQ,aAAa,QAAQ,WAAW,KAAK,GAAG;AACvG,eAAW,SAAS,WAAW,KAAK,GAAG;AACvC,UAAM,SAAS,YAAiB,QAAQ,UAAU;AAElD,SAAK,mBAAmB;AACxB,SAAK,UAAU,QAAQ;AACvB,SAAK,UAAU,KAAK,QAAQ;AAC5B,SAAK,qBAAqB,QAAQ;AAClC,SAAK,WAAW,QAAQ,OAAO;AAC/B,SAAK,IAAI,aAAa,GAAG,QAAQ,QAAQ,YAAY;AACrD,SAAK,SAAS,QAAQ;AACtB,SAAK,aAAa,QAAQ;AAE1B,UAAM,OAAO,KAAK,QAAQ;AAAA,MAEtB,aAAa,sBAAsB,KAAK,SAAS;AAAA,IACrD;AACA,SAAK,OAAO,OAAO,KAAK,YAAY;AACpC,SAAK,QAAQ,QAAQ,cAAc,MAAM,QAAW,IAAI;AAExD,SAAK,KAAK;AAAA,EACd;AAAA,EACA,MAAM,OAAsB;AACxB,UAAM,OAAO,KAAK,QAAQ,mBAAmB,aAAa,cAAc;AACxE,SAAK,OAAO,OAAO,KAAK;AACxB,UAAM,KAAK,QAAQ,QAAQ,GAAG,KAAK,QAAQ,QAAW,IAAI;AAC1D,UAAM,KAAK,QAAQ,kBAAkB,GAAG,KAAK,QAAQ;AAAA,MACjD,QAAQ,EAAE,MAAM,KAAK,WAAW;AAAA,IACpC,CAAC;AAED,UAAM,KAAK,QAAQ,QAAQ,GAAG,KAAK,aAAa,QAAW,aAAa,oBAAoB,KAAK,QAAQ;AACzG,UAAM,KAAK,QAAQ;AAAA,MACf,GAAG,KAAK;AAAA,MACR;AAAA,MACA,aAAa,oBAAoB;AAAA,IACrC;AAEA,SAAK,aAAa,KAAK;AAAA,EAC3B;AAAA,EAEA,SAAe;AACX,SAAK,UAAU;AACf,SAAK,aAAa,KAAK;AAAA,EAC3B;AAAA,EAEA,aAA2C;AACvC,QAAI,CAAC,KAAK,SAAS;AACf,YAAM,IAAI,MAAM,sCAAsC,KAAK,WAAW,KAAK,OAAO,aAAa;AAAA,IACnG;AACA,WAAO,KAAK;AAAA,EAChB;AAAA,EAKA,WAAW,SAAgD;AACvD,QACI,CAAC,WACD,CAAC,cAAc,eAAe,cAAc,eAAe,cAAc,EAAE,QAAQ,OAAO,MAAM,IAClG;AACE,YAAM,IAAI,MAAM,mCAAmC,sBAAsB;AAAA,IAC7E;AACA,SAAK,UAAU;AACf,WAAO;AAAA,EACX;AAAA,EAMA,OAAO,MAAc,IAAI,MAAwB;AAC7C,QAAI,CAAC,KAAK;AACN,WAAK,MAAM,aAAa,iBAAiB,KAAK,SAAS;AAAA,IAC3D,OAAO;AACH,WAAK,MAAM;AAAA,IACf;AACA,QAAI,cAAc;AAClB,eAAW,KAAK,MAAM;AAClB,WAAK,MAAM,KAAK,IAAI,QAAQ,aAAa,KAAK,EAAE;AAChD,oBAAc,YAAY,MAAM,GAAG,CAAC,IAAI,MAAM,YAAY,MAAM,GAAG,EAAE,IAAI,MAAM,YAAY,MAAM,EAAE;AAAA,IACvG;AACA,WAAO,KAAK;AAAA,EAChB;AAAA,EACA,MAAM,aAAa,QAAgC;AAC/C,SAAK,mBAAmB,aAAa,KAAK,mBAAmB,cAAc;AAC3E,UAAM,SAAS,MAAM,KAAK,QAAQ,qBAAqB,mBAAmB,aAAa,mBAAmB;AAC1G,SAAK,QAAQ,QAAQ,GAAG,KAAK,wBAAwB,CAAC,CAAC,QAAQ,MAAM;AAAA,EACzE;AAAA,EACA,MAAM,SAAwB;AAAA,EAE9B;AAAA,EACA,aAAa,UACT,MACA,QACA,MACa;AACb,UAAM,KAAK,QAAQ;AAAA,MACf,SAAS;AAAA,MACT;AAAA,MACA,aAAa;AAAA,MACb;AAAA,MACA;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,MAAM,oBAAuE;AACzE,UAAM,QAAa,CAAC;AACpB,eAAW,KAAK,YAAY,gBAAgB;AACxC,YAAM,YAAY,eAAe,OAAO,CAAC,GAA4C,MAAM;AAAA,QACvF,OAAO;AAAA,QACP,OAAO;AAAA,QACP,KAAK;AAAA,QACL,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,MAAM;AAAA,MACV;AAAA,IACJ;AAEA,QAAI,CAAC;AAAO,YAAM,IAAI,MAAM,+BAA+B;AAC3D,eAAW,KAAK,KAAK,UAAU;AAC3B,YAAM,IAAI,KAAK,SAAS;AACxB,UAAI,CAAC;AAAG;AACR,YAAM,OAAO,YAAY,eAAe,EAAE,aAAa;AACvD,UAAI,MAAM,UAAU;AAAW;AAC/B,UAAI,EAAE,UAAU,KAAK,IAAI;AAAG;AAE5B,UAAI,EAAE,YAAY,KAAK,IAAI,KAAK,MAAM,MAAM,QAAQ,EAAE,OAAO;AACzD,cAAM,QAAQ;AAAA,UACV,OAAO,EAAE;AAAA,UACT,OAAO,EAAE;AAAA,UACT,KAAK,EAAE;AAAA,UACP,UAAU,EAAE,iBAAiB,SAAY,OAAO,EAAE,aAAa,QAAQ,IAAI;AAAA,UAC3E,QAAQ,EAAE,aAAa,KAAK,IAAI,KAAK,EAAE,WAAW,KAAK,IAAI;AAAA,UAC3D,MAAM;AAAA,QACV;AAAA,MACJ;AAAA,IACJ;AACA,UAAM,aAAa,UAAU,MAAM,KAAK,MAAM,KAAK;AACnD,WAAO;AAAA,EACX;AAAA,EAEA,MAAM,sBAA2D;AAC7D,QAAI,CAAC,KAAK,OAAO,CAAC,KAAK,YAAY;AAC/B,WAAK,IAAI;AAAA,QAEL,uBAAuB,KAAK,wBAAwB,KAAK,4BAA4B,KAAK,WAAW;AAAA,MACzG;AAAA,IACJ;AACA,QAAI;AACA,UAAI,KAAK,QAAQ;AACb;AAAA,MACJ;AAGA,YAAM,SAAS,MAAM,KAAK,QAAQ,qBAAqB,iBAAiB,aAAa,mBAAmB;AACxG,WAAK,QAAQ,QAAQ,GAAG,KAAK,sBAAsB,KAAK,QAAQ,OAAO,iBAAiB,MAAM;AAC9F,UAAI,KAAK,QAAQ,OAAO,iBAAiB;AACrC,eAAO,KAAK,QAAQ;AAAA,cAChB,kCAAY,KAAK,SAAS,KAAK,OAAO;AAAA,QAC1C;AAAA,MACJ,OAAO;AACH,cAAM,OAAO,MAAM,aAAAA,QAAM,IAAI,KAAK,GAAG;AACrC,YAAI,KAAK,UAAU,KAAK;AACpB,gBAAM,KAAK,aAAa,IAAI;AAE5B,gBAAM,SAAS,OAAO,KAAK,QAAQ,WAAW,KAAK,OAAO,KAAK,MAAM,KAAK,IAAI;AAE9E,eAAK,QAAQ;AAAA,YACT,GAAG,KAAK;AAAA,YACR,KAAK,UAAU,MAAM;AAAA,YACrB,aAAa,oBAAoB;AAAA,UACrC;AACA,cAAI,KAAK,QAAQ,OAAO,gBAAgB;AACpC,kBAAM,KAAK,GAAG,KAAK;AACnB,kBAAM,QAAQ,KAAK,QAAQ,OAAO,EAAE;AACpC,gBAAI,UAAoB,CAAC;AACzB,gBAAI,SAAS,MAAM,OAAO,OAAO,MAAM,OAAO;AAAU,wBAAU,KAAK,MAAM,MAAM,GAAG;AACtF,oBAAQ,QAAQ,MAAM;AACtB,iBAAK,QAAQ,QAAQ,IAAI,KAAK,UAAU,OAAO,GAAG,aAAa,oBAAoB,WAAW;AAAA,UAClG;AACA,eAAK,QAAQ;AAAA,YACT,GAAG,KAAK;AAAA,YACR,KAAK,IAAI;AAAA,YACT,aAAa,oBAAoB;AAAA,UACrC;AACA,iBAAO;AAAA,QACX,OAAO;AACH,eAAK,IAAI,KAAK,cAAc,KAAK,UAAU;AAAA,QAC/C;AAAA,MACJ;AAAA,IACJ,SAAS,OAAP;AACE,UAAI,aAAAA,QAAM,aAAa,KAAK,GAAG;AAC3B,aAAK,IAAI,KAAK,4BAA4B,KAAK,WAAW,UAAU,KAAK,KAAK;AAAA,MAClF,OAAO;AACH,aAAK,IAAI,MAAM,yBAAyB,KAAK,WAAW,UAAU,KAAK,kBAAkB,OAAO;AAAA,MACpG;AAAA,IACJ;AACA,UAAM,KAAK,aAAa,KAAK;AAC7B,WAAO;AAAA,EACX;AAAA,EAEA,MAAM,mBAAkC;AACpC,aAAS,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,KAAK;AAC3C,WAAK,SAAS,KAAK,CAAC,GAAG,MAAM;AACzB,eAAO,EAAE,YAAY,EAAE;AAAA,MAC3B,CAAC;AACD,YAAM,KAAK,SAAS,GAAG,kBAAkB,CAAC;AAE1C,YAAM,KAAK,SAAS,GAAG,eAAe;AAAA,IAC1C;AACA,SAAK,QAAQ,iBAAiB,GAAG,KAAK,sBAAsB,KAAK,mBAAmB,eAAe,OAAU,CAAC;AAAA,EAClH;AAAA,EAOA,MAAM,SAAS,QAAgB,MAAiD;AAC5E,QAAI,CAAC,UAAU,CAAC,QAAQ,OAAO,SAAS;AAAU;AAClD,eAAW,OAAO,MAAM;AAEpB,WAAK,QAAQ,QAAQ,WAAW,GAAG,UAAU,KAAK,KAAK,IAAI;AAAA,IAC/D;AAAA,EACJ;AAAA,EACA,MAAM,WAAW,MAAW,SAAgC;AACxD,QAAI,CAAC;AAAM;AACX,SAAK,QAAQ,QAAQ,GAAG,KAAK,gBAAgB,QAAW,aAAa,oBAAoB,aAAa;AACtG,UAAM,KAAK,QAAQ;AAAA,MACf,GAAG,KAAK,iBAAiB,OAAO,QAAQ,SAAS,GAAG,MAAM,EAAE;AAAA,MAC5D,GAAG,KAAK;AAAA,MACR,aAAa;AAAA,MACb;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,MAAM,gBAA+B;AACjC,aAAS,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,KAAK;AAC3C,WAAK,SAAS,GAAG,aAAa;AAC9B,UAAI,KAAK,SAAS,GAAG,cAAc,OAAO;AACtC,aAAK,IAAI,MAAM,2BAA2B;AAC1C,aAAK,SAAS,OAAO,OAAO,GAAG,GAAG,CAAC;AAAA,MACvC;AAAA,IACJ;AAAA,EACJ;AACJ;AAGO,MAAM,oBAAoB,aAAa;AAAA,EAC1C,YAAY,SAA0B,SAAoC;AACtE,UAAM,SAAS,EAAE,GAAG,SAAS,SAAS,aAAa,GAAG,KAAK;AAC3D,SAAK,aAAa,QAAQ;AAC1B,UAAM,MACF,aAAa,iBAAiB,WAAW,YACxC,KAAK,WAAW,WAAW,GAAG,KAAK,KAAK,WAAW,WAAW,IAAI,IAC7D,aAAa,iBAAiB,WAAW,oBACzC,aAAa,iBAAiB,WAAW,qBAC/C,aAAa,iBAAiB,WAAW;AAC7C,SAAK,MAAM,KAAK,OAAO,KAAK,CAAC,KAAK,YAAY,QAAQ,QAAQ,CAAC;AAAA,EACnE;AAAA,EACA,MAAM,aAA4B;AAC9B,UAAM,SAAU,MAAM,KAAK,oBAAoB;AAC/C,QAAI,CAAC;AAAQ;AAEb,SAAK,IAAI,MAAM,OAAO,OAAO,SAAS,6BAA6B;AACnE,WAAO,SAAS,KAAK,CAAC,GAAG,MAAM;AAC3B,aAAO,IAAI,KAAK,EAAE,WAAW,KAAK,EAAE,QAAQ,IAAI,IAAI,KAAK,EAAE,WAAW,KAAK,EAAE,QAAQ;AAAA,IACzF,CAAC;AACD,SAAK,SAAS,QAAQ,CAAC,MAAO,EAAE,aAAa,KAAM;AACnD,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,oBAAoB,IAAI,OAAO,SAAS,QAAQ,KAAK;AAClF,YAAM,IAAI,OAAO,SAAS;AAC1B,UAAI,EAAE,WAAW,UAAU;AAAQ;AACnC,YAAM,MAAM,WAAW,EAAE,YAAY,CAAC;AAKtC,YAAM,QAAQ,KAAK,SAAS,UAAU,CAAC,MAAM,EAAE,WAAW,cAAc,EAAE,WAAW,UAAU;AAE/F,UAAI,SAAS,IAAI;AACb,cAAM,WAAW,IAAI;AAAA,UACjB,KAAK;AAAA,UACL;AAAA,UACA;AAAA,UACA,EAAE;AAAA,UACF,KAAK;AAAA,QACT;AACA,cAAM,SAAS,eAAe;AAE9B,YAAI,YAAY,SAAS,OAAO,KAAK,MAAM;AAAG,eAAK,SAAS,KAAK,QAAQ;AAAA,MAC7E,OAAO;AACH,aAAK,SAAS,OAAO,WAAW,EAAE,UAAU;AAAA,MAChD;AAAA,IACJ;AACA,SAAK,QAAQ,iBAAiB,GAAG,KAAK,cAAc;AAEpD,aAAS,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,KAAK;AAC3C,YAAM,MAAM,KAAK,SAAS;AAE1B,UAAI,IAAI,WAAW,WAAW,UAAU;AACpC,iBAAS,KAAK,GAAG,KAAK,KAAK,SAAS,QAAQ,MAAM;AAC9C,gBAAM,SAAS,KAAK,SAAS;AAC7B,cAAI,QAAQ;AAAQ;AACpB,cAAI,OAAO;AAAY;AAEvB,cAAI,OAAO,iBAAiB;AAAW;AACvC,cAAI,OAAO,WAAW,SAAS,IAAI,WAAW,OAAO;AACjD,gBAAI,aAAa;AACjB,iBAAK,IAAI,MAAM,mCAAmC;AAClD,iBAAK,SAAS,IAAI,OAAO;AACzB,iBAAK,SAAS,OAAO,OAAO,IAAI,GAAG,CAAC;AACpC;AACA;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAKA,UAAM,KAAK,iBAAiB;AAAA,EAChC;AACJ;AAEO,MAAM,qBAAqB,aAAa;AAAA,EAC3C,YAAY,SAA0B,SAAwC;AAC1E,UAAM,SAAS,EAAE,GAAG,SAAS,SAAS,cAAc,GAAG,MAAM;AAC7D,SAAK,aAAa,QAAQ;AAC1B,SAAK,OAAO,IAAI,CAAC,KAAK,WAAW,IAAI,KAAK,WAAW,IAAI,QAAQ,QAAQ,CAAC;AAAA,EAC9E;AAAA,EAEA,MAAM,aAA4B;AAC9B,UAAM,SAAU,MAAM,KAAK,oBAAoB;AAC/C,QAAI,CAAC;AAAQ;AAEb,QAAI,CAAC,OAAO,cAAc,CAAC,OAAO,WAAW,UAAU;AACnD,WAAK,IAAI,MAAM,4BAA4B;AAC3C;AAAA,IACJ;AAAO,WAAK,IAAI,MAAM,OAAO,OAAO,WAAW,SAAS,6BAA6B;AACrF,WAAO,WAAW,SAAS,KAAK,CAAC,GAAG,MAAM;AACtC,aAAO,OAAO,EAAE,WAAW,QAAQ,KAAK,IAAI,OAAO,EAAE,WAAW,QAAQ,KAAK;AAAA,IACjF,CAAC;AACD,SAAK,SAAS,QAAQ,CAAC,MAAO,EAAE,aAAa,KAAM;AACnD,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,oBAAoB,IAAI,OAAO,WAAW,SAAS,QAAQ,KAAK;AAE7F,aAAO,WAAW,SAAS,GAAG,WAAW,WAAW,OAAO,WAAW,SAAS,WAAW;AAC1F,aAAO,WAAW,SAAS,GAAG,WAAW,iBAAiB,OAAO,WAAW,SAAS,GAAG;AACxF,YAAM,MAAM,WAAW,OAAO,WAAW,SAAS,GAAG,YAAY,CAAC;AAElE,YAAM,QAAQ,KAAK,SAAS;AAAA,QACxB,CAAC,MAAM,EAAE,WAAW,UAAU,OAAO,WAAW,SAAS,GAAG,WAAW;AAAA,MAC3E;AACA,UAAI,SAAS,IAAI;AACb,cAAM,WAAW,IAAI;AAAA,UACjB,KAAK;AAAA,UACL;AAAA,UACA;AAAA,UACA,OAAO,WAAW,SAAS,GAAG;AAAA,UAC9B,KAAK;AAAA,QACT;AACA,cAAM,SAAS,eAAe;AAC9B,YAAI,YAAY,SAAS,OAAO,KAAK,MAAM;AAAG,eAAK,SAAS,KAAK,QAAQ;AAAA,MAC7E,OAAO;AACH,aAAK,SAAS,OAAO,WAAW,OAAO,WAAW,SAAS,GAAG,UAAU;AAAA,MAC5E;AAAA,IACJ;AACA,SAAK,QAAQ,iBAAiB,GAAG,KAAK,cAAc;AACpD,UAAM,KAAK,iBAAiB;AAAA,EAChC;AACJ;AAEO,MAAM,oBAAoB,aAAa;AAAA,EAC1C,YAAY,SAA0B,SAAoC;AACtE,UAAM,SAAS,EAAE,GAAG,SAAS,SAAS,aAAa,GAAG,KAAK;AAC3D,SAAK,aAAa,QAAQ,WAAW,YAAY;AACjD,SAAK,OAAO,IAAI,CAAC,KAAK,YAAY,QAAQ,QAAQ,CAAC;AAAA,EACvD;AAAA,EACA,MAAM,aAA4B;AAC9B,UAAM,SAAU,MAAM,KAAK,oBAAoB;AAC/C,QAAI,CAAC,UAAU,CAAC,OAAO,WAAW,OAAO,WAAW,MAAM;AACtD,WAAK,IAAI,KAAK,iCAAiC;AAC/C;AAAA,IACJ;AACA,WAAO,QAAQ,KAAK,CAAC,GAAG,MAAM;AAC1B,UAAI,KAAK,KAAK,EAAE,YAAY,EAAE;AAAU,eAAO,EAAE,WAAW,EAAE;AAC9D,aAAO;AAAA,IACX,CAAC;AACD,SAAK,SAAS,QAAQ,CAAC,MAAO,EAAE,aAAa,KAAM;AACnD,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,oBAAoB,IAAI,OAAO,QAAQ,QAAQ,KAAK;AACjF,UAAI,OAAO,QAAQ,MAAM;AAAM;AAC/B,YAAM,MAAM,WAAW,OAAO,QAAQ,IAAI,CAAC;AAE3C,YAAM,QAAQ,KAAK,SAAS,UAAU,CAAC,MAAM,EAAE,WAAW,QAAQ,MAAM,OAAO,QAAQ,GAAG,QAAQ,EAAE;AACpG,UAAI,SAAS,IAAI;AACb,cAAM,WAAW,IAAI;AAAA,UACjB,KAAK;AAAA,UACL;AAAA,UACA;AAAA,UACA,OAAO,QAAQ;AAAA,UACf,KAAK;AAAA,QACT;AACA,cAAM,SAAS,eAAe;AAC9B,YAAI,YAAY,SAAS,OAAO,KAAK,MAAM;AAAG,eAAK,SAAS,KAAK,QAAQ;AAAA,MAC7E,OAAO;AACH,aAAK,SAAS,OAAO,WAAW,OAAO,QAAQ,EAAE;AAAA,MACrD;AAAA,IACJ;AAEA,SAAK,IAAI,MAAM,OAAO,OAAO,QAAQ,6BAA6B;AAElE,SAAK,QAAQ,iBAAiB,GAAG,KAAK,cAAc;AACpD,UAAM,KAAK,iBAAiB;AAAA,EAChC;AACJ;AACO,MAAM,qBAAqB,aAAa;AAAA,EAC3C,YAAY,SAA0B,SAAwC;AAC1E,UAAM,SAAS,EAAE,GAAG,SAAS,SAAS,cAAc,GAAG,MAAM;AAAA,EACjE;AACJ;AACO,MAAM,sBAAsB,aAAa;AAAA,EAC5C,YAAY,SAA0B,SAAwC;AAC1E,UAAM,SAAS,EAAE,GAAG,SAAS,SAAS,eAAe,GAAG,MAAM;AAAA,EAClE;AACJ;AAEO,MAAM,2BAA2B,yBAAU;AAAA,EAC9C,YAA6C,CAAC;AAAA,EAC9C,iBAAsB;AAAA,EACtB,kBAAuB;AAAA,EACvB,aAAa;AAAA,EACb,OAAO;AAAA,EACP,cAAsB;AAAA,EACtB;AAAA,EACA,uBAA8D,CAAC;AAAA,EAE/D,SAAS;AAAA,EAET,YAAY,SAA0B;AAClC,UAAM,SAAS,UAAU;AACzB,SAAK,UAAU,KAAK,QAAQ;AAE5B,SAAK,eAAe,KAAK,IAAI;AAAA,EACjC;AAAA,EACA,MAAM,OAAsB;AACxB,SAAK,SAAS,CAAC,KAAK,QAAQ,OAAO;AACnC,SAAK,cAAc,KAAK,QAAQ,OAAO,cAAc;AAAA,EACzD;AAAA,EAMA,MAAM,0BAA0B,YAAyD;AACrF,eAAW,KAAK,YAAY;AACxB,YAAM,UAAU,WAAW;AAC3B,UAAI,YAAY;AAAW;AAC3B,YAAM,OACF,QAAQ,WAAW,KACb,MAAM,KAAK,QAAQ,mBAAmB,UAAU,YAAY;AAAA,QACxD,UAAU,kBAAkB,QAAQ;AAAA,QACpC,QAAQ,kBAAkB,QAAQ;AAAA,MACtC,CAAC,IACD;AACV,UAAI,CAAC,QAAQ,cAAe,QAAQ,KAAK,QAAQ,KAAK,KAAK,SAAS,GAAI;AACpE,cAAM,OAAO,IAAI,kBAAkB,kBAAkB,KAAK,SAAS,OAAO;AAC1E,aAAK,qBAAqB,KAAK,IAAI;AACnC,cAAM,KAAK,KAAK;AAAA,MACpB,OAAO;AACH,aAAK,IAAI,MAAM,kBAAkB,QAAQ,iCAAiC,QAAQ,kBAAkB;AACpG,YAAI,KAAK,WAAW,KAAK,QAAQ;AAAM,eAAK,QAAQ,KAAK;AAAA,aACpD;AACD,gBAAM,IAAI;AAAA,YACN,kBAAkB,QAAQ,iCAAiC,QAAQ;AAAA,UACvE;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,yBAAyB,SAA6D;AAClF,UAAM,QAAQ,KAAK,UAAU;AAAA,MACzB,CAAC,MACG,MACE,OAAO,EAAE,cAAc,YAAY,EAAE,oBAAoB,QAAQ,cAC9D,OAAO,QAAQ,cAAc,YAAY,QAAQ,WAAW,KAAK,GAAG,KAAK,EAAE,qBAChF,EAAE,WAAW,KAAK,QAAQ;AAAA,IAClC;AACA,QAAI,SAAS,IAAI;AACb,UAAI;AACJ,cAAQ,QAAQ,SAAS;AAAA,QACrB,KAAK;AACD,cAAI,MAAM,QAAQ,QAAQ,UAAU,GAAG;AACnC,kBAAM,IAAI,MAAM,iCAAiC;AAAA,UACrD;AACA,cAAI,IAAI,YAAY,KAAK,SAAS;AAAA,YAC9B,GAAG;AAAA,YACH,YAAY,QAAQ;AAAA,YACpB,oBAAoB;AAAA,UACxB,CAAC;AACD;AAAA,QACJ,KAAK;AACD,cAAI,MAAM,QAAQ,QAAQ,UAAU,GAAG;AACnC,kBAAM,IAAI,MAAM,iCAAiC;AAAA,UACrD;AACA,cAAI,IAAI,YAAY,KAAK,SAAS;AAAA,YAC9B,GAAG;AAAA,YACH,YAAY,QAAQ;AAAA,YACpB,oBAAoB;AAAA,UACxB,CAAC;AACD;AAAA,QACJ,KAAK;AACD,cAAI,CAAC,MAAM,QAAQ,QAAQ,UAAU,GAAG;AACpC,kBAAM,IAAI,MAAM,sCAAsC;AAAA,UAC1D;AACA,cAAI,IAAI,aAAa,KAAK,SAAS;AAAA,YAC/B,GAAG;AAAA,YACH,YAAY,QAAQ;AAAA,YACpB,oBAAoB;AAAA,UACxB,CAAC;AACD;AAAA,QACJ,KAAK;AACD,cAAI,CAAC,MAAM,QAAQ,QAAQ,UAAU,GAAG;AACpC,kBAAM,IAAI,MAAM,sCAAsC;AAAA,UAC1D;AACA,cAAI,IAAI,aAAa,KAAK,SAAS;AAAA,YAC/B,GAAG;AAAA,YACH,YAAY,QAAQ;AAAA,YACpB,oBAAoB;AAAA,YACpB,UAAU,KAAK,QAAQ,OAAO;AAAA,UAClC,CAAC;AACD;AAAA,QACJ;AACI,gBAAM,IAAI,MAAM,kCAAkC;AAAA,MAE1D;AACA,UAAI;AAAG,aAAK,UAAU,KAAK,CAAC;AAC5B,aAAO;AAAA,IACX,OAAO;AACH,WAAK,IAAI,MAAM,yCAAyC;AACxD,aAAO,KAAK,UAAU;AAAA,IAC1B;AAAA,EACJ;AAAA,EAEA,SAAe;AACX,UAAM,OAAO;AACb,eAAW,KAAK,KAAK,WAAW;AAC5B,UAAI;AAAG,UAAE,OAAO;AAAA,IACpB;AACA,SAAK,YAAY,CAAC;AAClB,QAAI,KAAK;AAAgB,WAAK,QAAQ,aAAa,KAAK,cAAc;AACtE,QAAI,KAAK;AAAiB,WAAK,QAAQ,aAAa,KAAK,eAAe;AAAA,EAC5E;AAAA,EAEA,cAAc,MAAgC;AAE1C,SAAK,aAAa;AAClB,QAAI,KAAK;AAAgB,WAAK,QAAQ,aAAa,KAAK,cAAc;AACtE,QAAI,KAAK,UAAU,UAAU,GAAG;AAC5B,WAAK,aAAa,KAAK;AACvB;AAAA,IACJ;AACA,YAAQ,IAAI;AACZ,mBAAe,QAAQ,MAAW,QAAgB,GAAkB;AAChE,YAAMC,QAAO;AACb,UAAIA,MAAK;AAAQ;AACjB,UAAI,QAAQA,MAAK,UAAU,QAAQ;AAC/B,YAAIA,MAAK,UAAU;AAAQ,gBAAMA,MAAK,UAAU,OAAO,WAAW;AAClE;AACA,QAAAA,MAAK,iBAAiBA,MAAK,QAAQ,WAAW,SAAS,KAAKA,OAAM,KAAK;AAAA,MAC3E,OAAO;AACH,cAAMA,MAAK,eAAe;AAC1B,QAAAA,MAAK,iBAAiBA,MAAK,QAAQ,WAAWA,MAAK,eAAeA,MAAK,eAAe,KAAQA,KAAI;AAAA,MACtG;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,mBAAmB,MAAiB;AAChC,QAAI,KAAK;AAAQ;AAEjB,SAAK,YAAY;AAEjB,UAAM,UAAU,QAAS,KAAK,IAAI,IAAI;AACtC,SAAK,kBAAkB,KAAK,QAAQ,WAAW,KAAK,oBAAoB,SAAS,IAAI;AAAA,EACzF;AAAA,EAEA,cAAoB;AAChB,eAAW,KAAK,KAAK,WAAW;AAC5B,WAAK,UAAU,GAAG,kBAAkB;AAAA,IACxC;AAAA,EACJ;AAAA,EAEA,MAAM,iBAAgC;AAClC,SAAK,aAAa;AAClB,UAAM,KAAK,gBAAgB;AAC3B,QAAI,gBAAgB;AACpB,eAAW,KAAK,KAAK,WAAW;AAC5B,UAAI,KAAK;AACT,iBAAW,KAAK,KAAK,UAAU,GAAG,UAAU;AACxC,YAAI,KAAK,UAAU,GAAG,SAAS,GAAG,YAAY;AAC1C;AAAA,QACJ;AAAA,MACJ;AACA,WAAK,QAAQ,QAAQ;AAAA,QACjB,GAAG,KAAK,UAAU,GAAG;AAAA,QACrB;AAAA,QACA,aAAa,oBAAoB;AAAA,MACrC;AACA,uBAAiB;AAAA,IACrB;AAEA,QAAI,KAAK,QAAQ;AACb,iBAAW,QAAQ,KAAK,sBAAsB;AAC1C,cAAM,KAAK,YAAY,KAAK,WAAW,CAAC,OAAO,UAAU,KAAK,CAAC;AAAA,MACnE;AAAA,IACJ;AACA,SAAK,SAAS;AACd,UAAM,KAAK,QAAQ,QAAQ;AAAA,MACvB,GAAG,KAAK;AAAA,MACR;AAAA,MACA,aAAa,oBAAoB;AAAA,IACrC;AACA,SAAK,UAAU,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;AAE/C,SAAK,IAAI,MAAM,WAAW,gCAAgC;AAAA,EAC9D;AAAA,EACA,iBAA0B;AACtB,WAAO,KAAK,UAAU,SAAS;AAAA,EACnC;AAAA,EACA,MAAM,aAAa,SAAkB,KAAK,YAA2B;AACjE,UAAM,SAAS,MAAM,KAAK,QAAQ,QAAQ;AAAA,MACtC;AAAA,MACA,aAAa;AAAA,IACjB;AACA,SAAK,QAAQ,QAAQ,QAAQ,mBAAmB,CAAC,CAAC,QAAQ,MAAM;AAAA,EACpE;AAAA,EACA,eAAe,aAAwB;AACnC,UAAM,OAAO,CAAC;AACd,eAAW,KAAK,aAAa;AACzB,UAAI,CAAC,YAAY,GAAG;AAChB,aAAK,KAAK,eAAe,EAAE,QAAQ,WAAW,EAAE,8BAA8B;AAClF,UAAI,CAAC,YAAY,GAAG;AAChB,aAAK,KAAK,eAAe,EAAE,QAAQ,WAAW,EAAE,6BAA6B;AAGjF,UAAI,CAAC,YAAY,GAAG;AAChB,aAAK,KAAK,eAAe,EAAE,QAAQ,WAAW,EAAE,mCAAmC;AAEvF,WAAK,QAAQ,eAAe,IAAI;AAAA,IACpC;AAAA,EACJ;AAAA,EACA,MAAM,kBAAiC;AACnC,eAAW,KAAK,KAAK,WAAW;AAC5B,iBAAW,KAAK,KAAK,UAAU,GAAG,UAAU;AACxC,cAAM,KAAK,UAAU,GAAG,SAAS,GAAG,mBAAmB,IAAI;AAC3D,cAAM,KAAK,UAAU,GAAG,SAAS,GAAG,kBAAkB,OAAO,CAAC,CAAC;AAAA,MACnE;AAAA,IACJ;AAAA,EACJ;AACJ;",
|
|
6
6
|
"names": ["axios", "that"]
|
|
7
7
|
}
|
package/build/main.js
CHANGED
|
@@ -133,11 +133,6 @@ class WeatherWarnings extends utils.Adapter {
|
|
|
133
133
|
template.remove = template.remove ? template.remove : "none";
|
|
134
134
|
template.removeAll = template.removeAll ? template.removeAll : "none";
|
|
135
135
|
template.all = template.all ? template.all : "none";
|
|
136
|
-
self.log.debug(
|
|
137
|
-
JSON.stringify(
|
|
138
|
-
self.config[notificationService + "_TypeFilter"]
|
|
139
|
-
)
|
|
140
|
-
);
|
|
141
136
|
notificationServiceOpt[notificationService] = {
|
|
142
137
|
...import_notificationConfig_d.notificationServiceDefaults[notificationService],
|
|
143
138
|
service,
|
|
@@ -202,7 +197,7 @@ class WeatherWarnings extends utils.Adapter {
|
|
|
202
197
|
const options = {
|
|
203
198
|
filter: { type: self.config.zamgTypeFilter }
|
|
204
199
|
};
|
|
205
|
-
const zamgArr = id.zamgSelectId.split(
|
|
200
|
+
const zamgArr = id.zamgSelectId.split("/");
|
|
206
201
|
if (zamgArr.length == 2) {
|
|
207
202
|
self.providerController.createProviderIfNotExist({
|
|
208
203
|
...options,
|
|
@@ -315,7 +310,6 @@ class WeatherWarnings extends utils.Adapter {
|
|
|
315
310
|
data.native[a] = import_io_package.default.native[a];
|
|
316
311
|
});
|
|
317
312
|
}
|
|
318
|
-
this.log.debug(JSON.stringify(data));
|
|
319
313
|
this.sendTo(obj.from, obj.command, data, obj.callback);
|
|
320
314
|
}
|
|
321
315
|
break;
|
package/build/main.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/main.ts"],
|
|
4
|
-
"sourcesContent": ["/*\n * Created with @iobroker/create-adapter v2.5.0\n */\n\n// The adapter-core module gives you access to the core ioBroker functions\n// you need to create an adapter\nimport * as utils from '@iobroker/adapter-core';\nimport io_package from '../io-package.json';\nimport axios from 'axios';\nimport 'source-map-support/register';\nimport { dwdWarncellIdLong } from './lib/def/dwdWarncellIdLong';\nimport { DIV, ProviderController } from './lib/provider.js';\nimport { Library } from './lib/library.js';\nimport {\n customFormatedTokens,\n customFormatedTokensJson,\n genericWarntyp,\n genericWarntypeType,\n textLevels,\n} from './lib/def/messages-def';\nimport { messageFilterTypeWithFilter, providerServices, providerServicesArray } from './lib/def/provider-def';\nimport * as NotificationType from './lib/def/notificationService-def';\nimport { notificationServiceDefaults } from './lib/def/notificationConfig-d';\naxios.defaults.timeout = 8000;\n// Load your modules here, e.g.:\n// import * as fs from \"fs\";\n\nclass WeatherWarnings extends utils.Adapter {\n library: Library;\n providerController: ProviderController | null = null;\n numOfRawWarnings: number = 5;\n adminTimeoutRef: any = null;\n public constructor(options: Partial<utils.AdapterOptions> = {}) {\n super({\n ...options,\n name: 'weather-warnings',\n });\n this.on('ready', this.onReady.bind(this));\n this.on('stateChange', this.onStateChange.bind(this));\n this.on('objectChange', this.onObjectChange.bind(this));\n this.on('message', this.onMessage.bind(this));\n this.on('unload', this.onUnload.bind(this));\n this.library = new Library(this);\n this.providerController = new ProviderController(this);\n }\n\n /**\n * Is called when databases are connected and adapter received configuration.\n */\n private async onReady(): Promise<void> {\n if (!this.providerController) {\n throw new Error('Provider controller doesnt exists.');\n }\n this.subscribeForeignObjects('system.config');\n\n // dynamic create of configuration datapoint.\n if (!Array.isArray(this.config.allowedDirs)) this.config.allowedDirs = [];\n let i = 0;\n let change = false;\n let allowedDirsConfig = {};\n while (i++ < 2) {\n const allowedDirs = this.config.allowedDirs;\n\n for (const a in providerServicesArray) {\n let hit = -1;\n for (const b in allowedDirs) {\n if (\n allowedDirs[b].providerService == providerServicesArray[a].replace('Service', '').toUpperCase()\n ) {\n hit = Number(b);\n break;\n }\n }\n if (hit == -1) {\n change = true;\n this.config.allowedDirs.push({\n providerService: providerServicesArray[a].replace('Service', '').toUpperCase(),\n dpWarning: true,\n dpMessage: true,\n dpFormated: true,\n dpAlerts: true,\n });\n }\n //@ts-expect-error dann so\n allowedDirsConfig[providerServicesArray[a]] =\n this.config.allowedDirs[hit == -1 ? this.config.allowedDirs.length - 1 : hit];\n }\n if (providerServicesArray.length != this.config.allowedDirs.length) {\n this.config.allowedDirs = [];\n allowedDirsConfig = {};\n change = false;\n continue;\n }\n break;\n }\n if (change) {\n const obj = await this.getForeignObjectAsync(`system.adapter.${this.name}.${this.instance}`);\n if (obj && obj.native) {\n obj.native.allowedDirs = this.config.allowedDirs;\n await this.setForeignObjectAsync(`system.adapter.${this.name}.${this.instance}`, obj);\n this.log.warn('Fixed configuration for allowed datapoints! ');\n }\n }\n this.providerController.setAllowedDirs(allowedDirsConfig);\n\n setTimeout(\n async function (that: any) {\n const self = that as WeatherWarnings;\n if (!self.providerController) return;\n if (!self) return;\n try {\n //const states = await self.getStatesAsync('*');\n await self.library.init();\n await self.library.initStates(await self.getStatesAsync('*'));\n await self.library.initStates((await self.getChannelsAsync()) as any);\n } catch (error) {\n self.log.error(`catch(1): init error while reading states! ${error}`);\n }\n\n self.providerController.init();\n self.log.info(`Refresh Interval: ${self.providerController.refreshTime / 60000} minutes`);\n\n const notificationServiceOpt: NotificationType.OptionsType = {};\n for (const a in NotificationType.Array) {\n const notificationService = NotificationType.Array[a] as NotificationType.Type;\n if (self.config[(notificationService + '_Enabled') as keyof ioBroker.AdapterConfig]) {\n const service: providerServices[] = [];\n if (self.config[(notificationService + '_DwdEnabled') as keyof ioBroker.AdapterConfig])\n service.push('dwdService');\n if (self.config[(notificationService + '_UwzEnabled') as keyof ioBroker.AdapterConfig])\n service.push('uwzService');\n if (self.config[(notificationService + '_UwzEnabled') as keyof ioBroker.AdapterConfig])\n service.push('zamgService');\n const template: NotificationType.ActionsType = {\n new:\n self.config[(notificationService + '_MessageNew') as keyof ioBroker.AdapterConfig] !==\n undefined\n ? (self.config[\n (notificationService + '_MessageNew') as keyof ioBroker.AdapterConfig\n ] as string)\n : '',\n remove: self.config[\n (notificationService + '_MessageRemove') as keyof ioBroker.AdapterConfig\n ] as string,\n removeAll: self.config[\n (notificationService + '_MessageAllRemove') as keyof ioBroker.AdapterConfig\n ] as string,\n all:\n self.config[(notificationService + '_MessageAll') as keyof ioBroker.AdapterConfig] !==\n undefined\n ? (self.config[\n (notificationService + '_MessageAll') as keyof ioBroker.AdapterConfig\n ] as string)\n : '',\n };\n template.new = template.new ? template.new : 'none';\n template.remove = template.remove ? template.remove : 'none';\n template.removeAll = template.removeAll ? template.removeAll : 'none';\n template.all = template.all ? template.all : 'none';\n self.log.debug(\n JSON.stringify(\n self.config[\n (notificationService + '_TypeFilter') as keyof ioBroker.AdapterConfig\n ] as string[],\n ),\n );\n // @ts-expect-error keine ahnung :)\n notificationServiceOpt[notificationService] = {\n ...notificationServiceDefaults[notificationService],\n service: service,\n filter: {\n level: self.config[\n (notificationService + '_LevelFilter') as keyof ioBroker.AdapterConfig\n ] as number,\n type: (\n self.config[\n (notificationService + '_TypeFilter') as keyof ioBroker.AdapterConfig\n ] as string[]\n ).map((a) => String(a)),\n },\n adapter: self.config[\n (notificationService + '_Adapter') as keyof ioBroker.AdapterConfig\n ] as string,\n name: notificationService,\n actions: template,\n useadapter: true,\n };\n Object.assign(\n //@ts-expect-error verstehe ich nicht\n notificationServiceOpt[notificationService],\n notificationServiceDefaults[notificationService],\n );\n }\n }\n // hold this for some specialcases\n if (self.config.telegram_Enabled) {\n }\n if (self.config.whatsapp_Enabled) {\n }\n if (self.config.pushover_Enabled) {\n }\n if (self.config.json_Enabled) {\n }\n if (self.config.history_Enabled) {\n }\n if (self.config.email_Enabled && notificationServiceOpt.email != undefined) {\n notificationServiceOpt.email.actions.header = self.config.email_Header;\n notificationServiceOpt.email.actions.footer = self.config.email_Footer;\n }\n\n self.providerController.createNotificationService(notificationServiceOpt);\n\n // dwdSelectID gegen Abfrage pr\u00FCfen und erst dann als valide erkl\u00E4ren.\n for (const a in self.config.dwdwarncellTable) {\n const id = self.config.dwdwarncellTable[a];\n if (self.config.dwdEnabled) {\n if (id.dwdSelectId < 10000 && isNaN(id.dwdSelectId)) {\n self.log.warn(`DWD is activated, but no valid warning cell is configured.`);\n continue;\n }\n const options: messageFilterTypeWithFilter & {\n [key: string]: any;\n } = {\n filter: {\n type: self.config.dwdTypeFilter,\n level: self.config.dwdLevelFilter,\n },\n };\n self.log.info('DWD activated. Retrieve data.');\n self.providerController.createProviderIfNotExist({\n ...options,\n service: 'dwdService',\n customName: id.dwdCityname,\n warncellId: String(id.dwdSelectId),\n providerController: self.providerController,\n language: self.config.dwdLanguage,\n });\n }\n }\n\n for (const a in self.config.zamgwarncellTable) {\n const id = self.config.zamgwarncellTable[a];\n if (self.config.zamgEnabled && id && typeof id.zamgSelectId == 'string') {\n self.log.info('ZAMG activated. Retrieve data.');\n const options: messageFilterTypeWithFilter & {\n [key: string]: any;\n } = {\n filter: { type: self.config.zamgTypeFilter },\n };\n const zamgArr = id.zamgSelectId.split(DIV) as [string, string];\n if (zamgArr.length == 2) {\n self.providerController.createProviderIfNotExist({\n ...options,\n service: 'zamgService',\n warncellId: zamgArr,\n language: self.config.zamgLanguage,\n providerController: self.providerController,\n customName: id.zamgCityname,\n });\n }\n }\n }\n for (const a in self.config.uwzwarncellTable) {\n const id = self.config.uwzwarncellTable[a];\n if (self.config.uwzEnabled && !!id.uwzSelectId) {\n const options: messageFilterTypeWithFilter = {\n filter: { type: self.config.uwzTypeFilter },\n };\n self.log.info('UWZ activated. Retrieve data.');\n self.providerController.createProviderIfNotExist({\n ...options,\n service: 'uwzService',\n warncellId: 'UWZ' + id.uwzSelectId.toUpperCase(), //UWZ + Land + PLZ\n providerController: self.providerController,\n language: self.config.uwzLanguage,\n customName: id.uwzCityname,\n });\n }\n }\n\n //clear tree\n const holdStates = [];\n for (const a in self.providerController.providers) {\n holdStates.push(self.providerController.providers[a].name);\n }\n await self.library.cleanUpTree(holdStates, 3);\n\n self.providerController.updateEndless(self.providerController);\n self.providerController.updateAlertEndless(self.providerController);\n },\n 4000,\n this,\n );\n }\n\n /**\n * Is called when adapter shuts down - callback has to be called under any circumstances!\n */\n private onUnload(callback: () => void): void {\n try {\n if (this.providerController) this.providerController.delete();\n callback();\n } catch (e) {\n callback();\n }\n }\n\n /**\n * We need this later, dont remove\n */\n // If you need to react to object changes, uncomment the following block and the corresponding line in the constructor.\n // You also need to subscribe to the objects with `this.subscribeObjects`, similar to `this.subscribeStates`.\n // /**\n // * Is called if a subscribed object changes\n // */\n private async onObjectChange(id: string, obj: ioBroker.Object | null | undefined): Promise<void> {\n if (obj) {\n // The object was changed\n if (id == 'system.config') {\n if (await this.library.setLanguage(obj.common.language)) {\n if (this.providerController) this.providerController.updateMesssages();\n }\n }\n }\n }\n\n /**\n * Is called if a subscribed state changes\n */\n private onStateChange(id: string, state: ioBroker.State | null | undefined): void {\n if (!state) return;\n if (state.ack) return;\n }\n\n /**\n * Some message was sent to this instance over message box. Used by email, pushover, text2speech, ...\n * Using this method requires \"common.messagebox\" property to be set to true in io-package.json\n */\n private async onMessage(obj: ioBroker.Message): Promise<void> {\n if (typeof obj === 'object' && obj.message) {\n this.log.debug(`Retrieve ${obj.command} from ${obj.from} message: ${JSON.stringify(obj)}`);\n let connected = true;\n let state;\n switch (String(obj.command)) {\n case 'alexa2_device_ids':\n {\n const data: any[] = [];\n if (obj.message.adapter != 'none') {\n /* Wenn Doku oder testbar dann so:\n const test = await this.getObjectViewAsync('system', 'device', {\n startkey: `${obj.message.adapter}.`,\n endkey: `${obj.message.adapter}.\\u9999`,\n });\n */\n const objs = await this.getForeignObjectsAsync(obj.message.adapter + '.Echo-Devices.*');\n for (const a in objs) {\n if (a.endsWith('.Commands.announcement')) {\n const channel = await this.getForeignObjectAsync(\n a.split('.').slice(0, 4).join('.'),\n );\n data.push({\n value: a.split('.')[3],\n label: channel ? channel.common.name : '',\n });\n }\n }\n }\n\n this.sendTo(obj.from, obj.command, data, obj.callback);\n }\n break;\n\n /** defaults for templates */\n case 'restoreDefault':\n {\n let data: any = {};\n if (obj.message.service == 'template') {\n data = {\n native: {\n templateTable: this.library.cloneGenericObject(io_package.native.templateTable),\n },\n };\n } else {\n data = { native: {} };\n [\n `${obj.message.service}_MessageNew`,\n `${obj.message.service}_MessageRemove`,\n `${obj.message.service}_MessageAllRemove`,\n `${obj.message.service}_MessageAll`,\n ].forEach((a) => {\n data.native[a] = io_package.native[a as keyof typeof io_package.native];\n });\n }\n this.log.debug(JSON.stringify(data));\n this.sendTo(obj.from, obj.command, data, obj.callback);\n }\n break;\n case 'Messages':\n {\n if (obj.message.service) {\n const templates = this.config.templateTable;\n const reply = [\n {\n label: `none`,\n value: `none`,\n },\n ];\n for (const a in templates) {\n const t = templates[a];\n if (t.templateKey !== '' && !t.templateKey.startsWith('_')) {\n reply.push({\n label: `${t.templateKey}`,\n value: `${t.templateKey}`,\n });\n }\n }\n this.log.debug(obj.command + ': ' + JSON.stringify(reply));\n this.sendTo(obj.from, obj.command, reply, obj.callback);\n } else {\n this.sendTo(obj.from, obj.command, [], obj.callback);\n this.log.warn(\n `warn(44): Retrieve message with ${obj.command}, but without obj.message.service`,\n );\n }\n }\n\n break;\n case 'notificationService':\n {\n if (obj.message && obj.message.service) {\n const temp: { [key: number]: boolean } = {};\n try {\n const objs = await this.getObjectViewAsync('system', 'instance', {\n startkey: `system.adapter.${obj.message.service}.`,\n endkey: `system.adapter.${obj.message.service}.\\u9999`,\n });\n\n if (objs && objs.rows) {\n for (const a in objs.rows) {\n const instance = Number(objs.rows[a].id.split('.')[3]);\n if (instance !== undefined) {\n temp[instance] = true;\n }\n }\n }\n } catch (error) {\n this.log.error(`error(44): ${error}`);\n }\n\n const reply = [{ label: 'none', value: 'none' }];\n\n for (const t in temp) {\n reply.push({\n label: `${obj.message.service}.${t}`,\n value: `${obj.message.service}.${t}`,\n });\n }\n this.log.debug(obj.command + ': ' + JSON.stringify(reply));\n this.sendTo(obj.from, obj.command, reply, obj.callback);\n }\n }\n break;\n case 'templateHelp':\n if (obj.callback) {\n let reply = 'Tokens: ';\n\n for (const a in customFormatedTokensJson) {\n reply +=\n '${' +\n a +\n '}: ' +\n ((await this.library.getTranslation(\n customFormatedTokensJson[a as keyof customFormatedTokens],\n )) +\n ' - / - ');\n }\n reply = reply.slice(0, -7);\n //this.log.debug(obj.command + ': ' + JSON.stringify(reply));\n this.sendTo(obj.from, obj.command, reply, obj.callback);\n }\n break;\n case 'filterLevel':\n if (obj.callback) {\n const reply = [];\n const text = textLevels.textGeneric;\n for (const a in text) {\n if (Number(a) == 5) break;\n reply.push({\n label: await this.library.getTranslation(\n textLevels.textGeneric[a as keyof typeof text],\n ),\n value: Number(a),\n });\n }\n this.log.debug(obj.command + ': ' + JSON.stringify(reply));\n this.sendTo(obj.from, obj.command, reply, obj.callback);\n }\n break;\n case 'filterType':\n if (obj.callback) {\n const reply = [];\n if (\n obj.message &&\n obj.message.service &&\n providerServicesArray.indexOf(obj.message.service) != -1\n ) {\n const service = obj.message.service as 'dwdService' | 'uwzService' | 'zamgService';\n for (const b in genericWarntyp) {\n const a = Number(b) as keyof genericWarntypeType;\n if (genericWarntyp[a][service] !== undefined && genericWarntyp[a][service].length > 0) {\n reply.push({\n label: await this.library.getTranslation(genericWarntyp[a].name),\n value: a,\n });\n }\n }\n } else if (\n obj.message &&\n obj.message.service &&\n NotificationType.Array.indexOf(obj.message.service) != -1\n ) {\n for (const b in genericWarntyp) {\n const a = Number(b) as keyof genericWarntypeType;\n reply.push({\n label: await this.library.getTranslation(genericWarntyp[a].name),\n value: a,\n });\n }\n }\n this.log.debug(obj.command + ': ' + JSON.stringify(reply));\n this.sendTo(obj.from, obj.command, reply, obj.callback);\n }\n break;\n case 'dwd.name':\n case 'dwd.check':\n case 'dwd.name.text':\n {\n //debounce\n if (this.adminTimeoutRef) {\n this.clearTimeout(this.adminTimeoutRef);\n this.adminTimeoutRef = this.setTimeout(this.dwdWarncellIdLongHelper, 2000, {\n obj: obj,\n that: this,\n });\n } else {\n this.dwdWarncellIdLongHelper({\n obj: obj,\n that: this,\n });\n this.adminTimeoutRef = this.setTimeout(\n (that: any) => (that.adminTimeoutRef = null),\n 2000,\n this,\n );\n }\n }\n break;\n case 'test':\n this.log.debug(`Retrieve test message!`);\n this.sendTo(obj.from, 'test', 'Test Message', obj.callback);\n break;\n /**testing online */\n case 'test-connection':\n if (obj.from !== 'system.adapter.test.0') {\n this.sendTo(obj.from, obj.command, 'Dont use this command!', obj.callback);\n return;\n }\n this.log.debug(`Retrieve test-connection message!`);\n connected = true;\n [\n 'provider.dwd.info.connection',\n 'provider.uwz.info.connection',\n 'provider.zamg.info.connection',\n 'info.connection',\n ].forEach((a) => {\n state = this.library.getdb(a);\n if (state) connected = connected && !!state.val;\n });\n // connected === true is right\n this.sendTo(obj.from, obj.command, connected ? 'true' : 'false', obj.callback);\n break;\n /** testing with testdata and switch then to online */\n case 'test-data':\n if (obj.from !== 'system.adapter.test.0') {\n this.sendTo(obj.from, obj.command, 'Dont use this command!', obj.callback);\n return;\n }\n connected = false;\n [\n 'provider.dwd.info.connection',\n 'provider.uwz.info.connection',\n 'provider.zamg.info.connection',\n 'info.connection',\n ].forEach((a) => {\n state = this.library.getdb(a);\n if (state) connected = connected || !!state.val;\n });\n state = this.library.getdb('provider.activeWarnings');\n if (state) connected = !!connected || !(state.val && Number(state.val) >= 4);\n else connected = true; //error\n // connected === false is right\n this.sendTo(\n obj.from,\n obj.command,\n !connected\n ? 'ok'\n : `connect: ${connected} (false) activeWarnings ${state ? state.val : 'undefined'} (>=4)`,\n obj.callback,\n );\n this.config.useTestWarnings = false;\n break;\n default:\n this.sendTo(obj.from, obj.command, 'unknown message', obj.callback);\n this.log.debug(\n `Retrieve unknown command ${obj.command} messsage: ${JSON.stringify(obj.message)} from ${\n obj.from\n }`,\n );\n }\n }\n }\n dwdWarncellIdLongHelper(obj1: any): void {\n const obj = obj1.obj as ioBroker.Message;\n const that = obj1.that as WeatherWarnings;\n if (obj.callback) {\n const data = dwdWarncellIdLong;\n //if (!data) data = await axios.get(that.config.dwdWarncellTextUrl);\n const text: any[] = [];\n if (text.length == 0) {\n const dataArray: string[] = data.split('\\n');\n\n dataArray.splice(0, 1);\n dataArray.forEach((element) => {\n const value = element.split(';')[0];\n const cityText = element.split(';')[1];\n //const cityText = element.split(';')[2];\n if (\n value &&\n (value.startsWith('10') ||\n value.startsWith('9') ||\n value.startsWith('8') ||\n value.startsWith('7'))\n ) {\n //if (text) text.push(`${cityText} #${value}`);\n if (text) text.push({ label: cityText, value: value.trim() });\n }\n });\n text.sort((a, b) => {\n const nameA = a.label.toUpperCase(); // ignore upper and lowercase\n const nameB = b.label.toUpperCase(); // ignore upper and lowercase\n if (nameA < nameB) {\n return -1;\n }\n if (nameA > nameB) {\n return 1;\n }\n\n return 0;\n });\n }\n const msg = obj.message;\n if (msg.dwd.length > 2) {\n const result = text.filter(\n (a) =>\n (a.label && a.label.toUpperCase().includes(msg.dwd.toUpperCase())) ||\n (!isNaN(msg.dwd) && Number(a.value) == Number(msg.dwd)),\n );\n //if (result.length == 1) that.config.dwdSelectId = result[0].value;\n\n if (obj.command == 'dwd.name') that.sendTo(obj.from, obj.command, result, obj.callback);\n else if (obj.command == 'dwd.name.text' || obj.command == 'dwd.check')\n that.sendTo(obj.from, obj.command, result.length == 1 ? result[0].label : '', obj.callback);\n //that.log.debug(`ID is is: ${that.config.dwdSelectId}`);\n } else {\n if (obj.command == 'dwd.name.text' || obj.command == 'dwd.check')\n that.sendTo(obj.from, obj.command, '', obj.callback);\n else that.sendTo(obj.from, obj.command, text, obj.callback);\n }\n that.adminTimeoutRef = null;\n }\n }\n}\nif (require.main !== module) {\n // Export the constructor in compact mode\n\n module.exports = (options: WeatherWarnings | undefined) =>\n //@ts-expect-error no idea why options need log\n new WeatherWarnings(options);\n} else {\n // otherwise start the instance directly\n (() => new WeatherWarnings())();\n}\nexport = WeatherWarnings;\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["/*\n * Created with @iobroker/create-adapter v2.5.0\n */\n\n// The adapter-core module gives you access to the core ioBroker functions\n// you need to create an adapter\nimport * as utils from '@iobroker/adapter-core';\nimport io_package from '../io-package.json';\nimport axios from 'axios';\nimport 'source-map-support/register';\nimport { dwdWarncellIdLong } from './lib/def/dwdWarncellIdLong';\nimport { ProviderController } from './lib/provider.js';\nimport { Library } from './lib/library.js';\nimport {\n customFormatedTokens,\n customFormatedTokensJson,\n genericWarntyp,\n genericWarntypeType,\n textLevels,\n} from './lib/def/messages-def';\nimport { messageFilterTypeWithFilter, providerServices, providerServicesArray } from './lib/def/provider-def';\nimport * as NotificationType from './lib/def/notificationService-def';\nimport { notificationServiceDefaults } from './lib/def/notificationConfig-d';\naxios.defaults.timeout = 8000;\n// Load your modules here, e.g.:\n// import * as fs from \"fs\";\n\nclass WeatherWarnings extends utils.Adapter {\n library: Library;\n providerController: ProviderController | null = null;\n numOfRawWarnings: number = 5;\n adminTimeoutRef: any = null;\n public constructor(options: Partial<utils.AdapterOptions> = {}) {\n super({\n ...options,\n name: 'weather-warnings',\n });\n this.on('ready', this.onReady.bind(this));\n this.on('stateChange', this.onStateChange.bind(this));\n this.on('objectChange', this.onObjectChange.bind(this));\n this.on('message', this.onMessage.bind(this));\n this.on('unload', this.onUnload.bind(this));\n this.library = new Library(this);\n this.providerController = new ProviderController(this);\n }\n\n /**\n * Is called when databases are connected and adapter received configuration.\n */\n private async onReady(): Promise<void> {\n if (!this.providerController) {\n throw new Error('Provider controller doesnt exists.');\n }\n this.subscribeForeignObjects('system.config');\n\n // dynamic create of configuration datapoint.\n if (!Array.isArray(this.config.allowedDirs)) this.config.allowedDirs = [];\n let i = 0;\n let change = false;\n let allowedDirsConfig = {};\n while (i++ < 2) {\n const allowedDirs = this.config.allowedDirs;\n\n for (const a in providerServicesArray) {\n let hit = -1;\n for (const b in allowedDirs) {\n if (\n allowedDirs[b].providerService == providerServicesArray[a].replace('Service', '').toUpperCase()\n ) {\n hit = Number(b);\n break;\n }\n }\n if (hit == -1) {\n change = true;\n this.config.allowedDirs.push({\n providerService: providerServicesArray[a].replace('Service', '').toUpperCase(),\n dpWarning: true,\n dpMessage: true,\n dpFormated: true,\n dpAlerts: true,\n });\n }\n //@ts-expect-error dann so\n allowedDirsConfig[providerServicesArray[a]] =\n this.config.allowedDirs[hit == -1 ? this.config.allowedDirs.length - 1 : hit];\n }\n if (providerServicesArray.length != this.config.allowedDirs.length) {\n this.config.allowedDirs = [];\n allowedDirsConfig = {};\n change = false;\n continue;\n }\n break;\n }\n if (change) {\n const obj = await this.getForeignObjectAsync(`system.adapter.${this.name}.${this.instance}`);\n if (obj && obj.native) {\n obj.native.allowedDirs = this.config.allowedDirs;\n await this.setForeignObjectAsync(`system.adapter.${this.name}.${this.instance}`, obj);\n this.log.warn('Fixed configuration for allowed datapoints! ');\n }\n }\n this.providerController.setAllowedDirs(allowedDirsConfig);\n\n setTimeout(\n async function (that: any) {\n const self = that as WeatherWarnings;\n if (!self.providerController) return;\n if (!self) return;\n try {\n //const states = await self.getStatesAsync('*');\n await self.library.init();\n await self.library.initStates(await self.getStatesAsync('*'));\n await self.library.initStates((await self.getChannelsAsync()) as any);\n } catch (error) {\n self.log.error(`catch(1): init error while reading states! ${error}`);\n }\n\n self.providerController.init();\n self.log.info(`Refresh Interval: ${self.providerController.refreshTime / 60000} minutes`);\n\n const notificationServiceOpt: NotificationType.OptionsType = {};\n for (const a in NotificationType.Array) {\n const notificationService = NotificationType.Array[a] as NotificationType.Type;\n if (self.config[(notificationService + '_Enabled') as keyof ioBroker.AdapterConfig]) {\n const service: providerServices[] = [];\n if (self.config[(notificationService + '_DwdEnabled') as keyof ioBroker.AdapterConfig])\n service.push('dwdService');\n if (self.config[(notificationService + '_UwzEnabled') as keyof ioBroker.AdapterConfig])\n service.push('uwzService');\n if (self.config[(notificationService + '_UwzEnabled') as keyof ioBroker.AdapterConfig])\n service.push('zamgService');\n const template: NotificationType.ActionsType = {\n new:\n self.config[(notificationService + '_MessageNew') as keyof ioBroker.AdapterConfig] !==\n undefined\n ? (self.config[\n (notificationService + '_MessageNew') as keyof ioBroker.AdapterConfig\n ] as string)\n : '',\n remove: self.config[\n (notificationService + '_MessageRemove') as keyof ioBroker.AdapterConfig\n ] as string,\n removeAll: self.config[\n (notificationService + '_MessageAllRemove') as keyof ioBroker.AdapterConfig\n ] as string,\n all:\n self.config[(notificationService + '_MessageAll') as keyof ioBroker.AdapterConfig] !==\n undefined\n ? (self.config[\n (notificationService + '_MessageAll') as keyof ioBroker.AdapterConfig\n ] as string)\n : '',\n };\n template.new = template.new ? template.new : 'none';\n template.remove = template.remove ? template.remove : 'none';\n template.removeAll = template.removeAll ? template.removeAll : 'none';\n template.all = template.all ? template.all : 'none';\n // @ts-expect-error keine ahnung :)\n notificationServiceOpt[notificationService] = {\n ...notificationServiceDefaults[notificationService],\n service: service,\n filter: {\n level: self.config[\n (notificationService + '_LevelFilter') as keyof ioBroker.AdapterConfig\n ] as number,\n type: (\n self.config[\n (notificationService + '_TypeFilter') as keyof ioBroker.AdapterConfig\n ] as string[]\n ).map((a) => String(a)),\n },\n adapter: self.config[\n (notificationService + '_Adapter') as keyof ioBroker.AdapterConfig\n ] as string,\n name: notificationService,\n actions: template,\n useadapter: true,\n };\n Object.assign(\n //@ts-expect-error verstehe ich nicht\n notificationServiceOpt[notificationService],\n notificationServiceDefaults[notificationService],\n );\n }\n }\n // hold this for some specialcases\n if (self.config.telegram_Enabled) {\n }\n if (self.config.whatsapp_Enabled) {\n }\n if (self.config.pushover_Enabled) {\n }\n if (self.config.json_Enabled) {\n }\n if (self.config.history_Enabled) {\n }\n if (self.config.email_Enabled && notificationServiceOpt.email != undefined) {\n notificationServiceOpt.email.actions.header = self.config.email_Header;\n notificationServiceOpt.email.actions.footer = self.config.email_Footer;\n }\n\n self.providerController.createNotificationService(notificationServiceOpt);\n\n // dwdSelectID gegen Abfrage pr\u00FCfen und erst dann als valide erkl\u00E4ren.\n for (const a in self.config.dwdwarncellTable) {\n const id = self.config.dwdwarncellTable[a];\n if (self.config.dwdEnabled) {\n if (id.dwdSelectId < 10000 && isNaN(id.dwdSelectId)) {\n self.log.warn(`DWD is activated, but no valid warning cell is configured.`);\n continue;\n }\n const options: messageFilterTypeWithFilter & {\n [key: string]: any;\n } = {\n filter: {\n type: self.config.dwdTypeFilter,\n level: self.config.dwdLevelFilter,\n },\n };\n self.log.info('DWD activated. Retrieve data.');\n self.providerController.createProviderIfNotExist({\n ...options,\n service: 'dwdService',\n customName: id.dwdCityname,\n warncellId: String(id.dwdSelectId),\n providerController: self.providerController,\n language: self.config.dwdLanguage,\n });\n }\n }\n\n for (const a in self.config.zamgwarncellTable) {\n const id = self.config.zamgwarncellTable[a];\n if (self.config.zamgEnabled && id && typeof id.zamgSelectId == 'string') {\n self.log.info('ZAMG activated. Retrieve data.');\n const options: messageFilterTypeWithFilter & {\n [key: string]: any;\n } = {\n filter: { type: self.config.zamgTypeFilter },\n };\n const zamgArr = id.zamgSelectId.split('/') as [string, string];\n if (zamgArr.length == 2) {\n self.providerController.createProviderIfNotExist({\n ...options,\n service: 'zamgService',\n warncellId: zamgArr,\n language: self.config.zamgLanguage,\n providerController: self.providerController,\n customName: id.zamgCityname,\n });\n }\n }\n }\n for (const a in self.config.uwzwarncellTable) {\n const id = self.config.uwzwarncellTable[a];\n if (self.config.uwzEnabled && !!id.uwzSelectId) {\n const options: messageFilterTypeWithFilter = {\n filter: { type: self.config.uwzTypeFilter },\n };\n self.log.info('UWZ activated. Retrieve data.');\n self.providerController.createProviderIfNotExist({\n ...options,\n service: 'uwzService',\n warncellId: 'UWZ' + id.uwzSelectId.toUpperCase(), //UWZ + Land + PLZ\n providerController: self.providerController,\n language: self.config.uwzLanguage,\n customName: id.uwzCityname,\n });\n }\n }\n\n //clear tree\n const holdStates = [];\n for (const a in self.providerController.providers) {\n holdStates.push(self.providerController.providers[a].name);\n }\n await self.library.cleanUpTree(holdStates, 3);\n\n self.providerController.updateEndless(self.providerController);\n self.providerController.updateAlertEndless(self.providerController);\n },\n 4000,\n this,\n );\n }\n\n /**\n * Is called when adapter shuts down - callback has to be called under any circumstances!\n */\n private onUnload(callback: () => void): void {\n try {\n if (this.providerController) this.providerController.delete();\n callback();\n } catch (e) {\n callback();\n }\n }\n\n /**\n * We need this later, dont remove\n */\n // If you need to react to object changes, uncomment the following block and the corresponding line in the constructor.\n // You also need to subscribe to the objects with `this.subscribeObjects`, similar to `this.subscribeStates`.\n // /**\n // * Is called if a subscribed object changes\n // */\n private async onObjectChange(id: string, obj: ioBroker.Object | null | undefined): Promise<void> {\n if (obj) {\n // The object was changed\n if (id == 'system.config') {\n if (await this.library.setLanguage(obj.common.language)) {\n if (this.providerController) this.providerController.updateMesssages();\n }\n }\n }\n }\n\n /**\n * Is called if a subscribed state changes\n */\n private onStateChange(id: string, state: ioBroker.State | null | undefined): void {\n if (!state) return;\n if (state.ack) return;\n }\n\n /**\n * Some message was sent to this instance over message box. Used by email, pushover, text2speech, ...\n * Using this method requires \"common.messagebox\" property to be set to true in io-package.json\n */\n private async onMessage(obj: ioBroker.Message): Promise<void> {\n if (typeof obj === 'object' && obj.message) {\n this.log.debug(`Retrieve ${obj.command} from ${obj.from} message: ${JSON.stringify(obj)}`);\n let connected = true;\n let state;\n switch (String(obj.command)) {\n case 'alexa2_device_ids':\n {\n const data: any[] = [];\n if (obj.message.adapter != 'none') {\n /* Wenn Doku oder testbar dann so:\n const test = await this.getObjectViewAsync('system', 'device', {\n startkey: `${obj.message.adapter}.`,\n endkey: `${obj.message.adapter}.\\u9999`,\n });\n */\n const objs = await this.getForeignObjectsAsync(obj.message.adapter + '.Echo-Devices.*');\n for (const a in objs) {\n if (a.endsWith('.Commands.announcement')) {\n const channel = await this.getForeignObjectAsync(\n a.split('.').slice(0, 4).join('.'),\n );\n data.push({\n value: a.split('.')[3],\n label: channel ? channel.common.name : '',\n });\n }\n }\n }\n\n this.sendTo(obj.from, obj.command, data, obj.callback);\n }\n break;\n\n /** defaults for templates */\n case 'restoreDefault':\n {\n let data: any = {};\n if (obj.message.service == 'template') {\n data = {\n native: {\n templateTable: this.library.cloneGenericObject(io_package.native.templateTable),\n },\n };\n } else {\n data = { native: {} };\n [\n `${obj.message.service}_MessageNew`,\n `${obj.message.service}_MessageRemove`,\n `${obj.message.service}_MessageAllRemove`,\n `${obj.message.service}_MessageAll`,\n ].forEach((a) => {\n data.native[a] = io_package.native[a as keyof typeof io_package.native];\n });\n }\n this.sendTo(obj.from, obj.command, data, obj.callback);\n }\n break;\n case 'Messages':\n {\n if (obj.message.service) {\n const templates = this.config.templateTable;\n const reply = [\n {\n label: `none`,\n value: `none`,\n },\n ];\n for (const a in templates) {\n const t = templates[a];\n if (t.templateKey !== '' && !t.templateKey.startsWith('_')) {\n reply.push({\n label: `${t.templateKey}`,\n value: `${t.templateKey}`,\n });\n }\n }\n this.log.debug(obj.command + ': ' + JSON.stringify(reply));\n this.sendTo(obj.from, obj.command, reply, obj.callback);\n } else {\n this.sendTo(obj.from, obj.command, [], obj.callback);\n this.log.warn(\n `warn(44): Retrieve message with ${obj.command}, but without obj.message.service`,\n );\n }\n }\n\n break;\n case 'notificationService':\n {\n if (obj.message && obj.message.service) {\n const temp: { [key: number]: boolean } = {};\n try {\n const objs = await this.getObjectViewAsync('system', 'instance', {\n startkey: `system.adapter.${obj.message.service}.`,\n endkey: `system.adapter.${obj.message.service}.\\u9999`,\n });\n\n if (objs && objs.rows) {\n for (const a in objs.rows) {\n const instance = Number(objs.rows[a].id.split('.')[3]);\n if (instance !== undefined) {\n temp[instance] = true;\n }\n }\n }\n } catch (error) {\n this.log.error(`error(44): ${error}`);\n }\n\n const reply = [{ label: 'none', value: 'none' }];\n\n for (const t in temp) {\n reply.push({\n label: `${obj.message.service}.${t}`,\n value: `${obj.message.service}.${t}`,\n });\n }\n this.log.debug(obj.command + ': ' + JSON.stringify(reply));\n this.sendTo(obj.from, obj.command, reply, obj.callback);\n }\n }\n break;\n case 'templateHelp':\n if (obj.callback) {\n let reply = 'Tokens: ';\n\n for (const a in customFormatedTokensJson) {\n reply +=\n '${' +\n a +\n '}: ' +\n ((await this.library.getTranslation(\n customFormatedTokensJson[a as keyof customFormatedTokens],\n )) +\n ' - / - ');\n }\n reply = reply.slice(0, -7);\n //this.log.debug(obj.command + ': ' + JSON.stringify(reply));\n this.sendTo(obj.from, obj.command, reply, obj.callback);\n }\n break;\n case 'filterLevel':\n if (obj.callback) {\n const reply = [];\n const text = textLevels.textGeneric;\n for (const a in text) {\n if (Number(a) == 5) break;\n reply.push({\n label: await this.library.getTranslation(\n textLevels.textGeneric[a as keyof typeof text],\n ),\n value: Number(a),\n });\n }\n this.log.debug(obj.command + ': ' + JSON.stringify(reply));\n this.sendTo(obj.from, obj.command, reply, obj.callback);\n }\n break;\n case 'filterType':\n if (obj.callback) {\n const reply = [];\n if (\n obj.message &&\n obj.message.service &&\n providerServicesArray.indexOf(obj.message.service) != -1\n ) {\n const service = obj.message.service as 'dwdService' | 'uwzService' | 'zamgService';\n for (const b in genericWarntyp) {\n const a = Number(b) as keyof genericWarntypeType;\n if (genericWarntyp[a][service] !== undefined && genericWarntyp[a][service].length > 0) {\n reply.push({\n label: await this.library.getTranslation(genericWarntyp[a].name),\n value: a,\n });\n }\n }\n } else if (\n obj.message &&\n obj.message.service &&\n NotificationType.Array.indexOf(obj.message.service) != -1\n ) {\n for (const b in genericWarntyp) {\n const a = Number(b) as keyof genericWarntypeType;\n reply.push({\n label: await this.library.getTranslation(genericWarntyp[a].name),\n value: a,\n });\n }\n }\n this.log.debug(obj.command + ': ' + JSON.stringify(reply));\n this.sendTo(obj.from, obj.command, reply, obj.callback);\n }\n break;\n case 'dwd.name':\n case 'dwd.check':\n case 'dwd.name.text':\n {\n //debounce\n if (this.adminTimeoutRef) {\n this.clearTimeout(this.adminTimeoutRef);\n this.adminTimeoutRef = this.setTimeout(this.dwdWarncellIdLongHelper, 2000, {\n obj: obj,\n that: this,\n });\n } else {\n this.dwdWarncellIdLongHelper({\n obj: obj,\n that: this,\n });\n this.adminTimeoutRef = this.setTimeout(\n (that: any) => (that.adminTimeoutRef = null),\n 2000,\n this,\n );\n }\n }\n break;\n case 'test':\n this.log.debug(`Retrieve test message!`);\n this.sendTo(obj.from, 'test', 'Test Message', obj.callback);\n break;\n /**testing online */\n case 'test-connection':\n if (obj.from !== 'system.adapter.test.0') {\n this.sendTo(obj.from, obj.command, 'Dont use this command!', obj.callback);\n return;\n }\n this.log.debug(`Retrieve test-connection message!`);\n connected = true;\n [\n 'provider.dwd.info.connection',\n 'provider.uwz.info.connection',\n 'provider.zamg.info.connection',\n 'info.connection',\n ].forEach((a) => {\n state = this.library.getdb(a);\n if (state) connected = connected && !!state.val;\n });\n // connected === true is right\n this.sendTo(obj.from, obj.command, connected ? 'true' : 'false', obj.callback);\n break;\n /** testing with testdata and switch then to online */\n case 'test-data':\n if (obj.from !== 'system.adapter.test.0') {\n this.sendTo(obj.from, obj.command, 'Dont use this command!', obj.callback);\n return;\n }\n connected = false;\n [\n 'provider.dwd.info.connection',\n 'provider.uwz.info.connection',\n 'provider.zamg.info.connection',\n 'info.connection',\n ].forEach((a) => {\n state = this.library.getdb(a);\n if (state) connected = connected || !!state.val;\n });\n state = this.library.getdb('provider.activeWarnings');\n if (state) connected = !!connected || !(state.val && Number(state.val) >= 4);\n else connected = true; //error\n // connected === false is right\n this.sendTo(\n obj.from,\n obj.command,\n !connected\n ? 'ok'\n : `connect: ${connected} (false) activeWarnings ${state ? state.val : 'undefined'} (>=4)`,\n obj.callback,\n );\n this.config.useTestWarnings = false;\n break;\n default:\n this.sendTo(obj.from, obj.command, 'unknown message', obj.callback);\n this.log.debug(\n `Retrieve unknown command ${obj.command} messsage: ${JSON.stringify(obj.message)} from ${\n obj.from\n }`,\n );\n }\n }\n }\n dwdWarncellIdLongHelper(obj1: any): void {\n const obj = obj1.obj as ioBroker.Message;\n const that = obj1.that as WeatherWarnings;\n if (obj.callback) {\n const data = dwdWarncellIdLong;\n //if (!data) data = await axios.get(that.config.dwdWarncellTextUrl);\n const text: any[] = [];\n if (text.length == 0) {\n const dataArray: string[] = data.split('\\n');\n\n dataArray.splice(0, 1);\n dataArray.forEach((element) => {\n const value = element.split(';')[0];\n const cityText = element.split(';')[1];\n //const cityText = element.split(';')[2];\n if (\n value &&\n (value.startsWith('10') ||\n value.startsWith('9') ||\n value.startsWith('8') ||\n value.startsWith('7'))\n ) {\n //if (text) text.push(`${cityText} #${value}`);\n if (text) text.push({ label: cityText, value: value.trim() });\n }\n });\n text.sort((a, b) => {\n const nameA = a.label.toUpperCase(); // ignore upper and lowercase\n const nameB = b.label.toUpperCase(); // ignore upper and lowercase\n if (nameA < nameB) {\n return -1;\n }\n if (nameA > nameB) {\n return 1;\n }\n\n return 0;\n });\n }\n const msg = obj.message;\n if (msg.dwd.length > 2) {\n const result = text.filter(\n (a) =>\n (a.label && a.label.toUpperCase().includes(msg.dwd.toUpperCase())) ||\n (!isNaN(msg.dwd) && Number(a.value) == Number(msg.dwd)),\n );\n //if (result.length == 1) that.config.dwdSelectId = result[0].value;\n\n if (obj.command == 'dwd.name') that.sendTo(obj.from, obj.command, result, obj.callback);\n else if (obj.command == 'dwd.name.text' || obj.command == 'dwd.check')\n that.sendTo(obj.from, obj.command, result.length == 1 ? result[0].label : '', obj.callback);\n //that.log.debug(`ID is is: ${that.config.dwdSelectId}`);\n } else {\n if (obj.command == 'dwd.name.text' || obj.command == 'dwd.check')\n that.sendTo(obj.from, obj.command, '', obj.callback);\n else that.sendTo(obj.from, obj.command, text, obj.callback);\n }\n that.adminTimeoutRef = null;\n }\n }\n}\nif (require.main !== module) {\n // Export the constructor in compact mode\n\n module.exports = (options: WeatherWarnings | undefined) =>\n //@ts-expect-error no idea why options need log\n new WeatherWarnings(options);\n} else {\n // otherwise start the instance directly\n (() => new WeatherWarnings())();\n}\nexport = WeatherWarnings;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["axios", "a", "io_package"]
|
|
7
7
|
}
|
package/io-package.json
CHANGED
|
@@ -1,8 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "weather-warnings",
|
|
4
|
-
"version": "0.3.
|
|
4
|
+
"version": "0.3.2",
|
|
5
5
|
"news": {
|
|
6
|
+
"0.3.2": {
|
|
7
|
+
"en": "add alexa volumen",
|
|
8
|
+
"de": "alexa volumen hinzufügen",
|
|
9
|
+
"ru": "добавить alexa volumen",
|
|
10
|
+
"pt": "adicionar volume de alexa",
|
|
11
|
+
"nl": "voeg alexa volume toe",
|
|
12
|
+
"fr": "ajouter alexa volumen",
|
|
13
|
+
"it": "aggiungere alexa volume",
|
|
14
|
+
"es": "añadir alexa volumen",
|
|
15
|
+
"pl": "dodać aleksję",
|
|
16
|
+
"uk": "додати alexa об'єм",
|
|
17
|
+
"zh-cn": "增 编"
|
|
18
|
+
},
|
|
6
19
|
"0.3.1": {
|
|
7
20
|
"en": "added alexa",
|
|
8
21
|
"de": "Hinzugefügt Alexa",
|
|
@@ -80,19 +93,6 @@
|
|
|
80
93
|
"pl": "tłumaczenia\nfiltry ostrzegają typy, typy ostrzegawcze\ntesty wstępne",
|
|
81
94
|
"uk": "більше перекладів\nфільтр попереджає тип, загальні попередження\nбільше тестів",
|
|
82
95
|
"zh-cn": "更多翻译\n战争类型、普通战争类型\n更多的预制试验"
|
|
83
|
-
},
|
|
84
|
-
"0.2.2-alpha1.0": {
|
|
85
|
-
"en": "more CustomTokens,\ntranslations for warntypes, warnlevelcolor,\ntotal active warningcounts\nremove old warnings",
|
|
86
|
-
"de": "mehr CustomTokens,\nübersetzungen für warntypen, warnlevelcolor,\ngesamte aktive warnmeldungsanzahl\nalte warnungen entfernen",
|
|
87
|
-
"ru": "больше CustomTokens,\nпереводы для предупреждений, предупредительного,\nполное активное предупреждение\nудалить старые предупреждения",
|
|
88
|
-
"pt": "mais CustomTokens,\ntraduções para avisotipos, advertlevelcolor,\ntotal de alertas ativos\nremover avisos antigos",
|
|
89
|
-
"nl": "meer Custom Tokens,\nvertaling:,\ntotale actieve waarschuwingscounts\nverwijder oude waarschuwingen",
|
|
90
|
-
"fr": "plus CustomTokens,\ntraductions pour les mises en garde, avertissementlevelcolor,\ntotal des comptes d ' avertissement actifs\nsupprimer les vieux avertissements",
|
|
91
|
-
"it": "più CustomTokens,\ntraduzioni per i tipi di avvertimento, avvertilevelcolor,\ntotali di segnalazione attiva\nrimuovere vecchi avvisi",
|
|
92
|
-
"es": "más CustomTokens,\ntraducción para warntypes, warnlevelcolor,\ntotal active warningcounts\neliminar viejas advertencias",
|
|
93
|
-
"pl": "kliencki,\ntranslacje dla typów ostrzegawczych kolorów,\noficjalna strona ostrzegania\nusunąć stare ostrzeżenia",
|
|
94
|
-
"uk": "більше CustomTokens,\nпереклади для попередженнятипів, попереджають,\nзагальний активний контроль\nвидалити старі попередження",
|
|
95
|
-
"zh-cn": "更加习惯,\n战争原型、战地殖民者的翻译,\n积极警告总数\n取消旧警告"
|
|
96
96
|
}
|
|
97
97
|
},
|
|
98
98
|
"title": "Weather Warnings",
|
|
@@ -290,7 +290,8 @@
|
|
|
290
290
|
"alexa2_Enabled": false,
|
|
291
291
|
"alexa2_MessageNew": "addedPush",
|
|
292
292
|
"alexa2_MessageRemove": "removePush",
|
|
293
|
-
"alexa2_MessageAllRemove": "removeAllPush"
|
|
293
|
+
"alexa2_MessageAllRemove": "removeAllPush",
|
|
294
|
+
"alexa2_volumen": 15
|
|
294
295
|
},
|
|
295
296
|
"objects": [],
|
|
296
297
|
"instanceObjects": []
|