diff --git a/main.go b/main.go index cc0479a..bbff0bb 100755 --- a/main.go +++ b/main.go @@ -20,6 +20,7 @@ import ( "io/ioutil" "log" "os" + "strconv" "strings" "time" ) @@ -351,7 +352,7 @@ func RSA_Decrypts(cipherText []byte, path string) []byte { } // RSA_DecryptsOne RSA解密支持分段解密 -func RSA_DecryptsOne(cipherText []byte, privateKeyStr string) []byte { +func RSA_DecryptsOneBase(cipherText []byte, privateKeyStr string) []byte { //打开文件 var bytesDecrypt []byte // 读取私钥文件转成字节数组 @@ -499,7 +500,7 @@ MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCYwvInDUICXbmWcOAR5hm86mz7WlKL } //decrptCode := RSA_Decrypts(decodeByte, privatePath) - decrptCode := RSA_DecryptsOne(decodeByte, privateKeyPEM) + decrptCode := RSA_DecryptsOneBase(decodeByte, privateKeyPEM) fmt.Println("解密后的字符串:") fmt.Println(string(decrptCode)) @@ -520,7 +521,7 @@ MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCYwvInDUICXbmWcOAR5hm86mz7WlKL if err != nil { fmt.Println(err.Error()) } - decrptCode := RSA_DecryptsOne(decodeByte, privateKeyPEM) + decrptCode := RSA_DecryptsOneBase(decodeByte, privateKeyPEM) fmt.Println("解密后的字符串:") fmt.Println(string(decrptCode)) fmt.Println("-----userdyw--------") @@ -540,7 +541,7 @@ MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCYwvInDUICXbmWcOAR5hm86mz7WlKL if err != nil { fmt.Println(err.Error()) } - decrptCode := RSA_DecryptsOne(decodeByte, privateKeyPEM) + decrptCode := RSA_DecryptsOneBase(decodeByte, privateKeyPEM) fmt.Println("解密后的字符串:") fmt.Println(string(decrptCode)) fmt.Println("-----userdyw--------") @@ -567,8 +568,16 @@ MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCYwvInDUICXbmWcOAR5hm86mz7WlKL temperature.DataDate = now.Format("2006-01-02") temperature.DataHour = now.Format("2006-01-02 15") temperature.DataMinute = now.Format("2006-01-02 15:04") - temperature.Humidity = result[0] - temperature.Temperature = result[1] + //temperature.Humidity = result[0] + //temperature.Temperature = result[1] + // ParseFloat 返回 float64,需要显式转换为 float32 + f1, err1 := strconv.ParseFloat(result[0], 32) + f2, err2 := strconv.ParseFloat(result[1], 32) + if err1 == nil && err2 == nil { + // 转换为 float32 + temperature.Humidity = float32(f1) + temperature.Temperature = float32(f2) + } temperature.Topic = topic if topic == "WifiSHT/7C87CE9CA4E6/SHT20" { temperature.LocationDesc = "广东省珠海市高新区唐家湾镇东岸村水风三街28号501" @@ -614,8 +623,9 @@ MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCYwvInDUICXbmWcOAR5hm86mz7WlKL var connectHandler mqtt.OnConnectHandler = func(client mqtt.Client) { fmt.Println("Connected") subTemperature(client) - subAppPush(client) + subAppPushZhdc(client) subAppPushDyw(client) + subAppPushYf(client) } var connectLostHandler mqtt.ConnectionLostHandler = func(client mqtt.Client, err error) { @@ -636,7 +646,7 @@ func subTemperature(client mqtt.Client) { fmt.Printf("Subscribed to topic: %s", topic) } -func subAppPush(client mqtt.Client) { +func subAppPushZhdc(client mqtt.Client) { topic := "app_push" token := client.Subscribe(topic, 2, nil) token.Wait() @@ -666,7 +676,7 @@ func publish(client mqtt.Client) { } } -func main1() { +func main() { uuid := uuid.New() fmt.Println("Generated UUID:", uuid) @@ -692,7 +702,7 @@ func main1() { //sub(client) subTemperature(client) - subAppPush(client) + subAppPushZhdc(client) subAppPushDyw(client) subAppPushYf(client) //publish(client) diff --git a/main_hwy.go b/main_hwy.go deleted file mode 100644 index 3b180f5..0000000 --- a/main_hwy.go +++ /dev/null @@ -1,229 +0,0 @@ -package main - -import ( - "encoding/base64" - "encoding/json" - "fmt" - mqtt "github.com/eclipse/paho.mqtt.golang" - "github.com/google/uuid" - "go_mqtt/models" - "strings" - "time" -) - -func timing01(client mqtt.Client) { - //定时器,10秒钟执行一次 - ticker := time.NewTicker(10 * time.Second) - for { - time := <-ticker.C - fmt.Println("定时器====>", time.String()) - if !client.IsConnectionOpen() { - client.Connect() - } else { - fmt.Println("client has connect") - } - } -} - -var messagePubHandler01 mqtt.MessageHandler = func(client mqtt.Client, msg mqtt.Message) { - fmt.Printf("Received message: %s from topic: %s\n", msg.Payload(), msg.Topic()) - - message := fmt.Sprintf("%s", msg.Payload()) - topic := fmt.Sprintf("%s", msg.Topic()) - fmt.Println(message) - fmt.Println(topic) - - //privatePath := "/Users/edao/GolandProjects/go_mqtt/privateKey.pem" - privateKeyPEM := `-----BEGIN PRIVATE KEY----- -MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCYwvInDUICXbmWcOAR5hm86mz7WlKL3dDf12MSeIY2jm5QpUSSoMhrJOWLbOt5fXQepPaNO0M30A+3C4SFZrM/9WA5ehazO1u1m1LAkYzoSDRH3MMJsrJC3lCGDeOROteu+safuP9k/npU1YQu/+Ll2xEJNxyvUx4jLGM4LamiMI6ytM3gdnOAGP4YRQo9Etwo6I986yg/seCQC5rza9M4iBamoin7U8h9yOMKrM6xK/k9CcY/vn5+Uhe3Pvk4qj/2Ff3OXkkc1wfdILqdLwLOKL0Tb3ZciwG0p1CKO80yf5hyYoWjqZk5Rcd07nTo2gqTFGfLl9sqI9/+ipMDtnHlAgMBAAECggEATJd5yCC6lusdMRO5FOBUyUaUi9X2i1AU+RZKAynQySvSnbavUgExW58tRCHBUrGW9gJp59ft1N8J8hHhSO18NDY4H7laBlVdnwmYjRqtFo2VQO6sD4G8JRDION5f2iIxn/b2fYDI9H8vILfJRbNgtTSILyGlzTYUZzhLKxCh+8IsN96Nic8wa5COd1vZZmdhf2y8TG8clFWmozaScNSAATx7y+8XLVWjjWiIRZ6xQvx0uQPUParc9KihXXTKR2pA22yPIdz+U4MGD4kC0eczlcFKZ/dYv9e7OIGgnJfT0idSCu7nYb1pxJ1LxD9fS6IScNTF5dSe0OIL98e+XdyoAQKBgQDRep+5cW4iAKrEMH+djmcXAkoMiYtNVtnu0efLE8dP6vjYytQi368X9SdcASbfrQ31eEZmr/xQnlUF8oyHGkI38YS8dpAHzQcrkP3BljbbzB/3gJZaUdghGsDrK0xAJIzzmFKQpeKnGtr23vxUgaGrNsCYvQ0eQ7+5056KXS4r5QKBgQC6r8xtRSaje6L4WIydjWvYywsmRO0Of0aJLMDA/Wt2MWhHfh7ba9oI1cKGN80ap7xB2a9lQLgpv+C53wNtE5SpvjxsikAj96nUMMhGy9ojXrUith6HQhiINETz6Shnznd+AyrXP6KI/RpfA5nkDB5nrJxODwtYLP467IL7Cv7OAQKBgQCl4KxKdH/5fP28jYsAgJsxpSZt9xzQCU5Zxu396ZOSvUaApVyGoQpNtluMh3z48lhzYOKevgzW6gn5w69z7F8zXZT2iAxVoQ1kelP2z7RxKJrHqpNkwhqbXEwX7RlcUZUr8BqxYCqymJl7k+fMIzqaEalBSbLxnEReKi0I8/Bz4QKBgHK4b0ZCtVDHPEmimJ6E9l4dv/c/afF7swu+zaCK2ouiJvOwBCRQbYb6XPR/u/GCXASXUdpF4CX/vIhcDE3uN2/r8FO+zVWM7vbvF1OyF5WesG7pPW9e5ZZlkG3WvLa1wOZV6fCmMSo/ZwI2Q05JSDHrd43cXttLotrw1jiQ9C4BAoGBAKi4SOoOVQ5J5HQCDkBwPbG1AOLHFinzfoDl26GF/8Hy7fmmd1JiRTFldQp/A9VTAABz3sVYmMB92HSIaJhuDMoYJNI2Cf/cZifsv7vUL8cbLn+lPsKsebiuB0m0g4P2qLwLfegfNGEgA7lA5HIz3SELqbdp3iuqJeQl1fsJqD74 ------END PRIVATE KEY-----` - - if topic == "app_push" { - fmt.Println("珠海电厂APP收到mqtt消息") - decodeByte, err := base64.StdEncoding.DecodeString(message) - if err != nil { - fmt.Println(err.Error()) - } - //decrptCode := RSA_Decrypts(decodeByte, privatePath) - - decrptCode := RSA_DecryptsOne(decodeByte, privateKeyPEM) - - fmt.Println("解密后的字符串:") - fmt.Println(string(decrptCode)) - fmt.Println("-----user--------") - var user models.User - json.Unmarshal(decrptCode, &user) - fmt.Println(user) - - if models.GetUser(&user) { - models.UpdateUser(&user) - } else { - models.SaveUser(&user) - } - - } else if topic == "app_push_dyw" { - fmt.Println("大亚湾电厂APP收到mqtt消息") - decodeByte, err := base64.StdEncoding.DecodeString(message) - if err != nil { - fmt.Println(err.Error()) - } - decrptCode := RSA_DecryptsOne(decodeByte, privateKeyPEM) - fmt.Println("解密后的字符串:") - fmt.Println(string(decrptCode)) - fmt.Println("-----userdyw--------") - var user models.Userdyw - json.Unmarshal(decrptCode, &user) - fmt.Println(user) - - if models.GetUserdyw(&user) { - models.UpdateUserdyw(&user) - } else { - models.SaveUserdyw(&user) - } - - } else if topic == "app_push_yf" { - fmt.Println("云浮电厂APP收到mqtt消息") - decodeByte, err := base64.StdEncoding.DecodeString(message) - if err != nil { - fmt.Println(err.Error()) - } - decrptCode := RSA_DecryptsOne(decodeByte, privateKeyPEM) - fmt.Println("解密后的字符串:") - fmt.Println(string(decrptCode)) - fmt.Println("-----userdyw--------") - var user models.Useryf - json.Unmarshal(decrptCode, &user) - fmt.Println(user) - - if models.GetUseryf(&user) { - models.UpdateUseryf(&user) - } else { - models.SaveUseryf(&user) - } - - } else { - result := strings.Split(message, " ") - fmt.Println(result[0]) - fmt.Println(result[1]) - - now := time.Now() - fmt.Println("---------now--------") - fmt.Println(now) - temperature := new(models.Temperature) - temperature.CreateDate = now - temperature.DataDate = now.Format("2006-01-02") - temperature.DataHour = now.Format("2006-01-02 15") - temperature.DataMinute = now.Format("2006-01-02 15:04") - temperature.Humidity = result[0] - temperature.Temperature = result[1] - temperature.Topic = topic - if topic == "WifiSHT/7C87CE9CA4E6/SHT20" { - temperature.LocationDesc = "广东省珠海市高新区唐家湾镇东岸村水风三街28号501" - } - if topic == "WifiSHT/7C87CE9F5CBF/SHT20" { - temperature.LocationDesc = "广东省珠海市金湾区三灶镇百川路1号1栋1单元1508房" - } - if topic == "WifiSHT/4CEBD686B6AA/SHT20" { - temperature.LocationDesc = "广西壮族自治区崇左市天等县天等镇荣华村弄在屯113号" - } - fmt.Println("测温传感器地点:", temperature.LocationDesc) - models.SaveTemperature(temperature) - } - - //uuid := uuid.New() - //models.SaveProduct() - //models.SaveUser(uuid.String()) - //models.SaveOrder() - - //var users []models.User - //var orders []models.Order - //var user models.User - //mydb.DB.Where("name = ?", "wenfei").First(&user) - //fmt.Println(user) - - // 查询多条记录 - //mydb.DB.Find(&users) // 查询所有产品信息 - //mydb.DB.Order("id desc").Limit(2).Offset(0).Find(&users) // 按价格降序排序,取前 10 条记录 - //fmt.Println("users:", users) - - // 查询多条记录 - //mydb.DB.Find(&users) // 查询所有产品信息 - //mydb.DB.Where("id > ? and id < ?", 60,65).Find(&orders) - //fmt.Println("orders:", orders) - - // 原生 SQL 查询 - //var products []models.Product - //mydb.DB.Raw("SELECT * FROM product WHERE price > ?", 1000).Scan(&products) // 查询价格大于 1000 的产品信息 - //fmt.Println("Products:", products) - -} - -var connectHandler01 mqtt.OnConnectHandler = func(client mqtt.Client) { - fmt.Println("Connected") - subTemperature01(client) - subAppPush01(client) - subAppPushDyw01(client) - subAppPushYf01(client) -} - -var connectLostHandler01 mqtt.ConnectionLostHandler = func(client mqtt.Client, err error) { - fmt.Printf("Connect lost: %v", err) -} - -func subTemperature01(client mqtt.Client) { - topic := "WifiSHT/+/SHT20" - token := client.Subscribe(topic, 2, nil) - token.Wait() - fmt.Printf("Subscribed to topic: %s", topic) -} - -func subAppPush01(client mqtt.Client) { - topic := "app_push" - token := client.Subscribe(topic, 2, nil) - token.Wait() - fmt.Printf("Subscribed to topic: %s", topic) -} -func subAppPushDyw01(client mqtt.Client) { - topic := "app_push_dyw" - token := client.Subscribe(topic, 2, nil) - token.Wait() - fmt.Printf("Subscribed to topic: %s", topic) -} -func subAppPushYf01(client mqtt.Client) { - topic := "app_push_yf" - token := client.Subscribe(topic, 2, nil) - token.Wait() - fmt.Printf("Subscribed to topic: %s", topic) -} - -func main() { - - uuid := uuid.New() - fmt.Println("Generated UUID:", uuid) - - var broker = "mqtt.fileview123.com" - var port = 1883 - opts := mqtt.NewClientOptions() - opts.AddBroker(fmt.Sprintf("tcp://%s:%d", broker, port)) - opts.SetClientID(uuid.String()) - opts.SetUsername("admin") - opts.SetPassword("publish452131wW452131wW$") - opts.SetDefaultPublishHandler(messagePubHandler01) - opts.OnConnect = connectHandler01 - opts.OnConnectionLost = connectLostHandler01 - client := mqtt.NewClient(opts) - if token := client.Connect(); token.Wait() && token.Error() != nil { - fmt.Println(token.Error()) - } - - go timing01(client) - - subTemperature01(client) - subAppPush01(client) - subAppPushDyw01(client) - subAppPushYf01(client) - - for true { - time.Sleep(5 * time.Second) - } -} diff --git a/models/Temperature.go b/models/Temperature.go index f992104..dab9c88 100755 --- a/models/Temperature.go +++ b/models/Temperature.go @@ -9,13 +9,13 @@ import ( type Temperature struct { Id int64 `gorm:"primaryKey;autoIncrement"` CreateDate time.Time - DataDate string `gorm:"index:idx_dataDate;index:data_date_location_desc;size:20"` - DataHour string `gorm:"index:idx_dataHour;size:20"` - DataMinute string `gorm:"index:idx_dataMinute;size:20"` - Humidity string `gorm:"size:10"` - LocationDesc string `gorm:"index:idx_locationDesc;index:data_date_location_desc;size:80"` - Temperature string `gorm:"size:10"` - Topic string `gorm:"size:60"` + DataDate string `gorm:"index:idx_dataDate;index:data_date_location_desc;size:20"` + DataHour string `gorm:"index:idx_dataHour;size:20"` + DataMinute string `gorm:"index:idx_dataMinute;size:20"` + Humidity float32 `gorm:"type:float8"` + LocationDesc string `gorm:"index:idx_locationDesc;index:data_date_location_desc;size:80"` + Temperature float32 `gorm:"type:float8"` + Topic string `gorm:"size:60"` } func init() { diff --git a/mqtt/main_mqtt.go b/mqtt/main_mqtt.go index af2c70d..6c9cc6d 100644 --- a/mqtt/main_mqtt.go +++ b/mqtt/main_mqtt.go @@ -15,6 +15,7 @@ import ( "io/ioutil" "log" "os" + "strconv" "strings" "time" ) @@ -258,8 +259,17 @@ MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCYwvInDUICXbmWcOAR5hm86mz7WlKL temperature.DataDate = now.Format("2006-01-02") temperature.DataHour = now.Format("2006-01-02 15") temperature.DataMinute = now.Format("2006-01-02 15:04") - temperature.Humidity = result[0] - temperature.Temperature = result[1] + //temperature.Humidity = result[0] + //temperature.Temperature = result[1] + // ParseFloat 返回 float64,需要显式转换为 float32 + f1, err1 := strconv.ParseFloat(result[0], 32) + f2, err2 := strconv.ParseFloat(result[1], 32) + if err1 == nil && err2 == nil { + // 转换为 float32 + temperature.Humidity = float32(f1) + temperature.Temperature = float32(f2) + } + temperature.Topic = topic if topic == "WifiSHT/7C87CE9CA4E6/SHT20" { temperature.LocationDesc = "广东省珠海市高新区唐家湾镇东岸村水风三街28号501" @@ -339,7 +349,12 @@ func subAppPushDyw(client mqtt.Client) { token.Wait() fmt.Printf("Subscribed to topic: %s", topic) } - +func subAppPushYf(client mqtt.Client) { + topic := "app_push_yf" + token := client.Subscribe(topic, 2, nil) + token.Wait() + fmt.Printf("Subscribed to topic: %s", topic) +} func publish(client mqtt.Client) { num := 999999000000000000 for i := 0; i < num; i++ { @@ -351,7 +366,7 @@ func publish(client mqtt.Client) { } } -func main() { +func ain() { uuid := uuid.New() fmt.Println("Generated UUID:", uuid) @@ -379,6 +394,7 @@ func main() { subTemperature(client) subAppPush(client) subAppPushDyw(client) + subAppPushYf(client) //publish(client) for true { diff --git a/mydb/initialize.go b/mydb/initialize.go index 445794e..abf83eb 100755 --- a/mydb/initialize.go +++ b/mydb/initialize.go @@ -44,13 +44,18 @@ func initDatabase() { //postgres //3.30: 10.19.1.219 3.29:10.19.1.154 localhost //dsn := "host=localhost user=postgres password=452131wW dbname=postgres port=5432 sslmode=disable" - dsn := "host=192.168.2.25 user=postgres password=452131wW dbname=weather port=5432 sslmode=disable" + dsn := "host=localhost user=postgres password=452131wW dbname=appserver port=5432 sslmode=disable" + //dsn := "host=192.168.2.25 user=postgres password=452131wW dbname=weather port=5432 sslmode=disable" + //dsn := "host=43.139.89.198 user=postgres password=452131wW dbname=temperature port=54325 sslmode=disable" + //dsn := "host=43.139.89.198 user=postgres password=452131wW dbname=postgres port=54325 sslmode=disable" + //dsn := "host=43.139.89.198 user=postgres password=452131wW dbname=appserver port=54325 sslmode=disable" db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{}) //sqlserver //dsn := "sqlserver://sa:452131wW@192.168.3.29:1433?database=go_mqtt" //db, err := gorm.Open(sqlserver.Open(dsn), &gorm.Config{}) + fmt.Println("dsn:" + dsn) if err != nil { fmt.Println("failed to connect database") } @@ -64,7 +69,7 @@ func initDatabase() { // SetMaxIdleConns 用于设置连接池中空闲连接的最大数量。 sqlDB.SetMaxIdleConns(5) // SetMaxOpenConns 设置打开数据库连接的最大数量。 - sqlDB.SetMaxOpenConns(20) + sqlDB.SetMaxOpenConns(10) // SetConnMaxLifetime 设置了连接可复用的最大时间。 sqlDB.SetConnMaxLifetime(time.Minute * 5) // 连接最大生命周期