Müllkalender

Haussteuerung mittels mediola

Moderator: Co-Administratoren

33zdenko
Beiträge: 343
Registriert: 21.12.2013, 16:50
Danksagung erhalten: 4 Mal

Re: Müllkalender

Beitrag von 33zdenko » 12.03.2017, 16:33

Ich möchte gerne die Lösung mit dem Google-Script von 33zdenko nutzen (von Seite 3). Nachdem ich das Script als Web-App veröffentlich habe und den ersten Testaufruf starte, bekomme ich auch 1.4 als Ausgabe - soweit so gut. Wenn ich allerdings events oder eventstomorrow abrufen möchte, erhalte ich immer eine Fehlermeldung:

TypeError: Methode "getEvents" von null kann nicht aufgerufen werden. (Zeile 50, Datei "Code", Projekt "muellkalender")

Ich kome nicht dahinter woran das liegt, kann mir einer helfen?
Hallo
Das script funktioniert
hast du ganz oben die id deines kalender eingegeben?
Am besten du gehst ganz von vorne an, wenn der kalender nicht egsistiert oder nicht freigegeben ist kommt so eine fehlermeldung
auch wenn du änderungen machst im script musst du auf versionen verwalten gehen, dannach wieder veröffentlichen,steht aber alles in der anleitung.

moon
Beiträge: 14
Registriert: 14.04.2012, 20:32

Re: Müllkalender

Beitrag von moon » 13.03.2017, 17:19

Hey, Danke für Deine Antwort. Ja, die Kalender ID habe ich natürlich eingetragen. Veröffentlicht und freigegeben für jeden ist der Kalender auch. Aber wenn ich z.B. die Kalender ID nicht eingetragen hätte oder keine Freigabe eingestellt hätte, dann würde doch auch der Testaufruf wo der Wert 1.4 ausgegeben wird nicht funktionieren?! Das geht aber bei mir...

Soviel kann man da ja auch nicht falsch machen...

Gruß
Maik

33zdenko
Beiträge: 343
Registriert: 21.12.2013, 16:50
Danksagung erhalten: 4 Mal

Re: Müllkalender

Beitrag von 33zdenko » 13.03.2017, 19:09

Soviel kann man da ja auch nicht falsch machen...
trage ich die id eines kalenders der nicht egsistiert,wird trotzdem 1.4 ausgegeben
aber der fehler welchen du bekommst, type of... kommt dann.
etwas machst du falsch, da das script funktioniert wenn du richtigen kalender eingibst, auch wenn keine events zu finden sind, dann kommt leeres string (nichts)

moon
Beiträge: 14
Registriert: 14.04.2012, 20:32

Re: Müllkalender

Beitrag von moon » 13.03.2017, 23:58

Geschafft! :mrgreen:
Wollte nur kurz sagen woran es gelegen hat. Ich hatte zuerst einen Fehler in der Kalender ID und das Script mit dem Fehler als Web-App veröffentlicht. Als ich den Fehler bemerkt und korrigiert hatte, habe ich noch einmal auf Veröffentlichen geklickt und ohne die Projektversion zu ändern auf aktualisieren geklickt. Man muss anscheinend jedoch die Projektversion ändern und dann erst auf aktualisieren klicken.

Gruß
Maik

33zdenko
Beiträge: 343
Registriert: 21.12.2013, 16:50
Danksagung erhalten: 4 Mal

Re: Müllkalender

Beitrag von 33zdenko » 14.03.2017, 07:53

Geschafft! :mrgreen:
Super!
Wie du siehst kann man doch ganz viel falsch machen, auch wenn es einfach ist :)
Wichtig, es läuft!
Gruss!

DJSimon
Beiträge: 91
Registriert: 28.03.2015, 07:17
Hat sich bedankt: 1 Mal

Re: Müllkalender

Beitrag von DJSimon » 10.10.2017, 20:56

Ich verzweifle grad an dem erzeugen der Statusbilder im Neo.

Google script und homematic funktioniert soweit, auch wenn ich eine Text-Statsuanzeige im Neo erstelle wird mir der Text aus dem Müllkalender angezeigt. Aber das erstellen der Statusbilder will nicht klappen.
Im Kalender steht immer:
z.b.:

Leerung: Biomüll

gebe ich als Stil: "State_Leerung: Biomüll.png" ein, sowie auch bei der Statsuregel bei Wert "Leerung: Biomüll".

Jemand eine Idee? Kommt Neo vielleicht nicht mit den ":" klar?

DJSimon
Beiträge: 91
Registriert: 28.03.2015, 07:17
Hat sich bedankt: 1 Mal

Re: Müllkalender

Beitrag von DJSimon » 31.10.2017, 07:16

Hallo zusammen.

Müllkalender läuft super, dank @33zdenko

Leider gibt es nun ein Problem mit meiner Servo Steuerung des iPads. Das Müllscript ändert mir ein Parameter eines Gerätes beim CuX.
Wie ich im Script lesen konnte nutzt er das selbe Gerät wie die Servosteuerung und schreibt mir jeden Tag den Parameter um.

In der Anleitung @33zdenko steht das ein Gerät bei der CuX laufen muss. Das tut es bei mir, nämlich für die Servosteuerung.
Oder muss ich für den Müllkalender ein eigenes Gerät an der CuX anlegen und die Seriennummer ändern?


33zdenko hat geschrieben:Hallo
Hier noch eine Anleitung zur Einbindung eines im Google Kalender erstellten Müllkalender, auch andere Kalender sind damit realisierbar.
Was hier besonders ist, man braucht keine Webseiten in Neo einzubinden, sondern realisiert es mit einem HM Script und 2 Variablen, welche man dann als Grafiken
und Textstatus, im Neo anzeigt.
Ich habe es so gemacht das mir die Termine für Heute und Morgen angezeigt werden, fallskeine sind wird eine Grafik angezeigt, kein Müll.

Was man noch braucht, ist ein Google Script, aus diesem Thread: http://homematic-forum.de/forum/viewtop ... 10#p100205 von dem User DrTob, welches ich ganz wenig verändert habe, um einen anderen in Google erstellten Kalenderabzufragen, mit angabe der ID des Kalenders.

Zuerst geht man in Google Kalender und erstellt einen neuen Kalender, mit dem Namen z.b. Müllkalender. Nun importiert man einen ics, csv Kalender von seinem Anbieter, wenn man nur ein Pdf hat,
muss man die Termine dann selbst eintragen, aber das ist auch schnell erledigt.
Was man beim Import zu beachten ist, dass man bei importieren angibt den richtigen, neuerstellten Kallender.
Es sollten keine anderen Termine eingetragen sein, als Mühlabfuhr, da es sonst nicht zur richtiger zuweisung der Variablen kommt, im HM Script.

Jetzt geht man hier weiter zu http://script.google.com/
und dort fügt man dann dieses script ein:

Code: Alles auswählen

//Configuration
//Calendar to access (ID)
  var cal = 'xxxxxxxxxxxxxx@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("grüne Tonne|Grünabfall");
    }

    function findNextGrey()
    {
      return findNext("graue Tonne|Restmüll|Restmuell|Restabfall");
    }

    function findNextYellow()
    {
      return findNext("gelber Sack|gruener Punkt|gelbe Säcke|gelbe Saecke");
    }

    function findNextBrown()
    {
      return findNext("braune Tonne|Biotonne|Biomüll|Biomuell|Bioabfall");
    }

    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;
    }
wichtig ist das man diese Zeile ganz oben, anpasst, mit der richtiger ID eigens Kalenders.

Code: Alles auswählen

var cal = 'xxxxxxxxxxxxxx@group.calendar.google.com
Ist da eingetragen, muss man die Datei speichern, im menu links, Datei/File wählen und Speichern, namen einegeben z.b. homematic oder was auch immer.
Jetzt muss man das Script als WebApp veröffentlichen, im menu auf veröffentlichen gehen, als Web App einrichten.
In dem Fenster muss man es so einstellen:
Bildschirmfoto 2016-12-30 um 17.42.39.png
wichtig ist als ich und im Zugriff, alle auch anonyme Nutzer.
auf einrichten klicken, jetzt kommt ein neues fenster:
Bildschirmfoto 2016-12-30 um 17.49.05.png
diesen code kopiert man sich, klickt OK, und gibt es in andrem Tab des Browser ein...
Ist alles richtig, bekommt man 1.4 als Antwort zurück.
Jetzt zum testen macht man für Heute und Morgen, Termine im Müllkalender, z.b. Altpapier in Heute, Gelber Sack in Morgen Termin
Nun gibt man die URL ein welche oben schon in Browser eingegeben wurde, ergäntzt um: '?pwd=test&cmd=events' ... was so in etwa so aussieht:

Code: Alles auswählen

https://script.google.com/macros/s/AKfybwMTT5r0Lk7Uazfisi7sLPI_zRBkzFWO3zg-3UUI/exec?pwd=test&cmd=events
das sollte jetzt altpapier zurückliefern
dann noch das:

Code: Alles auswählen

https://script.google.com/macros/s/AKfybwMTT5r0Lk7Uazfisi7sLPI_zRBkzFWO3zg-3UUI/exec?pwd=test&cmd=eventstomorrow
was dann gelber sack liefern sollte.

Wenn das klappt, jetz gehen wir zum homematic Teil, zuerst 2 Variablen auf der CCU anlegen, beide als Zeichenkette:

Code: Alles auswählen

MuellHeute
MuellMorgen
Wichtig! Cuxd addon muss auf der zentrale laufen und ein System exec Gerät muss dort vorhanden sein, sonst hier im Forum nachschauen....

Jetzt auf der CCU bei Programme und Verknüpfungen gehen und dort auf Script testen klicken und diesen Code einfügen:

Code: Alles auswählen

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

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/AKfybwMTT5r0Lk7Uazfisi7sLPI_zRBkzFWO3zg-3UUI/exec";
var cmd = "LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl -s -k -L '" # url # "?pwd=test&cmd=eventstomorrow'";
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State(cmd);
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
var oV = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
var lMuell = dom.GetObject("MuellMorgen");

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);
}
die erste Zeile anpassen:

Code: Alles auswählen

var url="https://script.google.com/macros/s/AKfybwMTT5r0Lk7Uazfisi7sLPI_zRBkzFWO3zg-3UUI/exec"
mit euerer
noch weiter unten ist auch so eine Zeile, diese auch anpassen:
wichtig ist nur das zwischen den anführungszeichen zu ersetzen!
jetzt ausführen anklicken, und schon mussten euere 2 Variablen befüllt sein mit den Werten aus dem Kalender.

Nun ist es möglich mit diesem Script beliebig viele Termine eines Tages auszulesen...
Die Variablen werden so befüllt:
zb.MuellHeute= termin1, termin2, termin3 oder z.b. gelber sack, restmüll, bioabfall.... hängt davon ab wieviele eintragungen für einen Tag im Kalender vorhanden sind.
Bei mir sind höchstens drei Termine an einem Tag drinn, manchmal 2 und an einigen Tagen nur eins.
Deswegen habe ich mir einzelne Grafiken für Neo angelegt, wie in diesem Post: http://homematic-forum.de/forum/viewtop ... 30#p103396
So habe ich mir alle Grafiken in der Breite von 180px und Höhe von 60px angelegt:
bioabfall.png
da ist nur ein bild drinn 60x60px aber die grafik ist 180px breit, so wenn jetzt mehrere termine ausgelesen werden (bis zu 3 bei mir) solche Grafik entstehen kann:
mit 2 terminen:
gelber sack-bioabfall.png
oder auch 3 manschmall:
problemabfall-gelber sack-bioabfall.png
Da die neuen CCU Variablen in Neo noch nicht bekannt sind muss man sie zuerst im Geräte Manager importieren,um sie als Status verwenden zu können.
Am besten man legt alle Grafiken für Neo in einem Ordner am PC an
Jetzt werden sie in Neo erstmall importiert, wie im Bild:
zuerst erstellt man eine Grafik im Neo, aus dem menü links
und stellt man die breite und höhe eigener grafik ein, jetzt rechts bei status, den status der grafik zuweisen, gateway auswählen und dann die Variable, MuellHeute wählen.
Bildschirmfoto 2016-12-30 um 19.21.01.png
jetzt bei icon rechts den stift klicken und in dem fenster auf importieren oben klicken, jetzt machen wir das für alle grafiken für unseren kalender:
Bildschirmfoto 2016-12-30 um 19.44.08.png
wichtig ist ein eigenen Typ zu machen, im Bild Abfall z.b....bei Still kann man meins schreiben oder eigener...
bei Name ist wichtig den Namen so zu wählen (schreiben!):
state_bioabfall.png wenn der termin im Kalender so eingetragen ist
dann z.b. state_restabfall, altpapier.png wenn die termine im kalender so eingetragen sind, bitte beachten dass wenn die termine so engetragen sind:
Bildschirmfoto 2016-12-30 um 19.51.40.png
die Variable dann so befüllt wird: bioabfall, altpapier -also von unten nach oben bennant...
so muss dann die grafik bei name, im import fenster im neo exaxt heissen:
state_bioabfall, altpapier.png (beachte das lerzeichen hinter komma)
und nun weiter machen für jede weitere grafik bzw. möglichen fall:
jetzt z.b. für den fall das drei termine eingetragen sind:
Bioabfall
Gelber Sack
Problemabfall
liefert die variable dann umgekehrt die reihenfolge...also muss die grafik dann heissen:
state_problemabfall, gelber sack, bioabfall.png
es ist nicht wichtig wie die zu importierende grafik am pc heisst!!!
nochmal im Bild:
Bildschirmfoto 2016-12-30 um 20.05.24.png
Nicht vergessen jedesmal Importieren zu klicken.
Man braucht zumindest eine grafik die den status undefined.png haben muss:
Bildschirmfoto 2016-12-30 um 20.10.15.png
Wenn alle grafiken importiert sind, müssen wir noch die statusregeln definieren:
auf das +hinzufügen klicken und einen namen geben, und jetzt so erstellen:
bei wert den status eintragen, genauso wie variable liefert. z.b. problemabfall, bioabfall
hier ohne state_ davor
dann daneben das bild auswählen, unter dem typ Abfall und Still meins, erscheinen die entsprechende grafiken:
die grafik dann wählen passend für variablen status.
Viel Spaß! und Alles Gute in Neuem Jahr!

Edit: Zeilen

Code: Alles auswählen

    function findNextGreen()
    {
      return findNext("grüne Tonne|Grünabfall|");
    }
Geändert in

Code: Alles auswählen

    function findNextGreen()
    {
      return findNext("grüne Tonne|Grünabfall");
    }
Edit: wenn alles läuft, dann auf der ccu ein programm erstellen, bei wenn zeitsteuerung, jeden tag um 0:05, bei dann dieses ccu script von oben ausführen.

33zdenko
Beiträge: 343
Registriert: 21.12.2013, 16:50
Danksagung erhalten: 4 Mal

Re: Müllkalender

Beitrag von 33zdenko » 31.10.2017, 09:33

Oder muss ich für den Müllkalender ein eigenes Gerät an der CuX anlegen und die Seriennummer ändern?
Genau ein neues cuxd gerät anlegen, die seriennummer merken und im script für müll ändern...

Visu
Beiträge: 507
Registriert: 04.12.2016, 23:30
Hat sich bedankt: 2 Mal
Danksagung erhalten: 2 Mal

Re: Müllkalender

Beitrag von Visu » 31.10.2017, 10:06

Hallo,
ich verwende den "Mega Kalender Script" für die CCU2, über Neo habe ich selbst erstellte Icons eingebunden, jetzt wird mir einen Tag vorher und am selben Tag die Tonne angezeigt.
Dateianhänge
müll.JPG
müll.JPG (13.85 KiB) 3597 mal betrachtet
müll2.JPG
müll2.JPG (20.51 KiB) 3597 mal betrachtet

33zdenko
Beiträge: 343
Registriert: 21.12.2013, 16:50
Danksagung erhalten: 4 Mal

Re: Müllkalender

Beitrag von 33zdenko » 31.10.2017, 10:23

@Visu
ist das ein info oder ein fehler? :)

Antworten

Zurück zu „mediola“