First Commit
This commit is contained in:
@@ -1,2 +1,98 @@
|
||||
# karung-masuk_frigate-counter
|
||||
# Frigate MQTT Counter Service
|
||||
|
||||
This service monitors Frigate NVR MQTT events to count "karung" objects after detecting both "pintu-kiri-buka" and "pintu-kanan-buka" objects.
|
||||
|
||||
## Features
|
||||
|
||||
- Monitor MQTT events from Frigate NVR on topic `frigate/events`
|
||||
- Detect both "pintu-kiri-buka" and "pintu-kanan-buka" objects
|
||||
- Start 30-minute timer when both objects detected
|
||||
- Count "karung" objects during timer period
|
||||
- Ignore "pintu-kiri-buka" and "pintu-kanan-buka" during timer
|
||||
- Save results to SQLite database with columns: camera_name, date, counter_value
|
||||
- Republish counter result to MQTT topic `{TOPIC}/counter/{SITE_NAME}`
|
||||
- Reset counter every midnight
|
||||
- If timer expires (more than 30 minutes), restart detection sequence
|
||||
|
||||
## Requirements
|
||||
|
||||
- Python 3.6+
|
||||
- paho-mqtt
|
||||
- schedule
|
||||
- sqlite3 (built-in with Python)
|
||||
|
||||
## Installation
|
||||
|
||||
1. Create a virtual environment:
|
||||
```bash
|
||||
python3 -m venv venv
|
||||
source venv/bin/activate
|
||||
```
|
||||
|
||||
2. Install dependencies:
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
Set the following environment variables:
|
||||
|
||||
- `FRIGATE_MQTT_HOST`: Host for Frigate MQTT server (default: localhost)
|
||||
- `FRIGATE_MQTT_PORT`: Port for Frigate MQTT server (default: 1883)
|
||||
- `REPORT_MQTT_HOST`: Host for reporting MQTT server (default: localhost)
|
||||
- `REPORT_MQTT_PORT`: Port for reporting MQTT server (default: 1883)
|
||||
- `TOPIC`: Base topic for reporting MQTT server (default: frigate)
|
||||
- `SITE_NAME`: Site name for reporting MQTT server (default: default)
|
||||
|
||||
## Usage
|
||||
|
||||
Run the service:
|
||||
```bash
|
||||
python frigate_counter.py
|
||||
```
|
||||
|
||||
## Systemd Service
|
||||
|
||||
To run as a systemd service, copy the service file to `/etc/systemd/system/`:
|
||||
```bash
|
||||
sudo cp frigate-counter.service /etc/systemd/system/
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable frigate-counter.service
|
||||
sudo systemctl start frigate-counter.service
|
||||
```
|
||||
|
||||
## Database Schema
|
||||
|
||||
The service creates an SQLite database (`karung_counts.db`) with the following table:
|
||||
|
||||
```sql
|
||||
CREATE TABLE IF NOT EXISTS karung_counts (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
camera_name TEXT NOT NULL,
|
||||
date DATE NOT NULL,
|
||||
counter_value INTEGER NOT NULL,
|
||||
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
```
|
||||
|
||||
## MQTT Topics
|
||||
|
||||
- Subscribe to: `frigate/events`
|
||||
- Publish to: `{TOPIC}/counter/{SITE_NAME}`
|
||||
|
||||
## Architecture
|
||||
|
||||
The service implements a state machine with the following states:
|
||||
1. Waiting for "pintu-kiri-buka" detection
|
||||
2. Waiting for "pintu-kanan-buka" detection
|
||||
3. Timer active - counting "karung" objects
|
||||
4. Timer expired - publishing results and resetting
|
||||
|
||||
## Error Handling
|
||||
|
||||
The service includes comprehensive error handling and logging for:
|
||||
- MQTT connection issues
|
||||
- Database errors
|
||||
- Message parsing errors
|
||||
- Timer expiration handling
|
||||
Reference in New Issue
Block a user