Ohhh. Gleich nochmals Weihnachten
Funzt aber immer noch nicht richtig. Erledigte Einträge werden in IPS nicht als erledigt angezeigt.
Ohhh. Gleich nochmals Weihnachten
Funzt aber immer noch nicht richtig. Erledigte Einträge werden in IPS nicht als erledigt angezeigt.
OK, hab den Fehler gefunden (muss aber in der alten Variante auch schon nicht richtig gelaufen sein…).
Hier mein aktualisiertes Script:
<?
// ****************************************************************************
// Auslesen von Wunderlist toDoListen mit Hilfe von Tonis Wundertalker
// ** Wundertalker.exe starten. Dann Link=> wundertaler_Console starten.
// ** Wunderlist-Einloggdaten eingeben, Installieren, autoinclude anhaken, starten
// ** Daten per getToniArray('http://localhost:1218/.... auslesen
// ** im Verzeichnis IP-Symcon/webfront/user muss die Datei WunderlistButton.php liegen. Sie enthält folgenden Code:
// **
// ** $ScriptID = $_GET['ScriptID'];
// ** $do = $_GET['do'];
// ** $number = $_GET['number'];
// ** if ($ScriptID > 0 && $number >= 0 && $do >"")
// ** { IPS_RunScriptWaitEx((int)$ScriptID, array('action' => $do, 'number' => $number) );}
// **
// im Verzeichnis /user/icons/fixed/ die Datei delete.png, done.png, important.png und leer.png
// ****************************************************************************
// ** #hardlog 10.01.15
// ****************************************************************************
/******************************************************************************
*******************************************************************************
** Diese Script kann mit Hilfe von @Tonic1024's Wundertalker toDoListen aus
** der Web-Anwendung WUNDERLIST auslesen und bearbeiten
*******************************************************************************
** Installationsanleitung:
** Es muss ein aktueller Wunderlist-Account bestehen
**
** (1) Wundertalker von @Tonic1024 nach seiner Anleitung installieren
** (2) Das Script WunderlistButton.php ins Verzeichnis ../IP-Symcon/webfront/user kopieren
** (3) Die Datei delete.png, done.png, important.png und leer.png ins Verzeichnis ../IP-Symcon/webfront/user/icons/fixed/ kopieren
** (4) Dummy-Instanz an beliebiger/passender Stelle im Objektbaum anlegen, Name ist egal (hier: "toDo Listen (Wunderlist)"
** (5) Als Child darunter Interger-Variable anlegen (Name egal) (hier "Vorhandene Listen")
** (6) Als Child unter der Integer-Variable ein Script mit dem Inhalt dieses Scriptes (WunderlistMain.php)
** (7) Als Eigene Aktion der Integer aus (5) das Script unter (6) angeben
** (8) Als Child unter die Dummy-Instanz eine String-Var mit dem Profil htmlBox (Name egal, wird autom. ersetzt)
** (9) Als weiteres Child unter die Dummy-Instanz eine String-Var mit dem Profil textbox (Name egal, hier: "Neuen Eintrag in geöffnete Liste")
** (10) Als Eigene Aktion der textbox (9) das Script unter (6) angeben
** (11) In diesem Script (WunderlistMain.php) die IDs der folgenden 6 Programmzeilen an die eigenen anpassen
** (12) das müßte es eigentlich gewesen sein.
******************************************************************************/
include("__Toni.inc.php");
$WFC=46366 /*[WebFront]*/; // Webfront-Konfigurator ID
$NewTaskStrID=19260 /*[to Do o Do Listen (Wunderlist)\Neuen Eintrag in geöffnete Liste]*/; // ID der string-Variable (Profil textbox) für einen neuen Task
$VisuTaskListID=12070 /*[to Do o Do Listen (Wunderlist)\Aktuelle Liste: <>]*/; // ID der htmlBox für die darstellung der Taskliste
$IPuPort='http://127.0.0.1:1218'; // IP und Port des Wundertalkers von Tonic1014, in der Regel so ok
// **** ab hier muss nichts geändert werden ************************************
$ListsArray=getToniArray($IPuPort.'/Lists'); // Array mit allen Listen füllen
$ListsCount=Count($ListsArray); // Anzahl er geladenen Listen ermitteln
$selfID=$_IPS['self']; // ID dieses Scripts
$ActualListID= IPS_getparent($selfID); // ID der obergeordneten Variable
AktuelleList=getvalue($ActualListID);
if ($_IPS['SENDER']=="WebFront")
{
if($_IPS['VARIABLE']==$NewTaskStrID) // wenn durch Texteingabe für "neuen Eintrag" ausgelöst
{
$ListID=$ListsArray[Getvalue($ActualListID)][0];
$result1=WunderlistBefehlSenden("AddTask?title=".urlencode($_IPS['VALUE'])."&list=".$ListID);
$result2=WunderlistBefehlSenden("Sync"); // Wunderlist in Cloud synchronisieren und Erfolg rückmelden
if (($result1=="FEHLER") or ($result2=="FEHLER"))
{ WFC_SendNotification($WFC, "Wunderlist!", "Fehler beim Anlegen eines neuen Tasks ", "Warning", 5);}
else
{ WFC_SendNotification($WFC, "Wunderlist!", "Erfolgreich angelegt", "Information", 5);}
SetValue($NewTaskStrID,'');
$AktuelleList=getvalue($ActualListID);
}
else
{
SetValue($_IPS['VARIABLE'],$_IPS['VALUE']);
$AktuelleList=$_IPS['VALUE'];
}
}
if ($_IPS['SENDER']=="RunScript")
{
switch ($action)
{
case 'DELETE':
if (isset($number) && $number <> '')
{
$result=WunderlistBefehlSenden("DeleteTask?id=".$number); // Task mit der ID=number (aus dem aufrufscript wunderlistButton.php) LÖSCHEN
$result=WunderlistBefehlSenden("Sync"); // cloud synchronisieren
if ($result<>"FEHLER") WFC_SendNotification($WFC,"toDo Task","Erfolgreich gelöscht","Information",5); else WFC_SendNotification($WFC,"toDo Task","FEHLER! Nicht gelöscht!","Warning",8);
}
break;
case 'DONE':
if (isset($number) && $number <> '')
{
if (getToniArray($IPuPort.'/Tasks?id='.$number)[0][4]=="True") // wenn als DONE markiert dann....
$result=WunderlistBefehlSenden("EditTask?id=".$number."&completed=False"); // Task mit der ID=number (aus dem aufrufscript wunderlistButton.php) als UnWichtig markieren
else
$result=WunderlistBefehlSenden("EditTask?id=".$number."&completed=True"); // Task mit der ID=number (aus dem aufrufscript wunderlistButton.php) als Wichtig markieren
$result=WunderlistBefehlSenden("Sync"); // cloud synchronisieren
if ($result<>"FEHLER") WFC_SendNotification($WFC,"toDo Task","Markierung geändert!","Information",5); else WFC_SendNotification($WFC,"toDo Task","FEHLER! Markierung nicht geändert!","Warning",8);
}
break;
case 'IMPORTANT':
if (isset($number) && $number <> '')
{
if (getToniArray($IPuPort.'/Tasks?id='.$number)[0][3]=="True")
$result=WunderlistBefehlSenden("EditTask?id=".$number."&starred=False"); // Task mit der ID=number (aus dem aufrufscript wunderlistButton.php) als UnWichtig markieren
else
$result=WunderlistBefehlSenden("EditTask?id=".$number."&starred=True"); // Task mit der ID=number (aus dem aufrufscript wunderlistButton.php) als Wichtig markieren
$result=WunderlistBefehlSenden("Sync"); // cloud synchronisieren
if ($result<>"FEHLER") WFC_SendNotification($WFC,"toDo Task","Markierung gesetzt!","Information",5); else WFC_SendNotification($WFC,"toDo Task","FEHLER! Nicht markiert!","Warning",8);
}
break;
case 'EDIT':
if (isset($number) && $number <> '')
{
setvalue($NewTaskStrID,getToniArray($IPuPort.'/Tasks?id='.$number)[0][1]); // angeklickten Task in Textbox
// dann angeklickten Task löschen
$result=WunderlistBefehlSenden("DeleteTask?id=".$number); // Task mit der ID=number (aus dem aufrufscript wunderlistButton.php) LÖSCHEN
$result=WunderlistBefehlSenden("Sync"); // cloud synchronisieren
}
break;
}
$AktuelleList=getvalue($ActualListID);
}
// ******* Profil der Listenanzeige löschen,neu generieren und füllen **********
if (IPS_VariableProfileExists("toDoListen")==TRUE) IPS_DeleteVariableProfile("toDoListen");
IPS_CreateVariableProfile("toDoListen",1); // Profil "toDoListen" neuanlegen
IPS_SetVariableCustomProfile($ActualListID,"toDoListen"); // Profil der Var zuordnen
IPS_SetVariableCustomAction($ActualListID,$selfID); // passendes (dieses) Aktionsscript verbinden
for ($i=0; $i<$ListsCount; $i++) // Profil mit allen vorhandenen Listen neu füllen
{
$TasksArray=getToniArray($IPuPort.'/Tasks?list='.$ListsArray[$i][0]); // Array mit allen Task der gewählten Liste füllen um deren Zahl zu bestimmen
$TasksCount=Count($TasksArray);
if (@$TasksArray[0][0]=="") $TasksCount="-"; // kein Task in dieser Liste ...
if (@$ListsArray[0][1]=="inbox") $ListsArray[0][1]="Eingang";
IPS_SetVariableProfileAssociation("toDoListen", $i,$ListsArray[$i][1]." (".$TasksCount.")", "", 0xFFFFFF);
}
// folgende Zeile listet alle Einträger einer spez. Liste (aktuell ausgewählen) auf
$TasksArray=getToniArray($IPuPort.'/Tasks?list='.$ListsArray[$AktuelleList][0]); // Array mit allen Task der gewählten Liste füllen
if ($TasksArray[0][0]=='') $TasksCount=0; else $TasksCount=Count($TasksArray); // Wenn task leer, dann gibts keine tasks!
IPS_SetName($VisuTaskListID,'Aktuelle Liste: <'.$ListsArray[$AktuelleList][1].'>');
//** Visu in htmlBOX
$html = '<table style="width: 100%;" cellspacing=0 cellpadding=2><tbody>
<tr style="color:grey;">
<td style="border-bottom-width:2px; border-bottom-style:solid; border-bottom-color:#3B3B4D;"></td>
<td align="left" style="border-bottom-width:2px; border-bottom-style:solid; border-bottom-color:#3B3B4D;">Beschreibung</td>
<td style="border-bottom-width:2px; border-bottom-style:solid; border-bottom-color:#3B3B4D;">erledigen*</td>
<td align="right" style="border-bottom-width:2px; border-bottom-style:solid; border-bottom-color:#3B3B4D;">löschen</td>
</tr>';
for($x=0; $x < $TasksCount; $x++ ) {
if (($TasksArray[$x][3]=="True") and ($TasksArray[$x][4]==0)) //Eintrag ist als WICHTIG markiert
{
$html .= '<tr><td align="center" width=25px style="line-height:25px; border-bottom-width:1px; border-bottom-style:dotted; border-bottom-color:#3B3B4D;"><div onclick="window.xhrGet=function xhrGet(o) {var HTTP = new XMLHttpRequest(); HTTP.open(\'GET\',o.url,true);HTTP. send();};window.xhrGet({ url: \'user/WunderlistButton.php?ts=\' + (new Date()).getTime() + \'&ScriptID='.$_IPS['SELF'].'&do=IMPORTANT&number='.$TasksArray[$x][0].'\' });"><img src="/user/icons/fixed/important.png"></img></div></td>';
}
else
{
$html .='<tr><td align="center" width=25px style="line-height:25px; border-bottom-width:1px; border-bottom-style:dotted; border-bottom-color:#3B3B4D;"><div onclick="window.xhrGet=function xhrGet(o) {var HTTP = new XMLHttpRequest(); HTTP.open(\'GET\',o.url,true);HTTP. send();};window.xhrGet({ url: \'user/WunderlistButton.php?ts=\' + (new Date()).getTime() + \'&ScriptID='.$_IPS['SELF'].'&do=IMPORTANT&number='.$TasksArray[$x][0].'\' });"><img src="/user/icons/fixed/leer.png"></img></div></td>';
}
if ($TasksArray[$x][4]=="True") //text durchstreichen wenn in wunderlist als erledigt markiert= DONE
{
$html.='<td style="border-bottom-width:1px; border-bottom-style:dotted; border-bottom-color:#3B3B4D; color:grey;">*<strike>*'.$TasksArray[$x][1].'*</strike></td>';
$html.='<td align="center" width=25px style="line-height:25px; border-bottom-width:1px; border-bottom-style:dotted; border-bottom-color:#3B3B4D;"><div onclick="window.xhrGet=function xhrGet(o) {var HTTP = new XMLHttpRequest(); HTTP.open(\'GET\',o.url,true);HTTP. send();};window.xhrGet({ url: \'user/WunderlistButton.php?ts=\' + (new Date()).getTime() + \'&ScriptID='.$_IPS['SELF'].'&do=DONE&number='.$TasksArray[$x][0].'\' });"><img src="/user/icons/fixed/undone.png"></img></div></td>';
$html.='<td align="center" width=35px style="border-bottom-width:1px; border-bottom-style:dotted; border-bottom-color:#3B3B4D;"><div onclick="window.xhrGet=function xhrGet(o) {var HTTP = new XMLHttpRequest(); HTTP.open(\'GET\',o.url,true);HTTP. send();};window.xhrGet({ url: \'user/WunderlistButton.php?ts=\' + (new Date()).getTime() + \'&ScriptID='.$_IPS['SELF'].'&do=DELETE&number='.$TasksArray[$x][0].'\' });"><img src="/user/icons/fixed/Delete.png"></img></div></td></tr>';
}
else
{
$html.='<td style="border-bottom-width:1px; border-bottom-style:dotted; border-bottom-color:#3B3B4D; color:white;">*<div onclick="window.xhrGet=function xhrGet(o) {var HTTP = new XMLHttpRequest(); HTTP.open(\'GET\',o.url,true);HTTP. send();};window.xhrGet({ url: \'user/WunderlistButton.php?ts=\' + (new Date()).getTime() + \'&ScriptID='.$_IPS['SELF'].'&do=EDIT&number='.$TasksArray[$x][0].'\' });">'.$TasksArray[$x][1].'</div></td>';
$html.='<td align="center" width=25px style="line-height:25px; border-bottom-width:1px; border-bottom-style:dotted; border-bottom-color:#3B3B4D;"><div onclick="window.xhrGet=function xhrGet(o) {var HTTP = new XMLHttpRequest(); HTTP.open(\'GET\',o.url,true);HTTP. send();};window.xhrGet({ url: \'user/WunderlistButton.php?ts=\' + (new Date()).getTime() + \'&ScriptID='.$_IPS['SELF'].'&do=DONE&number='.$TasksArray[$x][0].'\' });"><img src="/user/icons/fixed/done.png"></img></div></td>';
$html.='<td align="center" width=35px style="border-bottom-width:1px; border-bottom-style:dotted; border-bottom-color:#3B3B4D;"><div onclick="window.xhrGet=function xhrGet(o) {var HTTP = new XMLHttpRequest(); HTTP.open(\'GET\',o.url,true);HTTP. send();};window.xhrGet({ url: \'user/WunderlistButton.php?ts=\' + (new Date()).getTime() + \'&ScriptID='.$_IPS['SELF'].'&do=DELETE&number='.$TasksArray[$x][0].'\' });"><img src="/user/icons/fixed/Delete.png"></img></div></td></tr>';
}
}
$html .= '</tbody></table>';
setvalue($VisuTaskListID,$html);
// Ende des Hauptprogrammes
function WunderlistBefehlSenden($Befehl)
{
$curl = curl_init();
curl_setopt ($curl, CURLOPT_URL, "http://127.0.0.1:1218/".$Befehl);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec ($curl); // Rückmeldung
curl_close ($curl);
if ((strpos($result,'OK')==FALSE) and (strpos($result,'Created')==FALSE)) $result="FEHLER";
return $result;
}
?>
Der Fehler war in folgedem Ausschnitt:
if ($TasksArray[$x][4]<>0) //text durchstreichen wenn in wunderlist als erledigt markiert= DONE
Und muss statt dessen wie folgt heißen:
If ($TasksArray[$x][4]=="True") //text durchstreichen wenn in wunderlist als erledigt markiert= DONE
Gruß
hardlog
Danke und ein frohes neues Jahr
Hab noch einen ähnlichen Fehler entdeckt!
Hmm, ich könnte schwöre, dass es vor einem Jahr noch alles ging…
Folgender Abschnitt muss statt
case 'DONE':
if (isset($number) && $number <> '')
{
if (getToniArray($IPuPort.'/Tasks?id='.$number)[0][4]<>"0") // wenn als DONE markiert dann....
so lauten:
case 'DONE':
if (isset($number) && $number <> '')
{
if (getToniArray($IPuPort.'/Tasks?id='.$number)[0][4]=="True") // wenn als DONE markiert dann....
PS: Habs im Gesamt-Script in Post #102 auch geändert.
ein gutes Neues
hardlog
Moin,
hab nochmal 2 kleine Korrekturen am Script im Post #102 gemacht. In Zeile 55 und Zeile 59.
Gruß
hardlog
Hallo,
erstmal vielen Dank für die hervorragende Arbeit die Ihr hier alle leistet. Ohne Euch alle wäre IPS nur die Hälfte wert …
Nun zu meiner Frage:
Ich habe meinen Account bei Wunderlist gelöscht und möchte nun einen anderen Account benutzen. Bei der ersten Einrichtung poppte ein Fenster bei Wundertalker auf, in dem die Zugangsdaten eingegeben werden konnten.
Dieses Fenster wird jetzt sofort wieder geschlossen, ohne irgend etwas anzuzeigen.
Wo kann ich die Daten (eMail, Passwort, Auth-Code, etc.) für den neuen Account ändern ???
Vielen Dank !!!
Gruß Proxima
Moin Moin,
Wunderlist wider mal an der Reihe und… es Rockt
Danke euch Toni, hardlog.
@hardlog
ist das Zip File in post #2 mit Aktuellen änderungen?
Hallo Proxima,
Im Wundertalker auf den „Get it now“ klicken, sollte das sein.
Hi Proxima,
hab das zip im #2 Post gerade ersetzt.
Gruß
hardlog
Hallo,
nachdem ich meinen Testaccount bei Wunderlist gelöscht und den „produktiven“ Account angelegt, sowie das Script und alle anderen Daten aus dem ZIP aus #2 ausgetauscht habe, erhalte ich beim Ausführen des Main-Scripts folgende Fehler:
Notice: Undefined offset: 1 in C:\IP-Symcon\scripts\47301.ips.php on line 143
Notice: Undefined offset: 1 in C:\IP-Symcon\scripts\47301.ips.php on line 151
Notice: Undefined offset: 3 in C:\IP-Symcon\scripts\47301.ips.php on line 162
Notice: Undefined offset: 4 in C:\IP-Symcon\scripts\47301.ips.php on line 170
Notice: Undefined offset: 1 in C:\IP-Symcon\scripts\47301.ips.php on line 178
Wie oben bereits geschrieben, popt das Fenster zur Eingabe der Zugangsdaten nur kurz auf und schließr sich dann gleich wieder, nachdem auf „Get it now“ geklickt habe. Angezeigt wird in diesem Fenster nichts (ist leer). Woher soll also Wundertalker wissen, wie die eMail-Adresse und das Passwort für den „Produktiv-Account“ sind ???
Beim Klick auf „Show Help“ wird die Hilfe mit den möglichen Optionen angezeigt.
Gruß Proxima
Hi Proxima,
wenn Du das script manuell ausführts, müßte es an der Zeile
$selfID=$_IPS['self'];
liegen. Ersetz die mal gegen folgendes
$selfID=12345;
Natürlich mit der ID dieses Scripts.
Gruß
hardlog
Hallo,
habe ich gemacht: Gleiche Fehler, keine Änderung.
(Ich hatte übrigens schon vorher das ‚self‘ durch ‚SELF‘ ersetzt.)
Ich vermute, dass von Wundertalker keine Daten rein kommen ???
Gruß Proxima
Was kommt denn wenn du im Browser direkt
Localhost:1218/Lists
Eingibst?
Hardlo
Es kommt:
#Nothing found
Ok,dann liegt es zumindest nicht an meinem Script.
Moin,
im Rahmen vom Wegfall alter IPS-Funktionen mußte ich eine Minimale Änderung am Hauptscript vornehmen.
Sofern der Kompatibilitäts-Modus von IPS läuft (bei der Windowsversion) gehts auch noch (wie lange?) ohne Änderung, ab 4.0 wenn die Kompatibilitäts-Modus deaktiviert ist ODER ihr IPS unter Linux laufen lasst, muss das Main-Script angepaßt werden:
Folgende Stelle
if ($_IPS['SENDER']=="RunScript")
{
switch ($action)
{
muss ab Zeile 84 geändert werden (Zeile 84 ändern und eine Code-Zeile davor neuen Programmcode einffügen:
if ($_IPS['SENDER']=="RunScript")
{
$number=$_IPS['number']; // ****************************** NEU
switch ($_IPS['action']) // ****************************** geändert
{
Dann müßte es konform mit 4.0 sein.
Ich bitte um Feedback falls es Probleme gibt.
Gruß
hardlog
Moin hardlog,
habe das Aktuelle Script für V4. übernommen. Danke dir für die Arbeit.
Test ergab : wenn ich zwischen Listen wechsel kommt im WF nur „Fehler“ obwoh die Liste umschaltet und auch lädt
im log auch kein Eintrag. Eine Idee woran das liegt?
Hi,
Interessant! Die Meldung bekomme ich da zwar nicht, aber an anderer Stelle (ganz anderes Script) ohne das ich es bislang zuordnen kann. Ich werd mich mal auf Suche begeben…
Gruß hardlog
Moin zusamm…
Da Wunderlist die 32Bit Schallgrenze bei den TaskIDs erreicht hat hab ich mal nachgelegt und ein 64Bit Background dahinter gelegt. (Download auf meiner Webseite)
Mich würde interessieren ob es noch 32Bit Server da draußen gibt und ob der Wundertalker da noch läuft. (es ist immer noch eine native 32Bit Applikation).
Wo ich grad dabei war hab ich direkt ein paar Bugfixe eingebaut. Win10 kompatibel!
Gruß,
Toni
Hallo Toni!!
Habs installiert, läuft…
Erster Eindruck nach 10sec. (ohne es weiter kontrolliert zu haben…): Kann es ein Umlaufproblem in Zusammenhang mit meinem Script zum Einbinden in IPS geben?
Gruß
Hardlog