|
|
11 months ago | |
|---|---|---|
| .github | 11 months ago | |
| .gitignore | 11 months ago | |
| Dockerfile | 11 months ago | |
| LICENSE | 5 years ago | |
| README.md | 11 months ago | |
| VERSION | 11 months ago | |
| amcrest_api.py | 11 months ago | |
| amcrest_mqtt.py | 11 months ago | |
| app.py | 11 months ago | |
| config.yaml.sample | 11 months ago | |
| docker-compose.yaml | 11 months ago | |
| requirements.txt | 12 months ago | |
| util.py | 11 months ago | |
README.md
weirdtangent/amcrest2mqtt
Expose multiple Amcrest cameras and events to an MQTT broker, primarily
designed to work with Home Assistant. A WIP, since I'm new to Python.
Uses the python-amcrest library.
Forked from dchesterton/amcrest2mqtt
You can define config in config.yaml and pass -c path/to/config.yaml. See the
config.yaml.sample file for an example.
Or, we support the following environment variables and defaults:
-
AMCREST_HOSTS(required, 1+ space-separated list of hostnames/ips) -
AMCREST_NAMES(required, 1+ space-separated list of device names - must match count of AMCREST_HOSTS) -
AMCREST_PORT(optional, default = 80) -
AMCREST_USERNAME(optional, default = admin) -
AMCREST_PASSWORD(required) -
AMCREST_WEBRTC_HOST(optional, webrtc hostname for link, along with...) -
AMCREST_WEBRTC_PORT(webrtc port, default = 1984) -
AMCREST_WEBRTC_LINK(webrtc stream link, default = 'stream.html') -
AMCREST_WEBRTC_SOURCES(webrtc "Source" param for each camera, same count and order of AMCREST_HOSTS above) -
MQTT_USERNAME(required) -
MQTT_PASSWORD(optional, default = empty password) -
MQTT_HOST(optional, default = 'localhost') -
MQTT_QOS(optional, default = 0) -
MQTT_PORT(optional, default = 1883) -
MQTT_TLS_ENABLED(required if using TLS) - set totrueto enable -
MQTT_TLS_CA_CERT(required if using TLS) - path to the ca certs -
MQTT_TLS_CERT(required if using TLS) - path to the private cert -
MQTT_TLS_KEY(required if using TLS) - path to the private key -
MQTT_PREFIX(optional, default = amgrest2mqtt) -
MQTT_HOMEASSISTANT(optional, default = true) -
MQTT_DISCOVERY_PREFIX(optional, default = 'homeassistant') -
TZ(required, timezone identifier, see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List) -
STORAGE_UPDATE_INTERVAL(optional, default = 900) - how often to fetch storage stats (in seconds) -
SNAPSHOT_UPDATE_INTERVAL(optional, default = 60) - how often to fetch camera snapshot (in seconds)
It exposes through device discovery a service and a device with components for each camera:
-
homeassistant/device/amcrest-service- service config -
homeassistant/device/amcrest-[SERIAL_NUMBER]per camera, with components: -
event- all events -
camera- a snapshot is saved every SNAPSHOT_UPDATE_INTERVAL (also based on how often camera saves snapshot image) -
doorbell- doorbell status (if AD110 or AD410) -
human- human detection (if AD410) -
motion- motion events (if supported) -
config- device configuration information -
storage- storage stats
Snapshots, Area Cards, and WebRTC
The camera snapshots work really well for the HomeAssistant Area cards on a dashboard - just make this MQTT camera device the only camera for an area and place an Area card for that location. The WebRTC option works very well with the go2rtc package which is a streaming server that works very well for (my) Amcrest cameras. If you setup the WebRTC config here, the configuration_url for the MQTT device will be the streaming RTC link instead of just a link to the hostname (which is arguably more correctly a "configuration" url, but I'd rather have a simple link from the device page to a live stream)
Device Support
The app supports events for any Amcrest device supported by python-amcrest.
Home Assistant
The app has built-in support for Home Assistant discovery. Set the MQTT_HOMEASSISTANT environment variable to true to enable support.
If you are using a different MQTT prefix to the default, you will need to set the MQTT_DISCOVERY_PREFIX environment variable.
Running the app
To run via env variables with Docker Compose, see docker-compose.yaml or make sure you attach a volume with the config file and point to that directory, for example:
CMD [ "python", "-u", "./app.py", "-c", "/config" ]
Out of Scope
Non-Docker Environments
Docker is the only supported way of deploying the application. The app should run directly via Python but this is not supported.
Buy Me A Coffee
A few people have kindly requested a way to donate a small amount of money. If you feel so inclined I've set up a "Buy Me A Coffee" page where you can donate a small sum. Please do not feel obligated to donate in any way - I work on the app because it's useful to myself and others, not for any financial gain - but any token of appreciation is much appreciated 🙂