IoT Project - Effective Garbage Collection

Project Goal
The goal of this project is to implement a system that can monitor how full garbage cans are and with that information, optimize the emptying of the garbage cans to avoid going to empty a garbage can that is only partially full.

Implementation
The fill level of a garbage can should be read using an Ultrasonic Ranging Sensor - HC-SR04 mounted, facing downwards, in the lid of the can. To detect if the lid is open, the sensor code should either ignore if any values that are too large or, optionally, a microswitch should be added that detects if the lid is closed or open. If a garbage can is left open for too long, a warning should be sent out so that the user is notified that something needs to be done in order for the system to function. This could either be sending a notification to an app admin, to the owner of the garbage can or including it in an emptying route.

Bonus Round!
Implement a route planner that provides a driver with the optimal route to empty all the full garbage cans.

Add to the route planner so that it also includes trash cans that are about to be full that are close to other trash cans that are going to be picked up.

Extend the system by storing all reported sensor values to enable creating charts/diagrams showing garbage levels change over time. This data can be displayed in charts/diagrams which, if combined with storing when a trash can is emptied, can be used to identify areas that produce a lot of garbage.

Make the system send out an alert to the manager when a garbage can gets critically full and when that critical fill level is resolved.

Any other ingenious ideas!