Python: FireServiceRota / BrandweerRooster
Basic Python 3 API wrapper for FireServiceRota and BrandweerRooster for use with Home Assistant
About
This package allows you to get notified about emergency incidents from https://www.FireServiceRota.co.uk and https://www.BrandweerRooster.nl. Those are services used by firefighters.
It currently provides the following limited functionality:
- Connect to the websocket to get incident details in near-realtime
- Get user availability (duty)
- Set user incident response status
See https://fireservicerota.co.uk and https://brandweerrooster.nl for more details.
NOTE: You need a subscription and login account to be able to use it.
Installation
pip3 install pyfireservicerota
Usage
Initialise module using user credentials to get token_info
from pyfireservicerota import FireServiceRota, FireServiceRotaIncidents, ExpiredTokenError, InvalidTokenError, InvalidAuthError
import logging
import sys
import json
import time
import threading
_LOGGER = logging.getLogger(__name__)
logging.basicConfig(level=logging.DEBUG)
token_info = {}
api = FireServiceRota(
base_url="https://www.brandweerrooster.nl",
username="your@email.address",
password="yourpassword",
)
try:
token_info = api.request_tokens()
except InvalidAuthError:
token_info = None
if not token_info:
_LOGGER.error("Failed to get access tokens")
NOTE: You don't need to store user credentials, at first authentication just the token_info dictionary is enough use api.refresh_tokens to refresh it.
Initialise module with stored token_info
from pyfireservicerota import FireServiceRota, FireServiceRotaIncidents, ExpiredTokenError, InvalidTokenError, InvalidAuthError
import logging
import sys
import json
import time
_LOGGER = logging.getLogger(__name__)
logging.basicConfig(level=logging.DEBUG)
token_info = {}
api = FireServiceRota(
base_url = "https://www.brandweerrooster.nl",
token_info = token_info
)
# Get user availability (duty)
try:
print(api.get_availability('Europe/Amsterdam'))
except ExpiredTokenError:
_LOGGER.debug("Tokens are expired, refreshing")
try:
token_info = api.refresh_tokens()
except InvalidAuthError:
_LOGGER.debug("Invalid refresh token, you need to re-login")
except InvalidTokenError:
_LOGGER.debug("Tokens are invalid")
try:
token_info = api.refresh_tokens()
except InvalidAuthError:
_LOGGER.debug("Invalid refresh token, you need to re-login")
# Get incident response status for incident with id 123456
incident_id = 123456
try:
print(api.get_incident_response(incident_id))
except ExpiredTokenError:
_LOGGER.debug("Tokens are expired, refreshing")
try:
token_info = api.refresh_tokens()
except InvalidAuthError:
_LOGGER.debug("Invalid refresh token, you need to re-login")
except InvalidTokenError:
_LOGGER.debug("Tokens are invalid")
try:
token_info = api.refresh_tokens()
except InvalidAuthError:
_LOGGER.debug("Invalid refresh token, you need to re-login")
# Set incident response to acknowlegded (False = 'rejected')
try:
api.set_incident_response(id, True)
except ExpiredTokenError:
_LOGGER.debug("Tokens are expired, refreshing")
try:
token_info = api.refresh_tokens()
except InvalidAuthError:
_LOGGER.debug("Invalid refresh token, you need to re-login")
except InvalidTokenError:
_LOGGER.debug("Tokens are invalid")
try:
token_info = api.refresh_tokens()
except InvalidAuthError:
_LOGGER.debug("Invalid refresh token, you need to re-login")
# Connect to websocket channel for incidents
wsurl = f"wss://www.brandweerrooster.nl/cable?access_token={token_info['access_token']}"
class FireService():
def __init__(self, url):
self._data = None
self.listener = None
self.url = url
self.incidents_listener()
def on_incident(self, data):
_LOGGER.debug("INCIDENT: %s", data)
self._data = data
def incidents_listener(self):
"""Spawn a new Listener and links it to self.on_incident."""
self.listener = FireServiceRotaIncidents(on_incident=self.on_incident)
_LOGGER.debug("Starting incidents listener")
self.listener.start(url=self.url)
ws = FireService(wsurl)
while True:
time.sleep(1)
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file pyfireservicerota-0.0.39.tar.gz.
File metadata
- Download URL: pyfireservicerota-0.0.39.tar.gz
- Upload date:
- Size: 6.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.43.0 CPython/3.7.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6a2384a703d7c64d145f1dc3896a164e3b2e2cb4c42226b2a91e2be6c13d7fae
|
|
| MD5 |
6cade716068d302fd31777dd432a5781
|
|
| BLAKE2b-256 |
4dcbe74a6236d38213cd9b3d25f71f6e0522d6db4f6346de2ae3840f47a35f49
|