diff --git a/xaal.go b/xaal.go
index 9f3ade606f0889707ba623fd9653d89a2ba84833..86d432040ecd60764e954919bb54f9bbf4c2dce6 100644
--- a/xaal.go
+++ b/xaal.go
@@ -114,8 +114,8 @@ func NewThermometer(addr uuid.UUID, zDev *Z2MDevice, exp *Expose) XAALDeviceInte
 }
 
 func (dev *Thermometer) update(payload map[string]interface{}) {
-	value, exists := payload[dev.Expose.Name].(float64)
-	if exists {
+	value, err := convertToFloat64(payload[dev.Expose.Name])
+	if err == nil {
 		dev.GetAttribute("temperature").SetValue(value)
 	}
 }
@@ -128,8 +128,8 @@ func NewHygrometer(addr uuid.UUID, zDev *Z2MDevice, exp *Expose) XAALDeviceInter
 }
 
 func (dev *Hygrometer) update(payload map[string]interface{}) {
-	value, exists := payload[dev.Expose.Name].(float64)
-	if exists {
+	value, err := convertToFloat64(payload[dev.Expose.Name])
+	if err == nil {
 		dev.GetAttribute("humidity").SetValue(value)
 	}
 }
@@ -167,8 +167,8 @@ func NewBattery(addr uuid.UUID, zDev *Z2MDevice, exp *Expose) XAALDeviceInterfac
 }
 
 func (dev *Battery) update(payload map[string]interface{}) {
-	value, exists := payload[dev.Expose.Name].(float64)
-	if exists {
+	value, err := convertToFloat64(payload[dev.Expose.Name])
+	if err == nil {
 		dev.GetAttribute("level").SetValue(value)
 	}
 }
@@ -232,13 +232,13 @@ func NewPowerMeter(addr uuid.UUID, zDev *Z2MDevice, exp *Expose) XAALDeviceInter
 
 func (dev *PowerMeter) update(payload map[string]interface{}) {
 	// power
-	value, exists := payload[dev.Expose.Name].(float64)
-	if exists {
+	value, err := convertToFloat64(payload[dev.Expose.Name])
+	if err == nil {
 		dev.GetAttribute("power").SetValue(value)
 	}
 	// energy
-	value, exists = payload["energy"].(float64)
-	if exists {
+	value, err = convertToFloat64(payload["energy"])
+	if err == nil {
 		dev.GetAttribute("energy").SetValue(value)
 	}
 }