Homematic und Google Apps

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

Moderator: Co-Administratoren

cotonila
Beiträge: 67
Registriert: 17.11.2016, 20:51
Wohnort: bei Riesa
Hat sich bedankt: 1 Mal

Re: Homematic und Google Apps

Beitrag von cotonila » 13.12.2018, 14:17

Hallo Framajo,

nein in die CUxD Geräte Einstellungsfelder trägst du nichts ein. Wichtig ist nur, dass du überhaupt ein CUxD Gerät (Nr. 28 - System) angelegt hast, was als Funktion "Exec" nutzt. Die zugehörige Seriennummer musst du dir dann auch noch für das Script merken.
Bildschirmfoto 2018-12-13 um 13.46.46.png
Wenn ich dich jetzt richtig verstanden habe, hast du in Google Script schon alles eingerichtet und die XML Abfrage läuft schon?
Wenn ja, nimmst du nur noch mein Kalenderscript her - Variablen hast du natürlich vorher in der CCU angelegt - und trägst an den von mir dokumentierten Stellen deine Sachen ein.
Also an den Stellen:
  • hier_deine_Kalender_ID
  • PW_wie_im_Script
  • CUX2801002:1 <--> an allen Stellen gegen dein CUxD Exec Geräte Nummer und Kanal erstetzen
  • nach "Urlaub" suchen
  • <deine_zu_schreibende_Variable> <--> den Status entsprechend deiner Zuordnung anpassen
Dein Script müsste dann so in etwa aussehen...

Code: Alles auswählen

!Abfrage Urlaubskalender
!Auslesen eines Google Kalenders, hier des Urlaubes, mittels Google Script (http://script.google.com/)
!Anpassung von Toni Jacob
!URL Direktabfrage zum testen im Browser - Heute: https://script.google.com/macros/s/<hier_deine_Kalender_ID>/exec?pwd=<PW_wie_im_Script>&cmd=events
!URL Direktabfrage zum testen im Browser - Morgen: https://script.google.com/macros/s/<hier_deine_Kalender_ID>/exec?pwd=<PW_wie_im_Script>&cmd=eventstomorrow

var url="https://script.google.com/macros/s/<hier_deine_Kalender_ID>/exec";
var cmd = "LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl -s -k -L '" # url # "?pwd=<PW_wie_im_Script>&cmd=events'";
dom.GetObject("CUxD.<hier_die_SN_deines_CUxD_Exec_Gerätes>:1.CMD_SETS").State(cmd);
dom.GetObject("CUxD.<hier_die_SN_deines_CUxD_Exec_Gerätes>:1.CMD_QUERY_RET").State(1);
string Kalendereintrag = dom.GetObject("CUxD.<hier_die_SN_deines_CUxD_Exec_Gerätes>:1.CMD_RETS").State();

! Urlaub heute suchen
string word = "Urlaub";
integer word_laenge = word.Length();
integer word_position = Kalendereintrag.Find(word);
string daten = Kalendereintrag.Substr((word_position), 12);
integer word_position = daten.Find(word);

! Wenn du sehen willst ob dein Script funktioniert, dann in der nächsten Zeile das ! entfernen
! WriteLine(daten);

if ( daten.Value() == "Urlaub" )
{
  dom.GetObject("<deine_zu_schreibende_Variable>").State(0);
}


!---------------------------------------------------------

var url="https://script.google.com/macros/s/<hier_deine_Kalender_ID>/exec";
var cmd = "LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl -s -k -L '" # url # "?pwd=<PW_wie_im_Script>&cmd=eventstomorrow'";
dom.GetObject("CUxD.<hier_die_SN_deines_CUxD_Exec_Gerätes>:1.CMD_SETS").State(cmd);
dom.GetObject("CUxD.<hier_die_SN_deines_CUxD_Exec_Gerätes>:1.CMD_QUERY_RET").State(1);
string Kalendereintrag = dom.GetObject("CUxD.<hier_die_SN_deines_CUxD_Exec_Gerätes>:1.CMD_RETS").State();

! Urlaub morgen suchen
string word = "Urlaub";
integer word_laenge = word.Length();
integer word_position = Kalendereintrag.Find(word);
string daten = Kalendereintrag.Substr((word_position), 12);
integer word_position = daten.Find(word);

! Wenn du sehen willst ob dein Script funktioniert, dann in der nächsten Zeile das ! entfernen
! WriteLine(daten);

if ( daten.Value() == "Urlaub" )
{
  dom.GetObject("<deine_zu_schreibende_Variable>").State(0);
}
Wichtig!!!: Wenn du das Script 1:1 übernimmst, muss im Google Kalender aber auch wirklich genau das zu suchende Wort zu finden sein - in dem Fall jetzt "Urlaub".
Wenn du nur "Heute" sehen willst, kannst du den "morgen" Teil des Scripts nach der Zeile
!---------------------------------- einfach löschen.

Probiers mal...

Toni
Raspberry Pi 4B mit RPI-RF-MOD; 2x RPi LAN GW;
990 Kanäle in 293 Geräten; 262 Programme; 339 Systemvariablen
AddOns: CUxD; HQ WebUI; JP HB Devices;CCU Historian; E-Mail; QuickAccess; Drucken; SonosPlayer; WatchDog; div. ESP8266, extra: Homeduino; ioBroker; Medial Neo

Framajo
Beiträge: 71
Registriert: 14.03.2018, 17:13
Danksagung erhalten: 2 Mal

Re: Homematic und Google Apps

Beitrag von Framajo » 04.01.2019, 12:47

Hallo zusammen,

dank der tatkräftigen Hilfe von Cotonila habe ich es endlich geschafft für die Daten von heute. Nochmals großes "DANKE" dafür.

Was leider noch nicht klappt sind die Einträge von morgen.

Da bekomme ich über die URL direktabfrage immer ein "1.0" zurück...

Liegt das vielleicht am google script? Habe das aus diesem Strang genommen, aber da fragt er ja immer nur "today" ab - kann das so passen?

Sorry für die doofen Fragen, bin ein Anfänger ...

F.

Code: Alles auswählen

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

  if ( request.parameters.cmd == "Kinder" )
  {
    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() == "Kinder")
    {
      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);
}


JR99
Beiträge: 9
Registriert: 17.12.2017, 12:24

Re: Homematic und Google Apps

Beitrag von JR99 » 25.01.2019, 09:25

Hallo zusammen,
für alle, die wie ich mehrere Kalender in ihrem "öffentlichen" Abrufaccount haben, hier noch ein Tipp, wie man einen speziellen Kalender im Googlescript anspricht.
Als Basis gehe ich vom Script in der Version 2.0 von HMside auf Seite 11 aus.
Folgende 2 Änderung habe ich entsprechend vorgenommen:
In der Funktion GetVacation() ~Zeile21:
statt alt:

Code: Alles auswählen

var events = CalendarApp.getEventsForDay(today);
neu:

Code: Alles auswählen

  var calendar = CalendarApp.getCalendarById('sn*********@group.calendar.google.com');
  var events = calendar.getEventsForDay(today);
Und genau dasselbe nochmals in der Funktion daysEvents() ~Zeile54.
statt alt:

Code: Alles auswählen

var events = CalendarApp.getDefaultCalendar().getEvents(startOfDay, endOfDay);
neu:

Code: Alles auswählen

  var calendar = CalendarApp.getCalendarById('sn*********@group.calendar.google.com');
  var events = calendar.getEvents(startOfDay, endOfDay);
Die Kalender-ID erhält man auf der Einstellungsseite des jeweiligen Google-Kalenders (unter "Kalender integrieren").
Ich hoffe jemand kann es gebrauchen, vielleicht kann das ja einer der "Script-Meister" in einer neuen "offiziellen" Version einbauen.
VG
JR

WolfHenk
Beiträge: 14
Registriert: 29.07.2019, 09:44
Hat sich bedankt: 1 Mal

Re: Homematic und Google Apps

Beitrag von WolfHenk » 08.08.2019, 20:54

Läuft.

Erstmal herzlichen Dank an die Ersteller dieses Scripts.

Ich schalte damit LEDs, die über den Tonnen draußen leuchten...

Code: Alles auswählen

if(channels.Get("Müll Gelbe Tonne morgen").DPByHssDP("STATE").Value()<>(lTextNeu.Contains("gelbe tonne"))){
channels.Get("Müll Gelbe Tonne morgen").DPByHssDP("STATE").State(lTextNeu.Contains("gelbe tonne"));}
Nachdem ich vor ein paar Wochen von FHEM auf die Raspberrymatic gewechselt bin (FHEM war mir dann irgendwann zu umständlich geworden im Hinblick auf Homematic), habe ich nun fast alle Funktionen, die liefen wiederhergestellt und zum Teil auch optimiert.
Nur das mit dem Google-Kalender... FHEM kann hier auch Start- und Endzeiten eines Termins verarbeiten.

Das wär noch ein Request meinerseits.
Ich habe z.B. eine Variable "Dienstreise".
Google kennt einen Termin als "Reise" mit z.B. Starttermin 1.9.2019, 8:30 und Endtermin 15.9.2019, 12:00. Während dieser Zeit fährt das Haus in Sparmodus weil die Systemvariable "Reise" true ist.
Aufgrund des Jobs kann die Reise aber auch mal ne Woche länger oder kürzer sein und um andere Zeiten komme ich nach Hause.
Ist im Winter eben schön, per Google das Reiseende so zu legen, dass wenn ich am Airport ankomme, das Haus wieder hochfährt und wenn ich dann drei Stunden später die Haustür öffne, isses wie es sein soll.

Kurz: Wenn ein Termin mit Zeitangabe, sollte er erst dann auch gesetzt werden, wenn das Script ihn als "jetzt aktiv" liest (Abrufhäufigkeit: alle 13 Minuten). ::~::

Grüßlichst

WolfHenk

Torsten_MG
Beiträge: 87
Registriert: 05.07.2019, 16:14
Hat sich bedankt: 2 Mal
Danksagung erhalten: 4 Mal

Re: Homematic und Google Apps

Beitrag von Torsten_MG » 12.10.2019, 08:03

Ich habe mir gerade noch ein Script für Termine Angelegt.

Eingaben im Browser funktionieren so wie sie sollen. Also stimmt das Google Script.

Bei der Browser Eingabe

Code: Alles auswählen

https://script.google.com/macros/s/xxxxxxxxx/exec?pwd=test&cmd=events&d=1
zeigt der Browser nichts, aber im CCU werden mir für morgen und übermorgen die Termine von heute angezeigt.

Code: Alles auswählen

var url="https://script.google.com/macros/s/xxxxxxx/exec";
var cmd = "LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl -s -k -L '" # url # "?pwd=test&cmd=events&d=0'";
dom.GetObject("CUxD.CUX2801002:1.CMD_SETS").State(cmd);
dom.GetObject("CUxD.CUX2801002:1.CMD_QUERY_RET").State(1);
var oV = dom.GetObject("CUxD.CUX2801002:1.CMD_RETS").State();
var lMuell = dom.GetObject("TermineHeute");

WriteLine("x" # oV # "x");

if ( oV == "" ){
  oV = "keinMüll";
  lMuell.State(oV);
}
else
{
  
  
  string lErsetzen = "ä,ü,ö";
  string lErsetzenDurch = "ä,ü,ö";
  
  string lTextNeu = oV;
  integer lPos = 0;
  integer lIndex = 0;
  string lSplit = "";
  boolean lLoop = true;
  
  
  foreach (lSplit, lErsetzen.Split(","))
  {
    lLoop = true;
    while (lLoop)
    {
      lPos = lTextNeu.Find(lSplit);
      
      if (lPos == -1)
      {
        lLoop = false;
      }
      else
      {
        lTextNeu = lTextNeu.Substr(0,lPos) # lErsetzenDurch.StrValueByIndex(",",lIndex)  # lTextNeu.Substr(lPos + lSplit.Length() , ((lTextNeu.Length() - lPos) - lSplit.Length())  );
      }
    }
    
    lIndex = lIndex + 1;
  }
  
}

oV = "";
string lBind = ", ";





foreach (lSplit, lTextNeu.Split(";"))
  {
    oV = oV + lBind + lSplit;
    lTextNeu = oV.Substr(2,oV.Length());
  }
  if ( lTextNeu != "")
  {
    lMuell.State(lTextNeu);
    WriteLine(lTextNeu);
  }


var url="https://script.google.com/macros/s/xxxxxx/exec";
var cmd = "LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl -s -k -L '" # url # "?pwd=test&cmd=events&d=1'";
dom.GetObject("CUxD.CUX2801002:1.CMD_SETS").State(cmd);
dom.GetObject("CUxD.CUX2801002:1.CMD_QUERY_RET").State(1);
var oV = dom.GetObject("CUxD.CUX2801002:1.CMD_RETS").State();
var lMuell = dom.GetObject("TermineMorgen");

WriteLine("x" # oV # "x");

if ( oV == "" ){
  oV = "keinMüll";
  lMuell.State(oV);
}
else
{
  
  
  string lErsetzen = "ä,ü,ö";
  string lErsetzenDurch = "ä,ü,ö";
  
  string lTextNeu = oV;
  integer lPos = 0;
  integer lIndex = 0;
  string lSplit = "";
  boolean lLoop = true;
  
  
  foreach (lSplit, lErsetzen.Split(","))
  {
    lLoop = true;
    while (lLoop)
    {
      lPos = lTextNeu.Find(lSplit);
      
      if (lPos == -1)
      {
        lLoop = false;
      }
      else
      {
        lTextNeu = lTextNeu.Substr(0,lPos) # lErsetzenDurch.StrValueByIndex(",",lIndex)  # lTextNeu.Substr(lPos + lSplit.Length() , ((lTextNeu.Length() - lPos) - lSplit.Length())  );
      }
    }
    
    lIndex = lIndex + 1;
  }
  
}

oV = "";
string lBind = ", ";





foreach (lSplit, lTextNeu.Split(";"))
  {
    oV = oV + lBind + lSplit;
    lTextNeu = oV.Substr(2,oV.Length());
  }
  if ( lTextNeu != "")
  {
    lMuell.State(lTextNeu);
    WriteLine(lTextNeu);
  }
  
  
var url="https://script.google.com/macros/s/xxxxxxx/exec";
var cmd = "LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl -s -k -L '" # url # "?pwd=test&cmd=events&d=2'";
dom.GetObject("CUxD.CUX2801002:1.CMD_SETS").State(cmd);
dom.GetObject("CUxD.CUX2801002:1.CMD_QUERY_RET").State(1);
var oV = dom.GetObject("CUxD.CUX2801002:1.CMD_RETS").State();
var lMuell = dom.GetObject("TermineUebermorgen");

WriteLine("x" # oV # "x");

if ( oV == "" ){
  oV = "keinMüll";
  lMuell.State(oV);
}
else
{
  
  
  string lErsetzen = "ä,ü,ö";
  string lErsetzenDurch = "ä,ü,ö";
  
  string lTextNeu = oV;
  integer lPos = 0;
  integer lIndex = 0;
  string lSplit = "";
  boolean lLoop = true;
  
  
  foreach (lSplit, lErsetzen.Split(","))
  {
    lLoop = true;
    while (lLoop)
    {
      lPos = lTextNeu.Find(lSplit);
      
      if (lPos == -1)
      {
        lLoop = false;
      }
      else
      {
        lTextNeu = lTextNeu.Substr(0,lPos) # lErsetzenDurch.StrValueByIndex(",",lIndex)  # lTextNeu.Substr(lPos + lSplit.Length() , ((lTextNeu.Length() - lPos) - lSplit.Length())  );
      }
    }
    
    lIndex = lIndex + 1;
  }
  
}

oV = "";
string lBind = ", ";





foreach (lSplit, lTextNeu.Split(";"))
  {
    oV = oV + lBind + lSplit;
    lTextNeu = oV.Substr(2,oV.Length());
  }
  if ( lTextNeu != "")
  {
    lMuell.State(lTextNeu);
    WriteLine(lTextNeu);
  }
Termine.PNG
Termine.PNG (4.79 KiB) 2746 mal betrachtet
EDIT: Habe es selbst schon hinbekommen.

Für die, die das selbe Problem haben.

Ich habe vor diesen Zeilen:

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 -s -k -L '" # url # "?pwd=test&cmd=events&d=1'";
und

Code: Alles auswählen

var url="https://script.google.com/macros/s/xxxxxxx/exec";
var cmd = "LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl -s -k -L '" # url # "?pwd=test&cmd=events&d=2'";
noch jeweils:

Code: Alles auswählen

string lTextNeu = "";
geschrieben,

da der string ja nur im else Zweig auf "" gesetzt wird und dadurch der alte Wert übernommen wird

Torsten_MG
Beiträge: 87
Registriert: 05.07.2019, 16:14
Hat sich bedankt: 2 Mal
Danksagung erhalten: 4 Mal

Re: Homematic und Google Apps

Beitrag von Torsten_MG » 12.10.2019, 18:44

Hallo Leute,

Ich habe mir das google-Script aus dem Post viewtopic.php?f=35&t=34325&start=30#p330178, was seinen Ursprung hier hatte, umgeschrieben um mir meine Schichten anzeigen zu lassen. Frühschicht, Spätschicht, Nachtschicht, Urlaub. Es funktioniert auch soweit. Nur bei Frühschicht zeigt er mir nichts an bzw. es kommen 3 Fragezeichen, da der nächste Termin in 6 Wochen ist. Kann ich den Suchzeitraum erweitern oder ist er begrenzt? Ich habe zu Testzwecken Frühschicht mal früher gesetzt, das Funktioniert auf jeden Fall. Meine nächste Frühschicht ist erst wieder am 11.11.

Hier meine Scripte

Code: Alles auswählen

//Configuration
//Calendar to access (ID)
  var cal = 'abcxxx@group.calendar.google.com';

    function doGet(request) {
      var answer = "1.4";
      var d = 1 * request.parameters.d;
      if (isNaN(d)){
        d = 0;
      };
      if ( request.parameters.pwd == "test")
      {
        if ( request.parameters.cmd == "urlaub" )
        {
          answer = getVacation(d);
        }
        else if (request.parameters.cmd == "urlaub_ex" )
        {
          answer = getVacationEx(d);
        }
        else if (request.parameters.cmd == "events" )
        {
          answer = getEventsOfDay(d);
        }
        else if (request.parameters.cmd == "eventstomorrow" )
        {
          answer = getEventsOfDay(1);
        }
        else if ((request.parameters.cmd == "muell") && (request.parameters.color))
        {
          if (request.parameters.mode == "nextdate")
          {
            answer = FormatedEventDate(findNextMuell(request.parameters.color));
          }
          else if (request.parameters.mode == "indays")
          {
            answer = DaysUntilEvent(findNextMuell(request.parameters.color));
          }
          else
          {
            answer = DaysUntilEventNice(findNextMuell(request.parameters.color));
          }
        }
      }   
      return ContentService.createTextOutput(answer);
    }

    function getEventsInRange(aStart, aEnd)
    {
      var events = CalendarApp.getCalendarById(cal).getEvents(aStart, aEnd);
      var result = new Array;
      var eventStart = 0;
      var eventEnd = 0;
      var startTime = aStart.getTime();
      var endTime = aEnd.getTime();
      for (var i=0; i<events.length; i++)
      {
        //Zeiten testen (bug bei allDayEvents)
        //ich verzichte auf Anpassung von Start/Endzeit auf UTC, bei Abfage von ganzen Tagen sind die korrekten Events enthalten,
        //die zusätlich von angrenzenden Tagen enthaltenen Events werden hier aussortiert.
        if ((events[i].getEndTime().getTime() > startTime) && (events[i].getStartTime().getTime() < endTime))
        {
          result.push(events[i]); 
        }
      }
      return result;
    }

    function daysEvents( aDate )
    {
      var startOfDay = new Date(aDate);
      startOfDay.setHours(0);
      startOfDay.setMinutes(0);
      startOfDay.setSeconds(0);
      startOfDay.setMilliseconds(0); 
      var endOfDay = new Date(startOfDay.getTime() + 24 * 60 * 60 * 1000);
      return getEventsInRange(startOfDay, endOfDay);
    }

    function findNext( aPattern )
    {
      var patt=new RegExp(aPattern,'i');
      var startDate = new Date();
      var endDate = new Date(startDate.getTime() + (24*60*60*1000*30));
     
      var events = getEventsInRange(startDate, endDate);
      for (var i=0; i<events.length; i++)
      {
        //check event title
        if (patt.test(events[i].getTitle()))
        {
          return events[i];
        }
      }
    }

    function findNextGreen()
    {
      return findNext("Frühschicht");
    }

    function findNextGrey()
    {
      return findNext("Spätschicht");
    }

    function findNextYellow()
    {
      return findNext("Nachtschicht");
    }

    function findNextBrown()
    {
      return findNext("Urlaub");
    }

    function findNextBlue()
    {
      return findNext("blaue Tonne|Papiermüll|Papiermuell|Altpapier");
    }

    //Events am Tag aDay ab heute (0 = heute, 1 = morgen...)
    function eventsOfDay(aDay)
    {
      var now = new Date();
      var day = new Date(now.getTime() + (1000*3600*24*aDay));
      var events = daysEvents( day );
      return events;
    }

    function findNextMuell( aColor )
    {
      if (aColor == 'grey')
      {
        return findNextGrey();
      }
      else if (aColor == 'green')
      {
        return findNextGreen();
      }
      else if (aColor == 'blue')
      {
        return findNextBlue();
      }

      else if (aColor == 'yellow')
      {
        return findNextYellow();
      }

      else if (aColor == 'brown')
      {
        return findNextBrown();
      }
    }

    //Urlaub am Tag aDay (0 = heute, 1=morgen...)
    function getVacation( aDay )
    {
      var events = eventsOfDay( aDay );
     
      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( aDay )
    //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 = eventsOfDay(aDay);
      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 = eventsOfDay(aDay + 1);
      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 getEventsOfDay( aDay )
    {
      var events = eventsOfDay(aDay);
     
      var result = "";
       
      for (var i=0; i<events.length; i++)
      {
        if ( result.length > 0)  {
          result = result+";";
        }
        result = result + events[i].getTitle().toLowerCase();
      }
     
      return result;
    }

    function FormatedEventDate( aEvent )
    {
      if (aEvent)
      {
        var timezone = CalendarApp.getCalendarById(cal).getTimeZone();
        var res = Utilities.formatDate(aEvent.getStartTime(), timezone, "dd.MM.yyyy");
        return res;
      }
    }

    function DaysUntilEvent( aEvent )
    {
      if (aEvent)
      {
        var startOfToday = new Date();
        startOfToday.setHours(0);
        startOfToday.setMinutes(0);
        startOfToday.setSeconds(0);
        startOfToday.setMilliseconds(0);   
        var differenceInMillis = aEvent.getStartTime() - startOfToday.getTime();
        return Math.floor( differenceInMillis /1000/60/60/24 );
      }
    }

    function DaysUntilEventNice( aEvent )
    {
      result = '';
      var days = 1 * DaysUntilEvent(aEvent);
      if (!isNaN(days))
      {
        if (days == 0)
        {
          result = 'Heute';
        }
        else if (days == 1)
        {
          result = 'Morgen';
        }
        else if (days == 2)
        {
          result = 'Übermorgen';
        }
        else
        {
          result = 'In ' + days + ' Tagen';
        }
      }
      else
      {
        result = 'nicht gefunden';
      }
      return result;
    }

Code: Alles auswählen

var url="https://script.google.com/macros/s/abcxxx-oQXX2o1B6x2xPJy30jVkcF4O5uBfd5/exec";
var cmd = "LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl -s -k -L '" # url # "?pwd=test&cmd=muell&color=grey&mode=nextdate'";
dom.GetObject("CUxD.CUX2801002:1.CMD_SETS").State(cmd);
dom.GetObject("CUxD.CUX2801002:1.CMD_QUERY_RET").State(1);
var oV = dom.GetObject("CUxD.CUX2801002:1.CMD_RETS").State();
var lMuell = dom.GetObject("SpätschichtDatum");

WriteLine("x" # oV # "x");

if ( oV == "" ){
  oV = "keinMüll";
  lMuell.State(oV);
}
else
{
  
  
  string lErsetzen = "ä,ü,ö";
  string lErsetzenDurch = "ä,ü,ö";
  
  string lTextNeu = oV;
  integer lPos = 0;
  integer lIndex = 0;
  string lSplit = "";
  boolean lLoop = true;
  
  
  foreach (lSplit, lErsetzen.Split(","))
  {
    lLoop = true;
    while (lLoop)
    {
      lPos = lTextNeu.Find(lSplit);
      
      if (lPos == -1)
      {
        lLoop = false;
      }
      else
      {
        lTextNeu = lTextNeu.Substr(0,lPos) # lErsetzenDurch.StrValueByIndex(",",lIndex)  # lTextNeu.Substr(lPos + lSplit.Length() , ((lTextNeu.Length() - lPos) - lSplit.Length())  );
      }
    }
    
    lIndex = lIndex + 1;
  }
  
}

oV = "";
string lBind = ", ";





foreach (lSplit, lTextNeu.Split(";"))
  {
    oV = oV + lBind + lSplit;
    lTextNeu = oV.Substr(2,oV.Length());
  }
  if ( lTextNeu != "")
  {
    lMuell.State(lTextNeu);
    WriteLine(lTextNeu);
  }


var url="https://script.google.com/macros/s/abcxxx-oQXX2o1B6x2xPJy30jVkcF4O5uBfd5/exec";
var cmd = "LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl -s -k -L '" # url # "?pwd=test&cmd=muell&color=grey&mode=indays'";
dom.GetObject("CUxD.CUX2801002:1.CMD_SETS").State(cmd);
dom.GetObject("CUxD.CUX2801002:1.CMD_QUERY_RET").State(1);
var oV = dom.GetObject("CUxD.CUX2801002:1.CMD_RETS").State();
var lMuell = dom.GetObject("SpätschichtTage");

WriteLine("x" # oV # "x");

if ( oV == "" ){
  oV = "keinMüll";
  lMuell.State(oV);
}
else
{
  
  
  string lErsetzen = "ä,ü,ö";
  string lErsetzenDurch = "ä,ü,ö";
  
  string lTextNeu = oV;
  integer lPos = 0;
  integer lIndex = 0;
  string lSplit = "";
  boolean lLoop = true;
  
  
  foreach (lSplit, lErsetzen.Split(","))
  {
    lLoop = true;
    while (lLoop)
    {
      lPos = lTextNeu.Find(lSplit);
      
      if (lPos == -1)
      {
        lLoop = false;
      }
      else
      {
        lTextNeu = lTextNeu.Substr(0,lPos) # lErsetzenDurch.StrValueByIndex(",",lIndex)  # lTextNeu.Substr(lPos + lSplit.Length() , ((lTextNeu.Length() - lPos) - lSplit.Length())  );
      }
    }
    
    lIndex = lIndex + 1;
  }
  
}

oV = "";
string lBind = ", ";





foreach (lSplit, lTextNeu.Split(";"))
  {
    oV = oV + lBind + lSplit;
    lTextNeu = oV.Substr(2,oV.Length());
  }
  if ( lTextNeu != "")
  {
    lMuell.State(lTextNeu);
    WriteLine(lTextNeu);
  }
  
  
  var url="https://script.google.com/macros/s/abcxxx-oQXX2o1B6x2xPJy30jVkcF4O5uBfd5/exec";
var cmd = "LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl -s -k -L '" # url # "?pwd=test&cmd=muell&color=green&mode=nextdate'";
dom.GetObject("CUxD.CUX2801002:1.CMD_SETS").State(cmd);
dom.GetObject("CUxD.CUX2801002:1.CMD_QUERY_RET").State(1);
var oV = dom.GetObject("CUxD.CUX2801002:1.CMD_RETS").State();
var lMuell = dom.GetObject("FrühschichtDatum");

WriteLine("x" # oV # "x");

if ( oV == "" ){
  oV = "keinMüll";
  lMuell.State(oV);
}
else
{
  
  
  string lErsetzen = "ä,ü,ö";
  string lErsetzenDurch = "ä,ü,ö";
  
  string lTextNeu = oV;
  integer lPos = 0;
  integer lIndex = 0;
  string lSplit = "";
  boolean lLoop = true;
  
  
  foreach (lSplit, lErsetzen.Split(","))
  {
    lLoop = true;
    while (lLoop)
    {
      lPos = lTextNeu.Find(lSplit);
      
      if (lPos == -1)
      {
        lLoop = false;
      }
      else
      {
        lTextNeu = lTextNeu.Substr(0,lPos) # lErsetzenDurch.StrValueByIndex(",",lIndex)  # lTextNeu.Substr(lPos + lSplit.Length() , ((lTextNeu.Length() - lPos) - lSplit.Length())  );
      }
    }
    
    lIndex = lIndex + 1;
  }
  
}

oV = "";
string lBind = ", ";





foreach (lSplit, lTextNeu.Split(";"))
  {
    oV = oV + lBind + lSplit;
    lTextNeu = oV.Substr(2,oV.Length());
  }
  if ( lTextNeu != "")
  {
    lMuell.State(lTextNeu);
    WriteLine(lTextNeu);
  }


var url="https://script.google.com/macros/s/abcxxx-oQXX2o1B6x2xPJy30jVkcF4O5uBfd5/exec";
var cmd = "LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl -s -k -L '" # url # "?pwd=test&cmd=muell&color=green&mode=indays'";
dom.GetObject("CUxD.CUX2801002:1.CMD_SETS").State(cmd);
dom.GetObject("CUxD.CUX2801002:1.CMD_QUERY_RET").State(1);
var oV = dom.GetObject("CUxD.CUX2801002:1.CMD_RETS").State();
var lMuell = dom.GetObject("FrühschichtTage");

WriteLine("x" # oV # "x");

if ( oV == "" ){
  oV = "keinMüll";
  lMuell.State(oV);
}
else
{
  
  
  string lErsetzen = "ä,ü,ö";
  string lErsetzenDurch = "ä,ü,ö";
  
  string lTextNeu = oV;
  integer lPos = 0;
  integer lIndex = 0;
  string lSplit = "";
  boolean lLoop = true;
  
  
  foreach (lSplit, lErsetzen.Split(","))
  {
    lLoop = true;
    while (lLoop)
    {
      lPos = lTextNeu.Find(lSplit);
      
      if (lPos == -1)
      {
        lLoop = false;
      }
      else
      {
        lTextNeu = lTextNeu.Substr(0,lPos) # lErsetzenDurch.StrValueByIndex(",",lIndex)  # lTextNeu.Substr(lPos + lSplit.Length() , ((lTextNeu.Length() - lPos) - lSplit.Length())  );
      }
    }
    
    lIndex = lIndex + 1;
  }
  
}

oV = "";
string lBind = ", ";





foreach (lSplit, lTextNeu.Split(";"))
  {
    oV = oV + lBind + lSplit;
    lTextNeu = oV.Substr(2,oV.Length());
  }
  if ( lTextNeu != "")
  {
    lMuell.State(lTextNeu);
    WriteLine(lTextNeu);
  }
  
  
  
  
  var url="https://script.google.com/macros/s/abcxxx-oQXX2o1B6x2xPJy30jVkcF4O5uBfd5/exec";
var cmd = "LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl -s -k -L '" # url # "?pwd=test&cmd=muell&color=yellow&mode=nextdate'";
dom.GetObject("CUxD.CUX2801002:1.CMD_SETS").State(cmd);
dom.GetObject("CUxD.CUX2801002:1.CMD_QUERY_RET").State(1);
var oV = dom.GetObject("CUxD.CUX2801002:1.CMD_RETS").State();
var lMuell = dom.GetObject("NachtschichtDatum");

WriteLine("x" # oV # "x");

if ( oV == "" ){
  oV = "keinMüll";
  lMuell.State(oV);
}
else
{
  
  
  string lErsetzen = "ä,ü,ö";
  string lErsetzenDurch = "ä,ü,ö";
  
  string lTextNeu = oV;
  integer lPos = 0;
  integer lIndex = 0;
  string lSplit = "";
  boolean lLoop = true;
  
  
  foreach (lSplit, lErsetzen.Split(","))
  {
    lLoop = true;
    while (lLoop)
    {
      lPos = lTextNeu.Find(lSplit);
      
      if (lPos == -1)
      {
        lLoop = false;
      }
      else
      {
        lTextNeu = lTextNeu.Substr(0,lPos) # lErsetzenDurch.StrValueByIndex(",",lIndex)  # lTextNeu.Substr(lPos + lSplit.Length() , ((lTextNeu.Length() - lPos) - lSplit.Length())  );
      }
    }
    
    lIndex = lIndex + 1;
  }
  
}

oV = "";
string lBind = ", ";





foreach (lSplit, lTextNeu.Split(";"))
  {
    oV = oV + lBind + lSplit;
    lTextNeu = oV.Substr(2,oV.Length());
  }
  if ( lTextNeu != "")
  {
    lMuell.State(lTextNeu);
    WriteLine(lTextNeu);
  }


var url="https://script.google.com/macros/s/abcxxx-oQXX2o1B6x2xPJy30jVkcF4O5uBfd5/exec";
var cmd = "LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl -s -k -L '" # url # "?pwd=test&cmd=muell&color=yellow&mode=indays'";
dom.GetObject("CUxD.CUX2801002:1.CMD_SETS").State(cmd);
dom.GetObject("CUxD.CUX2801002:1.CMD_QUERY_RET").State(1);
var oV = dom.GetObject("CUxD.CUX2801002:1.CMD_RETS").State();
var lMuell = dom.GetObject("NachtschichtTage");

WriteLine("x" # oV # "x");

if ( oV == "" ){
  oV = "keinMüll";
  lMuell.State(oV);
}
else
{
  
  
  string lErsetzen = "ä,ü,ö";
  string lErsetzenDurch = "ä,ü,ö";
  
  string lTextNeu = oV;
  integer lPos = 0;
  integer lIndex = 0;
  string lSplit = "";
  boolean lLoop = true;
  
  
  foreach (lSplit, lErsetzen.Split(","))
  {
    lLoop = true;
    while (lLoop)
    {
      lPos = lTextNeu.Find(lSplit);
      
      if (lPos == -1)
      {
        lLoop = false;
      }
      else
      {
        lTextNeu = lTextNeu.Substr(0,lPos) # lErsetzenDurch.StrValueByIndex(",",lIndex)  # lTextNeu.Substr(lPos + lSplit.Length() , ((lTextNeu.Length() - lPos) - lSplit.Length())  );
      }
    }
    
    lIndex = lIndex + 1;
  }
  
}

oV = "";
string lBind = ", ";





foreach (lSplit, lTextNeu.Split(";"))
  {
    oV = oV + lBind + lSplit;
    lTextNeu = oV.Substr(2,oV.Length());
  }
  if ( lTextNeu != "")
  {
    lMuell.State(lTextNeu);
    WriteLine(lTextNeu);
  }
  
  
  var url="https://script.google.com/macros/s/abcxxx-oQXX2o1B6x2xPJy30jVkcF4O5uBfd5/exec";
var cmd = "LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl -s -k -L '" # url # "?pwd=test&cmd=muell&color=brown&mode=nextdate'";
dom.GetObject("CUxD.CUX2801002:1.CMD_SETS").State(cmd);
dom.GetObject("CUxD.CUX2801002:1.CMD_QUERY_RET").State(1);
var oV = dom.GetObject("CUxD.CUX2801002:1.CMD_RETS").State();
var lMuell = dom.GetObject("SYS-Urlaub-01-Termine");

WriteLine("x" # oV # "x");

if ( oV == "" ){
  oV = "keinMüll";
  lMuell.State(oV);
}
else
{
  
  
  string lErsetzen = "ä,ü,ö";
  string lErsetzenDurch = "ä,ü,ö";
  
  string lTextNeu = oV;
  integer lPos = 0;
  integer lIndex = 0;
  string lSplit = "";
  boolean lLoop = true;
  
  
  foreach (lSplit, lErsetzen.Split(","))
  {
    lLoop = true;
    while (lLoop)
    {
      lPos = lTextNeu.Find(lSplit);
      
      if (lPos == -1)
      {
        lLoop = false;
      }
      else
      {
        lTextNeu = lTextNeu.Substr(0,lPos) # lErsetzenDurch.StrValueByIndex(",",lIndex)  # lTextNeu.Substr(lPos + lSplit.Length() , ((lTextNeu.Length() - lPos) - lSplit.Length())  );
      }
    }
    
    lIndex = lIndex + 1;
  }
  
}

oV = "";
string lBind = ", ";





foreach (lSplit, lTextNeu.Split(";"))
  {
    oV = oV + lBind + lSplit;
    lTextNeu = oV.Substr(2,oV.Length());
  }
  if ( lTextNeu != "")
  {
    lMuell.State(lTextNeu);
    WriteLine(lTextNeu);
  }


var url="https://script.google.com/macros/s/abcxxx-oQXX2o1B6x2xPJy30jVkcF4O5uBfd5/exec";
var cmd = "LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl -s -k -L '" # url # "?pwd=test&cmd=muell&color=brown&mode=indays'";
dom.GetObject("CUxD.CUX2801002:1.CMD_SETS").State(cmd);
dom.GetObject("CUxD.CUX2801002:1.CMD_QUERY_RET").State(1);
var oV = dom.GetObject("CUxD.CUX2801002:1.CMD_RETS").State();
var lMuell = dom.GetObject("UrlaubTorstenTage");

WriteLine("x" # oV # "x");

if ( oV == "" ){
  oV = "keinMüll";
  lMuell.State(oV);
}
else
{
  
  
  string lErsetzen = "ä,ü,ö";
  string lErsetzenDurch = "ä,ü,ö";
  
  string lTextNeu = oV;
  integer lPos = 0;
  integer lIndex = 0;
  string lSplit = "";
  boolean lLoop = true;
  
  
  foreach (lSplit, lErsetzen.Split(","))
  {
    lLoop = true;
    while (lLoop)
    {
      lPos = lTextNeu.Find(lSplit);
      
      if (lPos == -1)
      {
        lLoop = false;
      }
      else
      {
        lTextNeu = lTextNeu.Substr(0,lPos) # lErsetzenDurch.StrValueByIndex(",",lIndex)  # lTextNeu.Substr(lPos + lSplit.Length() , ((lTextNeu.Length() - lPos) - lSplit.Length())  );
      }
    }
    
    lIndex = lIndex + 1;
  }
  
}

oV = "";
string lBind = ", ";





foreach (lSplit, lTextNeu.Split(";"))
  {
    oV = oV + lBind + lSplit;
    lTextNeu = oV.Substr(2,oV.Length());
  }
  if ( lTextNeu != "")
  {
    lMuell.State(lTextNeu);
    WriteLine(lTextNeu);
  }
Und eine 2. Frage habe ich auch noch:

Mit Hilfe von

Code: Alles auswählen

cmd=events&d=x
Frage ich die Termine der nächsten 3 Tage ab. Gibt es auch eine Möglichkeit die dazuhörige Uhrzeit mit abzufragen?

Zwenjo
Beiträge: 52
Registriert: 13.11.2020, 12:12
System: CCU
Hat sich bedankt: 11 Mal
Danksagung erhalten: 3 Mal

Re: Homematic und Google Apps

Beitrag von Zwenjo » 13.11.2020, 12:22

Hallo Zusammen,

ich hab mich auch dem Projekt mal angenommen. Vielen Dank vorweg für die ganzen Hilfen. Bin Neuling in dem Thema, aber habe schon einiges hinbekommen. Jetzt stehe ich vor folgendem Problem

Mein Skript in HM:

Code: Alles auswählen

var url="https://script.google.com/macros/s/XXX/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();
WriteLine(v);
var oUrlaub = (v);
WriteLine(oUrlaub);
if ( v == "1" )
{
dom.GetObject("Urlaub").State ( true );
}
else
{
dom.GetObject("Urlaub").State ( false )
}
Wenn ich das Sktipt teste kommt nur zurück:

Code: Alles auswählen


 !DOCTYPE html 
 html lang="de" 
   head 
   meta charset="utf-8" 
   meta content="width=300, initial-scale=1" name="viewport" 
   meta name="google-site-verification" content="LrdTUW9psUAMbh4Ia074-BPEVmcpBxF6Gwf0MSgQXZs" 
   title Anmelden – Google Konten /title 
   style 
  @font-face {
  font-family: 'Open Sans';
  font-style: normal;
  font-weight: 300;
  src: local('Open Sans Light'), local('OpenSans-Light'), url(//fonts.gstatic.com/s/opensans/v15/mem5YaGs126MiZpBA-UN_r8OUuhs.ttf) format('truetype');
}
@font-face {
  font-family: 'Open Sans';
  font-style: normal;
  font-weight: 400;
  src: local('Open Sans'), local('OpenSans'), url(//fonts.gstatic.com/s/opensans/v15/mem8YaGs126MiZpBA-UFVZ0e.ttf) format('truetype');
}
   /style 
   style 
 
USW....
Also ich vermute es liegt noch irgendwie an der Freigabe von google, aber ich kann den Fehler leider nicht finden...
Hat jemand eine Idee? Das Skript von Google selber funktioniert im Browser und gibt mir eine 1 oder 0 zurück.

Vielen Dank für die Hilfen.

Viele Grüße
Sven
Zuletzt geändert von Roland M. am 13.11.2020, 12:41, insgesamt 1-mal geändert.
Grund: Doppelpost gelöscht
--------------------------------------------
356 Kanäle in 50 Geräten und 16 CUxD-Kanäle in 1 CUxD-Geräten:
1x HmIP-CCU3, 1x HmIP-HAP, 1x CUX28, 1x HmIP-STHO-A, 2x HmIP-FSM, 1x HmIP-SPI, 1x HmIP-SAM, 1x HM-LC-Sw1-Pl-CT-R1, 1x HmIP-FSI16, 1x HmIP-SRH, 1x HmIP-eTRV-E, 6x HmIP-HEATING, 1x HmIP-BSL, 1x HmIP-FROLL, 7x HMIP-SWDO, 9x HmIP-BROLL, 6x HmIP-eTRV-2, 1x HmIP-BSM, 1x HmIP-BDT, 1x HmIP-SWSD, 2x HmIP-WTH-2, 1x HMIP-PS, 1x HmIP-PCBS, 1x HmIP-RCV-50, 1x HMIP-PSM
--------------------------------------------

Benutzeravatar
UwePa
Beiträge: 329
Registriert: 26.08.2015, 06:27
System: CCU
Wohnort: Berlin (Speckgürtel)
Hat sich bedankt: 25 Mal
Danksagung erhalten: 3 Mal

Re: Homematic und Google Apps

Beitrag von UwePa » 24.11.2020, 06:23

Guten Morgen,

Ich glaube man muss wohl jetzt bezahlen.
Sicher bin ich mir da aber nicht.

Mit freundlichen Grüßen
Uwe
Mit freundlichen Grüßen

Uwe

--------------////////-------------
CCU3 und fast nur noch HMIP

Mutter gibt es wirklich sowas, wie den perfekten Mann?
Sicher Kind, sie werden Biker genannt ;-)

Xel66
Beiträge: 14085
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 580 Mal
Danksagung erhalten: 1492 Mal

Re: Homematic und Google Apps

Beitrag von Xel66 » 24.11.2020, 06:39

UwePa hat geschrieben:
24.11.2020, 06:23
Ich glaube man muss wohl jetzt bezahlen.
Kann ich nicht bestätigen. Mein Urlaubskalender läuft immer noch (kostenfrei). Habe mich darum auch nicht weiter gekümmert. Vor Jahren mal eingerichtet. Das Einzige, was ich derzeit noch mache, meine Urlaube in den Kalender einzupflegen, damit die Heizungs-, Rollladen, und Lichtsteuerung das in ihren Automatismen mit betrachtet.

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

Benutzeravatar
UwePa
Beiträge: 329
Registriert: 26.08.2015, 06:27
System: CCU
Wohnort: Berlin (Speckgürtel)
Hat sich bedankt: 25 Mal
Danksagung erhalten: 3 Mal

Re: Homematic und Google Apps

Beitrag von UwePa » 24.11.2020, 07:31

Xel66 hat geschrieben:
24.11.2020, 06:39

Kann ich nicht bestätigen. Mein Urlaubskalender läuft immer noch (kostenfrei). Habe mich darum auch nicht weiter gekümmert. Vor Jahren mal eingerichtet. Das Einzige, was ich derzeit noch mache, meine Urlaube in den Kalender einzupflegen, damit die Heizungs-, Rollladen, und Lichtsteuerung das in ihren Automatismen mit betrachtet.

Gruß Xel66
Moin,

du Glücklicher. Meins läuft seit ca. einer Woche nicht mehr, obwohl ich am Script nichts geändert habe.


Uwe
Mit freundlichen Grüßen

Uwe

--------------////////-------------
CCU3 und fast nur noch HMIP

Mutter gibt es wirklich sowas, wie den perfekten Mann?
Sicher Kind, sie werden Biker genannt ;-)

Antworten

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