diff --git a/scripts/ensibs_alarm_SDB_haut.py b/scripts/ensibs_alarm_SDB_haut.py
new file mode 100644
index 0000000000000000000000000000000000000000..5c5d3fdd160bf35203406d799f5b91c7fe676a8b
--- /dev/null
+++ b/scripts/ensibs_alarm_SDB_haut.py
@@ -0,0 +1,162 @@
+from xaal.lib import Device,Engine,tools,Message,helpers
+from xaal.monitor import Monitor,Notification
+import platform
+import time
+import logging
+from enum import Enum
+
+
+DELAY = 30
+
+ADDR     = 'aa4d1cbc-92af-11e8-80cd-408d5c18c801'
+PKG_NAME = 'scenario_ensibs_alerte'
+
+DOOR     = 'ce91c3a6-20b1-11e9-a250-a4badbf92500'
+MVT      = '93e09033-708e-11e8-956e-00fec8f7138c'
+LIGHTS   = ['93e09007-708e-11e8-956e-00fec8f7138c','93e09008-708e-11e8-956e-00fec8f7138c']
+
+BULLET   = ['6eb64b73-6e51-11e9-8f96-00fec8f7138c']
+BLINKS   = ['aa8cd2e4-8c5d-11e9-b0ba-b827ebe99201','980a639c-20b1-11e9-8d70-a4badbf92500']
+SIREN    = ['980a639c-20b1-11e9-8d70-a4badbf92501',]
+
+
+MONITORING_DEVICES = [DOOR,LIGHTS,MVT]
+
+class States(Enum):
+    free       = 'free'
+    busy       = 'busy'
+    fail       = 'fail'
+    no_motion  = 'no_motion'
+    alarm      = 'alarm'
+
+
+class Devices:
+    def __init__(self):
+        self.door     = None
+        self.light0    = None
+        self.light1    = None        
+        self.motion   = None
+
+    @property
+    def list(self):
+        return [self.door,self.light0,self.light1,self.motion]
+
+    def check(self):
+        for k in self.list:
+            if k == None: return False
+            if len(k.attributes.keys()) == 0: return False
+        return True
+    
+    def used(self,dev):
+        for k in self.list:
+            if k==dev: return True
+        return False
+
+logger = logging.getLogger(PKG_NAME)
+device = None
+devices = Devices()
+state = States.fail
+motion_timer = 0 
+
+def send(targets,action,body=None):
+    global device
+    device.engine.send_request(device,targets,action,body)
+
+def alert():
+    logger.warning('WARNING !!!!')
+    send(BULLET,'notify',{'title':'Alarme SDB haut !!','msg':"Personne inerte ou lumière oubliée"})
+    send(BLINKS,'blink')
+    send(SIREN,'play')
+
+
+def update_state():
+    global state,device
+    device.attributes['state'] = state.value
+
+
+def is_light():
+    if devices.light0.attributes['light']: return True
+    if devices.light1.attributes['light']: return True
+    return False
+
+def on_event(event,dev):
+    global state,motion_timer
+    if event == Notification.new_device:
+        if dev.address == DOOR  : devices.door   = dev
+        if dev.address == MVT   : devices.motion = dev
+        if dev.address == LIGHTS[0] : devices.light0  = dev
+        if dev.address == LIGHTS[1] : devices.light1  = dev
+
+        
+    if event == Notification.attribute_change:
+        if devices.check() == False:
+            state = States.fail
+            update_state()
+            return
+
+        if state == States.fail:
+            state = States.free
+            update_state()
+
+        logger.info(dev.attributes)
+        if dev == devices.door:
+            # close the door
+            if dev.attributes['position'] == False:
+                # mvt + light => busy 
+                if state == States.free and devices.motion.attributes['presence'] == True and is_light() == True:
+                    state = States.busy
+                # no light => free
+                if is_light() == False:
+                    state = States.free
+            else:
+                # somebody open the door
+                if state in [States.busy,States.alarm]:
+                    state = States.free
+
+        if dev == devices.motion:
+            # no motion while busy => start timer
+            if dev.attributes['presence']==False and state == States.busy:
+                motion_timer = time.time()
+                state = States.no_motion
+            # motion while state no_motion => just busy
+            if dev.attributes['presence'] == True and state == States.no_motion:
+                state = States.busy
+        update_state()
+
+
+def update():
+    global state,motion_timer,device
+    now = time.time()
+    if state == States.no_motion:
+        if now > (motion_timer + DELAY):
+            logger.warning('ALARME !!!')
+            alert()
+            state = States.alarm
+            device.attributes['state'] = state.value
+
+
+def filter_msg(msg):
+    if msg.source in MONITORING_DEVICES:
+        return True
+    return False
+
+
+def main():
+    global mon,device
+    device = Device('scenario.basic',ADDR)
+    device.new_attribute('state')
+    device.info = '%s@%s' % (PKG_NAME,platform.node())
+    engine = Engine()
+    engine.add_device(device)
+    engine.add_timer(update,1)
+    mon = Monitor(device,filter_func = filter_msg)
+    mon.subscribe(on_event)
+    engine.run()
+
+if __name__ == '__main__':
+    try:
+        helpers.setup_console_logger()
+        main()
+    except KeyboardInterrupt:
+        print('Bye bye')
+        
diff --git a/scripts/ensibs_alarm_WC_haut.py b/scripts/ensibs_alarm_WC_haut.py
new file mode 100644
index 0000000000000000000000000000000000000000..054392eae78bef5c0f7e9499dc79bfbbc7867e3a
--- /dev/null
+++ b/scripts/ensibs_alarm_WC_haut.py
@@ -0,0 +1,154 @@
+from xaal.lib import Device,Engine,tools,Message,helpers
+from xaal.monitor import Monitor,Notification
+import platform
+import time
+import logging
+from enum import Enum
+
+
+DELAY = 30
+
+ADDR = 'aa4d1cbc-92af-11e8-80cd-408d5c18c800'
+PKG_NAME = 'scenario_ensibs_alerte'
+
+DOOR   = 'cbdb198c-20b1-11e9-a250-a4badbf92500'
+MVT    = '93e09031-708e-11e8-956e-00fec8f7138c'
+LIGHT  = '93e09005-708e-11e8-956e-00fec8f7138c'
+
+BULLET= ['6eb64b73-6e51-11e9-8f96-00fec8f7138c']
+BLINKS = ['aa8cd2e4-8c5d-11e9-b0ba-b827ebe99201','980a639c-20b1-11e9-8d70-a4badbf92500']
+SIREN = ['980a639c-20b1-11e9-8d70-a4badbf92501',]
+
+
+MONITORING_DEVICES = [DOOR,LIGHT,MVT]
+
+class States(Enum):
+    free       = 'free'
+    busy       = 'busy'
+    fail       = 'fail'
+    no_motion  = 'no_motion'
+    alarm      = 'alarm'
+
+
+class Devices:
+    def __init__(self):
+        self.door = None
+        self.light = None
+        self.motion = None
+
+    @property
+    def list(self):
+        return [self.door,self.light,self.motion]
+
+    def check(self):
+        for k in self.list:
+            if k == None: return False
+            if len(k.attributes.keys()) == 0: return False
+        return True
+    
+    def used(self,dev):
+        for k in self.list:
+            if k==dev: return True
+        return False
+
+logger = logging.getLogger(PKG_NAME)
+device = None
+devices = Devices()
+state = States.fail
+motion_timer = 0 
+
+def send(targets,action,body=None):
+    global device
+    device.engine.send_request(device,targets,action,body)
+
+def alert():
+    logger.warning('WARNING !!!!')
+    send(BULLET,'notify',{'title':'Alarme WC haut !!','msg':"Personne inerte ou lumière oubliée"})
+    send(BLINKS,'blink')
+    send(SIREN,'play')
+
+
+def update_state():
+    global state,device
+    device.attributes['state'] = state.value
+
+
+def on_event(event,dev):
+    global state,motion_timer
+    if event == Notification.new_device:
+        if dev.address == DOOR: devices.door   = dev
+        if dev.address == MVT : devices.motion = dev
+        if dev.address == LIGHT: devices.light = dev
+
+    if event == Notification.attribute_change:
+        if devices.check() == False:
+            state = States.fail
+            update_state()
+            return
+
+        if state == States.fail:
+            state = States.free
+            update_state()
+
+        logger.info(dev.attributes)
+        if dev == devices.door:
+            # close the door
+            if dev.attributes['position'] == False:
+                # mvt + light => busy 
+                if state == States.free and devices.motion.attributes['presence'] == True and devices.light.attributes['light'] == True:
+                    state = States.busy
+                # no light => free
+                if devices.light.attributes['light'] == False:
+                    state = States.free
+            else:
+                # somebody open the door
+                if state in [States.busy,States.alarm]:
+                    state = States.free
+
+        if dev == devices.motion:
+            # no motion while busy => start timer
+            if dev.attributes['presence']==False and state == States.busy:
+                motion_timer = time.time()
+                state = States.no_motion
+            # motion while state no_motion => just busy
+            if dev.attributes['presence'] == True and state == States.no_motion:
+                state = States.busy
+        update_state()
+
+
+def update():
+    global state,motion_timer,device
+    now = time.time()
+    if state == States.no_motion:
+        if now > (motion_timer + DELAY):
+            logger.warning('ALARME !!!')
+            alert()
+            state = States.alarm
+            device.attributes['state'] = state.value
+
+
+def filter_msg(msg):
+    if msg.source in MONITORING_DEVICES:
+        return True
+    return False
+
+
+def main():
+    global mon,device
+    device = Device('scenario.basic',ADDR)
+    device.new_attribute('state')
+    device.info = '%s@%s' % (PKG_NAME,platform.node())
+    engine = Engine()
+    engine.add_device(device)
+    engine.add_timer(update,1)
+    mon = Monitor(device,filter_func = filter_msg)
+    mon.subscribe(on_event)
+    engine.run()
+
+if __name__ == '__main__':
+    try:
+        helpers.setup_console_logger()
+        main()
+    except KeyboardInterrupt:
+        print('Bye bye')
+