Project:Müllampel

From CoMakingSpace Wiki

ProjectInfoBox

Müllampel

Müllampel.jpg
Status: done
Release Date: 02.12.2024
Initiator: Martin, Johannes
Tools Used: LaserCutter, Drill, Hot Glue Gun
Software Used: HomeAssistant
Approx. Cost: 10€


Das Projekt Müllampel ist ein Projekt, das zum Ziel hat, den Space vor dem Versinken im Müll zu bewahren. Dazu bietet es ein Schild, das mithilfe eines ESP32 und adressierbarer LEDs eine Erinnerung bietet, die Mülltonnen rechtzeitig rauszustellen.

Dies erreicht es, indem es anhand der Daten des aktuellen Abfallkalenders blinkt und mithilfe von drei verschiedenen Farben signalisiert, welche Tonnen herausgestellt werden müssen: Weiß für Restmüll, Blau für Papier und Gelb für Wertstoff.

Aktuell blinkt sie mittwochs um 21:30 Uhr zum Reinholen und freitags um 21:30 Uhr zum Herausstellen der Tonnen, damit diese meist Dienstags morgens abgeholt werden können.

Die Integration in Home Assistant ermöglicht es uns, das Schild perfekt auf unsere Abholtermine abzustimmen.

Bauanleitung

Material

  • Bilderrahmen
  • ESP8266 Mikrocontroller
  • Netzteil für den LED-Streifen (z. B. 5V, 2A für 30 LEDs)
  • USB-Kabel
  • Klebematerial (z. B. Heißkleber oder doppelseitiges Klebeband)
  • Adressierbarer LED-Streifen (22 LEDs)
  • Schwarze Sprühfarbe

Werkzeuge

  • Laser Cutter
  • Computer mit Zugang zu HomeAssistant und ESPHome
  • Schraubendreher, Cutter oder Schere (für den LED-Streifen)

Schritt-für-Schritt-Anleitung

1. Vorbereitung des Bilderrahmens

  1. Entferne die Glasscheibe aus dem Bilderrahmen.
  2. Sprühe die Vorderseite der Glasscheibe gleichmäßig mit schwarzem Sprühlack ein. Lass die Farbe vollständig trocknen (ca. 24 Stunden).
  3. Nutze den Laser Cutter, um ein Mülltonnen-Symbol aus der lackierten Glasscheibe zu gravieren. Du kannst eine eigene SVG-Datei erstellen oder eine Vorlage verwenden.

2. Vorbereitung der Elektronik

  1. Schneide den LED-Streifen auf die passende Länge, damit er in den Bilderrahmen passt.
  2. Verbinde den LED-Streifen mit dem ESP8266 gemäß der folgenden Pinbelegung:
    1. LED-Datenpin -> GPIO Pin des ESP8266 (z.B. GPIO 2)
    2. Stromversorgung (5V) -> Netzteil
    3. GND -> GND des ESP32 und des Netzteils
  3. Sichere den LED-Streifen und den ESP32 mit Klebematerial hinter der Glasscheibe im Rahmen. Achte darauf, dass die LEDs direkt hinter dem gravierten Symbol positioniert sind.

3. Installation der Software

Flashe den ESP8266 mit ESPHome. Die folgende Konfiguration kann als Vorlage verwendet werden:

substitutions:
  name: esphome-garbage-sign
  friendly_name: ESPHome_Garbage_Sign

esphome:
  name: ${name}
  friendly_name: ${friendly_name}

esp8266:
  board: esp01_1m

wifi:
  ssid: "DEIN_SSID"
  password: "DEIN_PASSWORT"

light:
  - platform: neopixelbus
    type: GRB
    variant: ws2812
    pin: GPIO02
    num_leds: 22
    name: "Garbage_LED"

4. Integration der Mülltermine in Home Assistant

Bei der Integration der Mülltermine in HomeAssistant ist wichtig, dass die Termine in einem eigenen Kalender innerhalb von HomeAssistant gespeichert werden. Hierzu gibt es verschiedene Möglichkeiten, die von deinem lokalen Entsorgungsunternehmen abhängen.

Wir nutzen die Waste Collection Schedule Integration, um die Heidelberger Abholtermine abzufragen. Die URL für den CoMakingSpace lautet:

https://www.gipsprojekt.de/featureGips/Gips?SessionMandant=Heidelberg&Anwendung=ABFUHRKALENDER&Methode=TermineAnzeigenICS&Mandant=Heidelberg&Abfuhrkalender=Heidelberg&Bezirk_ID=34979&Jahr={%Y}&Suchkriterium1=

Die Termine erscheinen nun in Home Assistant als Kalenderentitäten (z. B. `calendar.heidelberg`).

5. Automatisierung für die Mülllampel

  1. Erstelle eine Automatisierung in Home Assistant, die prüft, welche Mülltonnen in den nächsten 7 Tagen abgeholt werden, und die LEDs entsprechend steuert. Unsere Automatisierung ist wie folgt definiert:

flowchart TB Start((30 Minuten vor Ende der Öffnungszeiten)) --> Condition[Ermittle Abholtermine der nächsten 7 Tage] subgraph repeat1[Wiederhole 130 Mal] direction LR GarbageCan{Welche Tonne wird abgeholt?} GarbageCan -->|Restmüll| Restmüll[Schalte weißes Licht an] GarbageCan -->|Gelber Sack| Gelb[Schalte gelbes Licht an] GarbageCan -->|Papiermüll| Papier[Schalte blaues Licht an] Restmüll & Gelb & Papier --> Wait1[Warte 5 Sekunden] --> Off[Schalte Licht aus] --> Wait2[Warte 5 Sekunden] Wait2 --> |Gehe alle relevanten Kalendereinträge durch| GarbageCan end Condition --> repeat1

alias: Garbage Light
description: >-
  Let´s the Garbage Light in the Wood Workshop blink for ~30 Minutes. Starts 30
  minutes before an event in our calendar ends
triggers:
  - trigger: calendar
    entity_id: calendar.coms_public_events
    event: end
    offset: "-0:30:0"
conditions: []
actions:
  - action: calendar.get_events
    metadata: {}
    data:
      duration:
        hours: 168
        minutes: 0
        seconds: 0
    target:
      entity_id: calendar.heidelberg
    response_variable: calendar_entries_7_days
  - repeat:
      count: 130
      sequence:
        - repeat:
            sequence:
              - choose:
                  - conditions:
                      - alias: Restmüll
                        condition: template
                        value_template: "{{ \"Restmüll\" in repeat.item.summary }}"
                    sequence:
                      - action: light.turn_on
                        target:
                          device_id:
                            - e7df0dab88007c0d27d62348c4eb39b9
                        data:
                          rgb_color:
                            - 255
                            - 255
                            - 255
                      - delay:
                          hours: 0
                          minutes: 0
                          seconds: 5
                          milliseconds: 0
                      - action: light.turn_off
                        metadata: {}
                        data: {}
                        target:
                          device_id:
                            - e7df0dab88007c0d27d62348c4eb39b9
                      - delay:
                          hours: 0
                          minutes: 0
                          seconds: 2
                          milliseconds: 0
                  - conditions:
                      - alias: Gelber Sack
                        condition: template
                        value_template: "{{ \"Gelber Sack\" in repeat.item.summary }}"
                    sequence:
                      - action: light.turn_on
                        target:
                          device_id:
                            - e7df0dab88007c0d27d62348c4eb39b9
                        data:
                          rgb_color:
                            - 238
                            - 255
                            - 0
                      - delay:
                          hours: 0
                          minutes: 0
                          seconds: 5
                          milliseconds: 0
                      - action: light.turn_off
                        metadata: {}
                        data: {}
                        target:
                          device_id: e7df0dab88007c0d27d62348c4eb39b9
                      - delay:
                          hours: 0
                          minutes: 0
                          seconds: 2
                          milliseconds: 0
                  - conditions:
                      - alias: Papier
                        condition: template
                        value_template: "{{ \"Papier\" in repeat.item.summary }}"
                    sequence:
                      - action: light.turn_on
                        target:
                          device_id:
                            - e7df0dab88007c0d27d62348c4eb39b9
                        data:
                          rgb_color:
                            - 0
                            - 42
                            - 255
                      - delay:
                          hours: 0
                          minutes: 0
                          seconds: 5
                          milliseconds: 0
                      - action: light.turn_off
                        metadata: {}
                        data: {}
                        target:
                          device_id:
                            - e7df0dab88007c0d27d62348c4eb39b9
                      - delay:
                          hours: 0
                          minutes: 0

6. Montage und Test

  1. Setze die Glasscheibe wieder in den Bilderrahmen ein.
  2. Schließe den ESP32 und den LED-Streifen an die Stromversorgung an.
  3. Teste die Automatisierung, um sicherzustellen, dass die LEDs korrekt blinken.

Fehlersuche

  • Problem: Die LEDs leuchten nicht.
    • Prüfe, ob der LED-Streifen richtig an den ESP32 und die Stromversorgung angeschlossen ist.
    • Stelle sicher, dass die ESPHome-Konfiguration korrekt hochgeladen wurde
  • Problem: Home Assistant erkennt den Kalender nicht.
    • Verifiziere, ob die Integration korrekt aufgesetzt wurde.

Weitere Ressourcen