iobroker.device-watcher
Advanced tools
Comparing version 2.0.1 to 2.0.2
{ | ||
"device-watcher adapter settings": "Adaptereinstellungen für device-watcher", | ||
"option1": "Option 1", | ||
"option2": "Option 2", | ||
"device-watcher adapter settings": "Adaptereinstellungen für Device-Watcher", | ||
"Choose devices to watch": "Wählen Sie Geräte zum Ansehen aus", | ||
@@ -55,6 +53,7 @@ "Other Settings": "Andere Einstellungen", | ||
"Add own notes, name, etc": "Fügen Sie eigene Notizen, Namen usw. hinzu", | ||
"List only devices with battery": "Nur Geräte mit Akku auflisten", | ||
"Choose if only devices with battery should be listed or all devices": "Wählen Sie, ob nur Geräte mit Akku aufgelistet werden sollen oder alle Geräte", | ||
"List only devices with batteries": "Nur Geräte mit Batterien auflisten", | ||
"Choose if only devices with batteries should be listed or all devices": "Wählen Sie, ob nur Geräte mit Batterien aufgelistet werden sollen oder alle Geräte", | ||
"Offline Time": "Offline-Zeit", | ||
"Here you can choose the offline time of devices for each adapter, the device is considered offline after the specified time, if set to '-1', the adapter will use the datapoint available, reachable, alive etc when the device has one of these.": "Hier können Sie die Offline-Zeit der Geräte für jeden Adapter auswählen, das Gerät gilt nach der angegebenen Zeit als offline, wenn auf '-1' gesetzt, verwendet der Adapter den Datenpunkt verfügbar, erreichbar, am Leben usw., wenn das Gerät einen davon hat ", | ||
"Here you can define the offline times of each adapter. If you want to use the data points of the devices (online, available, reachable etc.) directly to determine the status, enter '-1'.": "Hier können Sie die Offline-Zeiten jedes Adapters definieren. Wenn Sie die Datenpunkte der Geräte (online, verfügbar, erreichbar etc.) direkt zur Statusermittlung verwenden möchten, geben Sie '-1' ein.", | ||
"Here you can define the offline times of each adapter. If you want to use the data points of the devices (online, available, reachable etc.) directly to determine the status, enter ' 0 '.": "Hier können Sie die Offline-Zeiten jedes Adapters definieren. Wenn Sie die Datenpunkte der Geräte (online, verfügbar, erreichbar etc.) direkt zur Statusermittlung nutzen möchten, geben Sie '0' ein.", | ||
"Choose the day(s) where you want to get the message of low battery:": "Wählen Sie den/die Tag(e), an dem/denen Sie die Meldung über schwache Batterie erhalten möchten:", | ||
@@ -70,11 +69,9 @@ "Offline message": "Offline-Nachricht", | ||
"Use the true value of the signal strength, or it is converted to %": "Verwenden Sie den wahren Wert der Signalstärke oder konvertieren Sie ihn in %", | ||
"Here you can define the offline times of each adapter. If you want to use the data points of the devices (online, available, reachable etc.) directly to determine the status, enter '-1'.": "Hier können Sie die offline Zeiten von jedem Adapter definieren. Falls Sie direkt die Datenpunkte der Geräte (online, available, reachable usw.) nutzen wollen um den Status zu ermitteln, tragen sie '-1' ein.", | ||
"Create additionally HTML lists": "Erstellen Sie zusätzlich HTML-Listen", | ||
"Create the lists also in HTML": "Erstellen Sie die Listen auch in HTML", | ||
"Daily overview of offline devices": "Tägliche Übersicht über Offline-Geräte", | ||
"Get daily an overview with all offline devices": "Erhalten Sie täglich einen Überblick mit allen Offline-Geräten", | ||
"Get daily an overview with all offline devices": "Verschaffen Sie sich täglich einen Überblick mit allen Offline-Geräten", | ||
"Update-Interval": "Updateintervall", | ||
"Here you can define the update interval of the datapoints/lists. For performance reasons, it is not recommended to select a poll value that is too low. Lower than two seconds is not selectable.": "Hier können Sie das Aktualisierungsintervall für die Datenpunkte/Listen festlegen. Aus Leistungsgründen ist es nicht empfehlenswert, einen zu niedrigen Poll-Wert zu wählen. Kleiner als zwei Sekunden ist nicht wählbar.", | ||
"Here you can define the update interval of the datapoints/lists. For performance reasons, it is not recommended to select a poll value that is too low. Lower than two seconds is not selectable.": "Hier können Sie das Aktualisierungsintervall der Datenpunkte/Listen festlegen. Aus Performance-Gründen wird davon abgeraten, einen zu niedrigen Poll-Wert zu wählen. Weniger als zwei Sekunden sind nicht wählbar.", | ||
"Overview of offline devices": "Übersicht der Offline-Geräte", | ||
"Get an overview with all offline devices": "Verschaffen Sie sich einen Überblick mit allen Offline-Geräten", | ||
"Choose the day(s) where you want to get the overview of offline devices:": "Wählen Sie die Tage aus, an denen Sie die Übersicht über Offline-Geräte erhalten möchten:", | ||
@@ -81,0 +78,0 @@ "Choose the Time:": "Wählen Sie die Zeit:", |
@@ -53,6 +53,7 @@ { | ||
"Add own notes, name, etc": "Add own notes, name, etc", | ||
"List only devices with battery": "List only devices with battery", | ||
"Choose if only devices with battery should be listed or all devices": "Choose if only devices with battery should be listed or all devices", | ||
"List only devices with batteries": "List only devices with batteries", | ||
"Choose if only devices with batteries should be listed or all devices": "Choose if only devices with batteries should be listed or all devices", | ||
"Offline Time": "Offline Time", | ||
"Here you can define the offline times of each adapter. If you want to use the data points of the devices (online, available, reachable etc.) directly to determine the status, enter '-1'.":"Here you can define the offline times of each adapter. If you want to use the data points of the devices (online, available, reachable etc.) directly to determine the status, enter '-1'.", | ||
"Here you can define the offline times of each adapter. If you want to use the data points of the devices (online, available, reachable etc.) directly to determine the status, enter ' 0 '.": "Here you can define the offline times of each adapter. If you want to use the data points of the devices (online, available, reachable etc.) directly to determine the status, enter ' 0 '.", | ||
"Choose the day(s) where you want to get the message of low battery:": "Choose the day(s) where you want to get the message of low battery:", | ||
@@ -59,0 +60,0 @@ "Offline message":"Offline message", |
{ | ||
"device-watcher adapter settings": "Ajustes del adaptador para device-watcher", | ||
"option1": "Opción 1", | ||
"option2": "opcion 2", | ||
"device-watcher adapter settings": "Configuración del adaptador para el observador de dispositivos", | ||
"Choose devices to watch": "Elige dispositivos para mirar", | ||
@@ -55,6 +53,7 @@ "Other Settings": "Otros ajustes", | ||
"Add own notes, name, etc": "Agregar notas propias, nombre, etc.", | ||
"List only devices with battery": "Listar solo dispositivos con batería", | ||
"Choose if only devices with battery should be listed or all devices": "Elija si solo deben aparecer en la lista los dispositivos con batería o todos los dispositivos", | ||
"List only devices with batteries": "Listar solo dispositivos con baterías", | ||
"Choose if only devices with batteries should be listed or all devices": "Elija si solo deben aparecer en la lista los dispositivos con baterías o todos los dispositivos", | ||
"Offline Time": "Tiempo fuera de línea", | ||
"Here you can choose the offline time of devices for each adapter, the device is considered offline after the specified time, if set to '-1', the adapter will use the datapoint available, reachable, alive etc when the device has one of these.": "Aquí puede elegir el tiempo fuera de línea de los dispositivos para cada adaptador, el dispositivo se considera fuera de línea después del tiempo especificado, si se establece en '-1', el adaptador utilizará el punto de datos disponible, accesible, vivo, etc. cuando el dispositivo tenga uno de estos ", | ||
"Here you can define the offline times of each adapter. If you want to use the data points of the devices (online, available, reachable etc.) directly to determine the status, enter '-1'.": "Aquí puede definir los tiempos fuera de línea de cada adaptador. Si desea utilizar los puntos de datos de los dispositivos (en línea, disponibles, accesibles, etc.) directamente para determinar el estado, ingrese '-1'.", | ||
"Here you can define the offline times of each adapter. If you want to use the data points of the devices (online, available, reachable etc.) directly to determine the status, enter ' 0 '.": "Aquí puede definir los tiempos fuera de línea de cada adaptador. Si desea utilizar los puntos de datos de los dispositivos (en línea, disponibles, accesibles, etc.) directamente para determinar el estado, ingrese ' 0 '.", | ||
"Choose the day(s) where you want to get the message of low battery:": "Elige el/los día(s) en los que quieres recibir el mensaje de batería baja:", | ||
@@ -70,3 +69,2 @@ "Offline message": "Mensaje fuera de línea", | ||
"Use the true value of the signal strength, or it is converted to %": "Utilice el valor real de la intensidad de la señal, o se convierte a %", | ||
"Here you can define the offline times of each adapter. If you want to use the data points of the devices (online, available, reachable etc.) directly to determine the status, enter '-1'.": "Aquí puede definir los tiempos fuera de línea de cada adaptador. ", | ||
"Create additionally HTML lists": "Crear listas HTML adicionales", | ||
@@ -77,5 +75,4 @@ "Create the lists also in HTML": "Crea las listas también en HTML", | ||
"Update-Interval": "Intervalo de actualización", | ||
"Here you can define the update interval of the datapoints/lists. For performance reasons, it is not recommended to select a poll value that is too low. Lower than two seconds is not selectable.": "Aquí puede definir el intervalo de actualización de los puntos de datos/listas. ", | ||
"Here you can define the update interval of the datapoints/lists. For performance reasons, it is not recommended to select a poll value that is too low. Lower than two seconds is not selectable.": "Aquí puede definir el intervalo de actualización de los puntos de datos/listas. Por motivos de rendimiento, no se recomienda seleccionar un valor de sondeo demasiado bajo. Menos de dos segundos no es seleccionable.", | ||
"Overview of offline devices": "Descripción general de los dispositivos fuera de línea", | ||
"Get an overview with all offline devices": "Obtenga una descripción general con todos los dispositivos fuera de línea", | ||
"Choose the day(s) where you want to get the overview of offline devices:": "Elija los días en los que desea obtener la descripción general de los dispositivos sin conexión:", | ||
@@ -82,0 +79,0 @@ "Choose the Time:": "Elige la hora:", |
{ | ||
"device-watcher adapter settings": "Paramètres d'adaptateur pour device-watcher", | ||
"option1": "Option 1", | ||
"option2": "Option 2", | ||
"device-watcher adapter settings": "Paramètres de l'adaptateur pour l'observateur d'appareils", | ||
"Choose devices to watch": "Choisissez les appareils à regarder", | ||
@@ -55,6 +53,7 @@ "Other Settings": "Autres réglages", | ||
"Add own notes, name, etc": "Ajoutez vos propres notes, nom, etc.", | ||
"List only devices with battery": "Répertorier uniquement les appareils avec batterie", | ||
"Choose if only devices with battery should be listed or all devices": "Choisissez si seuls les appareils avec batterie doivent être répertoriés ou tous les appareils", | ||
"List only devices with batteries": "Répertorier uniquement les appareils équipés de batteries", | ||
"Choose if only devices with batteries should be listed or all devices": "Choisissez si seuls les appareils avec batteries doivent être répertoriés ou tous les appareils", | ||
"Offline Time": "Temps hors ligne", | ||
"Here you can choose the offline time of devices for each adapter, the device is considered offline after the specified time, if set to '-1', the adapter will use the datapoint available, reachable, alive etc when the device has one of these.": "Ici, vous pouvez choisir le temps hors ligne des appareils pour chaque adaptateur, l'appareil est considéré comme hors ligne après le temps spécifié, s'il est défini sur '-1', l'adaptateur utilisera le point de données disponible, accessible, vivant, etc. lorsque l'appareil en a un ", | ||
"Here you can define the offline times of each adapter. If you want to use the data points of the devices (online, available, reachable etc.) directly to determine the status, enter '-1'.": "Ici, vous pouvez définir les heures hors ligne de chaque adaptateur. Si vous souhaitez utiliser directement les points de données des appareils (en ligne, disponibles, joignables, etc.) pour déterminer l'état, entrez '-1'.", | ||
"Here you can define the offline times of each adapter. If you want to use the data points of the devices (online, available, reachable etc.) directly to determine the status, enter ' 0 '.": "Ici, vous pouvez définir les heures hors ligne de chaque adaptateur. Si vous souhaitez utiliser directement les points de données des appareils (en ligne, disponibles, joignables, etc.) pour déterminer l'état, entrez ' 0 '.", | ||
"Choose the day(s) where you want to get the message of low battery:": "Choisissez le(s) jour(s) où vous souhaitez recevoir le message de batterie faible :", | ||
@@ -70,3 +69,2 @@ "Offline message": "Message hors ligne", | ||
"Use the true value of the signal strength, or it is converted to %": "Utilisez la vraie valeur de la force du signal, ou elle est convertie en %", | ||
"Here you can define the offline times of each adapter. If you want to use the data points of the devices (online, available, reachable etc.) directly to determine the status, enter '-1'.": "Ici, vous pouvez définir les heures hors ligne de chaque adaptateur. ", | ||
"Create additionally HTML lists": "Créer des listes HTML supplémentaires", | ||
@@ -77,5 +75,4 @@ "Create the lists also in HTML": "Créez les listes aussi en HTML", | ||
"Update-Interval": "Intervalle de mise à jour", | ||
"Here you can define the update interval of the datapoints/lists. For performance reasons, it is not recommended to select a poll value that is too low. Lower than two seconds is not selectable.": "Ici, vous pouvez définir l'intervalle de mise à jour des points de données/listes. ", | ||
"Here you can define the update interval of the datapoints/lists. For performance reasons, it is not recommended to select a poll value that is too low. Lower than two seconds is not selectable.": "Ici, vous pouvez définir l'intervalle de mise à jour des points de données/listes. Pour des raisons de performances, il est déconseillé de sélectionner une valeur d'interrogation trop faible. Inférieur à deux secondes n'est pas sélectionnable.", | ||
"Overview of offline devices": "Aperçu des appareils hors ligne", | ||
"Get an overview with all offline devices": "Obtenez une vue d'ensemble avec tous les appareils hors ligne", | ||
"Choose the day(s) where you want to get the overview of offline devices:": "Choisissez le(s) jour(s) où vous souhaitez obtenir l'aperçu des appareils hors ligne :", | ||
@@ -82,0 +79,0 @@ "Choose the Time:": "Choisissez l'heure :", |
{ | ||
"device-watcher adapter settings": "Impostazioni dell'adattatore per device-watcher", | ||
"option1": "opzione 1", | ||
"option2": "opzione 2", | ||
"device-watcher adapter settings": "Impostazioni dell'adattatore per dispositivo-watcher", | ||
"Choose devices to watch": "Scegli i dispositivi da guardare", | ||
@@ -55,6 +53,7 @@ "Other Settings": "Altre impostazioni", | ||
"Add own notes, name, etc": "Aggiungi le proprie note, nome, ecc", | ||
"List only devices with battery": "Elenca solo i dispositivi con batteria", | ||
"Choose if only devices with battery should be listed or all devices": "Scegli se devono essere elencati solo i dispositivi con batteria o tutti i dispositivi", | ||
"List only devices with batteries": "Elenca solo i dispositivi con batterie", | ||
"Choose if only devices with batteries should be listed or all devices": "Scegli se devono essere elencati solo i dispositivi con batterie o tutti i dispositivi", | ||
"Offline Time": "Tempo offline", | ||
"Here you can choose the offline time of devices for each adapter, the device is considered offline after the specified time, if set to '-1', the adapter will use the datapoint available, reachable, alive etc when the device has one of these.": "Qui puoi scegliere il tempo offline dei dispositivi per ciascun adattatore, il dispositivo è considerato offline dopo il tempo specificato, se impostato su '-1', l'adattatore utilizzerà il punto dati disponibile, raggiungibile, attivo ecc. quando il dispositivo ha uno di questi ", | ||
"Here you can define the offline times of each adapter. If you want to use the data points of the devices (online, available, reachable etc.) directly to determine the status, enter '-1'.": "Qui puoi definire i tempi offline di ciascun adattatore. Se si desidera utilizzare direttamente i punti dati dei dispositivi (online, disponibili, raggiungibili ecc.) per determinare lo stato, immettere '-1'.", | ||
"Here you can define the offline times of each adapter. If you want to use the data points of the devices (online, available, reachable etc.) directly to determine the status, enter ' 0 '.": "Qui puoi definire i tempi offline di ciascun adattatore. Se si desidera utilizzare direttamente i punti dati dei dispositivi (online, disponibili, raggiungibili ecc.) per determinarne lo stato, immettere ' 0 '.", | ||
"Choose the day(s) where you want to get the message of low battery:": "Scegli i giorni in cui desideri ricevere il messaggio di batteria scarica:", | ||
@@ -70,3 +69,2 @@ "Offline message": "Messaggio offline", | ||
"Use the true value of the signal strength, or it is converted to %": "Usa il vero valore della potenza del segnale, oppure viene convertito in %", | ||
"Here you can define the offline times of each adapter. If you want to use the data points of the devices (online, available, reachable etc.) directly to determine the status, enter '-1'.": "Qui puoi definire i tempi offline di ciascun adattatore. ", | ||
"Create additionally HTML lists": "Crea elenchi HTML aggiuntivi", | ||
@@ -77,5 +75,4 @@ "Create the lists also in HTML": "Crea le liste anche in HTML", | ||
"Update-Interval": "Intervallo di aggiornamento", | ||
"Here you can define the update interval of the datapoints/lists. For performance reasons, it is not recommended to select a poll value that is too low. Lower than two seconds is not selectable.": "Qui è possibile definire l'intervallo di aggiornamento dei punti dati/elenchi. ", | ||
"Here you can define the update interval of the datapoints/lists. For performance reasons, it is not recommended to select a poll value that is too low. Lower than two seconds is not selectable.": "Qui è possibile definire l'intervallo di aggiornamento dei punti dati/elenchi. Per motivi di prestazioni, non è consigliabile selezionare un valore di polling troppo basso. Meno di due secondi non è selezionabile.", | ||
"Overview of offline devices": "Panoramica dei dispositivi offline", | ||
"Get an overview with all offline devices": "Ottieni una panoramica di tutti i dispositivi offline", | ||
"Choose the day(s) where you want to get the overview of offline devices:": "Scegli i giorni in cui desideri ottenere la panoramica dei dispositivi offline:", | ||
@@ -82,0 +79,0 @@ "Choose the Time:": "Scegli l'ora:", |
{ | ||
"device-watcher adapter settings": "Adapterinstellingen voor device-watcher", | ||
"option1": "Optie 1", | ||
"option2": "Optie 2", | ||
"device-watcher adapter settings": "Adapterinstellingen voor apparaat-watcher", | ||
"Choose devices to watch": "Kies apparaten om naar te kijken", | ||
@@ -55,6 +53,7 @@ "Other Settings": "Andere instellingen", | ||
"Add own notes, name, etc": "Voeg eigen notities, naam, enz. toe", | ||
"List only devices with battery": "Alleen apparaten met batterij weergeven", | ||
"Choose if only devices with battery should be listed or all devices": "Kies of alleen apparaten met batterij moeten worden vermeld of alle apparaten", | ||
"List only devices with batteries": "Alleen apparaten met batterijen weergeven", | ||
"Choose if only devices with batteries should be listed or all devices": "Kies of alleen apparaten met batterijen moeten worden vermeld of alle apparaten", | ||
"Offline Time": "Offline tijd", | ||
"Here you can choose the offline time of devices for each adapter, the device is considered offline after the specified time, if set to '-1', the adapter will use the datapoint available, reachable, alive etc when the device has one of these.": "Hier kunt u de offline tijd van apparaten voor elke adapter kiezen, het apparaat wordt na de opgegeven tijd als offline beschouwd, indien ingesteld op '-1', zal de adapter het beschikbare, bereikbare, actieve enz. gebruiken wanneer het apparaat een van deze heeft ", | ||
"Here you can define the offline times of each adapter. If you want to use the data points of the devices (online, available, reachable etc.) directly to determine the status, enter '-1'.": "Hier kunt u de offline tijden van elke adapter definiëren. Wil je de datapunten van de apparaten (online, beschikbaar, bereikbaar etc.) direct gebruiken om de status te bepalen, vul dan '-1' in.", | ||
"Here you can define the offline times of each adapter. If you want to use the data points of the devices (online, available, reachable etc.) directly to determine the status, enter ' 0 '.": "Hier kunt u de offline tijden van elke adapter definiëren. Wil je de datapunten van de apparaten (online, beschikbaar, bereikbaar etc.) direct gebruiken om de status te bepalen, vul dan '0' in.", | ||
"Choose the day(s) where you want to get the message of low battery:": "Kies de dag(en) waarop u de melding batterij bijna leeg wilt krijgen:", | ||
@@ -70,3 +69,2 @@ "Offline message": "Offline bericht", | ||
"Use the true value of the signal strength, or it is converted to %": "Gebruik de werkelijke waarde van de signaalsterkte, of het wordt geconverteerd naar %", | ||
"Here you can define the offline times of each adapter. If you want to use the data points of the devices (online, available, reachable etc.) directly to determine the status, enter '-1'.": "Hier kunt u de offline tijden van elke adapter definiëren. ", | ||
"Create additionally HTML lists": "Extra HTML-lijsten maken", | ||
@@ -77,5 +75,4 @@ "Create the lists also in HTML": "Maak de lijsten ook in HTML aan", | ||
"Update-Interval": "Bijwerkingsonderbreking", | ||
"Here you can define the update interval of the datapoints/lists. For performance reasons, it is not recommended to select a poll value that is too low. Lower than two seconds is not selectable.": "Hier kunt u het update-interval van de datapunten/lijsten definiëren. ", | ||
"Here you can define the update interval of the datapoints/lists. For performance reasons, it is not recommended to select a poll value that is too low. Lower than two seconds is not selectable.": "Hier kunt u het update-interval van de datapunten/lijsten definiëren. Om prestatieredenen wordt het niet aanbevolen om een te lage poll-waarde te selecteren. Lager dan twee seconden kan niet worden geselecteerd.", | ||
"Overview of offline devices": "Overzicht van offline apparaten", | ||
"Get an overview with all offline devices": "Krijg een overzicht met alle offline apparaten", | ||
"Choose the day(s) where you want to get the overview of offline devices:": "Kies de dag(en) waarop je het overzicht van offline apparaten wilt zien:", | ||
@@ -82,0 +79,0 @@ "Choose the Time:": "Kies de tijd:", |
{ | ||
"device-watcher adapter settings": "Ustawienia adaptera dla device-watcher", | ||
"option1": "opcja 1", | ||
"option2": "Opcja 2", | ||
"device-watcher adapter settings": "Ustawienia adaptera dla obserwatora urządzenia", | ||
"Choose devices to watch": "Wybierz urządzenia do oglądania", | ||
@@ -55,6 +53,7 @@ "Other Settings": "Inne ustawienia", | ||
"Add own notes, name, etc": "Dodaj własne notatki, imię itp.", | ||
"List only devices with battery": "Wyświetlaj tylko urządzenia z baterią", | ||
"Choose if only devices with battery should be listed or all devices": "Wybierz, czy mają być wyświetlane tylko urządzenia z baterią, czy wszystkie urządzenia", | ||
"List only devices with batteries": "Wymień tylko urządzenia z bateriami", | ||
"Choose if only devices with batteries should be listed or all devices": "Wybierz, czy mają być wymienione tylko urządzenia z bateriami, czy wszystkie urządzenia", | ||
"Offline Time": "Czas offline", | ||
"Here you can choose the offline time of devices for each adapter, the device is considered offline after the specified time, if set to '-1', the adapter will use the datapoint available, reachable, alive etc when the device has one of these.": "Tutaj możesz wybrać czas offline urządzeń dla każdego adaptera, urządzenie jest uznawane za offline po określonym czasie, jeśli jest ustawione na „-1”, adapter użyje dostępnego, osiągalnego, aktywnego punktu danych itp., gdy urządzenie ma jeden z tych punktów ", | ||
"Here you can define the offline times of each adapter. If you want to use the data points of the devices (online, available, reachable etc.) directly to determine the status, enter '-1'.": "Tutaj możesz zdefiniować czasy offline każdego adaptera. Jeśli chcesz wykorzystać punkty danych urządzeń (online, dostępne, osiągalne itp.) bezpośrednio do określenia stanu, wpisz „-1”.", | ||
"Here you can define the offline times of each adapter. If you want to use the data points of the devices (online, available, reachable etc.) directly to determine the status, enter ' 0 '.": "Tutaj możesz zdefiniować czasy offline każdego adaptera. Jeśli chcesz wykorzystać punkty danych urządzeń (online, dostępne, osiągalne itp.) bezpośrednio do określenia stanu, wpisz „0”.", | ||
"Choose the day(s) where you want to get the message of low battery:": "Wybierz dzień lub dni, w których chcesz otrzymać komunikat o niskim poziomie baterii:", | ||
@@ -70,11 +69,9 @@ "Offline message": "Wiadomość offline", | ||
"Use the true value of the signal strength, or it is converted to %": "Użyj prawdziwej wartości siły sygnału lub jest konwertowane na %", | ||
"Here you can define the offline times of each adapter. If you want to use the data points of the devices (online, available, reachable etc.) directly to determine the status, enter '-1'.": "Tutaj możesz zdefiniować czasy offline każdego adaptera. ", | ||
"Create additionally HTML lists": "Utwórz dodatkowo listy HTML", | ||
"Create the lists also in HTML": "Twórz listy również w HTML", | ||
"Daily overview of offline devices": "Codzienny przegląd urządzeń offline", | ||
"Get daily an overview with all offline devices": "Otrzymuj codziennie przegląd na wszystkich urządzeniach offline", | ||
"Get daily an overview with all offline devices": "Otrzymuj codziennie przegląd wszystkich urządzeń offline", | ||
"Update-Interval": "Interwał aktualizacji", | ||
"Here you can define the update interval of the datapoints/lists. For performance reasons, it is not recommended to select a poll value that is too low. Lower than two seconds is not selectable.": "Tutaj możesz zdefiniować interwał aktualizacji punktów danych/list. ", | ||
"Here you can define the update interval of the datapoints/lists. For performance reasons, it is not recommended to select a poll value that is too low. Lower than two seconds is not selectable.": "Tutaj możesz zdefiniować interwał aktualizacji punktów danych/list. Ze względu na wydajność nie zaleca się wybierania zbyt niskiej wartości sondy. Nie można wybrać mniej niż dwie sekundy.", | ||
"Overview of offline devices": "Przegląd urządzeń offline", | ||
"Get an overview with all offline devices": "Uzyskaj przegląd wszystkich urządzeń offline", | ||
"Choose the day(s) where you want to get the overview of offline devices:": "Wybierz dni, w których chcesz uzyskać przegląd urządzeń offline:", | ||
@@ -81,0 +78,0 @@ "Choose the Time:": "Wybierz czas:", |
{ | ||
"device-watcher adapter settings": "Configurações do adaptador para device-watcher", | ||
"option1": "Opção 1", | ||
"option2": "opção 2", | ||
"device-watcher adapter settings": "Configurações do adaptador para observador de dispositivo", | ||
"Choose devices to watch": "Escolha dispositivos para assistir", | ||
@@ -27,3 +25,3 @@ "Other Settings": "Outros ajustes", | ||
"Pushover Instance": "Instância pushover", | ||
"Please choose the pushover instance": "Escolha a instância pushover", | ||
"Please choose the pushover instance": "Por favor, escolha a instância pushover", | ||
"Device-ID (optional)": "ID do dispositivo (opcional)", | ||
@@ -56,6 +54,7 @@ "Choose your device": "Escolha seu dispositivo", | ||
"Add own notes, name, etc": "Adicione notas próprias, nome, etc.", | ||
"List only devices with battery": "Listar apenas dispositivos com bateria", | ||
"Choose if only devices with battery should be listed or all devices": "Escolha se apenas os dispositivos com bateria devem ser listados ou todos os dispositivos", | ||
"List only devices with batteries": "Listar apenas dispositivos com baterias", | ||
"Choose if only devices with batteries should be listed or all devices": "Escolha se apenas os dispositivos com baterias devem ser listados ou todos os dispositivos", | ||
"Offline Time": "Tempo off-line", | ||
"Here you can choose the offline time of devices for each adapter, the device is considered offline after the specified time, if set to '-1', the adapter will use the datapoint available, reachable, alive etc when the device has one of these.": "Aqui você pode escolher o tempo off-line dos dispositivos para cada adaptador, o dispositivo é considerado off-line após o tempo especificado, se definido como '-1', o adaptador usará o datapoint disponível, alcançável, ativo etc quando o dispositivo tiver um desses ", | ||
"Here you can define the offline times of each adapter. If you want to use the data points of the devices (online, available, reachable etc.) directly to determine the status, enter '-1'.": "Aqui você pode definir os tempos offline de cada adaptador. Se você quiser usar os pontos de dados dos dispositivos (online, disponíveis, alcançáveis etc.) diretamente para determinar o status, digite '-1'.", | ||
"Here you can define the offline times of each adapter. If you want to use the data points of the devices (online, available, reachable etc.) directly to determine the status, enter ' 0 '.": "Aqui você pode definir os tempos offline de cada adaptador. Se você quiser usar os pontos de dados dos dispositivos (online, disponíveis, alcançáveis etc.) diretamente para determinar o status, digite ' 0 '.", | ||
"Choose the day(s) where you want to get the message of low battery:": "Escolha o(s) dia(s) em que deseja receber a mensagem de bateria fraca:", | ||
@@ -67,7 +66,6 @@ "Offline message": "Mensagem off-line", | ||
"Choose your notification services": "Escolha seus serviços de notificação", | ||
"If you like to have for every Adapter an own folder with own data": "Se você gosta de ter para cada Adaptador uma pasta própria com dados próprios", | ||
"If you like to have for every Adapter an own folder with own data": "Se você gosta de ter para cada adaptador uma pasta própria com dados próprios", | ||
"Please choose": "Por favor escolha", | ||
"Create own folders for each adapter": "Crie pastas próprias para cada adaptador", | ||
"Use the true value of the signal strength, or it is converted to %": "Use o valor real da força do sinal, ou é convertido em %", | ||
"Here you can define the offline times of each adapter. If you want to use the data points of the devices (online, available, reachable etc.) directly to determine the status, enter '-1'.": "Aqui você pode definir os tempos offline de cada adaptador. ", | ||
"Use the true value of the signal strength, or it is converted to %": "Use o valor real da força do sinal, ou é convertido para %", | ||
"Create additionally HTML lists": "Crie listas HTML adicionais", | ||
@@ -78,5 +76,4 @@ "Create the lists also in HTML": "Crie as listas também em HTML", | ||
"Update-Interval": "Intervalo de atualização", | ||
"Here you can define the update interval of the datapoints/lists. For performance reasons, it is not recommended to select a poll value that is too low. Lower than two seconds is not selectable.": "Aqui você pode definir o intervalo de atualização dos pontos de dados/listas. ", | ||
"Here you can define the update interval of the datapoints/lists. For performance reasons, it is not recommended to select a poll value that is too low. Lower than two seconds is not selectable.": "Aqui você pode definir o intervalo de atualização dos pontos de dados/listas. Por motivos de desempenho, não é recomendável selecionar um valor de sondagem muito baixo. Inferior a dois segundos não é selecionável.", | ||
"Overview of offline devices": "Visão geral de dispositivos off-line", | ||
"Get an overview with all offline devices": "Obtenha uma visão geral com todos os dispositivos offline", | ||
"Choose the day(s) where you want to get the overview of offline devices:": "Escolha o(s) dia(s) em que deseja obter a visão geral dos dispositivos offline:", | ||
@@ -83,0 +80,0 @@ "Choose the Time:": "Escolha o Horário:", |
{ | ||
"device-watcher adapter settings": "Настройки адаптера для device-watcher", | ||
"option1": "Опция 1", | ||
"option2": "вариант 2", | ||
"device-watcher adapter settings": "Настройки адаптера для устройства-наблюдателя", | ||
"Choose devices to watch": "Выберите устройства для просмотра", | ||
@@ -55,6 +53,7 @@ "Other Settings": "Другие настройки", | ||
"Add own notes, name, etc": "Добавляйте собственные заметки, имя и т. д.", | ||
"List only devices with battery": "Список только устройств с аккумулятором", | ||
"Choose if only devices with battery should be listed or all devices": "Выберите, должны ли быть перечислены только устройства с аккумулятором или все устройства", | ||
"List only devices with batteries": "Список только устройств с батареями", | ||
"Choose if only devices with batteries should be listed or all devices": "Выберите, должны ли быть перечислены только устройства с батареями или все устройства", | ||
"Offline Time": "Время автономной работы", | ||
"Here you can choose the offline time of devices for each adapter, the device is considered offline after the specified time, if set to '-1', the adapter will use the datapoint available, reachable, alive etc when the device has one of these.": "Здесь вы можете выбрать время автономной работы устройств для каждого адаптера, устройство считается отключенным по истечении указанного времени, если установлено значение «-1», адаптер будет использовать доступную точку данных, доступную, активную и т. д., когда устройство имеет один из этих ", | ||
"Here you can define the offline times of each adapter. If you want to use the data points of the devices (online, available, reachable etc.) directly to determine the status, enter '-1'.": "Здесь вы можете определить время автономной работы каждого адаптера. Если вы хотите использовать точки данных устройств (в сети, доступны, доступны и т. д.) непосредственно для определения статуса, введите «-1».", | ||
"Here you can define the offline times of each adapter. If you want to use the data points of the devices (online, available, reachable etc.) directly to determine the status, enter ' 0 '.": "Здесь вы можете определить время автономной работы каждого адаптера. Если вы хотите использовать точки данных устройств (в сети, доступны, доступны и т. д.) непосредственно для определения статуса, введите «0».", | ||
"Choose the day(s) where you want to get the message of low battery:": "Выберите день (дни), когда вы хотите получать сообщение о низком заряде батареи:", | ||
@@ -70,3 +69,2 @@ "Offline message": "Офлайн сообщение", | ||
"Use the true value of the signal strength, or it is converted to %": "Используйте истинное значение уровня сигнала или преобразуйте его в %", | ||
"Here you can define the offline times of each adapter. If you want to use the data points of the devices (online, available, reachable etc.) directly to determine the status, enter '-1'.": "Здесь вы можете определить время автономной работы каждого адаптера. ", | ||
"Create additionally HTML lists": "Создание дополнительных HTML-списков", | ||
@@ -77,5 +75,4 @@ "Create the lists also in HTML": "Создавайте списки также в HTML", | ||
"Update-Interval": "Интервал обновления", | ||
"Here you can define the update interval of the datapoints/lists. For performance reasons, it is not recommended to select a poll value that is too low. Lower than two seconds is not selectable.": "Здесь вы можете определить интервал обновления точек данных/списков. ", | ||
"Here you can define the update interval of the datapoints/lists. For performance reasons, it is not recommended to select a poll value that is too low. Lower than two seconds is not selectable.": "Здесь вы можете определить интервал обновления точек данных/списков. Из соображений производительности не рекомендуется выбирать слишком низкое значение опроса. Меньше двух секунд выбрать нельзя.", | ||
"Overview of offline devices": "Обзор автономных устройств", | ||
"Get an overview with all offline devices": "Получите обзор всех автономных устройств", | ||
"Choose the day(s) where you want to get the overview of offline devices:": "Выберите день (дни), когда вы хотите получить обзор автономных устройств:", | ||
@@ -82,0 +79,0 @@ "Choose the Time:": "Выберите время:", |
{ | ||
"device-watcher adapter settings": "device-watcher的适配器设置", | ||
"option1": "选项1", | ||
"option2": "选项2", | ||
"device-watcher adapter settings": "设备观察器的适配器设置", | ||
"Choose devices to watch": "选择要观看的设备", | ||
@@ -55,6 +53,7 @@ "Other Settings": "其他设置", | ||
"Add own notes, name, etc": "添加自己的注释、姓名等", | ||
"List only devices with battery": "仅列出带电池的设备", | ||
"Choose if only devices with battery should be listed or all devices": "选择是否应仅列出带电池的设备或所有设备", | ||
"List only devices with batteries": "仅列出带电池的设备", | ||
"Choose if only devices with batteries should be listed or all devices": "选择是否应仅列出带电池的设备或所有设备", | ||
"Offline Time": "离线时间", | ||
"Here you can choose the offline time of devices for each adapter, the device is considered offline after the specified time, if set to '-1', the adapter will use the datapoint available, reachable, alive etc when the device has one of these.": "在这里可以为每个适配器选择设备的离线时间,设备在指定时间后被认为离线,如果设置为'-1',当设备有其中之一时,适配器将使用可用的数据点,可达的,活着的等", | ||
"Here you can define the offline times of each adapter. If you want to use the data points of the devices (online, available, reachable etc.) directly to determine the status, enter '-1'.": "您可以在此处定义每个适配器的离线时间。如果您想直接使用设备的数据点(在线、可用、可达等)来确定状态,请输入“-1”。", | ||
"Here you can define the offline times of each adapter. If you want to use the data points of the devices (online, available, reachable etc.) directly to determine the status, enter ' 0 '.": "您可以在此处定义每个适配器的离线时间。如果要直接使用设备的数据点(在线、可用、可达等)来确定状态,请输入“0”。", | ||
"Choose the day(s) where you want to get the message of low battery:": "选择您希望收到电池电量不足消息的日期:", | ||
@@ -70,11 +69,9 @@ "Offline message": "离线留言", | ||
"Use the true value of the signal strength, or it is converted to %": "使用信号强度的真实值,或者转换为%", | ||
"Here you can define the offline times of each adapter. If you want to use the data points of the devices (online, available, reachable etc.) directly to determine the status, enter '-1'.": "您可以在此处定义每个适配器的离线时间。", | ||
"Create additionally HTML lists": "额外创建 HTML 列表", | ||
"Create the lists also in HTML": "也在 HTML 中创建列表", | ||
"Daily overview of offline devices": "离线设备的每日概览", | ||
"Daily overview of offline devices": "离线设备每日概览", | ||
"Get daily an overview with all offline devices": "每天获取所有离线设备的概览", | ||
"Update-Interval": "更新间隔", | ||
"Here you can define the update interval of the datapoints/lists. For performance reasons, it is not recommended to select a poll value that is too low. Lower than two seconds is not selectable.": "您可以在此处定义数据点/列表的更新间隔。", | ||
"Here you can define the update interval of the datapoints/lists. For performance reasons, it is not recommended to select a poll value that is too low. Lower than two seconds is not selectable.": "您可以在此处定义数据点/列表的更新间隔。出于性能原因,不建议选择太低的轮询值。低于两秒是不可选的。", | ||
"Overview of offline devices": "离线设备概述", | ||
"Get an overview with all offline devices": "了解所有离线设备", | ||
"Choose the day(s) where you want to get the overview of offline devices:": "选择您想要获取离线设备概览的日期:", | ||
@@ -81,0 +78,0 @@ "Choose the Time:": "选择时间:", |
{ | ||
"i18n": true, | ||
"type": "tabs", | ||
"items": { | ||
"_options": { | ||
"type": "panel", | ||
"label": "Options", | ||
"items": { | ||
"_headerDevices": { | ||
"type": "header", | ||
"text": "Choose devices to watch", | ||
"size": 2 | ||
}, | ||
"alexa2Devices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Alexa2" | ||
}, | ||
"bleDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Ble" | ||
}, | ||
"deconzDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Deconz" | ||
}, | ||
"enoceanDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Enocean" | ||
}, | ||
"esphomeDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "EspHome" | ||
}, | ||
"fritzdectDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "FritzDect" | ||
}, | ||
"hamDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Ham" | ||
}, | ||
"harmonyDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Harmony" | ||
}, | ||
"hmiPDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "HmiP" | ||
}, | ||
"hmrpcDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "HM-RPC" | ||
}, | ||
"hs100Devices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "hs100" | ||
}, | ||
"hueDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Hue" | ||
}, | ||
"hueExtDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Hue Extended" | ||
}, | ||
"jeelinkDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Jeelink" | ||
}, | ||
"lupusecDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Lupusec" | ||
}, | ||
"maxcubeDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Maxcube" | ||
}, | ||
"merossDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Meross" | ||
}, | ||
"mihomeDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "MiHome" | ||
}, | ||
"mihomeVacuumDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "MiHome Vacuum" | ||
}, | ||
"netatmoDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Netatmo" | ||
}, | ||
"nukiExtDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Nuki Extended" | ||
}, | ||
"nutDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Nut" | ||
}, | ||
"pingDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Ping" | ||
}, | ||
"roombaDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Roomba" | ||
}, | ||
"shellyDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Shelly" | ||
}, | ||
"sonoffDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Sonoff" | ||
}, | ||
"sonosDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Sonos" | ||
}, | ||
"switchbotBleDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Switchbot Ble" | ||
}, | ||
"tadoDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Tado" | ||
}, | ||
"tradfriDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Tradfri" | ||
}, | ||
"unifiDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Unifi" | ||
}, | ||
"wledDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "WLED" | ||
}, | ||
"yeelightDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Yeelight-2" | ||
}, | ||
"zigbeeDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Zigbee" | ||
}, | ||
"zigbee2mqttDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Zigbee2MQTT" | ||
}, | ||
"zwaveDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Zwave" | ||
} | ||
} | ||
}, | ||
"_notifications": { | ||
"type": "panel", | ||
"label": "Notifications", | ||
"items": { | ||
"_headerCommon": { | ||
"type":"header", | ||
"text":"Common Notification Settings", | ||
"size": 2 | ||
}, | ||
"checkSendOfflineMsg": { | ||
"type":"checkbox", | ||
"sm": 12, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Offline message", | ||
"help": "Get message if an device is not reachable" | ||
}, | ||
"checkSendOfflineMsgDaily": { | ||
"type":"checkbox", | ||
"sm": 12, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Overview of offline devices", | ||
"help": "Get a message with an overview all offline devices" | ||
}, | ||
"_sendIntervallOfflineDay": { | ||
"newLine": true, | ||
"sm": 12, | ||
"md": 12, | ||
"lg": 6, | ||
"hidden": "!data.checkSendOfflineMsgDaily", | ||
"hideOnlyControl": true, | ||
"items": { | ||
"_textDays": { | ||
"type": "staticText", | ||
"text": "Choose the day(s) where you want to get the overview of offline devices:", | ||
"style": { | ||
"fontSize": 16, | ||
"marginTop": 20 | ||
} | ||
}, | ||
"checkOfflineMonday": { | ||
"newLine": true, | ||
"type": "checkbox", | ||
"label": "Mon" | ||
}, | ||
"checkOfflineTuesday": { | ||
"type": "checkbox", | ||
"label": "Tue" | ||
}, | ||
"checkOfflineWednesday": { | ||
"type": "checkbox", | ||
"label": "Wed" | ||
}, | ||
"checkOfflineThursday": { | ||
"type": "checkbox", | ||
"label": "Thu" | ||
}, | ||
"checkOfflineFriday": { | ||
"type": "checkbox", | ||
"label": "Fri" | ||
}, | ||
"checkOfflineSaturday": { | ||
"type": "checkbox", | ||
"label": "Sat" | ||
}, | ||
"checkOfflineSunday": { | ||
"type": "checkbox", | ||
"label": "Sun" | ||
} | ||
} | ||
}, | ||
"_sendIntervallOfflineTime": { | ||
"sm": 12, | ||
"md": 12, | ||
"lg": 6, | ||
"hidden": "!data.checkSendOfflineMsgDaily", | ||
"hideOnlyControl": true, | ||
"items": { | ||
"_textTime": { | ||
"type": "staticText", | ||
"text": "Choose the Time:", | ||
"style": { | ||
"fontSize": 16, | ||
"marginTop": 20 | ||
} | ||
}, | ||
"checkSendOfflineTime": { | ||
"newLine": true, | ||
"type": "text", | ||
"help": "Format hh:mm" | ||
} | ||
} | ||
}, | ||
"trenner": { | ||
"newLine": true, | ||
"type": "divider" | ||
}, | ||
"checkSendBatteryMsg": { | ||
"newLine": "true", | ||
"type":"checkbox", | ||
"sm": 12, | ||
"md": 12, | ||
"lg": 6, | ||
"label": "Battery message", | ||
"help": "Get message if an device has low battery" | ||
}, | ||
"minWarnBatterie": { | ||
"type": "number", | ||
"min": 0, | ||
"max": 100, | ||
"sm": 12, | ||
"md": 12, | ||
"lg": 4, | ||
"label": "From how much min % would you get a message", | ||
"help": "in percent", | ||
"hidden": "!data.checkSendBatteryMsg", | ||
"hideOnlyControl": true | ||
}, | ||
"chooseDay": { | ||
"newLine": true, | ||
"sm": 12, | ||
"md": 12, | ||
"lg": 6, | ||
"hidden": "!data.checkSendBatteryMsg", | ||
"hideOnlyControl": true, | ||
"items": { | ||
"_textDays": { | ||
"type": "staticText", | ||
"text": "Choose the day(s) where you want to get the message of low battery:", | ||
"style": { | ||
"fontSize": 16, | ||
"marginTop": 20 | ||
} | ||
}, | ||
"checkMonday": { | ||
"newLine": true, | ||
"type": "checkbox", | ||
"label": "Mon" | ||
}, | ||
"checkTuesday": { | ||
"type": "checkbox", | ||
"label": "Tue" | ||
}, | ||
"checkWednesday": { | ||
"type": "checkbox", | ||
"label": "Wed" | ||
}, | ||
"checkThursday": { | ||
"type": "checkbox", | ||
"label": "Thu" | ||
}, | ||
"checkFriday": { | ||
"type": "checkbox", | ||
"label": "Fri" | ||
}, | ||
"checkSaturday": { | ||
"type": "checkbox", | ||
"label": "Sat" | ||
}, | ||
"checkSunday": { | ||
"type": "checkbox", | ||
"label": "Sun" | ||
} | ||
} | ||
}, | ||
"_checkSendBatteryTime": { | ||
"sm": 12, | ||
"md": 12, | ||
"lg": 6, | ||
"hidden": "!data.checkSendBatteryMsg", | ||
"hideOnlyControl": true, | ||
"items": { | ||
"_textTime": { | ||
"type": "staticText", | ||
"text": "Choose the Time:", | ||
"style": { | ||
"fontSize": 16, | ||
"marginTop": 20 | ||
} | ||
}, | ||
"checkSendBatteryTime": { | ||
"newLine": true, | ||
"type": "text", | ||
"help": "Format hh:mm" | ||
} | ||
} | ||
}, | ||
"_headerMSGservice": { | ||
"newLine": true, | ||
"type": "header", | ||
"text": "Notification Service", | ||
"size": 2, | ||
"hidden": "!data.checkSendBatteryMsg && !data.checkSendOfflineMsgDaily && !data.checkSendOfflineMsg", | ||
"hideOnlyControl": false | ||
}, | ||
"msgServiceText": { | ||
"type": "staticText", | ||
"text": "Here you can choose your notification service, you can use more than one service, but you can also leave all blank, then only the datapoint lastNotification will be filled.", | ||
"style": { | ||
"fontSize": 16, | ||
"marginTop": 20 | ||
}, | ||
"hidden": "!data.checkSendBatteryMsg && !data.checkSendOfflineMsgDaily && !data.checkSendOfflineMsg", | ||
"hideOnlyControl": false | ||
}, | ||
"msgService": { | ||
"newLine": true, | ||
"type": "select", | ||
"help": "Choose your notification services", | ||
"options": [{"label":"Please choose", "value": "none"}, | ||
{"label":"Pushover", "value": "pushover"}, | ||
{"label":"Telegram", "value": "telegram"}, | ||
{"label":"Whatsapp", "value": "whatsapp"}, | ||
{"label":"E-Mail", "value": "email"}, | ||
{"label":"Jarvis", "value": "jarvis"}, | ||
{"label":"Lovelace", "value": "lovelace"}], | ||
"default": "none", | ||
"hidden": "!data.checkSendBatteryMsg && !data.checkSendOfflineMsgDaily && !data.checkSendOfflineMsg", | ||
"hideOnlyControl": false | ||
}, | ||
"_headerPushover": { | ||
"newLine": true, | ||
"type": "header", | ||
"text": "Pushover", | ||
"size": 2, | ||
"hidden": "data.msgService !== 'pushover'", | ||
"hideOnlyControl": false | ||
}, | ||
"instancePushover": { | ||
"newLine": true, | ||
"type": "instance", | ||
"adapter": "pushover", | ||
"all": false, | ||
"allowDeactivate": true, | ||
"sm": 12, | ||
"md": 4, | ||
"lg": 4, | ||
"label": "Pushover Instance", | ||
"help": "Please choose the pushover instance", | ||
"hidden": "data.msgService !== 'pushover'", | ||
"hideOnlyControl": false | ||
}, | ||
"devicePushover": { | ||
"type": "text", | ||
"sm": 12, | ||
"md": 4, | ||
"lg": 4, | ||
"label": "Device-ID (optional)", | ||
"help": "Choose your device", | ||
"hidden": "data.msgService !== 'pushover'", | ||
"hideOnlyControl": false | ||
}, | ||
"prioPushover": { | ||
"type": "select", | ||
"sm": 12, | ||
"md": 4, | ||
"lg": 4, | ||
"help": "Choose the priority", | ||
"options": [ | ||
{"label": "Normal", "value": ""}, | ||
{"label": "High Priority", "value": 1}, | ||
{"label": "Silent", "value": -1}, | ||
{"label": "With confirmation", "value": 2} | ||
], | ||
"hidden": "data.msgService !== 'pushover'", | ||
"hideOnlyControl": false | ||
}, | ||
"titlePushover": { | ||
"type": "text", | ||
"sm": 12, | ||
"md": 4, | ||
"lg": 4, | ||
"label": "Title (optional)", | ||
"help": "Choose your title for Pushmessage", | ||
"hidden": "data.msgService !== 'pushover'", | ||
"hideOnlyControl": false | ||
}, | ||
"headerTelegram": { | ||
"newLine": "true", | ||
"type": "header", | ||
"text": "Telegram", | ||
"size": 2, | ||
"hidden": "data.msgService !== 'telegram'", | ||
"hideOnlyControl": false | ||
}, | ||
"instanceTelegram": { | ||
"newLine": true, | ||
"type": "instance", | ||
"adapter": "telegram", | ||
"all": false, | ||
"allowDeactivate": true, | ||
"sm": 12, | ||
"md": 4, | ||
"lg": 4, | ||
"label": "Telegram Instance", | ||
"help": "Please choose the telegram instance", | ||
"hidden": "data.msgService !== 'telegram'", | ||
"hideOnlyControl": false | ||
}, | ||
"deviceTelegram": { | ||
"type": "text", | ||
"sm": 12, | ||
"md": 4, | ||
"lg": 4, | ||
"label": "Device-ID (optional)", | ||
"help": "Choose your device", | ||
"hidden": "data.msgService !== 'telegram'", | ||
"hideOnlyControl": false | ||
}, | ||
"chatIdTelegram": { | ||
"type": "text", | ||
"sm": 12, | ||
"md": 4, | ||
"lg": 4, | ||
"label": "Chat-ID (optional)", | ||
"help": "Choose your Chat-ID", | ||
"hidden": "data.msgService !== 'telegram'", | ||
"hideOnlyControl": false | ||
}, | ||
"headerWhatsapp": { | ||
"newLine": "true", | ||
"type": "header", | ||
"text": "Whatsapp", | ||
"size": 2, | ||
"hidden": "data.msgService !== 'whatsapp'", | ||
"hideOnlyControl": false | ||
}, | ||
"instanceWhatsapp": { | ||
"newLine": true, | ||
"type": "instance", | ||
"adapter": "whatsapp-cmb", | ||
"all": false, | ||
"allowDeactivate": true, | ||
"sm": 12, | ||
"md": 4, | ||
"lg": 4, | ||
"label": "Whatsapp Instance", | ||
"help": "Please choose the Whatsapp instance", | ||
"hidden": "data.msgService !== 'whatsapp'", | ||
"hideOnlyControl": false | ||
}, | ||
"phoneWhatapp": { | ||
"type": "text", | ||
"sm": 12, | ||
"md": 4, | ||
"lg": 4, | ||
"label": "Recipient (optional)", | ||
"help": "Choose your recipient", | ||
"hidden": "data.msgService !== 'whatsapp'", | ||
"hideOnlyControl": false | ||
}, | ||
"_headerEmail": { | ||
"newLine": true, | ||
"type": "header", | ||
"text": "Email", | ||
"size": 2, | ||
"hidden": "data.msgService !== 'email'", | ||
"hideOnlyControl": false | ||
}, | ||
"instanceEmail": { | ||
"newLine": true, | ||
"type": "instance", | ||
"adapter": "email", | ||
"all": false, | ||
"allowDeactivate": true, | ||
"sm": 12, | ||
"md": 4, | ||
"lg": 4, | ||
"label": "Email Instance", | ||
"help": "Please choose the email instance", | ||
"hidden": "data.msgService !== 'email'", | ||
"hideOnlyControl": false | ||
}, | ||
"sendToEmail": { | ||
"type": "text", | ||
"sm": 12, | ||
"md": 4, | ||
"lg": 4, | ||
"label": "Send to (optional)", | ||
"help": "Choose your email address", | ||
"hidden": "data.msgService !== 'email'", | ||
"hideOnlyControl": false | ||
}, | ||
"subjectEmail": { | ||
"type": "text", | ||
"sm": 12, | ||
"md": 4, | ||
"lg": 4, | ||
"label": "Subject (optional)", | ||
"help": "Choose your subject for the Email", | ||
"hidden": "data.msgService !== 'email'", | ||
"hideOnlyControl": false | ||
}, | ||
"headerJarvis": { | ||
"newLine": "true", | ||
"type": "header", | ||
"text": "Jarvis Notification", | ||
"size": 2, | ||
"hidden": "data.msgService !== 'jarvis'", | ||
"hideOnlyControl": false | ||
}, | ||
"instanceJarvis": { | ||
"newLine": true, | ||
"type": "instance", | ||
"adapter": "jarvis", | ||
"allowDeactivate": true, | ||
"all": false, | ||
"sm": 12, | ||
"md": 4, | ||
"lg": 4, | ||
"label": "Jarvis Instance", | ||
"help": "Please choose the jarvis instance", | ||
"hidden": "data.msgService !== 'jarvis'", | ||
"hideOnlyControl": false | ||
}, | ||
"titleJarvis": { | ||
"type": "text", | ||
"sm": 12, | ||
"md": 4, | ||
"lg": 4, | ||
"label": "Title (optional)", | ||
"help": "Choose your title for Pushmessage", | ||
"hidden": "data.msgService !== 'jarvis'", | ||
"hideOnlyControl": false | ||
}, | ||
"headerLovelace": { | ||
"newLine": "true", | ||
"type": "header", | ||
"text": "Lovelace Notification", | ||
"size": 2, | ||
"hidden": "data.msgService !== 'lovelace'", | ||
"hideOnlyControl": false | ||
}, | ||
"instanceLovelace": { | ||
"newLine": true, | ||
"type": "instance", | ||
"adapter": "lovelace", | ||
"allowDeactivate": true, | ||
"all": false, | ||
"sm": 12, | ||
"md": 4, | ||
"lg": 4, | ||
"label": "Lovelace Instance", | ||
"help": "Please choose the lovelace instance", | ||
"hidden": "data.msgService !== 'lovelace'", | ||
"hideOnlyControl": false | ||
}, | ||
"titleLovelace": { | ||
"type": "text", | ||
"sm": 12, | ||
"md": 4, | ||
"lg": 4, | ||
"label": "Title (optional)", | ||
"help": "Choose your title for Pushmessage", | ||
"hidden": "data.msgService !== 'lovelace'", | ||
"hideOnlyControl": false | ||
} | ||
} | ||
}, | ||
"_blacklist": { | ||
"type": "panel", | ||
"label": "Blacklist", | ||
"items": { | ||
"tableBlacklist": { | ||
"type": "table", | ||
"label": "Blacklist", | ||
"nodelete": true, | ||
"sm": 12, | ||
"md": 12, | ||
"lg": 12, | ||
"items": [ | ||
{ | ||
"type": "selectSendTo", | ||
"title": "Choose which devices should be excluded", | ||
"attr": "devices", | ||
"filter": false, | ||
"allowAddByFilter": false, | ||
"sort": false, | ||
"jsonData": "{\"deviceName\":\"${globalData.deviceName}\",\"adapter\":\"${globalData.adapter}\",\"path\":\"${globalData.path}\"}", | ||
"command": "devicesList", | ||
"width": "60%" | ||
}, | ||
{ | ||
"type":"checkbox", | ||
"title": "Ignor in notifications", | ||
"attr": "checkIgnorNotify", | ||
"width": "15%", | ||
"alsoDependsOn":[ | ||
"devices" | ||
] | ||
}, | ||
{ | ||
"type":"checkbox", | ||
"title": "Ignor in lists", | ||
"attr": "checkIgnorLists", | ||
"width": "10%", | ||
"alsoDependsOn":[ | ||
"devices" | ||
] | ||
} | ||
] | ||
} | ||
} | ||
}, | ||
"_expertSettings": { | ||
"type": "panel", | ||
"label": "Expert Settings", | ||
"items": { | ||
"_headerOtherSettings": { | ||
"type": "header", | ||
"text": "Other Settings", | ||
"size": 2 | ||
}, | ||
"trueState": { | ||
"newLine": true, | ||
"type": "checkbox", | ||
"sm": 12, | ||
"md": 6, | ||
"lg": 4, | ||
"label": "True State", | ||
"help": "Use the true value of the signal strength, or it is converted to %" | ||
}, | ||
"listOnlyBattery": { | ||
"type": "checkbox", | ||
"sm": 12, | ||
"md": 6, | ||
"lg": 4, | ||
"label": "List only devices with battery", | ||
"help": "Choose if only devices with battery should be listed or all devices" | ||
}, | ||
"createOwnFolder": { | ||
"type": "checkbox", | ||
"sm": 12, | ||
"md": 6, | ||
"lg": 4, | ||
"label": "Create own folders for each adapter", | ||
"help": "If you like to have for every Adapter an own folder with own data" | ||
}, | ||
"createHtmlList": { | ||
"type": "checkbox", | ||
"sm": 12, | ||
"md": 6, | ||
"lg": 4, | ||
"label": "Create additionally HTML lists", | ||
"help": "Create the lists also in HTML" | ||
}, | ||
"_updateInterval": { | ||
"type": "header", | ||
"text": "Update-Interval", | ||
"size": 2 | ||
}, | ||
"textUpdateInterval": { | ||
"type": "staticText", | ||
"text": "Here you can define the update interval of the datapoints/lists. For performance reasons, it is not recommended to select a poll value that is too low. Lower than two seconds is not selectable.", | ||
"sm": 12, | ||
"md": 12, | ||
"lg": 12, | ||
"style": { | ||
"fontSize": 16, | ||
"marginBottom": 10 | ||
} | ||
}, | ||
"updateinterval": { | ||
"type": "number", | ||
"min": 2, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Update-Interval", | ||
"help": "in seconds" | ||
}, | ||
"_headerOfflineTime": { | ||
"type": "header", | ||
"text": "Offline Time", | ||
"size": 2 | ||
}, | ||
"textOfflineTime": { | ||
"type": "staticText", | ||
"text": "Here you can define the offline times of each adapter. If you want to use the data points of the devices (online, available, reachable etc.) directly to determine the status, enter '-1'.", | ||
"sm": 12, | ||
"md": 12, | ||
"lg": 12, | ||
"style": { | ||
"fontSize": 16, | ||
"marginBottom": 10 | ||
} | ||
}, | ||
"alexa2MaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Alexa2", | ||
"help": "in minutes", | ||
"hidden": "!data.alexa2Devices", | ||
"hideOnlyControl": false | ||
}, | ||
"bleMaxMinutes": { | ||
"type": "number", | ||
"min": 0, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Ble", | ||
"help": "in minutes", | ||
"hidden": "!data.bleDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"deconzMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Deconz", | ||
"help": "in minutes", | ||
"hidden": "!data.deconzDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"enoceanMaxMinutes": { | ||
"type": "number", | ||
"min": 0, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Enocean", | ||
"help": "in minutes", | ||
"hidden": "!data.enoceanDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"esphomeMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "EspHome", | ||
"help": "in minutes", | ||
"hidden": "!data.esphomeDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"fritzdectMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "FritzDect", | ||
"help": "in minutes", | ||
"hidden": "!data.fritzdectDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"hamMaxMinutes": { | ||
"type": "number", | ||
"min": 0, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Ham", | ||
"help": "in minutes", | ||
"hidden": "!data.hamDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"harmonyMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Harmony", | ||
"help": "in minutes", | ||
"hidden": "!data.harmonyDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"hmiPMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "HmiP", | ||
"help": "in minutes", | ||
"hidden": "!data.hmiPDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"hmrpcMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "HM-RPC", | ||
"help": "in minutes", | ||
"hidden": "!data.hmrpcDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"hs100MaxMinutes": { | ||
"type": "number", | ||
"min": 0, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "hs100", | ||
"help": "in minutes", | ||
"hidden": "!data.hs100Devices", | ||
"hideOnlyControl": false | ||
}, | ||
"hueMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Hue", | ||
"help": "in minutes", | ||
"hidden": "!data.hueDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"hueextMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "HueExtended", | ||
"help": "in minutes", | ||
"hidden": "!data.hueExtDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"jeelinkMaxMinutes": { | ||
"type": "number", | ||
"min": 0, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Jeelink", | ||
"help": "in minutes", | ||
"hidden": "!data.jeelinkDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"lupusecMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Lupusec", | ||
"help": "in minutes", | ||
"hidden": "!data.lupusecDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"maxcubeMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Maxcube", | ||
"help": "in minutes", | ||
"hidden": "!data.maxcubeDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"merossMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Meross", | ||
"help": "in minutes", | ||
"hidden": "!data.merossDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"mihomeMaxMinutes": { | ||
"type": "number", | ||
"min": 0, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "MiHome", | ||
"help": "in minutes", | ||
"hidden": "!data.mihomeDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"mihomeGWMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "MiHome Gateway", | ||
"help": "in minutes", | ||
"hidden": "!data.mihomeDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"mihomeVacuumMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Mihome Vacuum", | ||
"help": "in minutes", | ||
"hidden": "!data.mihomeVacuumDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"netatmoMaxMinutes": { | ||
"type": "number", | ||
"min": 0, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Netatmo", | ||
"help": "in minutes", | ||
"hidden": "!data.netatmoDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"nukiextendMaxMinutes": { | ||
"type": "number", | ||
"min": 0, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Nuki Extended", | ||
"help": "in minutes", | ||
"hidden": "!data.nukiExtDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"nutMaxMinutes": { | ||
"type": "number", | ||
"min": 0, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Nut", | ||
"help": "in minutes", | ||
"hidden": "!data.nutDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"pingMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Ping", | ||
"help": "in minutes", | ||
"hidden": "!data.pingDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"roombaMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Roomba", | ||
"help": "in minutes", | ||
"hidden": "!data.roombaDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"shellyMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Shelly", | ||
"help": "in minutes", | ||
"hidden": "!data.shellyDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"sonoffMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Sonoff", | ||
"help": "in minutes", | ||
"hidden": "!data.sonoffDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"sonosMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Sonos", | ||
"help": "in minutes", | ||
"hidden": "!data.sonosDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"switchbotMaxMinutes": { | ||
"type": "number", | ||
"min": 0, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Switchbot Ble", | ||
"help": "in minutes", | ||
"hidden": "!data.switchbotBleDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"tadoMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Tado", | ||
"help": "in minutes", | ||
"hidden": "!data.tadoDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"tradfriMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Tradfri", | ||
"help": "in minutes", | ||
"hidden": "!data.tradfriDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"unifiMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Unifi", | ||
"help": "in minutes", | ||
"hidden": "!data.unifiDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"wledMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "WLED", | ||
"help": "in minutes", | ||
"hidden": "!data.wledDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"yeelightMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Yeelight-2", | ||
"help": "in minutes", | ||
"hidden": "!data.yeelightDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"zigbeeMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Zigbee", | ||
"help": "in minutes", | ||
"hidden": "!data.zigbeeDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"zigbee2mqttMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Zigbee2MQTT", | ||
"help": "in minutes", | ||
"hidden": "!data.zigbee2mqttDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"zwaveMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Zwave", | ||
"help": "in minutes", | ||
"hidden": "!data.zwaveDevices", | ||
"hideOnlyControl": false | ||
} | ||
} | ||
} | ||
} | ||
} | ||
"i18n": true, | ||
"type": "tabs", | ||
"items": { | ||
"_options": { | ||
"type": "panel", | ||
"label": "Options", | ||
"items": { | ||
"_headerDevices": { | ||
"type": "header", | ||
"text": "Choose devices to watch", | ||
"size": 2 | ||
}, | ||
"alexa2Devices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Alexa2" | ||
}, | ||
"bleDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Ble" | ||
}, | ||
"deconzDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Deconz" | ||
}, | ||
"enoceanDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Enocean" | ||
}, | ||
"esphomeDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "EspHome" | ||
}, | ||
"fritzdectDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "FritzDect" | ||
}, | ||
"hamDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Ham" | ||
}, | ||
"harmonyDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Harmony" | ||
}, | ||
"hmiPDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "HmiP" | ||
}, | ||
"hmrpcDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "HM-RPC" | ||
}, | ||
"hs100Devices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "hs100" | ||
}, | ||
"hueDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Hue" | ||
}, | ||
"hueExtDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Hue Extended" | ||
}, | ||
"jeelinkDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Jeelink" | ||
}, | ||
"lupusecDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Lupusec" | ||
}, | ||
"maxcubeDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Maxcube" | ||
}, | ||
"merossDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Meross" | ||
}, | ||
"mihomeDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "MiHome" | ||
}, | ||
"mihomeVacuumDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "MiHome Vacuum" | ||
}, | ||
"netatmoDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Netatmo" | ||
}, | ||
"nukiExtDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Nuki Extended" | ||
}, | ||
"nutDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Nut" | ||
}, | ||
"pingDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Ping" | ||
}, | ||
"roombaDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Roomba" | ||
}, | ||
"shellyDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Shelly" | ||
}, | ||
"sonoffDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Sonoff" | ||
}, | ||
"sonosDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Sonos" | ||
}, | ||
"switchbotBleDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Switchbot Ble" | ||
}, | ||
"tadoDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Tado" | ||
}, | ||
"tradfriDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Tradfri" | ||
}, | ||
"unifiDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Unifi" | ||
}, | ||
"wledDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "WLED" | ||
}, | ||
"yeelightDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Yeelight-2" | ||
}, | ||
"zigbeeDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Zigbee" | ||
}, | ||
"zigbee2mqttDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Zigbee2MQTT" | ||
}, | ||
"zwaveDevices": { | ||
"type": "checkbox", | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Zwave" | ||
} | ||
} | ||
}, | ||
"_notifications": { | ||
"type": "panel", | ||
"label": "Notifications", | ||
"items": { | ||
"_headerCommon": { | ||
"type": "header", | ||
"text": "Common Notification Settings", | ||
"size": 2 | ||
}, | ||
"checkSendOfflineMsg": { | ||
"type": "checkbox", | ||
"sm": 12, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Offline message", | ||
"help": "Get message if an device is not reachable" | ||
}, | ||
"checkSendOfflineMsgDaily": { | ||
"type": "checkbox", | ||
"sm": 12, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Overview of offline devices", | ||
"help": "Get a message with an overview all offline devices" | ||
}, | ||
"_sendIntervallOfflineDay": { | ||
"newLine": true, | ||
"sm": 12, | ||
"md": 12, | ||
"lg": 6, | ||
"hidden": "!data.checkSendOfflineMsgDaily", | ||
"hideOnlyControl": true, | ||
"items": { | ||
"_textDays": { | ||
"type": "staticText", | ||
"text": "Choose the day(s) where you want to get the overview of offline devices:", | ||
"style": { | ||
"fontSize": 16, | ||
"marginTop": 20 | ||
} | ||
}, | ||
"checkOfflineMonday": { | ||
"newLine": true, | ||
"type": "checkbox", | ||
"label": "Mon" | ||
}, | ||
"checkOfflineTuesday": { | ||
"type": "checkbox", | ||
"label": "Tue" | ||
}, | ||
"checkOfflineWednesday": { | ||
"type": "checkbox", | ||
"label": "Wed" | ||
}, | ||
"checkOfflineThursday": { | ||
"type": "checkbox", | ||
"label": "Thu" | ||
}, | ||
"checkOfflineFriday": { | ||
"type": "checkbox", | ||
"label": "Fri" | ||
}, | ||
"checkOfflineSaturday": { | ||
"type": "checkbox", | ||
"label": "Sat" | ||
}, | ||
"checkOfflineSunday": { | ||
"type": "checkbox", | ||
"label": "Sun" | ||
} | ||
} | ||
}, | ||
"_sendIntervallOfflineTime": { | ||
"sm": 12, | ||
"md": 12, | ||
"lg": 6, | ||
"hidden": "!data.checkSendOfflineMsgDaily", | ||
"hideOnlyControl": true, | ||
"items": { | ||
"_textTime": { | ||
"type": "staticText", | ||
"text": "Choose the Time:", | ||
"style": { | ||
"fontSize": 16, | ||
"marginTop": 20 | ||
} | ||
}, | ||
"checkSendOfflineTime": { | ||
"newLine": true, | ||
"type": "text", | ||
"help": "Format hh:mm" | ||
} | ||
} | ||
}, | ||
"trenner": { | ||
"newLine": true, | ||
"type": "divider" | ||
}, | ||
"checkSendBatteryMsg": { | ||
"newLine": "true", | ||
"type": "checkbox", | ||
"sm": 12, | ||
"md": 12, | ||
"lg": 6, | ||
"label": "Battery message", | ||
"help": "Get message if an device has low battery" | ||
}, | ||
"minWarnBatterie": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100, | ||
"sm": 12, | ||
"md": 12, | ||
"lg": 4, | ||
"label": "From how much min % would you get a message", | ||
"help": "in percent", | ||
"hidden": "!data.checkSendBatteryMsg", | ||
"hideOnlyControl": true | ||
}, | ||
"chooseDay": { | ||
"newLine": true, | ||
"sm": 12, | ||
"md": 12, | ||
"lg": 6, | ||
"hidden": "!data.checkSendBatteryMsg", | ||
"hideOnlyControl": true, | ||
"items": { | ||
"_textDays": { | ||
"type": "staticText", | ||
"text": "Choose the day(s) where you want to get the message of low battery:", | ||
"style": { | ||
"fontSize": 16, | ||
"marginTop": 20 | ||
} | ||
}, | ||
"checkMonday": { | ||
"newLine": true, | ||
"type": "checkbox", | ||
"label": "Mon" | ||
}, | ||
"checkTuesday": { | ||
"type": "checkbox", | ||
"label": "Tue" | ||
}, | ||
"checkWednesday": { | ||
"type": "checkbox", | ||
"label": "Wed" | ||
}, | ||
"checkThursday": { | ||
"type": "checkbox", | ||
"label": "Thu" | ||
}, | ||
"checkFriday": { | ||
"type": "checkbox", | ||
"label": "Fri" | ||
}, | ||
"checkSaturday": { | ||
"type": "checkbox", | ||
"label": "Sat" | ||
}, | ||
"checkSunday": { | ||
"type": "checkbox", | ||
"label": "Sun" | ||
} | ||
} | ||
}, | ||
"_checkSendBatteryTime": { | ||
"sm": 12, | ||
"md": 12, | ||
"lg": 6, | ||
"hidden": "!data.checkSendBatteryMsg", | ||
"hideOnlyControl": true, | ||
"items": { | ||
"_textTime": { | ||
"type": "staticText", | ||
"text": "Choose the Time:", | ||
"style": { | ||
"fontSize": 16, | ||
"marginTop": 20 | ||
} | ||
}, | ||
"checkSendBatteryTime": { | ||
"newLine": true, | ||
"type": "text", | ||
"help": "Format hh:mm" | ||
} | ||
} | ||
}, | ||
"_headerMSGservice": { | ||
"newLine": true, | ||
"type": "header", | ||
"text": "Notification Service", | ||
"size": 2, | ||
"hidden": "!data.checkSendBatteryMsg && !data.checkSendOfflineMsgDaily && !data.checkSendOfflineMsg", | ||
"hideOnlyControl": false | ||
}, | ||
"msgServiceText": { | ||
"type": "staticText", | ||
"text": "Here you can choose your notification service, you can use more than one service, but you can also leave all blank, then only the datapoint lastNotification will be filled.", | ||
"style": { | ||
"fontSize": 16, | ||
"marginTop": 20 | ||
}, | ||
"hidden": "!data.checkSendBatteryMsg && !data.checkSendOfflineMsgDaily && !data.checkSendOfflineMsg", | ||
"hideOnlyControl": false | ||
}, | ||
"msgService": { | ||
"newLine": true, | ||
"type": "select", | ||
"help": "Choose your notification services", | ||
"options": [ | ||
{ "label": "Please choose", "value": "none" }, | ||
{ "label": "Pushover", "value": "pushover" }, | ||
{ "label": "Telegram", "value": "telegram" }, | ||
{ "label": "Whatsapp", "value": "whatsapp" }, | ||
{ "label": "E-Mail", "value": "email" }, | ||
{ "label": "Jarvis", "value": "jarvis" }, | ||
{ "label": "Lovelace", "value": "lovelace" } | ||
], | ||
"default": "none", | ||
"hidden": "!data.checkSendBatteryMsg && !data.checkSendOfflineMsgDaily && !data.checkSendOfflineMsg", | ||
"hideOnlyControl": false | ||
}, | ||
"_headerPushover": { | ||
"newLine": true, | ||
"type": "header", | ||
"text": "Pushover", | ||
"size": 2, | ||
"hidden": "data.msgService !== 'pushover'", | ||
"hideOnlyControl": false | ||
}, | ||
"instancePushover": { | ||
"newLine": true, | ||
"type": "instance", | ||
"adapter": "pushover", | ||
"all": false, | ||
"allowDeactivate": true, | ||
"sm": 12, | ||
"md": 4, | ||
"lg": 4, | ||
"label": "Pushover Instance", | ||
"help": "Please choose the pushover instance", | ||
"hidden": "data.msgService !== 'pushover'", | ||
"hideOnlyControl": false | ||
}, | ||
"devicePushover": { | ||
"type": "text", | ||
"sm": 12, | ||
"md": 4, | ||
"lg": 4, | ||
"label": "Device-ID (optional)", | ||
"help": "Choose your device", | ||
"hidden": "data.msgService !== 'pushover'", | ||
"hideOnlyControl": false | ||
}, | ||
"prioPushover": { | ||
"type": "select", | ||
"sm": 12, | ||
"md": 4, | ||
"lg": 4, | ||
"help": "Choose the priority", | ||
"options": [ | ||
{ "label": "Normal", "value": "" }, | ||
{ "label": "High Priority", "value": 1 }, | ||
{ "label": "Silent", "value": -1 }, | ||
{ "label": "With confirmation", "value": 2 } | ||
], | ||
"hidden": "data.msgService !== 'pushover'", | ||
"hideOnlyControl": false | ||
}, | ||
"titlePushover": { | ||
"type": "text", | ||
"sm": 12, | ||
"md": 4, | ||
"lg": 4, | ||
"label": "Title (optional)", | ||
"help": "Choose your title for Pushmessage", | ||
"hidden": "data.msgService !== 'pushover'", | ||
"hideOnlyControl": false | ||
}, | ||
"headerTelegram": { | ||
"newLine": "true", | ||
"type": "header", | ||
"text": "Telegram", | ||
"size": 2, | ||
"hidden": "data.msgService !== 'telegram'", | ||
"hideOnlyControl": false | ||
}, | ||
"instanceTelegram": { | ||
"newLine": true, | ||
"type": "instance", | ||
"adapter": "telegram", | ||
"all": false, | ||
"allowDeactivate": true, | ||
"sm": 12, | ||
"md": 4, | ||
"lg": 4, | ||
"label": "Telegram Instance", | ||
"help": "Please choose the telegram instance", | ||
"hidden": "data.msgService !== 'telegram'", | ||
"hideOnlyControl": false | ||
}, | ||
"deviceTelegram": { | ||
"type": "text", | ||
"sm": 12, | ||
"md": 4, | ||
"lg": 4, | ||
"label": "Device-ID (optional)", | ||
"help": "Choose your device", | ||
"hidden": "data.msgService !== 'telegram'", | ||
"hideOnlyControl": false | ||
}, | ||
"chatIdTelegram": { | ||
"type": "text", | ||
"sm": 12, | ||
"md": 4, | ||
"lg": 4, | ||
"label": "Chat-ID (optional)", | ||
"help": "Choose your Chat-ID", | ||
"hidden": "data.msgService !== 'telegram'", | ||
"hideOnlyControl": false | ||
}, | ||
"headerWhatsapp": { | ||
"newLine": "true", | ||
"type": "header", | ||
"text": "Whatsapp", | ||
"size": 2, | ||
"hidden": "data.msgService !== 'whatsapp'", | ||
"hideOnlyControl": false | ||
}, | ||
"instanceWhatsapp": { | ||
"newLine": true, | ||
"type": "instance", | ||
"adapter": "whatsapp-cmb", | ||
"all": false, | ||
"allowDeactivate": true, | ||
"sm": 12, | ||
"md": 4, | ||
"lg": 4, | ||
"label": "Whatsapp Instance", | ||
"help": "Please choose the Whatsapp instance", | ||
"hidden": "data.msgService !== 'whatsapp'", | ||
"hideOnlyControl": false | ||
}, | ||
"phoneWhatapp": { | ||
"type": "text", | ||
"sm": 12, | ||
"md": 4, | ||
"lg": 4, | ||
"label": "Recipient (optional)", | ||
"help": "Choose your recipient", | ||
"hidden": "data.msgService !== 'whatsapp'", | ||
"hideOnlyControl": false | ||
}, | ||
"_headerEmail": { | ||
"newLine": true, | ||
"type": "header", | ||
"text": "Email", | ||
"size": 2, | ||
"hidden": "data.msgService !== 'email'", | ||
"hideOnlyControl": false | ||
}, | ||
"instanceEmail": { | ||
"newLine": true, | ||
"type": "instance", | ||
"adapter": "email", | ||
"all": false, | ||
"allowDeactivate": true, | ||
"sm": 12, | ||
"md": 4, | ||
"lg": 4, | ||
"label": "Email Instance", | ||
"help": "Please choose the email instance", | ||
"hidden": "data.msgService !== 'email'", | ||
"hideOnlyControl": false | ||
}, | ||
"sendToEmail": { | ||
"type": "text", | ||
"sm": 12, | ||
"md": 4, | ||
"lg": 4, | ||
"label": "Send to (optional)", | ||
"help": "Choose your email address", | ||
"hidden": "data.msgService !== 'email'", | ||
"hideOnlyControl": false | ||
}, | ||
"subjectEmail": { | ||
"type": "text", | ||
"sm": 12, | ||
"md": 4, | ||
"lg": 4, | ||
"label": "Subject (optional)", | ||
"help": "Choose your subject for the Email", | ||
"hidden": "data.msgService !== 'email'", | ||
"hideOnlyControl": false | ||
}, | ||
"headerJarvis": { | ||
"newLine": "true", | ||
"type": "header", | ||
"text": "Jarvis Notification", | ||
"size": 2, | ||
"hidden": "data.msgService !== 'jarvis'", | ||
"hideOnlyControl": false | ||
}, | ||
"instanceJarvis": { | ||
"newLine": true, | ||
"type": "instance", | ||
"adapter": "jarvis", | ||
"allowDeactivate": true, | ||
"all": false, | ||
"sm": 12, | ||
"md": 4, | ||
"lg": 4, | ||
"label": "Jarvis Instance", | ||
"help": "Please choose the jarvis instance", | ||
"hidden": "data.msgService !== 'jarvis'", | ||
"hideOnlyControl": false | ||
}, | ||
"titleJarvis": { | ||
"type": "text", | ||
"sm": 12, | ||
"md": 4, | ||
"lg": 4, | ||
"label": "Title (optional)", | ||
"help": "Choose your title for Pushmessage", | ||
"hidden": "data.msgService !== 'jarvis'", | ||
"hideOnlyControl": false | ||
}, | ||
"headerLovelace": { | ||
"newLine": "true", | ||
"type": "header", | ||
"text": "Lovelace Notification", | ||
"size": 2, | ||
"hidden": "data.msgService !== 'lovelace'", | ||
"hideOnlyControl": false | ||
}, | ||
"instanceLovelace": { | ||
"newLine": true, | ||
"type": "instance", | ||
"adapter": "lovelace", | ||
"allowDeactivate": true, | ||
"all": false, | ||
"sm": 12, | ||
"md": 4, | ||
"lg": 4, | ||
"label": "Lovelace Instance", | ||
"help": "Please choose the lovelace instance", | ||
"hidden": "data.msgService !== 'lovelace'", | ||
"hideOnlyControl": false | ||
}, | ||
"titleLovelace": { | ||
"type": "text", | ||
"sm": 12, | ||
"md": 4, | ||
"lg": 4, | ||
"label": "Title (optional)", | ||
"help": "Choose your title for Pushmessage", | ||
"hidden": "data.msgService !== 'lovelace'", | ||
"hideOnlyControl": false | ||
} | ||
} | ||
}, | ||
"_blacklist": { | ||
"type": "panel", | ||
"label": "Blacklist", | ||
"items": { | ||
"tableBlacklist": { | ||
"type": "table", | ||
"label": "Blacklist", | ||
"nodelete": true, | ||
"sm": 12, | ||
"md": 12, | ||
"lg": 12, | ||
"items": [ | ||
{ | ||
"type": "selectSendTo", | ||
"title": "Choose which devices should be excluded", | ||
"attr": "devices", | ||
"filter": false, | ||
"allowAddByFilter": false, | ||
"sort": false, | ||
"jsonData": "{\"deviceName\":\"${globalData.deviceName}\",\"adapter\":\"${globalData.adapter}\",\"path\":\"${globalData.path}\"}", | ||
"command": "devicesList", | ||
"width": "60%" | ||
}, | ||
{ | ||
"type": "checkbox", | ||
"title": "Ignor in notifications", | ||
"attr": "checkIgnorNotify", | ||
"width": "15%", | ||
"alsoDependsOn": ["devices"] | ||
}, | ||
{ | ||
"type": "checkbox", | ||
"title": "Ignor in lists", | ||
"attr": "checkIgnorLists", | ||
"width": "10%", | ||
"alsoDependsOn": ["devices"] | ||
} | ||
] | ||
} | ||
} | ||
}, | ||
"_expertSettings": { | ||
"type": "panel", | ||
"label": "Expert Settings", | ||
"items": { | ||
"_headerOtherSettings": { | ||
"type": "header", | ||
"text": "Other Settings", | ||
"size": 2 | ||
}, | ||
"trueState": { | ||
"newLine": true, | ||
"type": "checkbox", | ||
"sm": 12, | ||
"md": 6, | ||
"lg": 4, | ||
"label": "True State", | ||
"help": "Use the true value of the signal strength, or it is converted to %" | ||
}, | ||
"listOnlyBattery": { | ||
"type": "checkbox", | ||
"sm": 12, | ||
"md": 6, | ||
"lg": 4, | ||
"label": "List only devices with batteries", | ||
"help": "Choose if only devices with batteries should be listed or all devices" | ||
}, | ||
"createOwnFolder": { | ||
"type": "checkbox", | ||
"sm": 12, | ||
"md": 6, | ||
"lg": 4, | ||
"label": "Create own folders for each adapter", | ||
"help": "If you like to have for every Adapter an own folder with own data" | ||
}, | ||
"createHtmlList": { | ||
"type": "checkbox", | ||
"sm": 12, | ||
"md": 6, | ||
"lg": 4, | ||
"label": "Create additionally HTML lists", | ||
"help": "Create the lists also in HTML" | ||
}, | ||
"_updateInterval": { | ||
"type": "header", | ||
"text": "Update-Interval", | ||
"size": 2 | ||
}, | ||
"textUpdateInterval": { | ||
"type": "staticText", | ||
"text": "Here you can define the update interval of the datapoints/lists. For performance reasons, it is not recommended to select a poll value that is too low. Lower than two seconds is not selectable.", | ||
"sm": 12, | ||
"md": 12, | ||
"lg": 12, | ||
"style": { | ||
"fontSize": 16, | ||
"marginBottom": 10 | ||
} | ||
}, | ||
"updateinterval": { | ||
"type": "number", | ||
"min": 2, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Update-Interval", | ||
"help": "in seconds" | ||
}, | ||
"_headerOfflineTime": { | ||
"type": "header", | ||
"text": "Offline Time", | ||
"size": 2 | ||
}, | ||
"textOfflineTime": { | ||
"type": "staticText", | ||
"text": "Here you can define the offline times of each adapter. If you want to use the data points of the devices (online, available, reachable etc.) directly to determine the status, enter ' 0 '.", | ||
"sm": 12, | ||
"md": 12, | ||
"lg": 12, | ||
"style": { | ||
"fontSize": 16, | ||
"marginBottom": 10 | ||
} | ||
}, | ||
"alexa2MaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Alexa2", | ||
"help": "in minutes", | ||
"hidden": "!data.alexa2Devices", | ||
"hideOnlyControl": false | ||
}, | ||
"bleMaxMinutes": { | ||
"type": "number", | ||
"min": 1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Ble", | ||
"help": "in minutes", | ||
"hidden": "!data.bleDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"deconzMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Deconz", | ||
"help": "in minutes", | ||
"hidden": "!data.deconzDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"enoceanMaxMinutes": { | ||
"type": "number", | ||
"min": 1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Enocean", | ||
"help": "in minutes", | ||
"hidden": "!data.enoceanDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"esphomeMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "EspHome", | ||
"help": "in minutes", | ||
"hidden": "!data.esphomeDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"fritzdectMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "FritzDect", | ||
"help": "in minutes", | ||
"hidden": "!data.fritzdectDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"hamMaxMinutes": { | ||
"type": "number", | ||
"min": 1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Ham", | ||
"help": "in minutes", | ||
"hidden": "!data.hamDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"harmonyMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Harmony", | ||
"help": "in minutes", | ||
"hidden": "!data.harmonyDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"hmiPMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "HmiP", | ||
"help": "in minutes", | ||
"hidden": "!data.hmiPDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"hmrpcMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "HM-RPC", | ||
"help": "in minutes", | ||
"hidden": "!data.hmrpcDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"hs100MaxMinutes": { | ||
"type": "number", | ||
"min": 1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "hs100", | ||
"help": "in minutes", | ||
"hidden": "!data.hs100Devices", | ||
"hideOnlyControl": false | ||
}, | ||
"hueMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Hue", | ||
"help": "in minutes", | ||
"hidden": "!data.hueDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"hueextMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "HueExtended", | ||
"help": "in minutes", | ||
"hidden": "!data.hueExtDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"jeelinkMaxMinutes": { | ||
"type": "number", | ||
"min": 1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Jeelink", | ||
"help": "in minutes", | ||
"hidden": "!data.jeelinkDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"lupusecMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Lupusec", | ||
"help": "in minutes", | ||
"hidden": "!data.lupusecDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"maxcubeMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Maxcube", | ||
"help": "in minutes", | ||
"hidden": "!data.maxcubeDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"merossMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Meross", | ||
"help": "in minutes", | ||
"hidden": "!data.merossDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"mihomeMaxMinutes": { | ||
"type": "number", | ||
"min": 1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "MiHome", | ||
"help": "in minutes", | ||
"hidden": "!data.mihomeDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"mihomeGWMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "MiHome Gateway", | ||
"help": "in minutes", | ||
"hidden": "!data.mihomeDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"mihomeVacuumMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Mihome Vacuum", | ||
"help": "in minutes", | ||
"hidden": "!data.mihomeVacuumDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"netatmoMaxMinutes": { | ||
"type": "number", | ||
"min": 1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Netatmo", | ||
"help": "in minutes", | ||
"hidden": "!data.netatmoDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"nukiextendMaxMinutes": { | ||
"type": "number", | ||
"min": 1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Nuki Extended", | ||
"help": "in minutes", | ||
"hidden": "!data.nukiExtDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"nutMaxMinutes": { | ||
"type": "number", | ||
"min": 1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Nut", | ||
"help": "in minutes", | ||
"hidden": "!data.nutDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"pingMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Ping", | ||
"help": "in minutes", | ||
"hidden": "!data.pingDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"roombaMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Roomba", | ||
"help": "in minutes", | ||
"hidden": "!data.roombaDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"shellyMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Shelly", | ||
"help": "in minutes", | ||
"hidden": "!data.shellyDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"sonoffMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Sonoff", | ||
"help": "in minutes", | ||
"hidden": "!data.sonoffDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"sonosMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Sonos", | ||
"help": "in minutes", | ||
"hidden": "!data.sonosDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"switchbotMaxMinutes": { | ||
"type": "number", | ||
"min": 1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Switchbot Ble", | ||
"help": "in minutes", | ||
"hidden": "!data.switchbotBleDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"tadoMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Tado", | ||
"help": "in minutes", | ||
"hidden": "!data.tadoDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"tradfriMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Tradfri", | ||
"help": "in minutes", | ||
"hidden": "!data.tradfriDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"unifiMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Unifi", | ||
"help": "in minutes", | ||
"hidden": "!data.unifiDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"wledMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "WLED", | ||
"help": "in minutes", | ||
"hidden": "!data.wledDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"yeelightMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Yeelight-2", | ||
"help": "in minutes", | ||
"hidden": "!data.yeelightDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"zigbeeMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Zigbee", | ||
"help": "in minutes", | ||
"hidden": "!data.zigbeeDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"zigbee2mqttMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Zigbee2MQTT", | ||
"help": "in minutes", | ||
"hidden": "!data.zigbee2mqttDevices", | ||
"hideOnlyControl": false | ||
}, | ||
"zwaveMaxMinutes": { | ||
"type": "number", | ||
"min": -1, | ||
"max": 100000, | ||
"sm": 6, | ||
"md": 6, | ||
"lg": 3, | ||
"label": "Zwave", | ||
"help": "in minutes", | ||
"hidden": "!data.zwaveDevices", | ||
"hideOnlyControl": false | ||
} | ||
} | ||
} | ||
} | ||
} |
{ | ||
"common": { | ||
"name": "device-watcher", | ||
"version": "2.0.1", | ||
"version": "2.0.2", | ||
"news": { | ||
"2.0.2": { | ||
"en": "added status to battery list\nbatt devices which are offline are now still included in the battery list\nsmall improvements of translations\noffline time settings: you can use 0 instead of -1 (it will be the new standard)\nimprovements of adaptername\nfixed issues [#66](https://github.com/ciddi89/ioBroker.device-watcher/issues/66) & [#67](https://github.com/ciddi89/ioBroker.device-watcher/issues/67)\nrepaired blacklist notifications\nadded handling for blacklist object", | ||
"de": "status zur batterieliste hinzugefügt\nbatt-geräte, die offline sind, sind jetzt noch in der batterieliste enthalten\nkleine verbesserungen der übersetzungen\noffline-zeiteinstellungen: sie können 0 anstelle -1 verwenden (es wird der neue standard sein)\nverbesserungen des adapternamens\n[#66](https://github.com/ciddi89/ioBroker.device-watcher/issues/66) & [#67](https://github.com/ciddi89/ioBroker.device-watcher/issues/67)\nreparierte blacklist-benachrichtigungen\nzusätzliche handhabung für blacklist-objekt", | ||
"ru": "добавлен статус в список батарей\nbatt устройства, которые являются offline, теперь все еще включены в список батарей\nнебольшие улучшения переводов\nоффлайн настройки времени: вы можете использовать 0 вместо -1 (это будет новый стандарт)\nулучшения логины адаптера\nфиксированные вопросы [#66](https://github.com/ciddi89/ioBroker.device-watcher/issues/66) & [#67](https://github.com/ciddi89/ioBroker.device-watcher/issues/67)\nотремонтированный черный список уведомлений\nдобавлена обработка для объекта blacklist", | ||
"pt": "status adicionado à lista de bateria\ndispositivos de batedor que estão offline ainda estão incluídos na lista de baterias\npequenas melhorias de traduções\nconfigurações de tempo off-line: você pode usar 0 em vez de -1 (ele será o novo padrão)\nmelhorias do nome do adaptador\n(http://github.com/ciddi89/ioBroker.device-watcher/issues/66) & [#67](https://github.com/ciddi89/ioBroker.device-watcher/issues/67)\nnotificações de lista negra reparadas\nmanipulação adicionada para objeto de lista negra", | ||
"nl": "vertaling:\nbatt apparatuur die offline zijn nog steeds in de batterijlijst\nvertaling:\noffline time settings: je kunt 0 gebruiken in plaats van -1 (het zal de nieuwe standaard zijn)\nverbeteringen van adapternaam\nquality over Quantity (QoQ) Releases Vertaling:\nvertaling:\nvertaling:", | ||
"fr": "statut ajouté à la liste de piles\nles dispositifs de chauves-souris qui sont hors ligne sont maintenant toujours inclus dans la liste de batterie\npetites améliorations des traductions\nparamètres de temps hors ligne: vous pouvez utiliser 0 au lieu de -1 (il sera la nouvelle norme)\naméliorations du nom d'adaptateur\n(https://github.com/ciddi89/ioBroker.device-watcher/issues/66) \" [#67](https://github.com/ciddi89/ioBroker.device-watcher/issues/67)\nnotifications de listes noires réparées\nmanipulation supplémentaire pour objet blacklist", | ||
"it": "stato aggiunto alla lista della batteria\nbatt dispositivi che sono offline sono ora ancora inclusi nella lista della batteria\npiccoli miglioramenti delle traduzioni\nimpostazioni di tempo offline: è possibile utilizzare 0 invece di -1 (è il nuovo standard)\nmiglioramenti del nome dell'adattatore\n(https://github.com/ciddi89/ioBroker.device-watcher/issues/66) & [#67](https://github.com/ciddi89/ioBroker.device-watcher/issues/67)\nnotifiche di blacklist riparate\ngestione aggiuntiva per oggetto blacklist", | ||
"es": "estado añadido a la lista de baterías\ndispositivos de batta que están fuera de línea ahora están incluidos en la lista de baterías\npequeñas mejoras de las traducciones\najustes del tiempo fuera de línea: puede utilizar 0 en lugar de -1 (será el nuevo estándar)\nmejoras en el nombre de adaptador\ncuestiones fijas [#66](https://github.com/ciddi89/ioBroker.device-watcher/issues/66) & [#67](https://github.com/ciddi89/ioBroker.device-watcher/issues/67)\nnotificaciones de lista negra reparadas\nmanejo añadido para objeto de lista negra", | ||
"pl": "dodany status baterii\nurządzenia z baterią, które są offline, są obecnie włączone do listy baterii\nmałe poprawki tłumaczenia\nwspółczynnikowy: możesz użyć 0 zamiast -1 (jak będzie nowy standard)\nulepszenia adaptername\nnumery stałe (#66(https:/github.com/ciddi89/ioBroker.device-watcher/issues/66) & #67(https:/github.com/ciddi89/ioBroker.device-watcher/67)\nulepszenia czarnej listy\nobsługa blacklist object", | ||
"uk": "додано статус до списку акумуляторів\nпристрої для баттів, які в автономному режимі, все ще включені в список акумуляторів\nневеликі поліпшення перекладів\nв автономному режимі настройки часу: ви можете використовувати 0 замість -1 (це буде новий стандарт)\nполіпшення імені адаптера\n[#66](https://github.com/ciddi89/ioBroker.device-watcher/issues/66) & [#67](https://github.com/ciddi89/ioBroker.device-watcher/issues/67)\nвідремонтовані повідомлення blacklist\nдодана обробка для об'єкта blacklist", | ||
"zh-cn": "电池清单的附加地位\nb 现仍在列入电池清单的浮动装置\n翻译的小改进\n时限:你可以使用0.而不是1-1(即新标准)\nb. 改进适应人员名\n固定问题[第66](http://github.com/ciddi89/ioBroker.device-watcher/issues/66)和[#67](http://github.com/ciddi89/Broker.device-watcher/issues/67)\n修理黑名单通知\n黑名单目标的新增处理" | ||
}, | ||
"2.0.1": { | ||
@@ -42,3 +55,4 @@ "en": "If the device is offline, set signal strength to '0%'\nIf the device is offline, set battery to ' - '\nrepair some small issues in the lists", | ||
"pl": "usunąć wskaźniki do codziennego przesyłania wiadomości\nzmieniono wybór dla urządzeń ostrzałowych\nadapter Zigbee2MQTT\ndodała funkcję krona do codziennego użytku", | ||
"zh-cn": "d. 每天发出的讯息的清除指标\n炮火装置的选择\n增加Zigbee2MQTT适应人员\nb. 利用自己的时间进行日常概览信息" | ||
"zh-cn": "d. 每天发出的讯息的清除指标\n炮火装置的选择\n增加Zigbee2MQTT适应人员\nb. 利用自己的时间进行日常概览信息", | ||
"uk": "видалено індикатор щоденних відправлених повідомлень\nзмінено селектор для пристроїв shelly\nдодано адаптер Zigbee2MQTT\nдодано функцію cron для використання власного часу для щоденних оглядових повідомлень" | ||
}, | ||
@@ -55,3 +69,4 @@ "1.0.1": { | ||
"pl": "dodał WLED, Ikea Tradfri, Roomba, HmIp, Tado, Netatmo, Yeelight-2, Unifi, Nut i Meross\nbaterie\npoprawiono i naprawiło pewne problemy z ostatnim kontaktem\nwspierać stare urządzenia HM\nniewielki refaktor\nzmienił selekcjonera z dp rssi na dp online", | ||
"zh-cn": "新增的WLED, Ikea Tradfri,会议室巴,HmIp, Tado,Netatmo, Yeecent-2, Unifi, Nut and Meross适应er\n固定电池信息\n纠正并修复了最后接触时间的一些问题\n对旧的HM装置的更多支持\n守则略有修改\n弹壳从手西改为在线" | ||
"zh-cn": "新增的WLED, Ikea Tradfri,会议室巴,HmIp, Tado,Netatmo, Yeecent-2, Unifi, Nut and Meross适应er\n固定电池信息\n纠正并修复了最后接触时间的一些问题\n对旧的HM装置的更多支持\n守则略有修改\n弹壳从手西改为在线", | ||
"uk": "додано адаптер WLED, Ikea Tradfri, Roomba, HmIp, Tado, Netatmo, Yeelight-2, Unifi, Nut і Meross\nповідомлення про розряд батареї\nвиправлено та усунено деякі проблеми часу останнього контакту\nдодана підтримка старих пристроїв HM\nдеякий невеликий рефакторинг коду\nзмінено селектор shelly з dp rssi на dp online" | ||
}, | ||
@@ -68,3 +83,4 @@ "1.0.0": { | ||
"pl": "BTEAKING CHANGE (ang.). Jeśli uaktualnienie od wersji <= 0.3.0, usunie starego przykładu przed aktualizacją do >= 1.0.0 po tym, jak możesz stworzyć nowy przykład.\nzmienione mody od ul. do daemonu, słyszeć radę powyżej\nlogite Harmony Hub\nmałe błędy (właściwe funkcje czarnej listy, naprawy wyciek pamięci itp.)", | ||
"zh-cn": "** BREAKANGE ** 如果你从 <=0.3.0”的版本中更新,那么,在你更新到1.0.0之前,将旧的事例删除。.\n更改从单元到大都市的模式,请从上述咨询意见中了解。\n增额后勤技术\n小型配制(黑名单的主位,用于纪念泄漏等)。" | ||
"zh-cn": "** BREAKANGE ** 如果你从 <=0.3.0”的版本中更新,那么,在你更新到1.0.0之前,将旧的事例删除。.\n更改从单元到大都市的模式,请从上述咨询意见中了解。\n增额后勤技术\n小型配制(黑名单的主位,用于纪念泄漏等)。", | ||
"uk": "** ГОЛОВНА ЗМІНА ** Якщо ви оновлюєтеся з версії <= 0.3.0, спершу видаліть старий екземпляр перед оновленням до >= 1.0.0. Після цього ви можете створити новий екземпляр.\nзмінено режим із shedule на daemon, зверніть увагу на наведену вище пораду\nдодано Logitech Harmony Hub\nневеликі виправлення помилок (власна функція для чорного списку, виправлення витоку пам’яті тощо)" | ||
}, | ||
@@ -81,15 +97,4 @@ "0.3.0": { | ||
"pl": "usunąć numer kanałowy w nazwie Homematic\ndodano funkcję do tworzenia listy html\ndodał germanizm i english documentation", | ||
"zh-cn": "拆除家庭装置名称的渠道\nd. 增设的编制名单的职能\n增 录" | ||
}, | ||
"0.2.4": { | ||
"en": "many changes of code, comments and error handling", | ||
"de": "viele änderungen von code, kommentaren und fehlerbehandlung", | ||
"ru": "много изменений кода, комментариев и обработки ошибок", | ||
"pt": "muitas mudanças de código, comentários e manipulação de erros", | ||
"nl": "veel veranderingen van code, commentaar en fouten", | ||
"fr": "de nombreux changements de code, de commentaires et de traitement des erreurs", | ||
"it": "molte modifiche di codice, commenti e gestione degli errori", | ||
"es": "muchos cambios de código, comentarios y manejo de errores", | ||
"pl": "wiele zmian kodu, komentarzy i obsługi błędów", | ||
"zh-cn": "守则、评论和错误处理的许多变化" | ||
"zh-cn": "拆除家庭装置名称的渠道\nd. 增设的编制名单的职能\n增 录", | ||
"uk": "видалено номер каналу в назві пристроїв Homematic\nдодана функція для створення списку html\nдодано німецьку та англійську документацію" | ||
} | ||
@@ -107,3 +112,4 @@ }, | ||
"pl": "Obserwator urządzeń", | ||
"zh-cn": "设备观察者" | ||
"zh-cn": "设备观察者", | ||
"uk": "Device-Watcher" | ||
}, | ||
@@ -120,3 +126,4 @@ "desc": { | ||
"pl": "Watchdog dla urządzeń", | ||
"zh-cn": "设备看门狗" | ||
"zh-cn": "设备看门狗", | ||
"uk": "Сторожовий пес для пристроїв" | ||
}, | ||
@@ -256,39 +263,39 @@ "authors": [ | ||
"updateinterval": 10, | ||
"alexa2MaxMinutes": -1, | ||
"alexa2MaxMinutes": 0, | ||
"bleMaxMinutes": 300, | ||
"deconzMaxMinutes": -1, | ||
"esphomeMaxMinutes": -1, | ||
"deconzMaxMinutes": 0, | ||
"esphomeMaxMinutes": 0, | ||
"enoceanMaxMinutes": 300, | ||
"fritzdectMaxMinutes": -1, | ||
"fritzdectMaxMinutes": 0, | ||
"hamMaxMinutes": 300, | ||
"harmonyMaxMinutes": -1, | ||
"hmiPMaxMinutes": -1, | ||
"hmrpcMaxMinutes": -1, | ||
"harmonyMaxMinutes": 0, | ||
"hmiPMaxMinutes": 0, | ||
"hmrpcMaxMinutes": 0, | ||
"hs100MaxMinutes": 300, | ||
"hueMaxMinutes": -1, | ||
"hueextMaxMinutes": -1, | ||
"hueMaxMinutes": 0, | ||
"hueextMaxMinutes": 0, | ||
"jeelinkMaxMinutes": 300, | ||
"lupusecMaxMinutes": -1, | ||
"maxcubeMaxMinutes": -1, | ||
"merossMaxMinutes": -1, | ||
"lupusecMaxMinutes": 0, | ||
"maxcubeMaxMinutes": 0, | ||
"merossMaxMinutes": 0, | ||
"mihomeMaxMinutes": 300, | ||
"mihomeGWMaxMinutes": -1, | ||
"mihomeVacuumMaxMinutes": -1, | ||
"mihomeGWMaxMinutes": 0, | ||
"mihomeVacuumMaxMinutes": 0, | ||
"netatmoMaxMinutes": 300, | ||
"nukiextendMaxMinutes": 300, | ||
"nutMaxMinutes": 300, | ||
"pingMaxMinutes": -1, | ||
"roombaMaxMinutes": -1, | ||
"shellyMaxMinutes": -1, | ||
"sonoffMaxMinutes": -1, | ||
"sonosMaxMinutes": -1, | ||
"pingMaxMinutes": 0, | ||
"roombaMaxMinutes": 0, | ||
"shellyMaxMinutes": 0, | ||
"sonoffMaxMinutes": 0, | ||
"sonosMaxMinutes": 0, | ||
"switchbotMaxMinutes": 300, | ||
"tadoMaxMinutes": -1, | ||
"tradfriMaxMinutes": -1, | ||
"unifiMaxMinutes": -1, | ||
"wledMaxMinutes": -1, | ||
"yeelightMaxMinutes": -1, | ||
"tadoMaxMinutes": 0, | ||
"tradfriMaxMinutes": 0, | ||
"unifiMaxMinutes": 0, | ||
"wledMaxMinutes": 0, | ||
"yeelightMaxMinutes": 0, | ||
"zigbeeMaxMinutes": 300, | ||
"zigbee2mqttMaxMinutes": -1, | ||
"zwaveMaxMinutes": -1 | ||
"zigbee2mqttMaxMinutes": 0, | ||
"zwaveMaxMinutes": 0 | ||
}, | ||
@@ -295,0 +302,0 @@ "objects": [], |
// arrays of supported adapters | ||
const arrApart = { | ||
alexa2: { | ||
'Selektor': 'alexa2.*.online', | ||
'adapter': 'alexa2', | ||
'battery': 'none', | ||
'reach': '.online', | ||
'isLowBat': 'none' | ||
Selektor: 'alexa2.*.online', | ||
adapterID: 'alexa2', | ||
adapter: 'Alexa2', | ||
battery: 'none', | ||
reach: '.online', | ||
isLowBat: 'none', | ||
}, | ||
ble: { | ||
'Selektor': 'ble.*.rssi', | ||
'adapter': 'ble', | ||
'battery': '.battery', | ||
'rssiState': '.rssi', | ||
'reach': 'none', | ||
'isLowBat': 'none' | ||
Selektor: 'ble.*.rssi', | ||
adapterID: 'ble', | ||
adapter: 'Ble', | ||
battery: '.battery', | ||
rssiState: '.rssi', | ||
reach: 'none', | ||
isLowBat: 'none', | ||
}, | ||
deconz: { | ||
'Selektor': 'deconz.*.reachable', | ||
'adapter': 'deconz', | ||
'battery': '.battery', | ||
'reach': '.reachable', | ||
'isLowBat': 'none' | ||
Selektor: 'deconz.*.reachable', | ||
adapterID: 'deconz', | ||
adapter: 'Deconz', | ||
battery: '.battery', | ||
reach: '.reachable', | ||
isLowBat: 'none', | ||
}, | ||
enocean: { | ||
'Selektor': 'enocean.*.rssi', | ||
'adapter': 'enocean', | ||
'battery': '.BS', | ||
'rssiState': '.rssi', | ||
'reach': 'none', | ||
'isLowBat': 'none' | ||
Selektor: 'enocean.*.rssi', | ||
adapterID: 'enocean', | ||
adapter: 'Enocean', | ||
battery: '.BS', | ||
rssiState: '.rssi', | ||
reach: 'none', | ||
isLowBat: 'none', | ||
}, | ||
esphome: { | ||
'Selektor': 'esphome.*._online', | ||
'adapter': 'esphome', | ||
'battery': 'none', | ||
'reach': '._online', | ||
'isLowBat': 'none', | ||
'id': '.name' | ||
Selektor: 'esphome.*._online', | ||
adapterID: 'esphome', | ||
adapter: 'ESPHome', | ||
battery: 'none', | ||
reach: '._online', | ||
isLowBat: 'none', | ||
id: '.name', | ||
}, | ||
fritzdect: { | ||
'Selektor': 'fritzdect.*.present', | ||
'adapter': 'fritzDect', | ||
'battery': '.battery', | ||
'reach': '.present', | ||
'isLowBat': '.batterylow' | ||
Selektor: 'fritzdect.*.present', | ||
adapterID: 'fritzdect', | ||
adapter: 'Fritz Dect', | ||
battery: '.battery', | ||
reach: '.present', | ||
isLowBat: '.batterylow', | ||
}, | ||
harmony: { | ||
'Selektor': 'harmony.*.hubConnected', | ||
'adapter': 'harmony', | ||
'battery': 'none', | ||
'reach': '.hubConnected', | ||
'isLowBat': 'none' | ||
Selektor: 'harmony.*.hubConnected', | ||
adapterID: 'harmony', | ||
adapter: 'Harmony', | ||
battery: 'none', | ||
reach: '.hubConnected', | ||
isLowBat: 'none', | ||
}, | ||
ham: { | ||
'Selektor': 'ham.*.Battery-Level', | ||
'adapter': 'ham', | ||
'battery': '.Battery-Level', | ||
'reach': 'none', | ||
'isLowBat': 'none', | ||
'id': '.Name' | ||
Selektor: 'ham.*.Battery-Level', | ||
adapterID: 'ham', | ||
adapter: 'Ham', | ||
battery: '.Battery-Level', | ||
reach: 'none', | ||
isLowBat: 'none', | ||
id: '.Name', | ||
}, | ||
hmiP: { | ||
'Selektor': 'hmip.*.rssiDeviceValue', | ||
'adapter': 'hmiP', | ||
'rssiState': '.rssiDeviceValue', | ||
'battery': 'none', | ||
'reach': '.unreach', | ||
'isLowBat': '.lowBat', | ||
Selektor: 'hmip.*.rssiDeviceValue', | ||
adapterID: 'hmiP', | ||
adapter: 'Homematic IP', | ||
rssiState: '.rssiDeviceValue', | ||
battery: 'none', | ||
reach: '.unreach', | ||
isLowBat: '.lowBat', | ||
}, | ||
hmrpc: { | ||
'Selektor': 'hm-rpc.*.UNREACH', | ||
'adapter': 'hmrpc', | ||
'rssiState': '.RSSI_DEVICE', | ||
'rssiPeerState': '.RSSI_PEER', | ||
'battery': '.OPERATING_VOLTAGE', | ||
'reach': '.UNREACH', | ||
'isLowBat': '.LOW_BAT', | ||
'isLowBat2': '.LOWBAT', | ||
'stateValue': '.1.STATE' | ||
Selektor: 'hm-rpc.*.UNREACH', | ||
adapterID: 'hmrpc', | ||
adapter: 'Homematic RPC', | ||
rssiState: '.RSSI_DEVICE', | ||
rssiPeerState: '.RSSI_PEER', | ||
battery: '.OPERATING_VOLTAGE', | ||
reach: '.UNREACH', | ||
isLowBat: '.LOW_BAT', | ||
isLowBat2: '.LOWBAT', | ||
stateValue: '.1.STATE', | ||
}, | ||
hs100: { | ||
'Selektor': 'hs100.*.last_update', | ||
'adapter': 'hs100', | ||
'battery': 'none', | ||
'reach': 'none', | ||
'isLowBat': 'none' | ||
Selektor: 'hs100.*.last_update', | ||
adapterID: 'hs100', | ||
adapter: 'hs100', | ||
battery: 'none', | ||
reach: 'none', | ||
isLowBat: 'none', | ||
}, | ||
hue: { | ||
'Selektor': 'hue.*.reachable', | ||
'adapter': 'hue', | ||
'battery': '.battery', | ||
'reach': '.reachable', | ||
'isLowBat': 'none' | ||
Selektor: 'hue.*.reachable', | ||
adapterID: 'hue', | ||
adapter: 'Philips Hue', | ||
battery: '.battery', | ||
reach: '.reachable', | ||
isLowBat: 'none', | ||
}, | ||
hueExt: { | ||
'Selektor': 'hue-extended.*.reachable', | ||
'adapter': 'hue-extended', | ||
'battery': '.config.battery', | ||
'reach': '.reachable', | ||
'isLowBat': 'none' | ||
Selektor: 'hue-extended.*.reachable', | ||
adapterID: 'hueExt', | ||
adapter: 'Philips Hue Extended', | ||
battery: '.config.battery', | ||
reach: '.reachable', | ||
isLowBat: 'none', | ||
}, | ||
jeelink: { | ||
'Selektor': 'jeelink.*.lowBatt', | ||
'adapter': 'jeelink', | ||
'battery': 'none', | ||
'reach': 'none', | ||
'isLowBat': '.lowBatt' | ||
Selektor: 'jeelink.*.lowBatt', | ||
adapterID: 'jeelink', | ||
adapter: 'Jeelink', | ||
battery: 'none', | ||
reach: 'none', | ||
isLowBat: '.lowBatt', | ||
}, | ||
lupusec: { | ||
'Selektor': 'lupusec.*.cond_ok', | ||
'adapter': 'lupusec', | ||
'battery': 'none', | ||
'rssiState': '.rssi', | ||
'reach': '.cond_ok', | ||
'isLowBat': '.battery_ok', | ||
'id': 'none' | ||
Selektor: 'lupusec.*.cond_ok', | ||
adapterID: 'lupusec', | ||
adapter: 'Lupusec', | ||
battery: 'none', | ||
rssiState: '.rssi', | ||
reach: '.cond_ok', | ||
isLowBat: '.battery_ok', | ||
id: 'none', | ||
}, | ||
maxcube: { | ||
'Selektor': 'maxcube.*.link_error', | ||
'adapter': 'maxcube', | ||
'battery': 'none', | ||
'reach': '.error', | ||
'isLowBat': '.battery_low' | ||
Selektor: 'maxcube.*.link_error', | ||
adapterID: 'maxcube', | ||
adapter: 'Max! Cube', | ||
battery: 'none', | ||
reach: '.error', | ||
isLowBat: '.battery_low', | ||
}, | ||
meross: { | ||
'Selektor': 'meross.*.online', | ||
'adapter': 'meross', | ||
'battery': '.battery', | ||
'reach': '.online', | ||
'isLowBat': 'none' | ||
Selektor: 'meross.*.online', | ||
adapterID: 'meross', | ||
adapter: 'Meross', | ||
battery: '.battery', | ||
reach: '.online', | ||
isLowBat: 'none', | ||
}, | ||
mihome: { | ||
'Selektor': 'mihome.*.percent', | ||
'adapter': 'miHome', | ||
'battery': '.percent', | ||
'reach': 'none', | ||
'isLowBat': 'none' | ||
Selektor: 'mihome.*.percent', | ||
adapterID: 'mihome', | ||
adapter: 'MiHome', | ||
battery: '.percent', | ||
reach: 'none', | ||
isLowBat: 'none', | ||
}, | ||
mihomeGW: { | ||
'Selektor': 'mihome.*.connected', | ||
'adapter': 'miHome', | ||
'battery': 'none', | ||
'reach': '.connected', | ||
'isLowBat': 'none' | ||
Selektor: 'mihome.*.connected', | ||
adapterID: 'mihome', | ||
adapter: 'MiHome', | ||
battery: 'none', | ||
reach: '.connected', | ||
isLowBat: 'none', | ||
}, | ||
mihomeVacuum: { | ||
'Selektor': 'mihome-vacuum.*.connection', | ||
'adapter': 'mihomeVacuum', | ||
'rssiState': '.deviceInfo.wifi_signal', | ||
'battery': '.info.battery', | ||
'battery2': '.control.battary_life', | ||
'reach': '.info.connection', | ||
'isLowBat': 'none', | ||
'id': '.deviceInfo.model' | ||
Selektor: 'mihome-vacuum.*.connection', | ||
adapterID: 'mihomeVacuum', | ||
adapter: 'MiHome Vacuum', | ||
rssiState: '.deviceInfo.wifi_signal', | ||
battery: '.info.battery', | ||
battery2: '.control.battary_life', | ||
reach: '.info.connection', | ||
isLowBat: 'none', | ||
id: '.deviceInfo.model', | ||
}, | ||
netatmo: { | ||
'Selektor': 'netatmo.*.LastUpdate', | ||
'adapter': 'netatmo', | ||
'rssiState': '.WifiStatus', | ||
'rfState': '.RfStatus', | ||
'battery': '.BatteryStatus', | ||
'reach': 'none', | ||
'isLowBat': 'none' | ||
Selektor: 'netatmo.*.LastUpdate', | ||
adapterID: 'netatmo', | ||
adapter: 'Netatmo', | ||
rssiState: '.WifiStatus', | ||
rfState: '.RfStatus', | ||
battery: '.BatteryStatus', | ||
reach: 'none', | ||
isLowBat: 'none', | ||
}, | ||
nukiExt: { | ||
'Selektor': 'nuki-extended.*.lastDataUpdate', | ||
'adapter': 'nuki-extended', | ||
'rssiState': 'none', | ||
'battery': '.batteryChargeState', | ||
'reach': 'none', | ||
'isLowBat': '.batteryCritical' | ||
Selektor: 'nuki-extended.*.lastDataUpdate', | ||
adapterID: 'nukiExt', | ||
adapter: 'Nuki Extended', | ||
rssiState: 'none', | ||
battery: '.batteryChargeState', | ||
reach: 'none', | ||
isLowBat: '.batteryCritical', | ||
}, | ||
nut: { | ||
'Selektor': 'nut.*.charge', | ||
'adapter': 'nut', | ||
'battery': '.charge', | ||
'reach': 'none', | ||
'isLowBat': 'none' | ||
Selektor: 'nut.*.charge', | ||
adapterID: 'nut', | ||
adapter: 'Nut', | ||
battery: '.charge', | ||
reach: 'none', | ||
isLowBat: 'none', | ||
}, | ||
ping: { | ||
'Selektor': 'ping.*.alive', | ||
'adapter': 'ping', | ||
'battery': 'none', | ||
'reach': '.alive', | ||
'isLowBat': 'none' | ||
Selektor: 'ping.*.alive', | ||
adapterID: 'ping', | ||
adapter: 'Ping', | ||
battery: 'none', | ||
reach: '.alive', | ||
isLowBat: 'none', | ||
}, | ||
roomba: { | ||
'Selektor': 'roomba.*.signal', | ||
'adapter': 'roomba', | ||
'battery': '.battery', | ||
'reach': '._connected', | ||
'rssiState': '.signal', | ||
'isLowBat': 'none', | ||
'id': '.device.name' | ||
Selektor: 'roomba.*.signal', | ||
adapterID: 'roomba', | ||
adapter: 'Roomba', | ||
battery: '.battery', | ||
reach: '._connected', | ||
rssiState: '.signal', | ||
isLowBat: 'none', | ||
id: '.device.name', | ||
}, | ||
shelly: { | ||
'Selektor': 'shelly.*.uptime', | ||
'adapter': 'shelly', | ||
'rssiState': '.rssi', | ||
'battery': '.sensor.battery', | ||
'reach': '.online', | ||
'isLowBat': 'none' | ||
Selektor: 'shelly.*.uptime', | ||
adapterID: 'shelly', | ||
adapter: 'Shelly', | ||
rssiState: '.rssi', | ||
battery: '.sensor.battery', | ||
reach: '.online', | ||
isLowBat: 'none', | ||
}, | ||
sonoff: { | ||
'Selektor': 'sonoff.*.alive', | ||
'adapter': 'sonoff', | ||
'rssiState': '.Wifi_RSSI', | ||
'battery': '.battery', | ||
'reach': '.alive', | ||
'uptime': '.Uptime', | ||
'isLowBat': 'none' | ||
Selektor: 'sonoff.*.alive', | ||
adapterID: 'sonoff', | ||
adapter: 'Sonoff', | ||
rssiState: '.Wifi_RSSI', | ||
battery: '.battery', | ||
reach: '.alive', | ||
uptime: '.Uptime', | ||
isLowBat: 'none', | ||
}, | ||
sonos: { | ||
'Selektor': 'sonos.*.alive', | ||
'adapter': 'sonos', | ||
'battery': 'none', | ||
'reach': '.alive', | ||
'isLowBat': 'none' | ||
Selektor: 'sonos.*.alive', | ||
adapterID: 'sonos', | ||
adapter: 'Sonos', | ||
battery: 'none', | ||
reach: '.alive', | ||
isLowBat: 'none', | ||
}, | ||
switchbotBle: { | ||
'Selektor': 'switchbot-ble.*.rssi', | ||
'adapter': 'switchbotBle', | ||
'battery': '.battery', | ||
'rssiState': '.rssi', | ||
'reach': 'none', | ||
'isLowBat': 'none', | ||
'id': '.id' | ||
Selektor: 'switchbot-ble.*.rssi', | ||
adapterID: 'switchbotBle', | ||
adapter: 'Switchbot Ble', | ||
battery: '.battery', | ||
rssiState: '.rssi', | ||
reach: 'none', | ||
isLowBat: 'none', | ||
id: '.id', | ||
}, | ||
tado: { | ||
'Selektor': 'tado.*.batteryState', | ||
'adapter': 'tado', | ||
'rssiState': 'none', | ||
'battery': 'none', | ||
'reach': '.connectionState.value', | ||
'isLowBat': '.batteryState', | ||
'id': 'none' | ||
Selektor: 'tado.*.batteryState', | ||
adapterID: 'tado', | ||
adapter: 'Tado', | ||
rssiState: 'none', | ||
battery: 'none', | ||
reach: '.connectionState.value', | ||
isLowBat: '.batteryState', | ||
id: 'none', | ||
}, | ||
tradfri: { | ||
'Selektor': 'tradfri.*.lastSeen', | ||
'adapter': 'tradfri', | ||
'rssiState': 'none', | ||
'battery': '.batteryPercentage', | ||
'reach': '.alive', | ||
'isLowBat': 'none', | ||
'id': 'none' | ||
Selektor: 'tradfri.*.lastSeen', | ||
adapterID: 'tradfri', | ||
adapter: 'Tradfri', | ||
rssiState: 'none', | ||
battery: '.batteryPercentage', | ||
reach: '.alive', | ||
isLowBat: 'none', | ||
id: 'none', | ||
}, | ||
unifi: { | ||
'Selektor': 'unifi.*.state', | ||
'adapter': 'unifi', | ||
'battery': 'none', | ||
'reach': '.state', | ||
'isLowBat': 'none', | ||
'id': 'none' | ||
Selektor: 'unifi.*.state', | ||
adapterID: 'unifi', | ||
adapter: 'Unifi', | ||
battery: 'none', | ||
reach: '.state', | ||
isLowBat: 'none', | ||
id: 'none', | ||
}, | ||
wled: { | ||
'Selektor': 'wled.*._online', | ||
'adapter': 'wled', | ||
'rssiState': '.wifi.rssi', | ||
'battery': 'none', | ||
'reach': '._online', | ||
'isLowBat': 'none', | ||
'id': 'none' | ||
Selektor: 'wled.*._online', | ||
adapterID: 'wled', | ||
adapter: 'WLED', | ||
rssiState: '.wifi.rssi', | ||
battery: 'none', | ||
reach: '._online', | ||
isLowBat: 'none', | ||
id: 'none', | ||
}, | ||
yeelight: { | ||
'Selektor': 'yeelight-2.*.connect', | ||
'adapter': 'yeelight-2', | ||
'battery': 'none', | ||
'reach': '.connect', | ||
'isLowBat': 'none' | ||
Selektor: 'yeelight-2.*.connect', | ||
adapterID: 'yeelight', | ||
adapter: 'Yeelight', | ||
battery: 'none', | ||
reach: '.connect', | ||
isLowBat: 'none', | ||
}, | ||
zigbee: { | ||
'Selektor': 'zigbee.*.link_quality', | ||
'adapter': 'zigbee', | ||
'battery': '.battery', | ||
'rssiState': 'link_quality', | ||
'reach': '.available', | ||
'isLowBat': '.battery_low' | ||
Selektor: 'zigbee.*.link_quality', | ||
adapterID: 'zigbee', | ||
adapter: 'Zigbee', | ||
battery: '.battery', | ||
rssiState: '.link_quality', | ||
reach: '.available', | ||
isLowBat: '.battery_low', | ||
}, | ||
zigbee2MQTT: { | ||
'Selektor': 'zigbee2mqtt.*.link_quality', | ||
'adapter': 'zigbee2MQTT', | ||
'battery': '.battery', | ||
'rssiState': '.link_quality', | ||
'reach': '.available', | ||
'isLowBat': '.battery_low' | ||
Selektor: 'zigbee2mqtt.*.link_quality', | ||
adapterID: 'zigbee2MQTT', | ||
adapter: 'Zigbee2MQTT', | ||
battery: '.battery', | ||
rssiState: '.link_quality', | ||
reach: '.available', | ||
isLowBat: '.battery_low', | ||
}, | ||
zwave: { | ||
'Selektor': 'zwave2.*.ready', | ||
'adapter': 'zwave', | ||
'battery': '.Battery.level', | ||
'reach': '.ready', | ||
'isLowBat': '.Battery.isLow' | ||
} | ||
Selektor: 'zwave2.*.ready', | ||
adapterID: 'zwave', | ||
adapter: 'Z-wave 2', | ||
battery: '.Battery.level', | ||
reach: '.ready', | ||
isLowBat: '.Battery.isLow', | ||
}, | ||
}; | ||
module.exports = arrApart; | ||
module.exports = arrApart; |
1340
main.js
@@ -19,3 +19,2 @@ /* jshint -W097 */ | ||
class DeviceWatcher extends utils.Adapter { | ||
constructor(options) { | ||
@@ -34,3 +33,2 @@ super({ | ||
this.listAllDevices = []; | ||
this.listAllDevicesRaw = []; | ||
this.blacklistLists = []; | ||
@@ -41,2 +39,12 @@ this.blacklistNotify = []; | ||
// raw arrays | ||
this.listAllDevicesRaw = []; | ||
this.batteryLowPoweredRaw = []; | ||
this.offlineDevicesRaw = []; | ||
// raw counts | ||
this.offlineDevicesCountRaw = 0; | ||
this.offlineDevicesCountRawOld = 0; | ||
this.lowBatteryPoweredCountRaw = 0; | ||
// counts | ||
@@ -57,5 +65,7 @@ this.offlineDevicesCount = 0; | ||
this.on('unload', this.onUnload.bind(this)); | ||
} | ||
/** | ||
* onReady | ||
*/ | ||
async onReady() { | ||
@@ -78,3 +88,3 @@ this.log.debug(`Adapter ${adapterName} was started`); | ||
harmony: this.config.harmonyDevices, | ||
hmiP : this.config.hmiPDevices, | ||
hmiP: this.config.hmiPDevices, | ||
hmrpc: this.config.hmrpcDevices, | ||
@@ -119,3 +129,3 @@ hs100: this.config.hs100Devices, | ||
harmony: this.config.harmonyMaxMinutes, | ||
hmiP : this.config.hmiPMaxMinutes, | ||
hmiP: this.config.hmiPMaxMinutes, | ||
hmrpc: this.config.hmrpcMaxMinutes, | ||
@@ -167,3 +177,3 @@ hs100: this.config.hs100MaxMinutes, | ||
this.log.info(`Number of selected adapters: ${this.adapterSelected.length}. Loading data from: ${(this.adapterSelected).join(', ')} ...`); | ||
this.log.info(`Number of selected adapters: ${this.adapterSelected.length}. Loading data from: ${this.adapterSelected.join(', ')} ...`); | ||
} else { | ||
@@ -185,4 +195,3 @@ this.log.warn(`No adapter selected. Please check the instance configuration!`); | ||
if (!isUnloaded) { | ||
if ((this.supAdapter !== undefined) && (this.supAdapter[id])) { | ||
if (this.supAdapter !== undefined && this.supAdapter[id]) { | ||
if (this.config.createOwnFolder) { | ||
@@ -213,3 +222,2 @@ await this.createDPsForEachAdapter(id); | ||
if (this.config.checkSendOfflineMsgDaily) await this.sendOfflineNotificationsShedule(); | ||
} catch (error) { | ||
@@ -222,6 +230,6 @@ this.errorReporting('[onReady]', error); | ||
/** | ||
* Is called if a subscribed state changes | ||
* @param {string} id | ||
* @param {ioBroker.State | null | undefined} state | ||
*/ | ||
* Is called if a subscribed state changes | ||
* @param {string} id | ||
* @param {ioBroker.State | null | undefined} state | ||
*/ | ||
onStateChange(id, state) { | ||
@@ -238,4 +246,4 @@ if (state) { | ||
/** | ||
* @param {ioBroker.Message} obj | ||
*/ | ||
* @param {ioBroker.Message} obj | ||
*/ | ||
onMessage(obj) { | ||
@@ -248,18 +256,20 @@ const devices = []; | ||
case 'devicesList': | ||
if(obj.message){ | ||
try{ | ||
if (obj.message) { | ||
try { | ||
result = this.listAllDevicesRaw; | ||
for(const element in result){ | ||
for (const element in result) { | ||
const label = 'Device: ' + result[element].Device + ' - Adapter: ' + result[element].Adapter; | ||
const myValueObject = {deviceName: result[element].Device, adapter: result[element].Adapter, path: result[element].Path}; | ||
devices[myCount] = {label: label,value: JSON.stringify(myValueObject)}; | ||
myCount ++; | ||
const myValueObject = { | ||
deviceName: result[element].Device, | ||
adapter: result[element].Adapter, | ||
path: result[element].Path, | ||
}; | ||
devices[myCount] = { label: label, value: JSON.stringify(myValueObject) }; | ||
myCount++; | ||
} | ||
this.sendTo(obj.from, obj.command, devices, obj.callback); | ||
} | ||
catch(error){ | ||
} catch (error) { | ||
this.sendTo(obj.from, obj.command, obj.callback); | ||
} | ||
} | ||
else{ | ||
} else { | ||
this.sendTo(obj.from, obj.command, obj.callback); | ||
@@ -271,2 +281,5 @@ } | ||
/** | ||
* refresh data with interval | ||
*/ | ||
async refreshData() { | ||
@@ -292,5 +305,7 @@ const nextTimeout = this.config.updateinterval * 1000; | ||
} | ||
} // <-- refreshData end | ||
/** | ||
* main function | ||
*/ | ||
async main() { | ||
@@ -303,3 +318,3 @@ this.log.debug(`Function started: ${this.main.name}`); | ||
if (!isUnloaded) { | ||
if ((this.supAdapter !== undefined) && (this.supAdapter[id])) { | ||
if (this.supAdapter !== undefined && this.supAdapter[id]) { | ||
if (this.config.createOwnFolder) { | ||
@@ -330,9 +345,8 @@ await this.createDataForEachAdapter(id); | ||
/** | ||
* @param {string} sentence - Word which should be capitalize | ||
* @param {string} id - id which should be capitalize | ||
*/ | ||
async capitalize(sentence) { | ||
capitalize(id) { | ||
//make the first letter uppercase | ||
return sentence && sentence[0].toUpperCase() + sentence.slice(1); | ||
return id && id[0].toUpperCase() + id.slice(1); | ||
} | ||
@@ -345,3 +359,3 @@ | ||
const time = new Date(); | ||
return dpValue = Math.round((time.getTime() - dpValue) / 1000 / 60); | ||
return (dpValue = Math.round((time.getTime() - dpValue) / 1000 / 60)); | ||
} | ||
@@ -367,2 +381,15 @@ | ||
/** | ||
* @param {object} data - object | ||
*/ | ||
async parseData(data) { | ||
if (!data) return {}; | ||
if (typeof data === 'object') return data; | ||
if (typeof data === 'string') return JSON.parse(data); | ||
return {}; | ||
} | ||
/** | ||
* create blacklist | ||
*/ | ||
async createBlacklist() { | ||
@@ -375,11 +402,15 @@ this.log.debug(`Function started: ${this.createBlacklist.name}`); | ||
for (const i in myBlacklist) { | ||
const blacklistParse = JSON.parse(myBlacklist[i].devices); | ||
// push devices in list to ignor device in lists | ||
if (myBlacklist[i].checkIgnorLists) { | ||
this.blacklistLists.push(blacklistParse.path); | ||
try { | ||
const blacklistParse = await this.parseData(myBlacklist[i].devices); | ||
// push devices in list to ignor device in lists | ||
if (myBlacklist[i].checkIgnorLists) { | ||
this.blacklistLists.push(blacklistParse.path); | ||
} | ||
// push devices in list to ignor device in notifications | ||
if (myBlacklist[i].checkIgnorNotify) { | ||
this.blacklistNotify.push(blacklistParse.path); | ||
} | ||
} catch (error) { | ||
this.errorReporting('[createBlacklist]', error); | ||
} | ||
// push devices in list to ignor device in notifications | ||
if (myBlacklist[i].checkIgnorNotify) { | ||
this.blacklistNotify.push(blacklistParse.deviceName); | ||
} | ||
} | ||
@@ -401,70 +432,86 @@ | ||
async getDeviceName(id, i) { | ||
const currDeviceString = id.slice(0, (id.lastIndexOf('.') + 1) - 1); | ||
const shortCurrDeviceString = currDeviceString.slice(0, (currDeviceString.lastIndexOf('.') + 1) - 1); | ||
const shortshortCurrDeviceString = shortCurrDeviceString.slice(0, (shortCurrDeviceString.lastIndexOf('.') + 1) - 1); | ||
const currDeviceString = id.slice(0, id.lastIndexOf('.') + 1 - 1); | ||
const shortCurrDeviceString = currDeviceString.slice(0, currDeviceString.lastIndexOf('.') + 1 - 1); | ||
const shortshortCurrDeviceString = shortCurrDeviceString.slice(0, shortCurrDeviceString.lastIndexOf('.') + 1 - 1); | ||
// Get device name | ||
const deviceObject = await this.getForeignObjectAsync(currDeviceString); | ||
const shortDeviceObject = await this.getForeignObjectAsync(shortCurrDeviceString); | ||
const shortshortDeviceObject = await this.getForeignObjectAsync(shortshortCurrDeviceString); | ||
let deviceName; | ||
try { | ||
// Get device name | ||
const deviceObject = await this.getForeignObjectAsync(currDeviceString); | ||
const shortDeviceObject = await this.getForeignObjectAsync(shortCurrDeviceString); | ||
const shortshortDeviceObject = await this.getForeignObjectAsync(shortshortCurrDeviceString); | ||
let deviceName; | ||
// Get ID with currDeviceString from datapoint | ||
switch (this.arrDev[i].adapter) { | ||
// Get ID for Switchbot and ESPHome Devices | ||
case 'switchbotBle': | ||
case 'esphome': | ||
deviceName = await this.getInitValue(currDeviceString + this.arrDev[i].id); | ||
break; | ||
// Get ID with currDeviceString from datapoint | ||
switch (this.arrDev[i].adapterID) { | ||
// Get ID for Switchbot and ESPHome Devices | ||
case 'switchbotBle': | ||
case 'esphome': | ||
deviceName = await this.getInitValue(currDeviceString + this.arrDev[i].id); | ||
break; | ||
// Get ID with short currDeviceString from objectjson | ||
case 'hue-extended': | ||
case 'hmrpc': | ||
case 'nuki-extended': | ||
case 'wled': | ||
if (shortDeviceObject && typeof shortDeviceObject === 'object') { | ||
deviceName = shortDeviceObject.common.name; | ||
} | ||
break; | ||
// Get ID with short currDeviceString from objectjson | ||
case 'hueExt': | ||
case 'hmrpc': | ||
case 'nukiExt': | ||
case 'wled': | ||
if (shortDeviceObject && typeof shortDeviceObject === 'object') { | ||
deviceName = shortDeviceObject.common.name; | ||
} | ||
break; | ||
// Get ID with short short currDeviceString from objectjson (HMiP Devices) | ||
case 'hmiP': | ||
if (shortshortDeviceObject && typeof shortshortDeviceObject === 'object') { | ||
deviceName = shortshortDeviceObject.common.name; | ||
} | ||
break; | ||
// Get ID with short short currDeviceString from objectjson (HMiP Devices) | ||
case 'hmiP': | ||
if (shortshortDeviceObject && typeof shortshortDeviceObject === 'object') { | ||
deviceName = shortshortDeviceObject.common.name; | ||
} | ||
break; | ||
// Get ID with short currDeviceString from datapoint | ||
case 'mihomeVacuum': | ||
case 'roomba': | ||
deviceName = await this.getInitValue(shortCurrDeviceString + this.arrDev[i].id); | ||
break; | ||
// Get ID with short currDeviceString from datapoint | ||
case 'mihomeVacuum': | ||
case 'roomba': | ||
deviceName = await this.getInitValue(shortCurrDeviceString + this.arrDev[i].id); | ||
break; | ||
//Get ID of foldername | ||
case 'tado': | ||
deviceName = currDeviceString.slice(currDeviceString.lastIndexOf('.') + 1); | ||
break; | ||
//Get ID of foldername | ||
case 'tado': | ||
deviceName = currDeviceString.slice(currDeviceString.lastIndexOf('.') + 1); | ||
break; | ||
//Get ID of foldername | ||
case 'yeelight-2': | ||
deviceName = shortCurrDeviceString.slice(shortCurrDeviceString.lastIndexOf('.') + 1); | ||
break; | ||
//Get ID of foldername | ||
case 'yeelight': | ||
deviceName = shortCurrDeviceString.slice(shortCurrDeviceString.lastIndexOf('.') + 1); | ||
break; | ||
// Get ID with main selektor from objectjson | ||
default: | ||
if (deviceObject && typeof deviceObject === 'object') { | ||
if (deviceObject.common.name['de'] != undefined) { | ||
deviceName = deviceObject.common.name['de']; | ||
} else if (deviceObject.common.name['en'] != undefined) { | ||
deviceName = deviceObject.common.name['en']; | ||
} else { | ||
// Get ID with main selektor from objectjson | ||
default: | ||
if (deviceObject && typeof deviceObject === 'object') { | ||
deviceName = deviceObject.common.name; | ||
} | ||
} | ||
break; | ||
break; | ||
} | ||
return deviceName; | ||
} catch (error) { | ||
this.errorReporting('[getDeviceName]', error); | ||
} | ||
return deviceName; | ||
} | ||
/** | ||
* get Last Contact | ||
* @param {object} selector - Selector | ||
*/ | ||
async getLastContact(selector) { | ||
const lastContact = await this.getTimestamp(selector); | ||
let lastContactString; | ||
lastContactString = this.formatDate(new Date(selector), 'hh:mm') + ' Uhr'; | ||
if (Math.round(lastContact) > 100) { | ||
lastContactString = Math.round(lastContact / 60) + ' Stunden'; | ||
} | ||
if (Math.round(lastContact / 60) > 48) { | ||
lastContactString = Math.round(lastContact / 60 / 24) + ' Tagen'; | ||
} | ||
return lastContactString; | ||
} | ||
/** | ||
* Create Lists | ||
@@ -478,44 +525,60 @@ */ | ||
this.offlineDevices = []; | ||
this.batteryLowPoweredRaw = []; | ||
this.offlineDevicesRaw = []; | ||
for (const device of this.listAllDevicesRaw) { | ||
/*---------- fill raw lists ----------*/ | ||
// low bat list | ||
if (device['LowBat'] && device['Status'] !== 'Offline') { | ||
this.batteryLowPoweredRaw.push({ | ||
Path: device['Path'], | ||
Device: device['Device'], | ||
Adapter: device['Adapter'], | ||
Battery: device['Battery'], | ||
}); | ||
} | ||
// offline raw list | ||
if (device['Status'] === 'Offline') { | ||
this.offlineDevicesRaw.push({ | ||
Path: device['Path'], | ||
Device: device['Device'], | ||
Adapter: device['Adapter'], | ||
'Last contact': device['Last contact'], | ||
}); | ||
} | ||
/*---------- fill user lists ----------*/ | ||
if (!this.blacklistLists.includes(device['Path'])) { | ||
this.listAllDevices.push( | ||
{ | ||
'Device': device['Device'], | ||
'Adapter': device['Adapter'], | ||
'Battery': device['Battery'], | ||
'Signal strength': device['Signal strength'], | ||
'Last contact': device['Last contact'], | ||
'Status': device['Status'] | ||
} | ||
); | ||
this.listAllDevices.push({ | ||
Device: device['Device'], | ||
Adapter: device['Adapter'], | ||
Battery: device['Battery'], | ||
'Signal strength': device['Signal strength'], | ||
'Last contact': device['Last contact'], | ||
Status: device['Status'], | ||
}); | ||
// LinkQuality lists | ||
if (device['Signal strength'] != ' - ') { | ||
this.linkQualityDevices.push( | ||
{ | ||
'Device': device['Device'], | ||
'Adapter': device['Adapter'], | ||
'Signal strength': device['Signal strength'] | ||
} | ||
); | ||
this.linkQualityDevices.push({ | ||
Device: device['Device'], | ||
Adapter: device['Adapter'], | ||
'Signal strength': device['Signal strength'], | ||
}); | ||
} | ||
// Battery lists | ||
if (device['Battery'] != ' - ') { | ||
this.batteryPowered.push( | ||
{ | ||
'Device': device['Device'], | ||
'Adapter': device['Adapter'], | ||
'Battery': device['Battery'] | ||
} | ||
); | ||
if (device['isBatteryDevice']) { | ||
this.batteryPowered.push({ | ||
Device: device['Device'], | ||
Adapter: device['Adapter'], | ||
Battery: device['Battery'], | ||
Status: device['Status'], | ||
}); | ||
} | ||
// Low Bat lists | ||
if (device['LowBat']) { | ||
this.batteryLowPowered.push( | ||
{ | ||
'Device': device['Device'], | ||
'Adapter': device['Adapter'], | ||
'Battery': device['Battery'] | ||
} | ||
); | ||
if (device['LowBat'] && device['Status'] !== 'Offline') { | ||
this.batteryLowPowered.push({ | ||
Device: device['Device'], | ||
Adapter: device['Adapter'], | ||
Battery: device['Battery'], | ||
}); | ||
} | ||
@@ -525,9 +588,7 @@ | ||
if (device['Status'] === 'Offline') { | ||
this.offlineDevices.push( | ||
{ | ||
'Device': device['Device'], | ||
'Adapter': device['Adapter'], | ||
'Last contact': device['Last contact'] | ||
} | ||
); | ||
this.offlineDevices.push({ | ||
Device: device['Device'], | ||
Adapter: device['Adapter'], | ||
'Last contact': device['Last contact'], | ||
}); | ||
} | ||
@@ -556,2 +617,7 @@ } | ||
this.deviceCounter = this.listAllDevices.length; | ||
// raws | ||
// Count how many devcies are offline | ||
this.offlineDevicesCountRaw = this.offlineDevicesRaw.length; | ||
} | ||
@@ -564,3 +630,3 @@ | ||
const devices = await this.getForeignStatesAsync(this.arrDev[i].Selektor); | ||
const adapterID = this.arrDev[i].adapter; | ||
const adapterID = this.arrDev[i].adapterID; | ||
@@ -570,3 +636,2 @@ /*---------- Start of loop ----------*/ | ||
if (!isUnloaded) { | ||
/*============================================= | ||
@@ -577,2 +642,6 @@ = Get device name = | ||
/*============================================= | ||
= Get adapter name = | ||
=============================================*/ | ||
const adapter = this.arrDev[i].adapter; | ||
@@ -582,4 +651,4 @@ /*============================================= | ||
=============================================*/ | ||
const currDeviceString = id.slice(0, (id.lastIndexOf('.') + 1) - 1); | ||
const shortCurrDeviceString = currDeviceString.slice(0, (currDeviceString.lastIndexOf('.') + 1) - 1); | ||
const currDeviceString = id.slice(0, id.lastIndexOf('.') + 1 - 1); | ||
const shortCurrDeviceString = currDeviceString.slice(0, currDeviceString.lastIndexOf('.') + 1 - 1); | ||
@@ -631,4 +700,4 @@ /*============================================= | ||
// If Quality State is an value between 0-255 (zigbee) calculate in percent: | ||
} else if ((deviceQualityState.val) >= 0) { | ||
linkQuality = parseFloat((100 / 255 * deviceQualityState.val).toFixed(0)) + '%'; | ||
} else if (deviceQualityState.val >= 0) { | ||
linkQuality = parseFloat(((100 / 255) * deviceQualityState.val).toFixed(0)) + '%'; | ||
} | ||
@@ -646,3 +715,3 @@ break; | ||
break; | ||
case 'nuki-extended': | ||
case 'nukiExt': | ||
linkQuality = ' - '; | ||
@@ -662,2 +731,3 @@ break; | ||
let lowBatIndicator; | ||
let isBatteryDevice; | ||
@@ -675,3 +745,3 @@ // Get battery states | ||
if ((!deviceBatteryState) && (!shortDeviceBatteryState) && (!shortDeviceBatteryState2)) { | ||
if (!deviceBatteryState && !shortDeviceBatteryState && !shortDeviceBatteryState2) { | ||
if (deviceLowBatState !== undefined) { | ||
@@ -683,6 +753,8 @@ switch (this.arrDev[i].isLowBat || this.arrDev[i].isLowBat2) { | ||
default: | ||
if ((deviceLowBatState === false) || (deviceLowBatState === 'NORMAL') || (deviceLowBatState === 1)) { | ||
if (deviceLowBatState === false || deviceLowBatState === 'NORMAL' || deviceLowBatState === 1) { | ||
batteryHealth = 'ok'; | ||
isBatteryDevice = true; | ||
} else { | ||
batteryHealth = 'low'; | ||
isBatteryDevice = true; | ||
} | ||
@@ -701,8 +773,10 @@ break; | ||
batteryHealth = deviceBatteryState + 'V'; | ||
isBatteryDevice = true; | ||
} | ||
break; | ||
case 'hue-extended': | ||
case 'hueExt': | ||
if (shortDeviceBatteryState) { | ||
batteryHealth = shortDeviceBatteryState + '%'; | ||
isBatteryDevice = true; | ||
} | ||
@@ -713,8 +787,11 @@ break; | ||
batteryHealth = shortDeviceBatteryState + '%'; | ||
isBatteryDevice = true; | ||
} else if (shortDeviceBatteryState2) { | ||
batteryHealth = shortDeviceBatteryState2 + '%'; | ||
isBatteryDevice = true; | ||
} | ||
break; | ||
default: | ||
batteryHealth = (deviceBatteryState) + '%'; | ||
batteryHealth = deviceBatteryState + '%'; | ||
isBatteryDevice = true; | ||
} | ||
@@ -726,10 +803,12 @@ } | ||
=============================================*/ | ||
switch (adapterID) { | ||
case 'hmrpc': // there are differnt low bat states between hm and hmIp devices | ||
if (deviceLowBatState) { | ||
switch (typeof deviceLowBatState) { | ||
case 'number': | ||
if (deviceLowBatState === 0) { | ||
lowBatIndicator = true; | ||
} | ||
break; | ||
case 'tado': // there is an string as indicator | ||
if (deviceLowBatState != 'NORMAL') { | ||
case 'string': | ||
if (deviceLowBatState !== 'NORMAL') { | ||
// Tado devices | ||
lowBatIndicator = true; | ||
@@ -739,8 +818,13 @@ } | ||
default: // for all other devices with low bat states | ||
if ((deviceLowBatState === true) || (deviceLowBatState === 0)) { | ||
case 'boolean': | ||
if (deviceLowBatState) { | ||
lowBatIndicator = true; | ||
} else if (deviceBatteryState && (deviceBatteryState < this.config.minWarnBatterie)) { // if the battery state is under the set limit | ||
} | ||
break; | ||
default: // if the battery state is under the set limit | ||
if (deviceBatteryState && deviceBatteryState < this.config.minWarnBatterie) { | ||
lowBatIndicator = true; | ||
} | ||
break; | ||
} | ||
@@ -752,6 +836,6 @@ | ||
let lastContactString; | ||
let lastDeviceUnreachStateChange; | ||
let deviceState = 'Online'; | ||
const deviceMainSelector = await this.getForeignStateAsync(id); | ||
const deviceUnreachSelector = await this.getForeignStateAsync(currDeviceString + this.arrDev[i].reach); | ||
const deviceStateSelector = await this.getForeignStateAsync(shortCurrDeviceString + this.arrDev[i].stateValue); // for hmrpc devices | ||
@@ -763,30 +847,6 @@ const rssiPeerSelector = await this.getForeignStateAsync(currDeviceString + this.arrDev[i].rssiPeerState); | ||
const lastContact = await this.getTimestamp(deviceMainSelector.ts); | ||
const lastStateChange = await this.getTimestamp(deviceMainSelector.lc); | ||
const deviceUnreachState = await this.getInitValue(currDeviceString + this.arrDev[i].reach); | ||
const deviceUnreachSelector = await this.getForeignStateAsync(currDeviceString + this.arrDev[i].reach); | ||
if (deviceUnreachSelector) {lastDeviceUnreachStateChange = await this.getTimestamp(deviceUnreachSelector.lc);} | ||
const lastDeviceUnreachStateChange = deviceUnreachSelector != undefined ? await this.getTimestamp(deviceUnreachSelector.lc) : await this.getTimestamp(deviceMainSelector.ts); | ||
const shortDeviceUnreachState = await this.getForeignStateAsync(shortCurrDeviceString + this.arrDev[i].reach); | ||
const getLastContact = async () => { | ||
lastContactString = this.formatDate(new Date((deviceMainSelector.ts)), 'hh:mm') + ' Uhr'; | ||
if (Math.round(lastContact) > 100) { | ||
lastContactString = Math.round(lastContact / 60) + ' Stunden'; | ||
} | ||
if (Math.round(lastContact / 60) > 48) { | ||
lastContactString = Math.round(lastContact / 60 / 24) + ' Tagen'; | ||
} | ||
return lastContactString; | ||
}; | ||
const getLastStateChange = async () => { | ||
lastContactString = this.formatDate(new Date((deviceMainSelector.lc)), 'hh:mm') + ' Uhr'; | ||
if (Math.round(lastStateChange) > 100) { | ||
lastContactString = Math.round(lastStateChange / 60) + ' Stunden'; | ||
} | ||
if (Math.round(lastStateChange / 60) > 48) { | ||
lastContactString = Math.round(lastStateChange / 60 / 24) + ' Tagen'; | ||
} | ||
return lastContactString; | ||
}; | ||
// If there is no contact since user sets minutes add device in offline list | ||
@@ -796,3 +856,3 @@ // calculate to days after 48 hours | ||
case 'none': | ||
await getLastContact(); | ||
lastContactString = await this.getLastContact(deviceMainSelector.ts); | ||
break; | ||
@@ -802,36 +862,16 @@ | ||
//State changed | ||
if (adapterID === 'hmrpc') { | ||
if (linkQuality != ' - ') { | ||
if (adapterID === 'hmrpc') { | ||
if (linkQuality !== ' - ') { | ||
if (deviceUnreachState) { | ||
await getLastStateChange(); | ||
lastContactString = await this.getLastContact(deviceMainSelector.lc); | ||
} else { | ||
await getLastContact(); | ||
lastContactString = await this.getLastContact(deviceMainSelector.ts); | ||
} | ||
} else { | ||
if (deviceStateSelector) { // because old hm devices don't send rssi states | ||
const lastContactOfState = await this.getTimestamp(deviceStateSelector.ts); | ||
const getLastContactOfState = async () => { | ||
lastContactString = this.formatDate(new Date((deviceStateSelector.ts)), 'hh:mm') + ' Uhr'; | ||
if (Math.round(lastContactOfState) > 100) { | ||
lastContactString = Math.round(lastContactOfState / 60) + ' Stunden'; | ||
} | ||
if (Math.round(lastContactOfState / 60) > 48) { | ||
lastContactString = Math.round(lastContactOfState / 60 / 24) + ' Tagen'; | ||
} | ||
return lastContactString; | ||
}; | ||
await getLastContactOfState(); | ||
} else if (rssiPeerSelector) { // because old hm sensors don't send rssi/state values | ||
const lastContactOfState = await this.getTimestamp(rssiPeerSelector.ts); | ||
const getLastContactOfState = async () => { | ||
lastContactString = this.formatDate(new Date((rssiPeerSelector.ts)), 'hh:mm') + ' Uhr'; | ||
if (Math.round(lastContactOfState) > 100) { | ||
lastContactString = Math.round(lastContactOfState / 60) + ' Stunden'; | ||
} | ||
if (Math.round(lastContactOfState / 60) > 48) { | ||
lastContactString = Math.round(lastContactOfState / 60 / 24) + ' Tagen'; | ||
} | ||
return lastContactString; | ||
}; | ||
await getLastContactOfState(); | ||
if (deviceStateSelector) { | ||
// because old hm devices don't send rssi states | ||
lastContactString = await this.getLastContact(deviceStateSelector.ts); | ||
} else if (rssiPeerSelector) { | ||
// because old hm sensors don't send rssi/state values | ||
lastContactString = await this.getLastContact(rssiPeerSelector.ts); | ||
} | ||
@@ -841,5 +881,5 @@ } | ||
if (!deviceUnreachState) { | ||
await getLastStateChange(); | ||
lastContactString = await this.getLastContact(deviceMainSelector.lc); | ||
} else { | ||
await getLastContact(); | ||
lastContactString = await this.getLastContact(deviceMainSelector.ts); | ||
} | ||
@@ -853,111 +893,98 @@ break; | ||
=============================================*/ | ||
switch (adapterID) { | ||
case 'hmrpc': | ||
case 'hmiP': | ||
case 'maxcube': | ||
if ((this.maxMinutes !== undefined) && (this.maxMinutes[adapterID] === -1)) { | ||
if (deviceUnreachState) { | ||
if (this.maxMinutes !== undefined) { | ||
switch (adapterID) { | ||
case 'hmrpc': | ||
case 'hmiP': | ||
case 'maxcube': | ||
if (this.maxMinutes[adapterID] <= 0) { | ||
if (deviceUnreachState) { | ||
deviceState = 'Offline'; //set online state to offline | ||
linkQuality = '0%'; // set linkQuality to nothing | ||
} | ||
} else if (lastDeviceUnreachStateChange > this.maxMinutes[adapterID] && deviceUnreachState) { | ||
deviceState = 'Offline'; //set online state to offline | ||
linkQuality = '0%'; // set linkQuality to nothing | ||
batteryHealth = ' - '; // set batteryhelth to nothing | ||
} | ||
} else if ((this.maxMinutes !== undefined) && (lastContact > this.maxMinutes[adapterID])) { | ||
deviceState = 'Offline'; //set online state to offline | ||
linkQuality = '0%'; // set linkQuality to nothing | ||
batteryHealth = ' - '; // set batteryhelth to nothing | ||
} | ||
break; | ||
case 'ping': | ||
if ((this.maxMinutes !== undefined) && (this.maxMinutes[adapterID] === -1)) { | ||
if (!deviceUnreachState) { | ||
break; | ||
case 'ping': | ||
case 'deconz': | ||
if (this.maxMinutes[adapterID] <= 0) { | ||
if (!deviceUnreachState) { | ||
deviceState = 'Offline'; //set online state to offline | ||
linkQuality = '0%'; // set linkQuality to nothing | ||
} | ||
} else if (lastDeviceUnreachStateChange > this.maxMinutes[adapterID] && !deviceUnreachState) { | ||
deviceState = 'Offline'; //set online state to offline | ||
linkQuality = '0%'; // set linkQuality to nothing | ||
batteryHealth = ' - '; // set batteryhelth to nothing | ||
} | ||
} else if ((this.maxMinutes !== undefined) && (lastContact > this.maxMinutes[adapterID]) && (!deviceUnreachState)) { | ||
deviceState = 'Offline'; //set online state to offline | ||
linkQuality = '0%'; // set linkQuality to nothing | ||
batteryHealth = ' - '; // set batteryhelth to nothing | ||
} | ||
break; | ||
case 'unifi': | ||
if ((this.maxMinutes !== undefined) && (this.maxMinutes[adapterID] === -1)) { | ||
if (deviceUnreachState === 0) { | ||
break; | ||
case 'unifi': | ||
if (this.maxMinutes[adapterID] <= 0) { | ||
if (deviceUnreachState === 0) { | ||
deviceState = 'Offline'; //set online state to offline | ||
linkQuality = '0%'; // set linkQuality to nothing | ||
} | ||
} else if (this.maxMinutes !== undefined && lastContact > this.maxMinutes[adapterID]) { | ||
deviceState = 'Offline'; //set online state to offline | ||
linkQuality = '0%'; // set linkQuality to nothing | ||
batteryHealth = ' - '; // set batteryhelth to nothing | ||
} | ||
} else if ((this.maxMinutes !== undefined) && (lastContact > this.maxMinutes[adapterID])) { | ||
deviceState = 'Offline'; //set online state to offline | ||
linkQuality = '0%'; // set linkQuality to nothing | ||
batteryHealth = ' - '; // set batteryhelth to nothing | ||
} | ||
break; | ||
case 'shelly': | ||
case 'sonoff': | ||
if ((this.maxMinutes !== undefined) && (this.maxMinutes[adapterID] === -1)) { | ||
if (!deviceUnreachState) { | ||
break; | ||
case 'shelly': | ||
case 'sonoff': | ||
if (this.maxMinutes[adapterID] <= 0) { | ||
if (!deviceUnreachState) { | ||
deviceState = 'Offline'; //set online state to offline | ||
linkQuality = '0%'; // set linkQuality to nothing | ||
} | ||
} else if (!deviceUnreachState && lastDeviceUnreachStateChange > this.maxMinutes[adapterID]) { | ||
deviceState = 'Offline'; //set online state to offline | ||
linkQuality = '0%'; // set linkQuality to nothing | ||
batteryHealth = ' - '; // set batteryhelth to nothing | ||
} | ||
} else if ((!deviceUnreachState) && (typeof lastDeviceUnreachStateChange !== 'undefined') && (this.maxMinutes !== undefined) && (lastContact > this.maxMinutes[adapterID])) { | ||
deviceState = 'Offline'; //set online state to offline | ||
linkQuality = '0%'; // set linkQuality to nothing | ||
batteryHealth = ' - '; // set batteryhelth to nothing | ||
} | ||
break; | ||
case 'mihomeVacuum': | ||
if ((this.maxMinutes !== undefined) && (this.maxMinutes[adapterID] === -1)) { | ||
if (!shortDeviceUnreachState) { | ||
break; | ||
case 'mihomeVacuum': | ||
if (this.maxMinutes[adapterID] <= 0) { | ||
if (!shortDeviceUnreachState) { | ||
deviceState = 'Offline'; //set online state to offline | ||
linkQuality = '0%'; // set linkQuality to nothing | ||
} | ||
} else if (lastContact > this.maxMinutes[adapterID]) { | ||
deviceState = 'Offline'; //set online state to offline | ||
linkQuality = '0%'; // set linkQuality to nothing | ||
batteryHealth = ' - '; // set batteryhelth to nothing | ||
} | ||
} else if ((this.maxMinutes !== undefined) && (lastContact > this.maxMinutes[adapterID])) { | ||
deviceState = 'Offline'; //set online state to offline | ||
linkQuality = '0%'; // set linkQuality to nothing | ||
batteryHealth = ' - '; // set batteryhelth to nothing | ||
} | ||
break; | ||
case 'miHome': | ||
if (this.arrDev[i].battery === 'none') { | ||
if ((this.maxMinutes !== undefined) && (this.maxMinutes[adapterID] === -1)) { | ||
if (!deviceUnreachState) { | ||
break; | ||
case 'mihome': | ||
if (this.arrDev[i].battery === 'none') { | ||
if (this.maxMinutes[adapterID] <= 0) { | ||
if (!deviceUnreachState) { | ||
deviceState = 'Offline'; //set online state to offline | ||
linkQuality = '0%'; // set linkQuality to nothing | ||
} | ||
} else if (lastContact > this.maxMinutes[adapterID]) { | ||
deviceState = 'Offline'; //set online state to offline | ||
linkQuality = '0%'; // set linkQuality to nothing | ||
batteryHealth = ' - '; // set batteryhelth to nothing | ||
} | ||
} else if ((this.maxMinutes !== undefined) && (lastContact > this.maxMinutes[adapterID])) { | ||
deviceState = 'Offline'; //set online state to offline | ||
linkQuality = '0%'; // set linkQuality to nothing | ||
batteryHealth = ' - '; // set batteryhelth to nothing | ||
} else { | ||
if (this.config.mihomeMaxMinutes <= 0) { | ||
if (this.maxMinutes[adapterID] <= 0) { | ||
deviceState = 'Offline'; //set online state to offline | ||
linkQuality = '0%'; // set linkQuality to nothing | ||
} | ||
} else if (lastContact > this.maxMinutes[adapterID]) { | ||
deviceState = 'Offline'; //set online state to offline | ||
linkQuality = '0%'; // set linkQuality to nothing | ||
} | ||
} | ||
} else { | ||
if (this.config.mihomeMaxMinutes === -1) { | ||
if ((this.maxMinutes !== undefined) && (this.maxMinutes[adapterID] === -1)) { | ||
break; | ||
default: | ||
if (this.maxMinutes[adapterID] <= 0) { | ||
if (!deviceUnreachState) { | ||
deviceState = 'Offline'; //set online state to offline | ||
linkQuality = '0%'; // set linkQuality to nothing | ||
batteryHealth = ' - '; // set batteryhelth to nothing | ||
} | ||
} else if ((this.maxMinutes !== undefined) && (lastContact > this.maxMinutes[adapterID])) { | ||
} else if (lastContact > this.maxMinutes[adapterID]) { | ||
deviceState = 'Offline'; //set online state to offline | ||
linkQuality = '0%'; // set linkQuality to nothing | ||
batteryHealth = ' - '; // set batteryhelth to nothing | ||
} | ||
} | ||
break; | ||
default: | ||
if ((this.maxMinutes !== undefined) && (this.maxMinutes[adapterID] === -1)) { | ||
if (!deviceUnreachState) { | ||
deviceState = 'Offline'; //set online state to offline | ||
linkQuality = '0%'; // set linkQuality to nothing | ||
batteryHealth = ' - '; // set batteryhelth to nothing | ||
} | ||
} else if ((this.maxMinutes !== undefined) && (lastContact > this.maxMinutes[adapterID])) { | ||
deviceState = 'Offline'; //set online state to offline | ||
linkQuality = '0%'; // set linkQuality to nothing | ||
batteryHealth = ' - '; // set batteryhelth to nothing | ||
} | ||
break; | ||
break; | ||
} | ||
} | ||
@@ -975,30 +1002,28 @@ } catch (error) { | ||
if (this.listOnlyBattery) { | ||
if (deviceBatteryState || shortDeviceBatteryState) { | ||
this.listAllDevicesRaw.push( | ||
{ | ||
'Path': id, | ||
'Device': deviceName, | ||
'Adapter': await this.capitalize(adapterID), | ||
'Battery': batteryHealth, | ||
'LowBat': lowBatIndicator, | ||
'Signal strength': linkQuality, | ||
'Last contact': lastContactString, | ||
'Status': deviceState | ||
} | ||
); | ||
if (isBatteryDevice) { | ||
this.listAllDevicesRaw.push({ | ||
Path: id, | ||
Device: deviceName, | ||
Adapter: adapter, | ||
isBatteryDevice: isBatteryDevice, | ||
Battery: batteryHealth, | ||
LowBat: lowBatIndicator, | ||
'Signal strength': linkQuality, | ||
'Last contact': lastContactString, | ||
Status: deviceState, | ||
}); | ||
} | ||
} else { | ||
/* Add all devices */ | ||
this.listAllDevicesRaw.push( | ||
{ | ||
'Path': id, | ||
'Device': deviceName, | ||
'Adapter': await this.capitalize(adapterID), | ||
'Battery': batteryHealth, | ||
'LowBat': lowBatIndicator, | ||
'Signal strength': linkQuality, | ||
'Last contact': lastContactString, | ||
'Status': deviceState | ||
} | ||
); | ||
this.listAllDevicesRaw.push({ | ||
Path: id, | ||
Device: deviceName, | ||
Adapter: adapter, | ||
isBatteryDevice: isBatteryDevice, | ||
Battery: batteryHealth, | ||
LowBat: lowBatIndicator, | ||
'Signal strength': linkQuality, | ||
'Last contact': lastContactString, | ||
Status: deviceState, | ||
}); | ||
} | ||
@@ -1014,3 +1039,2 @@ } else { | ||
/** | ||
@@ -1027,4 +1051,4 @@ * @param {string} adptName - Adapter name | ||
for (let i = 0; i < this.arrDev.length; i++) { | ||
if (this.arrDev[i].adapter.includes(adptName)) { // list device only if selected adapter matched with device | ||
if (this.arrDev[i].adapterID.includes(adptName)) { | ||
// list device only if selected adapter matched with device | ||
await this.createData(i); | ||
@@ -1035,3 +1059,2 @@ } | ||
await this.writeDatapoints(adptName); // fill the datapoints | ||
} catch (error) { | ||
@@ -1044,4 +1067,6 @@ this.errorReporting('[createDataForEachAdapter]', error); | ||
/** | ||
* create Data of all selected adapter in one list | ||
*/ | ||
async createDataOfAllAdapter() { | ||
// create Data of all selected adapter in one list | ||
this.log.debug(`Function started: ${this.createDataOfAllAdapter.name}`); | ||
@@ -1064,3 +1089,2 @@ | ||
await this.writeDatapoints(); // fill the datapoints | ||
} catch (error) { | ||
@@ -1073,3 +1097,2 @@ this.errorReporting('[createDataOfAllAdapter]', error); | ||
/** | ||
@@ -1080,3 +1103,2 @@ * Notification service | ||
async sendNotification(text) { | ||
// Pushover | ||
@@ -1095,3 +1117,3 @@ try { | ||
device: this.config.devicePushover, | ||
priority: this.config.prioPushover | ||
priority: this.config.prioPushover, | ||
}); | ||
@@ -1116,3 +1138,3 @@ } | ||
user: this.config.deviceTelegram, | ||
chatId: this.config.chatIdTelegram | ||
chatId: this.config.chatIdTelegram, | ||
}); | ||
@@ -1136,3 +1158,3 @@ } | ||
text: text, | ||
phone: this.config.phoneWhatsapp | ||
phone: this.config.phoneWhatsapp, | ||
}); | ||
@@ -1157,3 +1179,3 @@ } | ||
text: text, | ||
subject: this.config.subjectEmail | ||
subject: this.config.subjectEmail, | ||
}); | ||
@@ -1176,3 +1198,6 @@ } | ||
const jsonText = JSON.stringify(text); | ||
await this.setForeignStateAsync(`${this.config.instanceJarvis}.addNotification`, '{"title":"' + this.config.titleJarvis + ' (' + this.formatDate(new Date(), 'DD.MM.YYYY - hh:mm:ss') + ')","message": ' + jsonText + ',"display": "drawer"}'); | ||
await this.setForeignStateAsync( | ||
`${this.config.instanceJarvis}.addNotification`, | ||
'{"title":"' + this.config.titleJarvis + ' (' + this.formatDate(new Date(), 'DD.MM.YYYY - hh:mm:ss') + ')","message": ' + jsonText + ',"display": "drawer"}', | ||
); | ||
} | ||
@@ -1194,3 +1219,6 @@ } | ||
const jsonText = JSON.stringify(text); | ||
await this.setForeignStateAsync(`${this.config.instanceLovelace}.notifications.add`, '{"message":' + jsonText + ', "title":"' + this.config.titleLovelace + ' (' + this.formatDate(new Date(), 'DD.MM.YYYY - hh:mm:ss') + ')"}'); | ||
await this.setForeignStateAsync( | ||
`${this.config.instanceLovelace}.notifications.add`, | ||
'{"message":' + jsonText + ', "title":"' + this.config.titleLovelace + ' (' + this.formatDate(new Date(), 'DD.MM.YYYY - hh:mm:ss') + ')"}', | ||
); | ||
} | ||
@@ -1203,7 +1231,8 @@ } | ||
/** | ||
* send shedule message for low battery devices | ||
*/ | ||
async sendBatteryNotifyShedule() { | ||
// send message for low battery devices | ||
const time = this.config.checkSendBatteryTime.split(':'); | ||
const time = (this.config.checkSendBatteryTime).split(':'); | ||
const checkDays = []; // list of selected days | ||
@@ -1220,4 +1249,5 @@ | ||
if (checkDays.length >= 1) { // check if an day is selected | ||
this.log.debug(`Number of selected days for daily battery message: ${checkDays.length}. Send Message on: ${(checkDays).join(', ')} ...`); | ||
if (checkDays.length >= 1) { | ||
// check if an day is selected | ||
this.log.debug(`Number of selected days for daily battery message: ${checkDays.length}. Send Message on: ${checkDays.join(', ')} ...`); | ||
} else { | ||
@@ -1234,4 +1264,4 @@ this.log.warn(`No days selected for daily battery message. Please check the instance configuration!`); | ||
for (const id of this.batteryLowPowered) { | ||
if (!this.blacklistNotify.includes(id['Device'])) { | ||
for (const id of this.batteryLowPoweredRaw) { | ||
if (!this.blacklistNotify.includes(id['Path'])) { | ||
deviceList = `${deviceList}\n${id['Device']} (${id['Battery']})`; | ||
@@ -1241,3 +1271,3 @@ } | ||
if ((this.lowBatteryPoweredCount > 0) && (deviceList.length > 0)) { | ||
if (this.lowBatteryPoweredCountRaw > 0 && deviceList.length > 0) { | ||
this.log.info(`Niedrige Batteriezustände: ${deviceList}`); | ||
@@ -1247,5 +1277,3 @@ this.setStateAsync('lastNotification', `Niedrige Batteriezustände: ${deviceList}`, true); | ||
this.sendNotification(`Niedriege Batteriezustände: ${deviceList}`); | ||
} | ||
} catch (error) { | ||
@@ -1258,5 +1286,6 @@ this.errorReporting('[sendBatteryNotifyShedule]', error); | ||
/** | ||
* send message if an device is offline | ||
*/ | ||
async sendOfflineNotifications() { | ||
// send message if an device is offline | ||
this.log.debug(`Start the function: ${this.sendOfflineNotifications.name}`); | ||
@@ -1267,25 +1296,23 @@ | ||
let deviceList = ''; | ||
const offlineDevicesCountOld = await this.getOwnInitValue('offlineCount'); | ||
if ((this.offlineDevicesCount !== offlineDevicesCountOld)) { | ||
for (const id of this.offlineDevices) { | ||
if (!this.blacklistNotify.includes(id['Device'])) { | ||
deviceList = `${deviceList}\n${id['Device']} (${id['Last contact']})`; | ||
} | ||
for (const id of this.offlineDevicesRaw) { | ||
if (!this.blacklistNotify.includes(id['Path'])) { | ||
deviceList = `${deviceList}\n${id['Device']} (${id['Last contact']})`; | ||
} | ||
if (deviceList.length > 0) { | ||
if (deviceList.length == 0) { | ||
msg = 'Alle Geräte sind Online.'; | ||
} else if (deviceList.length == 1) { // make singular if it is only one device | ||
msg = 'Folgendes Gerät ist seit einiger Zeit nicht erreichbar: \n'; | ||
} else if (deviceList.length >= 2) { //make plural if it is more than one device | ||
msg = `Folgende Geräte sind seit einiger Zeit nicht erreichbar: \n`; | ||
} | ||
this.log.info(msg + deviceList); | ||
await this.setStateAsync('lastNotification', msg + deviceList, true); | ||
await this.sendNotification(msg + deviceList); | ||
} | ||
if (deviceList.length !== this.offlineDevicesCountRawOld) { | ||
if (deviceList.length == 0) { | ||
msg = 'Alle Geräte sind Online.'; | ||
} else if (deviceList.length == 1) { | ||
// make singular if it is only one device | ||
msg = 'Folgendes Gerät ist seit einiger Zeit nicht erreichbar: \n'; | ||
} else if (deviceList.length >= 2) { | ||
//make plural if it is more than one device | ||
msg = `Folgende Geräte sind seit einiger Zeit nicht erreichbar: \n`; | ||
} | ||
this.log.info(msg + deviceList); | ||
this.offlineDevicesCountRawOld = deviceList.length; | ||
await this.setStateAsync('lastNotification', msg + deviceList, true); | ||
await this.sendNotification(msg + deviceList); | ||
} | ||
@@ -1296,9 +1323,10 @@ } catch (error) { | ||
this.log.debug(`Finished the function: ${this.sendOfflineNotifications.name}`); | ||
}//<--End of offline notification | ||
} //<--End of offline notification | ||
/** | ||
* send shedule message with offline devices | ||
*/ | ||
async sendOfflineNotificationsShedule() { | ||
// send daily an overview with offline devices | ||
const time = this.config.checkSendOfflineTime.split(':'); | ||
const time = (this.config.checkSendOfflineTime).split(':'); | ||
const checkDays = []; // list of selected days | ||
@@ -1315,4 +1343,5 @@ | ||
if (checkDays.length >= 1) { // check if an day is selected | ||
this.log.debug(`Number of selected days for daily offline message: ${checkDays.length}. Send Message on: ${(checkDays).join(', ')} ...`); | ||
if (checkDays.length >= 1) { | ||
// check if an day is selected | ||
this.log.debug(`Number of selected days for daily offline message: ${checkDays.length}. Send Message on: ${checkDays.join(', ')} ...`); | ||
} else { | ||
@@ -1329,4 +1358,4 @@ this.log.warn(`No days selected for daily offline message. Please check the instance configuration!`); | ||
for (const id of this.offlineDevices) { | ||
if (!this.blacklistNotify.includes(id['Device'])) { | ||
for (const id of this.offlineDevicesRaw) { | ||
if (!this.blacklistNotify.includes(id['Path'])) { | ||
deviceList = `${deviceList}\n${id['Device']} (${id['Last contact']})`; | ||
@@ -1342,3 +1371,2 @@ } | ||
} | ||
} catch (error) { | ||
@@ -1349,4 +1377,7 @@ this.errorReporting('[sendOfflineNotificationsShedule]', error); | ||
} | ||
}//<--End of daily offline notification | ||
} //<--End of daily offline notification | ||
/** | ||
* reset arrays and counts | ||
*/ | ||
async resetVars() { | ||
@@ -1363,2 +1394,9 @@ //Reset all arrays and counts | ||
this.listAllDevicesRaw = []; | ||
// raws | ||
this.batteryLowPoweredRaw = []; | ||
this.offlineDevicesRaw = []; | ||
this.lowBatteryPoweredCountRaw = 0; | ||
this.offlineDevicesCountRaw = 0; | ||
// counts | ||
@@ -1374,3 +1412,2 @@ this.offlineDevicesCount = 0; | ||
/** | ||
@@ -1385,3 +1422,2 @@ * @param {string} [adptName] - Adaptername | ||
try { | ||
let dpSubFolder; | ||
@@ -1402,3 +1438,3 @@ //write the datapoints in subfolders with the adaptername otherwise write the dP's in the root folder | ||
// if no device is count, write the JSON List with default value | ||
this.listAllDevices = [{ 'Device': '--none--', 'Adapter': '', 'Battery': '', 'Last contact': '', 'Signal strength': '' }]; | ||
this.listAllDevices = [{ Device: '--none--', Adapter: '', Battery: '', 'Last contact': '', 'Signal strength': '' }]; | ||
} | ||
@@ -1409,35 +1445,63 @@ await this.setStateAsync(`${dpSubFolder}listAll`, { val: JSON.stringify(this.listAllDevices), ack: true }); | ||
// if no device is count, write the JSON List with default value | ||
this.linkQualityDevices = [{ 'Device': '--none--', 'Adapter': '', 'Signal strength': '' }]; | ||
this.linkQualityDevices = [{ Device: '--none--', Adapter: '', 'Signal strength': '' }]; | ||
} | ||
//write JSON list | ||
await this.setStateAsync(`${dpSubFolder}linkQualityList`, { val: JSON.stringify(this.linkQualityDevices), ack: true }); | ||
await this.setStateAsync(`${dpSubFolder}linkQualityList`, { | ||
val: JSON.stringify(this.linkQualityDevices), | ||
ack: true, | ||
}); | ||
//write HTML list | ||
if (this.config.createHtmlList) await this.setStateAsync(`${dpSubFolder}linkQualityListHTML`, { val: await this.creatLinkQualityListHTML(this.linkQualityDevices, this.linkQualityCount), ack: true }); | ||
if (this.config.createHtmlList) | ||
await this.setStateAsync(`${dpSubFolder}linkQualityListHTML`, { | ||
val: await this.creatLinkQualityListHTML(this.linkQualityDevices, this.linkQualityCount), | ||
ack: true, | ||
}); | ||
if (this.offlineDevicesCount == 0) { | ||
// if no device is count, write the JSON List with default value | ||
this.offlineDevices = [{ 'Device': '--none--', 'Adapter': '', 'Last contact': '' }]; | ||
this.offlineDevices = [{ Device: '--none--', Adapter: '', 'Last contact': '' }]; | ||
} | ||
//write JSON list | ||
await this.setStateAsync(`${dpSubFolder}offlineList`, { val: JSON.stringify(this.offlineDevices), ack: true }); | ||
await this.setStateAsync(`${dpSubFolder}offlineList`, { | ||
val: JSON.stringify(this.offlineDevices), | ||
ack: true, | ||
}); | ||
//write HTML list | ||
if (this.config.createHtmlList) await this.setStateAsync(`${dpSubFolder}offlineListHTML`, { val: await this.createOfflineListHTML(this.offlineDevices, this.offlineDevicesCount), ack: true }); | ||
if (this.config.createHtmlList) | ||
await this.setStateAsync(`${dpSubFolder}offlineListHTML`, { | ||
val: await this.createOfflineListHTML(this.offlineDevices, this.offlineDevicesCount), | ||
ack: true, | ||
}); | ||
if (this.batteryPoweredCount == 0) { | ||
// if no device is count, write the JSON List with default value | ||
this.batteryPowered = [{ 'Device': '--none--', 'Adapter': '', 'Battery': '' }]; | ||
this.batteryPowered = [{ Device: '--none--', Adapter: '', Battery: '' }]; | ||
} | ||
//write JSON list | ||
await this.setStateAsync(`${dpSubFolder}batteryList`, { val: JSON.stringify(this.batteryPowered), ack: true }); | ||
await this.setStateAsync(`${dpSubFolder}batteryList`, { | ||
val: JSON.stringify(this.batteryPowered), | ||
ack: true, | ||
}); | ||
//write HTML list | ||
if (this.config.createHtmlList) await this.setStateAsync(`${dpSubFolder}batteryListHTML`, { val: await this.createBatteryListHTML(this.batteryPowered, this.batteryPoweredCount, false), ack: true }); | ||
if (this.config.createHtmlList) | ||
await this.setStateAsync(`${dpSubFolder}batteryListHTML`, { | ||
val: await this.createBatteryListHTML(this.batteryPowered, this.batteryPoweredCount, false), | ||
ack: true, | ||
}); | ||
if (this.lowBatteryPoweredCount == 0) { | ||
// if no device is count, write the JSON List with default value | ||
this.batteryLowPowered = [{ 'Device': '--none--', 'Adapter': '', 'Battery': '' }]; | ||
this.batteryLowPowered = [{ Device: '--none--', Adapter: '', Battery: '' }]; | ||
} | ||
//write JSON list | ||
await this.setStateAsync(`${dpSubFolder}lowBatteryList`, { val: JSON.stringify(this.batteryLowPowered), ack: true }); | ||
await this.setStateAsync(`${dpSubFolder}lowBatteryList`, { | ||
val: JSON.stringify(this.batteryLowPowered), | ||
ack: true, | ||
}); | ||
//write HTML list | ||
if (this.config.createHtmlList) await this.setStateAsync(`${dpSubFolder}lowBatteryListHTML`, { val: await this.createBatteryListHTML(this.batteryLowPowered, this.lowBatteryPoweredCount, true), ack: true }); | ||
if (this.config.createHtmlList) | ||
await this.setStateAsync(`${dpSubFolder}lowBatteryListHTML`, { | ||
val: await this.createBatteryListHTML(this.batteryLowPowered, this.lowBatteryPoweredCount, true), | ||
ack: true, | ||
}); | ||
@@ -1447,8 +1511,7 @@ // create timestamp of last run | ||
await this.setStateAsync('lastCheck', lastCheck, true); | ||
} | ||
catch (error) { | ||
} catch (error) { | ||
this.errorReporting('[writeDatapoints]', error); | ||
} | ||
this.log.debug(`Function finished: ${this.writeDatapoints.name}`); | ||
}//<--End of writing Datapoints | ||
} //<--End of writing Datapoints | ||
@@ -1460,3 +1523,5 @@ /** | ||
async creatLinkQualityListHTML(devices, deviceCount) { | ||
devices = devices.sort((a, b) => { return a.Device.localeCompare(b.Device); }); | ||
devices = devices.sort((a, b) => { | ||
return a.Device.localeCompare(b.Device); | ||
}); | ||
let html = `<center> | ||
@@ -1493,3 +1558,5 @@ <b>Link Quality Devices:<font> ${deviceCount}</b><small></small></font> | ||
async createOfflineListHTML(devices, deviceCount) { | ||
devices = devices.sort((a, b) => { return a.Device.localeCompare(b.Device); }); | ||
devices = devices.sort((a, b) => { | ||
return a.Device.localeCompare(b.Device); | ||
}); | ||
let html = `<center> | ||
@@ -1527,3 +1594,5 @@ <b>Offline Devices: <font color=${deviceCount == 0 ? '#3bcf0e' : 'orange'}>${deviceCount}</b><small></small></font> | ||
async createBatteryListHTML(devices, deviceCount, isLowBatteryList) { | ||
devices = devices.sort((a, b) => { return a.Device.localeCompare(b.Device); }); | ||
devices = devices.sort((a, b) => { | ||
return a.Device.localeCompare(b.Device); | ||
}); | ||
let html = `<center> | ||
@@ -1542,3 +1611,2 @@ <b>${isLowBatteryList == true ? 'Schwache ' : ''}Batterie Devices: <font color=${isLowBatteryList == true ? (deviceCount > 0 ? 'orange' : '#3bcf0e') : ''}>${deviceCount}</b></font> | ||
</tr>`; | ||
for (const device of devices) { | ||
@@ -1554,3 +1622,2 @@ html += `<tr> | ||
} | ||
html += `</tr>`; | ||
@@ -1568,3 +1635,2 @@ } | ||
async createDPsForEachAdapter(adptName) { | ||
await this.setObjectNotExistsAsync(`${adptName}`, { | ||
@@ -1579,206 +1645,206 @@ type: 'channel', | ||
await this.setObjectNotExistsAsync(`${adptName}.offlineCount`, { | ||
'type': 'state', | ||
'common': { | ||
'name': { | ||
'en': 'Number of devices offline', | ||
'de': 'Anzahl der Geräte offline', | ||
'ru': 'Количество устройств offline', | ||
'pt': 'Número de dispositivos offline', | ||
'nl': 'Nummer van apparatuur offline', | ||
'fr': 'Nombre de dispositifs hors ligne', | ||
'it': 'Numero di dispositivi offline', | ||
'es': 'Número de dispositivos sin conexión', | ||
'pl': 'Ilość urządzeń offline', | ||
'zh-cn': '线内装置数量' | ||
type: 'state', | ||
common: { | ||
name: { | ||
en: 'Number of devices offline', | ||
de: 'Anzahl der Geräte offline', | ||
ru: 'Количество устройств offline', | ||
pt: 'Número de dispositivos offline', | ||
nl: 'Nummer van apparatuur offline', | ||
fr: 'Nombre de dispositifs hors ligne', | ||
it: 'Numero di dispositivi offline', | ||
es: 'Número de dispositivos sin conexión', | ||
pl: 'Ilość urządzeń offline', | ||
'zh-cn': '线内装置数量', | ||
}, | ||
'type': 'number', | ||
'role': 'value', | ||
'read': true, | ||
'write': false, | ||
type: 'number', | ||
role: 'value', | ||
read: true, | ||
write: false, | ||
}, | ||
'native': {} | ||
native: {}, | ||
}); | ||
await this.setObjectNotExistsAsync(`${adptName}.offlineList`, { | ||
'type': 'state', | ||
'common': { | ||
'name': { | ||
'en': 'List of offline devices', | ||
'de': 'Liste der Offline-Geräte', | ||
'ru': 'Список оффлайн устройств', | ||
'pt': 'Lista de dispositivos off-line', | ||
'nl': 'List van offline apparatuur', | ||
'fr': 'Liste des dispositifs hors ligne', | ||
'it': 'Elenco dei dispositivi offline', | ||
'es': 'Lista de dispositivos sin conexión', | ||
'pl': 'Lista urządzeń offline', | ||
'zh-cn': '线装置清单' | ||
type: 'state', | ||
common: { | ||
name: { | ||
en: 'List of offline devices', | ||
de: 'Liste der Offline-Geräte', | ||
ru: 'Список оффлайн устройств', | ||
pt: 'Lista de dispositivos off-line', | ||
nl: 'List van offline apparatuur', | ||
fr: 'Liste des dispositifs hors ligne', | ||
it: 'Elenco dei dispositivi offline', | ||
es: 'Lista de dispositivos sin conexión', | ||
pl: 'Lista urządzeń offline', | ||
'zh-cn': '线装置清单', | ||
}, | ||
'type': 'array', | ||
'role': 'json', | ||
'read': true, | ||
'write': false, | ||
type: 'array', | ||
role: 'json', | ||
read: true, | ||
write: false, | ||
}, | ||
'native': {} | ||
native: {}, | ||
}); | ||
await this.setObjectNotExistsAsync(`${adptName}.listAll`, { | ||
'type': 'state', | ||
'common': { | ||
'name': { | ||
'en': 'List of all devices', | ||
'de': 'Liste aller Geräte', | ||
'ru': 'Список всех устройств', | ||
'pt': 'Lista de todos os dispositivos', | ||
'nl': 'List van alle apparaten', | ||
'fr': 'Liste de tous les dispositifs', | ||
'it': 'Elenco di tutti i dispositivi', | ||
'es': 'Lista de todos los dispositivos', | ||
'pl': 'Lista wszystkich urządzeń', | ||
'zh-cn': '所有装置清单' | ||
type: 'state', | ||
common: { | ||
name: { | ||
en: 'List of all devices', | ||
de: 'Liste aller Geräte', | ||
ru: 'Список всех устройств', | ||
pt: 'Lista de todos os dispositivos', | ||
nl: 'List van alle apparaten', | ||
fr: 'Liste de tous les dispositifs', | ||
it: 'Elenco di tutti i dispositivi', | ||
es: 'Lista de todos los dispositivos', | ||
pl: 'Lista wszystkich urządzeń', | ||
'zh-cn': '所有装置清单', | ||
}, | ||
'type': 'array', | ||
'role': 'json', | ||
'read': true, | ||
'write': false, | ||
type: 'array', | ||
role: 'json', | ||
read: true, | ||
write: false, | ||
}, | ||
'native': {} | ||
native: {}, | ||
}); | ||
await this.setObjectNotExistsAsync(`${adptName}.linkQualityList`, { | ||
'type': 'state', | ||
'common': { | ||
'name': { | ||
'en': 'List of devices with signal strength', | ||
'de': 'Liste der Geräte mit Signalstärke', | ||
'ru': 'Список устройств с силой сигнала', | ||
'pt': 'Lista de dispositivos com força de sinal', | ||
'nl': 'List van apparaten met signaalkracht', | ||
'fr': 'Liste des dispositifs avec force de signal', | ||
'it': 'Elenco dei dispositivi con forza del segnale', | ||
'es': 'Lista de dispositivos con fuerza de señal', | ||
'pl': 'Lista urządzeń z siłą sygnałową', | ||
'zh-cn': '具有信号实力的装置清单' | ||
type: 'state', | ||
common: { | ||
name: { | ||
en: 'List of devices with signal strength', | ||
de: 'Liste der Geräte mit Signalstärke', | ||
ru: 'Список устройств с силой сигнала', | ||
pt: 'Lista de dispositivos com força de sinal', | ||
nl: 'List van apparaten met signaalkracht', | ||
fr: 'Liste des dispositifs avec force de signal', | ||
it: 'Elenco dei dispositivi con forza del segnale', | ||
es: 'Lista de dispositivos con fuerza de señal', | ||
pl: 'Lista urządzeń z siłą sygnałową', | ||
'zh-cn': '具有信号实力的装置清单', | ||
}, | ||
'type': 'array', | ||
'role': 'json', | ||
'read': true, | ||
'write': false, | ||
type: 'array', | ||
role: 'json', | ||
read: true, | ||
write: false, | ||
}, | ||
'native': {} | ||
native: {}, | ||
}); | ||
await this.setObjectNotExistsAsync(`${adptName}.countAll`, { | ||
'type': 'state', | ||
'common': { | ||
'name': { | ||
'en': 'Number of all devices', | ||
'de': 'Anzahl aller Geräte', | ||
'ru': 'Количество всех устройств', | ||
'pt': 'Número de todos os dispositivos', | ||
'nl': 'Nummer van alle apparaten', | ||
'fr': 'Nombre de tous les appareils', | ||
'it': 'Numero di tutti i dispositivi', | ||
'es': 'Número de todos los dispositivos', | ||
'pl': 'Ilość wszystkich urządzeń', | ||
'zh-cn': '所有装置的数目' | ||
type: 'state', | ||
common: { | ||
name: { | ||
en: 'Number of all devices', | ||
de: 'Anzahl aller Geräte', | ||
ru: 'Количество всех устройств', | ||
pt: 'Número de todos os dispositivos', | ||
nl: 'Nummer van alle apparaten', | ||
fr: 'Nombre de tous les appareils', | ||
it: 'Numero di tutti i dispositivi', | ||
es: 'Número de todos los dispositivos', | ||
pl: 'Ilość wszystkich urządzeń', | ||
'zh-cn': '所有装置的数目', | ||
}, | ||
'type': 'number', | ||
'role': 'value', | ||
'read': true, | ||
'write': false, | ||
type: 'number', | ||
role: 'value', | ||
read: true, | ||
write: false, | ||
}, | ||
'native': {} | ||
native: {}, | ||
}); | ||
await this.setObjectNotExistsAsync(`${adptName}.batteryList`, { | ||
'type': 'state', | ||
'common': { | ||
'name': { | ||
'en': 'List of devices with battery state', | ||
'de': 'Liste der Geräte mit Batteriezustand', | ||
'ru': 'Список устройств с состоянием батареи', | ||
'pt': 'Lista de dispositivos com estado da bateria', | ||
'nl': 'List van apparaten met batterij staat', | ||
'fr': 'Liste des appareils avec état de batterie', | ||
'it': 'Elenco dei dispositivi con stato della batteria', | ||
'es': 'Lista de dispositivos con estado de batería', | ||
'pl': 'Lista urządzeń z baterią stanową', | ||
'zh-cn': '电池国装置清单' | ||
type: 'state', | ||
common: { | ||
name: { | ||
en: 'List of devices with battery state', | ||
de: 'Liste der Geräte mit Batteriezustand', | ||
ru: 'Список устройств с состоянием батареи', | ||
pt: 'Lista de dispositivos com estado da bateria', | ||
nl: 'List van apparaten met batterij staat', | ||
fr: 'Liste des appareils avec état de batterie', | ||
it: 'Elenco dei dispositivi con stato della batteria', | ||
es: 'Lista de dispositivos con estado de batería', | ||
pl: 'Lista urządzeń z baterią stanową', | ||
'zh-cn': '电池国装置清单', | ||
}, | ||
'type': 'array', | ||
'role': 'json', | ||
'read': true, | ||
'write': false, | ||
type: 'array', | ||
role: 'json', | ||
read: true, | ||
write: false, | ||
}, | ||
'native': {} | ||
native: {}, | ||
}); | ||
await this.setObjectNotExistsAsync(`${adptName}.lowBatteryList`, { | ||
'type': 'state', | ||
'common': { | ||
'name': { | ||
'en': 'List of devices with low battery state', | ||
'de': 'Liste der Geräte mit niedrigem Batteriezustand', | ||
'ru': 'Список устройств с низким состоянием батареи', | ||
'pt': 'Lista de dispositivos com baixo estado da bateria', | ||
'nl': 'List van apparaten met lage batterij staat', | ||
'fr': 'Liste des appareils à faible état de batterie', | ||
'it': 'Elenco di dispositivi con stato di batteria basso', | ||
'es': 'Lista de dispositivos con estado de batería bajo', | ||
'pl': 'Lista urządzeń o niskim stanie baterii', | ||
'zh-cn': '低电池国家装置清单' | ||
type: 'state', | ||
common: { | ||
name: { | ||
en: 'List of devices with low battery state', | ||
de: 'Liste der Geräte mit niedrigem Batteriezustand', | ||
ru: 'Список устройств с низким состоянием батареи', | ||
pt: 'Lista de dispositivos com baixo estado da bateria', | ||
nl: 'List van apparaten met lage batterij staat', | ||
fr: 'Liste des appareils à faible état de batterie', | ||
it: 'Elenco di dispositivi con stato di batteria basso', | ||
es: 'Lista de dispositivos con estado de batería bajo', | ||
pl: 'Lista urządzeń o niskim stanie baterii', | ||
'zh-cn': '低电池国家装置清单', | ||
}, | ||
'type': 'array', | ||
'role': 'json', | ||
'read': true, | ||
'write': false, | ||
type: 'array', | ||
role: 'json', | ||
read: true, | ||
write: false, | ||
}, | ||
'native': {} | ||
native: {}, | ||
}); | ||
await this.setObjectNotExistsAsync(`${adptName}.lowBatteryCount`, { | ||
'type': 'state', | ||
'common': { | ||
'name': { | ||
'en': 'Number of devices with low battery', | ||
'de': 'Anzahl der Geräte mit niedriger Batterie', | ||
'ru': 'Количество устройств c низкой батареей', | ||
'pt': 'Número de dispositivos com bateria baixa', | ||
'nl': 'Nummer van apparaten met lage batterij', | ||
'fr': 'Nombre de dispositifs avec batterie basse', | ||
'it': 'Numero di dispositivi con batteria bassa', | ||
'es': 'Número de dispositivos con batería baja', | ||
'pl': 'Liczba urządzeń z niską baterią', | ||
'zh-cn': '低电池的装置数量' | ||
type: 'state', | ||
common: { | ||
name: { | ||
en: 'Number of devices with low battery', | ||
de: 'Anzahl der Geräte mit niedriger Batterie', | ||
ru: 'Количество устройств c низкой батареей', | ||
pt: 'Número de dispositivos com bateria baixa', | ||
nl: 'Nummer van apparaten met lage batterij', | ||
fr: 'Nombre de dispositifs avec batterie basse', | ||
it: 'Numero di dispositivi con batteria bassa', | ||
es: 'Número de dispositivos con batería baja', | ||
pl: 'Liczba urządzeń z niską baterią', | ||
'zh-cn': '低电池的装置数量', | ||
}, | ||
'type': 'number', | ||
'role': 'value', | ||
'read': true, | ||
'write': false, | ||
type: 'number', | ||
role: 'value', | ||
read: true, | ||
write: false, | ||
}, | ||
'native': {} | ||
native: {}, | ||
}); | ||
await this.setObjectNotExistsAsync(`${adptName}.batteryCount`, { | ||
'type': 'state', | ||
'common': { | ||
'name': { | ||
'en': 'Number of devices with battery', | ||
'de': 'Anzahl der Geräte mit Batterie', | ||
'ru': 'Количество устройств c батареей', | ||
'pt': 'Número de dispositivos com bateria', | ||
'nl': 'Nummer van apparaten met batterij', | ||
'fr': 'Nombre de dispositifs avec batterie', | ||
'it': 'Numero di dispositivi con batteria', | ||
'es': 'Número de dispositivos con batería', | ||
'pl': 'Liczba urządzeń z baterią', | ||
'zh-cn': '电池的装置数量' | ||
type: 'state', | ||
common: { | ||
name: { | ||
en: 'Number of devices with battery', | ||
de: 'Anzahl der Geräte mit Batterie', | ||
ru: 'Количество устройств c батареей', | ||
pt: 'Número de dispositivos com bateria', | ||
nl: 'Nummer van apparaten met batterij', | ||
fr: 'Nombre de dispositifs avec batterie', | ||
it: 'Numero di dispositivi con batteria', | ||
es: 'Número de dispositivos con batería', | ||
pl: 'Liczba urządzeń z baterią', | ||
'zh-cn': '电池的装置数量', | ||
}, | ||
'type': 'number', | ||
'role': 'value', | ||
'read': true, | ||
'write': false, | ||
type: 'number', | ||
role: 'value', | ||
read: true, | ||
write: false, | ||
}, | ||
'native': {} | ||
native: {}, | ||
}); | ||
@@ -1791,3 +1857,2 @@ } | ||
async createHtmlListDatapoints(adptName) { | ||
let dpSubFolder; | ||
@@ -1802,91 +1867,91 @@ //write the datapoints in subfolders with the adaptername otherwise write the dP's in the root folder | ||
await this.setObjectNotExistsAsync(`${dpSubFolder}offlineListHTML`, { | ||
'type': 'state', | ||
'common': { | ||
'name': { | ||
'en': 'HTML List of offline devices', | ||
'de': 'HTML Liste der Offline-Geräte', | ||
'ru': 'HTML Список оффлайн устройств', | ||
'pt': 'HTML Lista de dispositivos off-line', | ||
'nl': 'HTML List van offline apparatuur', | ||
'fr': 'HTML Liste des dispositifs hors ligne', | ||
'it': 'HTML Elenco dei dispositivi offline', | ||
'es': 'HTML Lista de dispositivos sin conexión', | ||
'pl': 'HTML Lista urządzeń offline', | ||
'zh-cn': 'HTML 线装置清单' | ||
type: 'state', | ||
common: { | ||
name: { | ||
en: 'HTML List of offline devices', | ||
de: 'HTML Liste der Offline-Geräte', | ||
ru: 'HTML Список оффлайн устройств', | ||
pt: 'HTML Lista de dispositivos off-line', | ||
nl: 'HTML List van offline apparatuur', | ||
fr: 'HTML Liste des dispositifs hors ligne', | ||
it: 'HTML Elenco dei dispositivi offline', | ||
es: 'HTML Lista de dispositivos sin conexión', | ||
pl: 'HTML Lista urządzeń offline', | ||
'zh-cn': 'HTML 线装置清单', | ||
}, | ||
'type': 'string', | ||
'role': 'html', | ||
'read': true, | ||
'write': false, | ||
type: 'string', | ||
role: 'html', | ||
read: true, | ||
write: false, | ||
}, | ||
'native': {} | ||
native: {}, | ||
}); | ||
await this.setObjectNotExistsAsync(`${dpSubFolder}linkQualityListHTML`, { | ||
'type': 'state', | ||
'common': { | ||
'name': { | ||
'en': 'HTML List of devices with signal strength', | ||
'de': 'HTML Liste der Geräte mit Signalstärke', | ||
'ru': 'HTML Список устройств с силой сигнала', | ||
'pt': 'HTML Lista de dispositivos com força de sinal', | ||
'nl': 'HTML List van apparaten met signaalkracht', | ||
'fr': 'HTML Liste des dispositifs avec force de signal', | ||
'it': 'HTML Elenco dei dispositivi con forza del segnale', | ||
'es': 'HTML Lista de dispositivos con fuerza de señal', | ||
'pl': 'HTML Lista urządzeń z siłą sygnałową', | ||
'zh-cn': 'HTML 具有信号实力的装置清单' | ||
type: 'state', | ||
common: { | ||
name: { | ||
en: 'HTML List of devices with signal strength', | ||
de: 'HTML Liste der Geräte mit Signalstärke', | ||
ru: 'HTML Список устройств с силой сигнала', | ||
pt: 'HTML Lista de dispositivos com força de sinal', | ||
nl: 'HTML List van apparaten met signaalkracht', | ||
fr: 'HTML Liste des dispositifs avec force de signal', | ||
it: 'HTML Elenco dei dispositivi con forza del segnale', | ||
es: 'HTML Lista de dispositivos con fuerza de señal', | ||
pl: 'HTML Lista urządzeń z siłą sygnałową', | ||
'zh-cn': 'HTML 具有信号实力的装置清单', | ||
}, | ||
'type': 'string', | ||
'role': 'value', | ||
'read': true, | ||
'write': false, | ||
type: 'string', | ||
role: 'value', | ||
read: true, | ||
write: false, | ||
}, | ||
'native': {} | ||
native: {}, | ||
}); | ||
await this.setObjectNotExistsAsync(`${dpSubFolder}batteryListHTML`, { | ||
'type': 'state', | ||
'common': { | ||
'name': { | ||
'en': 'HTML List of devices with battery state', | ||
'de': 'HTML Liste der Geräte mit Batteriezustand', | ||
'ru': 'HTML Список устройств с состоянием батареи', | ||
'pt': 'HTML Lista de dispositivos com estado da bateria', | ||
'nl': 'HTML List van apparaten met batterij staat', | ||
'fr': 'HTML Liste des appareils avec état de batterie', | ||
'it': 'HTML Elenco dei dispositivi con stato della batteria', | ||
'es': 'HTML Lista de dispositivos con estado de batería', | ||
'pl': 'HTML Lista urządzeń z baterią stanową', | ||
'zh-cn': 'HTML 电池国装置清单' | ||
type: 'state', | ||
common: { | ||
name: { | ||
en: 'HTML List of devices with battery state', | ||
de: 'HTML Liste der Geräte mit Batteriezustand', | ||
ru: 'HTML Список устройств с состоянием батареи', | ||
pt: 'HTML Lista de dispositivos com estado da bateria', | ||
nl: 'HTML List van apparaten met batterij staat', | ||
fr: 'HTML Liste des appareils avec état de batterie', | ||
it: 'HTML Elenco dei dispositivi con stato della batteria', | ||
es: 'HTML Lista de dispositivos con estado de batería', | ||
pl: 'HTML Lista urządzeń z baterią stanową', | ||
'zh-cn': 'HTML 电池国装置清单', | ||
}, | ||
'type': 'string', | ||
'role': 'html', | ||
'read': true, | ||
'write': false, | ||
type: 'string', | ||
role: 'html', | ||
read: true, | ||
write: false, | ||
}, | ||
'native': {} | ||
native: {}, | ||
}); | ||
await this.setObjectNotExistsAsync(`${dpSubFolder}lowBatteryListHTML`, { | ||
'type': 'state', | ||
'common': { | ||
'name': { | ||
'en': 'HTML List of devices with low battery state', | ||
'de': 'HTML Liste der Geräte mit niedrigem Batteriezustand', | ||
'ru': 'HTML Список устройств с низким состоянием батареи', | ||
'pt': 'HTML Lista de dispositivos com baixo estado da bateria', | ||
'nl': 'HTML List van apparaten met lage batterij staat', | ||
'fr': 'HTML Liste des appareils à faible état de batterie', | ||
'it': 'HTML Elenco di dispositivi con stato di batteria basso', | ||
'es': 'HTML Lista de dispositivos con estado de batería bajo', | ||
'pl': 'HTML Lista urządzeń o niskim stanie baterii', | ||
'zh-cn': 'HTML 低电池国家装置清单' | ||
type: 'state', | ||
common: { | ||
name: { | ||
en: 'HTML List of devices with low battery state', | ||
de: 'HTML Liste der Geräte mit niedrigem Batteriezustand', | ||
ru: 'HTML Список устройств с низким состоянием батареи', | ||
pt: 'HTML Lista de dispositivos com baixo estado da bateria', | ||
nl: 'HTML List van apparaten met lage batterij staat', | ||
fr: 'HTML Liste des appareils à faible état de batterie', | ||
it: 'HTML Elenco di dispositivi con stato di batteria basso', | ||
es: 'HTML Lista de dispositivos con estado de batería bajo', | ||
pl: 'HTML Lista urządzeń o niskim stanie baterii', | ||
'zh-cn': 'HTML 低电池国家装置清单', | ||
}, | ||
'type': 'string', | ||
'role': 'html', | ||
'read': true, | ||
'write': false, | ||
type: 'string', | ||
role: 'html', | ||
read: true, | ||
write: false, | ||
}, | ||
'native': {} | ||
native: {}, | ||
}); | ||
@@ -1914,6 +1979,5 @@ } | ||
/** | ||
* @param {() => void} callback | ||
*/ | ||
* @param {() => void} callback | ||
*/ | ||
onUnload(callback) { | ||
@@ -1920,0 +1984,0 @@ try { |
{ | ||
"name": "iobroker.device-watcher", | ||
"version": "2.0.1", | ||
"version": "2.0.2", | ||
"description": "Watchdog for devices", | ||
@@ -44,4 +44,7 @@ "author": { | ||
"eslint": "^8.26.0", | ||
"eslint-config-prettier": "^8.5.0", | ||
"eslint-plugin-prettier": "^4.2.1", | ||
"mocha": "^10.1.0", | ||
"node-schedule": "^2.1.0", | ||
"prettier": "^2.7.1", | ||
"proxyquire": "^2.1.3", | ||
@@ -48,0 +51,0 @@ "sinon": "^14.0.1", |
232
README.md
![Logo](admin/device-watcher.png) | ||
# ioBroker.device-watcher | ||
[![NPM version](https://img.shields.io/npm/v/iobroker.device-watcher.svg)](https://www.npmjs.com/package/iobroker.device-watcher) | ||
![Current version in stable repository](https://iobroker.live/badges/device-watcher-stable.svg) | ||
[![Downloads](https://img.shields.io/npm/dm/iobroker.device-watcher.svg)](https://www.npmjs.com/package/iobroker.device-watcher) | ||
![Number of Installations](https://iobroker.live/badges/device-watcher-installed.svg) | ||
<!--![Current version in stable repository](https://iobroker.live/badges/device-watcher-stable.svg)--> | ||
[![GitHub license](https://img.shields.io/github/license/ciddi89/ioBroker.device-watcher)](https://github.com/ciddi89/ioBroker.device-watcher/blob/main/LICENSE) | ||
![GitHub repo size](https://img.shields.io/github/repo-size/ciddi89/ioBroker.device-watcher) | ||
![GitHub commit activity](https://img.shields.io/github/commit-activity/m/ciddi89/ioBroker.device-watcher) | ||
![GitHub commits since tagged version (branch)](https://img.shields.io/github/commits-since/ciddi89/ioBroker.device-watcher/v2.0.1) | ||
![GitHub commits since tagged version (branch)](https://img.shields.io/github/commits-since/ciddi89/ioBroker.device-watcher/v2.0.2) | ||
![GitHub last commit](https://img.shields.io/github/last-commit/ciddi89/ioBroker.device-watcher) | ||
@@ -18,5 +19,7 @@ ![GitHub issues](https://img.shields.io/github/issues/ciddi89/ioBroker.device-watcher) | ||
## Sentry | ||
**This adapter uses Sentry libraries to automatically report exceptions and code errors to the developers.** For more details and for information how to disable the error reporting see [Sentry-Plugin Documentation](https://github.com/ioBroker/plugin-sentry#plugin-sentry)! Sentry reporting is used starting with js-controller 3.0. | ||
## Documentation | ||
🇬🇧 [Documentation](/docs/en/README.md)</br> | ||
@@ -26,2 +29,3 @@ 🇩🇪 [Dokumentation](/docs/de/README.md) | ||
## Discussion and Questions | ||
[ioBroker Forum](https://forum.iobroker.net/topic/55426/test-adapter-device-watcher-v1-x-x-github-latest)</br> | ||
@@ -35,50 +39,52 @@ [ioBroker Discord Channel](https://discord.com/channels/743167951875604501/1030196924944486530) | ||
Supported adapters are: | ||
* Alexa2 | ||
* Ble | ||
* Deconz | ||
* Enocean | ||
* ESPHome | ||
* FritzDect | ||
* HAM | ||
* Harmony | ||
* HmiP | ||
* Homematic | ||
* HS100 | ||
* Hue | ||
* Hue Extended | ||
* Jeelink | ||
* Lupusec | ||
* MaxCube | ||
* Meross | ||
* MiHome | ||
* MiHome Vacuum | ||
* Netatmo | ||
* Nuki Extended | ||
* NUT | ||
* Ping (You have to set the option 'Advanced Information / Erweiterte Information' in the instance settings of ping for each device) | ||
* Roomba | ||
* Shelly | ||
* Sonoff | ||
* Sonos | ||
* Switchbot Ble | ||
* Tado | ||
* Tradfri | ||
* Unifi | ||
* WLED | ||
* Yeelight | ||
* Zigbee | ||
* Zigbee2MQTT | ||
* Zwave | ||
The adapter has also the option to send notifications if the number of offline devices are changed and to send you a notification if devices has a low battery state (e.g. 30%). You can choose the value for the battery notification and on which days you want the notification for low batteries. | ||
- Alexa2 | ||
- Ble | ||
- Deconz | ||
- Enocean | ||
- ESPHome | ||
- FritzDect | ||
- HAM | ||
- Harmony | ||
- HmiP | ||
- Homematic | ||
- HS100 | ||
- Hue | ||
- Hue Extended | ||
- Jeelink | ||
- Lupusec | ||
- MaxCube | ||
- Meross | ||
- MiHome | ||
- MiHome Vacuum | ||
- Netatmo | ||
- Nuki Extended | ||
- NUT | ||
- Ping (You have to set the option 'Advanced Information / Erweiterte Information' in the instance settings of ping for each device) | ||
- Roomba | ||
- Shelly | ||
- Sonoff | ||
- Sonos | ||
- Switchbot Ble | ||
- Tado | ||
- Tradfri | ||
- Unifi | ||
- WLED | ||
- Yeelight | ||
- Zigbee | ||
- Zigbee2MQTT | ||
- Zwave | ||
Currently supported notification services are: | ||
* Telegram (with support of Chat-ID for groupchats) | ||
* Pushover | ||
* Jarvis | ||
* Lovelace | ||
* and also an datapoint with the last notification, so you can use it for other services which aren't supported. | ||
The adapter has also the option to send notifications if the number of offline devices are changed and to send you a notification if devices has a low battery state (e.g. 30%). You can choose the value for the battery notification and on which days you want the notification for low batteries. | ||
Currently supported notification services are: | ||
- Telegram (with support of Chat-ID for groupchats) | ||
- Pushover | ||
- Jarvis | ||
- Lovelace | ||
- and also an datapoint with the last notification, so you can use it for other services which aren't supported. | ||
If you found a bug or you have an improvement suggestion, feel free to open an issue. | ||
@@ -88,3 +94,3 @@ | ||
If you don't want a specifice device in the list, you can add it in the blacklist and the adapter will ignore it. | ||
If you don't want a specifice device in the list, you can add it in the blacklist and the adapter will ignore it. | ||
@@ -105,7 +111,9 @@ ![add_blacklist.png](admin/images/add_blacklist.png) | ||
## To-Do | ||
- clean up the code | ||
- add support for reaction on state-changes | ||
- send offline text only from the device that goes offline | ||
- [ ] clean up the code | ||
- [ ] add support for reaction on state-changes | ||
- [ ] send offline text only from the device that goes offline | ||
## Changelog | ||
<!-- | ||
@@ -115,82 +123,103 @@ Placeholder for the next version (at the beginning of the line): | ||
--> | ||
### 2.0.2 (2022-11-12) | ||
- added status to battery list | ||
- batt devices which are offline are now still included in the battery list | ||
- small improvements of translations | ||
- offline time settings: you can use 0 instead of -1 (it will be the new standard) | ||
- improvements of adaptername | ||
- fixed issues [#66](https://github.com/ciddi89/ioBroker.device-watcher/issues/66) & [#67](https://github.com/ciddi89/ioBroker.device-watcher/issues/67) | ||
- repaired blacklist notifications | ||
- added handling for blacklist object | ||
### 2.0.1 (2022-11-02) | ||
- If the device is offline, set signal strength to '0%' | ||
- If the device is offline, set battery to ' - ' | ||
- repair some small issues in the lists | ||
- If the device is offline, set signal strength to '0%' | ||
- If the device is offline, set battery to ' - ' | ||
- repair some small issues in the lists | ||
### 2.0.0 (2022-11-01) | ||
- added Lupusec, HS100 adapter, Zigbee2MQTT and MaxCube | ||
- changed name of Homematic to HM-RPC | ||
- made a completly makeover of the blacklist | ||
- clean up the code and shorten some | ||
- added Lupusec, HS100 adapter, Zigbee2MQTT and MaxCube | ||
- changed name of Homematic to HM-RPC | ||
- made a completly makeover of the blacklist | ||
- clean up the code and shorten some | ||
### 1.1.0 (2022-10-03) | ||
- removed indicatoren for daily sent messages | ||
- changed selector for shelly devices | ||
- added Zigbee2MQTT adapter | ||
- added cron function to use own time for daily overview messages | ||
- removed indicatoren for daily sent messages | ||
- changed selector for shelly devices | ||
- added Zigbee2MQTT adapter | ||
- added cron function to use own time for daily overview messages | ||
### 1.0.1 (2022-09-30) | ||
- added WLED, Ikea Tradfri, Roomba, HmIp, Tado, Netatmo, Yeelight-2, Unifi, Nut and Meross adapter | ||
- fixed battery message | ||
- corrected and repaired some issues of last contact time | ||
- added support for old HM devices | ||
- some small refactoring of code | ||
- changed shelly selector from dp rssi to dp online | ||
- added WLED, Ikea Tradfri, Roomba, HmIp, Tado, Netatmo, Yeelight-2, Unifi, Nut and Meross adapter | ||
- fixed battery message | ||
- corrected and repaired some issues of last contact time | ||
- added support for old HM devices | ||
- some small refactoring of code | ||
- changed shelly selector from dp rssi to dp online | ||
### 1.0.0 (2022-09-03) | ||
- ** BREAKING CHANGE ** If you update from version <= 0.3.0, remove the old instance first before you update to >= 1.0.0. After that you can create a new instance. | ||
- changed mode from shedule to daemon, please take aware from the advice above | ||
- added Logitech Harmony Hub | ||
- small bugfixes (own function for blacklist, fix for memory leak etc.) | ||
- ** BREAKING CHANGE ** If you update from version <= 0.3.0, remove the old instance first before you update to >= 1.0.0. After that you can create a new instance. | ||
- changed mode from shedule to daemon, please take aware from the advice above | ||
- added Logitech Harmony Hub | ||
- small bugfixes (own function for blacklist, fix for memory leak etc.) | ||
### 0.3.0 (2022-08-10) | ||
- removed channelnumber in Homematic devices name | ||
- added function to create html list | ||
- added german and english documentation | ||
- removed channelnumber in Homematic devices name | ||
- added function to create html list | ||
- added german and english documentation | ||
### 0.2.4 (2022-07-31) | ||
- many changes of code, comments and error handling | ||
- many changes of code, comments and error handling | ||
### 0.2.2 (2022-07-28) | ||
- fixed translations | ||
- added sentry | ||
- added nuki battery state | ||
- fixed translations | ||
- added sentry | ||
- added nuki battery state | ||
### 0.2.1 (2022-07-27) | ||
- removed test states | ||
- removed test states | ||
### 0.2.0 (2022-07-24) | ||
- added function to create data of each adapter | ||
- added function to create data of each adapter | ||
### 0.1.2 (2022-07-22) | ||
- improved overview of admin ui | ||
- added option in admin ui to create own folders for each adapter (!!not working yet!!) | ||
- improved overview of admin ui | ||
- added option in admin ui to create own folders for each adapter (!!not working yet!!) | ||
### 0.1.1 (2022-07-22) | ||
- changed wrong type of datapoint lastCheck | ||
- added possibility to choose own offline time for each adapter | ||
- added Whatsapp notification services | ||
- improved sonoff devices | ||
- added row with online and offline status in table allDevices | ||
- added alexa2 and esphome devices | ||
- Added priority for pushover notifications | ||
- changed wrong type of datapoint lastCheck | ||
- added possibility to choose own offline time for each adapter | ||
- added Whatsapp notification services | ||
- improved sonoff devices | ||
- added row with online and offline status in table allDevices | ||
- added alexa2 and esphome devices | ||
- Added priority for pushover notifications | ||
### 0.0.8 (2022-07-05) | ||
- added own notes field for blacklist | ||
- added ping, switchbot ble, mihome, sonos, fritzdect, hue, hue extended and nuki extended | ||
- some improvements of code | ||
- added own notes field for blacklist | ||
- added ping, switchbot ble, mihome, sonos, fritzdect, hue, hue extended and nuki extended | ||
- some improvements of code | ||
### 0.0.6 (2022-06-10) | ||
- added Homematic, Deconz, Zwave | ||
- added Email notification | ||
- added count and list for low battery devices | ||
- changes Log state dp to last notification state dp | ||
- Using available state instead of link quality state for zigbee devices | ||
- Show the correct time of last contact instead the minutes if the time is under 100minutes | ||
- small bugfixes | ||
- added Homematic, Deconz, Zwave | ||
- added Email notification | ||
- added count and list for low battery devices | ||
- changes Log state dp to last notification state dp | ||
- Using available state instead of link quality state for zigbee devices | ||
- Show the correct time of last contact instead the minutes if the time is under 100minutes | ||
- small bugfixes | ||
@@ -214,2 +243,3 @@ ### 0.0.5 (2022-06-05) | ||
## License | ||
MIT License | ||
@@ -235,2 +265,2 @@ | ||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
SOFTWARE. | ||
SOFTWARE. |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
27
4385
259
888063
25