11"""
22Sensor component for waste pickup dates from dutch waste collectors (using the http://www.opzet.nl app)
33Original Author: Pippijn Stortelder
4- Current Version: 2.1.2 20190201 - Pippijn Stortelder
4+ Current Version: 2.1.3 20190204 - Pippijn Stortelder
5520190116 - Merged different waste collectors into 1 component
6620190119 - Added an option to change date format and fixed spelling mistakes
7720190122 - Refactor code and bug fix
8820190123 - Added 12 more waste collectors
9920190130 - FIXED PMD for some waste collectors
101020190131 - Added Today and Tomorrow sensors
111120190201 - Added option for date only
12+ 20190204 - Small bug fix
1213
1314Description:
1415 Provides sensors for the following Dutch waste collectors;
7980from homeassistant .util import Throttle
8081from homeassistant .helpers .entity import Entity
8182
82- __version__ = '2.1.2 '
83+ __version__ = '2.1.3 '
8384
8485_LOGGER = logging .getLogger (__name__ )
8586
8687MIN_TIME_BETWEEN_UPDATES = timedelta (hours = 1 )
8788CONF_WASTE_COLLECTOR = 'wastecollector'
8889CONF_POSTCODE = 'postcode'
89- CONF_STREETNUMBER = 'streetnumber'
90+ CONF_STREET_NUMBER = 'streetnumber'
9091CONF_DATE_FORMAT = 'dateformat'
9192CONF_TODAY_TOMORROW = 'upcomingsensor'
9293CONF_DATE_ONLY = 'dateonly'
140141PLATFORM_SCHEMA = PLATFORM_SCHEMA .extend ({
141142 vol .Required (CONF_RESOURCES , default = []): cv .ensure_list ,
142143 vol .Required (CONF_POSTCODE , default = '1111AA' ): cv .string ,
143- vol .Required (CONF_STREETNUMBER , default = '1' ): cv .string ,
144+ vol .Required (CONF_STREET_NUMBER , default = '1' ): cv .string ,
144145 vol .Optional (CONF_WASTE_COLLECTOR , default = 'Cure' ): cv .string ,
145146 vol .Optional (CONF_DATE_FORMAT , default = '%d-%m-%Y' ): cv .string ,
146147 vol .Optional (CONF_TODAY_TOMORROW , default = False ): cv .boolean ,
@@ -152,7 +153,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
152153 _LOGGER .debug ('Setup Rest API retriever' )
153154
154155 postcode = config .get (CONF_POSTCODE )
155- street_number = config .get (CONF_STREETNUMBER )
156+ street_number = config .get (CONF_STREET_NUMBER )
156157 waste_collector = config .get (CONF_WASTE_COLLECTOR ).lower ()
157158 date_format = config .get (CONF_DATE_FORMAT )
158159 sensor_today = config .get (CONF_TODAY_TOMORROW )
@@ -208,7 +209,7 @@ def update(self):
208209
209210 for key in request_json :
210211 if not key ['ophaaldatum' ] is None :
211- sensor_dict [str (key ['id' ])] = [datetime .strptime (key ['ophaaldatum' ], '%Y-%m-%d' ), key ['title' ], key ['title' ], key [ ' icon_data' ]]
212+ sensor_dict [str (key ['id' ])] = [datetime .strptime (key ['ophaaldatum' ], '%Y-%m-%d' ), key ['title' ], key ['icon_data' ]]
212213
213214 check_title = key ['menu_title' ]
214215 title = ''
@@ -243,11 +244,11 @@ class WasteSensor(Entity):
243244
244245 def __init__ (self , data , sensor_type , waste_collector , date_format , date_only ):
245246 self .data = data
246- self .type = sensor_type
247+ self .sensor_type = sensor_type
247248 self .waste_collector = waste_collector
248249 self .date_format = date_format
249250 self .date_only = date_only
250- self ._name = waste_collector + ' ' + self .type
251+ self ._name = waste_collector + ' ' + self .sensor_type
251252 self ._unit = ''
252253 self ._hidden = False
253254 self ._entity_picture = None
@@ -288,8 +289,8 @@ def update(self):
288289 retrieved_data = 0
289290 try :
290291 if waste_data is not None :
291- if self .type in COLLECTOR_WASTE_ID [self .waste_collector ]:
292- for waste_id in COLLECTOR_WASTE_ID [self .waste_collector ][self .type ]:
292+ if self .sensor_type in COLLECTOR_WASTE_ID [self .waste_collector ]:
293+ for waste_id in COLLECTOR_WASTE_ID [self .waste_collector ][self .sensor_type ]:
293294 if waste_id in waste_data :
294295 today = datetime .today ()
295296 pickup_info = waste_data .get (waste_id )
@@ -298,7 +299,7 @@ def update(self):
298299
299300 self ._official_name = pickup_info [1 ]
300301 self ._fraction_id = waste_id
301- self ._entity_picture = pickup_info [3 ]
302+ self ._entity_picture = pickup_info [2 ]
302303 self ._last_update = today .strftime ('%d-%m-%Y %H:%M' )
303304 self ._hidden = False
304305
@@ -319,33 +320,26 @@ def update(self):
319320 retrieved_data = 1
320321
321322 if retrieved_data == 0 :
322- self ._state = None
323- self ._official_name = None
324- self ._fraction_id = None
325- self ._hidden = True
323+ self .set_state_none ()
326324 else :
327- self ._state = None
328- self ._official_name = None
329- self ._fraction_id = None
330- self ._hidden = True
325+ self .set_state_none ()
331326 else :
332- self ._state = None
333- self ._official_name = None
334- self ._fraction_id = None
335- self ._hidden = True
327+ self .set_state_none ()
336328
337329 except ValueError :
338- self ._state = None
339- self ._official_name = None
340- self ._fraction_id = None
341- self ._hidden = True
342-
330+ self .set_state_none ()
331+
332+ def set_state_none (self ):
333+ self ._state = None
334+ self ._official_name = None
335+ self ._fraction_id = None
336+ self ._hidden = True
343337
344338class WasteTodaySensor (Entity ):
345339
346340 def __init__ (self , data , sensor_types , waste_collector , day_sensor ):
347341 self .data = data
348- self .types = sensor_types
342+ self .sensor_types = sensor_types
349343 self .waste_collector = waste_collector
350344 self .day = day_sensor
351345 self ._name = waste_collector + ' ' + self .day
@@ -378,20 +372,20 @@ def update(self):
378372 try :
379373 if waste_data is not None :
380374 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 ]:
375+ for sensor_type in self .sensor_types :
376+ if sensor_type in COLLECTOR_WASTE_ID [self .waste_collector ]:
377+ for waste_id in COLLECTOR_WASTE_ID [self .waste_collector ][sensor_type ]:
384378 if waste_id in waste_data :
385379 today = datetime .today ()
386380 pickup_info = waste_data .get (waste_id )
387381 pick_update = pickup_info [0 ]
388382 date_diff = (pick_update - today ).days + 1
389383
390384 if date_diff == 1 and self .day == "morgen" :
391- new_state .append (type )
385+ new_state .append (sensor_type )
392386 retrieved_data = 1
393387 elif date_diff < 1 and self .day == "vandaag" :
394- new_state .append (type )
388+ new_state .append (sensor_type )
395389 retrieved_data = 1
396390
397391 if retrieved_data == 0 :
@@ -401,12 +395,13 @@ def update(self):
401395 self ._state = ', ' .join (new_state )
402396 self ._hidden = False
403397 else :
404- self ._state = None
405- self ._hidden = True
398+ self .set_state_none ()
406399 else :
407- self ._state = None
408- self ._hidden = True
409-
400+ self .set_state_none ()
401+
410402 except ValueError :
411- self ._state = None
412- self ._hidden = True
403+ self .set_state_none ()
404+
405+ def set_state_none (self ):
406+ self ._state = None
407+ self ._hidden = True
0 commit comments