Socket
Socket
Sign inDemoInstall

iobroker.parser

Package Overview
Dependencies
Maintainers
6
Versions
28
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

iobroker.parser - npm Package Compare versions

Comparing version 1.2.1 to 1.3.1

admin/i18n/uk/translations.json

8

admin/i18n/de/translations.json

@@ -42,3 +42,7 @@ {

"temperature": "Temperature",
"value": "Wert"
}
"value": "Wert",
"Request Timeout": "Zeitüberschreitung der Anforderung",
"Request Delay": "Anfrageverzögerung",
"Accept invalid certificates": "Akzeptieren Sie ungültige Zertifikate",
"Use insecure HTTP parser": "Verwenden Sie einen unsicheren HTTP-Parser"
}

@@ -44,4 +44,5 @@ {

"Request Timeout": "Request Timeout",
"Request Delay": "Request Delay",
"Accept invalid certificates": "Accept invalid certificates",
"Use insecure HTTP parser": "Use insecure HTTP parser"
}

@@ -42,3 +42,7 @@ {

"temperature": "la temperatura",
"value": "valor"
}
"value": "valor",
"Request Timeout": "Pide tiempo fuera",
"Request Delay": "Solicitud de retraso",
"Accept invalid certificates": "Aceptar certificados no válidos",
"Use insecure HTTP parser": "Usar analizador HTTP inseguro"
}

@@ -42,3 +42,7 @@ {

"temperature": "la température de",
"value": "valeur"
}
"value": "valeur",
"Request Timeout": "Délai d'expiration de la demande",
"Request Delay": "Délai de demande",
"Accept invalid certificates": "Accepter les certificats invalides",
"Use insecure HTTP parser": "Utiliser un analyseur HTTP non sécurisé"
}

@@ -42,3 +42,7 @@ {

"temperature": "temperatura",
"value": "valore"
}
"value": "valore",
"Request Timeout": "Richiedi timeout",
"Request Delay": "Richiedi ritardo",
"Accept invalid certificates": "Accetta certificati non validi",
"Use insecure HTTP parser": "Usa un parser HTTP non sicuro"
}

@@ -42,3 +42,7 @@ {

"temperature": "temperatuur",
"value": "waarde"
}
"value": "waarde",
"Request Timeout": "Verzoek time-out",
"Request Delay": "Verzoek vertraging",
"Accept invalid certificates": "Accepteer ongeldige certificaten",
"Use insecure HTTP parser": "Gebruik onveilige HTTP-parser"
}

@@ -42,3 +42,7 @@ {

"temperature": "temperatura",
"value": "wartość"
}
"value": "wartość",
"Request Timeout": "Limit czasu żądania",
"Request Delay": "Opóźnienie żądania",
"Accept invalid certificates": "Zaakceptuj nieważne certyfikaty",
"Use insecure HTTP parser": "Użyj niezabezpieczonego parsera HTTP"
}

@@ -42,3 +42,7 @@ {

"temperature": "temperatura",
"value": "valor"
}
"value": "valor",
"Request Timeout": "Solicitar tempo limite",
"Request Delay": "Solicitar atraso",
"Accept invalid certificates": "Aceitar certificados inválidos",
"Use insecure HTTP parser": "Usar analisador HTTP inseguro"
}

@@ -42,3 +42,7 @@ {

"temperature": "температура",
"value": "значение"
}
"value": "значение",
"Request Timeout": "Время ожидания запроса",
"Request Delay": "Запросить задержку",
"Accept invalid certificates": "Принимать недействительные сертификаты",
"Use insecure HTTP parser": "Использовать небезопасный парсер HTTP"
}

@@ -42,3 +42,7 @@ {

"temperature": "温度",
"value": "值"
}
"value": "值",
"Request Timeout": "请求超时",
"Request Delay": "请求延迟",
"Accept invalid certificates": "接受无效证书",
"Use insecure HTTP parser": "使用不安全的 HTTP 解析器"
}

@@ -5,43 +5,47 @@ /*global systemDictionary:true */

systemDictionary = {
"Add rule: ": { "en": "Add rule: ", "de": "Regel hinzufügen: ", "ru": "Добавить правило: ", "pt": "Adicionar regra: ", "nl": "Regel toevoegen: ", "fr": "Ajouter une règle: ", "it": "Aggiungi regola: ", "es": "Agregar regla: ", "pl": "Dodać regułę: ", "zh-cn": "添加规则: "},
"Cancel": { "en": "Cancel", "de": "Abbrechen", "ru": "Отмена", "pt": "Cancelar", "nl": "Annuleren", "fr": "Annuler", "it": "Annulla", "es": "Cancelar", "pl": "Cofnij", "zh-cn": "取消"},
"Default poll interval: ": { "en": "Default poll interval", "de": "Default Poll-Intervall", "ru": "Интервал опроса по умолчанию", "pt": "Padrão intervalo de sondagem", "nl": "Standaard poll interval", "fr": "Par défaut intervalle d'interrogation", "it": "Impostazione predefinita intervallo di polling", "es": "Valor predeterminado intervalo de sondeo", "pl": "Ankieta domyślnie", "zh-cn": "默认的调查间隔时间"},
"Edit: ": { "en": "Edit: ", "de": "Editieren: ", "ru": "Изменить: ", "pt": "Editar: ", "nl": "Edit: ", "fr": "Edit: ", "it": "Modifica: ", "es": "Editar: ", "pl": "Edytuj: ", "zh-cn": "编辑: "},
"Factor": { "en": "Factor", "de": "Faktor", "ru": "Фактор", "pt": "Factor", "nl": "Factor", "fr": "Facteur de", "it": "Fattore di", "es": "Factor de", "pl": "Czynnik", "zh-cn": "因子"},
"Interval": { "en": "Interval", "de": "Intervall", "ru": "Интервал", "pt": "Intervalo de", "nl": "Interval", "fr": "Intervalle de", "it": "Intervallo di", "es": "Intervalo de", "pl": "Interwał", "zh-cn": "时间间隔"},
"Item": { "en": "Item", "de": "Num", "ru": "Номер", "pt": "Item", "nl": "Item", "fr": "Article", "it": "Voce", "es": "Elemento", "pl": "Pkt", "zh-cn": "项目"},
"Name": { "en": "Name", "de": "Name", "ru": "Имя", "pt": "Nome", "nl": "Naam", "fr": "Nom", "it": "Nome", "es": "Nombre", "pl": "Nazwa", "zh-cn": "名称"},
"Offset": { "en": "Offset", "de": "Offset", "ru": "Сдвиг", "pt": "Deslocamento", "nl": "Offset", "fr": "Décalage", "it": "Offset", "es": "Desplazamiento", "pl": "Przesunięcie", "zh-cn": "抵消"},
"Old": { "en": "Old", "de": "Alt", "ru": "Посл.", "pt": "Idade", "nl": "Oud", "fr": "Vieux", "it": "Vecchio", "es": "Viejo", "pl": "Stary", "zh-cn": "旧"},
"Old value": { "en": "Old value", "de": "Letztes Wert", "ru": "Последнее значение", "pt": "Valor antigo", "nl": "Oude waarde", "fr": "L'ancienne valeur", "it": "Il vecchio valore", "es": "Valor antiguo", "pl": "Stare wartość", "zh-cn": "旧价值"},
"Parser adapter settings": { "en": "Parser adapter settings", "de": "Parser Adaptereinstellungen", "ru": "Настройки драйвера Parser", "pt": "Analisador de configurações do adaptador", "nl": "Parser-adapter instellingen", "fr": "Analyseur de paramètres de la carte", "it": "Parser impostazioni della scheda di", "es": "Analizador de configuración de adaptador de", "pl": "Ustawienia karty sieciowej parser ", "zh-cn": "分析器设置适配器"},
"Proxy adapter settings": { "en": "Proxy adapter settings", "de": "Proxy Adapter Einstellungen", "ru": "Настройки Proxy драйвера", "pt": "Configurações do adaptador proxy", "nl": "Proxy-adapterinstellingen", "fr": "Paramètres de l'adaptateur proxy", "it": "Impostazioni dell'adattatore proxy", "es": "Ajustes del adaptador proxy", "pl": "Ustawienia adaptera proxy", "zh-cn": "代理适配器设置"},
"RegEx": { "en": "RegEx", "de": "RegEx", "ru": "RegEx", "pt": "RegEx", "nl": "RegEx", "fr": "RegEx", "it": "RegEx", "es": "RegEx", "pl": "Wyrażenie regularne", "zh-cn": "RegEx"},
"Result": { "en": "Result", "de": "Ergebnis", "ru": "Результат", "pt": "Resultado", "nl": "Resultaat", "fr": "Résultat", "it": "Risultato", "es": "Resultado", "pl": "Wynik", "zh-cn": "结果,"},
"Role": { "en": "Role", "de": "Rolle", "ru": "Роль", "pt": "Papel", "nl": "Rol", "fr": "Rôle", "it": "Ruolo", "es": "Rol", "pl": "Rola", "zh-cn": "作用"},
"Save": { "en": "Save", "de": "Speichern", "ru": "Сохранить", "pt": "Salvar", "nl": "Opslaan", "fr": "Enregistrer", "it": "Salva", "es": "Guardar", "pl": "Zapisz", "zh-cn": "保存"},
"Subs": { "en": "Subs", "de": "Ersatz", "ru": "Subs", "pt": "Sub-rotinas", "nl": "Subs", "fr": "Sous-marins", "it": "Subs", "es": "Subs", "pl": "Ruchy", "zh-cn": "潜艇"},
"Substitute": { "en": "Substitute", "de": "Ersatzwert", "ru": "Substitute", "pt": "Substituto", "nl": "Vervanging", "fr": "Remplacer", "it": "Sostituire", "es": "Sustituto", "pl": "Wymienić", "zh-cn": "替代品"},
"Test text": { "en": "Test text", "de": "Testtext", "ru": "Проверочный текст", "pt": "Texto de teste", "nl": "Test tekst", "fr": "Test de texte", "it": "Testo di prova", "es": "El texto de prueba", "pl": "Testowy tekst", "zh-cn": "测试文本"},
"Type": { "en": "Type", "de": "Typ", "ru": "Тип", "pt": "Tipo", "nl": "Type", "fr": "Type", "it": "Tipo", "es": "Tipo de", "pl": "Typ", "zh-cn": "类型"},
"URL or file name": { "en": "URL or file name", "de": "URL oder Dateiname", "ru": "URL или имя файла", "pt": "URL ou nome de arquivo", "nl": "URL of bestandsnaam", "fr": "URL ou un nom de fichier", "it": "URL o il nome del file", "es": "URL o nombre de archivo", "pl": "Adres URL lub nazwę pliku ", "zh-cn": "网址或文件的名字"},
"Unit": { "en": "Unit", "de": "Einheit", "ru": "Единицы", "pt": "Unidade", "nl": "Eenheid", "fr": "Unité", "it": "Unit", "es": "Unidad", "pl": "Blok", "zh-cn": "单元"},
"blinds": { "en": "blinds", "de": "Rolladen", "ru": "окна", "pt": "persianas", "nl": "blinds", "fr": "les blinds", "it": "bui", "es": "persianas", "pl": "żaluzje", "zh-cn": "百叶窗"},
"boolean": { "en": "boolean", "de": "boolean", "ru": "boolean", "pt": "boolean", "nl": "boolean", "fr": "booléen", "it": "boolean", "es": "boolean", "pl": "logiczne", "zh-cn": "布尔"},
"commaNumber": { "en": "number with comma", "de": "Nummer mit Komma", "ru": "число c запятой", "pt": "número com vírgula", "nl": "een getal met een komma", "fr": "nombre à virgule", "it": "numero con la virgola", "es": "número con coma", "pl": "liczba z przecinkiem", "zh-cn": "数量有逗号"},
"custom": { "en": "custom", "de": "eigener", "ru": "свой", "pt": "personalizado", "nl": "maat", "fr": "personnalisé", "it": "personalizzato", "es": "personalizado", "pl": "zamówienie", "zh-cn": "定义"},
"default": { "en": "default", "de": "default", "ru": "по умолчанию", "pt": "padrão", "nl": "standaard", "fr": "par défaut", "it": "predefinito", "es": "por defecto", "pl": "domyślnie", "zh-cn": "默认的"},
"indicator": { "en": "indicator", "de": "Indikator", "ru": "индикатор", "pt": "indicador", "nl": "indicator", "fr": "indicateur", "it": "indicatore", "es": "indicador", "pl": "wskaźnik", "zh-cn": "指标"},
"info_factor": { "en": "Factor", "de": "Multiplikator", "ru": "Множитель", "pt": "Factor", "nl": "Factor", "fr": "Facteur de", "it": "Fattore di", "es": "Factor de", "pl": "Czynnik", "zh-cn": "因子"},
"info_item": { "en": "The number of the found element, starting from 0", "de": "Die Nummer des gefundenen Elements, beginnend mit 0", "ru": "Номер найденного элемента, начинаясь с 0", "pt": "O número de localizar o elemento, a partir de 0", "nl": "Het nummer van het element, te beginnen vanaf 0", "fr": "Le numéro de l'élément trouvé, à partir de 0", "it": "Il numero dell'elemento, a partire da 0", "es": "El número de los elementos encontrados, empezando desde 0", "pl": "Ilość znalezionego elementu, począwszy od 0", "zh-cn": "该数的元素,从0"},
"info_offset": { "en": "Offset. (Result = regex value * factor + offset)", "de": "Offset. (Ergebnis = regex Wert * Multiplikator + Offset)", "ru": "Сдвиг. (Результат = regex значение * Множитель + сдвиг)", "pt": "Offset. (Resultado = regex valor * fator + offset)", "nl": "Offset. (Resultaat = regex waarde * factor + offset)", "fr": "Décalage. (Résultat = regex valeur * facteur de + offset)", "it": "Offset. (Risultato = regex valore * fattore di + offset)", "es": "El Offset. (Resultado = regex valor * factor + offset)", "pl": "Przesunięcie. (Wynik = wartość regex * współczynnik + przesunięcie)", "zh-cn": "偏移。 (Result=regex值*因素+抵消)"},
"info_substitute": { "en": "Substitute value if nothing found", "de": "Ersatzwert, falls nichts gefunden wurde", "ru": "Значение, если ничего не найдено", "pt": "Valor substituto se nada encontrado", "nl": "Vervangende waarde als er niets gevonden", "fr": "La valeur de repli si rien n'a été trouvé", "it": "Valore sostitutivo, se trovato nulla", "es": "El sustituto de valor si no encontraron nada", "pl": "Wymień wartości, jeśli nic nie znalazłeś", "zh-cn": "替代品的价值,如果没有什么发现"},
"info_substituteOld": { "en": "No value update if it cannot be read", "de": "Kein Wertupdate, falls das Wert nicht gelesen werden kann", "ru": "Не обновлять значение, если невозможно считать", "pt": "Nenhum valor de atualização se ele não pode ser lido", "nl": "Geen waarde update als het niet kan worden gelezen", "fr": "Pas de valeur de mise à jour si elle ne peut pas être lu", "it": "Nessun valore di aggiornamento, se non può essere letto", "es": "No hay ningún valor de actualización si no se puede leer", "pl": "Żadnego znaczenia aktualizację, jeśli nie może być odczytany", "zh-cn": "没有价值的更新,如果它不能被读取"},
"json": { "en": "JSON", "de": "JSON", "ru": "JSON", "pt": "JSON", "nl": "JSON", "fr": "JSON", "it": "JSON", "es": "JSON", "pl": "W JSON", "zh-cn": "JSON"},
"ms": { "en": "ms", "de": "ms", "ru": "мс", "pt": "ms", "nl": "ms", "fr": "ms", "it": "ms", "es": "ms", "pl": "MS", "zh-cn": "ms"},
"number": { "en": "number", "de": "number", "ru": "number", "pt": "número", "nl": "aantal", "fr": "nombre", "it": "numero", "es": "número de", "pl": "ilość", "zh-cn": "数量"},
"string": { "en": "string", "de": "string", "ru": "string", "pt": "cadeia", "nl": "string", "fr": "chaîne", "it": "string", "es": "cadena", "pl": "wiersz", "zh-cn": "字符串"},
"switch": { "en": "switch", "de": "Schalter", "ru": "переключ.", "pt": "mudar", "nl": "switch", "fr": "commutateur", "it": "interruttore", "es": "interruptor de", "pl": "przełącznik", "zh-cn": "开关"},
"temperature": { "en": "temperature", "de": "Temperature", "ru": "температура", "pt": "temperatura", "nl": "temperatuur", "fr": "la température de", "it": "temperatura", "es": "la temperatura", "pl": "temperatura", "zh-cn": "温度"},
"value": { "en": "value", "de": "Wert", "ru": "значение", "pt": "valor", "nl": "waarde", "fr": "valeur", "it": "valore", "es": "valor", "pl": "wartość", "zh-cn": "值"},
"Add rule: ": { "en": "Add rule: ", "de": "Regel hinzufügen: ", "ru": "Добавить правило: ", "pt": "Adicionar regra: ", "nl": "Regel toevoegen: ", "fr": "Ajouter une règle: ", "it": "Aggiungi regola: ", "es": "Agregar regla: ", "pl": "Dodać regułę: ", "uk": "Додати правило:", "zh-cn": "添加规则: "},
"Cancel": { "en": "Cancel", "de": "Abbrechen", "ru": "Отмена", "pt": "Cancelar", "nl": "Annuleren", "fr": "Annuler", "it": "Annulla", "es": "Cancelar", "pl": "Cofnij", "uk": "Скасувати", "zh-cn": "取消"},
"Default poll interval: ": { "en": "Default poll interval", "de": "Default Poll-Intervall", "ru": "Интервал опроса по умолчанию", "pt": "Padrão intervalo de sondagem", "nl": "Standaard poll interval", "fr": "Par défaut intervalle d'interrogation", "it": "Impostazione predefinita intervallo di polling", "es": "Valor predeterminado intervalo de sondeo", "pl": "Ankieta domyślnie", "uk": "Інтервал опитування за замовчуванням", "zh-cn": "默认的调查间隔时间"},
"Edit: ": { "en": "Edit: ", "de": "Editieren: ", "ru": "Изменить: ", "pt": "Editar: ", "nl": "Edit: ", "fr": "Edit: ", "it": "Modifica: ", "es": "Editar: ", "pl": "Edytuj: ", "uk": "Редагувати:", "zh-cn": "编辑: "},
"Factor": { "en": "Factor", "de": "Faktor", "ru": "Фактор", "pt": "Factor", "nl": "Factor", "fr": "Facteur de", "it": "Fattore di", "es": "Factor de", "pl": "Czynnik", "uk": "Фактор", "zh-cn": "因子"},
"Interval": { "en": "Interval", "de": "Intervall", "ru": "Интервал", "pt": "Intervalo de", "nl": "Interval", "fr": "Intervalle de", "it": "Intervallo di", "es": "Intervalo de", "pl": "Interwał", "uk": "Інтервал", "zh-cn": "时间间隔"},
"Item": { "en": "Item", "de": "Num", "ru": "Номер", "pt": "Item", "nl": "Item", "fr": "Article", "it": "Voce", "es": "Elemento", "pl": "Pkt", "uk": "Пункт", "zh-cn": "项目"},
"Name": { "en": "Name", "de": "Name", "ru": "Имя", "pt": "Nome", "nl": "Naam", "fr": "Nom", "it": "Nome", "es": "Nombre", "pl": "Nazwa", "uk": "Ім'я", "zh-cn": "名称"},
"Offset": { "en": "Offset", "de": "Offset", "ru": "Сдвиг", "pt": "Deslocamento", "nl": "Offset", "fr": "Décalage", "it": "Offset", "es": "Desplazamiento", "pl": "Przesunięcie", "uk": "Зсув", "zh-cn": "抵消"},
"Old": { "en": "Old", "de": "Alt", "ru": "Посл.", "pt": "Idade", "nl": "Oud", "fr": "Vieux", "it": "Vecchio", "es": "Viejo", "pl": "Stary", "uk": "Старий", "zh-cn": "旧"},
"Old value": { "en": "Old value", "de": "Letztes Wert", "ru": "Последнее значение", "pt": "Valor antigo", "nl": "Oude waarde", "fr": "L'ancienne valeur", "it": "Il vecchio valore", "es": "Valor antiguo", "pl": "Stare wartość", "uk": "Стара вартість", "zh-cn": "旧价值"},
"Parser adapter settings": { "en": "Parser adapter settings", "de": "Parser Adaptereinstellungen", "ru": "Настройки драйвера Parser", "pt": "Analisador de configurações do adaptador", "nl": "Parser-adapter instellingen", "fr": "Analyseur de paramètres de la carte", "it": "Parser impostazioni della scheda di", "es": "Analizador de configuración de adaptador de", "pl": "Ustawienia karty sieciowej parser ", "uk": "Параметри адаптера аналізатора", "zh-cn": "分析器设置适配器"},
"Proxy adapter settings": { "en": "Proxy adapter settings", "de": "Proxy Adapter Einstellungen", "ru": "Настройки Proxy драйвера", "pt": "Configurações do adaptador proxy", "nl": "Proxy-adapterinstellingen", "fr": "Paramètres de l'adaptateur proxy", "it": "Impostazioni dell'adattatore proxy", "es": "Ajustes del adaptador proxy", "pl": "Ustawienia adaptera proxy", "uk": "Налаштування адаптера проксі", "zh-cn": "代理适配器设置"},
"RegEx": { "en": "RegEx", "de": "RegEx", "ru": "RegEx", "pt": "RegEx", "nl": "RegEx", "fr": "RegEx", "it": "RegEx", "es": "RegEx", "pl": "Wyrażenie regularne", "uk": "RegEx", "zh-cn": "RegEx"},
"Result": { "en": "Result", "de": "Ergebnis", "ru": "Результат", "pt": "Resultado", "nl": "Resultaat", "fr": "Résultat", "it": "Risultato", "es": "Resultado", "pl": "Wynik", "uk": "Результат", "zh-cn": "结果,"},
"Role": { "en": "Role", "de": "Rolle", "ru": "Роль", "pt": "Papel", "nl": "Rol", "fr": "Rôle", "it": "Ruolo", "es": "Rol", "pl": "Rola", "uk": "Роль", "zh-cn": "作用"},
"Save": { "en": "Save", "de": "Speichern", "ru": "Сохранить", "pt": "Salvar", "nl": "Opslaan", "fr": "Enregistrer", "it": "Salva", "es": "Guardar", "pl": "Zapisz", "uk": "зберегти", "zh-cn": "保存"},
"Subs": { "en": "Subs", "de": "Ersatz", "ru": "Subs", "pt": "Sub-rotinas", "nl": "Subs", "fr": "Sous-marins", "it": "Subs", "es": "Subs", "pl": "Ruchy", "uk": "Підп", "zh-cn": "潜艇"},
"Substitute": { "en": "Substitute", "de": "Ersatzwert", "ru": "Substitute", "pt": "Substituto", "nl": "Vervanging", "fr": "Remplacer", "it": "Sostituire", "es": "Sustituto", "pl": "Wymienić", "uk": "Замінник", "zh-cn": "替代品"},
"Test text": { "en": "Test text", "de": "Testtext", "ru": "Проверочный текст", "pt": "Texto de teste", "nl": "Test tekst", "fr": "Test de texte", "it": "Testo di prova", "es": "El texto de prueba", "pl": "Testowy tekst", "uk": "Тестовий текст", "zh-cn": "测试文本"},
"Type": { "en": "Type", "de": "Typ", "ru": "Тип", "pt": "Tipo", "nl": "Type", "fr": "Type", "it": "Tipo", "es": "Tipo de", "pl": "Typ", "uk": "Тип", "zh-cn": "类型"},
"URL or file name": { "en": "URL or file name", "de": "URL oder Dateiname", "ru": "URL или имя файла", "pt": "URL ou nome de arquivo", "nl": "URL of bestandsnaam", "fr": "URL ou un nom de fichier", "it": "URL o il nome del file", "es": "URL o nombre de archivo", "pl": "Adres URL lub nazwę pliku ", "uk": "URL-адреса або ім'я файлу", "zh-cn": "网址或文件的名字"},
"Unit": { "en": "Unit", "de": "Einheit", "ru": "Единицы", "pt": "Unidade", "nl": "Eenheid", "fr": "Unité", "it": "Unit", "es": "Unidad", "pl": "Blok", "uk": "одиниця", "zh-cn": "单元"},
"blinds": { "en": "blinds", "de": "Rolladen", "ru": "окна", "pt": "persianas", "nl": "blinds", "fr": "les blinds", "it": "bui", "es": "persianas", "pl": "żaluzje", "uk": "жалюзі", "zh-cn": "百叶窗"},
"boolean": { "en": "boolean", "de": "boolean", "ru": "boolean", "pt": "boolean", "nl": "boolean", "fr": "booléen", "it": "boolean", "es": "boolean", "pl": "logiczne", "uk": "логічний", "zh-cn": "布尔"},
"commaNumber": { "en": "number with comma", "de": "Nummer mit Komma", "ru": "число c запятой", "pt": "número com vírgula", "nl": "een getal met een komma", "fr": "nombre à virgule", "it": "numero con la virgola", "es": "número con coma", "pl": "liczba z przecinkiem", "uk": "число з комою", "zh-cn": "数量有逗号"},
"custom": { "en": "custom", "de": "eigener", "ru": "свой", "pt": "personalizado", "nl": "maat", "fr": "personnalisé", "it": "personalizzato", "es": "personalizado", "pl": "zamówienie", "uk": "звичай", "zh-cn": "定义"},
"default": { "en": "default", "de": "default", "ru": "по умолчанию", "pt": "padrão", "nl": "standaard", "fr": "par défaut", "it": "predefinito", "es": "por defecto", "pl": "domyślnie", "uk": "за замовчуванням", "zh-cn": "默认的"},
"indicator": { "en": "indicator", "de": "Indikator", "ru": "индикатор", "pt": "indicador", "nl": "indicator", "fr": "indicateur", "it": "indicatore", "es": "indicador", "pl": "wskaźnik", "uk": "індикатор", "zh-cn": "指标"},
"info_factor": { "en": "Factor", "de": "Multiplikator", "ru": "Множитель", "pt": "Factor", "nl": "Factor", "fr": "Facteur de", "it": "Fattore di", "es": "Factor de", "pl": "Czynnik", "uk": "Фактор", "zh-cn": "因子"},
"info_item": { "en": "The number of the found element, starting from 0", "de": "Die Nummer des gefundenen Elements, beginnend mit 0", "ru": "Номер найденного элемента, начинаясь с 0", "pt": "O número de localizar o elemento, a partir de 0", "nl": "Het nummer van het element, te beginnen vanaf 0", "fr": "Le numéro de l'élément trouvé, à partir de 0", "it": "Il numero dell'elemento, a partire da 0", "es": "El número de los elementos encontrados, empezando desde 0", "pl": "Ilość znalezionego elementu, począwszy od 0", "uk": "Номер знайденого елемента, починаючи з 0", "zh-cn": "该数的元素,从0"},
"info_offset": { "en": "Offset. (Result = regex value * factor + offset)", "de": "Offset. (Ergebnis = regex Wert * Multiplikator + Offset)", "ru": "Сдвиг. (Результат = regex значение * Множитель + сдвиг)", "pt": "Offset. (Resultado = regex valor * fator + offset)", "nl": "Offset. (Resultaat = regex waarde * factor + offset)", "fr": "Décalage. (Résultat = regex valeur * facteur de + offset)", "it": "Offset. (Risultato = regex valore * fattore di + offset)", "es": "El Offset. (Resultado = regex valor * factor + offset)", "pl": "Przesunięcie. (Wynik = wartość regex * współczynnik + przesunięcie)", "uk": "Зсув. (Результат = значення регулярного виразу * коефіцієнт + зсув)", "zh-cn": "偏移。 (Result=regex值*因素+抵消)"},
"info_substitute": { "en": "Substitute value if nothing found", "de": "Ersatzwert, falls nichts gefunden wurde", "ru": "Значение, если ничего не найдено", "pt": "Valor substituto se nada encontrado", "nl": "Vervangende waarde als er niets gevonden", "fr": "La valeur de repli si rien n'a été trouvé", "it": "Valore sostitutivo, se trovato nulla", "es": "El sustituto de valor si no encontraron nada", "pl": "Wymień wartości, jeśli nic nie znalazłeś", "uk": "Значення заміни, якщо нічого не знайдено", "zh-cn": "替代品的价值,如果没有什么发现"},
"info_substituteOld": { "en": "No value update if it cannot be read", "de": "Kein Wertupdate, falls das Wert nicht gelesen werden kann", "ru": "Не обновлять значение, если невозможно считать", "pt": "Nenhum valor de atualização se ele não pode ser lido", "nl": "Geen waarde update als het niet kan worden gelezen", "fr": "Pas de valeur de mise à jour si elle ne peut pas être lu", "it": "Nessun valore di aggiornamento, se non può essere letto", "es": "No hay ningún valor de actualización si no se puede leer", "pl": "Żadnego znaczenia aktualizację, jeśli nie może być odczytany", "uk": "Немає оновлення значення, якщо його неможливо прочитати", "zh-cn": "没有价值的更新,如果它不能被读取"},
"json": { "en": "JSON", "de": "JSON", "ru": "JSON", "pt": "JSON", "nl": "JSON", "fr": "JSON", "it": "JSON", "es": "JSON", "pl": "W JSON", "uk": "JSON", "zh-cn": "JSON"},
"ms": { "en": "ms", "de": "ms", "ru": "мс", "pt": "ms", "nl": "ms", "fr": "ms", "it": "ms", "es": "ms", "pl": "MS", "uk": "РС", "zh-cn": "ms"},
"number": { "en": "number", "de": "number", "ru": "number", "pt": "número", "nl": "aantal", "fr": "nombre", "it": "numero", "es": "número de", "pl": "ilość", "uk": "номер", "zh-cn": "数量"},
"string": { "en": "string", "de": "string", "ru": "string", "pt": "cadeia", "nl": "string", "fr": "chaîne", "it": "string", "es": "cadena", "pl": "wiersz", "uk": "рядок", "zh-cn": "字符串"},
"switch": { "en": "switch", "de": "Schalter", "ru": "переключ.", "pt": "mudar", "nl": "switch", "fr": "commutateur", "it": "interruttore", "es": "interruptor de", "pl": "przełącznik", "uk": "перемикач", "zh-cn": "开关"},
"temperature": { "en": "temperature", "de": "Temperature", "ru": "температура", "pt": "temperatura", "nl": "temperatuur", "fr": "la température de", "it": "temperatura", "es": "la temperatura", "pl": "temperatura", "uk": "температура", "zh-cn": "温度"},
"value": { "en": "value", "de": "Wert", "ru": "значение", "pt": "valor", "nl": "waarde", "fr": "valeur", "it": "valore", "es": "valor", "pl": "wartość", "uk": "значення", "zh-cn": "值"},
"Request Timeout": { "en": "Request Timeout", "de": "Zeitüberschreitung der Anforderung", "ru": "Время ожидания запроса", "pt": "Solicitar tempo limite", "nl": "Verzoek time-out", "fr": "Délai d'expiration de la demande", "it": "Richiedi timeout", "es": "Pide tiempo fuera", "pl": "Limit czasu żądania", "uk": "Час очікування запиту минув", "zh-cn": "请求超时"},
"Request Delay": { "en": "Request Delay", "de": "Anfrageverzögerung", "ru": "Запросить задержку", "pt": "Solicitar atraso", "nl": "Verzoek vertraging", "fr": "Délai de demande", "it": "Richiedi ritardo", "es": "Solicitud de retraso", "pl": "Opóźnienie żądania", "uk": "Відстрочка запиту", "zh-cn": "请求延迟"},
"Accept invalid certificates": { "en": "Accept invalid certificates", "de": "Akzeptieren Sie ungültige Zertifikate", "ru": "Принимать недействительные сертификаты", "pt": "Aceitar certificados inválidos", "nl": "Accepteer ongeldige certificaten", "fr": "Accepter les certificats invalides", "it": "Accetta certificati non validi", "es": "Aceptar certificados no válidos", "pl": "Zaakceptuj nieważne certyfikaty", "uk": "Приймати недійсні сертифікати", "zh-cn": "接受无效证书"},
"Use insecure HTTP parser": { "en": "Use insecure HTTP parser", "de": "Verwenden Sie einen unsicheren HTTP-Parser", "ru": "Использовать небезопасный парсер HTTP", "pt": "Usar analisador HTTP inseguro", "nl": "Gebruik onveilige HTTP-parser", "fr": "Utiliser un analyseur HTTP non sécurisé", "it": "Usa un parser HTTP non sicuro", "es": "Usar analizador HTTP inseguro", "pl": "Użyj niezabezpieczonego parsera HTTP", "uk": "Використовувати незахищений аналізатор HTTP", "zh-cn": "使用不安全的 HTTP 解析器"},
};
{
"common": {
"name": "parser",
"version": "1.2.1",
"version": "1.3.1",
"news": {
"1.3.1": {
"en": "added delay option for slow connections\nadded compact mode",
"de": "zusätzliche verzögerungsoption für langsame verbindungen\nkompakter modus",
"ru": "добавлена опция задержки для медленных подключений\nдобавлен компактный режим",
"pt": "opção de atraso adicionado para conexões lentas\nmodo compacto adicionado",
"nl": "vertraagde optie voor langzame connecties\nvoegde compact mode toe",
"fr": "option de retard supplémentaire pour les connexions lente\nen mode compact",
"it": "opzione di ritardo aggiunto per connessioni lente\nmodalità compatta aggiunta",
"es": "opción de retardo añadido para conexiones lentas\nmodo compacto añadido",
"pl": "dodanie opóźnienia\ntryb dodania",
"uk": "доданий варіант затримки для повільних підключень\nдодано компактний режим",
"zh-cn": "延迟联系的选择\n增加合同模式"
},
"1.2.1": {

@@ -16,3 +29,4 @@ "en": "Always use raw response and not try to parse it",

"pl": "Zawsze wykorzystuje surową reakcję i nie starają się ją złożyć",
"zh-cn": "使用原始反应,不试图将其稀释。"
"zh-cn": "使用原始反应,不试图将其稀释。",
"uk": "Завжди використовуйте необроблену відповідь і не намагайтеся її розібрати"
},

@@ -29,3 +43,4 @@ "1.2.0": {

"pl": "Określenie, jeśli podpisywane certyfikaty SSL są ignorowane lub nie (obrona jest ignorowana jak do dziś)\nAllow do specyfikowania, jeśli używa się \"niebezpiecznego HTTP parser\", co umożliwia również implementacje HTTP, które nie są zgodne z specyfikacją\nAllow, aby zdefiniować HTTP żądanie czasu dostępu",
"zh-cn": "请允许我具体说明,如果自我设计/自评的SSL证书遭到忽视或不(现在的意外情况是忽视)\n允许具体说明是否使用了“无保障的HTTP parser”,这也使不符合规格的技术转让中心得以实施。\n允许具体说明海贸总协定要求的时间"
"zh-cn": "请允许我具体说明,如果自我设计/自评的SSL证书遭到忽视或不(现在的意外情况是忽视)\n允许具体说明是否使用了“无保障的HTTP parser”,这也使不符合规格的技术转让中心得以实施。\n允许具体说明海贸总协定要求的时间",
"uk": "Дозволити вказати, чи ігнорувати самопідписані/недійсні сертифікати SSL (за замовчуванням ігнорувати як досі)\nДозволити вказувати, чи використовується «незахищений аналізатор HTTP», який також дозволяє реалізацію HTTP, яка не відповідає специфікаціям\nДозволяє вказати тайм-аут запиту HTTP"
},

@@ -42,3 +57,4 @@ "1.1.8": {

"pl": "Check, że połączenie jest skonfigurowane",
"zh-cn": "核对股"
"zh-cn": "核对股",
"uk": "Перевірте, чи налаштовано посилання"
},

@@ -55,3 +71,4 @@ "1.1.7": {

"pl": "Fixowe przypadki katastrofy (ang.)",
"zh-cn": "Sentry报告的潜在事故"
"zh-cn": "Sentry报告的潜在事故",
"uk": "Виправте потенційні випадки збоїв, про які повідомляє Sentry"
},

@@ -68,3 +85,4 @@ "1.1.6": {

"pl": "Ustaw metodę na „GET” podczas żądania adresów URL",
"zh-cn": "请求 URL 时将方法设置为“GET”"
"zh-cn": "请求 URL 时将方法设置为“GET”",
"uk": "Установіть для методу \"GET\" під час запиту URL-адрес"
},

@@ -81,15 +99,4 @@ "1.1.5": {

"pl": "Ignoruj obiekty bez konfiguracji dla parsera i loguj je",
"zh-cn": "忽略没有解析器配置的对象并记录它"
},
"1.1.4": {
"en": "Fix crash case reported by Sentry",
"de": "Absturzfall behoben, der von Sentry gemeldet wurde",
"ru": "Исправить случай сбоя, о котором сообщил Sentry",
"pt": "Corrigir caso de falha relatado pelo Sentinela",
"nl": "Herstel crashgeval gemeld door Sentry",
"fr": "Correction d'un cas de crash signalé par Sentry",
"it": "Risolto il caso di crash segnalato da Sentry",
"es": "Solucionar caso de bloqueo informado por Sentry",
"pl": "Napraw przypadek awarii zgłoszony przez Sentry",
"zh-cn": "修复 Sentry 报告的崩溃案例"
"zh-cn": "忽略没有解析器配置的对象并记录它",
"uk": "Ігнорувати об’єкти без конфігурації для синтаксичного аналізатора та реєструвати це"
}

@@ -108,3 +115,4 @@ },

"pl": "Analizator składni",
"zh-cn": "分析器"
"zh-cn": "分析器",
"uk": "Парсер"
},

@@ -121,3 +129,4 @@ "desc": {

"pl": "Ten adapter umożliwia wyodrębnianie wartości z adresów URL HTTP lub z plików",
"zh-cn": "这器允许提取价值从HTTP URLs或从文件"
"zh-cn": "这器允许提取价值从HTTP URLs或从文件",
"uk": "Цей адаптер дозволяє отримувати значення з URL-адрес HTTP або з файлів"
},

@@ -158,2 +167,3 @@ "authors": [

},
"compact": true,
"connectionType": "none",

@@ -166,2 +176,3 @@ "dataSource": "poll",

"requestTimeout": "60000",
"requestDelay": "0",
"acceptInvalidCertificates": true,

@@ -168,0 +179,0 @@ "useInsecureHTTPParser": false

@@ -1,3 +0,4 @@

/* jshint -W097 */// jshint strict:false
/*jslint node: true */
/* jshint -W097 */
/* jshint strict: false */
/* jslint node: true */
'use strict';

@@ -7,3 +8,3 @@

const utils = require('@iobroker/adapter-core'); // Get common adapter utils
const adapter = new utils.Adapter('parser');
const adapterName = require('./package.json').name.split('.').pop();
const https = require('https');

@@ -15,71 +16,85 @@ let axios;

// is called if a subscribed state changes
adapter.on('stateChange', (id, state) => {
if (!state || state.ack) return;
let adapter;
// Warning, state can be null if it was deleted
adapter.log.debug('stateChange ' + id + ' ' + JSON.stringify(state));
function startAdapter(options) {
options = options || {};
Object.assign(options, {name: adapterName});
adapter = new utils.Adapter(options);
// output to parser
if (states[id] && states[id].common && states[id].common.write) {
// is called if a subscribed state changes
adapter.on('stateChange', (id, state) => {
if (!state || state.ack) {
return;
}
}
});
// Warning, state can be null if it was deleted
adapter.log.debug(`stateChange ${id} ${JSON.stringify(state)}`);
adapter.on('objectChange', (id, obj) => {
if (!id) return;
if (!obj) {
if (states[id]) {
adapter.log.info(`Parser object ${id} removed`);
deletePoll(states[id]);
delete states[id];
// output to parser
if (states[id] && states[id].common && states[id].common.write) {
}
} else {
if (!obj.native) {
adapter.log.warn(`No configuration for ${obj._id}, ignoring it`);
});
adapter.on('objectChange', (id, obj) => {
if (!id) {
return;
}
if (!obj) {
if (states[id]) {
adapter.log.info(`Parser object ${id} removed`);
deletePoll(states[id]);
delete states[id];
}
} else {
if (!obj.native) {
adapter.log.warn(`No configuration for ${obj._id}, ignoring it`);
return;
}
if (!obj.native.interval) obj.native.interval = adapter.config.pollInterval;
obj.native.interval = parseInt(obj.native.interval, 10);
obj.native.interval = parseInt(obj.native.interval || adapter.config.pollInterval, 10);
if (!states[id]) {
adapter.log.info(`Parser object ${id} added`);
adapter.getState(id, (err, state) => {
states[id] = obj;
states[id].value = state || {val: null};
if (initPoll(states[id], false)) {
poll(timers[obj.native.interval].interval); // new timer, so start initially once
if (!states[id]) {
adapter.log.info(`Parser object ${id} added`);
adapter.getState(id, (err, state) => {
states[id] = obj;
states[id].value = state || {val: null};
if (initPoll(states[id], false)) {
poll(timers[obj.native.interval].interval); // new timer, so start initially once
}
});
} else {
if (states[id].native.interval !== obj.native.interval) {
adapter.log.info(`Parser object ${id} interval changed`);
deletePoll(states[id]);
states[id] = Object.assign(states[id], obj);
initPoll(states[id], false);
} else {
adapter.log.debug(`Parser object ${id} updated`);
states[id] = Object.assign(states[id], obj);
initPoll(states[id], true);
}
});
} else {
if (states[id].native.interval !== obj.native.interval) {
adapter.log.info(`Parser object ${id} interval changed`);
deletePoll(states[id]);
states[id] = Object.assign(states[id], obj);
initPoll(states[id], false);
} else {
adapter.log.debug(`Parser object ${id} updated`);
states[id] = Object.assign(states[id], obj);
initPoll(states[id], true);
}
}
}
});
});
adapter.on('message', obj => {
if (obj) {
switch (obj.command) {
case 'link':
if (obj.callback) {
// read all found serial ports
readLink(obj.message, (err, text) =>
adapter.sendTo(obj.from, obj.command, {error: err, text: text}, obj.callback)
);
}
break;
adapter.on('message', obj => {
if (obj) {
switch (obj.command) {
case 'link':
if (obj.callback) {
// read all found serial ports
readLink(obj.message, (err, text) =>
adapter.sendTo(obj.from, obj.command, {error: err, text: text}, obj.callback));
}
break;
}
}
}
});
});
adapter.on('ready', main);
return adapter;
}
function initPoll(obj, onlyUpdate) {

@@ -91,6 +106,5 @@ if (!obj.native) {

if (!obj.native.interval) obj.native.interval = adapter.config.pollInterval;
obj.native.interval = obj.native.interval || adapter.config.pollInterval;
obj.native.regex = obj.native.regex || '.+';
if (!obj.native.regex) obj.native.regex = '.+';
if (obj.native.regex[0] === '/') {

@@ -143,3 +157,5 @@ obj.native.regex = obj.native.regex.substring(1, obj.native.regex.length - 1);

function deletePoll(obj) {
if (timers[obj.native.interval] === undefined) return;
if (timers[obj.native.interval] === undefined) {
return;
}
timers[obj.native.interval].count--;

@@ -151,3 +167,2 @@ if (!timers[obj.native.interval].count) {

}
adapter.on('ready', main);

@@ -192,3 +207,3 @@ function _analyseDataForStates(linkStates, data, error, callback) {

sticky: 'y',
unicode: 'u'
unicode: 'u',
};

@@ -327,5 +342,8 @@

function isRemoteLink(link) {
return link.match(/^https?:\/\//);
}
async function readLink(link, callback) {
if (link.match(/^https?:\/\//)) {
if (isRemoteLink(link)) {
axios = axios || require('axios');

@@ -356,5 +374,5 @@

if (link[0] !== '/' && !link.match(/^[A-Za-z]:/)) {
link = path.normalize(__dirname + '/../../' + link);
link = path.normalize(`${__dirname}/../../${link}`);
}
adapter.log.debug('Read file: ' + link);
adapter.log.debug(`Read file: ${link}`);
if (fs.existsSync(link)) {

@@ -365,3 +383,3 @@ let data;

} catch (e) {
adapter.log.warn('Cannot read file "' + link + '": ' + e);
adapter.log.warn(`Cannot read file "${link}": ${e}`);
callback(e, null, link);

@@ -377,2 +395,57 @@ return;

// Keep a per-host queue for remote requests
const hostnamesQueue = [];
const hostnamesRequestTime = [];
function processRemoteQueue(hostname) {
hostnamesRequestTime[hostname] = Date.now();
readLink(hostnamesQueue[hostname][0].link, hostnamesQueue[hostname][0].callback);
}
function addToRemoteQueue(link, callback) {
adapter.log.debug(`Queue ${link}`);
const url = new URL(link);
if (!(url.hostname in hostnamesQueue)) {
// No queue object yet, make one
adapter.log.debug(`Creating request queue for ${url.hostname}`);
hostnamesQueue[url.hostname] = [];
}
const requestQueue = hostnamesQueue[url.hostname];
requestQueue.push({
link: link,
callback: callback
});
if (requestQueue.length === 1) {
// First item in queue, process it. Otherwise, will get done when current request is removed.
processRemoteQueue(url.hostname);
}
}
function removeFromRemoteQueue(link) {
adapter.log.debug(`Dequeue ${link}`);
const url = new URL(link);
const requestQueue = hostnamesQueue[url.hostname];
// Remove first entry (should be the request that just finished)
requestQueue.shift();
// And process next request if there is one
if (requestQueue.length > 0) {
// Make sure correct delay has passed or wait until for that point
const delay = Date.now() - hostnamesRequestTime[url.hostname];
adapter.log.debug(`Next delay for ${url.hostname} is ${delay}`);
if (delay < adapter.config.requestDelay) {
adapter.setTimeout(processRemoteQueue, delay, url.hostname);
} else {
// Request already took longer than timeout so start instantly.
// Issue a warning because this means delay is probably too short.
adapter.log.warn(`No delay before next request to ${url.hostname}`);
processRemoteQueue(url.hostname);
}
} else {
adapter.log.debug(`Request queue for ${url.hostname} is now empty`);
}
}
function poll(interval, callback) {

@@ -384,3 +457,5 @@ let id;

for (id in states) {
if (!states.hasOwnProperty(id)) continue;
if (!states.hasOwnProperty(id)) {
continue;
}
if (states[id].native.interval === interval && (states[id].processed || states[id].processed === undefined)) {

@@ -394,7 +469,19 @@ states[id].processed = false;

}
adapter.log.debug('States for current Interval (' + interval + '): ' + JSON.stringify(curStates));
adapter.log.debug(`States for current Interval (${interval}): ${JSON.stringify(curStates)}`);
for (let j = 0; j < curLinks.length; j++) {
adapter.log.debug('Do Link: ' + curLinks[j]);
readLink(curLinks[j], (error, text, link) => analyseDataForStates(curStates, link, text, error, callback));
const thisLink = curLinks[j];
adapter.log.debug(`Do Link: ${thisLink}`);
if (isRemoteLink(thisLink) && adapter.config.requestDelay) {
// Queue handler...
addToRemoteQueue(thisLink, (error, text, link) => {
// Remove from queue before performing actual analyse callback
removeFromRemoteQueue(link);
analyseDataForStates(curStates, link, text, error, callback)
});
} else {
// Just read it instantly
readLink(thisLink, (error, text, link) => analyseDataForStates(curStates, link, text, error, callback));
}
}

@@ -408,5 +495,6 @@ }

adapter.config.requestTimeout = parseInt(adapter.config.requestTimeout, 10) || 60000;
adapter.config.requestDelay = parseInt(adapter.config.requestDelay, 10) || 0;
// read current existing objects (прочитать текущие существующие объекты)
adapter.getForeignObjects(adapter.namespace + '.*', 'state', (err, _states) => {
adapter.getForeignObjects(`${adapter.namespace}.*`, 'state', (err, _states) => {
if (err) {

@@ -418,5 +506,5 @@ adapter.log.error('Cannot get objects: ' + err.message);

states = _states;
adapter.getForeignStates(adapter.namespace + '.*', (err, values) => {
adapter.getForeignStates(`${adapter.namespace}.*`, (err, values) => {
if (err) {
adapter.log.error('Cannot get state values: ' + err.message);
adapter.log.error(`Cannot get state values: ${err.message}`);
adapter.stop();

@@ -431,3 +519,5 @@ return;

for (const id in states) {
if (!states.hasOwnProperty(id)) continue;
if (!states.hasOwnProperty(id)) {
continue;
}

@@ -447,1 +537,9 @@ states[id].value = values[id] || {val: null};

}
// If started as allInOne/compact mode => return function to create instance
if (module && module.parent) {
module.exports = startAdapter;
} else {
// or start the instance directly
startAdapter();
}
{
"name": "iobroker.parser",
"version": "1.2.1",
"version": "1.3.1",
"description": "Parses web pages and files for values.",

@@ -23,3 +23,3 @@ "author": {

"axios": "^0.27.2",
"@iobroker/adapter-core": "^2.6.2"
"@iobroker/adapter-core": "^2.6.7"
},

@@ -30,5 +30,5 @@ "devDependencies": {

"@alcalzone/release-script-plugin-license": "^3.5.9",
"@iobroker/dev-server": "^0.5.0",
"@iobroker/adapter-dev": "^1.0.1",
"mocha": "^9.2.2",
"@iobroker/dev-server": "^0.6.0",
"@iobroker/adapter-dev": "^1.2.0",
"mocha": "^10.1.0",
"chai": "^4.3.6"

@@ -40,2 +40,9 @@ },

"main": "main.js",
"files": [
"admin/",
"docs/",
"main.js",
"LICENSE",
"io-package.json"
],
"scripts": {

@@ -47,5 +54,6 @@ "test": "node node_modules/mocha/bin/mocha --exit",

"release-major": "release-script major --yes",
"translate": "translate-adapter"
"translate": "translate-adapter",
"i18n2words": "node words.js"
},
"license": "MIT"
}
![Logo](admin/parser.png)
ioBroker parser adapter
=================
# ioBroker parser adapter
![Number of Installations](http://iobroker.live/badges/parser-installed.svg)

@@ -27,10 +27,17 @@ ![Number of Installations](http://iobroker.live/badges/parser-stable.svg)

### 3. Accept invalid certificates
### 3. Delay between requests
Specify how long the adapter waits between making HTTP requests when performing remote queries. Useful when retrieving data from slow hosts or over slow connections to avoid overloading either one. Zero (default) means no delay.
This delay is on a per-host basis. If remote queries are configured to fetch from multiple remote hosts each host will be queried in parallel.
The delay is a minimum value between initiating each request. I.e. if a query takes longer than this delay parameter to be read, the next will start instantly the read completes.
### 4. Accept invalid certificates
Specify if self-signed/invalid SSL/TLS certificates are accepted or declined when doing HTTPS requests
### 4. Use insecure HTTP parser
### 5. Use insecure HTTP parser
Specify to use an insecure HTTP parser that accepts invalid HTTP headers. This may allow interoperability with non-conformant HTTP implementations.
Using the insecure parser should be avoided.
### 5. Table
### 6. Table
Click the "Plus" button to add a new entry to the table.

@@ -44,7 +51,7 @@

- ***Name*** - name of state that is being created under `parser.<instance number>`. Spaces are not allowed. You can use dots "." as separator to create sub folders. Example: `Shares.Microsoft.Current` will result in `parser.<instance number>.Shares.Micosoft.Current`.
- ***URL or file name*** - either an URL of a website or the path to a file of which we want to retrieve information. Examples `https://darksky.net/forecast/48.1371,11.5754/si24/de` (weather information Munich), or `/opt/iobroker/test/testdata.txt` (file from within ioBroker).
- ***URL or file name*** - either a URL of a website or the path to a file of which we want to retrieve information. Examples `https://darksky.net/forecast/48.1371,11.5754/si24/de` (weather information Munich), or `/opt/iobroker/test/testdata.txt` (file from within ioBroker).
- ***RegEx*** - regular expression, how to extract data from link. There is a good service to test regula expressions: [regex101](https://regex101.com/). E.g. *temp swip">(-?\d+)˚<* for the line above.
- ***Item*** (German: "Num") - a regex can find (match) multiple entries. With this option you can define which match to be chosen. 0 = first match, 1 = second match, 2 = third match, etc. Default is 0 (first match).
- ***Role*** - one of the roles:
- custom - user defines itself via *admin" the role
- custom - user defines itself via *admin* the role
- temperature - the value is temperature

@@ -61,3 +68,3 @@ - value - the value is a number (e.g. dimmer)

- ***Factor/Offset*** (for "Type" numbers only) - allows to modify the retrieved data prior to set into the state:
*calculated value* = *extracted value* * factor + offset , to make immediately modifications of value
- *calculated value* = *extracted value* * factor + offset , to make immediately modifications of value
- ***Interval*** - poll interval in ms (milliseconds). If blank or 0, the default poll interval will be used. Please see further information above.

@@ -74,4 +81,2 @@

*Note:* While applying regex to the retrieved URL/file data, all line breaks will be replaced with spaces to allow multi-line search.

@@ -88,3 +93,2 @@

### Examples

@@ -107,3 +111,2 @@ - *.at* matches any three-character string ending with "at", including "hat", "cat", and "bat".

### Other useful expressions
- (-?\d+) get number (both negative and positive numbers)

@@ -114,3 +117,2 @@ - [+-]?([0-9]+.?[0-9]|.[0-9]+) get a number with decimal places (and . as decimal separator)

## Quality codes
Values can have quality codes:

@@ -122,7 +124,13 @@ - 0 - OK

## Support
1. General: [ioBroker Forum](https://forum.iobroker.net/). German speaking users: see [ioBroker forum thread Parser-Adapter](https://forum.iobroker.net/topic/4494/adapter-parser-regex).
2. In case of any issues, please check out [ioBroker Parser Adapter: Github Issues](https://github.com/ioBroker/ioBroker.parser/issues).
1. General: [ioBroker Forum](https://forum.iobroker.net/). German-speaking users: see [ioBroker forum thread Parser-Adapter](https://forum.iobroker.net/topic/4494/adapter-parser-regex).
2. In case of any issues, please check out [ioBroker Parser Adapter: GitHub Issues](https://github.com/ioBroker/ioBroker.parser/issues).
<!--
### **WORK IN PROGRESS**
-->
## Changelog
### 1.3.1 (2022-11-09)
* (raintonr) added delay option for slow connections
* (bluefox) added compact mode
## Changelog
### 1.2.1 (2022-09-15)

@@ -129,0 +137,0 @@ * (Apollon77) Always use raw response and not try to parse it

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc