[Modul] Abfallwirtschaft - Awido, Abfall+, Regio IT, MyMüll, MüllMax, ICS

Hey pitti,

das war’s es geht wieder :slight_smile: vielen Dank für deinen gewohnt super schnellen Support :+1: :+1: :+1: :slight_smile:

Hallo Pitti,
danke für das feine Modul.
Evtl. ein kleiner Wurm?
Wenn ich bei der Farbe der Tonne einen HEX-Wert reinkopieren möchte so funktioniert dies unter Windows STRG-V nicht.
Sind zwar nur 5 Werte, wäre aber fein.
image
Liebe Grüße…

Hallo Pitti,
ein Wunsch, ein Traum, ein Featurerequest…
In der Oberfläche wird doch angezeigt in wie vielen Tagen eine erneute Entleerung / Abholung erfolgt.


Wäre es möglich diesen Wert in eine neue, zusätzliche Variable einmal oder 2x tgl. zu schreiben?
Vermtl. 2x. weil nach dem Zeitpunkt der vorausschauenden Anzeige sollte es auch nochmals laufen.
Oder muss ich mich darum selbst kümmern ?
Danke und schöne Grüße.

Ist mir bekannt und ärgert mich auch immer, aber hat nichts mit dem Modul zu tun. Der Farbauswahldialog wird von Symcon gesteuert. Da habe ich keine Anteile dran und somit auch keine Einflußmöglichkeiten :wink:

Gruß Heiko

1 „Gefällt mir“

Für welchen Anwendungszweck? Verstehe den Hintergrund nicht!

Hast Du die „Vorrausschauende Anzeige“ aktiviert, das sollte doch Deinem Ansinnen entsprechen?!?

Gruß HEiko

Anwendungszweck:
Die „Vorausschauende Anzeige“ wirkt meines Erachtens nur visuell auf Webfront bzw. Tile-Anzeige.
Ich möchte jedoch bei diesem Display Hervorragendes und günstiges Mini Touch Display immer die Mülleimer grau angezeigt lassen und wenn wir 2 Tage vor Entleerung sind dann werden diese eingefärbt - bzw. sogar die Anzahl an Tagen angezeigt - das weiß ich noch nicht wie es sich vom Platz her ausgehen wird.

Okay, Du meinst also sowas hier …

image

Und abgesehen davon, da Du das ja sowieso auf das Display selbst bringen musst - was nutzt Dir dann eine 2. Variable? Sorry, ich verstehe nicht was das Modul zusätzlich tun muss damit Du Deinen Anwendungsfall lösen kannst. Welche Info fehlt Dir?

Gruß Heiko

Genau.
Die „nächste Abholung in 2 Tagen“ berechnest du selbst aufgrund des Abholdatums ?

Genau, ich habe einfach ein Script geschrieben das alles für mich macht. Es ist natürlich auf meine Umgebung zugeschnitten, aber ich setze es mal hier rein.

Hier das Skript (ist original fürs WebFront entstanden, macht jetzt aber auch Tile und openHASP) …

<?php

declare(strict_types=1);

################################################################################
# Script:   Calendar.SortByDate.ips.php
# Version:  2.0.20230806
# Author:   Heiko Wilknitz
#
# Sortiert nach Datum die Links für Entsorgungstermine
#
# ----------------------------------- ID´s -------------------------------------
#
# Nicht das Modul selbst sondern nur der Visualisierungs-'Vater'
$parentID = 18852;
#
# Variablen für openHASP
$wiID = 23198;
$wnID = 14562;
$wtID = 53047;
$wmID = 12125;
#
# Übersetzungstabelle
$TRANS_TABLE = array(
    'Monday'    => 'Montag',
    'Tuesday'   => 'Dienstag',
    'Wednesday' => 'Mittwoch',
    'Thursday'  => 'Donnerstag',
    'Friday'    => 'Freitag',
    'Saturday'  => 'Samstag',
    'Sunday'    => 'Sonntag',
    'Mon'       => 'Mo',
    'Tue'       => 'Di',
    'Wed'       => 'Mi',
    'Thu'       => 'Do',
    'Fri'       => 'Fr',
    'Sat'       => 'Sa',
    'Sun'       => 'So',
    'January'   => 'Januar',
    'February'  => 'Februar',
    'March'     => 'März',
    'May'       => 'Mai',
    'June'      => 'Juni',
    'July'      => 'Juli',
    'October'   => 'Oktober',
    'December'  => 'Dezember',
);

$WASTE_TYPES = [
    'blue'  => ['Color'=> '#11A0F3', 'Match'=> 'papier|pappe|zeitung'],
    'green' => ['Color'=> '#58A906', 'Match'=> 'bio|grün|garten|baum|schnittgut'],
    'yellow'=> ['Color'=> '#FFC107', 'Match'=> 'gelb|plaste|pvc'],
    'red'   => ['Color'=> '#F35A2C', 'Match'=> 'schadstoff|sonder|sperr|problem'],
    'gray'  => ['Color'=> '#999A9C', 'Match'=> 'rest']
];

$WASTE_ICON_TEXT = '%s \uEA7A# ';

#
################################################################################
#
# Requires include of the global function script via autoload (__autoload.php)
# or direct in the script (uncomment next line)!
# require_once(IPS_GetKernelDir()."scripts".DIRECTORY_SEPARATOR.'System.Functions.ips.php');
# You can download it from here https://github.com/wilkware/ips-scripts
#
defined('WWX_FUNCTIONS') || die('Global function library not available!');

// String Params
$lookahead = false;

// get all Links
$childs = IPS_GetChildrenIDs($parentID);
// read the data
$table = array();
foreach($childs as $child) {
    $link  = IPS_GetLink($child);
    $pos   = IPS_GetObject($link['TargetID'])['ObjectPosition'];
    $name  = IPS_GetName($child);
    $type  =  RecognizeWaste($name, $WASTE_TYPES);
    $date  = GetValue($link['TargetID']);
    $days  = CalcDaysToDate($date);
    $table[] = array('date' => $date, 'link' => $child, 'pos' => $pos, 'name' => $name, 'type' => $type, 'days' => $days);
}
// sort by date
usort($table, 'SortByDate');

//var_dump($table);

$names = [];

// set the sorted positions and what happend tommorow?
for ($i = 0; $i < count($table); $i++) {
    if (strtotime($table[$i]['date']) === strtotime('tomorrow')) {
        $names[] = $table[$i]['name'];
    }
    IPS_SetPosition($table[$i]['link'], $i);
}

// tommorow overrule today
if (!empty($names)) {
    IPS_RunScriptWaitEx(34026 , ['action' => 'add', 'text' => 'Morgen ' . implode(' und ', $names) . '!', 'expires' => time() + 86400, 'removable' => true, 'type' => 3, 'image' => 'Recycling']);
}

# ------------------------------ openHASP -------------------------------------

// look ahead update
$offset = 0;
if ($lookahead) {
    foreach ($table as $row) {
        if (strtotime($row['date']) == strtotime('today')) {
            $offset++;
        } else {
            break;
        }
    }
}

// count how many pickups as next
$pickups = 0;
$pudays = $table[$offset]['days'];
foreach ($table as $pk => $row) {
    if ($pk < $offset) {
        continue;
    }
    if ($row['days'] == $pudays) {
        $pickups++;
    } else {
        break;
    }
}

// build icons & text
$wi = '';
$wn = '';
for ($i = $offset; $i < ($offset + $pickups); $i++) {
    $wi .= sprintf($WASTE_ICON_TEXT, $WASTE_TYPES[$table[$i]['type']]['Color']);
    $wn .= $table[$i]['name'];
    if ($i != ($offset + $pickups - 1)) {
        $wn .= ', ';
    }
}

// build html texts
$next = '';
// show today only if no date tommorow
if (strtotime($table[$offset]['date']) === strtotime('today')) {
    $next = 'Heute';
}
// tommorow overrule today
if (strtotime($table[$offset]['date']) === strtotime('tomorrow')) {
    $next = 'Morgen';
}
// generate widget for tile visu
if ($next == '') {
    $next = date('d.m.', strtotime($table[$offset]['date']));
    $next = strtr(date('D', strtotime($table[$offset]['date'])), $TRANS_TABLE) . '. ' . $next;
}
$wt = '';
// date infos
$days = $table[$offset]['days'];
$day  = strtotime($table[$offset]['date']);
$wd = strtr(date('l', $day),$TRANS_TABLE);
$sd = date('d.m.', $day);
if ($days > 1) {
    $wt = "Nächste Abholung:\nin $days Tagen\nam $wd $sd";
} else {
    $wt = "Nächste Abholung:\n$next\nam $wd $sd";
}
SetValue($wiID, $wi);
SetValue($wnID, $wn);
SetValue($wtID, $wt);
SetValue($wmID, $next == 'Morgen');

# ------------------------------ Functions -------------------------------------

function SortByDate( $a, $b) {
    return strtotime($a['date']) - strtotime($b['date']);
}

function CalcDaysToDate($startDate, $endDate = null)
{
    if (empty($endDate)) $endDate = date('Y-m-d');
    return intval(round(abs(strtotime($endDate) - strtotime($startDate)) / (60 * 60 * 24)));
}

function RecognizeWaste($name, $matches)
{
    foreach ($matches as $type => $match) {
        $pm = '/(' . $match['Match'] . ')/i';
        if (preg_match($pm, $name)) {
            return $type;
        }
    }
    // Rest or all others
    return 'gray';
}


################################################################################

Hier die IDs, welche im Skript verwendet werden …


(Variablen für openHASP)


(parentID Variable)

Die $parentID zeigt auf das WebFront Dummy Modul (halt historisch gewachsen)

Man kann das bestimmt auch anders und einfacher machen, aber wie es immer ist - nerver touch a running system :smiley:

Viel Spaß Heiko

2 „Gefällt mir“

Danke Heiko,
den Spaß werde ich haben.
Du berechnest in etwa genau das was ich auch haben möchte.
Die Geschmäcker sind in etwa gleich :slight_smile:
Hans

1 „Gefällt mir“

Hi,

habe mich SEHR über das Modul gefreut, kann es allerdings nicht erfolgreich installieren auf meiner Symbox mit IP-Symcon 7.2 Unlimited.

=> Modulstore, Installation klappt
=> Konfig-Instanz wird angelegt
=> Wenn ich in der Konfig-Instanz MyMüll auswähle und anlege, wird die Instanz auch angelegt, allerdings direkt als fehlerhaft im Objektbaum ausgewiesen. Ein Doppelklick darauf lässt die Eieruhr endlos drehen

Ich habe dann probiert, IP-Symcon neu zu starten. Dann wird’s ganz magisch: die angelegte MyMüll-Instanz war weg, die ID existierte nicht mehr. Mehrmals reproduzierbar ausprobiert.

Kannst Du mir bitte helfen, das Modul zu installieren?

1.000 Dank

VG: Lars

PS: Meine Location ist 64342 Seeheim-Jugenheim, deswegen MyMüll :slight_smile:

Kannste mal versuchen einfach ne andere Instanz zu erstellen, z.B. ICS um zu checken ob es ein generelles Problem ist oder nur von Mymüll!?

Scheinbar ein generelles Problem, stellt sich jedoch etwas anders dar…

  • Modul neu installiert
  • ICS und IO installiert, beide gehen sofort auf ‚Diese Instanz ist fehlerhaft‘
  • Ist das ggf. normal, weil ich ja noch nichts konfiguriert habe innerhalb ICS/IO?
  • Beide Instanzen kann ich durch Doppelklick aufrufen und könnte konfigurieren
  • Symcon neu gestartet (nur Dienst, nicht Symbox), unverändert sind beide Instanzen da/fehlerhaft
  • Dann noch einmal MyMüll installiert, selbes Bild wie beschrieben…
  • Ewige Eieruhr bei Aufruf, nach Neustart Symcon bleibt MyMüll jetzt ebenso wie ICS/IO fehlerhaft da
  • Nach Neustart gleiches Verhalten, d.h. MyMüll: Ewige Eieruhr, ICS/IO-Aufruf funktioniert

Hast Du eine Idee, wie das klappen bzw. woran das liegen könnte?

Ich danke Dir :slight_smile:

VG: Lars

image

Ich bin gerade nicht am Rechner , aber ja die Instanzen sind nach anlegen vom Status her Rot, weil noch nicht konfiguriert. Das wird aber oben im Konfig-Dialog angezeigt was fehlt. Meinst du das mit fehlerhaft?
Man muss ja erst alle Daten auswählen und konfigurieren, ohne Wüste die Imstanz ja nicht wohin sie gehen soll um Daten abzurufen.

Das mit der Eieruhr bei Mymüll scheint dann aber ein Problem zu sein, schaue ich nachher mal bei mir.

Gruß Heiko

So habe gerade mal eine neue Instanz von MyMüll angeleget. Ging schnell und ohne Probleme …

image

Wie geschrieben wird dann oben auch angezeigt was erwartet wird!

Gruß Heiko

Hallo Heiko,

warum auch immer: jetzt geht es. Ich habe ihn einfach einmal in Ruhe die Eieruhr drehen lassen und nach einiger langer Zeit war dann alles da. Funktioniert auch super. Ich danke Dir vielmals.

Das einzige, was ich trotz Lesen der Doku nicht kapiert habe, ist die Option zur Anzeige von Folgeterminen. Zu einer bestimmten Zeit, so die Doku, wird auf Folgetermin umgeschaltet. Wie ist das zu verstehen?

Ich hätte gerne, dass der aktuelle Leerungstermin so lange drin stehen bleibt, bis der Tag rum ist. Also wenn Altpapier heute abgeholt wird, soll dann erst morgen 0:30 Uhr der nächste Termin für Altpapier erscheinen.

Freue mich auf Deine Rückmeldung.

Herzlichen Dank. Auch für Deine Testing- und Ausprobierarbeit :slight_smile:

VG: Lars

Hallo @pitti ,

nachdem mich Dein Modul schon lange begleitet hat, habe ich nun auch die Möglichkeit einer Tile in der neuen Visu gefunden :smiley:. Prima!

Dies könnte mein eigenes Auswertescript ersetzen, welches ich bisher zur Anzeige verwendet habe.
Allerdings hinterlegt dieses die Kachel farbig, wenn ein Abholtermin bevorsteht. Morgen wird z.B. der Biomüll abgeholt und die Kachel ist daher von heute 12:00 bis morgen 12:00 braun hinterlegt. Danach wieder farblos. Damit fällt es besser auf, dass die Tonne nach Vorne muss…

Könnte sowas auch in die Kachelvisualisierung eingebaut werden?
Diese zeigt aktuell Morgen an (Vorausschauende Anzeige ist aktiv, Update um 12:00).
Also entweder das „Morgen“ farblich hinterlegen (wie in der „großen“ Ansicht mit der Tabelle), oder durch Invertieren der Kachel (Hintergrund dann Mülltonnenfarbe, Mülltonne schwarz)?

Hier ein Bild Deiner Kachel und meiner Aufzählung in einer Kachel:

image

Sehr schön, wer weiß was im Hintergrund zu tun war :slight_smile:

Eigentlich das was Du im nachfolgenden Absatz beschrieben hast. Normalerweise wird auch nich am Tag der Abholung die aktuelle Leerung angezeigt, als wenn heute der Restmüll geholt wird steht in der Kachel „Heute Restmüll“. Wenn, z.B. die Leerung am Morgen ist und du schon am Mittag sehen willst das am Nachfolgetag die Biotonne geleert wird, dann aktivierst Du die Anzeige von Folgeterminen. Dann wird die aktuelle Tagesleerung aus der Anzeige herausgenommen und nicht angezeigt.

So ist der Standard, d.h. wenn du die oben genannte Option nicht aktivierst, funktioniert es genau so wie du es haben möchtest.

Gruß Heiko

Interesssante Idee, auf die schnelle könnte ich mir eine Art „Invertierungs“-Option vorstellen, also die Kachel bleibt wie sie ist, aber der Hintergrund bekommt die Farbe und das Symbol bleibt halt weiß oder wie gerade der Theme eingestellt ist. Das wäre glaube ich gut umsetzbar!

Gruß Heiko

Hallo Heiko,

das wäre schön und ist auch die „ansehlichere“ Lösung. Wenn mehrere Tonnen am selben Tag abgeholt werden wird dann die oberste Farbe in der Liste genommen?

VG Rüdiger