低空智控平台 后端go
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

73 lines
1.9 KiB

package main
import (
"log"
"os"
"os/signal"
"syscall"
"time"
)
// dockSpec 描述机巢及其直接模拟上报的绑定无人机。
type dockSpec struct {
DockID string
Name string
Location string
DroneSN string
DroneName string
Latitude float64
Longitude float64
DroneLat float64
DroneLon float64
Flying bool
Battery int
Alarm bool
}
func main() {
broker := envOr("MOCK_MQTT_BROKER", "tcp://127.0.0.1:1883")
username := envOr("MOCK_MQTT_USERNAME", "laic")
password := envOr("MOCK_MQTT_PASSWORD", "")
specs := []dockSpec{
{
DockID: "dock-1", Name: "青山湖 01 号机巢", Location: "青山湖科技城 A 区",
DroneSN: "JG-UAV-001", DroneName: "巡检无人机 001",
Latitude: 30.262438, Longitude: 119.802631, DroneLat: 30.262438, DroneLon: 119.802631,
Battery: 86,
},
{
DockID: "dock-2", Name: "青山湖 02 号机巢", Location: "青山湖科技城 B 区",
DroneSN: "JG-UAV-002", DroneName: "巡检无人机 002",
Latitude: 30.255917, Longitude: 119.818264, DroneLat: 30.256500, DroneLon: 119.818900,
Flying: true, Battery: 72,
},
{
DockID: "dock-3", Name: "青山湖 03 号机巢", Location: "青山湖科技城 C 区",
DroneSN: "JG-UAV-003", DroneName: "巡检无人机 003",
Latitude: 30.248610, Longitude: 119.791450, DroneLat: 30.248610, DroneLon: 119.791450,
Battery: 41, Alarm: true,
},
}
for _, spec := range specs {
dock := newMockDock(spec)
if err := dock.start(broker, username, password); err != nil {
log.Fatalf("启动机巢 %s 失败: %v", spec.DockID, err)
}
}
log.Println("模拟设备已启动(机巢 MQTT 直接上报机巢与无人机数据),按 Ctrl+C 退出")
quit := make(chan os.Signal, 1)
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
<-quit
log.Println("正在退出...")
time.Sleep(200 * time.Millisecond)
}
func envOr(key, def string) string {
if v := os.Getenv(key); v != "" {
return v
}
return def
}