Homematic und Google Apps

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

dwm
Beiträge: 207
Registriert: 10.08.2010, 21:56

Homematic und Google Apps

Beitrag von dwm » 28.12.2012, 20:54

Seit längerem schwebt mir bereits vor, meine Urlaubstage nicht in eine Systemvariable einzutragen, sondern das komfortabel über einen Kalender zu erledigen.

Deswegen hab ich heute mal einen kleinen Basteltag eingelegt: Wie verheirate ich den Google Kalender mit meiner Homematic?
Idee: Wenn es im Google Kalender ein Event "Urlaub" gibt, wird in der Homematic die "Urlaub" Systemvariable gesetzt.

Ich verwende dazu das (leider nicht mehr kostenlos erhältliche) Google Apps, aber es funktioniert genau so auch mit einem normalen Google-Mail Account.

Schritt 1:
Man erzeuge eine "Site", also eine Webpräsenz bei Google (sites.google.com). Wir brauchen das nur für eines: Wir brauchen einen Zugang zu den App-Scripts.
Dazu klicken wir auf unserer erzeugten Site auf das "Mehr" Menu (oben rechts) und rufen "Website verwalten" auf.
Auf der linken Seite bekommen wir jetzt, was wir alles mit unserer Site anstellen können, uns interessiert "App Scripts".

Google App Scripts sind im wesentlichen Javascript API's für FAST alles, was man auch mit der Google Web Oberfläche anstellen kann, und seit kurzem gibt
es dort auch einen "Content Service", mit dem man sehr einfach Web-Services bauen kann.

Ich möchte dazu wirklich auf die App-Scripts Dokumentation verweisen:
https://developers.google.com/apps-scri ... e?hl=de-DE

Die Idee ist jetzt, einen Web Service zu bauen, der "einfach" zurückliefert, ob am aktuellen Datum ein Event "Urlaub" im Kalender steht.
Das geht jetzt relativ einfach - wir nehmen dazu folgenden Code:

Code: Alles auswählen

// Script-as-app template.
function doGet(request) {
  var answer = "1.0";

  if ( request.parameters.cmd == "urlaub" )
  {
    answer = getVacation();
  }
  else if (request.parameters.cmd == "events" )
  {
    answer = getEventsToday();
  }

  return ContentService.createTextOutput(answer);
}

function getVacation()
{
  var today = new Date();
  today.getTime();

  var events = CalendarApp.getEventsForDay(today);
  
  var result = "0";
  
  for (var i=0; i<events.length; i++)
  {
    if (events[i].getTitle() == "Urlaub")
    {
      result="1";
      break;
    }
  }
  
  return (result);
}

function getEventsToday()
{
  var today = new Date();
  today.getTime();

  var events = CalendarApp.getEventsForDay(today);
  
  var result = "";
   
  for (var i=0; i<events.length; i++)
  {
    if ( result.length > 0)  {
      result = result+";";
    }
    result = result + events[0].getTitle().toLowerCase();
  }
  
  return (result);
}

Das müssen wir jetzt als Web-Service veröffentlichen - dazu muss man eine "Version" abspeichern (Datei->Version abspeichern) und dann mit Veröffentlichen->Als Web App einrichten
Ich lasse die Web App für alle freigegeben, die URL ist mir kompliziert genug - wenn jemand Sicherheitsbedenken hat, muss man rausfinden wie man mit curl auf dem Google Server authentisiert :)

So, was man in dem Dialog dann findet ist die URL unseres Webservices - sieht etwa so aus:

Code: Alles auswählen

https://script.google.com/macros/s/snvfsdsasifxxvsdfjs_siaonefoiwffeseig/exec
(Nein, das ist NICHT meine URL) :)

Wenn man das im Browser aufruft, wird man ein lapidares "1.0" zurück bekommen - die Version unseres Web services.
Mit

Code: Alles auswählen

https://script.google.com/macros/s/snvfsdsasifxxvsdfjs_siaonefoiwffeseig/exec?cmd=urlaub
sollte jetzt entweder "1" oder "0" zurück kommen - ob halt an diesem Tag ein Event mit dem Titel "Urlaub" eingetragen ist, oder eben nicht.

Wenn das klappt, sind wir einen grossen Schritt weiter:

Schritt 2:
Curl auf der CCU installieren. Dazu gibts hier http://homematic-forum.de/forum/viewtop ... 326#p35326 die Binaries und die Anleitung.

Schritt 3:
Das Ganze verheiraten. Wir brauchen jetzt ein Programm auf der CCU, das kurz nach Mitternacht läuft - bei mir heisst das Ding "Google Apps Interface" und läuft per Zeitmodul täglich um 0:08.
Zusätzlich brauchen wir eine Systemvariable (Boolean) mit dem Namen "Urlaub".
Das Programm ruft ein Script auf:

Code: Alles auswählen

!! Holt den Urlaubsstatus von Google Apps

var url="https://script.google.com/macros/s/snvfsdsasifxxvsdfjs_siaonefoiwffeseig/exec";
var cmd = "curl -s -k -L " # url # "?cmd=urlaub";
 
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State(cmd);
var v = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();

var oUrlaub = dom.GetObject("Urlaub");

if ( v == "1" ) 
{
    oUrlaub.State ( true );
}
else
{
    oUrlaub.State ( false );
}
Ich benutze die Exec Engine von CuxD, im Prinzip muss es mit System.Exec auch funktionieren.

Code: Alles auswählen

var url=...
muss man natürlich die URL des eigenen Web-Services reinkopieren.


Noch ein paar Anmerkungen:
- Ich hab mich bewusst für Plain-Text Antworten entschieden, damit die CCU nicht gross "rumparsen" muss. Google Apps kann auch XML oder JSON liefern.
- Der Web Service kann auch noch die Liste der Events am aktuellen Tag liefern ... dazu mit

Code: Alles auswählen

https://script.google.com/macros/s/snvfsdsasifxxvsdfjs_siaonefoiwffeseig/exec?cmd=events
aufrufen, es kommen die Titel der Events, getrennt mit Semikolon zurück. Vieleicht fallen dem einen oder anderen ja noch Sachen ein :)
- Es ist vermutlich eine gute Idee, für die Homematic einen eigenen Google Account anzulegen - das Script läuft mit den Rechten des Account Inhabers. Mit einem eigenen Account kann durch Freigaben die Rechte sehr viel feiner steuern.
- Das ganze ist erst einmal ein "Proof of Concept", um rauszufinden ob das alles tut. Mir fallen noch viele lustige Sachen ein, was man mit dem Interface zu Google machen kann ... Heizungsabsenkung für längere Abwesenheiten, das ultimative Weckerinterface (ich überlege grade wie das mit den CuxD Timern zusammenspielt ...)
194 Kanäle in 101 Geräten:
3x HM-LC-Sw1-Pl, 7x HM-LC-Sw1-PB-FM, 2x HM-WDS10-TH-O, 22x HM-Sec-SC, 4x HM-Sec-MDIR, 4x HM-Sen-MDIR-O, 3x HM-LC-Dim1T-FM, 1x HM-PB-4Dis-WM, 1x HM-RC-19, 1x HM-Sec-TiS, 2x HM-OU-CF-Pl, 1x HM-RC-4-B, 9x HM-CC-VD, 7x HM-CC-TC, 3x HM-WDS30-T-O, 1x HM-CCU-1, 1x HM-LC-Sw2-PB-FM, 1x HM-LC-Sw1PBU-FM, 6x HM-PB-2-WM, 1x HM-LC-Dim2T-SM, 5x HM-PB-4-WM, 1x HM-LC-Sw2-FM, 1x HM-OU-CFM-Pl, 1x HM-LC-Bl1PBU-FM, 4x HM-LC-Bl1-PB-FM, 4x HM-LC-Sw4-SM, 3x HM-Sec-WDS

dbergner
Beiträge: 1
Registriert: 01.01.2013, 17:43

Re: Homematic und Google Apps

Beitrag von dbergner » 01.01.2013, 23:06

Hallo dwm,

sehr coole Sache mit dem Google Apps und super Anleitung. Wollte mich auch gerade damit befassen und das hat mir eine Menge Sucharbeit erspart.

Ich habe das Ganze mal für meine Bedürfnisse erweitert, vielleicht kann ja jemand anders damit auch was anfangen. Folgende Dinge habe ich ergänzt bzw. modifiziert:

Absicherung mit Kennwort

Ich habe einen zusätzliche Parameter 'pwd' eingebaut und ein entsprechendes Kennwort im Script hinterlegt. Da die Kommunikation zu Google Scripts ohnehin schon via https verschlüsselt ist, dürfte diese Methode hinreichend sicher sein und es kann auch ohne extra Konto und Authentifizierung niemand das Makro missbrauchen.

Der Aufruf wäre dann zu ändern auf: '...exec?pwd=hier_steht_das_passwort&cmd=urlaub' und die angepasste Funktion sieht bei mir dann so aus:

Code: Alles auswählen

function doGet(request) {
  var answer = "0.4beta";

  if ( request.parameters.pwd == "hier_steht_das_passwort") //define your password here for secure script access
  {
    if ( request.parameters.cmd == "urlaub" )
    {
      answer = getVacation();
    }
    else if (request.parameters.cmd == "events" )
    {
      answer = getEventsToday();
    }
    return ContentService.createTextOutput(answer);
  }
  else
  {
    return ContentService.createTextOutput("unauthorized");
  }
}
Anwesenheit während des Urlaub und nächster Tag

Für meine Zwecke war nicht nur interessant ob ich heute Urlaub habe, sondern auch ob ich morgen noch frei habe. Oft bin ich in diesen Fällen länger wach und möchte deshalb die Heizzeiten am Abend verlängern bzw. eine Anwesenheitssimulation fahren, wenn ich nicht da bin. Ich habe deshalb die Funktion getVacation() etwas ausgebaut.

Es werden jetzt folgende Funktionen unterstützt:
  • Prüfung auf Urlaub heute und morgen
    Mittels der Suchbegriffe im Pattern 'pattVacation' kann man einstellen, welche Einträge als Urlaub gewertet werden.
  • Prüfung, ob ich den Urlaubstag zu Hause verbringe anhand von Titel, Beschreibung oder Ort
    Verantwortlich dafür ist das Suchpattern 'pattHome'. Durch die Prüfung von Titel, Beschreibung und Ort ist man nicht gezwungen die Ortsangabe zu verwenden, sondern kann z.B. auch einfach "Urlaub zu Hause" oder "homeoffice" in den Kalender eintragen und es wird erkannt.
  • Schnellere Anpassung der Suchbegriffe durch RegExp, s.o.
  • simple Codierung der Info als Bit Maske, daher trotzdem nur ein Rückgabewert:
    Der Rückgabewert ist eine Dezimalzahl, die eine entsprechende vierstellige Bitmaske repräsentiert. Es können daher durch Auswertung einer einzigen Zahl alle möglichen Kombinationen abgedeckt werden.

Code: Alles auswählen

function getVacation()
//creates a bit mask including todays and tomorrows vacation information
{
  //init dates
  var today = new Date();
  today.getTime();
  var tomorrow = new Date();
  tomorrow.setTime(tomorrow.getTime(­ ) + (1000*3600*24));
  //init bit mask and flags
  var result = 0x0; //0000 - initial value 
  var vacationToday = 0x1; // 0001 - today is an vacation day
  var atHomeToday = 0x2; // 0010 - vacation today is at home
  var vacationTomorrow = 0x4; // 0100 - tomorrow is an vacation day
  var atHomeTomorrow = 0x8; // 1000 - vacation tomorrow is at home
  //add here your search definitions for vacation description and location 'home'
   var pattVacation=new RegExp('urlaub|vacation|frei|homeoffice','i');
   var pattHome=new RegExp('hause|home','i');
  
  //get information about today's vacation
  var eventsToday = CalendarApp.getEventsForDay(today);
  for (var i=0; i<eventsToday.length; i++)
  {
    //check event title
    if (pattVacation.test(eventsToday[i].getTitle()))
    {
      result = result | vacationToday;
      //
      if (pattHome.test(eventsToday[i].getTitle()) || pattHome.test(eventsToday[i].getLocation())|| pattHome.test(eventsToday[i].getDescription()))
      {
        result = result | atHomeToday;
      }
    }
  }
  //get information about tomorrow's vacation
  var eventsTomorrow = CalendarApp.getEventsForDay(tomorrow);
  for (var i=0; i<eventsTomorrow.length; i++)
  {
    if (pattVacation.test(eventsTomorrow[i].getTitle()))
    {
      result = result | vacationTomorrow;
      if (pattHome.test(eventsTomorrow[i].getTitle()) || pattHome.test(eventsTomorrow[i].getLocation())|| pattHome.test(eventsTomorrow[i].getDescription()))
      {
        result = result | atHomeTomorrow;
      }
    }
  }
  return (result.toString());
}
Die möglichen (sinnvollen) Rückgabewerte sind damit:
  • 0 - kein Urlaub heute / kein Urlaub morgen
  • 1 - Urlaub heute, abwesend / kein Urlaub morgen
  • 3 - Urlaub heute zu Hause / kein Urlaub morgen
  • 4 - kein Urlaub heute / Urlaub morgen, abwesend
  • 5 - Urlaub heute, abwesend / Urlaub morgen, abwesend
  • 7 - Urlaub heute zu Hause / Urlaub morgen, abwesend
  • 12 - kein Urlaub heute / Urlaub morgen zu Hause
  • 13 - Urlaub heute, abwesend / Urlaub morgen zu Hause
  • 15 - Urlaub heute zu Hause / Urlaub morgen zu Hause
Sonstige Ideen

Beim Spielen mit der Google Kalender API ist mir so in den Sinn gekommen, dass man ja damit auch über die CCU schreibend auf den Kalender zugreifen kann. es wäre also z.B. auch denkbar, einen eigenen HomeMatic Kalender anzulegen und wichtige (oder auch unwichtige :) ) Ereignisse als eine Art Historie in einem Google Kalender zu protokollieren... :?:

Hoffe das war jetzt nicht zu viel Spinnerei für meinen ersten Forenbeitrag :roll:

BxA
Beiträge: 167
Registriert: 15.03.2012, 17:34

Re: Homematic und Google Apps

Beitrag von BxA » 03.01.2013, 13:38

Danke euch beiden, finde ich sehr spannend!
Etwas in die Richtung geistert mir auch schon länger im Kopf rum - werde ich in den nächsten Tagen / Wochen mal versuchen mit euren Scripten zu realisieren!
Homematic System im Aufbau...
317 Kanäle in 45 Geräten:
2x HM-Sec-SC, 7x HM-CC-VD, 7x HM-CC-TC, 1x HM-EM-CCM, 14x HMW-IO-12-Sw7-DR, 1x HM-RC-Key3-B, 1x HM-Sec-Key, 8x HMW-LC-Bl1-DR, 1x HM-Sec-TiS, 1x HM-WDS100-C6-O, 1x HM-LC-Sw4-WM, 1x HM-CCU-1

BxA
Beiträge: 167
Registriert: 15.03.2012, 17:34

Re: Homematic und Google Apps

Beitrag von BxA » 04.01.2013, 10:04

Schöne Sache, klappt prima!

An zwei Stellen hatte ich Probleme aber für mich Lösungen gefunden - die möchte ich mit euch teilen, falls es anderen ähnlich geht:
1) Ich konnte mir bei google keine Site einrichten. Unter "Mehr" gibt es bei mir die Option "Website verwalten" einfach nicht (oder ich habe es nicht gefunden...). Ich führe das darauf zurück, dass ich kein google Apps habe.
Lösung: den Schritt einfach überspringen und stattdessen manuell auf die URL script.google.com navigieren. Hier im Auswahlmenü links "Script als Web-App" auswählen. Damit ist man im Code Editor und kann weiter machen wie von dwm beschrieben. URL wird am Ende auch bereitgestellt - habe keinerlei Nachteil gefunden

2) Nachdem ich das Script im Editor geschrieben hatte, konnte ich es unter der angegebenen URL noch nicht ausführen (keine Berechtigung)
Lösung: Im Script Editor einmal auf gehen auf "Ausführen" -> "getVacation". Dann merkt er, dass er die Rechte für den Kalender braucht und fragt ob man sie ihm geben will -> bestätigen -> nun klappts

3) Schließlich hatte mein CURL ein Problem damit, mehrere Parameter in der URL zu übergeben (nötig um den Passwortschutz von dbergner einzubauen).
Lösung: URL in ' ' setzten. Dann sieht der CURL Befehl im Homematic script insgesamt z.b. so aus:

Code: Alles auswählen

    !! Holt den Urlaubsstatus von Google Apps

    var url="https://script.google.com/macros/s/snvfsdsasifxxvsdfjs_siaonefoiwffeseig/exec";
    var cmd = "curl -s -k -L '" # url # "?cmd=urlaub&pwd=MeinPasswort'";
     
    dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State(cmd);
    var v = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
Nun klappt bei mir alles.
Besten Dank nochmal für die Anleitung!

Habe mir hierfür übrigens einen eigenen google account angelegt mit eigenem Kalender, diesen Kalender dann aber meinen Haupt-Googleaccount freigegeben. Script läuft unter dem neuen account. So kann ich (+ weitere Familienmitgliedern denen ich den Kalender frei gebe) bequem von meinem Hauptaccount die Termine erstellen, aber es bleibt schön sortiert und das Script kann nicht auf all meine Kalendereinträge zugreifen
Homematic System im Aufbau...
317 Kanäle in 45 Geräten:
2x HM-Sec-SC, 7x HM-CC-VD, 7x HM-CC-TC, 1x HM-EM-CCM, 14x HMW-IO-12-Sw7-DR, 1x HM-RC-Key3-B, 1x HM-Sec-Key, 8x HMW-LC-Bl1-DR, 1x HM-Sec-TiS, 1x HM-WDS100-C6-O, 1x HM-LC-Sw4-WM, 1x HM-CCU-1

dwm
Beiträge: 207
Registriert: 10.08.2010, 21:56

Re: Homematic und Google Apps

Beitrag von dwm » 11.01.2013, 10:58

Freut mich, dass meine kleine Bastelei Anklang findet.

Ich bin gerade auf einen ziemlich bösen Bug bei den Google all day events gestoßen - die "dauern" nämlich von Mitternacht bis Mitternacht des folgenden Tages - allerdings NUR in UTC.

Damit gibts Überlapps, und speziell wenn man das Script um 0:23 aufruft ists ganz doof - dann kriegt man nämlich die Events des vorherigen und aktuellen Tages.

Bin grad am Hotfix, kommt dieses Wochenende.
194 Kanäle in 101 Geräten:
3x HM-LC-Sw1-Pl, 7x HM-LC-Sw1-PB-FM, 2x HM-WDS10-TH-O, 22x HM-Sec-SC, 4x HM-Sec-MDIR, 4x HM-Sen-MDIR-O, 3x HM-LC-Dim1T-FM, 1x HM-PB-4Dis-WM, 1x HM-RC-19, 1x HM-Sec-TiS, 2x HM-OU-CF-Pl, 1x HM-RC-4-B, 9x HM-CC-VD, 7x HM-CC-TC, 3x HM-WDS30-T-O, 1x HM-CCU-1, 1x HM-LC-Sw2-PB-FM, 1x HM-LC-Sw1PBU-FM, 6x HM-PB-2-WM, 1x HM-LC-Dim2T-SM, 5x HM-PB-4-WM, 1x HM-LC-Sw2-FM, 1x HM-OU-CFM-Pl, 1x HM-LC-Bl1PBU-FM, 4x HM-LC-Bl1-PB-FM, 4x HM-LC-Sw4-SM, 3x HM-Sec-WDS

dwm
Beiträge: 207
Registriert: 10.08.2010, 21:56

Re: Homematic und Google Apps

Beitrag von dwm » 15.01.2013, 14:46

So, hier mal ein Fix für den Webservice. Ich habe die Abfrage auf die Events jetzt in eine eigene Funktion gekapselt, die sowohl All-Day Events als eben auch Termine richtig zurückliefert.

dbergners Erweiterung gefällt mir recht gut, habe ich jetzt als eigene Funktion getVacationEx eingebaut und wird mit cmd=urlaub_ex aufgerufen.

Code: Alles auswählen


function doGet(request) {
  var answer = "1.3";
  if ( request.parameters.pwd == "wrdlbrmpft")
  {
    if ( request.parameters.cmd == "urlaub" )
    {
      answer = getVacation();
    }
    else if (request.parameters.cmd == "urlaub_ex" )
    {
      answer = getVacationEx();
    }
    else if (request.parameters.cmd == "events" )
    {
      answer = getEventsToday();
    }
  }    
  return ContentService.createTextOutput(answer);
}

// corrects a google bug in all day events
function daysEvents( aDate )
{
  var now = new Date( aDate );
  now.setHours(12);
  now.setMinutes(0);
  now.setSeconds(0);

  var startOfDay = new Date(now);
  startOfDay.setUTCHours(0);
  startOfDay.setMinutes(0);
  startOfDay.setSeconds(0);
  startOfDay.setMilliseconds(0);  
  var endOfDay = new Date(startOfDay.getTime() + 24 * 60 * 60 * 1000);
  
  var events = CalendarApp.getDefaultCalendar().getEvents(startOfDay, endOfDay);
  var result = new Array;
  
  for (var i=0; i<events.length; i++)
  {
    var theTitle=events[i].getTitle();
    if ( events[i].isAllDayEvent() )
    {
      result.push(events[i]);
    }
  }
  
  events = CalendarApp.getEventsForDay( now );
  for (var i=0; i<events.length; i++)
  {
    var theTitle=events[i].getTitle();
    if ( !events[i].isAllDayEvent() )
    {
      result.push(events[i]);
    }
  }
    
  return result;
}

// corrects a google bug in all day events
function todaysEvents()
{
  var now = new Date();

  var events = daysEvents( now );
  return events;
}

function tomorrowsEvents()
{
  var now = new Date();
  var tomorrow = new Date(now + (1000*3600*24));

  var events = daysEvents( tomorrow );
  return events;
}

function getVacation()
{
  var events = todaysEvents();
  
  var result = "0";
  
  //add here your search definitions for vacation description and location 'home'
  var pattVacation=new RegExp('urlaub|vacation|frei','i');
  // var pattHome=new RegExp('hause|home','i');

  
  for (var i=0; i<events.length; i++)
  {
    var theTitle=events[i].getTitle();
    if ( pattVacation.test(events[i].getTitle()) && events[i].isAllDayEvent() )
    {
      result="1";
      break;
    }
  }
  
  return (result);
}

// added from http://homematic-forum.de/forum/viewtopic.php?f=31&t=11386#p84827

function getVacationEx()
//creates a bit mask including todays and tomorrows vacation information
{
  //init bit mask and flags
  var result = 0x0; //0000 - initial value
  var vacationToday = 0x1; // 0001 - today is an vacation day
  var atHomeToday = 0x2; // 0010 - vacation today is at home
  var vacationTomorrow = 0x4; // 0100 - tomorrow is an vacation day
  var atHomeTomorrow = 0x8; // 1000 - vacation tomorrow is at home
  
  //add here your search definitions for vacation description and location 'home'
  var pattVacation=new RegExp('urlaub|vacation|frei|homeoffice','i');
  var pattHome=new RegExp('hause|home','i');
  
  //get information about today's vacation
  var eventsToday = todaysEvents();
  for (var i=0; i<eventsToday.length; i++)
  {
    //check event title
    if (pattVacation.test(eventsToday[i].getTitle()))
    {
      result = result | vacationToday;
      //
      if (pattHome.test(eventsToday[i].getTitle()) || pattHome.test(eventsToday[i].getLocation())|| pattHome.test(eventsToday[i].getDescription()))
      {
        result = result | atHomeToday;
      }
    }
  }
  
  //get information about tomorrow's vacation
  var eventsTomorrow = tomorrowsEvents();
  for (var i=0; i<eventsTomorrow.length; i++)
  {
    if (pattVacation.test(eventsTomorrow[i].getTitle()))
    {
      result = result | vacationTomorrow;
      if (pattHome.test(eventsTomorrow[i].getTitle()) || pattHome.test(eventsTomorrow[i].getLocation())|| pattHome.test(eventsTomorrow[i].getDescription()))
      {
        result = result | atHomeTomorrow;
      }
    }
  }
  return (result.toString());
}

function getEventsToday()
{
  var events = todaysEvents();
  
  var result = "";
   
  for (var i=0; i<events.length; i++)
  {
    if ( result.length > 0)  {
      result = result+";";
    }
    result = result + events[i].getTitle().toLowerCase();
  }
  
  return (result);
}
194 Kanäle in 101 Geräten:
3x HM-LC-Sw1-Pl, 7x HM-LC-Sw1-PB-FM, 2x HM-WDS10-TH-O, 22x HM-Sec-SC, 4x HM-Sec-MDIR, 4x HM-Sen-MDIR-O, 3x HM-LC-Dim1T-FM, 1x HM-PB-4Dis-WM, 1x HM-RC-19, 1x HM-Sec-TiS, 2x HM-OU-CF-Pl, 1x HM-RC-4-B, 9x HM-CC-VD, 7x HM-CC-TC, 3x HM-WDS30-T-O, 1x HM-CCU-1, 1x HM-LC-Sw2-PB-FM, 1x HM-LC-Sw1PBU-FM, 6x HM-PB-2-WM, 1x HM-LC-Dim2T-SM, 5x HM-PB-4-WM, 1x HM-LC-Sw2-FM, 1x HM-OU-CFM-Pl, 1x HM-LC-Bl1PBU-FM, 4x HM-LC-Bl1-PB-FM, 4x HM-LC-Sw4-SM, 3x HM-Sec-WDS

RoBra81
Beiträge: 31
Registriert: 12.06.2012, 11:37

Re: Homematic und Google Apps

Beitrag von RoBra81 » 20.02.2013, 07:04

Hallo,

ich finde die Idee nicht schlecht und habe das gestern gleich mal ausprobiert. Dabei musste ich feststellen, dass die Berechnung des morgigen Tages nicht funktionierte. Hier die funktionierende korrigierte Zeile:

Code: Alles auswählen

  var tomorrow = new Date(now.getTime()+(1000*60*60*24));
Ronny

ralalla
Beiträge: 705
Registriert: 13.02.2012, 08:21

Re: Homematic und Google Apps

Beitrag von ralalla » 20.02.2013, 07:58

Das ist Klasse.
Hatte bisher ein Projekt Namens "Infoframe" auf einem digitalen Bilderrahmen laufen. Da wurden die Termine angezeigt.
Die Auswertung der Termine mittels HM ist klasse, dann muss ich demnächst nur noch sehen wie ich die Anzeige in meine CL Web Server Anwendung rein bekomme.

Macht weiter, das ist eine klasse Erweiterung.
Mein Homematicsystem
1xpiVCCu auf RPi3, 4x HMW-IO-12-Sw7-DR, 5x HM-Sec-RHS, 5x HM-Sec-SC, 8x HM-CC-TC, 10x HM-CC-VD, 2x HM-Sec-Key, 1x HMW-Sys-OP-DR, 5x HMW-LC-Dim1L-DR, 3x HM-RC-Key3-B, 9x HM-Sec-SD, 10x HMW-LC-Bl1-DR
, 1x HMW-IO-12-Sw14-DR[/size], iobroker

Benutzeravatar
HMside
Beiträge: 625
Registriert: 22.10.2012, 18:14
Danksagung erhalten: 7 Mal

Re: Homematic und Google Apps

Beitrag von HMside » 27.05.2013, 13:47

Hallo,

sehr interessant das Ganze. Ich habe meinen Müllabfuhrplan in Google Kalender importiert und würde gerne an den Tagen, wo eines der folgenden Termine eingetragen dies durch meine Statusanzeige anzeigen lassen. Lässt sich das ebenfalls mit diesem Script lösen, oder hat jemand noch eine bessere Idee?

Abfuhr: Blaue Tonne
Abfuhr: Biotonne
Abfuhr: Reststoff
Abfuhr: Gelbe Säcke

Danke & Gruß
HMside
Zuletzt geändert von HMside am 06.06.2013, 13:49, insgesamt 1-mal geändert.

holz150
Beiträge: 55
Registriert: 29.05.2010, 23:30
Wohnort: Nähe von Wien

Re: Homematic und Google Apps

Beitrag von holz150 » 28.05.2013, 22:59

Hallo,

Meine Idee wäre dazu die Erinnerung für die Mülltonnen über den mp3 Funkgong ansagen zu lassen.

Holz 150
161 Kanäle in 79 Geräten

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“