187 lines
3.5 KiB
Markdown
187 lines
3.5 KiB
Markdown
# SVC-HCM-CRAWLER
|
|
|
|
Hikvision Device Crawling Service for HCM Bridge
|
|
|
|
This service crawls Hikvision access control devices and sends events to the `svc-hcmbridge` service.
|
|
|
|
## Features
|
|
|
|
- Automatically crawls Hikvision devices configured for crawling (flag=1 or iscrawling=1)
|
|
- Fetches device MAC address from device info endpoint
|
|
- Handles HTTP Digest authentication
|
|
- Duplicate event detection
|
|
- Sends events to `svc-hcmbridge` at `/api/dooraccess/logs`
|
|
- PM2 deployment ready
|
|
|
|
## Prerequisites
|
|
|
|
- Node.js 20+
|
|
- MySQL database (same as svc-hcmbridge)
|
|
- PM2 (for deployment)
|
|
- `entity` package (from parent directory)
|
|
|
|
## Installation
|
|
|
|
1. Install dependencies:
|
|
```bash
|
|
npm install
|
|
```
|
|
|
|
2. Link the entity package:
|
|
```bash
|
|
cd ../entity
|
|
npm install
|
|
cd ../svc-hcm-crawler
|
|
```
|
|
|
|
3. Build the project:
|
|
```bash
|
|
npm run build
|
|
```
|
|
|
|
## Configuration
|
|
|
|
Edit `config/default.json` or `config/prod.json`:
|
|
|
|
```json
|
|
{
|
|
"database": {
|
|
"hcm": {
|
|
"host": "127.0.0.1",
|
|
"port": "3306",
|
|
"username": "root",
|
|
"password": "your_password",
|
|
"database": "tt_hcm"
|
|
}
|
|
},
|
|
"bridge": {
|
|
"host": "127.0.0.1",
|
|
"port": "3000",
|
|
"endpoint": "/api/dooraccess/logs"
|
|
},
|
|
"hikvision": {
|
|
"defaultUsername": "admin",
|
|
"defaultPassword": "Passwordhik_1",
|
|
"defaultPort": 80
|
|
},
|
|
"crawler": {
|
|
"interval": "*/1 * * * *"
|
|
}
|
|
}
|
|
```
|
|
|
|
## Development
|
|
|
|
Run in development mode:
|
|
```bash
|
|
npm run dev
|
|
```
|
|
|
|
## Deployment with PM2
|
|
|
|
1. Build the project:
|
|
```bash
|
|
npm run build
|
|
```
|
|
|
|
2. Start with PM2:
|
|
```bash
|
|
npm run pm2:start
|
|
```
|
|
|
|
Or manually:
|
|
```bash
|
|
pm2 start ecosystem.config.js
|
|
```
|
|
|
|
3. Check status:
|
|
```bash
|
|
pm2 list
|
|
pm2 logs svc-hcm-crawler
|
|
```
|
|
|
|
4. Stop the service:
|
|
```bash
|
|
npm run pm2:stop
|
|
# or
|
|
pm2 stop svc-hcm-crawler
|
|
```
|
|
|
|
5. Restart the service:
|
|
```bash
|
|
npm run pm2:restart
|
|
# or
|
|
pm2 restart svc-hcm-crawler
|
|
```
|
|
|
|
6. Delete from PM2:
|
|
```bash
|
|
npm run pm2:delete
|
|
# or
|
|
pm2 delete svc-hcm-crawler
|
|
```
|
|
|
|
## PM2 Commands
|
|
|
|
- `npm run pm2:start` - Start the service
|
|
- `npm run pm2:stop` - Stop the service
|
|
- `npm run pm2:restart` - Restart the service
|
|
- `npm run pm2:delete` - Delete from PM2
|
|
- `npm run pm2:logs` - View logs
|
|
|
|
## How It Works
|
|
|
|
1. The service runs on a cron schedule (default: every 1 minute)
|
|
2. It queries `tbl_deviceinfo` for devices with:
|
|
- `brand = 'HIKVISION'`
|
|
- `flag = 1` OR `iscrawling = 1`
|
|
- `isdeleted = 0`
|
|
3. For each device:
|
|
- Fetches MAC address from device info endpoint
|
|
- Makes authenticated requests to `/ISAPI/AccessControl/AcsEvent`
|
|
- Maps events to webhook format
|
|
- Checks for duplicates
|
|
- Sends events to `svc-hcmbridge` at `/api/dooraccess/logs`
|
|
|
|
## Logs
|
|
|
|
Logs are stored in:
|
|
- PM2 logs: `./logs/pm2-out.log` and `./logs/pm2-error.log`
|
|
- Console output (when running with `npm start`)
|
|
|
|
## Troubleshooting
|
|
|
|
1. **Database connection issues:**
|
|
- Check database credentials in config
|
|
- Ensure database is accessible
|
|
- Check if `entity` package is properly linked
|
|
|
|
2. **Bridge service not responding:**
|
|
- Ensure `svc-hcmbridge` is running
|
|
- Check bridge host/port in config
|
|
- Verify endpoint path is correct
|
|
|
|
3. **Device connection issues:**
|
|
- Check device IP addresses in `tbl_deviceinfo`
|
|
- Verify device credentials
|
|
- Check network connectivity to devices
|
|
|
|
4. **MAC address not being saved:**
|
|
- Check logs for XML parsing errors
|
|
- Verify device info endpoint is accessible
|
|
- Check device returns valid XML
|
|
|
|
## Environment Variables
|
|
|
|
Set `NODE_ENV` to `prod` for production:
|
|
```bash
|
|
export NODE_ENV=prod
|
|
```
|
|
|
|
Or use PM2 ecosystem config which sets it automatically.
|
|
|
|
## License
|
|
|
|
ISC
|
|
|