Expose all events from an Amcrest device to an MQTT broker
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
Go to file
Jeff Culverhouse ed16dd5792 reset camera connection if we cannot get device events 11 months ago
.github fix github action; fix README 11 months ago
.gitignore add support for config.yaml; sample config; revamp config 12 months ago
Dockerfile Add /config placeholder in Dockerfile 11 months ago
LICENSE Initial commit 5 years ago
README.md mostly rewritten to mimic my govee2mqtt fork 11 months ago
VERSION reset camera connection if we cannot get device events 11 months ago
amcrest_api.py reset camera connection if we cannot get device events 11 months ago
amcrest_mqtt.py ignore messages not for us; another event to ignore 11 months ago
app.py debug is optional and can be env var 11 months ago
config.yaml.sample debug is optional and can be env var 11 months ago
docker-compose.yaml lowercase 11 months ago
requirements.txt add support for config.yaml; sample config; revamp config 12 months ago
util.py code cleanup 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)

  • 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 to true to 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)

  • DEVICE_UPDATE_INTERVAL (optional, default = 3600) - how often to fetch storage stats (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

  • doorbell - doorbell status (if AD110 or AD410)

  • human - human detection (if AD410)

  • motion - motion events (if supported)

  • config - device configuration information

  • storage - storage stats

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 🙂

Buy Me A Coffee