[Beta] [Modul] ToDo-Liste

Hallo Zusammen,

heute möchte ich euch zu einem Betatest meines ToDo-Listen Moduls einladen.

Das Modul stellt je Instanz eine ToDo-Liste bereit inkl. Kachel für die Kachel-Visualisierung.
Je Task können folgende Sachen konfiguriert werden:

  • Titel
  • Infotext
  • Priorität (niedrig, normal, hoch)
  • Fälligkeit mit Datum und Uhrzeit
  • Benachrichtigung mit einstellbarer Vorlaufzeit
  • Anzahl (z.B. für eine Einkaufsliste)

Installation:
Im Modul Store exakt nach ToDo-Liste suchen.

Wie immer gilt: Nutzung auf eigenen Gefahr. Die Ki hat hier fleißig mitgeholfen beim Coden. Es wurde nicht jedes Zeichen fünf mal umgedreht und auf Richtigkeit geprüft.

Erstellen, Löschen, Bearbeiten von Tasks sind über das Frontend und Backend möglich.

Nachfolgend einige Beispielscripte zum bearbeiten, erstellt, löschen von Tasks:

Einen Task auslesen:

<?php

$instanceID = 13393; // ID deiner ToDoList-Instanz

$taskId     = 15;     // ID des gewünschten Tasks

$items = json_decode(TDL_Export($instanceID), true);
if (!is_array($items)) {
echo "Export lieferte kein gültiges JSON\n";
return;
}


$task = null;
foreach ($items as $it) {
if ((int)($it['id'] ?? 0) === $taskId) {
$task = $it;
break;
    }
}


if ($task === null) {
echo "Task mit ID {$taskId} nicht gefunden\n";
return;
}



$id       = (int)($task['id'] ?? 0);
$done     = !empty($task['done']);
$title    = (string)($task['title'] ?? '');
$info     = (string)($task['info'] ?? '');
$due      = (int)($task['due'] ?? 0);
$priority = (string)($task['priority'] ?? 'normal');
$qty      = (int)($task['quantity'] ?? 0);

echo "Task gefunden:\n";
echo "ID: {$id}\n";
echo "Status: " . ($done ? "erledigt" : "offen") . "\n";
echo "Titel: {$title}\n";
echo "Info: {$info}\n";
echo "Anzahl: {$qty}\n";
echo "Priorität: {$priority}\n";
echo "Fällig: " . ($due > 0 ? date('d.m.Y H:i:s', $due) : '-') . "\n";

echo "\nRAW TASK:\n";
print_r($task);

Task als erledigt markieren:

<?php
$instanceID = 13393; // ID deiner ToDoList-Instanz
$taskId     = 13;     // ID des Tasks
IPS_RequestAction($instanceID, 'ToggleDone', json_encode([
    'id'   => $taskId,
    'done' => false
]));

Task erstellen:

<?php

$instanceID = 13393; // ID deiner ToDoList-Instanz im Objektbaum

$payload = [
    'title'    => 'Milch kaufen',
    'info'     => '2% Fett, wenn möglich',
    'due'      => strtotime('today 18:00'), // Unix-Timestamp oder 0 für "keine Fälligkeit"
    'priority' => 'normal',                 // 'low' | 'normal' | 'high'
    'quantity' => 3                         // 0 oder >0
];

IPS_RequestAction($instanceID, 'AddItem', json_encode($payload));

Task löschen:

<?php
$instanceID = 13393; // ID deiner ToDoList-Instanz
$taskId     = 12;     // ID des Tasks, den du löschen willst
IPS_RequestAction($instanceID, 'DeleteItem', json_encode([
    'id' => $taskId
]));

Task updaten:

<?php

$instanceID = 13393; // ID deiner ToDoList-Instanz
$taskId     = 13;     // ID des Tasks

$payload = [
    'id'       => $taskId,
    'title'    => 'Milch kaufen (Bio)',
    'info'     => 'Bitte laktosefrei, WICHTIG!!!',
    'due'      => strtotime('tomorrow 12:00'), // Unix-Timestamp, oder 0
    'priority' => 'high',                      // 'low' | 'normal' | 'high'
    'quantity' => 2
];

IPS_RequestAction($instanceID, 'UpdateItem', json_encode($payload));

Alle Tasks auslesen:

<?php

$instanceID = 13393; // ID deiner ToDoList-Instanz

$json = TDL_Export($instanceID);
$items = json_decode($json, true);

if (!is_array($items)) {
    echo "Export lieferte kein gültiges JSON!\n";
    echo "RAW:\n" . $json . "\n";
    return;
}

echo "Gefundene Tasks: " . count($items) . "\n\n";

// Ausgabe als Liste (gut lesbar)
foreach ($items as $it) {
    $id       = (int)($it['id'] ?? 0);
    $done     = !empty($it['done']);
    $title    = (string)($it['title'] ?? '');
    $info     = (string)($it['info'] ?? '');
    $due      = (int)($it['due'] ?? 0);
    $priority = (string)($it['priority'] ?? 'normal');
    $qty      = (int)($it['quantity'] ?? 0);

    echo "ID: {$id}\n";
    echo "Status: " . ($done ? "erledigt" : "offen") . "\n";
    echo "Titel: {$title}\n";
    echo "Info: {$info}\n";
    echo "Anzahl: {$qty}\n";
    echo "Priorität: {$priority}\n";
    echo "Fällig: " . ($due > 0 ? date('d.m.Y H:i:s', $due) : '-') . "\n";
    echo "-----------------------------\n";
}

// Optional: komplette Datenstruktur dumpen
echo "\nRAW ARRAY:\n";
print_r($items);

Wie immer ist Feedback gerne gesehen. Viel Spaß beim testen.

Viele Grüße

Stephan

6 „Gefällt mir“

Wow, schönes Design - gefällt!!!

Habe mir gestern auch mal claude.ai angeschaut und gleich auf anhieb eine NodeJS APP geschrieben die mir bestimmte Flugdaten via Mqtt nach Symcon ballert. Ich war beeindruckt wie fehlerfrei das ablief. Gleich die erste Version war lauffähig. Hat dann noch etwas gedauert bis alles perfekt war, aber was ich da in 2h geschaft habe … hätte ich wahrlich nicht mit reinem googln hinbekommen!

Jetzt noch das Gegenstück als Modul bauen lassen - bin gespannt :smiley:

Sorry - für Offtopic!

Coole Sache!

1 „Gefällt mir“

Danke, maximale Begeisterung. alle meine Versuche mit ical und Tasks waren eher mittelmäßig bis nicht erfolgreich.

Erste Erkenntnis, so kann es niemand in IPSview nutzen :sleepy_face: , dafür müsste die Kachel/HTML irgendwo erreichbar sein. Ich versuche es mal mit der Kachel-Visu, vielleicht kann ich die direkt einbinden.

Erstes Problem, ich kann keinen Task in der Kachel anlegen, sollte es einen Speichern-Button geben?

Firefox

Im Chrome etwas mehr, aber scheinbar auch nicht vollständig

Ok, Error 40, mein Problem der “Nicht-Nutzung” der Kachel-Visu :smiley: .

Runter scrollen? :wink:

Viele Grüße

Stephan

Das geht im Firefox und Chrome nicht innerhalb der Kachel und wenn ich sie über die Pfeile vergößere, sind nur noch die Anzahlen da

Schau ich mir an. Dann musst du vorerst die Kachel größer machen.

Das in der maximierten Kachel nur die Zahlen stehen ist normal, da werden systembedingt nur die Variablen angezeigt die unterhalb der Instanz sind.

1 „Gefällt mir“

Danke!

Ich hätte da einige Ideen, da mir weiterhin ein sinnvoll nutzbarer “Wartungskalender” fehlt, also regelmäßige Tätigkeiten, z.B. am Haus oder im Garten, auch mit z.B. 1. Samstag im Monat.

Aber auch “normales” Task-Tracking ist schon eine große Hilfe. Das habe ich bisher in meiner OwnCloud und extra Task-App, damit halt nicht “ordentlich” im Symcon.

1 „Gefällt mir“

Hallo Stephan,
ein tolles Modul, insbesondere die Kachel!
Zwei Dinge sind mir aufgefallen:

  1. Es fehlt noch eine scroll-Funktion (ist ja schon bekannt)
  2. eine Änderung Sortierfolge geht bei Neuaufruf der Seite wieder verloren.

Grüße, Peter

Hallo zusammen,

mit dem neusten Update ist ein Scrollen in den Dialogfenstern möglich und die Sortierung bleibt auch nach einem Reload des Frontend erhalten.

Viele Grüße

Stephan

1 „Gefällt mir“

Hallo Stephan,
danke fürs Ändern.
Leider funktioniert das bei mir nicht.
Damit ich nichts falsch verstanden habe hier meine Erwartungen:

  1. Scrollen, der ToDo-Eintäge in der Kachel, wenn Kachel zu klein ist.
  2. Sortierung der Einträge (bei mir Fälligkeit, aufsteigend.

Nach Wechsel und zurückwechsel der Visu-Seite wieder Sortierung nach Datum

Grüße, Peter

Funktioniert bei mir auch beides nicht in Firefox und Chrome. In IPSview kann ich die Sortierung nicht mal auswählen, da geht das DropDown nicht auf.

Korrektur: Man muss in den Bereich der Taskliste klicken, dann kann man mit Cursor oder Rollrad scrollen. Das funktioniert aber nur im Chrome und natürlich nur, wenn überhaupt mindestens ein Taks sichtbar ist. Im Firefox geht es mit Rollrad.

Nachtrag!

Scrollen funktioniert doch!
Es gibt keinen Scrollbalken, aber wenn mann den Curser in das Feld der ToDo’s hält , kann man scrollen

Peter

PS. sehe gerade hat @ralf auch schon festgestellt

Mit dem neuesten Update gibt es folgende Neuerungen:

Wiederkehrende Tasks

  • Du kannst auf Basis des gewählten Fälligkeitsdatums eine Wiederholung einstellen, 1, 2 oder 3 Wochen, monatlich, quartalsweise oder jährlich.

  • Du kannst eine Vorlaufzeit festlegen. Nach erreichen dieser Vorlaufzeit wird ein erledigter Task mit Wiederholung automatisch wieder als nicht erledigt markiert. So erscheint der Task rechtzeitig vor dem nächsten Termin wieder in der Liste.

Das lässt sich aktuell nur eingeschränkt testen. Die Zeit wird es zeigen. :wink:

Scrollbars

  • Wenn der Platz nicht reicht, wird automatisch eine Scrollbar eingeblendet.

Viele Grüße

Stephan

2 „Gefällt mir“

Hallo Stephan,
das ging ja wieder schnell!
Sortierung bleibt jetzt erhalten
Scrollbars sind da und funktionieren
Wiederkehrende Tasks: habe ich noch nicht so richtig verstanden (teste noch)
Wiederholungen täglich und alle 4 Wochen (monatlich ist vorhanden) würden mir fehlen

Grüße, Peter

Hi,
wenn ich es richtig verstehe sind die Einstellungen für…

täglich: Wiederholungen = Stündlich und Anzahl = 24
alle 4 Wochen: Wiederholungen = Wöchentlich und Anzahl = 4

Kann aber auch sein das ich es falsche interpretiert habe :innocent:
Wenn es nicht so sein sollte wäre das ein Vorschlag um max. Dynamik für Tasks zu erreichen.

Verstehe gerade die Überlegungen nicht. Du stellt ein Datum und Uhrzeit bei Fälligkeit ein. Z.B. den heuten Tag um 15 Uhr. Wenn du bei Wiederholung Täglich einstellst taucht der Task jeden Tag wieder in der Liste auf wenn du den vorher als erledigt markiert hast. Bei wöchentlich halt nach genau einer Woche … die Einstellung „Task als offen markieren“ legt fest wann ein Task mit konfigurierter Wiederholung wieder als nicht erledigt in der Liste auftaucht. Angenommen Wiederholung ist wöchentlich und du stellt „1 Tag vorher“ ein taucht der Task nach 6 Tagen wieder als nicht erledigt in der Liste auf.

1 „Gefällt mir“

Wenn du bei Wiederholung Täglich einstellst

Täglich fehlt in der Auswahl.

Was bewirkt dann die Eingabe bei „Anzahl“?

Und wie kann ich einen Task erstellen mit „alle 10 Wochen“?

Viele Grüße

Erstmal vorab: Stephan ist Herr des Verfahrens, deshalb bitte folgendes nicht als Kritik ansehen.

Eledigte, wiederholende Einträge sind erstmal als erledigt abgelegt. Wenn ich erledigt Einträge lösche, muss ich also aufpassen, nicht eine „schlafende Wiederholung“ zu erwischen. Was passiert, wenn ich in den Instanzeinstellung den Haken bei „Erledigte Tasks löschen“ setzte.
Ich würde mir folgendes Vorgehen wünschen:

  1. Wird ein Wiederholungseintrag als erledigt gekennzeichnet, wird sofort ein neuer aktiver Eintrag für den nächsten Termin erzeugt. Beim alten Termin werden die Wiederholungsparameter gelöscht (wg. Möglichkeit des Zurücksetzens des Erledigt-Hakens)
  2. Die Auswahl der Wiederholungsparameter kann man sicherlich unbegrenzt ausweiten. Ich würde mich z.B. an den Möglichkeiten aus Symcon für zyklische Ereignisse orientieren.

Grüße Peter

es gibt ein neues Update:

  • Bei den Wiederholungen gibt es jetzt neu die Option “Individuell” wird dies ausgewählt wird ein Dropdown eingeblendet mit den Optionen Stunden, Tage, Wochen, Monate, Jahre. In einem weiteren Feld kann dann die Anzahl eingegeben werden.
  • Task mit Wiederholung ignorieren die Option “erledigte Task löschen” im Backend.
  • Zeiträume bei Benachrichtigung und “Task als offen markieren” erlauben nur Zeiträume die auch möglich sind. Beispiel: Fälligkeit ist in 1 Stunde, Vorlaufzeit für Benachrichtigung kann nur 0-30 Minuten sein. Alle größeren Werte können nicht ausgewählt werden.
  • “Task als offen markieren” unterstützt jetzt die Option “sofort” Der Task verschwindet dann überhaupt nicht aus der Liste, Die Fälligkeit wird aber auf den nächsten Wiederholungstermin gesetzt. Den Nutzen sehe ich noch nicht :wink:

@yansoph Anzahl hat nichts mit den Wiederholungen zu tun, das war da etwas ungünstig platziert. Anzahl kannst du zb bei einer Einkaufsliste verwenden “Milch, Anzahl 5”

Viele Grüße

Stephan

2 „Gefällt mir“

Das geht absolut in die richtige Richtung :smiley: , noch eine ical Task Anbindung, dann könnte man über OwnCloud oder Ähnliches die Mobiltelefon-Apps nutzen und dein Modul und Symcon :innocent: .

Script-Beispiel: owncloud - die Zentrale für Kalender und Adressbuch

Und wenn du die “Mengen” Offen, Überfällig, heute und die Taskliste noch in entsprechende Variablen schreiben würdest, dann wäre es super auch in IPSview zu nutzen.

1 „Gefällt mir“