Support multiple Garmin IMEIs via comma-separated GARMIN_IMEI

This commit is contained in:
Ian Gulliver
2026-03-26 20:10:29 -07:00
parent 507cc1a7e0
commit f880ab46f3
2 changed files with 20 additions and 11 deletions

View File

@@ -37,12 +37,12 @@ func newGarminClient(apiKey string) *garminClient {
}
}
func (gc *garminClient) sendMessage(imei, sender, msg string) error {
func (gc *garminClient) sendMessage(imeis []string, sender, msg string) error {
buf := &bytes.Buffer{}
err := json.NewEncoder(buf).Encode(garminMessageRequest{
Messages: []garminMessage{
{
Recipients: []string{imei},
Recipients: imeis,
Sender: sender,
Timestamp: time.Now().UTC().Format("2006-01-02T15:04:05Z"),
Message: msg,
@@ -84,8 +84,8 @@ func (gc *garminClient) sendMessage(imei, sender, msg string) error {
log.Printf("[<-garmin] %s", string(body))
if grResp.Count != 1 {
return fmt.Errorf("expected 1 message, got %d", grResp.Count)
if grResp.Count != len(imeis) {
return fmt.Errorf("expected %d messages, got %d", len(imeis), grResp.Count)
}
return nil

23
main.go
View File

@@ -13,12 +13,12 @@ type PHandler struct {
tmpl *template.Template
pd *pdClient
gc *garminClient
garminIMEI string
garminIMEIs []string
garminSender string
mux *http.ServeMux
}
func NewPHandler(pdRoutingKey, garminAPIKey, garminIMEI, garminSender string) (*PHandler, error) {
func NewPHandler(pdRoutingKey, garminAPIKey string, garminIMEIs []string, garminSender string) (*PHandler, error) {
tmpl := template.New("index.html")
tmpl.Funcs(template.FuncMap{
@@ -33,7 +33,7 @@ func NewPHandler(pdRoutingKey, garminAPIKey, garminIMEI, garminSender string) (*
ph := &PHandler{
tmpl: tmpl,
pd: newPDClient(pdRoutingKey),
garminIMEI: garminIMEI,
garminIMEIs: garminIMEIs,
garminSender: garminSender,
mux: http.NewServeMux(),
}
@@ -86,7 +86,7 @@ func (ph *PHandler) sendAlert(m string) error {
if ph.gc != nil {
go func() {
err := ph.gc.sendMessage(ph.garminIMEI, ph.garminSender, m)
err := ph.gc.sendMessage(ph.garminIMEIs, ph.garminSender, m)
if err != nil {
res <- fmt.Errorf("Error sending to Garmin: %w", err)
} else {
@@ -152,17 +152,26 @@ func main() {
garminAPIKey := os.Getenv("GARMIN_API_KEY")
garminIMEI := os.Getenv("GARMIN_IMEI")
if garminAPIKey != "" && garminIMEI == "" {
garminIMEIStr := os.Getenv("GARMIN_IMEI")
if garminAPIKey != "" && garminIMEIStr == "" {
log.Fatalf("please set GARMIN_IMEI")
}
var garminIMEIs []string
if garminIMEIStr != "" {
for _, imei := range strings.Split(garminIMEIStr, ",") {
imei = strings.TrimSpace(imei)
if imei != "" {
garminIMEIs = append(garminIMEIs, imei)
}
}
}
garminSender := os.Getenv("GARMIN_SENDER")
if garminAPIKey != "" && garminSender == "" {
log.Fatalf("please set GARMIN_SENDER")
}
ph, err := NewPHandler(pdRoutingKey, garminAPIKey, garminIMEI, garminSender)
ph, err := NewPHandler(pdRoutingKey, garminAPIKey, garminIMEIs, garminSender)
if err != nil {
log.Fatalf("NewPHandler: %s", err)
}