Python 3 API wrapper for FireServiceRota/BrandweerRooster
Project description
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
#!/usr/bin/env python3
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="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
#!/usr/bin/env python3
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 = "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)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file pyfireservicerota-0.0.44.tar.gz
.
File metadata
- Download URL: pyfireservicerota-0.0.44.tar.gz
- Upload date:
- Size: 6.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3a49c65f8c4ff801d746e862cdb7935407e2397d2e446cc0972ec5275be8a432 |
|
MD5 | 28135d8cbf4d3405d6049b562bd0f57c |
|
BLAKE2b-256 | f5a35cbe4271bbc1f13a7231040c2e1cb65d2c865089c5cb653184a0809c951f |
File details
Details for the file pyfireservicerota-0.0.44-py3-none-any.whl
.
File metadata
- Download URL: pyfireservicerota-0.0.44-py3-none-any.whl
- Upload date:
- Size: 6.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4ba78b1f85271c38ca97b9d0dfb47545ae1d1a854c07e1a4b6aa8ad1878a2656 |
|
MD5 | 333e80e1cac86cb9a25534e2f50bac4e |
|
BLAKE2b-256 | 2fced1973d3a3c0709d464af682f08107d532cd28f293c7f188c0e0d12ee53bf |