122 lines
3.4 KiB
Go
122 lines
3.4 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"io/ioutil"
|
|
"log"
|
|
"net/http"
|
|
"net/url"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
func stopAlerting(deveui string) {
|
|
myurl := fmt.Sprintf("https://proxy1.lpn.swisscom.ch/thingpark/lrc/rest/downlink?DevEUI=%s&FPort=2&Payload=0201", deveui)
|
|
|
|
req, err := http.NewRequest("POST", myurl, nil)
|
|
if err != nil {
|
|
log.Fatal("Error reading request. ", err)
|
|
}
|
|
|
|
req.Header.Set("Content-type", "application/x-www-form-urlencoded")
|
|
|
|
client := &http.Client{Timeout: time.Second * 10}
|
|
|
|
resp, err := client.Do(req)
|
|
if err != nil {
|
|
log.Fatal("Error reading response. ", err)
|
|
}
|
|
defer resp.Body.Close()
|
|
|
|
body, err := ioutil.ReadAll(resp.Body)
|
|
if err != nil {
|
|
log.Fatal("Error reading body. ", err)
|
|
}
|
|
|
|
fmt.Printf("%s\n", body)
|
|
}
|
|
|
|
func sendSMS(phonenumber string, alertMessage string) {
|
|
myurl := fmt.Sprintf("https://api.smsapi.com/sms.do?to=%s&message=%s&from=wo-bisch&format=json", phonenumber, url.QueryEscape(alertMessage))
|
|
|
|
req, err := http.NewRequest("GET", myurl, nil)
|
|
if err != nil {
|
|
log.Fatal("Error reading request. ", err)
|
|
}
|
|
|
|
req.Header.Set("Authorization", "Bearer IQ4vRG2JvNOmYmrYz6RuSwAanYZgd2hHGwtN62kq")
|
|
|
|
client := &http.Client{Timeout: time.Second * 10}
|
|
|
|
resp, err := client.Do(req)
|
|
if err != nil {
|
|
log.Fatal("Error reading response. ", err)
|
|
}
|
|
defer resp.Body.Close()
|
|
|
|
body, err := ioutil.ReadAll(resp.Body)
|
|
if err != nil {
|
|
log.Fatal("Error reading body. ", err)
|
|
}
|
|
|
|
fmt.Printf("%s\n", body)
|
|
}
|
|
|
|
func sendAlert(deveui string, alertMessage string) {
|
|
fmt.Printf("sendAlert: deveui=%s, message=%s\n", deveui, alertMessage)
|
|
smsnumber := getSmsnumber(deveui)
|
|
smsalarmactive := getDevSmsAlarmactive(deveui)
|
|
fmt.Printf("sendAlert: deveui=%s, smsnumber=%s, smsalarmactive=%s\n", deveui, smsnumber, smsalarmactive)
|
|
if (smsnumber != "") && (smsalarmactive == "1") {
|
|
// we strip of the leading +
|
|
smsnumber = strings.Replace(smsnumber, "+", "", -1)
|
|
sendSMS(smsnumber, alertMessage)
|
|
}
|
|
email := getEmail(deveui)
|
|
emailalarmactive := getDevEmailAlarmactive(deveui)
|
|
fmt.Printf("sendAlert: deveui=%s, email=%s, emailalarmactive=%s\n", deveui, email, emailalarmactive)
|
|
if emailalarmactive == "1" {
|
|
emails := strings.Split(email, ",")
|
|
for _, em := range emails {
|
|
sendEmail(em, alertMessage)
|
|
}
|
|
}
|
|
}
|
|
|
|
func DispatchAlert(deveui string, alertType string) {
|
|
// first let's stop the alerting cyle on the Lora Network (every minute for one hour!) if button was pressed
|
|
alertMessage := "Unknown alertType"
|
|
if alertType == "alert_button" {
|
|
stopAlerting(deveui)
|
|
}
|
|
|
|
// we check if deveui exists
|
|
if !(checkDevExists(deveui)) {
|
|
fmt.Printf("Error: Deveui %s does not exist!", deveui)
|
|
return
|
|
}
|
|
|
|
// then we check if it expired
|
|
if AboExpired(deveui) {
|
|
fmt.Printf("Error: Abo for Deveui %s is expired!", deveui)
|
|
return
|
|
}
|
|
|
|
// then we check that an alert was not already sent out recently
|
|
if AlertAlreadySentRecently(deveui, alertType) {
|
|
fmt.Printf("Error: Alert for Deveui %s has already been sent!", deveui)
|
|
return
|
|
}
|
|
|
|
// then we make an entry that an alert was sent, this will expire automatically
|
|
AddAlertAlreadySentRecently(deveui, alertType)
|
|
|
|
// then we send the alert
|
|
if alertType == "alert_button" {
|
|
alertMessage = fmt.Sprintf("Alarm (%s): Knopf gedrueckt, %s", getDevAlias(deveui), time.Now().Format("02.01.2006 15:04:05"))
|
|
} else if alertType == "alert_greenzone" {
|
|
alertMessage = fmt.Sprintf("Alarm (%s): Gruene Zone wurde verlassen, %s", getDevAlias(deveui), time.Now().Format("02.01.2006 15:04:05"))
|
|
}
|
|
sendAlert(deveui, alertMessage)
|
|
}
|