Skip to content

Commit 1940a4d

Browse files
authored
Merge pull request #1 from pippyn/beta
Merge beta with master
2 parents de2ac01 + 06211bd commit 1940a4d

File tree

3 files changed

+128
-22
lines changed

3 files changed

+128
-22
lines changed

README.md

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,16 @@ This sensor works with the following waste collectors: Blink, Cure, Cyclus, DAR,
1212
```yaml
1313
sensor:
1414
- platform: afvalbeheer
15-
wastecollector: Blink
16-
dateformat: '%d-%m-%Y'
17-
resources: # (at least 1 required)
15+
wastecollector: Blink (required)
16+
resources: (at least 1 required)
1817
- restafval
1918
- gft
2019
- papier
2120
- pmd
22-
postcode: 1111AA # (required)
23-
streetnumber: 1 # (required)
21+
postcode: 1111AA (required)
22+
streetnumber: 1 (required)
23+
upcomingsensor: 1 (optional)
24+
dateformat: '%d-%m-%Y' (optional)
2425
```
2526
### Wastecollector
2627
```
@@ -75,6 +76,15 @@ Postcode is required and is your own postcode
7576
### Street number
7677
Street number is required and is your own street number
7778
79+
### Upcoming sensor
80+
```yaml
81+
upcomingsensor: 1
82+
```
83+
If you activate this option you'll get 2 extra sensors (today and tomorrow) which are handy for automations.
84+
The today sensor will display the fractions collected today.
85+
The tomorrow sensor will display the fractions collected tomorrow.
86+
Default is 0.
87+
7888
### Date format
7989
```yaml
8090
dateformat:
@@ -89,6 +99,12 @@ If you wish to remove the year and the dashes and want to show the name of the m
8999
21 Sep
90100
```
91101

102+
### Date only
103+
```yaml
104+
dateonly: 1
105+
```
106+
If you don't want to add dayname, tomorrow or today in front of date activate this option. Default is 0.
107+
92108
## Custom updater
93109
You can use the custom updater with this sensor
94110
```yaml

afvalbeheer.py

Lines changed: 106 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
"""
22
Sensor component for waste pickup dates from dutch waste collectors (using the http://www.opzet.nl app)
33
Original Author: Pippijn Stortelder
4-
Current Version: 2.0.5 20190130 - Pippijn Stortelder
4+
Current Version: 2.1.2 20190201 - Pippijn Stortelder
55
20190116 - Merged different waste collectors into 1 component
66
20190119 - Added an option to change date format and fixed spelling mistakes
77
20190122 - Refactor code and bug fix
88
20190123 - Added 12 more waste collectors
99
20190130 - FIXED PMD for some waste collectors
10+
20190131 - Added Today and Tomorrow sensors
11+
20190201 - Added option for date only
1012
1113
Description:
1214
Provides sensors for the following Dutch waste collectors;
@@ -52,15 +54,17 @@
5254
Configuration.yaml:
5355
sensor:
5456
- platform: afvalbeheer
55-
wastecollector: Blink
56-
dateformat: '%d-%m-%Y'
57+
wastecollector: Blink (required)
5758
resources: (at least 1 required)
5859
- restafval
5960
- gft
6061
- papier
6162
- pmd
6263
postcode: 1111AA (required)
6364
streetnumber: 1 (required)
65+
upcomingsensor: 0 (optional)
66+
dateformat: '%d-%m-%Y' (optional)
67+
dateonly: 0 (optional)
6468
"""
6569

6670
import logging
@@ -75,7 +79,7 @@
7579
from homeassistant.util import Throttle
7680
from homeassistant.helpers.entity import Entity
7781

78-
__version__ = '2.0.5'
82+
__version__ = '2.1.2'
7983

8084
_LOGGER = logging.getLogger(__name__)
8185

@@ -84,6 +88,8 @@
8488
CONF_POSTCODE = 'postcode'
8589
CONF_STREETNUMBER = 'streetnumber'
8690
CONF_DATE_FORMAT = 'dateformat'
91+
CONF_TODAY_TOMORROW = 'upcomingsensor'
92+
CONF_DATE_ONLY = 'dateonly'
8793

8894
ATTR_OFFICIAL_NAME = 'Official name'
8995
ATTR_WASTE_COLLECTOR = 'wastecollector'
@@ -137,6 +143,8 @@
137143
vol.Required(CONF_STREETNUMBER, default='1'): cv.string,
138144
vol.Optional(CONF_WASTE_COLLECTOR, default='Cure'): cv.string,
139145
vol.Optional(CONF_DATE_FORMAT, default='%d-%m-%Y'): cv.string,
146+
vol.Optional(CONF_TODAY_TOMORROW, default=False): cv.boolean,
147+
vol.Optional(CONF_DATE_ONLY, default=False): cv.boolean,
140148
})
141149

142150

@@ -147,6 +155,8 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
147155
street_number = config.get(CONF_STREETNUMBER)
148156
waste_collector = config.get(CONF_WASTE_COLLECTOR).lower()
149157
date_format = config.get(CONF_DATE_FORMAT)
158+
sensor_today = config.get(CONF_TODAY_TOMORROW)
159+
date_only = config.get(CONF_DATE_ONLY)
150160

151161
try:
152162
data = WasteData(postcode, street_number, waste_collector)
@@ -158,7 +168,11 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
158168

159169
for resource in config[CONF_RESOURCES]:
160170
sensor_type = resource.lower()
161-
entities.append(WasteSensor(data, sensor_type, waste_collector, date_format))
171+
entities.append(WasteSensor(data, sensor_type, waste_collector, date_format, date_only))
172+
173+
if sensor_today:
174+
entities.append(WasteTodaySensor(data, config[CONF_RESOURCES], waste_collector, "vandaag"))
175+
entities.append(WasteTodaySensor(data, config[CONF_RESOURCES], waste_collector, "morgen"))
162176

163177
add_entities(entities)
164178

@@ -227,11 +241,12 @@ def update(self):
227241

228242
class WasteSensor(Entity):
229243

230-
def __init__(self, data, sensor_type, waste_collector, date_format):
244+
def __init__(self, data, sensor_type, waste_collector, date_format, date_only):
231245
self.data = data
232246
self.type = sensor_type
233247
self.waste_collector = waste_collector
234248
self.date_format = date_format
249+
self.date_only = date_only
235250
self._name = waste_collector + ' ' + self.type
236251
self._unit = ''
237252
self._hidden = False
@@ -279,24 +294,28 @@ def update(self):
279294
today = datetime.today()
280295
pickup_info = waste_data.get(waste_id)
281296
pick_update = pickup_info[0]
282-
datediff = (pick_update - today).days + 1
297+
date_diff = (pick_update - today).days + 1
283298

284299
self._official_name = pickup_info[1]
285300
self._fraction_id = waste_id
286301
self._entity_picture = pickup_info[3]
287302
self._last_update = today.strftime('%d-%m-%Y %H:%M')
288303
self._hidden = False
289304

290-
if datediff >= 8:
291-
self._state = pick_update.strftime(self.date_format)
292-
elif datediff > 1:
293-
self._state = pick_update.strftime('%A, ' + self.date_format)
294-
elif datediff == 1:
295-
self._state = pick_update.strftime('Tomorrow, ' + self.date_format)
296-
elif datediff <= 0:
297-
self._state = pick_update.strftime('Today, ' + self.date_format)
305+
if self.date_only:
306+
if date_diff >= 0:
307+
self._state = pick_update.strftime(self.date_format)
298308
else:
299-
self._state = None
309+
if date_diff >= 8:
310+
self._state = pick_update.strftime(self.date_format)
311+
elif date_diff > 1:
312+
self._state = pick_update.strftime('%A, ' + self.date_format)
313+
elif date_diff == 1:
314+
self._state = pick_update.strftime('Tomorrow, ' + self.date_format)
315+
elif date_diff == 0:
316+
self._state = pick_update.strftime('Today, ' + self.date_format)
317+
else:
318+
self._state = None
300319
retrieved_data = 1
301320

302321
if retrieved_data == 0:
@@ -320,3 +339,74 @@ def update(self):
320339
self._official_name = None
321340
self._fraction_id = None
322341
self._hidden = True
342+
343+
344+
class WasteTodaySensor(Entity):
345+
346+
def __init__(self, data, sensor_types, waste_collector, day_sensor):
347+
self.data = data
348+
self.types = sensor_types
349+
self.waste_collector = waste_collector
350+
self.day = day_sensor
351+
self._name = waste_collector + ' ' + self.day
352+
self._unit = ''
353+
self._hidden = False
354+
self._state = None
355+
356+
@property
357+
def name(self):
358+
return self._name
359+
360+
@property
361+
def state(self):
362+
return self._state
363+
364+
@property
365+
def device_state_attributes(self):
366+
return {
367+
ATTR_HIDDEN: self._hidden
368+
}
369+
370+
@property
371+
def unit_of_measurement(self):
372+
return self._unit
373+
374+
def update(self):
375+
self.data.update()
376+
waste_data = self.data.data
377+
retrieved_data = 0
378+
try:
379+
if waste_data is not None:
380+
new_state = []
381+
for type in self.types:
382+
if type in COLLECTOR_WASTE_ID[self.waste_collector]:
383+
for waste_id in COLLECTOR_WASTE_ID[self.waste_collector][type]:
384+
if waste_id in waste_data:
385+
today = datetime.today()
386+
pickup_info = waste_data.get(waste_id)
387+
pick_update = pickup_info[0]
388+
date_diff = (pick_update - today).days + 1
389+
390+
if date_diff == 1 and self.day == "morgen":
391+
new_state.append(type)
392+
retrieved_data = 1
393+
elif date_diff < 1 and self.day == "vandaag":
394+
new_state.append(type)
395+
retrieved_data = 1
396+
397+
if retrieved_data == 0:
398+
self._state = "None"
399+
self._hidden = True
400+
else:
401+
self._state = ', '.join(new_state)
402+
self._hidden = False
403+
else:
404+
self._state = None
405+
self._hidden = True
406+
else:
407+
self._state = None
408+
self._hidden = True
409+
410+
except ValueError:
411+
self._state = None
412+
self._hidden = True

custom_components.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"sensor.afvalbeheer": {
3-
"version": "2.0.5",
3+
"version": "2.1.2",
44
"local_location": "custom_components/sensor/afvalbeheer.py",
55
"remote_location": "https://raw.githubusercontent.com/pippyn/Home-Assistant-Sensor-Afvalbeheer/master/afvalbeheer.py",
66
"visit_repo": "https://github.com/pippyn/Home-Assistant-Sensor-Afvalbeheer",

0 commit comments

Comments
 (0)