Very unofficial Go SDK for interacting with Mysa Smart Thermostats.
Ported from mysa-js-sdk by @bourquep.
go get github.com/bengentree/mysapackage main
import (
"context"
"fmt"
"log"
"log/slog"
"github.com/bengentree/mysa"
)
func main() {
ctx := context.Background()
// Create a new client (logging disabled by default)
client, err := mysa.NewClient(ctx)
// Or with logging enabled:
// client, err := mysa.NewClient(ctx, mysa.WithLogger(slog.Default()))
if err != nil {
log.Fatal(err)
}
defer client.Close(ctx)
// Login with your Mysa credentials
if err := client.Login(ctx, "email@example.com", "password"); err != nil {
log.Fatal(err)
}
// Get all devices
devices, err := client.GetDevices(ctx)
if err != nil {
log.Fatal(err)
}
for id, device := range devices.DevicesObj {
fmt.Printf("Device: %s (%s)\n", *device.Name, id)
}
// Get device states (temperature, setpoint, etc.)
states, err := client.GetDeviceStates(ctx)
if err != nil {
log.Fatal(err)
}
for id, state := range states.DeviceStatesObj {
if state.SensorTemp != nil {
fmt.Printf("Device %s: %.1f°C\n", id, state.SensorTemp.V)
}
}
// Set temperature (in Celsius)
setpoint := 21.0
if err := client.SetDeviceState(ctx, "device-id", &setpoint, nil, nil); err != nil {
log.Fatal(err)
}
}- Authenticate with Mysa via AWS Cognito
- Get device list and configuration
- Get current device states (temperature, humidity, setpoint)
- Set device temperature
- Real-time updates via MQTT
- Session persistence (save/load sessions)
// Start receiving real-time updates
if err := client.StartRealtimeUpdates(ctx, "device-id"); err != nil {
log.Fatal(err)
}
// Listen for events
go func() {
for status := range client.Events.StatusChanged {
fmt.Printf("Temperature: %.1f°C, Setpoint: %.1f°C\n",
status.Temperature, status.SetPoint)
}
}()// Save session after login
session := client.Session()
if err := session.SaveToFile("session.json"); err != nil {
log.Fatal(err)
}
// Load session later
session, err := mysa.LoadSessionFromFile("session.json")
if err != nil {
log.Fatal(err)
}
client, err := mysa.NewClient(ctx, mysa.WithSession(session))The SDK uses Go's standard log/slog package. Logging is disabled by default.
// Enable logging with default logger
client, err := mysa.NewClient(ctx, mysa.WithLogger(slog.Default()))
// Or use a custom JSON logger
logger := slog.New(slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{
Level: slog.LevelDebug,
}))
client, err := mysa.NewClient(ctx, mysa.WithLogger(logger))MIT