From d20e5703774d139edf640710ef95f5fed77496f5 Mon Sep 17 00:00:00 2001 From: marcusferl Date: Wed, 16 Feb 2022 22:49:20 +0100 Subject: [PATCH] init --- .idea/.gitignore | 3 + .idea/Eventboard_2.0.iml | 8 + .idea/inspectionProfiles/Project_Default.xml | 12 + .../inspectionProfiles/profiles_settings.xml | 6 + .idea/misc.xml | 4 + .idea/modules.xml | 8 + .idea/vcs.xml | 6 + README.md | 55 ++ config.py | 6 + eventboard.py | 47 ++ events.json | 154 +++++ holidays.json | 202 ++++++ matrix.ino | 201 ++++++ muell.json | 623 ++++++++++++++++++ 14 files changed, 1335 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/Eventboard_2.0.iml create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/inspectionProfiles/profiles_settings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 README.md create mode 100644 config.py create mode 100644 eventboard.py create mode 100644 events.json create mode 100644 holidays.json create mode 100644 matrix.ino create mode 100644 muell.json diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/Eventboard_2.0.iml b/.idea/Eventboard_2.0.iml new file mode 100644 index 0000000..d0876a7 --- /dev/null +++ b/.idea/Eventboard_2.0.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..074a688 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,12 @@ + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..dc9ea49 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..ce18bf8 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..259e332 --- /dev/null +++ b/README.md @@ -0,0 +1,55 @@ +## Eventboar Version 2.0 + +Das eventboard für deine LED - Matrix +
+######Migration von JavaScript zu Python + +### Config + +- in der matrix.ino dein Wlan Name und Passwort eintragen +``` +host = 'Device Ip' +garbage = 'true' or 'false' +``` +- die .ino auf dein Gerät lasen (eventuell noch die Librarys installieren) +``` +const char* ssid = "your ssid"; +const char* password = "your password"; +``` +- in der config.py deine Daten angeben +- events in der events.json eintragen + +```json +{ + "type": "fixed", + "date": { + "day": 8, + "month": 2, + "year": 1989 + }, + "name": "Ines {{years}}. Geburtstag", + "message": "Nur noch {{hours}} Stunden bis {{name}}!" +} +``` + +- wenn du einen Müllkalender benutzt, achte auf das format und den Filenamen 'muell.json' +
+ +```json +{ + "tag": "Di", + "date": { + "day": "16", + "month": "02", + "year": "2022" + }, + "name": "Restmuell" +} +``` + +- hier findest du ein Beispiel, wie du ihn umwandeln kannst + https://git.weifer.org/weifer/Kalender_zu_JSON + +
+ +######Author: Marcus Ferl, marcus@weifer.de diff --git a/config.py b/config.py new file mode 100644 index 0000000..666e93b --- /dev/null +++ b/config.py @@ -0,0 +1,6 @@ +host = 'Device Ip' # ur device ip, where u upload the matrix.ino +garbage = 'true' # set true if u have a formated Json file + + + +get_request = '/set?text=' # dont touch this line \ No newline at end of file diff --git a/eventboard.py b/eventboard.py new file mode 100644 index 0000000..368c4cb --- /dev/null +++ b/eventboard.py @@ -0,0 +1,47 @@ +""" +Eventboard script in Python +Author: Marcus Ferl +Email: marcus@weifer.de +""" + +import json +from datetime import date +import requests +import config + + +# Get current Date +def get_current_date(): + currentDate = date.today() + day = str('{:02d}'.format(currentDate.day)) + month = str('{:02d}'.format(currentDate.month)) + year = str(currentDate.year) + return [day, month, year] + + +# Raw data from Json file +def read_JSON(filename): + f = open(filename) + data = json.load(f) + f.close() + return data + +# Returns the Garbage +def create_Message(): + if config.garbage == 'true': + for i in read_JSON('muell.json'): + day = i['date']['day'] + month = i['date']['month'] + year = i['date']['year'] + + if day == get_current_date()[0] and \ + month == get_current_date()[1] and \ + year == get_current_date()[2]: + return i['name'] + +# Send Message to the Device +def matrixRequest(): + requests.get('http://' + config.host + config.get_request + create_Message()) + + +matrixRequest() diff --git a/events.json b/events.json new file mode 100644 index 0000000..3837f76 --- /dev/null +++ b/events.json @@ -0,0 +1,154 @@ +{ + "events": [ +{ + "type": "fixed", + "date": { + "day": 21, + "month": 11, + "year": 2021 + }, + "name": "Lottas {{years}}. Geburtstag", + "message": "Nur noch {{hours}} Stunden bis {{name}}!" + }, + { + "type": "fixed", + "date": { + "day": 8, + "month": 2, + "year": 1989 + }, + "name": "Ines {{years}}. Geburtstag", + "message": "Nur noch {{hours}} Stunden bis {{name}}!" + }, + { + "type": "fixed", + "date": { + "day": 2, + "month": 5, + "year": 1961 + }, + "name": "Rudis {{years}}. Geburtstag", + "message": "Nur noch {{hours}} Stunden bis {{name}}!" + }, +{ + "type": "fixed", + "date": { + "day": 1, + "month": 2, + "year": 1936 + }, + "name": "Oma Ferls {{years}}. Geburtstag", + "message": "Nur noch {{hours}} Stunden bis {{name}}!" + }, + { + "type": "fixed", + "date": { + "day": 24, + "month": 5, + "year": 1967 + }, + "name": "Haikes {{years}}. Geburtstag", + "message": "Nur noch {{hours}} Stunden bis {{name}}!" + }, + { + "type": "fixed", + "date": { + "day": 19, + "month": 2, + "year": 1966 + }, + "name": "Marios {{years}}. Geburtstag", + "message": "Nur noch {{hours}} Stunden bis {{name}}!" + }, + { + "type": "fixed", + "date": { + "day": 24, + "month": 12, + "year": 2021 + }, + "name": "{{years}}. Verlobungstag", + "message": "Nur noch {{hours}} Stunden bis zum {{name}}!" + }, + { + "type": "fixed", + "date": { + "day": 21, + "month": 2, + "year": 1985 + }, + "name": "Susannes {{years}}. Geburtstag", + "message": "Nur noch {{hours}} Stunden bis {{name}}!" + }, + { + "type": "fixed", + "date": { + "day": 26, + "month": 3, + "year": 1971 + }, + "name": "Christians Geburtstag", + "message": "Nur noch {{hours}} Stunden bis {{name}}!" + }, + { + "type": "fixed", + "date": { + "day": 21, + "month": 4, + "year": 1999 + }, + "name": "Steffens {{years}}. Geburtstag", + "message": "Nur noch {{hours}} Stunden bis {{name}}!" + }, + { + "type": "fixed", + "date": { + "day": 17, + "month": 1, + "year": 1986 + }, + "name": "Marcus Geburtstag", + "message": "Nur noch {{hours}} Stunden bis zu {{name}}!" + }, + { + "type": "fixed", + "date": { + "day": 18, + "month": 9, + "year": 1943 + }, + "name": "Erikas Geburtstag", + "message": "Nur noch {{hours}} Stunden bis {{name}}!" + }, + { + "type": "fixed", + "date": { + "day": 20, + "month": 9, + "year": 1967 + }, + "name": "Michaelas Geburtstag", + "message": "Nur noch {{hours}} Stunden bis {{name}}!" + }, + { + "type": "fixed", + "date": { + "day": 26, + "month": 9, + "year": 1966 + }, + "name": "Markus Geburtstag", + "message": "Nur noch {{hours}} Stunden bis {{name}}!" + }, + { + "type": "fixed", + "date": { + "day": 8, + "month": 11, + "year": 1995 + }, + "name": "Viviennes {{years}}. Geburtstag", + "message": "Nur noch {{hours}} Stunden bis {{name}}!" + } + ] +} diff --git a/holidays.json b/holidays.json new file mode 100644 index 0000000..53ef752 --- /dev/null +++ b/holidays.json @@ -0,0 +1,202 @@ +{ + "holidays": [ + { + "type": "fixed", + "date": { "day": 1, "month": 1, "year": 0 }, + "name": "Neujahr", + "message": "Nur noch {{hours}} Stunden bis {{name}}!" + }, + { + "type": "fixed", + "date": { "day": 1, "month": 5, "year": 1946 }, + "name": "Tag der Arbeit", + "message": "Nur noch {{hours}} Stunden bis zum {{name}}!" + }, + { + "type": "fixed", + "date": { "day": 3, "month": 10, "year": 1990 }, + "name": "Tag der deutschen Einheit", + "message": "Nur noch {{hours}} Stunden bis zum {{name}}!" + }, + { + "type": "fixed", + "date": { "day": 31, "month": 10, "year": 1850 }, + "name": "Halloween{1}", + "message": "Nur noch {{hours}} Stunden bis {{name}}!" + }, + { + "type": "fixed", + "date": { "day": 1, "month": 11, "year": 1833 }, + "name": "Allerheiligen", + "message": "Nur noch {{hours}} Stunden bis {{name}}!" + }, + { + "type": "fixed", + "date": { "day": 11, "month": 11, "year": 1833 }, + "name": "Fastnacht", + "message": "Nur noch {{hours}} Stunden bis die {{name}} beginnt!" + }, + { + "type": "fixed", + "date": { "day": 24, "month": 12, "year": 0 }, + "name": "Heilig Abend", + "message": "Nur noch {{hours}} Stunden bis {{name}}!" + }, + { + "type": "fixed", + "date": { "day": 25, "month": 12, "year": 0 }, + "name": "1. Weihhnachtstag", + "message": "Nur noch {{hours}} Stunden bis zum {{name}}!" + }, + { + "type": "fixed", + "date": { "day": 26, "month": 12, "year": 0 }, + "name": "2. Weihhnachtstag", + "message": "Nur noch {{hours}} Stunden bis zum {{name}}!" + }, + { + "type": "fixed", + "date": { "day": 31, "month": 12, "year": 0 }, + "name": "Silvester", + "message": "Nur noch {{hours}} Stunden bis {{name}}!" + }, + { + "type": "dynamic", + "base": "advent", + "days": 0, + "name": "1. Advent", + "message": "Nur noch {{hours}} Stunden bis zum {{name}}!" + + }, + { + "type": "dynamic", + "base": "advent", + "days": 7, + "name": "2. Advent", + "message": "Nur noch {{hours}} Stunden bis zum {{name}}!" + + }, + { + "type": "dynamic", + "base": "advent", + "days": 14, + "name": "3. Advent", + "message": "Nur noch {{hours}} Stunden bis zum {{name}}!" + + }, + { + "type": "dynamic", + "base": "advent", + "days": 21, + "name": "4. Advent", + "message": "Nur noch {{hours}} Stunden bis zum {{name}}!" + + }, + { + "type": "dynamic", + "base": "advent", + "days": -14, + "name": "Volkstrauertag", + "message": "Nur noch {{hours}} Stunden bis zum {{name}}!" + + }, + { + "type": "dynamic", + "base": "advent", + "days": -11, + "name": "Buß- und Bettag", + "message": "Nur noch {{hours}} Stunden bis zum {{name}}!" + }, + { + "type": "dynamic", + "base": "advent", + "days": -7, + "name": "Totensonntag", + "message": "Nur noch {{hours}} Stunden bis zum {{name}}!" + }, + { + "type": "dynamic", + "base": "easter", + "days": -52, + "name": "Weiberfastnacht", + "message": "Nur noch {{hours}} Stunden bis {{name}}!" + }, + { + "type": "dynamic", + "base": "easter", + "days": -48, + "name": "Rosenmontag", + "message": "Nur noch {{hours}} Stunden bis {{name}}!" + }, + { + "type": "dynamic", + "base": "easter", + "days": -47, + "name": "Fastnachtsdienstag", + "message": "Nur noch {{hours}} Stunden bis {{name}}!" + }, + { + "type": "dynamic", + "base": "easter", + "days": -46, + "name": "Aschermittwoch", + "message": "Nur noch {{hours}} Stunden bis {{name}}!" + }, + { + "type": "dynamic", + "base": "easter", + "days": -3, + "name": "Gründonnerstag", + "message": "Nur noch {{hours}} Stunden bis {{name}}!" + }, + { + "type": "dynamic", + "base": "easter", + "days": -2, + "name": "Karfreitag", + "message": "Nur noch {{hours}} Stunden bis {{name}}!" + }, + { + "type": "dynamic", + "base": "easter", + "days": 0, + "name": "Ostersonntag", + "message": "Nur noch {{hours}} Stunden bis {{name}}!" + }, + { + "type": "dynamic", + "base": "easter", + "days": 1, + "name": "Ostermontag", + "message": "Nur noch {{hours}} Stunden bis {{name}}!" + }, + { + "type": "dynamic", + "base": "easter", + "days": 39, + "name": "Christi Himmelfahrt", + "message": "Nur noch {{hours}} Stunden bis {{name}}!" + }, + { + "type": "dynamic", + "base": "easter", + "days": 49, + "name": "Pfingstsonntag", + "message": "Nur noch {{hours}} Stunden bis {{name}}!" + }, + { + "type": "dynamic", + "base": "easter", + "days": 50, + "name": "Pfingstmontag", + "message": "Nur noch {{hours}} Stunden bis {{name}}!" + }, + { + "type": "dynamic", + "base": "easter", + "days": 60, + "name": "Fronleichnam", + "message": "Nur noch {{hours}} Stunden bis {{name}}!" + } + ] +} diff --git a/matrix.ino b/matrix.ino new file mode 100644 index 0000000..46879be --- /dev/null +++ b/matrix.ino @@ -0,0 +1,201 @@ +// Simple text scroller project with Web server configuration +// Author: Csongor Varga +// Github: https://github.com/nygma2004/max7219scroller + +// Using the MAX7219 library of: +// MAX7219_Dot_Matrix library - sideways scrolling +// Author: Nick Gammon +// Date: 2 October 2015 + +/* +Used: C:\Users\\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.0\libraries\ESP8266WebServer // https://github.com/esp8266/ESPWebServer +Used: C:\Users\\Documents\Arduino\libraries\MAX7219_Dot_Matrix-master // https://github.com/nickgammon/MAX7219_Dot_Matrix +Using library ESP8266WiFi at version 1.0 in folder: C:\Users\\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.0\libraries\ESP8266WiFi +Using library ESP8266WebServer at version 1.0 in folder: C:\Users\\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.0\libraries\ESP8266WebServer +Using library ESP8266mDNS at version 1.2 in folder: C:\Users\\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.0\libraries\ESP8266mDNS +Using library SPI at version 1.0 in folder: C:\Users\\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.0\libraries\SPI +Using library bitBangedSPI-master in folder: C:\Users\\Documents\Arduino\libraries\bitBangedSPI-master (legacy) // https://github.com/nickgammon/bitBangedSPI +Using library MAX7219_Dot_Matrix-master at version 1.0.1 in folder: C:\Users\\Documents\Arduino\libraries\MAX7219_Dot_Matrix-master // https://github.com/nickgammon/MAX7219_Dot_Matrix +*/ + + +//VCC Blue - Vin on the NodeMCU, 5V on Wemos D1 mini +//GND Purple - GND +//DIN Grey - D7 +//CS White - D4 (this can be a different pin too) +//CLK Black - D5 + +#include // ESP8266 Wifi library +#include // Web server functions +#include // Web server functions +#include +#include +#include +#include + + +const byte chips = 4; // Number of 8x8 modules linked together +const int msglen = 500; // Maximum length of the message + +// Set your wifi credetials here, for open wifi leave password empty +const char* ssid = "your ssid"; +const char* password = "your password"; + +// You can comment this section out for using DHCP +//IPAddress ip(192, 168, 1, 85); // where xx is the desired IP Address +//IPAddress gateway(192, 168, 1, 254); // set gateway to match your network +//IPAddress subnet(255, 255, 255, 0); // set subnet mask to match your network + +// n chips (display modules), hardware SPI with load on GPIO2 +MAX7219_Dot_Matrix display (chips, 2); // Chips / LOAD +WiFiClient espClient; +MDNSResponder mdns; +ESP8266WebServer server(80); + +char message [msglen] = "Visit website to customize"; +unsigned long lastMoved = 0; +unsigned long MOVE_INTERVAL = 40; // Default delay in miliseconds +byte intensity = 4; // Default intensity 0-15 + +int messageOffset; +String webPage = ""; +String webStat = ""; +String webFooter = ""; +String temp = ""; + +void setup() { + Serial.begin(115200); + display.begin(); + display.setIntensity(intensity); + display.sendSmooth ("", 0); + + // WiFi.config(ip, gateway, subnet); // Comment this line for using DHCP + WiFi.mode(WIFI_STA); + WiFi.begin(ssid, password); + + while (WiFi.status() != WL_CONNECTED) { + delay(500); + Serial.print("."); + } + + Serial.println(""); + Serial.print("Connected to "); + Serial.println(ssid); + Serial.print("IP address: "); + Serial.println(WiFi.localIP()); + temp = "Visit http://"; + temp += WiFi.localIP().toString(); + temp +=" to customize"; + temp.toCharArray(message, msglen); + Serial.print("Signal [RSSI]: "); + Serial.println(WiFi.RSSI()); + + if (mdns.begin("max7219_display", WiFi.localIP())) { + Serial.println("MDNS responder started"); + } + server.on("/", handleMainPage); + server.on("/set", handleSetCommand); // Handling parameter set + server.on("/message", getMessage); // Get current Message in Json *Marcus Ferl* + server.begin(); + Serial.println("HTTP server started"); + messageOffset = - chips * 8; + + +} // end of setup + + + +void handleMainPage() { + webPage = "

MAX7219 Display and Text Scroller

This sketch scrolls a custom message on a MAX7219 driven 8x8 pixel display units chained one after the other.

"; + webPage += "

Change text
Current text: "; + webPage += message; + webPage += "

"; + + webPage += "

Change scroll speed
Current delay: "; + webPage += MOVE_INTERVAL; + webPage += "
Change to: 10 | 20 | 30 | 40 | 50 | 60 | 70 | 80 | 90 | 100"; + webPage += "

"; + + webPage += "

Change brightness
Current brightness: "; + webPage += intensity; + webPage += "
Change to: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15"; + webPage += "

"; + + webStat = "

RSSI: "; + webStat += WiFi.RSSI(); + webStat += "
"; + webStat += "Uptime [min]: "; + webStat += millis() / (1000*60); + webStat += "

"; + + webFooter = "

MAX7219 Text Scroller v1.0 | email me | GitHub

"; + server.send(200, "text/html", webPage+webStat+webFooter); + Serial.println("Web page request"); +} + +void getMessage(){ + String page; + + StaticJsonBuffer<500> jsonBuffer; + JsonObject& jmessage = jsonBuffer.createObject(); + jmessage["message"] = message; + jmessage.printTo(page); + server.send(200, "text/html", page); +} + +void handleSetCommand() { + String response = ""; + if (server.args() == 0) { + response = "No parameter"; + } else { + if (server.argName(0) == "delay") { + MOVE_INTERVAL = server.arg("delay").toInt(); + response = "Delay updated to "; + response += MOVE_INTERVAL; + } + if (server.argName(0) == "intensity") { + intensity = (byte)server.arg("intensity").toInt(); + response = "Intensity updated to "; + display.setIntensity(intensity); + response += intensity; + } + if (server.argName(0) == "text") { + server.arg("text").toCharArray(message, msglen); + messageOffset = - chips * 8; + response = "Message updated"; + } + if (response == "" ) { + response = "invalid parameter"; + } + } + Serial.print("Change request: "); + Serial.println(response); + response = "" + response + ""; + server.send(200, "text/html", response); //Returns the HTTP response +} + + +void updateDisplay() { + display.sendSmooth (message, messageOffset); + + // next time show one pixel onwards + if (messageOffset++ >= (int) (strlen (message) * 8)) + messageOffset = - chips * 8; +} // end of updateDisplay + +void loop() { + + + + // update display if time is up + if (millis () - lastMoved >= MOVE_INTERVAL) { + updateDisplay (); + lastMoved = millis (); + } + + // Handle HTTP server requests + server.handleClient(); + +} // end of loop diff --git a/muell.json b/muell.json new file mode 100644 index 0000000..9ff9042 --- /dev/null +++ b/muell.json @@ -0,0 +1,623 @@ +[ + { + "tag": "Di", + "date": { + "day": "16", + "month": "02", + "year": "2022" + }, + "name": "Restmuell" + }, + { + "tag": "Di", + "date": { + "day": "22", + "month": "02", + "year": "2022" + }, + "name": "Biomuell" + }, + { + "tag": "Do", + "date": { + "day": "24", + "month": "02", + "year": "2022" + }, + "name": "Papier-Tonne" + }, + { + "tag": "Di", + "date": { + "day": "01", + "month": "03", + "year": "2022" + }, + "name": "Restmuell" + }, + { + "tag": "Di", + "date": { + "day": "08", + "month": "03", + "year": "2022" + }, + "name": "Biomuell" + }, + { + "tag": "Do", + "date": { + "day": "10", + "month": "03", + "year": "2022" + }, + "name": "Papier-Tonne" + }, + { + "tag": "Di", + "date": { + "day": "15", + "month": "03", + "year": "2022" + }, + "name": "Restmuell" + }, + { + "tag": "Di", + "date": { + "day": "22", + "month": "03", + "year": "2022" + }, + "name": "Biomuell" + }, + { + "tag": "Do", + "date": { + "day": "24", + "month": "03", + "year": "2022" + }, + "name": "Papier-Tonne" + }, + { + "tag": "Di", + "date": { + "day": "29", + "month": "03", + "year": "2022" + }, + "name": "Restmuell" + }, + { + "tag": "Di", + "date": { + "day": "05", + "month": "04", + "year": "2022" + }, + "name": "Biomuell" + }, + { + "tag": "Do", + "date": { + "day": "07", + "month": "04", + "year": "2022" + }, + "name": "Papier-Tonne" + }, + { + "tag": "Di", + "date": { + "day": "12", + "month": "04", + "year": "2022" + }, + "name": "Restmuell" + }, + { + "tag": "Mi", + "date": { + "day": "20", + "month": "04", + "year": "2022" + }, + "name": "Biomuell" + }, + { + "tag": "Fr", + "date": { + "day": "22", + "month": "04", + "year": "2022" + }, + "name": "Papier-Tonne" + }, + { + "tag": "Di", + "date": { + "day": "26", + "month": "04", + "year": "2022" + }, + "name": "Restmuell" + }, + { + "tag": "Di", + "date": { + "day": "03", + "month": "05", + "year": "2022" + }, + "name": "Biomuell" + }, + { + "tag": "Do", + "date": { + "day": "05", + "month": "05", + "year": "2022" + }, + "name": "Papier-Tonne" + }, + { + "tag": "Di", + "date": { + "day": "10", + "month": "05", + "year": "2022" + }, + "name": "Restmuell" + }, + { + "tag": "Di", + "date": { + "day": "17", + "month": "05", + "year": "2022" + }, + "name": "Biomuell" + }, + { + "tag": "Do", + "date": { + "day": "19", + "month": "05", + "year": "2022" + }, + "name": "Papier-Tonne" + }, + { + "tag": "Di", + "date": { + "day": "24", + "month": "05", + "year": "2022" + }, + "name": "Restmuell" + }, + { + "tag": "Di", + "date": { + "day": "31", + "month": "05", + "year": "2022" + }, + "name": "Biomuell" + }, + { + "tag": "Do", + "date": { + "day": "02", + "month": "06", + "year": "2022" + }, + "name": "Papier-Tonne" + }, + { + "tag": "Mi", + "date": { + "day": "08", + "month": "06", + "year": "2022" + }, + "name": "Restmuell" + }, + { + "tag": "Di", + "date": { + "day": "14", + "month": "06", + "year": "2022" + }, + "name": "Biomuell" + }, + { + "tag": "Fr", + "date": { + "day": "17", + "month": "06", + "year": "2022" + }, + "name": "Papier-Tonne" + }, + { + "tag": "Di", + "date": { + "day": "21", + "month": "06", + "year": "2022" + }, + "name": "Restmuell" + }, + { + "tag": "Di", + "date": { + "day": "28", + "month": "06", + "year": "2022" + }, + "name": "Biomuell" + }, + { + "tag": "Do", + "date": { + "day": "30", + "month": "06", + "year": "2022" + }, + "name": "Papier-Tonne" + }, + { + "tag": "Di", + "date": { + "day": "05", + "month": "07", + "year": "2022" + }, + "name": "Restmuell" + }, + { + "tag": "Di", + "date": { + "day": "12", + "month": "07", + "year": "2022" + }, + "name": "Biomuell" + }, + { + "tag": "Do", + "date": { + "day": "14", + "month": "07", + "year": "2022" + }, + "name": "Papier-Tonne" + }, + { + "tag": "Di", + "date": { + "day": "19", + "month": "07", + "year": "2022" + }, + "name": "Restmuell" + }, + { + "tag": "Di", + "date": { + "day": "26", + "month": "07", + "year": "2022" + }, + "name": "Biomuell" + }, + { + "tag": "Do", + "date": { + "day": "28", + "month": "07", + "year": "2022" + }, + "name": "Papier-Tonne" + }, + { + "tag": "Di", + "date": { + "day": "02", + "month": "08", + "year": "2022" + }, + "name": "Restmuell" + }, + { + "tag": "Di", + "date": { + "day": "09", + "month": "08", + "year": "2022" + }, + "name": "Biomuell" + }, + { + "tag": "Do", + "date": { + "day": "11", + "month": "08", + "year": "2022" + }, + "name": "Papier-Tonne" + }, + { + "tag": "Di", + "date": { + "day": "16", + "month": "08", + "year": "2022" + }, + "name": "Restmuell" + }, + { + "tag": "Di", + "date": { + "day": "23", + "month": "08", + "year": "2022" + }, + "name": "Biomuell" + }, + { + "tag": "Do", + "date": { + "day": "25", + "month": "08", + "year": "2022" + }, + "name": "Papier-Tonne" + }, + { + "tag": "Di", + "date": { + "day": "30", + "month": "08", + "year": "2022" + }, + "name": "Restmuell" + }, + { + "tag": "Di", + "date": { + "day": "06", + "month": "09", + "year": "2022" + }, + "name": "Biomuell" + }, + { + "tag": "Do", + "date": { + "day": "08", + "month": "09", + "year": "2022" + }, + "name": "Papier-Tonne" + }, + { + "tag": "Di", + "date": { + "day": "13", + "month": "09", + "year": "2022" + }, + "name": "Restmuell" + }, + { + "tag": "Di", + "date": { + "day": "20", + "month": "09", + "year": "2022" + }, + "name": "Biomuell" + }, + { + "tag": "Do", + "date": { + "day": "22", + "month": "09", + "year": "2022" + }, + "name": "Papier-Tonne" + }, + { + "tag": "Di", + "date": { + "day": "27", + "month": "09", + "year": "2022" + }, + "name": "Restmuell" + }, + { + "tag": "Mi", + "date": { + "day": "05", + "month": "10", + "year": "2022" + }, + "name": "Biomuell" + }, + { + "tag": "Fr", + "date": { + "day": "07", + "month": "10", + "year": "2022" + }, + "name": "Papier-Tonne" + }, + { + "tag": "Di", + "date": { + "day": "11", + "month": "10", + "year": "2022" + }, + "name": "Restmuell" + }, + { + "tag": "Di", + "date": { + "day": "18", + "month": "10", + "year": "2022" + }, + "name": "Biomuell" + }, + { + "tag": "Do", + "date": { + "day": "20", + "month": "10", + "year": "2022" + }, + "name": "Papier-Tonne" + }, + { + "tag": "Di", + "date": { + "day": "25", + "month": "10", + "year": "2022" + }, + "name": "Restmuell" + }, + { + "tag": "Mi", + "date": { + "day": "02", + "month": "11", + "year": "2022" + }, + "name": "Biomuell" + }, + { + "tag": "Fr", + "date": { + "day": "04", + "month": "11", + "year": "2022" + }, + "name": "Papier-Tonne" + }, + { + "tag": "Di", + "date": { + "day": "08", + "month": "11", + "year": "2022" + }, + "name": "Restmuell" + }, + { + "tag": "Di", + "date": { + "day": "15", + "month": "11", + "year": "2022" + }, + "name": "Biomuell" + }, + { + "tag": "Do", + "date": { + "day": "17", + "month": "11", + "year": "2022" + }, + "name": "Papier-Tonne" + }, + { + "tag": "Di", + "date": { + "day": "22", + "month": "11", + "year": "2022" + }, + "name": "Restmuell" + }, + { + "tag": "Di", + "date": { + "day": "29", + "month": "11", + "year": "2022" + }, + "name": "Biomuell" + }, + { + "tag": "Do", + "date": { + "day": "01", + "month": "12", + "year": "2022" + }, + "name": "Papier-Tonne" + }, + { + "tag": "Di", + "date": { + "day": "06", + "month": "12", + "year": "2022" + }, + "name": "Restmuell" + }, + { + "tag": "Di", + "date": { + "day": "13", + "month": "12", + "year": "2022" + }, + "name": "Biomuell" + }, + { + "tag": "Do", + "date": { + "day": "15", + "month": "12", + "year": "2022" + }, + "name": "Papier-Tonne" + }, + { + "tag": "Di", + "date": { + "day": "20", + "month": "12", + "year": "2022" + }, + "name": "Restmuell" + }, + { + "tag": "Mi", + "date": { + "day": "28", + "month": "12", + "year": "2022" + }, + "name": "Biomuell" + }, + { + "tag": "Fr", + "date": { + "day": "30", + "month": "12", + "year": "2022" + }, + "name": "Papier-Tonne" + } +] \ No newline at end of file