mirror of
https://github.com/MickMake/GoSungrow.git
synced 2025-03-23 16:11:43 +01:00
132 lines
4.5 KiB
Go
132 lines
4.5 KiB
Go
package mmHa
|
|
|
|
import (
|
|
"encoding/json"
|
|
"github.com/MickMake/GoUnify/Only"
|
|
"github.com/MickMake/GoUnify/cmdLog"
|
|
)
|
|
|
|
|
|
type Config struct {
|
|
Entry string `json:"~,omitempty" required:"false"`
|
|
Name string `json:"name,omitempty" required:"false"`
|
|
UniqueId string `json:"unique_id,omitempty" required:"false"`
|
|
StateTopic string `json:"state_topic,omitempty" required:"true"`
|
|
DeviceConfig DeviceConfig `json:"device,omitempty" required:"false"`
|
|
}
|
|
type DeviceConfig struct {
|
|
Identifiers []string `json:"identifiers,omitempty" required:"false"`
|
|
SwVersion string `json:"sw_version,omitempty" required:"false"`
|
|
Name string `json:"name,omitempty" required:"false"`
|
|
Manufacturer string `json:"manufacturer,omitempty" required:"false"`
|
|
Model string `json:"model,omitempty" required:"false"`
|
|
}
|
|
|
|
func (c *Config) Json() string {
|
|
j, _ := json.Marshal(*c)
|
|
return string(j)
|
|
}
|
|
|
|
|
|
type Device struct {
|
|
ConfigurationUrl string `json:"configuration_url,omitempty" required:"false"`
|
|
Connections [][]string `json:"connections,omitempty" required:"false"`
|
|
Identifiers []string `json:"identifiers,omitempty" required:"false"`
|
|
Manufacturer string `json:"manufacturer,omitempty" required:"false"`
|
|
Model string `json:"model,omitempty" required:"false"`
|
|
Name string `json:"name,omitempty" required:"false"`
|
|
SuggestedArea string `json:"suggested_area,omitempty" required:"false"`
|
|
SwVersion string `json:"sw_version,omitempty" required:"false"`
|
|
ViaDevice string `json:"via_device,omitempty" required:"false"`
|
|
}
|
|
|
|
func (m *Mqtt) NewDevice(config EntityConfig) (bool, Device) {
|
|
var ok bool
|
|
var ret Device
|
|
|
|
for range Only.Once {
|
|
var parent Device
|
|
if parent, ok = m.MqttDevices[config.ParentName]; !ok {
|
|
cmdLog.LogPrintDate("Unknown parentDevice: %s - will ignore.\n", config.ParentName)
|
|
break
|
|
}
|
|
|
|
manu := parent.Manufacturer
|
|
if manu == "" {
|
|
manu = m.DeviceName
|
|
}
|
|
modl := parent.Model
|
|
if modl == "" {
|
|
modl = m.DeviceName
|
|
}
|
|
|
|
ret = Device {
|
|
ConfigurationUrl: parent.ConfigurationUrl,
|
|
Connections: [][]string {
|
|
{ m.EntityPrefix, JoinStringsForId(m.EntityPrefix, config.ParentName) },
|
|
{ JoinStringsForId(m.EntityPrefix, config.ParentName), JoinStringsForId(m.EntityPrefix, config.ParentId) },
|
|
},
|
|
Identifiers: []string{ JoinStringsForId(m.EntityPrefix, config.ParentId) },
|
|
Manufacturer: manu,
|
|
Model: modl,
|
|
Name: JoinStrings(m.EntityPrefix, config.ParentName, "-", parent.Name),
|
|
SuggestedArea: parent.SuggestedArea,
|
|
SwVersion: parent.SwVersion,
|
|
ViaDevice: parent.ViaDevice,
|
|
}
|
|
ok = true
|
|
}
|
|
|
|
return ok, ret
|
|
|
|
}
|
|
|
|
// func (d *Device) NewDevice(config EntityConfig) Device {
|
|
// var ret Device
|
|
//
|
|
// for range Only.Once {
|
|
// ret = Device{
|
|
// ConfigurationUrl: d.ConfigurationUrl,
|
|
// Connections: [][]string {
|
|
// { d.Name, JoinStringsForId(d.Name, config.ParentName) },
|
|
// { JoinStringsForId(d.Name, config.ParentName), JoinStringsForId(d.Name, config.ParentId) },
|
|
// },
|
|
// Identifiers: []string{ JoinStringsForId(d.Name, config.ParentId) },
|
|
// Manufacturer: d.Manufacturer,
|
|
// Model: d.Model,
|
|
// Name: JoinStrings(d.Name, config.ParentName),
|
|
// SuggestedArea: d.SuggestedArea,
|
|
// SwVersion: d.SwVersion,
|
|
// ViaDevice: d.ViaDevice,
|
|
// }
|
|
//
|
|
// // // device.Name = JoinStrings(m.Device.Name, config.ParentId)
|
|
// // device.Name = JoinStrings(m.Device.Name, config.ParentName) // , config.ValueName)
|
|
// // device.Connections = [][]string {
|
|
// // { m.Device.Name, JoinStringsForId(m.Device.Name, config.ParentName) },
|
|
// // { JoinStringsForId(m.Device.Name, config.ParentName), JoinStringsForId(m.Device.Name, config.ParentId) },
|
|
// // // { JoinStringsForId(m.Device.Name, config.ParentId), JoinStringsForId(m.Device.Name, config.ParentId, config.Name) },
|
|
// // }
|
|
// // // device.Identifiers = []string{ JoinStringsForId(m.Device.Name, config.ParentId, config.Name) }
|
|
// // device.Identifiers = []string{ JoinStringsForId(m.Device.Name, config.ParentId) }
|
|
// }
|
|
//
|
|
// return ret
|
|
// }
|
|
|
|
// {
|
|
// "device": {
|
|
// "identifiers": [
|
|
// "sungrow"
|
|
// ],
|
|
// "manufacturer": "MickMake",
|
|
// "model": "GoLang",
|
|
// "name": "sungrow",
|
|
// "sw_version": "sungrow https://github.com/MickMake/GoSungrow"
|
|
// },
|
|
// "name": "sungrow",
|
|
// "stat_t": "~/state",
|
|
// "unique_id": "sungrow",
|
|
// "~": "homeassistant/binary_sensor/SunGrow"
|
|
// }
|