1
0
Fork 0

Compare commits

..

3 Commits

Author SHA1 Message Date
Michał Rudowicz 053187c5d1 Send events in batches 2024-03-05 21:52:59 +01:00
Michał Rudowicz 6b3159eed0 go-fmt changes 2024-03-05 21:42:56 +01:00
Michał Rudowicz 75f849a7b1 Update README 2024-03-05 21:32:49 +01:00
6 changed files with 42 additions and 30 deletions

View File

@ -5,6 +5,13 @@ tasks:
- go-get: | - go-get: |
cd go-satel cd go-satel
go get -t go get -t
- precommit: |
cd go-satel
python3 -m venv .venv
source .venv/bin/activate
pip3 install pre-commit
pre-commit install
pre-commit run -a
- test: | - test: |
cd go-satel cd go-satel
go test go test

16
.pre-commit-config.yaml Normal file
View File

@ -0,0 +1,16 @@
# See https://pre-commit.com for more information
# See https://pre-commit.com/hooks.html for more hooks
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v3.2.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-added-large-files
- repo: https://github.com/TekWizely/pre-commit-golang
rev: v0.8.3
hooks:
- id: go-fmt
args: [ -w, -s ]
- id: go-vet-mod
- id: go-test-repo-mod

View File

@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE. SOFTWARE.

View File

@ -4,14 +4,15 @@ go-satel is a Go library to integrate
with [Satel ETHM-1/ETHM-1 Plus](https://www.satel.pl/produkty/sswin/komunikacja-i-powiadamianie/komunikacja-tcp-ip/ethm-1-plus/) with [Satel ETHM-1/ETHM-1 Plus](https://www.satel.pl/produkty/sswin/komunikacja-i-powiadamianie/komunikacja-tcp-ip/ethm-1-plus/)
module module
[![Build](https://github.com/probakowski/go-satel/actions/workflows/build.yml/badge.svg)](https://github.com/probakowski/go-satel/actions/workflows/build.yml) [![builds.sr.ht status](https://builds.sr.ht/~michalr/go-satel.svg)](https://builds.sr.ht/~michalr/go-satel?) [![Go Report Card](https://goreportcard.com/badge/git.sr.ht/~michalr/go-satel)](https://goreportcard.com/report/git.sr.ht/~michalr/go-satel)
[![Go Report Card](https://goreportcard.com/badge/github.com/probakowski/go-satel)](https://goreportcard.com/report/github.com/probakowski/go-satel)
The library is based on https://github.com/probakowski/go-satel .
## Installation ## Installation
go-satel is compatible with modern Go releases in module mode, with Go installed: go-satel is compatible with modern Go releases in module mode, with Go installed:
```bash ```bash
go get github.com/probakowski/go-satel go get git.sr.ht/~michalr/go-satel
``` ```
will resolve and add the package to the current development module, along with its dependencies. will resolve and add the package to the current development module, along with its dependencies.
@ -19,29 +20,11 @@ will resolve and add the package to the current development module, along with i
Alternatively the same can be achieved if you use import in a package: Alternatively the same can be achieved if you use import in a package:
```go ```go
import "github.com/probakowski/go-satel" import "git.sr.ht/~michalr/go-satel"
``` ```
and run `go get` without parameters. and run `go get` without parameters.
Finally, to use the top-of-trunk version of this repo, use the following command:
```bash
go get github.com/probakowski/go-satel@master
```
## Usage ## Usage
```go
s := satel.NewConfig("<ip:port>", satel.Config{EventsQueueSize: 1000}) **TODO**
go func() {
value := true
for {
s.SetOutput("<user code>", <port number>, value)
time.Sleep(5 * time.Second)
value = !value
}
}()
for e, ok := <-s.Events; ok; e, ok = <-s.Events {
logger.Print("change from satel", "type", e.Type, "index", e.Index, "value", e.Value)
}
```

View File

@ -51,7 +51,7 @@ func makeNameEvent(bytes []byte) (*NameEvent, error) {
} }
type getNameResult struct { type getNameResult struct {
ev *NameEvent ev *NameEvent
err error err error
} }

View File

@ -8,12 +8,16 @@ import (
"time" "time"
) )
type Event struct { type BasicEventElement struct {
Type ChangeType Type ChangeType
Index int Index int
Value bool Value bool
} }
type Event struct {
BasicEvents []BasicEventElement
}
type Config struct { type Config struct {
EventsQueueSize int EventsQueueSize int
LongCommands bool LongCommands bool
@ -125,16 +129,18 @@ func (s *Satel) readRawEvents() {
if cmd == 0xEF { if cmd == 0xEF {
return return
} }
basicElements := make([]BasicEventElement, 0)
for i, bb := range bytes { for i, bb := range bytes {
for j := 0; j < 8; j++ { for j := 0; j < 8; j++ {
index := byte(1 << j) index := byte(1 << j)
s.Events <- Event{ basicElements = append(basicElements, BasicEventElement{
Type: ChangeType(cmd), Type: ChangeType(cmd),
Index: i*8 + j, Index: i*8 + j,
Value: bb&index != 0, Value: bb&index != 0,
} })
} }
} }
s.Events <- Event{basicElements}
} }
func (s *Satel) read() { func (s *Satel) read() {