Modul: todoist - Task-/Listenverwaltung in FHEM (Bsp. Einkaufsliste) + Frontend

Begonnen von marvin78, 27 Oktober 2017, 16:26:48

Vorheriges Thema - Nächstes Thema

marvin78

Als Alternative zum sicher bald auslaufenden wunderlist Dienst und dem dazugehörigen wunderlist-Modul habe ich mir nach langem Überlegen todoist ausgesucht und ein Modul entwickelt, welches ganz eng am Modul für wunderlist ausgerichtet ist. Wer also das wunderlist-Modul verwendet hat, wird sich schnell zurecht finden. Die Hilfe befindet sich im Modul. Es werden folgende Perl-Module benötigt:

IO::Socket::SSL,JSON, Data::Dumper, Digest::MD5, Date::Parse und Data::UUID

Die Definition erfolgt folgendermaßen:

define <name> todoist <PROJECT-ID>

Die PROJECT-ID könnt ihr ggf. der URL in der todoist Browser-App entnehmen. Angenommen, die URL lautet

Zitathttps://todoist.com/app?lang=de#project%2F123456789

dann entnehmt ihr die Projekt-ID für das todoist DEF: 123456789

Um die API abfragen zu können benötigt ihr einen API-Token oder API Symbol. Das findet ihr in todoist unter "Einstellungen" -> "Integration". Der Token wird FHEM per

set <name> accessToken <API Symbol>

bekannt gemacht und kann auch geändert werden. Der Token wird am für solche Dinge üblichen Ort im FHEM-Verzeichnis abgelegt.

Das Modul wird zusammen mit einem FHEMWEB weblink-Widgets als Frontend geliefert (siehe Anlage).

Der weblink wird dann bspw. so definiert:

define Einkaufsliste weblink htmlCode {todoist_Html("todoist_Einkaufsliste")}

für eine spezielle Liste. Dabei muss todoist_Einkaufsliste durch euer todoist-Device ersetzt werden.

define Einkaufslisten weblink htmlCode {todoist_Html()}

für alle Listen im fhem-System nebeneinander oder

define Einkaufslisten weblink htmlCode {todoist_Html('NAME=Einkauf.*')}

für eine Auswahl an Listen mit devspec Filter.

Feedback ist gerne gesehen, Support zum Modul gibt es hier (nicht in Echtzeit), Support zu todoist oder der API nicht (da gibt es bessere Quellen). Möglicherweise sind noch einige Bugs im System. Bei mir läuft es einige Zeit stabil, ich garantiere jedoch für nichts ;) 


Bei mir kommt das Modul zum Einsatz um unsere Einkaufsliste(n) auch von FHEM aus füllen und abfragen zu können. Es gibt sicher weitere Möglichkeiten. Die Einkaufsliste ist aber natürlich die naheliegende Variante.

Erledigte Aufgaben können nur von Premium-Usern gelesen werden. Für Standard-User gibt die API hier nichts her. Ich habe nicht getestet, was passiert, wenn man kein Premium-User ist. Vermutlich gibt es nur eine Fehlermeldung. Es gibt keine Verprobung auf den Status des Users.

Das Modul wird seit dem 15.01.2019 über FHEM-Update verteilt.


Beispiele:

Setze einen neuen Punkt auf die Einkaufsliste:

set Einkaufsliste addTask 3 Brötchen

Setze einen neuen Punkt auf die Einkaufsliste und setze ein Fälligkeitsdatum:
set Einkaufsliste addTask 3 Brötchen dueDate=2017-01-13
set Einkaufsliste addTask Milch due_date=morgen


Ändere einen Punkt auf der Einkaufsliste (mit todoist-ID):
set Einkaufsliste updateTask ID:12345678 title='5 Brötchen' dueDate='2017-01-12'

Ändere einen Punkt auf der Einkaufsliste (suche Task anhand von Titel):
set Einkaufsliste updateTask TITLE:Brötchen title='5 Brötchen' dueDate='2017-01-12'

Ändere einen Punkt auf der Einkaufsliste (mit FHEM-ID):
set Einkaufsliste updateTask 2 title='5 Brötchen' due_date='2017-01-12'
set Einkaufsliste updateTask 3 title='5 Brötchen' remove=dueDate


Einen schon erledigten Task auf unerledigt setzen (mit todoist-ID):
set Einkaufsliste uncompleteTask ID:12345678

Einen schon erledigten Task auf unerledigt setzen (suche Task anhand von Titel):
set Einkaufsliste uncompleteTask TITLE:Brot

Einen schon erledigten Task auf unerledigt setzen (mit FHEM-ID):
set Einkaufsliste uncompleteTask 5

Hake einen Punkt auf der Einkaufsliste ab (mit todoist-ID):
set Einkaufsliste completeTask ID:12345678

Hake einen Punkt auf der Einkaufsliste ab (suche Task anhand von Titel):
set Einkaufsliste completeTask TITLE:Milch

Hake einen Punkt auf der Einkaufsliste ab (mit FHEM-ID):
set Einkaufsliste completeTask 3

Lösche einen Punkt von der Einkaufsliste (suche Task anhand von Titel):
set Einkaufsliste deleteTask TITLE:Käse

Lösche einen Punkt von der Einkaufsliste (mit todoist-ID):
set Einkaufsliste deleteTask ID:12345678

Lösche einen Punkt von der Einkaufsliste (mit FHEM-ID):
set Einkaufsliste deleteTask 3

Lösche alle Tasks
set Einkaufsliste clearList

fretti

Hallo,

Modul funktioniert auch bei mir, danke dafür.

Ist den auch ein Widget für FTUI geplant, oder wie kann man etwas in der Art wie
https://forum.fhem.de/index.php?topic=76643.0
umsetzen?
promox, debian, rpi, homematic, mqtt, dect, z2m

marvin78

#2
Von mir kommt nur das Modul. Wenn das, was du da zeigst, für wunderlist funktioniert hat, sollte es auch mit todoist funktionieren.

mahowi

Danke fürs Modul. Funktioniert bestens, wie vorher auch schon mit Wunderlist.

Ich habe im "Icons"-Thread mal SVGs mit den Logos von Wunderlist und Todoist hochgeladen.
CUBe (MAX): HT, FK | CUBe (SlowRF): ESA2000WZ
JeeLink: LaCrosse | nanoCUL433: Smartwares SHS-51001-EU, EM1000GZ
ZME_UZB1: GreenWave PowerNode, Popp Thermostat | SIGNALDuino: HE877, X10 MS14A, Revolt NC-5462,  IT Steckdosen + PIR
tado° | Milight | HUE, Lightify | SmarterCoffee

marvin78

Danke dafür.


Bezüglich TUI Oberfläche: Die Intention für das Modul ist NICHT die Oberfläche der entsprechenden Apps oder Webanwendungen zu ersetzen (wie auch schon beim wunderlist-Modul) sondern die, Automationen mit FHEM möglich zu machen (bei uns ist das das Ansagen der Liste und die Aufnahme von Tasks per Sprache). Wenn sich natürlich jemand berufen fühlt, dazu eine Oberfläche zu bauen, sehr gerne. Von mir wird dazu allerdings nichts kommen.


Kleiner Tipp Am Rande: todoist wird auch von IFTTT unterstützt.

marvin78

Kleines Update im ersten Post. Es gab noch einen Bug bei der Sortierung nach Alphabet und ich habe ein Attribut "showPriority" eingeführt. Dieses steht default auf 0 (nicht zeigen).

Ma_Bo

Habe das Modul noch nicht getestet, aber vorab mal ne frage:
Wie ist das Aktualisierungsintervall und ist es einstellbar, wie wäre der kleinste Intervall ?

Grüße Marcel


Tapatalk iPhone, daher kurz gehalten.
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

marvin78

Wie bei wunderlist auch. Per Attribut einstellbar. Bin unterwegs und nicht sicher, was das Minimum ist. Ein at mit getTasks geht aber immer. Intern wird auch nichts anderes verwendet. Wie oft möchtest du denn abrufen? Ich vermute,  dass die API bei gewissen Frequenzen versagt bzw. gesperrt wird.

Ma_Bo

Die Anbindung an ifttt ist interessant, dann könnte man Dinge von ifttt an FHEM senden... [emoji6]

Offtopic:

Ich versuche im Moment nen vernünftigen und sicheren Weg von ifttt etwas an FHEM zu bekommen, möglichst ,,realtime", wobei das mit deinem Modul wahrscheinlich nicht möglich sein wird.

Ich lese auch gerade viel über SLACK, mal schauen was da evtl. machbar wäre, leider bin ich im programmieren ne 0.

Grüße Marcel


Tapatalk iPhone, daher kurz gehalten.
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

marvin78

Die neue Version erlaubt das Heruntersetzen des pollintervals auf 60 Sekunden. Außerdem können completed Tasks gelesen werden (Attribut: getCompleted).


Achtung: erledigte Aufgaben können nur von Premium-Usern gelesen werden. Für Standard-User gibt die API hier nichts her. Ich habe nicht getestet, was passiert, wenn man kein Premium-User ist. Vermutlich gibt es nur eine Fehlermeldung. Es gibt keine Verprobung auf den Status des Users.

Cobra

Hallo Marvin,

erst einmal danke für das Modul.

Hab es eingerichtet und funktioniert perfekt.

Einzig was mir aufgefallen ist:

Wenn eine Liste leer ist dann kommt bei jedem Abruf folgende Meldung im Log:

2017.10.29 20:40:06 1:     main::__ANON__                      called by fhem.pl (691)
2017.10.29 20:40:06 1:     main::todoist_GetTasksCallback      called by FHEM/HttpUtils.pm (562)
2017.10.29 20:40:06 1:     main::readingsBulkUpdate            called by ./FHEM/98_todoist.pm (670)
2017.10.29 20:40:06 1: stacktrace:
2017.10.29 20:40:06 1: readingsUpdate(TDI.Einkaufsliste,listText,-) missed to call readingsBeginUpdate first.
2017.10.29 20:40:06 1:     main::__ANON__                      called by fhem.pl (691)
2017.10.29 20:40:06 1:     main::todoist_GetTasksCallback      called by FHEM/HttpUtils.pm (562)
2017.10.29 20:40:06 1:     main::readingsBulkUpdate            called by ./FHEM/98_todoist.pm (579)
2017.10.29 20:40:06 1: stacktrace:
2017.10.29 20:40:06 1: readingsUpdate(TDI.Einkaufsliste,count,0) missed to call readingsBeginUpdate first.
2017.10.29 20:40:06 3: todoist (TDI.Einkaufsliste): no data


Kann das irgendwie noch geändert werden (außer dass ich jetzt Verbose auf 0 setze)?
Hab jetzt erstmal etwas in die Einkaufsliste gesetzt was dauerhaft drin steht um die Meldung zu umgehen.

Gruß Cobra
RaspberryPI 3 mit Raspbian Jessie, HMLAN/HM-LAN-Gateway
Diverse HM-Komponenten, Netatmo, Hue, Sonos, Nuki, Alexa

marvin78

Das sollte in der aktuellen Version von heute Nachmittag schon gefixt sein.

Cobra

Perfekt, gerade getestet.

Jetzt steht nur noch:

2017.10.29 21:30:26 3: todoist (TDI.Einkaufsliste): no data

Das passt soweit  :D

Danke

Gruß Cobra
RaspberryPI 3 mit Raspbian Jessie, HMLAN/HM-LAN-Gateway
Diverse HM-Komponenten, Netatmo, Hue, Sonos, Nuki, Alexa

marvin78


marvin78

Bugfix: Das Modul konnte FHEM zum Abstürzen bringen, wenn das von todoist gelieferte JSON falsch formatiert ist oder kein JSON-String zurück geliefert wird. Das ist z.B. der Fall, wenn die API nicht erreichbar ist. Das sollte nun nicht mehr passieren.