def timeEvent(self): try: weather = WeatherClass.WeatherClass() curr_day = datetime.now().strftime('%d') curr_hour = datetime.now().strftime('%H') if self.__day != curr_day: self.__day = curr_day self.__weatherFiles = self.__weatherFiles \ | weather.WeatherDailyFile \ | weather.WeatherHourlyFile self.__counter = 200 weather.clearRainIndicator() if self.__hour != curr_hour: self.__hour = curr_hour self.__weatherFiles = self.__weatherFiles \ | weather.WeatherCurrentFile self.__counter = 200 if self.__weatherFiles != 0 and self.__counter == 0: weather.generateFiles(self.__weatherFiles) self.__weatherFiles = 0 weather.updateRainIndicator() if self.__counter > 0: self.__counter = self.__counter - 1 except Exception: logging.error('WEATHER1 EXCEPT:') #print( e.message) self.__day = curr_day self.__hour = curr_hour self.__weatherFiles = 0 self.__counter = 200
def produce_map(self): # call WeatherClass.py and create map w = WeatherClass.WeatherMapping( origin=self.origin_input, destination=self.destination_input, weather_type=self.weather_type_input, date_of_travel=self.date_input, num_of_checks=self.number_of_checks_input) self.map = w.weather_map() # save map data data = io.BytesIO() self.map.save(data, close_file=False) # get map data self.browser.setHtml(data.getvalue().decode()) self.layout.addWidget(self.browser)
def __init__(self): weather = WeatherClass.WeatherClass() self.__day = 0 self.__hour = 0 self.__weatherFiles = 0 # Below counter is needed to generate weather files not exactly when new day/hour, # but some time later because data are not available. self.__counter = 0 try: weather.generateFiles(weather.WeatherDailyFile | weather.WeatherHourlyFile | weather.WeatherCurrentFile) except: logging.error('WEATHER EXCEPT:') print("__________wather excetion")
def manageSprinklerState( self, curr_week_day, curr_hour, curr_min, ): config = ConfigClass.ConfigClass() weather = WeatherClass.WeatherClass() rainOccured = False duration = int(config.getDurationTime()) * 60 currentTS = time.time() if weather.rainOccured() == True and config.checkRainOccured() \ == True: rainOccured = True if self.__autowater == False: self.__state = 0 if config.isStartTime(curr_week_day, curr_hour, curr_min) \ or SprinklerClass.__force_auto_water == True: self.__autowater = True self.__timestamp = currentTS SprinklerClass.__break_auto_water = False if self.__autowater == True and currentTS >= self.__timestamp \ + self.__state * duration: self.__state = self.__state + 1 if self.__state <= SprinklerClass.__Max_num_of_sprinklers \ and rainOccured == False: # print "---------------ON :" + str(self.__state) if SprinklerClass.__break_auto_water == False: self.setSprinklerOn(str(self.__state)) else: self.__autowater = False SprinklerClass.__force_auto_water = False else: self.setSprinklerOff() self.__autowater = False SprinklerClass.__force_auto_water = False
def getInfoData(self): config = ConfigClass.ConfigClass() weather = WeatherClass.WeatherClass() heater = HeaterClass.HeaterClass() radio = RadioClass.RadioClass() energy = EnergyClass.EnergyClass() infoObj = {} if config.getAlarmSetting('day_policy') == 'disable': infoObj['alarm_state'] = 'Alarm wylaczony' infoObj['alarm_state_value'] = 1 elif config.getAlarmSetting('day_policy') == 'week_day': infoObj['alarm_state'] = 'Alarm wlaczony na dni tygodnia' infoObj['alarm_state_value'] = 2 else: infoObj['alarm_state'] = 'Alarm wlaczony' infoObj['alarm_state_value'] = 3 infoObj['alarm_start'] = config.getAlarmSetting('start_time') infoObj['alarm_stop'] = config.getAlarmSetting('stop_time') infoObj['alarm_channel'] = config.getAlarmSetting('channel') if weather.rainOccured() == False: infoObj['rain'] = 'Dzisiaj nie zanotowano opadu' infoObj['rain_value'] = 0 else: infoObj['rain'] = 'Dzisiaj zanotowano opady' infoObj['rain_value'] = 1 infoObj['alarm_channels'] = radio.getPVRRadioStations() infoObj['alarm_volume'] = config.getAlarmSetting('volume') infoObj['heater_time'] = heater.getHeaterStatistic() infoObj['total_energy'] = energy.getTotalEnergy() infoObj['total_per_month'] = energy.getTotalPerMonth() return infoObj
def manageHeaterState( self, dayOfWeek, hour, minute, ): config = ConfigClass.ConfigClass() weather = WeatherClass.WeatherClass() alarm = AlarmClass.AlarmClass() threadTask = None dayTemp = float(config.getDayTemp()) nightTemp = float(config.getNightTemp()) threshold = float(config.geTempThreshold()) isDayMode = config.isDayMode(dayOfWeek, hour) (status, temp) = self.__getTemperatureFromDevice() if status != 0: return # new day - reset statistics if hour == 0 and minute == 0: HeaterClass.__heaterOnToday = 0 HeaterClass.__data_per_day = [] if HeaterClass.__lastState == HeaterClass.__StateOn: HeaterClass.__heaterOnToday = HeaterClass.__heaterOnToday \ + 1 if HeaterClass.__dayMode != isDayMode: # if mode has changed set heater state as 'unknown'(-1) HeaterClass.__lastState = HeaterClass.__StateUnknown self.__storeDataCounter = self.__storeDataCounter + 1 HeaterClass.__dayMode = isDayMode sensor = config.getDeviceSensors('heater')[0] if isDayMode == True and temp + threshold <= dayTemp \ or isDayMode == False and temp + threshold <= nightTemp: # turn on heater url = alarm.getUpdateUrl(sensor[1], 1) if HeaterClass.__lastState == HeaterClass.__StateOff \ or HeaterClass.__lastState \ == HeaterClass.__StateUnknown: threadTask = ActionThread.ActionThread() threadTask.addTask( ActionThread.Task( 'set', ActionThread.UpdateParam('heater', sensor[0]))) HeaterClass.__lastState = HeaterClass.__StateOn elif isDayMode == True and temp >= dayTemp + threshold \ or isDayMode == False and temp >= nightTemp + threshold \ or HeaterClass.__lastState == HeaterClass.__StateUnknown: # turn off heater url = alarm.getUpdateUrl(sensor[1], 0) if HeaterClass.__lastState == HeaterClass.__StateOn \ or HeaterClass.__lastState \ == HeaterClass.__StateUnknown: threadTask = ActionThread.ActionThread() threadTask.addTask( ActionThread.Task( 'clear', ActionThread.UpdateParam('heater', sensor[0]))) HeaterClass.__lastState = HeaterClass.__StateOff if threadTask != None: threadTask.addTask( ActionThread.Task('request', ActionThread.RequestParam(url))) threadTask.addTask( ActionThread.Task('notify', ActionThread.NotifyParam())) threadTask.start() threadTask.suspend() # store data once per defined invokes (currently it means once per 10min) - not need so many data if self.__storeDataCounter % HeaterClass.__storeDataInterval \ == 0: weatherData = weather.getCurrentWeather() if not weatherData: tempOutside = 0 else: tempOutside = weatherData['temp'] HeaterClass.__data.append( HeaterParam(temp, tempOutside, HeaterClass.__lastState, isDayMode)) HeaterClass.__data_per_day.append( HeaterParam(temp, tempOutside, HeaterClass.__lastState, isDayMode)) if len(HeaterClass.__data) > HeaterClass.__maxDataBuffer: HeaterClass.__data.pop(0)
def APIweather(self, json_req): obj = WeatherClass.WeatherClass() response = obj.getCurrentWeather() return json.dumps(response)
def restApi(): req = {} crypt = CryptClass.CryptClass() postData = crypt.Decode(request.data) postData = postData[:postData.rfind("}") + 1] req = json.loads(postData) if (req['action'] == "temperature"): obj = HeaterClass.HeaterClass() response = obj.getCurrentTemperatureInside() r = json.dumps(response) w = crypt.Encode(r) return w elif (req['action'] == "version"): response = {} response['name'] = "Home Control Center" response['version'] = "1.0" r = json.dumps(response) w = crypt.Encode(r) return w elif (req['action'] == "getMediaChannels"): obj = RadioClass.RadioClass() response = {} response = obj.getPVRStations() r = json.dumps(response) w = crypt.Encode(r) return w elif (req['action'] == "info"): infoObj = InfoClass.InfoClass() response = infoObj.getInfoData() r = json.dumps(response) w = crypt.Encode(r) return w elif (req['action'] == "weather"): obj = WeatherClass.WeatherClass() response = obj.getCurrentWeather() r = json.dumps(response) w = crypt.Encode(r) return w elif (req['action'] == "schedule"): obj = ScheduleClass.ScheduleClass() response = {} response['DirectionA'] = obj.getJsonFromKoleo('A', 0) response['DirectionB'] = obj.getJsonFromKoleo('B', 0) r = json.dumps(response) w = crypt.Encode(r) return w elif (req['action'] == "heaterCharts"): obj = HeaterClass.HeaterClass() response = {} response = obj.getCharts() r = json.dumps(response) w = crypt.Encode(r) return w elif (req['action'] == "getGardenSettings"): obj = SprinklerClass.SprinklerClass() response = {} response = obj.getSettings() r = json.dumps(response) w = crypt.Encode(r) return w elif (req['action'] == "playMediaChannel"): obj = RadioClass.RadioClass() response = {} response = obj.playPVRChannel(param) r = json.dumps(response) w = crypt.Encode(r) return w elif (req['action'] == "toggleCec"): obj = RadioClass.RadioClass() response = {} response = obj.toggleCEC() r = json.dumps(response) w = crypt.Encode(r) return w elif (req['action'] == "setGardenSettings"): response = {} config = ConfigClass.ConfigClass() config.saveSettingsData(2, req) response['state'] = "OK" r = json.dumps(response) w = crypt.Encode(r) return w elif (req['action'] == "setHeaterSettings"): response = {} config = ConfigClass.ConfigClass() config.saveSettingsData(1, req) response['state'] = "OK" r = json.dumps(response) w = crypt.Encode(r) return w elif (req['action'] == "setAlarmSettings"): response = {} config = ConfigClass.ConfigClass() config.saveSettingsData(0, req) response['state'] = "OK" r = json.dumps(response) w = crypt.Encode(r) return w else: duration = 0 param = "" if (req['action'] <> "events"): if (req['action'] == "VolumeSet"): param = req['volume'] if (req['action'] == "PlayPVR"): param = req['channel'] if (req['action'] == "SprinklerOn"): param = str(req['id']) if (req['action'] == "Gate"): param = str(req['id']) action = ActionClass.ActionClass() duration = action.performAction(req['action'], param) obj = ActionClass.ActionClass() events = obj.getEvents() response = {} resEvents = [] for event in events: row = {} row['eventType'] = event.id row['eventDesc'] = event.desc row['eventIcon'] = event.icon row['eventDate'] = event.date resEvents.append(row) response['events'] = resEvents response['eventDuration'] = duration r = json.dumps(response) w = crypt.Encode(r) return w
def getRoomsData(self): config = ConfigClass.ConfigClass() switch = SwitchClass.SwitchClass() alarm = AlarmClass.AlarmClass() weather = WeatherClass.WeatherClass() try: tempOut = weather.getCurrentWeather()['temp'] except: #dirty workaround must be fixed tempOut = 0 roomsObj = {} rooms = [] temperature = alarm.getTemperature() alerts = alarm.getAlerts() presence = alarm.getPresence() roomsObj['error'] = 0 for item in config.getRooms(): roomParams = {} roomlight = {} roomAlarm = {} roomTemp = {} roomPresence = {} roomParams['id'] = item['id'] roomParams['name'] = item['name'] roomlight['light_ip'] = item['light_ip'] data = switch.getSwitchInfo(item['light_ip']) if data['error'] == 0: roomlight['light_state'] = data['data']['switch'] roomlight['light_present'] = 1 else: roomlight['light_state'] = 'off' roomlight['light_present'] = 0 roomAlarm['presence'] = 'off' roomAlarm['alert'] = 'off' roomAlarm['present'] = 0 try: for alarmSensor in item['alarmSensors']: for alarmItem in alerts['alerts']: if alarmItem['name'] == alarmSensor \ and roomAlarm['alert'] == 'off': roomAlarm['alert'] = alarmItem['alert'] roomAlarm['present'] = 1 for presenceItem in presence['presence']: if presenceItem['name'] == alarmSensor \ and roomAlarm['presence'] == 'off': roomAlarm['presence'] = \ presenceItem['presence'] roomAlarm['present'] = 1 except: roomsObj['error'] = 255 roomTemp['id'] = item['tempId'] roomTemp['temperature'] = '' roomTemp['thresholdExceeded'] = 'no' roomTemp['present'] = 0 for tempItem in temperature['temperature']: if tempItem['name'] == item['tempId']: roomTemp['temperature'] = ( tempItem['value'])[:tempItem['value'].find('.') + 2] roomTemp['thresholdExceeded'] = \ tempItem['thresholdExceeded'] roomTemp['present'] = 1 break if item['tempId'] == 'weather': roomTemp['temperature'] = tempOut roomTemp['thresholdExceeded'] = 'no' roomTemp['present'] = 1 roomParams['light'] = roomlight roomParams['alarm'] = roomAlarm roomParams['temperature'] = roomTemp rooms.append(roomParams) roomsObj['rooms'] = rooms return roomsObj
def weatherForecast(): if (isAuthNeed() == False): obj = WeatherClass.WeatherClass() return render_template('weatherForecast.html', weather=obj.getWeatherHourlyForecast(), dailyweather=obj.getWeatherDailyForecast())
def weather(): if (isAuthNeed() == False): obj = WeatherClass.WeatherClass() return render_template('weather.html', weather=obj.getCurrentWeather())