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
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:')
from models.plant import Plant, Person from models.mesh import MeshMessage from playhouse.shortcuts import model_to_dict plant = Plant() plant.name = 'marta' plant.location = 'table' plant.species = 'tulpe' plant.interval = 6 plant.person = Person.get(Person.wizard == True) plant.ip = '192.168.178.54' plant.uuid = '91c9280b76c142a393eb85250065230f' plant.localhost = True # plant.id = 1 plant.sat_streak = 0 plant.save() print(str(plant.uuid))
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()