8 Commits

Author SHA1 Message Date
Adrian Rumpold
0d609ade9a chore: Bump version number 2021-09-17 08:36:54 +02:00
Adrian Rumpold
2b453f4b5e Merge pull request #5 from AdrianoKF/4-infection-data-parsing-error
Update infection data parser for new web page layout
2021-09-17 08:34:55 +02:00
Adrian Rumpold
62904f4c09 fix(parser): Update infection data parser for new web page layout
Closes #4
2021-09-17 08:30:48 +02:00
Adrian Rumpold
35d5232d8e feat: Use syringe MDI icon for vaccination entity 2021-08-11 10:57:03 +02:00
Adrian Rumpold
1c3b0ae0b5 Merge pull request #3 from AdrianoKF/feature/vaccination-data
Crawling and parsing of vaccination data, see #2
2021-08-11 10:35:21 +02:00
Adrian Rumpold
d2e8f77725 docs: Update readme 2021-08-11 10:26:48 +02:00
Adrian Rumpold
92e99e03ef feat: Include ratio of at-least-once vaccinated persons 2021-08-11 10:26:18 +02:00
Adrian Rumpold
903a512f99 docs: Update readme 2021-08-11 10:21:34 +02:00
5 changed files with 36 additions and 13 deletions

View File

@@ -2,7 +2,8 @@
## Adding to your dashboard ## Adding to your dashboard
You can add an overview of the current infection numbers to your dashboard using the [multiple-entity-row](https://github.com/benct/lovelace-multiple-entity-row) card: You can add an overview of the current infection and vaccination numbers to your dashboard
using the [multiple-entity-row](https://github.com/benct/lovelace-multiple-entity-row) card:
```yaml ```yaml
type: entities type: entities
@@ -24,4 +25,25 @@ entities:
secondary_info: secondary_info:
attribute: incidence attribute: incidence
unit: cases/100k unit: cases/100k
- type: custom:multiple-entity-row
entity: sensor.covid_19_vaccinations_augsburg
entities:
- attribute: ratio_vaccinated_once
name: Once
format: precision1
unit: '%'
- attribute: ratio_vaccinated_full
name: Fully
format: precision1
unit: '%'
- attribute: ratio_vaccinated_total
name: Total
format: precision1
unit: '%'
show_state: false
icon: mdi:needle
name: COVID-19 Vaccinations
secondary_info:
attribute: date
format: date
``` ```

View File

@@ -62,6 +62,7 @@ class VaccinationData:
ratio_vaccinated_once: float = 0.0 ratio_vaccinated_once: float = 0.0
ratio_vaccinated_full: float = 0.0 ratio_vaccinated_full: float = 0.0
ratio_vaccinated_total: float = 0.0
class CovidCrawlerBase(ABC): class CovidCrawlerBase(ABC):
@@ -106,8 +107,8 @@ class CovidCrawler(CovidCrawlerBase):
) )
soup = await self._fetch(url) soup = await self._fetch(url)
match = soup.find(class_="frame--type-textpic") match = soup.find(id="c1067628")
text = match.p.text text = match.text.strip()
_log.debug(f"Infection data text: {text}") _log.debug(f"Infection data text: {text}")
matches = re.search(r"(\d+,\d+)\sNeuinfektion", text) matches = re.search(r"(\d+,\d+)\sNeuinfektion", text)
@@ -119,18 +120,15 @@ class CovidCrawler(CovidCrawlerBase):
incidence = parse_num(matches.group(1), t=float) incidence = parse_num(matches.group(1), t=float)
_log.debug(f"Parsed incidence: {incidence}") _log.debug(f"Parsed incidence: {incidence}")
text = match.h2.text match = soup.find(id="c1052517")
matches = re.search(r"\((\d+)\. (\w+).*\)", text) text = match.text.strip()
matches = re.search(r"Stand: (\d+)\. (\w+) (\d{4})", text)
if not matches: if not matches:
raise ValueError(f"Could not extract date from scraped web page, {text=}") raise ValueError(f"Could not extract date from scraped web page, {text=}")
date = parse_date(matches.group(1), matches.group(2)) date = parse_date(matches.group(1), matches.group(2), matches.group(3))
_log.debug(f"Parsed date: {date}") _log.debug(f"Parsed date: {date}")
match = match.find_next_sibling(class_="frame--type-textpic")
text = match.text
_log.debug(f"Infection counts text: {text}")
regexes = [ regexes = [
r"Insgesamt: (?P<total_cases>[0-9.]+)", r"Insgesamt: (?P<total_cases>[0-9.]+)",
r"genesen: (?P<num_recovered>[0-9.]+)", r"genesen: (?P<num_recovered>[0-9.]+)",
@@ -196,6 +194,9 @@ class CovidCrawler(CovidCrawlerBase):
result.ratio_vaccinated_full = result.num_vaccinated_full / population * 100 result.ratio_vaccinated_full = result.num_vaccinated_full / population * 100
result.ratio_vaccinated_once = result.num_vaccinated_once / population * 100 result.ratio_vaccinated_once = result.num_vaccinated_once / population * 100
result.ratio_vaccinated_total = (
result.ratio_vaccinated_once + result.ratio_vaccinated_full
)
_log.debug(f"Result data: {result}") _log.debug(f"Result data: {result}")
return result return result

View File

@@ -1,7 +1,7 @@
{ {
"domain": "covid19_augsburg", "domain": "covid19_augsburg",
"name": "COVID-19 Augsburg", "name": "COVID-19 Augsburg",
"version": "1.1.0", "version": "1.1.2",
"config_flow": true, "config_flow": true,
"documentation": "https://github.com/AdrianoKF/home-assistant-covid19-augsburg", "documentation": "https://github.com/AdrianoKF/home-assistant-covid19-augsburg",
"issue_tracker": "https://github.com/AdrianoKF/home-assistant-covid19-augsburg/issues", "issue_tracker": "https://github.com/AdrianoKF/home-assistant-covid19-augsburg/issues",

View File

@@ -87,7 +87,7 @@ class CoronaAugsburgVaccinationSensor(Entity):
@property @property
def icon(self): def icon(self):
return "mdi:biohazard" return "mdi:needle"
@property @property
def unit_of_measurement(self): def unit_of_measurement(self):

View File

@@ -1,5 +1,5 @@
[tool.poetry] [tool.poetry]
name = "git add re" name = "home_assistant_covid19_augsburg"
version = "0.1.0" version = "0.1.0"
description = "" description = ""
authors = ["Adrian Rumpold <a.rumpold@gmail.com>"] authors = ["Adrian Rumpold <a.rumpold@gmail.com>"]