iobroker.time-tracker 0.3.1 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -353,6 +353,14 @@ local SQLite file, access is role-based, and every correction is written to an a
353
353
 
354
354
  ### **WORK IN PROGRESS**
355
355
 
356
+ ### 0.3.2 (2026-09-22)
357
+
358
+ - (Alex) fix: the automation rules are a **list** now — one row per rule with its caption, kind, time, target and
359
+ weekdays, plus the buttons for *active*, *edit* and *delete* on the right. The form only opens in a dialog, for a
360
+ new or an edited rule, so the list stays readable. The save button of the card says “**Regeln speichern**” (it
361
+ carried the caption of the break rules before). New texts in all 11 languages, and an end-to-end test keeps both
362
+ findings
363
+
356
364
  ### 0.3.1 (2026-09-22)
357
365
 
358
366
  - (Alex) fix: the presence board shows the **real running** time of the day now. Two things kept it frozen:
@@ -388,13 +396,6 @@ local SQLite file, access is role-based, and every correction is written to an a
388
396
  up in `events.*` (`lastType`, `lastUser`, `lastDirection`, `lastSource`) and reaches the web app live. The punch was
389
397
  stored in the database but never sent to the event bus, so the event states kept the previous punch
390
398
 
391
- ### 0.2.5 (2026-09-21)
392
-
393
- - (Alex) docs: the installation chapter leads with the normal way now — install the npm package (`iobroker install
394
- iobroker.time-tracker` or the admin’s “Install from custom URL”), which creates the instance `time-tracker.0`
395
- automatically. Building from a checkout is only the developer path, and the chapter explains why a Git install
396
- reports `cannot find start file!` (`build/` and `www/` are not part of the repository)
397
-
398
399
  Older entries are kept in [`CHANGELOG_OLD.md`](CHANGELOG_OLD.md).
399
400
 
400
401
  ## Provenance
package/io-package.json CHANGED
@@ -1,9 +1,22 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "time-tracker",
4
- "version": "0.3.1",
4
+ "version": "0.3.2",
5
5
  "nogit": true,
6
6
  "news": {
7
+ "0.3.2": {
8
+ "en": "fix: the automation rules are a compact list now - one row per rule with its caption, kind, time, target and weekdays, plus the buttons for active, edit and delete. The form only opens in a dialog, and the save button of the card says “Save rules” (it carried the caption of the break rules before)",
9
+ "de": "fix: die Regeln (Automatik) sind jetzt eine kompakte Liste - eine Zeile je Regel mit Bezeichnung, Art, Uhrzeit, Mitarbeiter und Wochentagen sowie den Knöpfen für Aktiv, Bearbeiten und Löschen. Das Formular öffnet sich nur noch in einem Dialog, und der Speichern-Knopf der Karte heißt „Regeln speichern“ (vorher trug er die Beschriftung der Pausenstaffel)",
10
+ "ru": "исправление: правила автоматики теперь компактный список — по одной строке на правило с названием, видом, временем, сотрудником и днями недели, плюс кнопки «активно», «изменить» и «удалить». Форма открывается только в диалоге, а кнопка сохранения карточки называется «Сохранить правила» (раньше на ней была подпись из правил перерывов)",
11
+ "pt": "correção: as regras de automação são agora uma lista compacta - uma linha por regra com designação, tipo, hora, funcionário e dias da semana, mais os botões de ativo, editar e eliminar. O formulário só abre num diálogo, e o botão de guardar do cartão diz «Guardar regras» (antes tinha a designação das regras de pausa)",
12
+ "nl": "fix: de automatiseringsregels zijn nu een compacte lijst - één regel per rij met naam, soort, tijd, medewerker en weekdagen, plus de knoppen voor actief, bewerken en verwijderen. Het formulier opent alleen in een dialoog, en de opslaanknop van de kaart heet “Regels opslaan” (daarvoor stond er het opschrift van de pauzeregels)",
13
+ "fr": "correctif : les règles d'automatisation forment désormais une liste compacte - une ligne par règle avec libellé, type, heure, employé et jours de la semaine, plus les boutons actif, modifier et supprimer. Le formulaire ne s'ouvre que dans une boîte de dialogue, et le bouton d'enregistrement de la carte s'appelle « Enregistrer les règles » (il portait auparavant le libellé des règles de pause)",
14
+ "it": "correzione: le regole di automazione sono ora un elenco compatto - una riga per regola con etichetta, tipo, ora, dipendente e giorni della settimana, più i pulsanti attivo, modifica ed elimina. Il modulo si apre solo in una finestra di dialogo e il pulsante di salvataggio della scheda dice «Salva regole» (prima portava la dicitura delle regole di pausa)",
15
+ "es": "corrección: las reglas de automatización son ahora una lista compacta - una fila por regla con denominación, tipo, hora, empleado y días de la semana, más los botones de activo, editar y eliminar. El formulario solo se abre en un diálogo, y el botón de guardar de la tarjeta dice «Guardar reglas» (antes llevaba la etiqueta de las reglas de pausa)",
16
+ "pl": "poprawka: reguły automatyki są teraz kompaktową listą - jeden wiersz na regułę z nazwą, rodzajem, godziną, pracownikiem i dniami tygodnia oraz przyciskami aktywna, edytuj i usuń. Formularz otwiera się tylko w oknie dialogowym, a przycisk zapisu na karcie nazywa się „Zapisz reguły” (wcześniej miał opis reguł przerw)",
17
+ "uk": "виправлення: правила автоматики тепер компактний список — по одному рядку на правило з назвою, видом, часом, працівником і днями тижня, а також кнопки «активно», «змінити» та «видалити». Форма відкривається лише в діалозі, а кнопка збереження на картці називається «Зберегти правила» (раніше на ній був підпис правил перерв)",
18
+ "zh-cn": "修复:自动化规则现在是紧凑列表 —— 每条规则一行,包含名称、类型、时间、员工和星期,以及「启用」「编辑」「删除」按钮。表单只在对话框中打开,卡片上的保存按钮现在显示「保存规则」(此前显示的是休息规则的文字)"
19
+ },
7
20
  "0.3.1": {
8
21
  "en": "fix: the presence board shows the running working time of the day now. The API adds the minutes of an open punch to its answer (the stored day aggregate only changes on a punch, so the value stood still), the tile shows that value directly and the board refreshes every 20 seconds instead of 60",
9
22
  "de": "fix: die Anwesenheitskarte zeigt jetzt die wirklich laufende Arbeitszeit des Tages. Die API rechnet die Minuten eines offenen Stempels in ihre Antwort ein (das gespeicherte Tagesaggregat ändert sich nur bei einem Stempel, deshalb stand der Wert still), die Kachel zeigt diesen Wert direkt und die Karte aktualisiert alle 20 Sekunden statt alle 60",
@@ -81,19 +94,6 @@
81
94
  "pl": "`commands.punchUserId` wybiera teraz pracownika, którego dotyczą przyciski rejestracji (wartość `0` oddaje wybór adapterowi), a bieżący wybór jest odzwierciedlany w tym stanie. README i `docs/erste-schritte.md` opisują wszystkie sześć stanów poleceń — z przykładami i dwiema pułapkami: przyciski reagują tylko na `true`, a błędny okres lub nieznany pracownik kończą się ostrzeżeniem w logu",
82
95
  "uk": "`commands.punchUserId` тепер вибирає співробітника, до якого належать кнопки відмітки (значення `0` повертає вибір адаптеру), а поточний вибір відображається в цьому стані. README і `docs/erste-schritte.md` описують усі шість командних станів — з прикладами та двома пастками: кнопки реагують лише на `true`, а хибний період або невідомий співробітник отримують попередження в журналі",
83
96
  "zh-cn": "`commands.punchUserId` 现在用于选择打卡按钮所适用的员工(写入 `0` 则由适配器重新选择),当前选择会回写到该状态。README 与 `docs/erste-schritte.md` 描述了全部六个命令状态 —— 包含示例和两个陷阱:按钮只响应 `true`,错误的期间或未知员工会在日志中以警告回应"
84
- },
85
- "0.2.3": {
86
- "en": "fix: a corrected object definition reaches existing installations now — `ensureObject` merges the fields the adapter owns (`name`, `type`, `role`, `read`, `write`, `unit`) instead of only the name, so `commands.punchUserId` receives the role `level` on the next start (checker `E1011`)",
87
- "de": "fix: eine korrigierte Objektdefinition erreicht jetzt auch bestehende Installationen — `ensureObject` mischt die adapter-eigenen Felder (`name`, `type`, `role`, `read`, `write`, `unit`) statt nur den Namen zusammen, deshalb erhält `commands.punchUserId` beim nächsten Start die Rolle `level` (Checker `E1011`)",
88
- "ru": "исправление: исправленное определение объекта теперь доходит и до существующих установок — `ensureObject` объединяет поля, которыми владеет адаптер (`name`, `type`, `role`, `read`, `write`, `unit`), а не только имя, поэтому `commands.punchUserId` получит роль `level` при следующем запуске (проверка `E1011`)",
89
- "pt": "correção: uma definição de objeto corrigida chega agora também às instalações existentes — `ensureObject` junta os campos do adaptador (`name`, `type`, `role`, `read`, `write`, `unit`) em vez de apenas o nome, por isso `commands.punchUserId` recebe a função `level` no próximo arranque (verificação `E1011`)",
90
- "nl": "fix: een gecorrigeerde objectdefinitie bereikt nu ook bestaande installaties — `ensureObject` voegt de velden van de adapter samen (`name`, `type`, `role`, `read`, `write`, `unit`) in plaats van alleen de naam, daarom krijgt `commands.punchUserId` bij de volgende start de rol `level` (controle `E1011`)",
91
- "fr": "correctif : une définition d'objet corrigée parvient désormais aussi aux installations existantes — `ensureObject` fusionne les champs propres à l'adaptateur (`name`, `type`, `role`, `read`, `write`, `unit`) au lieu du seul nom, `commands.punchUserId` reçoit donc le rôle `level` au prochain démarrage (contrôle `E1011`)",
92
- "it": "correzione: una definizione di oggetto corretta raggiunge ora anche le installazioni esistenti — `ensureObject` unisce i campi dell'adattatore (`name`, `type`, `role`, `read`, `write`, `unit`) invece del solo nome, quindi `commands.punchUserId` riceve il ruolo `level` al prossimo avvio (controllo `E1011`)",
93
- "es": "corrección: una definición de objeto corregida llega ahora también a las instalaciones existentes — `ensureObject` combina los campos propios del adaptador (`name`, `type`, `role`, `read`, `write`, `unit`) en lugar de solo el nombre, por eso `commands.punchUserId` recibe el rol `level` en el próximo arranque (comprobación `E1011`)",
94
- "pl": "poprawka: skorygowana definicja obiektu dociera teraz także do istniejących instalacji — `ensureObject` scala pola należące do adaptera (`name`, `type`, `role`, `read`, `write`, `unit`), a nie tylko nazwę, dlatego `commands.punchUserId` otrzyma rolę `level` przy następnym starcie (kontrola `E1011`)",
95
- "uk": "виправлення: виправлене визначення об'єкта тепер доходить і до наявних установок — `ensureObject` об'єднує поля, якими володіє адаптер (`name`, `type`, `role`, `read`, `write`, `unit`), а не лише назву, тому `commands.punchUserId` отримає роль `level` під час наступного запуску (перевірка `E1011`)",
96
- "zh-cn": "修复:修正后的对象定义现在也会到达已有安装 —— `ensureObject` 合并适配器拥有的字段(`name`、`type`、`role`、`read`、`write`、`unit`),而不仅是名称,因此 `commands.punchUserId` 会在下次启动时获得角色 `level`(检查 `E1011`)"
97
97
  }
98
98
  },
99
99
  "titleLang": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.time-tracker",
3
- "version": "0.3.1",
3
+ "version": "0.3.2",
4
4
  "description": "Time tracking (clock-in/out) for ioBroker with web app, badge terminal and reports",
5
5
  "author": {
6
6
  "name": "Alex",
@@ -358,5 +358,9 @@
358
358
  "admin.settings.setting.report_font_path": "PDF-Schriftdatei",
359
359
  "presence.workedToday": "Heute gearbeitet",
360
360
  "admin.user.workedTime": "Arbeitszeit auf der Anwesenheitskarte",
361
- "admin.user.workedTimeHint": "Zeigt auf der Anwesenheitskarte die heute geleistete Arbeitszeit (z. B. 1:23). Ohne Stempel steht dort 0:00; ohne diese Freigabe bleibt die Karte bei Anwesend/Abwesend und dem Namen."
361
+ "admin.user.workedTimeHint": "Zeigt auf der Anwesenheitskarte die heute geleistete Arbeitszeit (z. B. 1:23). Ohne Stempel steht dort 0:00; ohne diese Freigabe bleibt die Karte bei Anwesend/Abwesend und dem Namen.",
362
+ "admin.automation.save": "Regeln speichern",
363
+ "admin.automation.edit": "Bearbeiten",
364
+ "admin.automation.editTitle": "Regel bearbeiten",
365
+ "admin.automation.newTitle": "Neue Regel"
362
366
  }
@@ -358,5 +358,9 @@
358
358
  "admin.settings.setting.report_font_path": "PDF font file",
359
359
  "presence.workedToday": "Worked today",
360
360
  "admin.user.workedTime": "Working time on the presence card",
361
- "admin.user.workedTimeHint": "Shows the time worked today on the presence card (for example 1:23). Without a punch it reads 0:00; without this permission the card keeps present/absent and the name only."
361
+ "admin.user.workedTimeHint": "Shows the time worked today on the presence card (for example 1:23). Without a punch it reads 0:00; without this permission the card keeps present/absent and the name only.",
362
+ "admin.automation.save": "Save rules",
363
+ "admin.automation.edit": "Edit",
364
+ "admin.automation.editTitle": "Edit rule",
365
+ "admin.automation.newTitle": "New rule"
362
366
  }
@@ -358,5 +358,9 @@
358
358
  "admin.settings.setting.report_font_path": "Fuente para PDF",
359
359
  "presence.workedToday": "Trabajado hoy",
360
360
  "admin.user.workedTime": "Tiempo de trabajo en la tarjeta de presencia",
361
- "admin.user.workedTimeHint": "Muestra en la tarjeta de presencia el tiempo trabajado hoy (por ejemplo, 1:23). Sin fichaje pone 0:00; sin esta autorización la tarjeta se queda en presente/ausente y el nombre."
361
+ "admin.user.workedTimeHint": "Muestra en la tarjeta de presencia el tiempo trabajado hoy (por ejemplo, 1:23). Sin fichaje pone 0:00; sin esta autorización la tarjeta se queda en presente/ausente y el nombre.",
362
+ "admin.automation.save": "Guardar reglas",
363
+ "admin.automation.edit": "Editar",
364
+ "admin.automation.editTitle": "Editar regla",
365
+ "admin.automation.newTitle": "Nueva regla"
362
366
  }
@@ -358,5 +358,9 @@
358
358
  "admin.settings.setting.report_font_path": "Police pour PDF",
359
359
  "presence.workedToday": "Travaillé aujourd'hui",
360
360
  "admin.user.workedTime": "Temps de travail sur la carte de présence",
361
- "admin.user.workedTimeHint": "Affiche sur la carte de présence le temps travaillé aujourd'hui (par exemple 1:23). Sans pointage, il y a 0:00 ; sans cette autorisation, la carte reste sur présent/absent et le nom."
361
+ "admin.user.workedTimeHint": "Affiche sur la carte de présence le temps travaillé aujourd'hui (par exemple 1:23). Sans pointage, il y a 0:00 ; sans cette autorisation, la carte reste sur présent/absent et le nom.",
362
+ "admin.automation.save": "Enregistrer les règles",
363
+ "admin.automation.edit": "Modifier",
364
+ "admin.automation.editTitle": "Modifier la règle",
365
+ "admin.automation.newTitle": "Nouvelle règle"
362
366
  }
@@ -358,5 +358,9 @@
358
358
  "admin.settings.setting.report_font_path": "Carattere per PDF",
359
359
  "presence.workedToday": "Lavorato oggi",
360
360
  "admin.user.workedTime": "Tempo di lavoro sulla scheda di presenza",
361
- "admin.user.workedTimeHint": "Mostra sulla scheda di presenza il tempo lavorato oggi (per esempio 1:23). Senza timbratura c'è 0:00; senza questa autorizzazione la scheda resta con presente/assente e il nome."
361
+ "admin.user.workedTimeHint": "Mostra sulla scheda di presenza il tempo lavorato oggi (per esempio 1:23). Senza timbratura c'è 0:00; senza questa autorizzazione la scheda resta con presente/assente e il nome.",
362
+ "admin.automation.save": "Salva regole",
363
+ "admin.automation.edit": "Modifica",
364
+ "admin.automation.editTitle": "Modifica regola",
365
+ "admin.automation.newTitle": "Nuova regola"
362
366
  }
@@ -358,5 +358,9 @@
358
358
  "admin.settings.setting.report_font_path": "Lettertype voor PDF",
359
359
  "presence.workedToday": "Vandaag gewerkt",
360
360
  "admin.user.workedTime": "Werktijd op de aanwezigheidskaart",
361
- "admin.user.workedTimeHint": "Toont op de aanwezigheidskaart de vandaag gewerkte tijd (bijvoorbeeld 1:23). Zonder stempeling staat er 0:00; zonder deze vrijgave blijft de kaart bij aanwezig/afwezig en de naam."
361
+ "admin.user.workedTimeHint": "Toont op de aanwezigheidskaart de vandaag gewerkte tijd (bijvoorbeeld 1:23). Zonder stempeling staat er 0:00; zonder deze vrijgave blijft de kaart bij aanwezig/afwezig en de naam.",
362
+ "admin.automation.save": "Regels opslaan",
363
+ "admin.automation.edit": "Bewerken",
364
+ "admin.automation.editTitle": "Regel bewerken",
365
+ "admin.automation.newTitle": "Nieuwe regel"
362
366
  }
@@ -358,5 +358,9 @@
358
358
  "admin.settings.setting.report_font_path": "Czcionka do PDF",
359
359
  "presence.workedToday": "Przepracowane dzisiaj",
360
360
  "admin.user.workedTime": "Czas pracy na karcie obecności",
361
- "admin.user.workedTimeHint": "Pokazuje na karcie obecności czas przepracowany dzisiaj (np. 1:23). Bez rejestracji jest tam 0:00; bez tej zgody karta pozostaje przy obecny/nieobecny i nazwisku."
361
+ "admin.user.workedTimeHint": "Pokazuje na karcie obecności czas przepracowany dzisiaj (np. 1:23). Bez rejestracji jest tam 0:00; bez tej zgody karta pozostaje przy obecny/nieobecny i nazwisku.",
362
+ "admin.automation.save": "Zapisz reguły",
363
+ "admin.automation.edit": "Edytuj",
364
+ "admin.automation.editTitle": "Edytuj regułę",
365
+ "admin.automation.newTitle": "Nowa reguła"
362
366
  }
@@ -358,5 +358,9 @@
358
358
  "admin.settings.setting.report_font_path": "Fonte para PDF",
359
359
  "presence.workedToday": "Trabalhado hoje",
360
360
  "admin.user.workedTime": "Tempo de trabalho no cartão de presença",
361
- "admin.user.workedTimeHint": "Mostra no cartão de presença o tempo trabalhado hoje (por exemplo, 1:23). Sem marcação lê-se 0:00; sem esta permissão o cartão mantém presente/ausente e o nome."
361
+ "admin.user.workedTimeHint": "Mostra no cartão de presença o tempo trabalhado hoje (por exemplo, 1:23). Sem marcação lê-se 0:00; sem esta permissão o cartão mantém presente/ausente e o nome.",
362
+ "admin.automation.save": "Guardar regras",
363
+ "admin.automation.edit": "Editar",
364
+ "admin.automation.editTitle": "Editar regra",
365
+ "admin.automation.newTitle": "Nova regra"
362
366
  }
@@ -358,5 +358,9 @@
358
358
  "admin.settings.setting.report_font_path": "Шрифт для PDF",
359
359
  "presence.workedToday": "Отработано сегодня",
360
360
  "admin.user.workedTime": "Рабочее время на карточке присутствия",
361
- "admin.user.workedTimeHint": "Показывает на карточке присутствия отработанное сегодня время (например, 1:23). Без отметки там 0:00; без разрешения карточка остаётся с присутствует/отсутствует и именем."
361
+ "admin.user.workedTimeHint": "Показывает на карточке присутствия отработанное сегодня время (например, 1:23). Без отметки там 0:00; без разрешения карточка остаётся с присутствует/отсутствует и именем.",
362
+ "admin.automation.save": "Сохранить правила",
363
+ "admin.automation.edit": "Изменить",
364
+ "admin.automation.editTitle": "Изменить правило",
365
+ "admin.automation.newTitle": "Новое правило"
362
366
  }
@@ -358,5 +358,9 @@
358
358
  "admin.settings.setting.report_font_path": "Шрифт для PDF",
359
359
  "presence.workedToday": "Відпрацьовано сьогодні",
360
360
  "admin.user.workedTime": "Робочий час на картці присутності",
361
- "admin.user.workedTimeHint": "Показує на картці присутності відпрацьований сьогодні час (наприклад, 1:23). Без відмітки там 0:00; без цього дозволу картка залишається з присутній/відсутній і іменем."
361
+ "admin.user.workedTimeHint": "Показує на картці присутності відпрацьований сьогодні час (наприклад, 1:23). Без відмітки там 0:00; без цього дозволу картка залишається з присутній/відсутній і іменем.",
362
+ "admin.automation.save": "Зберегти правила",
363
+ "admin.automation.edit": "Змінити",
364
+ "admin.automation.editTitle": "Змінити правило",
365
+ "admin.automation.newTitle": "Нове правило"
362
366
  }
@@ -358,5 +358,9 @@
358
358
  "admin.settings.setting.report_font_path": "PDF 字体",
359
359
  "presence.workedToday": "今日已工作",
360
360
  "admin.user.workedTime": "在岗卡片上的工作时间",
361
- "admin.user.workedTimeHint": "在在岗卡片上显示今天的工作时间(例如 1:23)。未打卡时显示 0:00;未授权时卡片只显示在岗/缺勤和姓名。"
361
+ "admin.user.workedTimeHint": "在在岗卡片上显示今天的工作时间(例如 1:23)。未打卡时显示 0:00;未授权时卡片只显示在岗/缺勤和姓名。",
362
+ "admin.automation.save": "保存规则",
363
+ "admin.automation.edit": "编辑",
364
+ "admin.automation.editTitle": "编辑规则",
365
+ "admin.automation.newTitle": "新规则"
362
366
  }