{
  "common": {
    "name": "sql",
    "titleLang": {
      "en": "SQL logging",
      "de": "SQL-Protokollierung",
      "ru": "Ведение журнала SQL",
      "pt": "Log de SQL",
      "nl": "SQL logging",
      "fr": "Journalisation SQL",
      "it": "Registrazione SQL",
      "es": "Registro de SQL",
      "pl": "Rejestrowanie SQL",
      "zh-cn": "SQL记录"
    },
    "desc": {
      "en": "Logging of states into SQL DB",
      "de": "Loggt die Historie von einzelnen Zuständen in einer SQL DB",
      "ru": "Сохраняет историю событий для отдельных состояний в SQL DB",
      "pt": "Registro de estados em SQL DB",
      "nl": "Logging van toestanden in SQL DB",
      "fr": "Journalisation des états dans la base de données SQL",
      "it": "Registrazione degli stati nel DB SQL",
      "es": "Registro de estados en SQL DB",
      "pl": "Rejestrowanie stanów w SQL DB",
      "zh-cn": "将状态记录到SQL DB"
    },
    "version": "4.1.5",
    "news": {
      "4.1.5": {
        "en": "Updated packages",
        "de": "Aktualisierte Pakete",
        "ru": "Обновлены пакеты",
        "pt": "Pacotes atualizados",
        "nl": "Bijgewerkte pakketten",
        "fr": "Paquets mis à jour",
        "it": "Pacchetti aggiornati",
        "es": "Paquetes actualizados",
        "pl": "Zaktualizowane pakiety",
        "uk": "Оновлені пакети",
        "zh-cn": "更新包"
      },
      "4.1.4": {
        "en": "Connection errors no longer start with the useless class name `AggregateError`: the log now shows only the real reason, e.g. `connect ECONNREFUSED 127.0.0.1:3306; connect ECONNREFUSED ::1:3306`",
        "de": "Verbindungsfehler beginnen nicht mehr mit dem nutzlosen Klassennamen `AggregateError`: Das Protokoll zeigt nun nur noch den tatsächlichen Grund an, z. B. `connect ECONNREFUSED 127.0.0.1:3306; connect ECONNREFUSED ::1:3306`",
        "ru": "Ошибки подключения больше не начинаются с бесполезного имени класса `AggregateError`: теперь в журнале отображается только реальная причина, например, `connect ECONNREFUSED 127.0.0.1:3306; connect ECONNREFUSED ::1:3306`",
        "pt": "Os erros de conexão não começam mais com o nome de classe inútil `AggregateError`: o log agora mostra apenas o motivo real, por exemplo, `connect ECONNREFUSED 127.0.0.1:3306; connect ECONNREFUSED ::1:3306`.",
        "nl": "Verbindingsfouten beginnen niet langer met de nutteloze klassenaam `AggregateError`: het logboek toont nu alleen de werkelijke reden, bijvoorbeeld `connect ECONNREFUSED 127.0.0.1:3306; connect ECONNREFUSED ::1:3306`",
        "fr": "Les erreurs de connexion ne commencent plus par le nom de classe inutile `AggregateError` : le journal affiche désormais uniquement la véritable raison, par exemple : `connect ECONNREFUSED 127.0.0.1:3306; connect ECONNREFUSED ::1:3306`",
        "it": "Gli errori di connessione non iniziano più con l'inutile nome di classe `AggregateError`: il log ora mostra solo la causa reale, ad esempio `connect ECONNREFUSED 127.0.0.1:3306; connect ECONNREFUSED ::1:3306`",
        "es": "Los errores de conexión ya no comienzan con el nombre de clase inútil `AggregateError`: el registro ahora muestra solo el motivo real, por ejemplo, `connect ECONNREFUSED 127.0.0.1:3306; connect ECONNREFUSED ::1:3306`.",
        "pl": "Błędy połączenia nie zaczynają się już od bezużytecznej nazwy klasy `AggregateError`: w dzienniku jest teraz wyświetlana tylko prawdziwa przyczyna, np. `connect ECONNREFUSED 127.0.0.1:3306; connect ECONNREFUSED ::1:3306`",
        "uk": "Помилки підключення більше не починаються з непотрібної назви класу `AggregateError`: журнал тепер показує лише справжню причину, наприклад, `connect ECONNREFUSED 127.0.0.1:3306; connect ECONNREFUSED ::1:3306`",
        "zh-cn": "连接错误不再以无用的类名 `AggregateError` 开头：日志现在只显示真正的错误原因，例如 `connect ECONNREFUSED 127.0.0.1:3306; connect ECONNREFUSED ::1:3306`"
      },
      "4.1.3": {
        "en": "Connection errors are logged with the real reason again: Node reports a failed TCP connect as an `AggregateError` whose own message is empty, so the log only showed the word `AggregateError` instead of e.g. `connect ECONNREFUSED 127.0.0.1:3306`\nThe reconnect loop no longer repeats the same connection error every 30 seconds: the first occurrence is logged as error, repetitions go to debug and once an hour a reminder is logged",
        "de": "Verbindungsfehler werden wieder mit dem tatsächlichen Grund protokolliert: Node meldet einen fehlgeschlagenen TCP-Verbindungsversuch als `AggregateError`, dessen eigene Meldung leer ist, sodass im Protokoll nur das Wort `AggregateError` anstelle von z. B. `connect ECONNREFUSED 127.0.0.1:3306` angezeigt wurde.\nDie Wiederverbindungsschleife wiederholt den gleichen Verbindungsfehler nicht mehr alle 30 Sekunden: Das erste Auftreten wird als Fehler protokolliert, Wiederholungen werden in den Debug-Modus versetzt und einmal pro Stunde wird eine Erinnerung protokolliert.",
        "ru": "В логах снова отображаются ошибки подключения с указанием реальной причины: узел сообщает о неудачном TCP-подключении как об ошибке `AggregateError`, собственное сообщение которой пустое, поэтому в логе отображается только слово `AggregateError` вместо, например, `connect ECONNREFUSED 127.0.0.1:3306`.\nЦикл переподключения больше не повторяет одну и ту же ошибку подключения каждые 30 секунд: первое возникновение регистрируется как ошибка, повторения передаются в режим отладки, и раз в час записывается напоминание.",
        "pt": "Os erros de conexão são registrados novamente com o motivo real: o Node reporta uma falha de conexão TCP como um `AggregateError`, cuja mensagem está vazia, portanto o log mostra apenas a palavra `AggregateError` em vez de, por exemplo, `connect ECONNREFUSED 127.0.0.1:3306`.\nO loop de reconexão não repete mais o mesmo erro de conexão a cada 30 segundos: a primeira ocorrência é registrada como erro, as repetições vão para o modo de depuração e, uma vez por hora, um lembrete é registrado.",
        "nl": "Verbindingsfouten worden nu weer met de werkelijke reden geregistreerd: Node meldt een mislukte TCP-verbinding als een `AggregateError`, waarvan het bericht zelf leeg is. Daarom toont het logboek alleen het woord `AggregateError` in plaats van bijvoorbeeld `connect ECONNREFUSED 127.0.0.1:3306`.\nDe herverbindingslus herhaalt niet langer elke 30 seconden dezelfde verbindingsfout: de eerste keer dat deze optreedt, wordt geregistreerd als fout, herhalingen worden naar de debug-log gestuurd en eenmaal per uur wordt een herinnering geregistreerd.",
        "fr": "Les erreurs de connexion sont à nouveau consignées avec leur véritable raison : Node signale un échec de connexion TCP comme une `AggregateError` dont le message est vide ; par conséquent, le journal n'affiche que le mot `AggregateError` au lieu de, par exemple, `connect ECONNREFUSED 127.0.0.1:3306`.\nLa boucle de reconnexion ne répète plus la même erreur de connexion toutes les 30 secondes : la première occurrence est consignée comme une erreur, les répétitions sont enregistrées en mode débogage et un rappel est consigné une fois par heure.",
        "it": "Gli errori di connessione vengono registrati con la vera causa: Node segnala una connessione TCP non riuscita come un `AggregateError` il cui messaggio è vuoto, quindi il log mostra solo la parola `AggregateError` invece di, ad esempio, `connect ECONNREFUSED 127.0.0.1:3306`.\nIl ciclo di riconnessione non ripete più lo stesso errore di connessione ogni 30 secondi: la prima occorrenza viene registrata come errore, le ripetizioni vanno in modalità debug e una volta all'ora viene registrato un promemoria.",
        "es": "Los errores de conexión se registran nuevamente con el motivo real: Node informa un fallo de conexión TCP como un `AggregateError` cuyo propio mensaje está vacío, por lo que el registro solo mostró la palabra `AggregateError` en lugar de, por ejemplo, `connect ECONNREFUSED 127.0.0.1:3306`.\nEl bucle de reconexión ya no repite el mismo error de conexión cada 30 segundos: la primera ocurrencia se registra como error, las repeticiones van a depuración y una vez por hora se registra un recordatorio.",
        "pl": "Błędy połączenia są rejestrowane ponownie z prawdziwym powodem: Węzeł zgłasza nieudane połączenie TCP jako `AggregateError`, którego własny komunikat jest pusty, więc w logu wyświetlane jest tylko słowo `AggregateError` zamiast np. `connect ECONNREFUSED 127.0.0.1:3306`\nPętla ponownego łączenia nie powtarza już tego samego błędu połączenia co 30 sekund: pierwsze wystąpienie jest rejestrowane jako błąd, powtórzenia trafiają do debugowania, a raz na godzinę rejestrowane jest przypomnienie",
        "uk": "Помилки з'єднання знову реєструються зі справжньою причиною: Node повідомляє про невдале TCP-з'єднання як `AggregateError`, власне повідомлення якого порожнє, тому в журналі відображається лише слово `AggregateError` замість, наприклад, `connect ECONNREFUSED 127.0.0.1:3306`.\nЦикл повторного підключення більше не повторює ту саму помилку з'єднання кожні 30 секунд: перше виникнення реєструється як помилка, повторення передаються на налагодження, а раз на годину реєструється нагадування.",
        "zh-cn": "连接错误日志中再次记录了真实原因：Node 将 TCP 连接失败报告为 `AggregateError`，但其消息本身为空，因此日志中仅显示 `AggregateError` 一词，而不是例如 `connect ECONNREFUSED 127.0.0.1:3306`。\n重新连接循环不再每 30 秒重复出现相同的连接错误：第一次出现错误会被记录为错误，重复出现的错误会被记录为调试信息，并且每小时会记录一次提醒。"
      },
      "4.1.2": {
        "en": "Fixed `enableHistory` being answered with `success: true` but silently doing nothing when it arrived while the adapter was still starting up: the adapter subscribed to object changes only after it had read the logging settings, so a message that landed in that gap activated no logging\nFixed average and total returning null for every interval that contains a null value: parseFloat(null) is NaN and poisoned the sum of the whole interval (thanks to @joltcoke, ioBroker/ioBroker.sql#526). As the result was NaN and not null, ignoreNull could not act on it either\nFixed min returning a wrong value if the interval contains a null, minmax losing the minimum if the interval starts with a null, and percentile/quantile counting a null as 0",
        "de": "Es wurde ein Fehler behoben, der dazu führte, dass `enableHistory` mit `success: true` beantwortet wurde, aber keine Aktion auslöste, wenn die Nachricht während des Startvorgangs des Adapters eintraf: Der Adapter abonnierte Objektänderungen erst, nachdem er die Protokollierungseinstellungen gelesen hatte. Eine Nachricht, die in diesem Zeitraum eintraf, deaktivierte daher die Protokollierung.\nDer korrigierte Durchschnitt und die Summe gaben für jedes Intervall, das einen Nullwert enthielt, null zurück: `parseFloat(null)` lieferte NaN und verfälschte die Summe des gesamten Intervalls (danke an @joltcoke, ioBroker/ioBroker.sql#526). Da das Ergebnis NaN und nicht null war, konnte auch `ignoreNull` nicht darauf reagieren.\nDie Funktion `fixed min` liefert einen falschen Wert, wenn das Intervall einen Nullwert enthält; `minmax` verliert das Minimum, wenn das Intervall mit einem Nullwert beginnt; und die Funktionen `percentile`/`quantile` zählen einen Nullwert als 0.",
        "ru": "Исправлена ошибка, из-за которой запрос `enableHistory` получал ответ `success: true`, но молча ничего не делал, когда он поступал во время запуска адаптера: адаптер подписывался на изменения объектов только после того, как считывал настройки логирования, поэтому сообщение, попавшее в этот промежуток, не активировало логирование.\nИсправлена ошибка, из-за которой функции average и total возвращали null для каждого интервала, содержащего значение null: parseFloat(null) принимало значение NaN и искажало сумму всего интервала (спасибо @joltcoke, ioBroker/ioBroker.sql#526). Поскольку результатом был NaN, а не null, ignoreNull также не мог с ним работать.\nИсправлена ошибка, из-за которой параметр min возвращал неверное значение, если интервал содержал нулевое значение, параметр minmax терял минимум, если интервал начинался с нулевого значения, а параметр percentile/quantile считал нулевое значение равным 0.",
        "pt": "Corrigido o problema em que a solicitação `enableHistory` era respondida com `success: true`, mas não executava nenhuma ação silenciosa quando chegava enquanto o adaptador ainda estava inicializando: o adaptador se inscrevia para receber notificações de alterações de objetos somente após ler as configurações de registro, portanto, uma mensagem que chegasse nesse intervalo não ativava nenhum registro.\nA média e o total fixos retornavam nulo para cada intervalo que continha um valor nulo: `parseFloat(null)` retornava NaN e corrompia a soma de todo o intervalo (obrigado a @joltcoke, ioBroker/ioBroker.sql#526). Como o resultado era NaN e não nulo, `ignoreNull` também não podia ser aplicado.\nCorrigido o problema em que a função min retornava um valor incorreto se o intervalo contivesse um valor nulo, a função minmax perdia o valor mínimo se o intervalo começasse com um valor nulo e a função percentil/quantil contava um valor nulo como 0.",
        "nl": "Er is een probleem opgelost waarbij `enableHistory` weliswaar werd beantwoord met `success: true`, maar stilzwijgend niets deed wanneer het bericht binnenkwam terwijl de adapter nog aan het opstarten was: de adapter abonneerde zich pas op objectwijzigingen nadat de loginstellingen waren gelezen, waardoor een bericht dat in die periode binnenkwam geen logregistratie activeerde.\nHet gemiddelde en totaal geven null terug voor elk interval dat een null-waarde bevat: parseFloat(null) is NaN en vergiftigde de som van het hele interval (met dank aan @joltcoke, ioBroker/ioBroker.sql#526). Omdat het resultaat NaN was en niet null, kon ignoreNull er ook niet op reageren.\nDe vaste min-functie geeft een onjuiste waarde terug als het interval een null-waarde bevat, de minmax-functie verliest het minimum als het interval met een null-waarde begint, en de percentiel-/kwantielfunctie telt een null-waarde als 0.",
        "fr": "Correction d'un problème où `enableHistory` répondait par `success: true` sans effectuer aucune action lorsqu'il arrivait pendant le démarrage de l'adaptateur : l'adaptateur ne s'abonnait aux modifications d'objets qu'après avoir lu les paramètres de journalisation, et un message reçu pendant ce laps de temps n'activait donc aucune journalisation.\nLa moyenne et le total fixes renvoient null pour chaque intervalle contenant une valeur nulle : `parseFloat(null)` renvoie NaN et fausse la somme de l'intervalle entier (merci à @joltcoke, ioBroker/ioBroker.sql#526). Comme le résultat était NaN et non null, `ignoreNull` ne pouvait pas non plus agir.\nLa fonction min fixe renvoie une valeur incorrecte si l'intervalle contient une valeur nulle, la fonction minmax perd la valeur minimale si l'intervalle commence par une valeur nulle, et les fonctions percentile/quantile comptent une valeur nulle comme 0.",
        "it": "Risolto il problema per cui `enableHistory` riceveva risposta con `success: true` ma non eseguiva alcuna azione silenziosamente quando arrivava mentre l'adattatore era ancora in fase di avvio: l'adattatore si iscriveva alle modifiche degli oggetti solo dopo aver letto le impostazioni di logging, quindi un messaggio che arrivava in quell'intervallo non attivava alcun logging.\nMedia e totale fissi restituiscono null per ogni intervallo che contiene un valore null: parseFloat(null) è NaN e ha alterato la somma dell'intero intervallo (grazie a @joltcoke, ioBroker/ioBroker.sql#526). Poiché il risultato era NaN e non null, ignoreNull non poteva agire su di esso.\nIl minimo fisso restituisce un valore errato se l'intervallo contiene un valore nullo, il minimo massimo perde il minimo se l'intervallo inizia con un valore nullo e il percentile/quantile considera un valore nullo come 0.",
        "es": "Se solucionó un problema por el cual `enableHistory` respondía con `success: true` pero no hacía nada silenciosamente cuando llegaba mientras el adaptador aún se estaba iniciando: el adaptador se suscribía a los cambios de objetos solo después de haber leído la configuración de registro, por lo que un mensaje que llegaba en ese lapso activaba la opción de no registro.\nSe corrigió el promedio y el total, devolviendo null para cada intervalo que contiene un valor nulo: parseFloat(null) es NaN y contamina la suma de todo el intervalo (gracias a @joltcoke, ioBroker/ioBroker.sql#526). Como el resultado era NaN y no null, ignoreNull tampoco podía actuar sobre él.\nSe corrigió el error min que devolvía un valor incorrecto si el intervalo contenía un valor nulo, minmax que perdía el mínimo si el intervalo comenzaba con un valor nulo, y percentile/quantile que contaba un valor nulo como 0.",
        "pl": "Naprawiono błąd, w którym na `enableHistory` otrzymywano odpowiedź `sucess: true`, ale po jej otrzymaniu, gdy adapter był jeszcze uruchamiany, nie wykonywano żadnej czynności: adapter zapisywał zmiany obiektów dopiero po odczytaniu ustawień rejestrowania, więc wiadomość, która pojawiała się w tej luce, nie powodowała rejestrowania.\nStała średnia i suma zwracająca null dla każdego interwału zawierającego wartość null: parseFloat(null) ma wartość NaN i zatruwa sumę całego interwału (dzięki @joltcoke, ioBroker/ioBroker.sql#526). Ponieważ wynik był NaN, a nie null, funkcja ignoreNull również nie mogła na niego zareagować.\nNaprawiono błąd min. zwracający błędną wartość, jeśli przedział zawiera wartość null, min. max. tracący wartość minimum, jeśli przedział zaczyna się od wartości null, oraz percentyl/kwantyl liczący wartość null jako 0",
        "uk": "Виправлено помилку, через яку на `enableHistory` відповідали `success: true`, але при отриманні повідомлення адаптера нічого не робилося: адаптер підписувався на зміни об'єктів лише після зчитування налаштувань журналювання, тому повідомлення, яке потрапляло в цей проміжок, активувало відсутність журналювання.\nВиправлено середнє та загальне повернення null для кожного інтервалу, що містить null-значення: parseFloat(null) має значення NaN та отруює суму всього інтервалу (дякую @joltcoke, ioBroker/ioBroker.sql#526). Оскільки результатом було NaN, а не null, ignoreNull також не міг на нього вплинути.\nВиправлено помилку, через яку min повертав неправильне значення, якщо інтервал містив null, minmax втрачав мінімум, якщо інтервал починався з null, а процентиль/квантиль враховував null як 0.",
        "zh-cn": "修复了在适配器仍在启动时，`enableHistory` 请求返回 `success: true` 但实际上并未执行任何操作的问题：适配器仅在读取日志设置后才订阅对象更改，因此在此期间收到的消息会触发不记录日志。\n对于包含空值的每个区间，固定平均值和总和均返回 null：parseFloat(null) 的结果为 NaN，导致整个区间的总和被污染（感谢 @joltcoke，ioBroker/ioBroker.sql#526）。由于结果为 NaN 而非 null，因此 ignoreNull 也无法对其生效。\n修复了当区间包含空值时最小值返回错误值的问题，修复了当区间以空值开头时最小最大值丢失的问题，以及修复了百分位数/分位数将空值计为 0 的问题。"
      },
      "4.1.0": {
        "en": "Added a button to the datapoint settings to delete all logged values of this datapoint\nThe messages `delete`, `deleteRange` and `deleteAll` now report errors back to the caller instead of always answering with success\nThe messages `delete`, `deleteRange` and `deleteAll` work now also for datapoints whose logging is disabled\nThe messages `delete`, `deleteRange` and `deleteAll` delete the counter values of a numeric datapoint (table `ts_counter`) too\nFixed `NaN` as a result of the aggregation `percentile` with 100 or `quantile` with 1\nFixed the last value of the `integralTotal` aggregation: it was interpolated onto the start instead of the end of the requested range\nAdded the message `getRawEntries` to read the stored values of one datapoint page by page (with the total number of entries) for tools that show or edit the raw data\nThe message `update` works now also for datapoints whose logging is disabled and reports errors back to the caller\n`storeState` uses the data type stored in the database for known datapoints instead of deriving it from the value\nAdded the tab `Data browser` to the instance settings: show, edit, delete and insert the stored values of a datapoint\nAdded the message `getDatapoints` that returns all datapoints of the database immediately",
        "de": "Es wurde eine Schaltfläche zu den Datenpunkteinstellungen hinzugefügt, mit der alle protokollierten Werte dieses Datenpunkts gelöscht werden können.\nDie Nachrichten `delete`, `deleteRange` und `deleteAll` melden nun Fehler an den Aufrufer zurück, anstatt immer eine Erfolgsmeldung zu senden.\nDie Meldungen `delete`, `deleteRange` und `deleteAll` funktionieren jetzt auch für Datenpunkte, deren Protokollierung deaktiviert ist.\nDie Nachrichten `delete`, `deleteRange` und `deleteAll` löschen auch die Zählerwerte eines numerischen Datenpunkts (Tabelle `ts_counter`).\nDer Wert `NaN` wurde aufgrund der Aggregation von `Perzentil` mit 100 oder `Quantil` mit 1 korrigiert.\nDer letzte Wert der Aggregation `integralTotal` wurde korrigiert: Er wurde auf den Anfang anstatt auf das Ende des angeforderten Bereichs interpoliert.\nDie Meldung `getRawEntries` wurde hinzugefügt, um die gespeicherten Werte eines Datenpunkts seitenweise (mit der Gesamtzahl der Einträge) für Werkzeuge zu lesen, die die Rohdaten anzeigen oder bearbeiten.\nDie Meldung „update“ funktioniert nun auch für Datenpunkte, deren Protokollierung deaktiviert ist, und meldet Fehler an den Aufrufer zurück.\n`storeState` verwendet den in der Datenbank für bekannte Datenpunkte gespeicherten Datentyp, anstatt ihn vom Wert abzuleiten.\nDen Instanzeinstellungen wurde die Registerkarte „Datenbrowser“ hinzugefügt: Anzeigen, Bearbeiten, Löschen und Einfügen der gespeicherten Werte eines Datenpunkts\nDie Nachricht `getDatapoints` wurde hinzugefügt, die sofort alle Datenpunkte der Datenbank zurückgibt.",
        "ru": "Добавлена кнопка в настройки точки данных для удаления всех зарегистрированных значений этой точки данных.\nСообщения `delete`, `deleteRange` и `deleteAll` теперь сообщают вызывающей стороне об ошибках, вместо того чтобы всегда отвечать успешным результатом.\nСообщения `delete`, `deleteRange` и `deleteAll` теперь работают и для точек данных, для которых отключено логирование.\nСообщения `delete`, `deleteRange` и `deleteAll` также удаляют значения счетчиков числовой точки данных (таблицы `ts_counter`).\nЗначение `NaN` фиксировано в результате агрегирования `percentile` со значением 100 или `quantile` со значением 1.\nИсправлено последнее значение агрегации `integralTotal`: оно интерполировалось на начало, а не на конец запрошенного диапазона.\nДобавлено сообщение `getRawEntries` для постраничного чтения сохраненных значений одной точки данных (с указанием общего количества записей) для инструментов, отображающих или редактирующих исходные данные.\nСообщение `update` теперь работает и для точек данных, для которых отключено логирование, и сообщает об ошибках вызывающей стороне.\n`storeState` использует тип данных, хранящийся в базе данных, для известных точек данных, вместо того, чтобы вычислять его на основе значения.\nВ настройки экземпляра добавлена вкладка «Просмотр данных»: отображение, редактирование, удаление и вставка сохраненных значений точки данных.\nДобавлено сообщение `getDatapoints`, которое немедленно возвращает все точки данных из базы данных.",
        "pt": "Adicionamos um botão às configurações do ponto de dados para excluir todos os valores registrados para este ponto de dados.\nAs mensagens `delete`, `deleteRange` e `deleteAll` agora retornam erros para quem as chamou, em vez de sempre responderem com sucesso.\nAs mensagens `delete`, `deleteRange` e `deleteAll` agora funcionam também para pontos de dados cujo registro está desativado.\nAs mensagens `delete`, `deleteRange` e `deleteAll` também excluem os valores do contador de um ponto de dados numérico (tabela `ts_counter`).\nO valor `NaN` foi corrigido devido à agregação do `percentil` com 100 ou do `quantil` com 1.\nCorrigido o último valor da agregação `integralTotal`: ele estava sendo interpolado no início em vez do fim do intervalo solicitado.\nAdicionada a mensagem `getRawEntries` para ler os valores armazenados de um ponto de dados página por página (com o número total de entradas) para ferramentas que exibem ou editam os dados brutos.\nA mensagem `update` agora funciona também para pontos de dados cujo registro está desativado e reporta erros ao solicitante.\n`storeState` usa o tipo de dados armazenado no banco de dados para pontos de dados conhecidos, em vez de derivá-lo do valor.\nAdicionada a aba `Navegador de dados` às configurações da instância: permite visualizar, editar, excluir e inserir os valores armazenados de um ponto de dados.\nAdicionada a mensagem `getDatapoints` que retorna todos os pontos de dados do banco de dados imediatamente.",
        "nl": "Er is een knop toegevoegd aan de instellingen van het datapunt om alle geregistreerde waarden van dit datapunt te verwijderen.\nDe berichten `delete`, `deleteRange` en `deleteAll` melden nu fouten terug aan de aanroeper in plaats van altijd met succes te antwoorden.\nDe berichten `delete`, `deleteRange` en `deleteAll` werken nu ook voor datapunten waarvan de logging is uitgeschakeld.\nDe berichten `delete`, `deleteRange` en `deleteAll` verwijderen ook de tellerwaarden van een numeriek datapunt (tabel `ts_counter`).\nVaste `NaN` als resultaat van de aggregatie `percentiel` met 100 of `kwantiel` met 1\nDe laatste waarde van de aggregatie `integralTotal` is gecorrigeerd: deze werd geïnterpoleerd naar het begin in plaats van het einde van het gevraagde bereik.\nHet bericht `getRawEntries` is toegevoegd om de opgeslagen waarden van één datapunt pagina voor pagina te lezen (inclusief het totale aantal vermeldingen) voor tools die de ruwe data weergeven of bewerken.\nHet bericht `update` werkt nu ook voor datapunten waarvan de logging is uitgeschakeld en rapporteert fouten terug aan de aanroeper.\n`storeState` gebruikt het gegevenstype dat in de database is opgeslagen voor bekende datapunten, in plaats van het af te leiden van de waarde.\nHet tabblad 'Gegevensbrowser' is toegevoegd aan de instantie-instellingen: hiermee kunt u de opgeslagen waarden van een gegevenspunt weergeven, bewerken, verwijderen en invoegen.\nHet bericht `getDatapoints` is toegevoegd, waarmee direct alle datapoints uit de database worden geretourneerd.",
        "fr": "Ajout d'un bouton aux paramètres du point de données pour supprimer toutes les valeurs enregistrées de ce point de données\nLes messages `delete`, `deleteRange` et `deleteAll` signalent désormais les erreurs à l'appelant au lieu de toujours répondre par un succès.\nLes messages `delete`, `deleteRange` et `deleteAll` fonctionnent désormais également pour les points de données dont la journalisation est désactivée.\nLes messages `delete`, `deleteRange` et `deleteAll` suppriment également les valeurs du compteur d'un point de données numériques (tableau `ts_counter`).\nValeurs NaN corrigées suite à l'agrégation du percentile avec 100 ou du quantile avec 1.\nCorrection de la dernière valeur de l'agrégation `integralTotal` : elle était interpolée au début au lieu de la fin de la plage demandée.\nAjout du message `getRawEntries` pour lire les valeurs stockées d'un point de données page par page (avec le nombre total d'entrées) pour les outils qui affichent ou modifient les données brutes.\nLe message `update` fonctionne désormais également pour les points de données dont la journalisation est désactivée et signale les erreurs à l'appelant.\n`storeState` utilise le type de données stocké dans la base de données pour les points de données connus au lieu de le dériver de la valeur\nAjout de l'onglet « Navigateur de données » aux paramètres de l'instance : afficher, modifier, supprimer et insérer les valeurs enregistrées d'un point de données\nAjout du message `getDatapoints` qui renvoie immédiatement tous les points de données de la base de données.",
        "it": "È stato aggiunto un pulsante alle impostazioni del punto dati per eliminare tutti i valori registrati di questo punto dati.\nI messaggi `delete`, `deleteRange` e `deleteAll` ora segnalano gli errori al chiamante invece di rispondere sempre con successo.\nI messaggi `delete`, `deleteRange` e `deleteAll` ora funzionano anche per i punti dati per i quali la registrazione è disabilitata.\nI messaggi `delete`, `deleteRange` e `deleteAll` eliminano anche i valori del contatore di un punto dati numerico (tabella `ts_counter`).\nValore fisso `NaN` come risultato dell'aggregazione `percentile` con 100 o `quantile` con 1\nCorretto l'ultimo valore dell'aggregazione `integralTotal`: veniva interpolato all'inizio anziché alla fine dell'intervallo richiesto.\nÈ stato aggiunto il messaggio `getRawEntries` per leggere i valori memorizzati di un punto dati pagina per pagina (con il numero totale di voci) per gli strumenti che mostrano o modificano i dati grezzi\nIl messaggio `update` ora funziona anche per i punti dati la cui registrazione è disabilitata e segnala gli errori al chiamante\n`storeState` utilizza il tipo di dati memorizzato nel database per i punti dati noti invece di derivarlo dal valore\nAggiunta la scheda \"Browser dati\" alle impostazioni dell'istanza: consente di visualizzare, modificare, eliminare e inserire i valori memorizzati di un punto dati.\nAggiunto il messaggio `getDatapoints` che restituisce immediatamente tutti i punti dati del database",
        "es": "Se agregó un botón a la configuración del punto de datos para eliminar todos los valores registrados de este punto de datos.\nLos mensajes `delete`, `deleteRange` y `deleteAll` ahora informan errores al emisor en lugar de responder siempre con éxito.\nLos mensajes `delete`, `deleteRange` y `deleteAll` ahora también funcionan para los puntos de datos cuyo registro está deshabilitado.\nLos mensajes `delete`, `deleteRange` y `deleteAll` también eliminan los valores del contador de un punto de datos numérico (tabla `ts_counter`).\nSe corrigió el valor `NaN` como resultado de la agregación `percentile` con 100 o `quantile` con 1.\nSe corrigió el último valor de la agregación `integralTotal`: se interpolaba al inicio en lugar del final del rango solicitado.\nSe agregó el mensaje `getRawEntries` para leer los valores almacenados de un punto de datos página por página (con el número total de entradas) para las herramientas que muestran o editan los datos sin procesar.\nEl mensaje `update` ahora también funciona para los puntos de datos cuyo registro está deshabilitado e informa los errores al emisor.\n`storeState` utiliza el tipo de datos almacenado en la base de datos para los puntos de datos conocidos en lugar de derivarlo del valor.\nSe agregó la pestaña `Explorador de datos` a la configuración de la instancia: muestra, edita, elimina e inserta los valores almacenados de un punto de datos.\nSe agregó el mensaje `getDatapoints` que devuelve todos los puntos de datos de la base de datos inmediatamente.",
        "pl": "Dodano przycisk do ustawień punktu danych umożliwiający usunięcie wszystkich zarejestrowanych wartości tego punktu danych\nWiadomości `delete`, `deleteRange` i `deleteAll` teraz zgłaszają błędy wywołującemu zamiast zawsze odpowiadać pomyślnie\nWiadomości `delete`, `deleteRange` i `deleteAll` działają teraz również dla punktów danych, których rejestrowanie jest wyłączone\nWiadomości `delete`, `deleteRange` i `deleteAll` usuwają również wartości liczników liczbowych punktów danych (tabela `ts_counter`)\nNaprawiono `NaN` jako wynik agregacji `percentyla` z 100 lub `kwantyla` z 1\nNaprawiono ostatnią wartość agregacji `integralTotal`: została ona interpolowana na początku, a nie na końcu żądanego zakresu\nDodano komunikat `getRawEntries` umożliwiający odczytanie wartości zapisanych dla poszczególnych punktów danych strona po stronie (z całkowitą liczbą wpisów) w przypadku narzędzi, które wyświetlają lub edytują surowe dane\nWiadomość „update” działa teraz również w przypadku punktów danych, których rejestrowanie jest wyłączone, i zgłasza błędy do osoby wywołującej\n`storeState` używa typu danych przechowywanego w bazie danych dla znanych punktów danych zamiast wywodzić go z wartości\nDodano zakładkę „Przeglądarka danych” do ustawień instancji: pokaż, edytuj, usuń i wstaw zapisane wartości punktu danych\nDodano komunikat `getDatapoints`, który natychmiast zwraca wszystkie punkty danych bazy danych",
        "uk": "До налаштувань точки даних додано кнопку для видалення всіх зареєстрованих значень цієї точки даних.\nПовідомлення `delete`, `deleteRange` та `deleteAll` тепер повідомляють про помилки тому, хто викликає, замість того, щоб завжди відповідати з успіхом.\nПовідомлення `delete`, `deleteRange` та `deleteAll` тепер працюють також для точок даних, реєстрація яких вимкнена.\nПовідомлення `delete`, `deleteRange` та `deleteAll` також видаляють значення лічильника числової точки даних (таблиця `ts_counter`).\nВиправлено значення `NaN` в результаті агрегації `перцентиля` зі 100 або `квантили` з 1\nВиправлено останнє значення агрегації `integralTotal`: воно інтерполювалося на початок, а не на кінець запитуваного діапазону.\nДодано повідомлення `getRawEntries` для зчитування збережених значень однієї точки даних посторінково (із загальною кількістю записів) для інструментів, які показують або редагують необроблені дані.\nПовідомлення `update` тепер працює також для точок даних, реєстрація яких вимкнена, та повідомляє про помилки тому, хто викликає.\n`storeState` використовує тип даних, що зберігається в базі даних, для відомих точок даних, замість того, щоб виводити його зі значення\nДо налаштувань екземпляра додано вкладку `Data browser`: показ, редагування, видалення та вставка збережених значень точки даних\nДодано повідомлення `getDatapoints`, яке негайно повертає всі точки даних бази даних.",
        "zh-cn": "在数据点设置中添加了一个按钮，用于删除该数据点的所有已记录值。\n现在，`delete`、`deleteRange` 和 `deleteAll` 消息会向调用者报告错误，而不是始终返回成功结果。\n现在，即使数据点的日志记录功能已禁用，`delete`、`deleteRange` 和 `deleteAll` 消息也能正常工作。\n`delete`、`deleteRange` 和 `deleteAll` 消息也会删除数值数据点（表 `ts_counter`）的计数器值。\n修复了由于聚合“百分位数”等于 100 或“分位数”等于 1 而导致的“NaN”值。\n修复了 `integralTotal` 聚合的最后一个值：它之前被插值到请求范围的起始位置而不是结束位置。\n为显示或编辑原始数据的工具添加了 `getRawEntries` 消息，用于逐页读取单个数据点的存储值（以及条目总数）。\n现在，即使数据点的日志记录被禁用，`update` 消息也能正常工作，并将错误报告给调用者。\n`storeState` 使用数据库中存储的已知数据点的数据类型，而不是从值中推导出来。\n在实例设置中添加了“数据浏览器”选项卡：显示、编辑、删除和插入数据点的存储值\n添加了 `getDatapoints` 消息，该消息会立即返回数据库中的所有数据点。"
      },
      "4.0.4": {
        "en": "Fixed that nothing was stored for datapoints with an `aliasId`: the adapter subscribed to the alias name instead of the real state ID, so no state change ever arrived",
        "de": "Es wurde behoben, dass für Datenpunkte mit einer `aliasId` nichts gespeichert wurde: Der Adapter abonnierte den Aliasnamen anstelle der tatsächlichen Status-ID, sodass keine Statusänderung erfasst wurde.",
        "ru": "Исправлена ошибка, из-за которой для точек данных с `aliasId` ничего не сохранялось: адаптер подписывался на имя псевдонима вместо реального идентификатора состояния, поэтому изменения состояния никогда не поступали.",
        "pt": "Corrigido o problema em que nada era armazenado para pontos de dados com um `aliasId`: o adaptador se inscrevia no nome do alias em vez do ID de estado real, portanto, nenhuma alteração de estado era registrada.",
        "nl": "Er is een probleem opgelost waarbij er niets werd opgeslagen voor datapunten met een `aliasId`: de adapter abonneerde zich op de aliasnaam in plaats van de echte status-ID, waardoor er nooit een statuswijziging werd geregistreerd.",
        "fr": "Correction d'un problème où aucune donnée n'était enregistrée pour les points de données avec un `aliasId` : l'adaptateur s'abonnait au nom de l'alias au lieu de l'identifiant d'état réel, ce qui empêchait la réception des changements d'état.",
        "it": "Risolto il problema per cui non veniva memorizzato nulla per i punti dati con un `aliasId`: l'adattatore si iscriveva al nome alias invece che all'ID di stato reale, quindi nessuna modifica di stato veniva mai ricevuta",
        "es": "Se solucionó el problema de que no se almacenaba nada para los puntos de datos con un `aliasId`: el adaptador se suscribía al nombre del alias en lugar del ID de estado real, por lo que nunca llegaba ningún cambio de estado.",
        "pl": "Naprawiono błąd powodujący, że nic nie było przechowywane dla punktów danych z `aliasId`: adapter subskrybował nazwę aliasu zamiast rzeczywistego identyfikatora stanu, więc żadna zmiana stanu nigdy nie nadeszła",
        "uk": "Виправлено помилку, через яку нічого не зберігалося для точок даних з `aliasId`: адаптер підписувався на псевдонім замість ідентифікатора реального стану, тому жодної зміни стану ніколи не надходило.",
        "zh-cn": "修复了对于带有 `aliasId` 的数据点，未存储任何数据的问题：适配器订阅的是别名而不是实际的状态 ID，因此从未收到状态更改通知。"
      },
      "4.0.3": {
        "en": "Corrected small configuration error",
        "de": "Kleiner Konfigurationsfehler behoben",
        "ru": "Исправлена небольшая ошибка конфигурации.",
        "pt": "Pequeno erro de configuração corrigido",
        "nl": "Een kleine configuratiefout is gecorrigeerd.",
        "fr": "Correction d'une petite erreur de configuration",
        "it": "Corretto un piccolo errore di configurazione.",
        "es": "Se corrigió un pequeño error de configuración.",
        "pl": "Naprawiono niewielki błąd konfiguracji",
        "uk": "Виправлено невелику помилку конфігурації",
        "zh-cn": "修正了一个小的配置错误"
      }
    },
    "mode": "daemon",
    "platform": "Javascript/Node.js",
    "loglevel": "info",
    "messagebox": true,
    "keywords": [
      "charts",
      "sql",
      "logging",
      "graphs",
      "archive"
    ],
    "preserveSettings": "custom",
    "supportCustoms": true,
    "getHistory": true,
    "enabled": true,
    "stopBeforeUpdate": true,
    "compact": true,
    "authors": [
      "bluefox <dogafox@gmail.com>",
      "Apollon77 <ingo@fischer-ka.de>"
    ],
    "licenseInformation": {
      "type": "free",
      "license": "MIT"
    },
    "readme": "https://github.com/ioBroker/ioBroker.sql/blob/master/README.md",
    "icon": "sql.png",
    "extIcon": "https://raw.githubusercontent.com/ioBroker/ioBroker.sql/master/admin/sql.png",
    "type": "storage",
    "dependencies": [
      {
        "js-controller": ">=6.0.11"
      }
    ],
    "globalDependencies": [
      {
        "admin": ">=7.0.0"
      }
    ],
    "supportStopInstance": 10000,
    "stopTimeout": 10000,
    "plugins": {
      "sentry": {
        "dsn": "https://c30462d3e0834993b0aa29824346701e@sentry.iobroker.net/45"
      },
      "docker": {
        "iobDockerComposeFiles": [
          "docker-compose.yaml"
        ]
      }
    },
    "adminUI": {
      "config": "json",
      "custom": "json"
    },
    "tier": 1,
    "eraseOnUpload": true,
    "connectionType": "none",
    "dataSource": "push",
    "messages": [
      {
        "condition": {
          "operand": "and",
          "rules": [
            "oldVersion<2.0.0",
            "newVersion>=2.0.0"
          ]
        },
        "title": {
          "en": "Important notice!",
          "de": "Wichtiger Hinweis!",
          "ru": "Важное замечание!",
          "pt": "Notícia importante!",
          "nl": "Belangrijke mededeling!",
          "fr": "Avis important!",
          "it": "Avviso IMPORTANTE!",
          "es": "Noticia importante!",
          "pl": "Ważna uwaga!",
          "zh-cn": "重要通知!"
        },
        "text": {
          "en": "This new version introduces several changes how values are logged because we fixed several issues and added new features. Please especially check the defined \"debounce\" and \"block time\" settings in your datapoints if values are not logged as expected and make sure the settings make sense. For more details please refer to the changelog and Readme.",
          "de": "Diese neue Version führt mehrere Änderungen ein, wie Werte protokolliert werden, da wir mehrere Probleme behoben und neue Funktionen hinzugefügt haben. Bitte überprüfen Sie insbesondere die definierten „Entprellen“- und „Sperrzeit“-Einstellungen in Ihren Datenpunkten, wenn Werte nicht wie erwartet protokolliert werden, und stellen Sie sicher, dass die Einstellungen sinnvoll sind. Weitere Details finden Sie im Changelog und in der Readme.",
          "ru": "В этой новой версии внесено несколько изменений в регистрацию значений, поскольку мы исправили несколько проблем и добавили новые функции. Пожалуйста, особенно проверьте определенные настройки «debounce» и «block time» в ваших точках данных, если значения не регистрируются должным образом, и убедитесь, что настройки имеют смысл. Для получения более подробной информации, пожалуйста, обратитесь к журналу изменений и Readme.",
          "pt": "Esta nova versão apresenta várias alterações na forma como os valores são registrados, pois corrigimos vários problemas e adicionamos novos recursos. Verifique especialmente as configurações definidas de \"debounce\" e \"block time\" em seus pontos de dados se os valores não forem registrados conforme o esperado e verifique se as configurações fazem sentido. Para obter mais detalhes, consulte o log de alterações e o Leiame.",
          "nl": "Deze nieuwe versie introduceert verschillende wijzigingen in de manier waarop waarden worden geregistreerd, omdat we verschillende problemen hebben opgelost en nieuwe functies hebben toegevoegd. Controleer vooral de gedefinieerde \"debounce\" en \"block time\" instellingen in uw datapunten als de waarden niet zijn vastgelegd zoals verwacht en zorg ervoor dat de instellingen kloppen. Raadpleeg de changelog en Readme voor meer informatie.",
          "fr": "Cette nouvelle version introduit plusieurs changements dans la journalisation des valeurs car nous avons corrigé plusieurs problèmes et ajouté de nouvelles fonctionnalités. Veuillez vérifier en particulier les paramètres \"anti-rebond\" et \"temps de blocage\" définis dans vos points de données si les valeurs ne sont pas enregistrées comme prévu et assurez-vous que les paramètres ont un sens. Pour plus de détails, veuillez consulter le journal des modifications et le fichier Lisez-moi.",
          "it": "Questa nuova versione introduce diverse modifiche al modo in cui i valori vengono registrati perché abbiamo risolto diversi problemi e aggiunto nuove funzionalità. Controllare in particolare le impostazioni definite \"debounce\" e \"block time\" nei propri datapoint se i valori non sono registrati come previsto e assicurarsi che le impostazioni abbiano un senso. Per maggiori dettagli, fare riferimento al log delle modifiche e al Leggimi.",
          "es": "Esta nueva versión introduce varios cambios en la forma en que se registran los valores porque solucionamos varios problemas y agregamos nuevas funciones. Verifique especialmente la configuración definida de \"antirrebote\" y \"tiempo de bloqueo\" en sus puntos de datos si los valores no se registran como se esperaba y asegúrese de que la configuración tenga sentido. Para obtener más detalles, consulte el registro de cambios y el archivo Léame.",
          "pl": "Ta nowa wersja wprowadza kilka zmian w sposobie rejestrowania wartości, ponieważ naprawiliśmy kilka problemów i dodaliśmy nowe funkcje. W szczególności sprawdź zdefiniowane ustawienia „odbicia” i „czasu blokowania” w punktach danych, jeśli wartości nie są rejestrowane zgodnie z oczekiwaniami i upewnij się, że ustawienia mają sens. Aby uzyskać więcej informacji, zapoznaj się z dziennikiem zmian i Readme.",
          "zh-cn": "这个新版本引入了一些更改值的记录方式，因为我们修复了几个问题并添加了新功能。如果未按预期记录值，请特别检查数据点中定义的“去抖动”和“阻塞时间”设置，并确保设置有意义。有关更多详细信息，请参阅更改日志和自述文件。"
        },
        "link": "https://github.com/ioBroker/ioBroker.sql/blob/master/README.md#settings",
        "level": "warn",
        "linkText": {
          "en": "Readme",
          "de": "Liesmich",
          "ru": "Прочти меня",
          "pt": "Leia-me",
          "nl": "Leesmij",
          "fr": "Lisez-moi",
          "it": "Leggimi",
          "es": "Léame",
          "pl": "Readme",
          "zh-cn": "自述文件"
        },
        "buttons": [
          "agree",
          "cancel"
        ]
      }
    ]
  },
  "native": {
    "connLink": "",
    "debounce": 1000,
    "retention": 31536000,
    "host": "localhost",
    "port": 0,
    "user": "",
    "password": "",
    "dbtype": "sqlite",
    "fileName": "sqlite.db",
    "requestInterval": 0,
    "encrypt": false,
    "round": 4,
    "dbname": "iobroker",
    "multiRequests": true,
    "maxConnections": 100,
    "changesRelogInterval": 0,
    "changesMinDelta": 0,
    "writeNulls": true,
    "doNotCreateDatabase": false,
    "maxLength": 0,
    "blockTime": 0,
    "debounceTime": 0,
    "disableSkippedValueLogging": false,
    "enableLogging": false,
    "rejectUnauthorized": false,
    "customRetentionDuration": 365,
    "dockerMysql": {
      "enabled": false,
      "bind": "127.0.0.1",
      "stopIfInstanceStopped": true,
      "port": "3306",
      "autoImageUpdate": true,
      "rootPassword": "root_iobroker"
    },
    "dockerPhpMyAdmin": {
      "enabled": false,
      "bind": "0.0.0.0",
      "stopIfInstanceStopped": true,
      "port": "8080",
      "autoImageUpdate": true
    }
  },
  "instanceObjects": [
    {
      "_id": "info",
      "type": "channel",
      "common": {
        "name": "Information"
      },
      "native": {}
    },
    {
      "_id": "info.connection",
      "type": "state",
      "common": {
        "role": "indicator.connected",
        "name": "If connected to DB",
        "type": "boolean",
        "read": true,
        "write": false,
        "def": false
      },
      "native": {}
    }
  ],
  "objects": []
}
