Homematic und Google Apps

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

Moderator: Co-Administratoren

deifel
Beiträge: 256
Registriert: 27.05.2014, 11:10
Hat sich bedankt: 7 Mal

Re: Homematic und Google Apps

Beitrag von deifel » 13.10.2016, 22:05

Also ich komme selbst leider nicht auf die Korrektur des Scriptes. Alles, was ich versucht habe, klappt nicht bzw. ich
schaffe es nicht, das Script korrekt anzupassen - obwohl das wieder sicher nur eine Kleinigkeit ist... :/
Würde mich freuen, wenn mir jemand eine Hilfestellung oder zumindest einen passenden Befehl sagen könnte.
Wohl kann man laut Recherche mit Befehlen wie findnext(what:="Restmuell") irgendwie arbeiten, aber egal wie und wo ich es versuche einzubauen, das Script scheint fehlerhaft zu sein...

Danke Euch im Voraus!

BadenPower

Re: Homematic und Google Apps

Beitrag von BadenPower » 13.10.2016, 22:13

deifel hat geschrieben:Würde mich freuen, wenn mir jemand eine Hilfestellung oder zumindest einen passenden Befehl sagen könnte.
Da dies ein Javascript-Skript ist, hat dies leider eigentlich nichts mit Homematic zu tun.
Und da ich diesen Google-Service nicht nutze müßte ich mich daher erst komplett in die Syntax des Services einarbeiten.

Sorry, da bin ich aus Zeitgründen raus.

.

wolf33
Beiträge: 15
Registriert: 23.12.2014, 15:03

Re: Homematic und Google Apps

Beitrag von wolf33 » 18.11.2016, 13:23

Hallo zusammen,
könnte mir mal bitte jemand unter die Arme greifen.
Ich habe versucht das erste Script zum laufen zu bringen aber es funktioniert leider nicht.
Folgendes habe ich getan:

Script als App veröffentlicht

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);
}

Code: Alles auswählen

https://script.google.com/macros/s/xxxxxx/exec?cmd=urlaub
Liefert wie gewünscht eine 1 (mit Urlaubseintrag) bzw. 0 (ohne Kalendereintrag) zurück.

Was mich stutzig macht:

Code: Alles auswählen

https://script.google.com/macros/s/xxxxxx/exec?cmd=events
gibt folgendes zurück:
frontline spot on;frontline spot on;frontline spot on
Ich habe für den heutigen Tag drei verschiedene Termine im Kalender. "frontline spot on" ist ein ganztägiger Termin, gefolgt von einem Test und einem Urlaub.
Sollte das Script nicht "frontline spot on;Test;Urlaub" ausgeben?

Cux-Deamon ist installiert und wird bereits seit längerem für andere Aufgaben erfolgreich verwendet.

Dann habe ich eine "Programm und Zentralenverknüpfung angelegt, die zum testen alle 10 Sekunden ausgeführt wird.
Als auszuführendes Script habe ich folgendes eingetragen:

Code: Alles auswählen

!! Holt den Urlaubsstatus von Google Apps

var url="https://script.google.com/macros/s/xxxxxx/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 );
}


Die angelegte Variable "Urlaub" wird leider permanent auf "0" gesetzt.

Fragezeichen erzeugen auch das Objekt "CUxD.CUX2801001:1" bei mir ist das eine 19-Tasten-Fernbedienung und auf dem Kanal ist
KEY|CMD_SHORT = curl -s -k -L https://script.google.com/macros/s/xxxx ... cmd=urlaub
eingetragen. Hat das so seine Richtigkeit.

Ich wäre über ein paar Tips sehr dankbar.

Viele Grüße
wolf331

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

Re: Homematic und Google Apps

Beitrag von HMside » 19.11.2016, 11:31

wolf33 hat geschrieben:Hallo zusammen,
könnte mir mal bitte jemand unter die Arme greifen.
Ich habe versucht das erste Script zum laufen zu bringen aber es funktioniert leider nicht.

Was mich stutzig macht:

Code: Alles auswählen

https://script.google.com/macros/s/xxxxxx/exec?cmd=events
gibt folgendes zurück:
frontline spot on;frontline spot on;frontline spot on
Ich habe für den heutigen Tag drei verschiedene Termine im Kalender. "frontline spot on" ist ein ganztägiger Termin, gefolgt von einem Test und einem Urlaub.
Sollte das Script nicht "frontline spot on;Test;Urlaub" ausgeben?
Probiere es mal hiermit, hängt vermutlich mit dem "all day events" Bug zusammen.

Code: Alles auswählen

function doGet(request) {
  var answer = "2.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);
}

// fix the 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(100); 
  var endOfDay = new Date(startOfDay.getTime() + 23 * 59 * 59 * 900);
 
  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;
}

// end fix the google bug in all day events

function todaysEvents()
{
  var now = new Date();

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


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);
}

wolf33
Beiträge: 15
Registriert: 23.12.2014, 15:03

Re: Homematic und Google Apps

Beitrag von wolf33 » 19.11.2016, 15:44

Super, danke!

Code: Alles auswählen

https://script.google.com/macros/s/xxxxxx/exec?cmd=events
gibt jetzt alle Events korrekt aus aber die Variable bleibt noch immer auf "0".
hast du noch eine Idee?

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

Re: Homematic und Google Apps

Beitrag von HMside » 19.11.2016, 16:09

@wolf33

Du meinst beim HM-Script?

Probiere es mal so:

Code: Alles auswählen

!! Holt den Urlaubsstatus von Google Apps
var url="https://script.google.com/macros/s/xxxxxx/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" )
{
dom.GetObject("Urlaub").State ( true );
}
else
{
dom.GetObject("Urlaub").State ( false );
}
Gruß
Andreas

wolf33
Beiträge: 15
Registriert: 23.12.2014, 15:03

Re: Homematic und Google Apps

Beitrag von wolf33 » 19.11.2016, 16:22

Hallo Andreas,
hat leider keine Änderung gebracht!

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

Re: Homematic und Google Apps

Beitrag von HMside » 20.11.2016, 14:13

@wolf33
Aber wenn Du "https://script.google.com/macros/s/xxxx ... cmd=urlaub" direkt über den Browser aufrufst, bekommst Du eine "1" zurück?

wolf33
Beiträge: 15
Registriert: 23.12.2014, 15:03

Re: Homematic und Google Apps

Beitrag von wolf33 » 20.11.2016, 14:42

Ja, das funktioniert einwandfrei.

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

Re: Homematic und Google Apps

Beitrag von HMside » 20.11.2016, 15:08

Deine Systemvariable heißt auch "Urlaub" und ist vom Typ Logikwert?
Bei mir funktioniert es mit dem folgenden Script:

Code: Alles auswählen

var url="https://script.google.com/macros/s/xxxxxx/exec";
var cmd = "LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl --trace-ascii /var/log/curl.trace -s -k -L " # url # "?cmd=urlaub";
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State(cmd);
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
var v = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();

var oUrlaub = dom.GetObject("Urlaub");
if ( v == "1" )
{
dom.GetObject("Urlaub").State ( true );
}
else
{
dom.GetObject("Urlaub").State ( false );
}

Antworten

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