Vergiss nicht zu Tanken...

User stellen ihre Haussteuerung vor

Moderator: Co-Administratoren

Benutzeravatar
ldittmar
Beiträge: 467
Registriert: 07.03.2015, 12:21
System: CCU
Danksagung erhalten: 1 Mal

Re: Vergiss nicht zu Tanken...

Beitrag von ldittmar » 30.10.2015, 14:31

Klar doch... ich habe es mittels CUxD Ping gelöst.

http://homematic-forum.de/forum/viewtop ... 91#p165586

Funktioniert bei mir echt gut.... und danke dir für den Einwand. Ich wäre sonst nie auf die Idee gekommen es einfach auszuschalten, wenn man es nicht unbedingt braucht. Werde mal am WE gleich reinprogrammieren. :)

Grüße,
ldittmar
Download: WebMatic 2.2.3. Für den Kauf von HM Geräte zur schnellere Weiterentwicklung von Webmatic, werden auch gerne SPENDEN entgegen genommen. Danke! Und hier geht es zur WebMatic Homepage

Benutzeravatar
ldittmar
Beiträge: 467
Registriert: 07.03.2015, 12:21
System: CCU
Danksagung erhalten: 1 Mal

Re: Vergiss nicht zu Tanken...

Beitrag von ldittmar » 30.10.2015, 19:24

Schritt 1, Teil 3: Unstillbarer Hunger!

Durch K Ks Einwand (danke nochmal) ist mir bewusst geworden, dass mein Küchentab jetzt viel mehr Strom braucht als früher…
K K hat geschrieben: ich habe das vor einiger Zeit auch schon mit dem Motion Detector versucht, an sich funktioniert das ja ganz gut.
Wenn ich diese Funktion jedoch nutze, muss das Tablet ca. 1x täglich geladen werden (Ist zwar auch schon mit UP Aktor und Tasker realisiert, aber trotzdem), wenn ich die Funktion nicht nutze, hält das Tablet locker mehrere Tage.
… der Schuldige ist natürlich der Motion Detector. Diese App nutzt die Kamera des Tabs, um eine Bewegung erkennen zu können. Man kann die Bewegungserkennung eines Tabs (das nicht dafür konzipiert wurde) mit einem Bewegungssensor vergleichen. Der Tab verbraucht halt viel Strom, wenn die Kamera die ganze Zeit an ist. Damit der Akku ein bisschen länger hält, habe ich mir was gedacht…

Gebraucht wird: Umsetzung:
Wann brauche ich überhaupt die Bewegungserkennung bzw. wann brauche ich es nicht? Klar… wenn alle schlafen, brauche ich es definitiv nicht! Auch wenn keiner zuhause ist, ist es total unnötig…

Task 5: „Motion Aus“ anlegen, auf + klicken und nach „Sende Intent“ suchen. Oben unter Aktion einfach „org.motion.detector.ACTION_DETECTOR_OFF“ eingeben und fertig. Dieser Task führt dazu, dass der Bewegungsdetektor ausgeschaltet wird. (Aber warte mal! Es gibt doch ein Task „Aufwachen“ der genau das gleiche macht? Ja… aber „Aufwachen“ wird später noch erweitert werden.
Jetzt ein Profil vom Typ „Zeit“ anlegen, bei von z.B. 23:00 Uhr eintragen und als Task „Motion Aus“ auswählen und noch ein Profil vom Typ „Zeit“ anlegen und bei von z.B. 04:00 Uhr eintragen und als Task „Motion An“ auswählen.

Soo… jetzt wird zwischen 23 und 4 Uhr keine Bewegung mehr erkannt und Akku wird gespart. Naja… ist ganz ok, aber was ist wenn ich nachts um 2 in die Küche will um einfach ein Glas Wasser zu holen und doch wissen will, ob nachts kälter ist als draußen :P … Naja… dann müssen wir halt diese Lösung ein bisschen aufbohren. :wink: Zuerst will ich jedoch dass die Bewegungserkennung aus ist, wenn keiner zuhause ist (es sei dem ich nutze der Tab um Einbrecher zu begrüßen). Dafür muss meine CCU dem Tab einem Befehl erteilen. (ja… es geht auch anders herum, was HM/Tasker zum super Team macht). Dafür brauchen wir aber Home24 MediaPlayer auf dem Tab und eine feste IP für den Tab.

Auf der CCU muss ein Programm angelegt werden, um je nach Anwesenheit ein Befehl abzusetzen. Ich persönlich nutze zur Anwesenheitserkennung das Pingen mittels CUxD und wenn keiner mehr zuhause ist, setze ich eine Systemvariable „Anwesenheit“ auf „abwesend“ bzw „anwesend“.
Programm.jpg
Wenn Home24 MediaPlayer installiert wurde, kann man mit…

http://[IP VOM TABLETT]:50000/tasker=xxx

…ein Task aus Tasker ausführen. Im CCU Programm muss man also einfach anstatt xxx „Motion An“ und einmal „Motion Aus“ eingeben.

Die Lösung für das Glas Wasser um 2 Uhr morgens wäre also ganz einfach, denn um diese Uhrzeit muss man ja das Licht einschalten, also… wenn es sehr spät ist und jemand das Licht einschaltet, dann „Motion An“ sonst wenn es spät ist und das Licht ausgeschaltet wird „Motion Aus“. :wink: Ohh... doch nicht so einfach, denn wenn das Display an geht, geht MD automatisch aus und wenn das Display aus geht, geht MD automatisch an. Man müsste dann doch im Tasker nochmal prüfen, ob es noch nicht so spät ist, bevor man MD an macht. :wink:
Download: WebMatic 2.2.3. Für den Kauf von HM Geräte zur schnellere Weiterentwicklung von Webmatic, werden auch gerne SPENDEN entgegen genommen. Danke! Und hier geht es zur WebMatic Homepage

ChristianF
Beiträge: 395
Registriert: 27.06.2014, 21:50

Re: Vergiss nicht zu Tanken...

Beitrag von ChristianF » 31.10.2015, 01:03

Klingt toll :) Einiges habe ich auch schon umgesetzt (zB Tablet Laden mit Schaltaktor, Anwesenheitserkennung über Handys etc).

Ich würde sehr gern mehr über die OBD2 Einbindung erfahren :)
370 Kanäle in 119 Geräten und 22 CUxD-Kanäle in 18 CUxD-Geräten, dazu ioBroker und diverse weitere eingebundene Systeme, vom 433MHz Bewegungsmelder bis hin zur Wallbox.

Benutzeravatar
ldittmar
Beiträge: 467
Registriert: 07.03.2015, 12:21
System: CCU
Danksagung erhalten: 1 Mal

Re: Vergiss nicht zu Tanken...

Beitrag von ldittmar » 31.10.2015, 09:18

Hi Community,

ich weiss... ihr wollt alle mehr über OBD2 hören :P ... das kommt ja noch, ist aber eigentlich viel einfacher als die Tablet installation oder die Spracherkennung (das kommt ja auch noch :wink: ) Damit die Wartezeit bis Schritt 5 ein bisschen verkürzt wird, kann man schon mal anfangen den Webserver + Datenbak aufzusetzen und den Bluetooth OBD2 Adapter holen. Ihr könnt damit ganz viele Daten aus dem Auto bekommen.. inklusive Tankanzeige. Wenn das alles fertig ist, dann bin ich sicher auch soweit :wink: Und klar... bei Fragen stehe ich gerne zur Verfügung.

Und damit ihr auch mal was sehen könnt, ein Ausschnitt aus unserem Spanienurlaub. :)
Urlaub.jpg
Also... ich versuche Heute Schritt 2 Teil 2 und Schritt 3 fertig zu bekommen (wird schon gehen)... Schritt 4 ist wahrscheinlich ein Mini-Schritt und dann wäre ich morgen schon bei Schritt 5 :wink:

Grüße,
ldittmar
Download: WebMatic 2.2.3. Für den Kauf von HM Geräte zur schnellere Weiterentwicklung von Webmatic, werden auch gerne SPENDEN entgegen genommen. Danke! Und hier geht es zur WebMatic Homepage

pix
Beiträge: 608
Registriert: 23.01.2012, 15:40
Danksagung erhalten: 1 Mal

Re: Vergiss nicht zu Tanken...

Beitrag von pix » 31.10.2015, 11:15

Hallo,

es gibt schon Lob in anderen Foren.

Super Arbeit!

Pix


Gesendet von meinem iPhone mit Tapatalk
150 Kanäle in 75 Geräten und 103 CUxD-Kanäle in 25 CUxD-Geräten (HomeMatic, FS20), CCU1 FW1.519, AddOns: CUxD 1.0, dropbear, E-Mail 1.2, ftp_server und regaWatchdog.
Logik und Visualisierung mit ioBroker auf Mac OS X Node.js. Eingebundene Systeme: Sonos, Rademacher Homepilot, Roomba, Network-OWL. Danke für das Homematic-Inventur-Skript von EnergyStar

Benutzeravatar
ldittmar
Beiträge: 467
Registriert: 07.03.2015, 12:21
System: CCU
Danksagung erhalten: 1 Mal

Re: Vergiss nicht zu Tanken...

Beitrag von ldittmar » 31.10.2015, 12:31

pix hat geschrieben:Hallo,

es gibt schon Lob in anderen Foren.

Super Arbeit!

Pix
And the oskar goes to.... :P ... Ich muss mal mein Roman endlich fertig schreiben. :D Danke für den den Link :wink:
Download: WebMatic 2.2.3. Für den Kauf von HM Geräte zur schnellere Weiterentwicklung von Webmatic, werden auch gerne SPENDEN entgegen genommen. Danke! Und hier geht es zur WebMatic Homepage

Benutzeravatar
ldittmar
Beiträge: 467
Registriert: 07.03.2015, 12:21
System: CCU
Danksagung erhalten: 1 Mal

Re: Vergiss nicht zu Tanken...

Beitrag von ldittmar » 31.10.2015, 15:01

Schritt 2, Teil 2: Kuck mal, wer da spricht!

Soo… jetzt wissen wir (meistens… öfters… vielleicht) wer vor dem Tab steht. Nun kann man endlich Richtung „erstes Wort“ arbeiten. Bei meiner Frau war es ein schockierendes Erlebnis, als sie morgens in die Küche kam und das Ding plötzlich angefangen hat etwas zu sagen :D… ich hatte sie ja auch nicht vorgewarnt und morgens nach dem Aufstehen ist man sowieso etwas neben der Kappe :D. Wie dem auch sei…

Umsetzung:
Wir haben schon der Befehle vom Tab zur CCU und von der CCU zu Tab geschickt. Jetzt werden wir mal einem Status aus der CCU auslesen. Leider ist das nicht so einfach wie die anderen zwei Sachen und ich denke spätestens jetzt solltet ihr den TeamViewer Quick Support nutzen.

Wir haben ja im Tasker einem Task mit der Bezeichnung „Aufgewacht“ (Schritt 1, Teil 1) angelegt, die z.Z. nur die Zeile mit dem Einschalten des Bewegungssensors hat. Jetzt kommen noch ein paar Zeilen hinzu.

Aber als erstes brauchen wir die ISE IDs der Systemvariablen die angelegt wurden. (wecker_person1, wecker_person1_fertig, usw…) Zum Testen jetzt einfach im Browser eingeben: (wobei xxxxx natürlich durch die ID ersetzt werden muss)

http://[IP der CCU]/config/xmlapi/state.cgi?datapoint_id=xxxxx (wichtigste URL heute)

Jetzt zum “spannenden” Teil! Task „Aufgewacht“ öffnen und weiter geht’s… (Mein Beispiel hat nur zwei Personen, man kann es aber einfach erweitern)

Zeile 2: auf + klicken und nach „http Get“ suchen und unter Server:Port die „wichtigste URL heute“ mit der ID für „wecker_person1_fertig“ eingeben.
Zeile 3: nach „Warte“ suchen „MS“ auf 100 stellen und ganz unten bei „bis“ auf dem Variable-Button klicken und %HTTPD auswählen (bzw. %HTTPD schreiben – für die, die nicht so faul sind :p) und rechts davon den Vergleichsoperator auf „Ist gesetzt“ setzen.
Zeile 4: nach „Variable Aufteilen“ suchen, unter „Name“ %HTTPD und unter „Teiler“ value=‘ eingeben.
Zeile 5: nach „Variable Aufteilen“ suchen, unter „Name“ %HTTPD2 und unter „Teiler“ ‚/> eingeben.
Zeile 6: nach „Variable Setzen“ suchen, unter „Name“ sowas wie %wecker_person1_aus und bei „Zu“ %HTTPD21 eingeben.

Soo… jetzt mal ein Kaffee trinken. Nach diesen 5 Zeilen haben wir lediglich den Wert für eine Variable geholt.  Man könnte natürlich alles in der CCU so vorbereiten, dass alle Variablen mit einem Trenner in eine Textvariable gespeichert wird, aber das wäre ja zu leicht und man hätte dann viel Zuviel Zeit, was dem Partner dazu verleiten könnte, den Wohnzimmer neu zu streichen (Neubau 2 Jahre alt, aber ich würde es ihr zutrauen) oder ähnliches. Also gleich alles nochmal… diesmal aber mit „wecker_person2_fertig“ und als Endvariable „%wecker_person2_aus“.

Zeile 7: auf + klicken und nach „http Get“ suchen und unter Server:Port die „wichtigste URL heute“ mit der ID für „wecker_person2_fertig“ eingeben.

Zeile 11: nach „Variable Setzen“ suchen, unter „Name“ sowas wie %wecker_person2_aus und bei „Zu“ %HTTPD21 eingeben.

Spätestens jetzt wisst ihr, was ihr am TeamViewer habt ;)

Zeile 12: nach „If“ suchen und zwei Bedingungen hinzufügen (%wecker_person1_aus „Stimmt überein“ false oder %wecker_person2_aus „Stimmt überein“ false)
Die oben angelegten Variablen %wecker_person1_aus und %wecker_person2_aus sagen also aus, dass unser Tablet bereits die Person begrüßt hat. Wenn das nicht der Fall sein sollte, dann ist wahrscheinlich, dass die Person die jetzt vorm Tab steht, eine nette Begrüßung erwartet. Ok… aber bevor wir was sagen, sollten wir mal den Ton überprüfen. Vielleicht ist das Tab ja auf lautlos gestellt!!
Zeile 13: nach „Variable Setzen“ suchen „Name“ auf %oldvolume und „Zu“ auf %VOLM setzen. So haben wir schon mal die Originallautstärke gespeichert, um diese später wiederherstellen zu können.

Jetzt bitte nicht weinen, aber wir brauchen leider noch die zwei anderen Variablen aus der CCU „wecker_person1“ und „wecker_person2“ um zu wissen ob der Wecker überhaupt geklingelt hat.

Zeile 14: auf + klicken und nach „http Get“ suchen und unter Server:Port die „wichtigste URL heute“ mit der ID für „wecker_person1“ eingeben.

Zeile 18: nach „Variable Setzen“ suchen, unter „Name“ sowas wie %wecker_person1 und bei „Zu“ %HTTPD21 eingeben.
Zeile 19: auf + klicken und nach „http Get“ suchen und unter Server:Port die „wichtigste URL heute“ mit der ID für „wecker_person2“ eingeben.

Zeile 23: nach „Variable Setzen“ suchen, unter „Name“ sowas wie %wecker_person2 und bei „Zu“ %HTTPD21 eingeben.

Jetzt wird’s endlich lustig!!

//Nachricht für alle (wenn das System nicht weiß wer davor steht)
Zeile 24: nach „If“ suchen und vier Bedingungen hinzufügen (%wecker_person1 „Stimmt überein“ true und %wecker_person2 „Stimmt überein“ true und %wecker_person1_aus „Stimmt überein“ false und %wecker_person2_aus „Stimmt überein“ false)
Zeile 25: nach „Medienlautstärke“ suche und Level auf 8 stellen.
Zeile 26: nach „Variable Setzen“ suchen „Name“ auf %wecker_person1 und „Zu“ auf false setzen (damit es im nächsten If nicht rein geht)
Zeile 27: nach „Variable Setzen“ suchen „Name“ auf %wecker_person2 und „Zu“ auf false setzen (damit es im übernächsten If nicht rein geht)

Jetzt nicht vergessen der CCU mitzuteilen, dass schon Guten Morgen gesagt wurde.

Zeile 28: nach „HTTP Get“ suchen „Server:Port“ auf http://[IP der CCU]/config/xmlapi/statechange.cgi?ise_id=xxxxx&new_value=true, wobei xxxxx die ISE ID von "wecker_person1_aus" ist.
Zeile 29: nach „HTTP Get“ suchen „Server:Port“ auf http://[IP der CCU]/config/xmlapi/statechange.cgi?ise_id=xxxxx&new_value=true, wobei xxxxx die ISE ID von "wecker_person2_aus" ist.

Soo... endlich Lesen!!! Es lebt!!! :D

Zeile 30: nach „Vorlesen“ suchen und als Text „Guten Morgen Familie“ Eingeben.
Zeile 31: nach „End If“ suchen

Nur mal so nebenbei. Vielleicht hat der eine oder andere gemerkt, dass ich gar nicht nach Anwesenheit prüfe… Ja! Ich habt recht, aber ihr habt auch gesehen wieviel ich schon geschrieben habe und da müsst ihr eigentlich nur noch die eine Variable (pro Person) aus der CCU holen und einbauen… aber wie gesagt. Ihr könnt auch versuchen alle nötigen Variablen auf einmal zu hole (siehe weiter oben)

//Person1
Zeile 32: nach „If“ suchen und zwei Bedingungen hinzufügen (%wecker_person1 „Stimmt überein“ true und %wecker_person1_aus „Stimmt überein“ false)
Zeile 33: nach „Medienlautstärke“ suche und Level auf 8 stellen.
Zeile 34: nach „HTTP Get“ suchen „Server:Port“ auf http://[IP der CCU]/config/xmlapi/statechange.cgi?ise_id=xxxxx&new_value=true, wobei xxxxx die ISE ID von "wecker_person1_aus" ist.
Zeile 35: nach „Vorlesen“ suchen und als Text „Guten Morgen Person1“ Eingeben.
Zeile 36: nach „End If“ suchen
//Person2
Zeile 37: nach „If“ suchen und zwei Bedingungen hinzufügen (%wecker_person2 „Stimmt überein“ true und %wecker_person2_aus „Stimmt überein“ false)
Zeile 38: nach „Medienlautstärke“ suche und Level auf 8 stellen.
Zeile 39: nach „HTTP Get“ suchen „Server:Port“ auf http://[IP der CCU]/config/xmlapi/statechange.cgi?ise_id=xxxxx&new_value=true, wobei xxxxx die ISE ID von "wecker_person2_aus" ist.
Zeile 40: nach „Vorlesen“ suchen und als Text „Guten Morgen Person2“ Eingeben.
Zeile 41: nach „End If“ suchen

PARTYYYYYYYYY!!!! Nur noch zwei Zeilen, dann sind wir fertig… vorerst :P

Zeile 42: nach „Medienlautstärke“ suche und Level auf %oldvolume stellen. (Damit die ursprüngliche Lautstärke wieder eingestellt wird.) Beim Level hast du nur ein Schieber zur Verfügung und kannst keine Variable eintragen? :shock: Ok… die ganze Arbeit war für die Katze… Spaß! :D Klicke einfach rechts vom Level auf die zwei sich kreuzenden Pfeile und schon kannst du eine Variable eingeben.
Zeile 43: nach „End If“ suchen

Jetzt muss man in der CCU ein Programm schreiben, der alle 4 Variablen wieder auf Originalzustand bringt. Das Programm sollte einmal am Tag ganz früh in der Morgen laufen... Bei uns läuft es um 04:25 Uhr. Warum aber so spät/früh? Ganz einfach... immer wenn das Tab in der Küche an geht, wird dieser Task ausgeführt. Wenn aber die zwei Wecker-Aus-Variablen auf true sind, geht es gar nicht in den If rein.

Wenn Zeitsteuerung täglich um 04:25 dann Systemzustand wecker_person1 und wecker_person2 auf aus und wecker_person1_aus und wecker_person2_aus auf nein. (wird im Schritt 3 noch erweitert)

Soo… jetzt ist nicht nur Teil 2 von Schritt 2 fertig… nee… auch ich bin erledigt. Wer Schreibfehler findet kann es gerne behalten und für Fragen bzw. Verbesserungsvorschläge bin ich gerne zu haben. Ich brauche jetzt ein Bier…. „Haus!! Hole mir ein Bier…“ :P Das geht leider NOCH nicht…
Download: WebMatic 2.2.3. Für den Kauf von HM Geräte zur schnellere Weiterentwicklung von Webmatic, werden auch gerne SPENDEN entgegen genommen. Danke! Und hier geht es zur WebMatic Homepage

Benutzeravatar
ldittmar
Beiträge: 467
Registriert: 07.03.2015, 12:21
System: CCU
Danksagung erhalten: 1 Mal

Re: Vergiss nicht zu Tanken...

Beitrag von ldittmar » 01.11.2015, 11:52

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:
  • Google Calendar
  • Google Script
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.
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.

Code: 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);
}
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 Pause :P

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.
10-02-_2016_09-18-43.png
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:

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 = "";
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ß…
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:
  • 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.
Natürlich für Perso1 und Perso2 die Werte der jeweiligen Systemvariablen holen.

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 :wink: ! Die Odyssee geht weiter :p
Zuletzt geändert von ldittmar am 15.02.2016, 20:40, insgesamt 5-mal geändert.
Download: WebMatic 2.2.3. Für den Kauf von HM Geräte zur schnellere Weiterentwicklung von Webmatic, werden auch gerne SPENDEN entgegen genommen. Danke! Und hier geht es zur WebMatic Homepage

dtp
Beiträge: 10660
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 321 Mal
Danksagung erhalten: 501 Mal

Re: Vergiss nicht zu Tanken...

Beitrag von dtp » 02.11.2015, 11:40

Sehr interessanter Thread.

Mit meiner Frau leider nicht zu machen. Als ich das Tablet im Flur anbrachte und ihr sagte, dass das Ding auch reden könne, sagte sie nur zu mir:

"Mach mit Deiner HomeMatic was Du willst, aber wenn das Scheißding irgendwann auch nur im Ansatz mit mir reden will, lass ich mich scheiden."

Und das war leider kein Scherz. Da ich auch selbst kein Freund von Sprachein- und ausgaben bin, habe ich es bei der reinen visuellen Anzeige belassen. Mein Frau schaut praktisch nie auf das Tablet und ist froh, wenn sie möglichst wenig von der HM mitbekommt.

Such is life.

Bis dann,

Thorsten

PS.: Dieser Thread bringt mich aber gerade auf die Idee, evtl. mal "Mercedes me" in DashUI einzubinden.

PPS.: Ich lass mein Tablet übrigens permanent am Netzteil nuckeln. Dieses ewige Auf- und Entladen nützt dem LiIon-Akku auch nicht unbedingt mehr, als ein Trickle Charge. Das Display meines Tablets schalte ich zudem entweder über bestimmte Ereignisse (z.B. Änderung des Schließzustands eines Fensters) oder über einen in der Nähe angebrachten Lichtschalter ein. Bei mir hat sich die Verwendung der integrierten Kamera als Bewegungsmelder ebenso wenig als vorteilhaft herausgestellt, wie das Verwenden eines HM-Bewegungsmelders. Aber wie gesagt, bei uns hängt das Tablet in Flur, wo relativ viel Durchgangsverkehr herrscht.
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

Benutzeravatar
ldittmar
Beiträge: 467
Registriert: 07.03.2015, 12:21
System: CCU
Danksagung erhalten: 1 Mal

Re: Vergiss nicht zu Tanken...

Beitrag von ldittmar » 02.11.2015, 12:56

Hi Thorsten,
dtp hat geschrieben:Sehr interessanter Thread.

Mit meiner Frau leider nicht zu machen. Als ich das Tablet im Flur anbrachte und ihr sagte, dass das Ding auch reden könne, sagte sie nur zu mir:

"Mach mit Deiner HomeMatic was Du willst, aber wenn das Scheißding irgendwann auch nur im Ansatz mit mir reden will, lass ich mich scheiden."
Ohh... dann würde ich es sein lassen... solange dein Haus nicht selber kochen kann, wirst du nur verlieren. :P
dtp hat geschrieben: PS.: Dieser Thread bringt mich aber gerade auf die Idee, evtl. mal "Mercedes me" in DashUI einzubinden.

PPS.: Ich lass mein Tablet übrigens permanent am Netzteil nuckeln. Dieses ewige Auf- und Entladen nützt dem LiIon-Akku auch nicht unbedingt mehr, als ein Trickle Charge. Das Display meines Tablets schalte ich zudem entweder über bestimmte Ereignisse (z.B. Änderung des Schließzustands eines Fensters) oder über einen in der Nähe angebrachten Lichtschalter ein. Bei mir hat sich die Verwendung der integrierten Kamera als Bewegungsmelder ebenso wenig als vorteilhaft herausgestellt, wie das Verwenden eines HM-Bewegungsmelders. Aber wie gesagt, bei uns hängt das Tablet in Flur, wo relativ viel Durchgangsverkehr herrscht.
Dein Auto einzubinden ist wirklich kein Problem und bald wird meine genaue Hilfestellung folgen. Was das ein- und ausschalten der Tabs hängt ja immer von der Position. Bei mir in der Küche funktioniert ja wunderbar, aber ich will jetzt in jeden Zimmer, direkt an der Tür, so ein Ding hinhängen. Dafür suche ich noch ein günstigen, kleinen Tab mit Näherungssensor. Ich glaube sogar eins gefunden zu haben, warte aber noch auf die Antwort vom Hersteller, ob es wirklich so ein Sensor an Board hat. :wink:

Grüße,
ldittmar

P.S.: Sprachsteuerung könntest du ja aber einbauen, denn davon würde dein Frau nichts mitbekommen :P
Download: WebMatic 2.2.3. Für den Kauf von HM Geräte zur schnellere Weiterentwicklung von Webmatic, werden auch gerne SPENDEN entgegen genommen. Danke! Und hier geht es zur WebMatic Homepage

Antworten

Zurück zu „Projektvorstellungen“