Skip to content

Commit

Permalink
fix brightess for z2m
Browse files Browse the repository at this point in the history
  • Loading branch information
splattner committed Jun 15, 2024
1 parent 2a75543 commit c44b540
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 30 deletions.
8 changes: 5 additions & 3 deletions pkg/discovery/zigbee2mqtt.go
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ type Z2MDeviceData struct {
Sensitivity *string `json:"sensitivity,omitempty"`
Tamper *bool `json:"tamper,omitempty"`
KeepTime *int `json:"keep_time,omitempty"`
Brightness *int `json:"brightness,omitempty"`
Brightness *float32 `json:"brightness,omitempty"`
PowerOnBehaviour *string `json:"power_on_behaviour,omitempty"`
State *string `json:"state,omitempty"`
UpdateAvailable *bool `json:"update_available,omitempty"`
Expand Down Expand Up @@ -302,7 +302,8 @@ func (e *Zigbee2MQTTDevice) mqttCallback() mqtt.MessageHandler {
}

if deviceData.Brightness != nil {
e.originDevice.UpdateValue(float32(*deviceData.Brightness), "brightness", vdcdapi.BrightnessType)
b := *deviceData.Brightness / 254 * 100
e.originDevice.UpdateValue(float32(b), "brightness", vdcdapi.BrightnessType)
}

if deviceData.State != nil {
Expand Down Expand Up @@ -368,7 +369,8 @@ func (e *Zigbee2MQTTDevice) TurnOff() {
}

func (e *Zigbee2MQTTDevice) SetBrightness(brightness float32) {
e.publishMqttCommand("zigbee2mqtt/"+e.Topic+"/set/brightness", brightness)
b := brightness / 100 * 254
e.publishMqttCommand("zigbee2mqtt/"+e.Topic+"/set/brightness", b)
}

func (e *Zigbee2MQTTDevice) SetColorTemp(ct float32) {
Expand Down
38 changes: 19 additions & 19 deletions pkg/vdcdapi/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,14 +50,14 @@ func (e *Client) Connect() {
var conn net.Conn
var err error

log.Infof("Trying to connect to vcdc: %s\n", connString)
log.WithField("vdcd Host", connString).Info("Trying to connect to vdcd")

for i := 0; i < e.dialRetry; i++ {

conn, err = net.Dial("tcp", connString)

if err != nil {
log.Warn("Dial failed:", err.Error())
log.WithError(err).Warn("Dial failed")
time.Sleep(time.Second)
} else {
break
Expand All @@ -66,27 +66,27 @@ func (e *Client) Connect() {
}

if conn == nil {
log.Errorf("Failed to connect to vdcd: %s\n", connString)
log.WithField("vdcd Host", connString).Error("Failed to connect to vdcd")
os.Exit(1)
}

log.Infof("Connected to vdcd: %s", connString)
log.WithField("vdcd Host", connString).Info("Connected to vdcd")

e.conn = conn
e.r = bufio.NewReader(e.conn)
e.w = bufio.NewWriter(e.conn)
}

func (e *Client) Close() {
log.Infoln("Closing connection from vdcd")
log.Info("Closing connection from vdcd")
e.sendByeMessage()
e.conn.Close()
log.Infoln("Connection from vdcd closed")
log.Info("Connection from vdcd closed")
}

func (e *Client) Listen() {

log.Infoln("Start listening for vdcd messages")
log.Info("Start listening for vdcd messages")

e.interrupt = make(chan os.Signal) // Channel to listen for interrupt signal to terminate gracefully
signal.Notify(e.interrupt, os.Interrupt) // Notify the interrupt channel for SIGINT
Expand All @@ -95,7 +95,7 @@ func (e *Client) Listen() {

go e.Receive()

log.Debugln("Start listening main loop")
log.Debug("Start listening main loop")
for {
select {
case receiveMessage := <-e.receiveChannel:
Expand All @@ -104,13 +104,13 @@ func (e *Client) Listen() {
err := json.Unmarshal([]byte(receiveMessage), &msg)

if err != nil {
log.Errorln("Json Unmarshal failed:", err.Error())
log.WithError(err).Error("Json Unmarshal failed")
}

e.processMessage(&msg)

case <-e.interrupt:
log.Debugln("Interrupt Signal received. Returning from listening main loop")
log.Debug("Interrupt Signal received. Returning from listening main loop")
return

}
Expand All @@ -120,15 +120,15 @@ func (e *Client) Listen() {

func (e *Client) Receive() {

log.Debugln("Starting receive loop for messages from vdcd")
log.Debug("Starting receive loop for messages from vdcd")

for {

log.Debugln("Waiting for new vdcd message")
log.Debug("Waiting for new vdcd message")
line, err := e.r.ReadString('\n')

if err != nil {
log.Errorln("Failed to read: ", err.Error())
log.WithError(err).Error("Failed to read")

if err == io.EOF {
// try to reconnect
Expand All @@ -137,7 +137,7 @@ func (e *Client) Receive() {
}
return
}
log.Debugln("Message received, sending to receiveChannel")
log.Debug("Message received, sending to receiveChannel")

e.receiveChannel <- line
}
Expand All @@ -155,7 +155,7 @@ func (e *Client) Initialize() {
}

func (e *Client) sentInitMessage() {
log.Debugln("Sending Init Message")
log.Debug("Sending Init Message")

// Only init devices that are not already init
var deviceForInit []*Device
Expand Down Expand Up @@ -194,7 +194,7 @@ func (e *Client) sentInitMessage() {
initMessage := DeviceInitMessage{GenericInitMessageHeader{GenericMessageHeader{MessageType: "init"}, "json"}, *deviceForInit[0]}
e.sendMessage(initMessage)
} else {
log.Warnln("Cannot initialize, no devices added")
log.Warn("Cannot initialize, no devices added")
return
}
}
Expand Down Expand Up @@ -299,7 +299,7 @@ func (e *Client) sendMessage(message interface{}) {
//log.Debugf("Send Message. Raw: %s", string(payload))

if err != nil {
log.Errorln("Failed to Marshall object")
log.WithError(err).Error("Failed to Marshall object")
return
}

Expand All @@ -318,7 +318,7 @@ func (e *Client) sendMessage(message interface{}) {
e.Unlock()

if err != nil {
log.Errorln("Send Message failed:", err.Error())
log.WithError(err).Error("Send Message failed")
return
}

Expand All @@ -339,7 +339,7 @@ func (e *Client) sendChannelMessage(value float32, tag string, channelName strin

payload, err := json.Marshal(channelMessage)
if err != nil {
log.Errorln("Failed to Marshall object", err.Error())
log.WithError(err).Error("Failed to Marshall object")
return
}

Expand Down
16 changes: 8 additions & 8 deletions vdcdbridge.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ func (e *VcdcBridge) NewVcdcBrige(config VcdcBridgeConfig) {

// Configure MQTT Client if enabled
if config.mqttDiscoveryEnabled {
log.Infof("Create MQTT Client for Host: %s\n", config.mqttHost)
log.WithField("Host", config.mqttHost).Info("Create MQTT Client")

mqttBroker := fmt.Sprintf("tcp://%s", config.mqttHost)
opts := mqtt.NewClientOptions().AddBroker(mqttBroker).SetClientID("vdcd_client")
Expand All @@ -74,21 +74,21 @@ func (e *VcdcBridge) NewVcdcBrige(config VcdcBridgeConfig) {
go e.startDiscovery()
go e.loopVcdcClient()

log.Debugln("Waiting for Waitgroup")
log.Debug("Waiting for Waitgroup")
e.wg.Wait()
log.Debugln("Waitgroup finished")
log.Debug("Waitgroup finished")
}

func (e *VcdcBridge) startDiscovery() {
log.Debugln("Start startDiscovery")

if e.config.mqttDiscoveryEnabled {

log.Infof("MQTT connect")
log.Info("MQTT connect")

// Connect to MQTT Broker
if token := e.mqttClient.Connect(); token.Wait() && token.Error() != nil {
log.Error("MQTT connect failed: ", token.Error())
log.WithError(token.Error()).Error("MQTT connect failed")
}

// Tasmota Device Discovery
Expand Down Expand Up @@ -119,15 +119,15 @@ func (e *VcdcBridge) startDiscovery() {
deconzDiscovery.StartDiscovery(e.vdcdClient, e.config.deconzHost, e.config.deconzPort, e.config.deconcWebSockerPort, e.config.deconzApi, e.config.deconzEnableGroups)
}

log.Debugln("Calling Waitgroup done for startDiscovery")
log.Debug("Calling Waitgroup done for startDiscovery")
e.wg.Done()

}

func (e *VcdcBridge) loopVcdcClient() {
log.Debugln("Start loopVcdcClient")
log.Debug("Start loopVcdcClient")
e.vdcdClient.Listen()

log.Debugln("Calling Waitgroup done for loopVcdcClient")
log.Debug("Calling Waitgroup done for loopVcdcClient")
e.wg.Done()
}

0 comments on commit c44b540

Please sign in to comment.