Example #1
0
    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)
Example #3
0
    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")
Example #4
0
    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
Example #5
0
    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
Example #6
0
    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)
Example #7
0
 def APIweather(self, json_req):
     obj = WeatherClass.WeatherClass()
     response = obj.getCurrentWeather()
     return json.dumps(response)
Example #8
0
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
Example #9
0
    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
Example #10
0
def weatherForecast():
    if (isAuthNeed() == False):
        obj = WeatherClass.WeatherClass()
        return render_template('weatherForecast.html',
                               weather=obj.getWeatherHourlyForecast(),
                               dailyweather=obj.getWeatherDailyForecast())
Example #11
0
def weather():
    if (isAuthNeed() == False):
        obj = WeatherClass.WeatherClass()
        return render_template('weather.html', weather=obj.getCurrentWeather())