package main import ( "fmt" "html/template" "strings" "github.com/probakowski/go-satel" ) type MsgContent struct { SatelEvent satel.Event } type GenericMessage struct { ChatIds ChatId Messages []MsgContent } func (self GenericMessage) Format(template *template.Template) string { b := strings.Builder{} template.Execute(&b, self) return b.String() } func getEmojiWhenTrueIsGood(v bool) string { if v { return "✅" } else { return "🔴" } } func getEmojiWhenTrueIsBad(v bool) string { if v { return "🔴" } else { return "✅" } } func (self MsgContent) FormatEvent() string { switch self.SatelEvent.Type { case satel.ZoneViolation: return fmt.Sprintf("%s: %s", self.SatelEvent.Type.String(), getEmojiWhenTrueIsBad(self.SatelEvent.Value)) case satel.ZoneTamper: return fmt.Sprintf("%s: %s", self.SatelEvent.Type.String(), getEmojiWhenTrueIsBad(self.SatelEvent.Value)) case satel.ZoneAlarm: return fmt.Sprintf("%s: %s", self.SatelEvent.Type.String(), getEmojiWhenTrueIsBad(self.SatelEvent.Value)) case satel.ZoneTamperAlarm: return fmt.Sprintf("%s: %s", self.SatelEvent.Type.String(), getEmojiWhenTrueIsBad(self.SatelEvent.Value)) case satel.ZoneAlarmMemory: return fmt.Sprintf("%s: %t", self.SatelEvent.Type.String(), self.SatelEvent.Value) case satel.ZoneTamperAlarmMemory: return fmt.Sprintf("%s: %t", self.SatelEvent.Type.String(), self.SatelEvent.Value) case satel.ZoneBypass: return fmt.Sprintf("%s: %t", self.SatelEvent.Type.String(), self.SatelEvent.Value) case satel.ZoneNoViolationTrouble: return fmt.Sprintf("%s: %t", self.SatelEvent.Type.String(), self.SatelEvent.Value) case satel.ZoneLongViolationTrouble: return fmt.Sprintf("%s: %t", self.SatelEvent.Type.String(), self.SatelEvent.Value) case satel.ArmedPartitionSuppressed: return fmt.Sprintf("%s: %t", self.SatelEvent.Type.String(), self.SatelEvent.Value) case satel.ArmedPartition: return fmt.Sprintf("%s: %s", self.SatelEvent.Type.String(), getEmojiWhenTrueIsGood(self.SatelEvent.Value)) case satel.PartitionArmedInMode2: return fmt.Sprintf("%s: %t", self.SatelEvent.Type.String(), self.SatelEvent.Value) case satel.PartitionArmedInMode3: return fmt.Sprintf("%s: %t", self.SatelEvent.Type.String(), self.SatelEvent.Value) case satel.PartitionWith1stCodeEntered: return fmt.Sprintf("%s: %t", self.SatelEvent.Type.String(), self.SatelEvent.Value) case satel.PartitionEntryTime: return fmt.Sprintf("%s: %t", self.SatelEvent.Type.String(), self.SatelEvent.Value) case satel.PartitionExitTimeOver10s: return fmt.Sprintf("%s: %t", self.SatelEvent.Type.String(), self.SatelEvent.Value) case satel.PartitionExitTimeUnder10s: return fmt.Sprintf("%s: %t", self.SatelEvent.Type.String(), self.SatelEvent.Value) case satel.PartitionTemporaryBlocked: return fmt.Sprintf("%s: %t", self.SatelEvent.Type.String(), self.SatelEvent.Value) case satel.PartitionBlockedForGuardRound: return fmt.Sprintf("%s: %t", self.SatelEvent.Type.String(), self.SatelEvent.Value) case satel.PartitionAlarm: return fmt.Sprintf("%s: %s", self.SatelEvent.Type.String(), getEmojiWhenTrueIsBad(self.SatelEvent.Value)) case satel.PartitionFireAlarm: return fmt.Sprintf("%s: %s", self.SatelEvent.Type.String(), getEmojiWhenTrueIsBad(self.SatelEvent.Value)) case satel.PartitionAlarmMemory: return fmt.Sprintf("%s: %t", self.SatelEvent.Type.String(), self.SatelEvent.Value) case satel.PartitionFireAlarmMemory: return fmt.Sprintf("%s: %t", self.SatelEvent.Type.String(), self.SatelEvent.Value) case satel.Output: return fmt.Sprintf("%s: %t", self.SatelEvent.Type.String(), self.SatelEvent.Value) case satel.DoorOpened: return fmt.Sprintf("%s: %t", self.SatelEvent.Type.String(), self.SatelEvent.Value) case satel.DoorOpenedLong: return fmt.Sprintf("%s: %t", self.SatelEvent.Type.String(), self.SatelEvent.Value) case satel.StatusBit: return fmt.Sprintf("%s: %t", self.SatelEvent.Type.String(), self.SatelEvent.Value) case satel.TroublePart1: return fmt.Sprintf("%s: %t", self.SatelEvent.Type.String(), self.SatelEvent.Value) case satel.TroublePart2: return fmt.Sprintf("%s: %t", self.SatelEvent.Type.String(), self.SatelEvent.Value) case satel.TroublePart3: return fmt.Sprintf("%s: %t", self.SatelEvent.Type.String(), self.SatelEvent.Value) case satel.TroublePart4: return fmt.Sprintf("%s: %t", self.SatelEvent.Type.String(), self.SatelEvent.Value) case satel.TroublePart5: return fmt.Sprintf("%s: %t", self.SatelEvent.Type.String(), self.SatelEvent.Value) case satel.TroubleMemoryPart1: return fmt.Sprintf("%s: %t", self.SatelEvent.Type.String(), self.SatelEvent.Value) case satel.TroubleMemoryPart2: return fmt.Sprintf("%s: %t", self.SatelEvent.Type.String(), self.SatelEvent.Value) case satel.TroubleMemoryPart3: return fmt.Sprintf("%s: %t", self.SatelEvent.Type.String(), self.SatelEvent.Value) case satel.TroubleMemoryPart4: return fmt.Sprintf("%s: %t", self.SatelEvent.Type.String(), self.SatelEvent.Value) case satel.TroubleMemoryPart5: return fmt.Sprintf("%s: %t", self.SatelEvent.Type.String(), self.SatelEvent.Value) case satel.PartitionWithViolatedZones: return fmt.Sprintf("%s: %t", self.SatelEvent.Type.String(), self.SatelEvent.Value) case satel.ZoneIsolate: return fmt.Sprintf("%s: %t", self.SatelEvent.Type.String(), self.SatelEvent.Value) } panic(fmt.Sprint("Unknown event received: ", self.SatelEvent)) } func (self MsgContent) IndexDesc() string { switch self.SatelEvent.Type { case satel.ZoneViolation: return fmt.Sprintf("Zone %d", self.SatelEvent.Index) case satel.ZoneTamper: return fmt.Sprintf("Zone %d", self.SatelEvent.Index) case satel.ZoneAlarm: return fmt.Sprintf("Zone %d", self.SatelEvent.Index) case satel.ZoneTamperAlarm: return fmt.Sprintf("Zone %d", self.SatelEvent.Index) case satel.ZoneAlarmMemory: return fmt.Sprintf("Zone %d", self.SatelEvent.Index) case satel.ZoneTamperAlarmMemory: return fmt.Sprintf("Zone %d", self.SatelEvent.Index) case satel.ZoneBypass: return fmt.Sprintf("Zone %d", self.SatelEvent.Index) case satel.ZoneNoViolationTrouble: return fmt.Sprintf("Zone %d", self.SatelEvent.Index) case satel.ZoneLongViolationTrouble: return fmt.Sprintf("Zone %d", self.SatelEvent.Index) case satel.ArmedPartitionSuppressed: return fmt.Sprintf("Partition %d", self.SatelEvent.Index) case satel.ArmedPartition: return fmt.Sprintf("Partition %d", self.SatelEvent.Index) case satel.PartitionArmedInMode2: return fmt.Sprintf("Partition %d", self.SatelEvent.Index) case satel.PartitionArmedInMode3: return fmt.Sprintf("Partition %d", self.SatelEvent.Index) case satel.PartitionWith1stCodeEntered: return fmt.Sprintf("Partition %d", self.SatelEvent.Index) case satel.PartitionEntryTime: return fmt.Sprintf("Partition %d", self.SatelEvent.Index) case satel.PartitionExitTimeOver10s: return fmt.Sprintf("Partition %d", self.SatelEvent.Index) case satel.PartitionExitTimeUnder10s: return fmt.Sprintf("Partition %d", self.SatelEvent.Index) case satel.PartitionTemporaryBlocked: return fmt.Sprintf("Partition %d", self.SatelEvent.Index) case satel.PartitionBlockedForGuardRound: return fmt.Sprintf("Partition %d", self.SatelEvent.Index) case satel.PartitionAlarm: return fmt.Sprintf("Partition %d", self.SatelEvent.Index) case satel.PartitionFireAlarm: return fmt.Sprintf("Partition %d", self.SatelEvent.Index) case satel.PartitionAlarmMemory: return fmt.Sprintf("Partition %d", self.SatelEvent.Index) case satel.PartitionFireAlarmMemory: return fmt.Sprintf("Partition %d", self.SatelEvent.Index) case satel.ZoneIsolate: return fmt.Sprintf("Zone %d", self.SatelEvent.Index) } return fmt.Sprintf("Unknown index: %d", self.SatelEvent.Index) }