diff --git a/xaal.go b/xaal.go
index 17f68a286ffc84e33c4e49516ef6a68711fe9f7f..a3bc43770290bc001b7bf6a72365faecd053b36f 100644
--- a/xaal.go
+++ b/xaal.go
@@ -53,6 +53,14 @@ type ButtonRemote struct {
 	XAALDevice
 }
 
+type Motion struct {
+	XAALDevice
+}
+
+type LuxMeter struct {
+	XAALDevice
+}
+
 type XAALDeviceInterface interface {
 	update(map[string]interface{})
 	GetXAALDevice() *xaal.Device
@@ -445,3 +453,36 @@ func (dev *ButtonRemote) getButtons(xaal.MessageBody) *xaal.MessageBody {
 	}
 	return &body
 }
+
+// =============================================================================
+// Motion
+// =============================================================================
+func NewMotion(addr uuid.UUID, zDev *Z2MDevice, exp *Expose) XAALDeviceInterface {
+	dev := &Motion{XAALDevice{schemas.NewMotion(addr), zDev, exp}}
+	dev.setup()
+	return dev
+}
+
+func (dev *Motion) update(payload map[string]interface{}) {
+	value, exists := payload[dev.Expose.Name].(bool)
+	if exists {
+		dev.GetAttribute("presence").SetValue(value)
+	}
+}
+
+// =============================================================================
+// LuxMeter
+// =============================================================================
+func NewLuxMeter(addr uuid.UUID, zDev *Z2MDevice, exp *Expose) XAALDeviceInterface {
+	dev := &LuxMeter{XAALDevice{schemas.NewLuxmeter(addr), zDev, exp}}
+	dev.GetAttribute("illuminance").Value = 0 // override
+	dev.setup()
+	return dev
+}
+
+func (dev *LuxMeter) update(payload map[string]interface{}) {
+	lux, err := convertToInt(payload[dev.Expose.Name])
+	if err == nil {
+		dev.GetAttribute("illuminance").SetValue(lux)
+	}
+}
diff --git a/z2m.go b/z2m.go
index 86926fe0836e6f5cb330a814fa90b3985bc8fdfe..7fcbb3aaca384ba86a332005e75ce2c7af457021 100644
--- a/z2m.go
+++ b/z2m.go
@@ -111,6 +111,8 @@ func (zDev *Z2MDevice) FindXAALDevices(gw *Gateway) {
 			"action":      NewButtonRemote,
 			"switch":      NewPowerRelay,
 			"light":       NewLamp,
+			"occupancy":   NewMotion,
+			"illuminance": NewLuxMeter,
 		}
 
 		// Search a matching expose name