random ai stuff
This commit is contained in:
89
main.go
Normal file
89
main.go
Normal file
@@ -0,0 +1,89 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"net"
|
||||
|
||||
"git.k6n.net/mats/go-telldus-matter/telldus"
|
||||
"github.com/tom-code/gomat"
|
||||
)
|
||||
|
||||
const (
|
||||
fabricID = 0x100
|
||||
adminUser = 5
|
||||
deviceID = 10
|
||||
matterIP = "192.168.1.100" // Replace with actual Matter device IP
|
||||
matterPort = 5540
|
||||
)
|
||||
|
||||
var fabric *gomat.Fabric
|
||||
|
||||
func main() {
|
||||
// Initialize Telldus
|
||||
telldus.Init()
|
||||
defer telldus.Close()
|
||||
|
||||
// Register callbacks
|
||||
telldus.RegisterDeviceEvent(deviceEventHandler)
|
||||
telldus.RegisterSensorEvent(sensorEventHandler)
|
||||
|
||||
// Initialize Matter certificate manager
|
||||
cm := gomat.NewFileCertManager(fabricID)
|
||||
cm.Load()
|
||||
|
||||
fabric = gomat.NewFabric(fabricID, cm)
|
||||
|
||||
// Keep the program running
|
||||
fmt.Println("Telldus-Matter bridge running. Press Ctrl+C to exit.")
|
||||
select {}
|
||||
}
|
||||
|
||||
func deviceEventHandler(deviceId, method int, data string, callbackId int) {
|
||||
fmt.Printf("Device event: ID=%d, Method=%d, Data=%s\n", deviceId, method, data)
|
||||
|
||||
// Example: If a Telldus device is turned on, turn on a Matter device
|
||||
if method == telldus.MethodTurnOn {
|
||||
sendMatterCommand("on")
|
||||
}
|
||||
}
|
||||
|
||||
func sensorEventHandler(protocol, model string, id, dataType int, value string, timestamp, callbackId int) {
|
||||
fmt.Printf("Sensor event: Protocol=%s, Model=%s, ID=%d, Type=%d, Value=%s, Timestamp=%d\n",
|
||||
protocol, model, id, dataType, value, timestamp)
|
||||
|
||||
// Example: Log sensor data, or react to temperature, etc.
|
||||
}
|
||||
|
||||
func sendMatterCommand(command string) {
|
||||
secureChannel, err := gomat.StartSecureChannel(net.ParseIP(matterIP), matterPort, 55555)
|
||||
if err != nil {
|
||||
log.Printf("Failed to start secure channel: %v", err)
|
||||
return
|
||||
}
|
||||
defer secureChannel.Close()
|
||||
|
||||
secureChannel, err = gomat.SigmaExchange(fabric, adminUser, deviceID, secureChannel)
|
||||
if err != nil {
|
||||
log.Printf("Failed to exchange sigma: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
var invokeCommand []byte
|
||||
switch command {
|
||||
case "on":
|
||||
// invokeCommand = gomat.EncodeInvokeCommand(1, 6, 1, []byte{})
|
||||
invokeCommand = []byte{} // Placeholder
|
||||
case "off":
|
||||
// invokeCommand = gomat.EncodeInvokeCommand(1, 6, 0, []byte{})
|
||||
invokeCommand = []byte{} // Placeholder
|
||||
}
|
||||
|
||||
secureChannel.Send(invokeCommand)
|
||||
resp, err := secureChannel.Receive()
|
||||
if err != nil {
|
||||
log.Printf("Failed to receive response: %v", err)
|
||||
return
|
||||
}
|
||||
fmt.Printf("Matter command response: %v\n", resp)
|
||||
}
|
||||
Reference in New Issue
Block a user