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
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
|
|
}
|
|
|