Homematic und Google Apps

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

Moderator: Co-Administratoren

Stimpy
Beiträge: 153
Registriert: 29.12.2012, 01:14

Re: Homematic und Google Apps

Beitrag von Stimpy » 08.01.2017, 18:50

DrTob hat geschrieben:hab' noch dran gedacht :)

hier mein Script, wird täglich einmal um 0:10 Uhr ausgeführt:

(Verwendet ein Cuxd-Exec-Gerät (kanal 3) und füllt die Systemvariablen "UrlaubStatus", "Muell.Gruen", "Muell.Grau" und "Muell.Gelb" und "Muell.Nachricht")

Code: Alles auswählen

string cmd = "LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl -s -k -L 'https://script.google.com/macros/s/-/exec?pwd=XXXXXXXXXXXXXXXXXXXXX&cmd=";

dom.GetObject("CUxD.CUX2801001:3.CMD_SETS").State(cmd # "urlaub_ex'");
dom.GetObject("CUxD.CUX2801001:3.CMD_QUERY_RET").State(1);
dom.GetObject("UrlaubStatus").State(dom.GetObject("CUxD.CUX2801001:3.CMD_RETS").State());

dom.GetObject("CUxD.CUX2801001:3.CMD_SETS").State(cmd # "muell&color=green'");
dom.GetObject("CUxD.CUX2801001:3.CMD_QUERY_RET").State(1);
string gruen = dom.GetObject("CUxD.CUX2801001:3.CMD_RETS").State();
dom.GetObject("Muell.Gruen").State(gruen);

dom.GetObject("CUxD.CUX2801001:3.CMD_SETS").State(cmd # "muell&color=grey'");
dom.GetObject("CUxD.CUX2801001:3.CMD_QUERY_RET").State(1);
string grau = dom.GetObject("CUxD.CUX2801001:3.CMD_RETS").State();
dom.GetObject("Muell.Grau").State(grau);

dom.GetObject("CUxD.CUX2801001:3.CMD_SETS").State(cmd # "muell&color=yellow'");
dom.GetObject("CUxD.CUX2801001:3.CMD_QUERY_RET").State(1);
string gelb = dom.GetObject("CUxD.CUX2801001:3.CMD_RETS").State();
dom.GetObject("Muell.Gelb").State(gelb);

string msg = ' ';
if (gruen == 'Morgen'){
  if (msg == ' ')
  {
    msg = 'Morgen Papiermüll';
  }
  else
  {
    msg = msg # ' und Papiermüll';
  }
}
if (gelb == 'Morgen'){
  if (msg == ' ')
  {
    msg = 'Morgen gelbe Säcke';
  }
  else
  {
    msg = msg # ' und gelbe Säcke';
  }
}
if (grau == 'Morgen'){
  if (msg == ' ')
  {
    msg = 'Morgen Restmüll';
  }
  else
  {
    msg = msg # ' und Restmüll';
  }
}
dom.GetObject("Muell.Nachricht").State(msg);
Danke, werd es morgen direkt testen.
Als was hast du die Systemvariablen angelegt?

Gesendet von meinem SM-G930F mit Tapatalk

Stimpy
Beiträge: 153
Registriert: 29.12.2012, 01:14

Re: Homematic und Google Apps

Beitrag von Stimpy » 11.01.2017, 17:03

Hey.
Hat alles super geklappt.
Vielen Dank dir nochmal für dein Script.
Hab jetzt nur ein Problem, das mir das Ü bei Übermorgen nicht richtig angezeigt wird.
Bei mir zeigt er immer Ãœbermorgen .
Hab in der Google WebApp Ü durch %C3%9C ersetzt, aber keine Besserung.
Wo kann man das abändern, hat vielleciht jemand einen Tip für mich.




DrTob hat geschrieben:hab' noch dran gedacht :)

hier mein Script, wird täglich einmal um 0:10 Uhr ausgeführt:

(Verwendet ein Cuxd-Exec-Gerät (kanal 3) und füllt die Systemvariablen "UrlaubStatus", "Muell.Gruen", "Muell.Grau" und "Muell.Gelb" und "Muell.Nachricht")

Code: Alles auswählen

string cmd = "LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl -s -k -L 'https://script.google.com/macros/s/-/exec?pwd=XXXXXXXXXXXXXXXXXXXXX&cmd=";

dom.GetObject("CUxD.CUX2801001:3.CMD_SETS").State(cmd # "urlaub_ex'");
dom.GetObject("CUxD.CUX2801001:3.CMD_QUERY_RET").State(1);
dom.GetObject("UrlaubStatus").State(dom.GetObject("CUxD.CUX2801001:3.CMD_RETS").State());

dom.GetObject("CUxD.CUX2801001:3.CMD_SETS").State(cmd # "muell&color=green'");
dom.GetObject("CUxD.CUX2801001:3.CMD_QUERY_RET").State(1);
string gruen = dom.GetObject("CUxD.CUX2801001:3.CMD_RETS").State();
dom.GetObject("Muell.Gruen").State(gruen);

dom.GetObject("CUxD.CUX2801001:3.CMD_SETS").State(cmd # "muell&color=grey'");
dom.GetObject("CUxD.CUX2801001:3.CMD_QUERY_RET").State(1);
string grau = dom.GetObject("CUxD.CUX2801001:3.CMD_RETS").State();
dom.GetObject("Muell.Grau").State(grau);

dom.GetObject("CUxD.CUX2801001:3.CMD_SETS").State(cmd # "muell&color=yellow'");
dom.GetObject("CUxD.CUX2801001:3.CMD_QUERY_RET").State(1);
string gelb = dom.GetObject("CUxD.CUX2801001:3.CMD_RETS").State();
dom.GetObject("Muell.Gelb").State(gelb);

string msg = ' ';
if (gruen == 'Morgen'){
  if (msg == ' ')
  {
    msg = 'Morgen Papiermüll';
  }
  else
  {
    msg = msg # ' und Papiermüll';
  }
}
if (gelb == 'Morgen'){
  if (msg == ' ')
  {
    msg = 'Morgen gelbe Säcke';
  }
  else
  {
    msg = msg # ' und gelbe Säcke';
  }
}
if (grau == 'Morgen'){
  if (msg == ' ')
  {
    msg = 'Morgen Restmüll';
  }
  else
  {
    msg = msg # ' und Restmüll';
  }
}
dom.GetObject("Muell.Nachricht").State(msg);

Rainald Adamski
Beiträge: 146
Registriert: 07.11.2013, 20:52
Danksagung erhalten: 1 Mal

Re: Homematic und Google Apps

Beitrag von Rainald Adamski » 25.01.2017, 21:38

Hallo,
ich habe mir in den Kopf gesetzt auf meinem Dashbord über Mediola NEO die Müllabfuhrtermine zu visualisieren.
Bei meiner Recherche bin ich auf diesen sehr informativen Thread gestoßen, der mir jedoch schnell meine
Grenzen aufgezeigt hat.
Daher meine Bitte um Hilfe.
Ich habe es mittlerweile geschafft, das Script von HMinside (Zusammenfassung auf Seite $eite 4) auf einer
Google HP zum laufen zu bringen.
Bei Eingabe der Adresse erhalte ich auch wie hier beschrieben eine Rückmeldung 2.0, aber das sagt ja nur, daß das Script arbeitet.
Aber es werden keine Infos zurückgesendet.
Der Kalender ist freigegeben, das Script veröffentlicht, ich glaube das sind erst mal die Grundvoraussetzungen

Hier der verwendete Scriptcode.

Code: Alles auswählen

   function doGet(request) {
      var answer = "2.0";

      if ( request.parameters.cmd == "muell" )
      {
          answer = getEventsToday();
        }
     
      return ContentService.createTextOutput(answer);
    }

    // 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);
    }
Den Parameter "muell" habe ich auch schon in meinen Kalendernamen geändert, aber ohne Erfolg.
Was sagt der Name aus? Welchen Bezug hat er?

Kann mir bitte jemand weiterhelfen?

Danke vorab
Gruß

Rainald

Rainald Adamski
Beiträge: 146
Registriert: 07.11.2013, 20:52
Danksagung erhalten: 1 Mal

Re: Homematic und Google Apps

Beitrag von Rainald Adamski » 26.01.2017, 20:25

Hallo,
alles zurück auf Null. Ich konnte das Problem dank eines hervorragenden Tutorials, Schritt für Schritt - Anleitung, von User 33zdenko, lösen.
Herzlichen Dank dafür.
Für alle die es interessiert hier ist die Anleitung http://homematic-forum.de/forum/viewtop ... 30#p330178
Gruß

Rainald

Spike08122
Beiträge: 7
Registriert: 10.03.2017, 19:15

Re: Homematic und Google Apps

Beitrag von Spike08122 » 07.11.2017, 22:02

Nabend zusammen,

da ich mit Skripten nicht so fit bin, habe ich das ganze mit Tasker realisiert. Ich lasse die zukünftigen Termine auslesen und setzte dann Systemvariablen

- Papiermüll treu/false
- Restmüll true/false
- Welcher Müll wird morgen abgeholt keine/Restmüll/Papiertonne (Bild)

per Telegram lasse ich mir dann noch ein entsprechende Nachricht schicken.

Das funktioniert auch alles gut.

Hier in dem Beitrag auf Seite 4 hat HMside das mit der Anzeige mit Icons gelöst, sehr schick, hätte ich auch gern.

Wie kann ich den der Systemvariablen bei einem bestimmten Zustand das entsprechende Icon zuweisen.

Suchfunktion hat mich nicht weiter gebracht, kann mir jemand helfen?

Grüße

Spike
Dateianhänge
Unbenannt.png
Unbenannt.png (2.99 KiB) 4091 mal betrachtet

mel04
Beiträge: 44
Registriert: 10.11.2014, 14:09

Re: Homematic und Google Apps

Beitrag von mel04 » 12.11.2017, 16:11

Läuft bei mir bis zu einem Punkt.
Je nach Kalendereintrag bekomme ich richtigerweise eine 1 oder eine 0 zurück.
Aber die Variable "Urlaub" wird offensichtlich nicht gefüttert. Ist immer "Nein" (also 0).

Nach Aufruf des Programmes steht im Cuxd-Log steht:
Nov 12 14:08:58 homematic-ccu2 daemon.warn cuxd[13703]: use CUX2801001:1.CMD_QUERY_RET=1 to activate CUX2801001:1.CMD_RETS command!

Liegt dort der Fehler?

Bin für Tipps dankbar.

mel04
Beiträge: 44
Registriert: 10.11.2014, 14:09

Re: Homematic und Google Apps

Beitrag von mel04 » 27.05.2018, 10:12

Versuche mich mal wieder mit dem Problem.
Aber der Fehler scheint immer noch im Cuxdaufruf zu liegen. Hat keiner einen Tipp?

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

Re: Homematic und Google Apps

Beitrag von Framajo » 08.11.2018, 19:11

Hallo Forum,

ich habe eine Frage: ich habe die Anwesenheiten meiner Scheidungskinder im google-Kalender vermerkt. Ziel ist es, die Heizungssteuerung in den Kinderzimmern darüber zu steuern (in den Zimmern sind HMIP-Thermostate, welche an der CCU2 angelernt sind.

Das script stammt ursprünglich vom Anfang des Threads mit der Abfrage "Urlaub".

Ich habe in der Annahme, dass die Angabe "Kinder" im unten eingefügten Beispiel der string ist, der abgefragt wird. Allerdings klappt das leider nicht, wenn ich das script ausführe bekomme ich in jedem Fall ein "1.0" zurück, egal, ob im Kalender "Kinder" eingetragen ist oder nicht.

Wenn ich die Abfrage (URL, endet mit cmd?="urlaub") sende, kommt ein "0" zurück oder aber ein "1", wenn ich testweise für den Tag Urlaub eintrage.
Wie kann das sein, im script kommt doch das Wort "Urlaub" gar nicht vor? Was ich schon rausgefunden habe ist, dass das script zwischen urlaub und Urlaub (groß/klein) unterscheidet.

Wo ist mein Denkfehler?

Dank euch,

F.


// Script-as-app template.
function doGet(request) {
var answer = "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.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);
}

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 » 08.11.2018, 19:42

Mach es dir doch nicht so schwer.
Ich habe das über die Events geregelt und mir alles in eine Variable geschrieben. Beispielhaft das nachfolgende Script. Hier für die Abfrage eines Schichtkalenders. Das Prinzip ist ja immer das selbe...
Denk dran den CUxD Exec richtig anzupassen!
PW, Kalender Script ID, Cuxd und Variable nach deinem Wunsch anpassen.

Code: Alles auswählen

!Abfrage Schichtkalender
!Auslesen eines Google Kalenders, hier des Schichtkalenders, mittels Google Script (http://script.google.com/)
!Anpassung Toni Jacob
!URL Direktabfrage Heute: https://script.google.com/macros/s/<hier_deine_Kalender_ID>/exec?pwd=<PW_wie_im_Script>&cmd=events
!URL Direktabfrage 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.CUX2801002:1.CMD_SETS").State(cmd);
dom.GetObject("CUxD.CUX2801002:1.CMD_QUERY_RET").State(1);
string Kalendereintrag = dom.GetObject("CUxD.CUX2801002:1.CMD_RETS").State();

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

! WriteLine(daten);

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

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

! WriteLine(daten);

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

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

! WriteLine(daten);

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

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

! WriteLine(daten);

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


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

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.CUX2801002:1.CMD_SETS").State(cmd);
dom.GetObject("CUxD.CUX2801002:1.CMD_QUERY_RET").State(1);
string Kalendereintrag = dom.GetObject("CUxD.CUX2801002:1.CMD_RETS").State();

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

! WriteLine(daten);

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

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

! WriteLine(daten);

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

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

! WriteLine(daten);

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

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

! WriteLine(daten);

if ( daten.Value() == "frei" )
{
  dom.GetObject("<deine_zu_schreibende_Variable>").State(3);
}
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.12.2018, 15:42

Hallo Forum,

ich glaube, das ist mir zu hoch .... folgendes Szenario:

- App script ist erstellt und liefert im browser auch das gewünschte Ergebnis (0 oder 1)
- script aus dem Anfangsthread hier ist eingefügt im einem Programm der CCU2, soll laufen nachts um 00:10. "script testen" ohne Fehler
- Systemvariable Urlaub ist erstellt, Werte "ja" oder "nein"
- CCU2 hat Verbindung zum Internet, da flog hier irgendwo mal ein script rum, mit dem man das testen kann
- ssh ist aktiviert


- CURL ist nicht installiert, ist ja im Cuxd drin?
- CUxD Exec ist installiert, muss in die Felder was rein?
- wenn ich das script im editor der CCU teste, passiert nichts

Die Variable wird auch nicht umgeschrieben...

Ich bin verzweifelt, wo steht der Baum, gegen den ich immer laufe?

Dank euch!!
Unbenannt.JPG

Antworten

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