Vergiss nicht zu Tanken...
Moderator: Co-Administratoren
Re: Vergiss nicht zu Tanken...
Hallo, müsste so passen.
In Zeile 15 wird nur gewartet bis er die Daten fertig geladen hat.
Test mal Und Berichte dann.
LG nape1
Gesendet von meinem WAS-LX1 mit Tapatalk
In Zeile 15 wird nur gewartet bis er die Daten fertig geladen hat.
Test mal Und Berichte dann.
LG nape1
Gesendet von meinem WAS-LX1 mit Tapatalk
Re: Vergiss nicht zu Tanken...
Schick mir die ganzen Zeilen noch mal.
Aber bei privater Nachricht. Damit mir hier nicht alles zumüllen.
Gesendet von meinem WAS-LX1 mit Tapatalk
Aber bei privater Nachricht. Damit mir hier nicht alles zumüllen.
Gesendet von meinem WAS-LX1 mit Tapatalk
Re: Vergiss nicht zu Tanken...
Wer kann mir Helfen bekomme felermeldungldittmar hat geschrieben:Schritt 3: Was steht heute an
Als nächstes sagt das Haus was heute so ansteht und wer Geburtstag hat. Da muss man erst ein bisschen rumspielen, aber das was raus kommt ist ziemlich cool. Das schwierigste war aber meine Frau davon zu überzeugen, die Termine im Kalender einzutragen… anfangs… jetzt meckert sie rum, wenn ich vergesse was einzutragen.
Gebraucht wird:Mit Google Script werden die einzelnen Kalendereinträge eingelesen und einmal Täglich (morgens um 4 oder so) in die CCU geschrieben. Es ist ratsam mehrere Kalendern zu führen 1 pro Person + 1 Geburtstagskalender. Klingt kompliziert, aber Google macht das sehr gut und einfach.
- Google Calendar
- Google Script
Wenn dann die Daten in der CCU sind, kann der Tablet in der Küche mit der XML-Api drauf zugreifen und über Tasker-Sprachausgabe alles sagen.
Umsetzung.
Ich habe mich am Code von dwm orientiert (danke dir), um sämtliche Kalendereinträge in die CCU zu bringen.
Kurz zu Google Calendar: das Ding ist genial einfach zu bedienen. Selbst mit mehreren Kalendern ist es super händelbar. Die Android App ist auch einfach super! Wer es noch nicht probiert hat, sollte es unbedingt tun… selbst meine Frau, die anfangs total dagegen war, nutzt die App regelmäßig und trägt alle Termine rein.
Ich gehe davon aus, dass ihr schon mindestens ein Kalender angelegt habt und lege los… In meinem Beispiel sind es 6 Kalendern
Jetzt die Google Script Seite öffnen und diesen Code eingeben.
Dieser Code muss natürlich noch angepasst werden. Die ganzen xxxxxx müssen durch die Google Calendar IDs ersetzt werden. Wo man die ID findet? Ganz einfach… schau mal hier. Beim Ergebnis sollte jeder Mal schauen ob das was raus kommt, das ist was man wirklich hören will. Bedenke dass Satzzeichen von der Sprachausgabe ignoriert werden. Außer ein Punkt! Da macht die Dame mal PauseCode: Alles auswählen
function doGet(request) { var answer = ""; if (request.parameters.cmd == "all" ) { answer = "person1=" + getEvents('xxxxxxxxxxxx@gmail.com', 'person1'); answer += ",person2=" + getEvents('xxxxxxxxxxx@gmail.com', 'person2'); answer += ",kind1=" + getEvents('xxxxxxxxxxx@group.calendar.google.com', 'kind1'); answer += ",kind2=" + getEvents('xxxxxxxxxxx@group.calendar.google.com', 'kind2'); answer += ",kind3=" + getEvents('xxxxxxxxxxxxx@group.calendar.google.com', 'kind3'); answer += ",geburtstage=" + getEvents('xxxxxxxxxxxx.google.com', 'geburtstage'); } else if (request.parameters.cmd == "person1" ) { answer = getEvents('xxxxxxxxxxxx@gmail.com', 'person1'); } else if (request.parameters.cmd == "person2" ) { answer = getEvents('xxxxxxxxxxxxx@gmail.com', 'person2'); } else if (request.parameters.cmd == "kind1" ) { answer = getEvents('xxxxxxxxxxxxxxxxxx@group.calendar.google.com', 'kind1'); } else if (request.parameters.cmd == "kind2" ) { answer = getEvents('xxxxxxxxxxxxxxxxxxxx@group.calendar.google.com', 'kind2'); } else if (request.parameters.cmd == "kind3" ) { answer = getEvents('xxxxxxxxxxxxxxxxx@group.calendar.google.com', 'kind3'); } else if (request.parameters.cmd == "geburtstage" ) { answer = getEvents('xxxxxxxxxxxxxxxxxxxxxxxxxx@group.calendar.google.com', 'geburtstage'); } return ContentService.createTextOutput(answer); } function getEvents(calId, type){ var cal = CalendarApp.getCalendarById(calId); var today = new Date(); today.getTime(); var events = cal.getEventsForDay(today); var result = ""; var allDayText = false; var first = true; for (var i=0; i<events.length; i++) { if (!first) { result = result + ", "; } if(events[i].isAllDayEvent()){ if(!allDayText && type != 'geburtstage'){ result = result + "Heute ist "; allDayText = true; } result = result + events[i].getTitle(); }else{ if(first){ if(allDayText) { result = result + " und "; } if(type == 'kind1'){ result = result + " Kind1 hat "; }else if(type == 'kind2'){ result = result + " Kind2 hat "; }else if(type == 'kind3'){ result = result + " Kind3 hat "; } } var date = events[i].getStartTime(); var hour = Utilities.formatDate(date, "MET", "H"); var min = Utilities.formatDate(date, "MET", "m"); if(min == 0) {min = "";} result = result + "um " + hour + " Uhr " + min + " " + events[i].getTitle(); first = false; } } if(result != ""){ result = result + ". "; result = result.replace(/ü/g, 'ue').replace(/ö/g, 'oe').replace(/ß/g, 'ss').replace(/ä/g, 'ae').replace(/Ö/g, 'Oe').replace(/Ü/g, 'ue').replace(/Ä/g, 'ae'); } return (result); }
Zum Testen einfach auf „Veröffentlichen > Als Webapp einrichten“ … oben ist ein Link mit dem ihr es testen könnt.
https://script.google.com/macros/s/fgdf ... ec?cmd=all
Vergiss nicht nach dem exec ein ?cmd=all hinzuzufügen. Jetzt könnt ihr ein bisschen rumspielen.
Der Zugriff zu Kalender muss leider auch für anonymer Nutzer sein, denn die CCU kann sich ja nicht einloggen.
Es ist jetzt so… Morgens sollen alle Termine durchgesagt werden. Damit das passiert, muss zuerst ein ganzer Text aufgebaut werden. Das kann man ja morgens machen… wenn noch alle schlafen… das Haus arbeitet ja 24h am Tag und das ist auch gut so. Wir können das eine Programm aus Schritt 2 nehmen (das um 04:25) und um einem Skript erweitern:
Es müssen 3 Systemvariablen (Text) angelegt werden. „wecker_text_global”, “wecker_text_person1“ und „wecker_text_person2“. Dazu sollte das ganze Skript nach euren Wunsch umgestaltet werden, damit ihr auch den Text bekommt, den ihr auch morgens hören wollt. Ich habe hier ein ganz einfaches Beispiel genommen. Man könnte aber z.B. noch Random-Texte hinzufügen, damit die Ansage nicht immer gleich klingt usw… die Möglichkeiten sind unendlich groß…Code: Alles auswählen
string weck_text = "Guten Morgen Familie. "; string weck_text_person1 = "Guten Morgen person1. "; string weck_text_person2; string calenderSkriptUrl = "https://script.google.com/macros/s/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/exec"; dom.GetObject("CUxD.CUX2801001:5.CMD_SETS").State("LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl -s -k -L " # calenderSkriptUrl # "?cmd=all"); dom.GetObject("CUxD.CUX2801001:5.CMD_QUERY_RET").State(1); string stdout = dom.GetObject("CUxD.CUX2801001:5.CMD_RETS").State(); var pos1; var pos2; if(stdout.Find("person1=") == -1){ quit; } pos1 = stdout.Find("person1=") + 8; pos2 = stdout.Find(",person2") - pos1; string value = stdout.Substr(pos1, pos2); if(value == ""){ weck_text_person1 = weck_text_person1 # "Fuer dich sind heute keine Kalendareintraege vorhanden. "; }else{ weck_text_person1 = weck_text_person1 # "Du hast heute folgendes vor. " # value; weck_text = weck_text# "person1 hat heute folgende Termine. " # value; weck_text_person2 = value; } pos1 = stdout.Find("person2=") + 8; pos2 = stdout.Find(",kind1=") - pos1; string temp = value; value = stdout.Substr(pos1, pos2); if(value == ""){ weck_text_person2 = "Guten Morgen person2. Fuer dich sind heute keine Kalendareintraege vorhanden. "; }else{ weck_text_person2 = "Guten Morgen person2. Du hast heute folgendes vor. " # value; weck_text = weck_text# "person2 hat heute folgende Termine. " # value; weck_text_person1 = weck_text_person1 # "Dein Mann hat folgende Termine. " # value; } if(temp != ""){ weck_text_person2 = weck_text_person2 # "Deine Frau hat folgende Termine. " # temp; } pos1 = stdout.Find("kind2=") + 6; pos2 = stdout.Find(",kind3") - pos1; temp = stdout.Substr(pos1, pos2); pos1 = stdout.Find("kind3=") + 6; pos2 = stdout.Find(",geburtstage") - pos1; string temp2 = stdout.Substr(pos1, pos2); pos1 = stdout.Find("kind1=") + 6; pos2 = stdout.Find(",kind2") - pos1; string temp3 = stdout.Substr(pos1, pos2); if(temp.Length() != 0 || temp2.Length() != 0 || temp3.Length() != 0){ var allgemein = ". Zur Erinnerung. "; if(temp.Length() != 0){ allgemein = allgemein # " " # temp; } if(temp2.Length() != 0){ allgemein = allgemein # " " # temp2; } if(temp3.Length() != 0){ allgemein = allgemein # " " # temp3; } weck_text_person2 = weck_text_person2 # allgemein; weck_text = weck_text # allgemein; weck_text_person1 = weck_text_person1 # allgemein; allgemein = ""; } pos1 = stdout.Find("geburtstage=") + 12; pos2 = stdout.Length() - pos1; value = stdout.Substr(pos1, pos2); if(value != ""){ temp = ". Und jetzt die Geburtstage. " # stdout.Substr(stdout.Find("geburtstage=") + "geburtstage=".Length(),stdout.Length()); weck_text_person2 = weck_text_person2 # temp; weck_text_person1 = weck_text_person1 # temp; weck_text = weck_text # temp; } dom.GetObject("wecker_text_global").State(weck_text); dom.GetObject("wecker_text_person1").State(weck_text_person1); dom.GetObject("wecker_text_person2").State(weck_text_person2); weck_text = ""; weck_text_person1 = ""; weck_text_person2 = ""; stdout = ""; temp = ""; temp2 = ""; temp3 = ""; value = ""; calenderSkriptUrl = "";
Jetzt brauchen wir mal wieder die ISE ID der 3 neuen Variablen, damit man es im Tab auslesen kann.
Jetzt zurück zu Tab! Wir müssen jetzt nur unser „Aufgewacht“ Task kurz umprogrammieren und fertig. Vor jede Zeile mit „Vorlesen“ (Zeilen 30,35 und 40) müssen noch folgendes hinzugefügt werden:
Natürlich für Perso1 und Perso2 die Werte der jeweiligen Systemvariablen holen.
- nach „http Get“ suchen und unter Server:Port http://[IP der CCU]/config/xmlapi/state.cgi?datapoint_id=xxxxx mit der ID für „wecker_text_global“ eingeben.
- nach „Warte“ suchen „MS“ auf 100 stellen und ganz unten bei „bis“ %HTTPD schreiben und rechts davon den Vergleichsoperator auf „Ist gesetzt“ setzen.
- nach „Variable Aufteilen“ suchen, unter „Name“ %HTTPD und unter „Teiler“ value=‘ eingeben.
- nach „Variable Aufteilen“ suchen, unter „Name“ %HTTPD2 und unter „Teiler“ ‚/> eingeben.
- nach „Variable Setzen“ suchen, unter „Name“ sowas wie %text_global und bei „Zu“ %HTTPD21 eingeben.
Als letztes die Zeile „Vorlesen“ ändern und anstatt „Guten Morgen xxx“ die variable %text_xxxx eintragen, und fertig ist die Sprachausgabe der Termine.
Ich hoffe ich konnte euch bis jetzt ein bisschen inspirieren ! Die Odyssee geht weiter :p
und ich kann das nicht eintragen ergiss nicht nach dem exec ein ?cmd=all hinzuzufügen.
Re: Vergiss nicht zu Tanken...
tach auch
also ab da geht es schon mal nicht weiter
Zum Testen einfach auf „Veröffentlichen > Als Webapp einrichten“ … oben ist ein Link mit dem ihr es testen könnt.
https://script.google.com/macros/s/fgdf ... ec?cmd=all
Vergiss nicht nach dem exec ein ?cmd=all hinzuzufügen. Jetzt könnt ihr ein bisschen rumspielen.
das hinzufügen get nicht
also ab da geht es schon mal nicht weiter
Zum Testen einfach auf „Veröffentlichen > Als Webapp einrichten“ … oben ist ein Link mit dem ihr es testen könnt.
https://script.google.com/macros/s/fgdf ... ec?cmd=all
Vergiss nicht nach dem exec ein ?cmd=all hinzuzufügen. Jetzt könnt ihr ein bisschen rumspielen.
das hinzufügen get nicht
Re: Vergiss nicht zu Tanken...
Hallo,
verfolge das Thema sehr interessiert und anzeige der Termine in Systemvariable funkioniert auch soweit.
Benötige aber keine Sprachausgabe und auf meiner Anzeige kommen diese auch wie Sie möchten.
Wie kann man die Termine geordnet in die Systemvariable der CCU schreiben ohne grosses schnick schnack.
Danke schon mal im vorraus
verfolge das Thema sehr interessiert und anzeige der Termine in Systemvariable funkioniert auch soweit.
Benötige aber keine Sprachausgabe und auf meiner Anzeige kommen diese auch wie Sie möchten.
Wie kann man die Termine geordnet in die Systemvariable der CCU schreiben ohne grosses schnick schnack.
Danke schon mal im vorraus
-
- Beiträge: 48
- Registriert: 24.01.2017, 16:46
Re: Vergiss nicht zu Tanken...
Moin, klingt echt interessant.
Habe jetzt bisher nur Seite 1 gelesen.
Kann mir jemand sagen, ob es als iOS Haushalt mit Alexa
Lohnt, den Rest zu lesen ?
1000 dank
Habe jetzt bisher nur Seite 1 gelesen.
Kann mir jemand sagen, ob es als iOS Haushalt mit Alexa
Lohnt, den Rest zu lesen ?
1000 dank
Vielen DANK
Thorkillar
Thorkillar