/gobot-pir

Configurable motion detection bot sending events via MQTT and exposing metrics

Primary LanguageGoApache License 2.0Apache-2.0

gobot-pir

Go Report Card test-workflow release-workflow golangci-lint-workflow

Detects and forwards motion events using a PIR sensor and a Raspberry PI

Features

🤖 Integrates with Home-Assistant
📊 Calculates statistics about motion events over time windows, accessible via MQTT and metrics
🔐 Allows connecting to secure MQTT brokers using TLS client certificates
🔭 Expose PIR events as metrics to enable alerting and Grafana dashboards

Installation

Binaries

Download a prebuilt binary from the releases section for your system.

From Source

As a prerequisite, you need to have Golang SDK installed. Then you can install gobot-pir from source by invoking:

$ go install github.com/soerenschneider/gobot-pir@latest

Configuration

gobot-pir can be fully configured using either environment variables or a config file.

Field Name Type JSON Key Env Variable Validation Default Description
Placement string placement GOBOT_PIR_PLACEMENT required - Placement configuration
MetricsAddr string metrics_addr GOBOT_PIR_METRICS_LISTEN_ADDR omitempty,tcp_addr 0.0.0.0:9191 Metrics address
IntervalSecs int interval_s GOBOT_PIR_INTERVAL_S min=1,max=300 Interval in seconds
StatIntervals []int stat_intervals GOBOT_PIR_STAT_INTERVALS dive,min=10,max=3600 Statistic intervals
LogSensor bool log_sensor GOBOT_PIR_LOG_SENSOR_READINGS false Log sensor readings
MessageOn string message_on GOBOT_PIR_MSG_ON ON Message when event is registered
MessageOff string message_off GOBOT_PIR_MSG_OFF OFF Message when event stops
MqttConfig MqttConfig - MQTT configuration
SensorConfig SensorConfig Sensor configuration
Field Name Type JSON Key Env Variable Validation Default Description
Disabled bool disable_mqtt GOBOT_PIR_MQTT_DISABLED N/A Disabled MQTT
Host string mqtt_host GOBOT_PIR_MQTT_BROKER required_if=Disabled false,mqtt_broker N/A MQTT broker host
Topic string mqtt_topic GOBOT_PIR_MQTT_TOPIC required_if=Disabled false,mqtt_topic N/A MQTT topic
StatsTopic string mqtt_stats_topic GOBOT_PIR_MQTT_STATS_TOPIC omitempty,mqtt_topic N/A MQTT statistics topic
ClientKeyFile string mqtt_ssl_key_file GOBOT_PIR_MQTT_TLS_CLIENT_KEY_FILE required_unless=ClientCertFile '',omitempty,file N/A MQTT client SSL key file
ClientCertFile string mqtt_ssl_cert_file GOBOT_PIR_MQTT_TLS_CLIENT_CRT_FILE required_unless=ClientKeyFile '',omitempty,file N/A MQTT client SSL cert file
ServerCaFile string mqtt_ssl_ca_file GOBOT_PIR_MQTT_TLS_SERVER_CA_FILE omitempty,file N/A MQTT server SSL CA file
Field Name Type JSON Key Env Variable Validation Default Description
GpioPin string gpio_pin GOBOT_PIR_GPIO_PIN required,min=0 7 GPIO pin configuration
GpioPollingIntervalMs int gpio_polling_interval_ms GOBOT_PIR_GPIO_POLLING_INTERVAL_MS required,min=5,max=500 75 GPIO polling interval in ms

Metrics

This project exposes the following metrics in Open Metrics format under the prefix gobot_pir

Variable Name Metric Type Description Labels
version GaugeVec Version information of this robot version, commit
heartbeat_timestamp_seconds GaugeVec Heartbeat of this robot placement
motions_detected_total CounterVec Amount of motions detected placement
motions_detected_timestamp_seconds GaugeVec Timestamp of latest motion detected placement
messages_published_total CounterVec The assembleBot temperature in degrees Celsius placement
message_publish_errors_total CounterVec The assembleBot temperature in degrees Celsius placement
events_per_interval GaugeVec The number of events during given intervals interval, placement
slice_entries_total GaugeVec The amount of entries in the stats slice placement

CHANGELOG

The changelog can be found here