dank unserem Landkreis und ein paar freien Tagen übers neue Jahr hat mein zweites Modul das Licht der Welt erblickt
Thema ist diesmal Abfall-/Entsorgungstermine. Ich hatte das frühere mühsam in einem Script verpackt, wo ich jedes Jahr die Daten per Hand am Jahresanfang eingetragen habe. Dank unserem Landkreis, welches zum Jahreswechsel allen Bürgern ein Geschenk in Form eine Online-App von awido gemacht hat, konnte ich das jetzt automatisieren und gleich in ein Modul verpacken. Damit vielleicht einige im selben oder anderen verfügbaren Gebieten (siehe Doku) etwas davon haben
Das Aufwendigste war die dynamische Konfiguration, welche mich um den Schlaf gebracht hat. Bin immer noch nicht 100% glücklich, aber für das ehr seltene Konfigurieren solcher Dinge ganz okay!
Ich habe es jetzt nur intensiv mit meinem Landkreis getestet und es ist ja auch noch ganz frisch, also einfach mal schauen ob es bei Euch geht und dann Feedback geben!
danke für das tolle Modul. Funktionierte auf Anhieb.
Bisher hatte ich immer alle Termine von Hand in ein Script eintragen müssen, was nun dank Deinem Modul endlich entfällt. Echt Klasse !!!
Ich würde mir aber noch eine TEST-Schaltfläche im Modul wünschen. Man muß nämlich immer warten, bis der Timer abgelaufen ist, um zu sehen, ob sich die Variablen auch mit Daten füllen. Also eine Art „manuelle Ausführung“.
Wenn mehrere Sachen an ein und dem selben Tag abgeholt werden, dann liefert die Schnittstelle sie nicht einzeln, sondern zum Datum als Aufzählung. Sowas hatte ich bei meinen Tests noch nicht. Darum ist das Datum vom Gelben Sack auch falsch, Restmüll, Papiertonne und Gelber Sack kommen alle 3 am 20.01.
Am Wochenende versuche ich es zu fixen - melde mich dann!
Also, die Sache habe ich jetzt doch schon gefixt - nur noch nicht eingecheckt. Will gleich noch die gewünschte Anforderung von Dir mit der TEST-Schaltfläche mit da zunehmen.
Das Modul hat jetzt noch ein kleines aber feines Update bekommen:
[ul]
[li]NEU: Bei Neuauswahl werden nicht mehr alle Variablen gelöscht und neu angelegt, somit behalten bestehende Links ihr Ziel.[/li][li]NEU: Es kann ein Script nach Aktualisierung der Daten ausgeführt werden, z.B. zum Sortieren oder Senden von Erinnerungsnachrichten.[/li][/ul]
Ich habe alle Daten als Link unter einem Dummy Modul zu hängen und lass die Position über das Script steuern (Beispiel: nächste Entleerung als Erstes usw.):
<?
################################################################################
# Scriptbezeichnung: System.SortByDate.ips.php
# Version: 1.0
#
# Sortiert nach Datum die Links für Entsorgungstermine
#
# ----------------------------------- ID´s -------------------------------------
#
# Nicht das Modul selbst sondern nur der Visualisierungs-"Vater"
$parentID = <hier id> /*[Visualisierung\Übersicht\Entsorgungstermine]*/;
#
################################################################################
$childs = IPS_GetChildrenIDs($parentID);
$dates = array();
foreach($childs as $link) {
$array = IPS_GetLink($link);
$value = GetValue($array['TargetID']);
$dates[] = array("date" => $value, "link" => $link);
}
function SortByDate( $a, $b ) {
return strtotime($a["date"]) - strtotime($b["date"]);
}
usort($dates, "SortByDate");
for ($i = 0; $i < count($dates); $i++) {
IPS_SetPosition($dates[$i]["link"], $i);
}
################################################################################
?>
danke für das tolle Modul. Das war meine 1. erfolgreiche Übung in IPS, mit dem ich gestern begonnen habe :).
Die Termine werden mir angezeigt, das passt soweit. Da ich ziemlicher Laie bin, habe ich noch Fragen.
Dein Script zum sortieren der Termine habe ich angelegt. Als parentID habe ich die ID der AWIDO Instanz angegeben. Wenn ich das Script ausführe, bekomme ich diese Fehlermeldung:
Warning: Link #22642 does not exist in /var/lib/symcon/scripts/26468.ips.php on line 19
Warning: Variable #0 does not exist in /var/lib/symcon/scripts/26468.ips.php on line 20
Das Script sieht so aus
<?
################################################################################
# Scriptbezeichnung: System.SortByDate.ips.php
# Version: 1.0
#
# Sortiert nach Datum die Links für Entsorgungstermine
#
# ----------------------------------- ID´s -------------------------------------
#
# Nicht das Modul selbst sondern nur der Visualisierungs-"Vater"
$parentID = 35490 /*[Visualisierung\Übersicht\Entsorgungstermine]*/;
#
################################################################################
$childs = IPS_GetChildrenIDs($parentID);
$dates = array();
foreach($childs as $link) {
$array = IPS_GetLink($link);
$value = GetValue($array['TargetID']);
$dates[] = array("date" => $value, "link" => $link);
}
function SortByDate( $a, $b ) {
return strtotime($a["date"]) - strtotime($b["date"]);
}
usort($dates, "SortByDate");
for ($i = 0; $i < count($dates); $i++) {
IPS_SetPosition($dates[$i]["link"], $i);
}
################################################################################
?>
Was muss ich ändern, damit das Script läuft?
Gibt es eine Möglichkeit, die Anzahl der Tage bis zum nächsten Termin anzuzeigen? Als z.B. Mülltonne Leerung in 3 Tagen, Papiertonne Leerung in 15 Tagen.
das Beispielscript geht davon aus das alle Datumsvariablen als Link unterhalb eines Dummy Modules vorliegen, also nicht direkt auf das Modul gehen.
Normalerweise trennt man Datenhaltung/Datenerzeugung von der Visualisierung, d.h. Im WebFront sollte man nur mit Links auf die Orginalvariablen verweisen. Hilft generell bei der Trennung von Inhalt und Struktur.
Erstelle einfach fürs WebFront ein Dummy Modul mit dem Namen Entsogungstermine und erstelle unterhalb die Links auf die vom Modul generierten Variablen. Dann gib die ID des Dummy Moduls als Vater ID an und es sollte laufen.
Das mit den berechnen der Tage im Voraus kann das Modul nicht. Kannst Du aber auch über das Scribt steuern, so mach ich es. Bei mir wird das immer ein Tag vorher aktiviert.
Bin gerade im Skiurlaub und komme erst am WE wieder an mein System um mein Script zu posten.
danke für deine Unterstützung. Habe deine „Anweisungen“ befolgt und nun werden die Termine schön sortiert angezeigt. Im Anhang siehst du, wie ich es jetzt angelegt habe.
Die eigentliche Instanz „Abfallwirtschaft“ ist im WebFront als „nicht sichtbar“ angelegt. Nur die links im Dummy Modul „Entsorgungstermine“ werden im WebFront als „sichtbar“ angelegt. Sehe ich das so richtig?
Meine ersten Schritte in IPS sind noch sehr holperig :o
Bei mir ist das alles etwas anders aufgebaut - musste hier auch mal im Forum rumstöbern nach Strukturierung, Visualisierung usw. - da gibt es natürlich private Vorlieben wie man alles am besten im Objektbaum strukturiert.
Ich habe 3 Hauptordner unterhalb von „IP-Symcon“ (heißt bei mir auch anders, z.B. Haus)
=> „Steuerung“ - da sind alle meine Scripte, Module usw. drunter nach Anwendungszweck hinterlegt
=> "Systeme " - da sind die wirklichen Geräte zur Haussteuerung nach Hersteller organisiert, z.B. Homematic, FS20, Logitech
=> „Visualisierung“ - da gibt es 3 Unterordner für meine Visualisierungen (AppleWatch, Mobile iOS und WebFrontend), jeweils mit mehr oder wenigeren Kategorien, Dummy Modulen und ganz vielen Links auf die „realen“ Objekte
ich habe heute einmal auf die IPS-Version 4.2 (Testing Kanal) aktualisiert. Dabei wurde Dein Awido-Modul mit einem grauen Ausrufezeichen markiert. Beim doppelt darauf klicken erhielt ich folgende Meldung:
… allerdings werden die Variablen usw. angelegt. Werte aktualisieren funktioniert ebenfalls. Vielleicht kommt die Fehlermeldung weil ich die Instanz nach dem Löschen neu anlegen musste???