Exemple #1
0
def build_device_inventory():
    global in_mem_relsens, in_mem_devices, new_devices
    try:
        new_devices = {
        }  # reset this data structure also: to start from scratch
        #dprint ('\nbuilding [enabled] in-memory devices..')
        in_mem_devices = r.dump_active_device_spec_tree()
        if (len(in_mem_devices) > 0):
            print("\nactive in-memory devices:")
            print(in_mem_devices)
        else:
            print('Error: Could not build in-memory devices')
            return False
        #dprint ('\nbuilding [enabled] in-memory relsens..')
        in_mem_relsens = r.get_active_relsen_tree()
        if (len(in_mem_relsens) > 0):
            print("\nactive in-memory relsens:")
            print(in_mem_relsens)
            return True
        else:
            print('Error: Could not build in-memory relsons')
            return False
    except Exception as e:
        print('* EXCEPTION 1: ', str(e))
    return False
Exemple #2
0
def simul_update_device():
    dev = m.Device.query.filter_by(device_id='labs1').first()
    if (not dev):
        return {'error': 'labs1 : invalid device_id'}
    en = not (dev.enabled)  # toggle the current status
    jupdate = {'device_id': 'labs1', 'enabled': en}
    r.update_device(jupdate)
    return {'result': 'device labs1 updated'}
Exemple #3
0
def initialize_all():  # this is called from __init__.py at startup
    print('\n+ in the application initialization block..')
    r.build_constant_lists()
    build_device_inventory()
    build_initial_status()  # to correctly light the buttons initially
    start_daemon()
    #sleep(5)  # this does not help delay the MQTT subsciption
    subscribe_mqtt()  # subscribing here is a safety net
Exemple #4
0
def simul_update_relsen():
    rs = m.Relsen.query.filter_by (device_id='labs1', relsen_id='POWER1').first()
    if (not rs):
        return {'error' : 'invalid device_id or relsen_id'}
    jupdate = {
        'device_id':'labs1', 'relsen_id':'POWER2',
        'relsen_name':'Table fan', 'relsen_type': 'Fan',
        'room_name':'Grandpa\'s room', 'room_type': 'Dining room', 'group_name':'Basement',
        'schedule': [["10:00","11:30"],["17:20","18:45"]], 
        'repeat':False
    }
    r.update_relsen (jupdate)
    return {'result' : 'relsen {}/{} updated'.format(jupdate['device_id'], jupdate['relsen_id'])}    
Exemple #5
0
def simul_onboard_device():
    jnew_device = {
        'device_id': 'intof_A9417E',
        'relsen_list': ['POWER1', 'POWER2', 'Sensor']
    }
    if r.onboard_device(jnew_device):
        return {'result': 'device onboarded successfully'}
    return {'error': 'failed to onboard device'}
Exemple #6
0
def simul_onboard_device():
    jnew_device = {
        'device_id': 'LatestDevice',
        'relsen_list': ['Relay1', 'Relay2', 'Sensor']
    }
    if r.onboard_device(jnew_device):
        return {'result': 'device onboarded successfully'}
    return {'error': 'failed to onboard device'}
Exemple #7
0
def simul_bulk_onboard():
    jnew_devices = {
        'NewDevice1': ['Rel1', 'Rel2'],
        'NewDevice2': ['Relay8'],
        'NewDevice3': ['Rels1', 'Rels2', 'Sensor1']
    }
    if r.bulk_onboard_devices(jnew_devices):
        return {'result': 'all devices onboarded successfully'}
    return {'error': 'failed to onboard at least one device'}
Exemple #8
0
def simul_update_relsen():
    rs = m.Relsen.query.filter_by(device_id='labs1',
                                  relsen_id='POWER1').first()
    if (not rs):
        return {'error': 'invalid device_id or relsen_id'}
    jupdate = {
        'device_id': 'labs1',
        'relsen_id': 'POWER1',
        'relsen_name': 'Table fan',
        'relsen_type': 'Fan',
        'room_name': 'Grandpa\'s room',
        'room_type': 'Dining room',
        'group_name': 'Basement',
        'schedule': json.dumps({"schedule": [[10.0, 11.30]]}),
        'repeat': False
    }
    r.update_relsen(jupdate)
    return {'result': 'relsen labs1.POWER1 updated'}
Exemple #9
0
def simul_bulk_onboard():
    jnew_devices = {
        'intof_EE487C': ['POWER1', 'POWER2', 'SENSOR'],
        'intof_FF432D': ['POWER1'],
        'intof_AB9A82': ['POWER1', 'POWER2', 'POWER3', 'POWER4']
    }
    if r.bulk_onboard_devices(jnew_devices):
        return {'result': 'all devices onboarded successfully'}
    return {'error': 'failed to onboard at least one device'}
Exemple #10
0
def auto_onboard_devices():
    print('\nAuto-onboarding all newly discovered devices..')
    if new_devices is None or len(new_devices) == 0:
        return {
            'result': False,
            'error': 'No new devices; please call discover/devices first'
        }
    if r.bulk_onboard_devices(new_devices):
        return {'result': True, 'msg': 'all devices onboarded successfully'}
    return {'result': False, 'error': 'failed to onboard at least one device'}
Exemple #11
0
def simul_onboard_device():
    jnew_device = {
        'device_id': 'intof_DD417E',
        'relsen_list': ['POWER1', 'POWER2', 'SENSOR']
    }
    if r.onboard_device(
            jnew_device
    ):  # TODO: you need to add it to in-memory structures also.
        return {'result': 'device onboarded successfully'}
    return {'error': 'failed to onboard device'}
Exemple #12
0
def clear_timers_route():
    if SIMULATION_MODE:
        return ({'error' : 'in simulation mode'})  
    devid = request.args.get('device_id')
    if (not devid):
        return ({'error' : 'device_id is required'})
    rsid = request.args.get('relsen_id')
    if (not rsid):
        return ({'error' : 'relsen_id is required'})        
    clear_timers (devid, rsid)  # clear from Tasmota
    jrelsen = {'device_id':devid, 'relsen_id':rsid, 'schedule':[], 'repeat':False}  # [["10:10","20:20"]]
    print (jrelsen)
    res = r.update_relsen (jrelsen)  # remove from database
    print (res)
    return ({'result' : 'timer schedules of device cleared'})
    
    
    
Exemple #13
0
def add_test_data():
    dprint(add_test_users())

    DEV1 = 'AA12345'
    DEV2 = 'BB45678'
    DEV3 = 'CC67890'
    DEV4 = 'labs1'

    # TODO: all the following calls return False if they fail. Handle it!
    # device
    r.insert_device(device_id=DEV1,
                    fallback_id='fb_DVES0BC870',
                    mac='A2390BC870',
                    ip='192.168.0.2',
                    hardware_type="Generic",
                    num_relays=1,
                    num_sensors=1,
                    enabled=True)
    r.insert_device(device_id=DEV2,
                    fallback_id='fb_DVESBC8991',
                    mac='B9034BC8991',
                    ip='192.168.0.3',
                    hardware_type="RND.MCU.AL2",
                    num_relays=2,
                    num_sensors=1,
                    enabled=False)
    r.insert_device(device_id=DEV3,
                    fallback_id='fb_DVES9021A8',
                    mac='C0B5E59021A8',
                    ip='192.168.0.4',
                    hardware_type="Generic",
                    num_relays=4,
                    num_sensors=0,
                    enabled=True)
    r.insert_device(device_id=DEV4,
                    fallback_id='fb_DVES0C45A1',
                    mac='FF34E0C45A1',
                    ip='192.168.0.5',
                    hardware_type="MCU.4.PIR.RAD.2R",
                    num_relays=4,
                    num_sensors=1,
                    enabled=True)

    # relsen
    sched1 = json.dumps({"schedule": [["6:30", "7:25"], ["18:0", "19:05"]]})
    sched2 = json.dumps({"schedule": [["11:0", "12:10"], ["13:0", "14:50"]]})
    sched3 = json.dumps({"schedule": [["10:0", "15:15"]]})
    sched4 = json.dumps({
        "schedule": [["9:0", "12:0"], ["12:10", "12:40"], ["16:0", "18:30"]]
    })  # the third one will be ignored; only 2 schedules per relay

    r.insert_relsen(device_id=DEV1,
                    relsen_id='POWER1',
                    relsen_name='Guest fan',
                    relsen_type='Fan',
                    room_name='Master bed room',
                    room_type='Bed room',
                    group_name='Ground floor',
                    schedule=None,
                    repeat=False)
    r.insert_relsen(device_id=DEV1,
                    relsen_id='SENSOR',
                    relsen_name='Temperature',
                    relsen_type='Temperature sensor',
                    room_name='Guest room',
                    room_type='Bed room',
                    group_name='Sensors',
                    schedule=sched1,
                    repeat=False)
    r.insert_relsen(device_id=DEV1,
                    relsen_id='SENSOR',
                    relsen_name='Humidity',
                    relsen_type='Humidity sensor',
                    room_name='Master bed room',
                    room_type='Bed room',
                    group_name='Sensors',
                    schedule=None,
                    repeat=False)
    r.insert_relsen(device_id=DEV2,
                    relsen_id='POWER1',
                    relsen_name='Bed room fan',
                    relsen_type='Fan',
                    room_name='Master bed room',
                    room_type='Bed room',
                    group_name='Ground floor',
                    schedule=sched2,
                    repeat=True)
    r.insert_relsen(device_id=DEV2,
                    relsen_id='POWER2',
                    relsen_name='Bed room light',
                    relsen_type='Tube light',
                    room_name='Master bed room',
                    room_type='Bed room',
                    group_name='Ground floor',
                    schedule=sched3,
                    repeat=True)
    r.insert_relsen(device_id=DEV2,
                    relsen_id='SENSOR',
                    relsen_name='Garage door',
                    relsen_type='Door sensor',
                    room_name='Garage',
                    room_type='Garage',
                    group_name='Sensors',
                    schedule=None,
                    repeat=False)
    r.insert_relsen(device_id=DEV3,
                    relsen_id='POWER1',
                    relsen_name='Bath light',
                    relsen_type='Bulb',
                    room_name='Main bath room',
                    room_type='Bath room',
                    group_name='Ground floor',
                    schedule=sched1,
                    repeat=True)
    r.insert_relsen(device_id=DEV3,
                    relsen_id='POWER2',
                    relsen_name='Corridor light',
                    relsen_type='Bulb',
                    room_name='Varanda',
                    room_type='Corridor',
                    group_name='Ground floor',
                    schedule=None,
                    repeat=False)
    r.insert_relsen(device_id=DEV3,
                    relsen_id='POWER3',
                    relsen_name='Sit out light',
                    relsen_type='Flood light',
                    room_name='sit out',
                    room_type='Balcony',
                    group_name='First floor',
                    schedule=None,
                    repeat=False)
    r.insert_relsen(device_id=DEV3,
                    relsen_id='POWER4',
                    relsen_name='Balcony light',
                    relsen_type='Tube light',
                    room_name='sit out',
                    room_type='Balcony',
                    group_name='First floor',
                    schedule=sched3,
                    repeat=False)
    r.insert_relsen(device_id=DEV4,
                    relsen_id='POWER1',
                    relsen_name='AC',
                    relsen_type='Air conditioner',
                    room_name='Kids bed room',
                    room_type='Bed room',
                    group_name='First floor',
                    schedule=sched1,
                    repeat=True)
    r.insert_relsen(device_id=DEV4,
                    relsen_id='POWER2',
                    relsen_name='Geyser',
                    relsen_type='Water heater',
                    room_name='Kids bath room',
                    room_type='Bath room',
                    group_name='First floor',
                    schedule=sched4,
                    repeat=True)
    r.insert_relsen(device_id=DEV4,
                    relsen_id='POWER3',
                    relsen_name='AC',
                    relsen_type='Air conditioner',
                    room_name='Grandma\'s bed room',
                    room_type='Bed room',
                    group_name='Ground floor',
                    schedule=sched4,
                    repeat=True)
    r.insert_relsen(device_id=DEV4,
                    relsen_id='POWER4',
                    relsen_name='Fan',
                    relsen_type='Fan',
                    room_name='Grandma\'s bath room',
                    room_type='Bath room',
                    group_name='Ground floor',
                    schedule=sched4,
                    repeat=True)
    r.insert_relsen(device_id=DEV4,
                    relsen_id='SENSOR',
                    relsen_name='Garage door',
                    relsen_type='Door sensor',
                    room_name='Garage',
                    room_type='Basement',
                    group_name='Sensors',
                    schedule=None,
                    repeat=False)
    # status
    stat1 = json.dumps({"Relays": [1, 0, 1, 0]})
    stat2 = json.dumps({"Relays": [1, 0, 1, 0]})
    stat3 = json.dumps({"Relays": [1, 0, 1, 0]})
    stat4 = json.dumps({"Relays": [1, 0, 1, 0]})
    sensor1 = json.dumps({"Temperature": 31.6, "Humidity": 76.1})
    sensor2 = json.dumps({"Temperature": 22.2, "Humidity": 66.9})
    sensor3 = json.dumps({"Light": 786})
    sensor4 = json.dumps({"Light": 1022})
    sensor5 = json.dumps({"Garage door": "Open"})

    r.insert_status(device_id=DEV1,
                    relay_status=stat1,
                    event_type='Response',
                    online=True)
    r.insert_status(device_id=DEV1,
                    sensor_values=sensor1,
                    event_type='Autonomous',
                    online=True)
    r.insert_status(device_id=DEV2,
                    relay_status=stat2,
                    event_type='Event',
                    online=True)
    r.insert_status(device_id=DEV3,
                    relay_status=stat3,
                    sensor_values=sensor2,
                    event_type='Health',
                    online=True)
    r.insert_status(device_id=DEV4,
                    relay_status=stat4,
                    sensor_values=sensor3,
                    event_type='Health',
                    online=True)
    r.insert_status(device_id=DEV4,
                    sensor_values=sensor5,
                    event_type='Event',
                    online=True)
    return ({'result': '4 Test devices added (if not existing)'})
Exemple #14
0
def add_minimal_data():
    dprint(add_test_users())

    DEV1 = 'fan'
    DEV2 = 'portico'
    DEV3 = 'hydro'
    DEV4 = 'labs1'
    DEV5 = 'coffee'  # this is not enabled initially
    # TODO: all the following calls return False if they fail. Handle it!
    r.insert_device(device_id=DEV1, num_relays=1, enabled=True)
    r.insert_device(device_id=DEV2, num_relays=2, enabled=True)
    r.insert_device(device_id=DEV3, num_relays=2, enabled=True)
    r.insert_device(device_id=DEV4, num_relays=4, enabled=True)
    r.insert_device(device_id=DEV5, num_relays=2,
                    enabled=False)  # onboard it in disabled status

    r.insert_relsen(device_id=DEV1, relsen_id='POWER')
    r.insert_relsen(device_id=DEV2, relsen_id='POWER1')
    r.insert_relsen(device_id=DEV2, relsen_id='POWER2')
    r.insert_relsen(device_id=DEV3, relsen_id='POWER1')
    r.insert_relsen(device_id=DEV3, relsen_id='POWER2')
    r.insert_relsen(device_id=DEV4, relsen_id='POWER1')
    r.insert_relsen(device_id=DEV4, relsen_id='POWER2')
    r.insert_relsen(device_id=DEV4, relsen_id='POWER3')
    r.insert_relsen(device_id=DEV4, relsen_id='POWER4')
    r.insert_relsen(device_id=DEV5, relsen_id='POWER1')
    r.insert_relsen(device_id=DEV5, relsen_id='POWER2')
    return ({'result': '5 Test devices added (if not existing)'})
Exemple #15
0
def buttons():
    result = r.get_relsen_tree()
    dprint(result)
    if ('error' in result):
        return (result)
    return render_template('buttons.html', SerVar=result)