def get_plant_from_db(id): mydb = connect_to_db() cursor = mydb.cursor() data = [] if id is None: cursor.execute(get_plants) rows = cursor.fetchall() if rows is not None: for row in rows: print(row) data.append(Plant(row[0], row[1], row[2])) else: cursor.execute(get_plant_by_id, (id, )) row = cursor.fetchone() if row is not None: data.append(Plant(row[0], row[1], row[2])) return data
def create_plant(data): try: Plant.get(Plant.ip == data['ip']) except: from models.mesh import MeshObject discovered = MeshObject.get(ip=data['ip']) plant = Plant() plant.name = data['name'].lower() plant.location = data['location'] plant.species = data['species'] plant.interval = data['interval'] plant.person = Person.get(Person.email == data['email']) plant.ip = data['ip'] plant.sat_streak = 0 if 'uuid' in data: plant.uuid = data['uuid'] if 'persistant_hold' in data: plant.persistant_hold = data['persistant_hold'] if not discovered.master: if 'role' not in data: master = Plant.get(localhost=True) else: master = Plant.get(uuid=data['role']) plant.role = str(master.uuid) plant.save() local_plant = Plant.get(Plant.localhost == True) for model in [SensorStatus, SensorCount, SensorSatisfactionValue, PlantNetworkUptime]: copy_model_instance_from_localhost(plant, model, model.plant == local_plant) for count in list(SensorCount.select().where(SensorCount.plant == plant)): count.count = 0 count.save() for uptime in list(PlantNetworkUptime.select().where(PlantNetworkUptime.plant == plant)): uptime.overall = 0 uptime.current = 0 uptime.save() return plant
def init_all(session): # TODO: init from json or csv file plant = Plant(name=u"Plant") session.add(plant) device = Device(name="Raspberry Pi") session.add(device) session.commit() for factor in PlantGrowthFactor: channel = DeviceChannel(device_id=device.id) session.add(channel) session.commit() plant_factor = PlantFactor(plant_id=plant.id, factor_type=factor, channel_id=channel.id) session.add(plant_factor) session.commit() pump_controller = DeviceController(device_id=device.id, controller_type=PlantControllerType.PUMP) session.add(pump_controller) led_controller = DeviceController(device_id=device.id, controller_type=PlantControllerType.LED) session.add(led_controller) session.commit()
def add_plant(): plant = insertToDatabase(Plant(request.get_json())) return Response(response=json.dumps(vars(plant)), status=201)
import socket from models.plant import Plant from models.plant import Person from models.security import MailAccount from models.security import KeyChain as keychain from tools.security import KeyChain from models.sensor import Sensor from models.sensor import SensorHardware, SensorHardwareConnector from models.sensor import * print('Welcome to the configuration of IoP') if Plant.select().count() == 0: print('CREATE FIRST PLANT: \n\n') plant = Plant() plant.name = input('How do you want to call your first plant? ').lower() plant.location = input('The location? ').lower() plant.species = input('The species? ').lower() def interval(): int_interval = input('emailing interval? (int) (h) ') if int_interval.isdigit() is True: return int(int_interval) else: return interval() plant.interval = interval() person = Person() print('\nto:')
def plants(): # GET: select: minimal, normal, detailed, extensive, master, satisfaction, default (normal) # GET: dict: Boolean if request.method == 'GET': data, code = get_data(required=PLANTS_GET, restrictive=True, hardmode=True) if code == 400: return data_formatting(400) selector = data['select'] mode = data['dict'] root_plants = Plant.select().dicts() collection = {} for selected in selector: plants = root_plants.where( Plant.role == 'master') if selected == 'master' else root_plants plants = list(plants) output = [] if selected not in ['satisfaction', 'sensorsatisfaction']: for plant in plants: used = [] if selected in [ 'minimal', 'normal', 'detailed', 'extensive', 'master' ]: used.append('uuid') if selected in [ 'normal', 'detailed', 'extensive', 'master' ]: used.append('name') if selected in ['detailed', 'extensive', 'master']: used.append('role') used.append('localhost') if selected in ['extensive', 'master']: used.append('active') data = [] if not mode else {} for use in used: if isinstance(plant[use], UUID): plant[use] = str(plant[use]) if not mode: data.append(plant[use]) else: data[use] = plant[use] output.append(data) elif selected in ['satisfaction', 'sensorsatisfaction']: output = {} sensors = Sensor.select() for plant in plants: host = None if plant['role'] != 'master': host = Plant.get(Plant.uuid == plant['role']) if selected == 'satisfaction': statuses = [] else: output[str(plant['uuid'])] = {} for sensor in sensors: target = Plant.get(uuid=plant['uuid']) if sensor.name not in slave_supported and host is not None: target = host status = SensorStatus.get( SensorStatus.sensor == sensor, SensorStatus.plant == target) if selected == 'satisfaction': inserted = 1 if status.level.label == 'threat': inserted = 3 elif status.level.label == 'cautioning': inserted = 2 statuses.append(inserted) else: if status.level.label not in output[str( plant['uuid'])]: output[str( plant['uuid'])][status.level.label] = [] output[str( plant['uuid'])][status.level.label].append({ 'name': sensor.name, 'uuid': str(sensor.uuid) }) if selected == 'satisfaction': maximum = max(statuses) label = 'optimum' if maximum == 3: label = 'threat' elif maximum == 2: label = 'cautioning' output[str(plant['uuid'])] = { 'streak': plant['sat_streak'], 'name': label } if len(selector) > 1: collection[selected] = output if len(collection.keys()) != 0: output = collection return data_formatting(data=output) else: # PUT: register: true data, code = get_data(required=PLANTS_PUT, restrictive=True) if code == 400: return data_formatting(400) register = data['register'] plants = list(Plant.select(Plant.ip == data['ip']).dicts()) discovered = MeshObject.get(ip=data['ip']) if plants.count() == 0: return data_formatting(304) plant = Plant() plant.name = data['name'] plant.location = data['location'] plant.species = data['species'] plant.interval = data['interval'] plant.person = Person.get(email=data['email']) plant.ip = data['ip'] plant.sat_streak = 0 if data['uuid'] != '': plant.uuid = data['uuid'] if data['persistant_hold'] != '': plant.persistant_hold = data['persistant_hold'] if not discovered.master: if data['role'] == '': master = Plant.get(localhost=True) else: master = Plant.get(uuid=data['role']) plant.role = str(master.uuid) plant.save() local_plant = Plant.get(localhost=True) for model in [ SensorStatus, SensorCount, SensorSatisfactionValue, PlantNetworkUptime ]: copy_model_instance_from_localhost(plant, model, model.plant == local_plant) for count in list( SensorCount.select().where(SensorCount.plant == plant)): count.count = 0 count.save() for uptime in list(PlantNetworkUptime.select().where( PlantNetworkUptime.plant == plant)): uptime.overall = 0 uptime.current = 0 uptime.save() if register: MeshDedicatedDispatch().register(plant) return data_formatting()