https://github.com/brentahughes/gozone
Zoneminder api client written in golang
https://github.com/brentahughes/gozone
go golang ipcam ipcamera zm zoneminder
Last synced: 10 months ago
JSON representation
Zoneminder api client written in golang
- Host: GitHub
- URL: https://github.com/brentahughes/gozone
- Owner: brentahughes
- License: apache-2.0
- Created: 2017-09-25T01:10:11.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2017-09-28T01:53:02.000Z (over 8 years ago)
- Last Synced: 2025-02-22T21:15:14.652Z (over 1 year ago)
- Topics: go, golang, ipcam, ipcamera, zm, zoneminder
- Language: Go
- Size: 14.6 KB
- Stars: 2
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# GoZone
Zoneminder is a great surveilance system for DIY setups and Golang is great for small services within DIY setups. So it just makes sense to bring them together.
## Install
```
go get github.com/bah2830/GoZone
```
## Monitors
### Get All Monitors
```
import zm "github.com/bah2830/GoZone"
client, err := zm.NewClient("http://192.168.1.10/zm", "username", "password")
if err != nil {
log.Fatal(err)
}
monitors, err := client.GetMonitors()
if err != nil {
log.Fatal(err)
}
log.Printf("%+v", monitors)
```
### Getting Events For A Monitor
```
import zm "github.com/bah2830/GoZone"
client, err := zm.NewClient("http://192.168.1.10/zm", "username", "password")
if err != nil {
log.Fatal(err)
}
monitor, err := client.GetMonitorById(1)
if err != nil {
log.Fatal(err)
}
events, err := monitor.GetEvents(nil)
if err != nil {
log.Fatal(err)
}
log.Printf("%+v", events)
```
### Monitoring For Events
```
import zm "github.com/bah2830/GoZone"
client, err := zm.NewClient("http://192.168.1.10/zm", "username", "password")
if err != nil {
log.Fatal(err)
}
monitor, err := client.GetMonitorById(1)
if err != nil {
log.Fatal(err)
}
eventChan := make(chan zoneminder.Events)
m.MonitorForEvents("Motion", 5, eventChan)
for {
select {
case e := <-eventChan:
log.Printf("\n%+v", e)
default:
time.Sleep(30 * time.Second)
m.StopEventMonitoring()
return
}
}
```
## Events
### Get All Events
This can return well over the default 100 pagination limit. Use filters to narrow that down.
```
import zm "github.com/bah2830/GoZone"
client, err := zm.NewClient("http://192.168.1.10/zm", "username", "password")
if err != nil {
log.Fatal(err)
}
events, err := client.GetEvents(&zm.EventOpts{
Cause: "Motion",
})
if err != nil {
log.Fatal(err)
}
log.Printf("%+v", events)
```
### Monitor For Events
```
import zm "github.com/bah2830/GoZone"
client, err := zm.NewClient("http://192.168.1.10/zm", "username", "password")
if err != nil {
log.Fatal(err)
}
eventChan := make(chan zoneminder.Events)
c.MonitorForEvents(&zm.EventOpts{Cause: "Motion"}, 5, eventChan)
for {
select {
case e := <-eventChan:
log.Printf("\n%+v", e)
default:
time.Sleep(30 * time.Second)
c.StopEventMonitoring()
return
}
}
```