def __upgrade_config(self,to_version): # Set minimal version to 3.0.0 current_version = 300 new_version = int(to_version.replace('.','')) if int(self.get_system()['version'].replace('.','')) >= current_version: current_version = int(self.get_system()['version'].replace('.','')) if not current_version < new_version: logger.info('Configuration is up to date') else: logger.info('Configuration is out of date. Running updates from %s to %s' % (current_version,new_version)) for version in xrange(current_version+1,new_version+1): if version == 300: logger.info('Updating configuration file to version: %s' % (version,)) # Upgrade: Move temperature indicator from weather to system temperature_indicator = self.__get_config('weather') if 'temperature' in temperature_indicator: self.__config.set('terrariumpi', 'temperature_indicator', str(temperature_indicator['temperature'])) self.__config.remove_option('weather','temperature') # Upgrade: Change profile image path to new path and config location data = self.__get_config('terrariumpi') if 'image' in data and '/static/images/gecko.jpg' == data['image']: self.__config.set('profile', 'image', '/static/images/profile_image.jpg') self.__config.remove_option('terrariumpi','image') # Upgrade: Change profile name path to new config location data = self.__get_config('terrariumpi') if 'person' in data: self.__config.set('profile', 'name', data['person']) self.__config.remove_option('terrariumpi','person') # Upgrade: Remove default available languages variable data = self.__get_config('terrariumpi') if 'available_languages' in data: self.__config.remove_option('terrariumpi','available_languages') elif version == 310: logger.info('Updating configuration file to version: %s' % (version,)) # Upgrade: Rename active_language to just language data = self.__get_config('terrariumpi') if 'active_language' in data: self.__config.set('terrariumpi', 'language', data['active_language']) self.__config.remove_option('terrariumpi','active_language') # Update the GPIO pinnumbering for PWM dimmers and DHT like sensors for section in self.__config.sections(): if section[:6] == 'sensor': sensor_data = self.__get_config(section) if 'dht' in sensor_data['hardwaretype'] or 'am2302' == sensor_data['hardwaretype']: self.__config.set(section, 'address', str(terrariumUtils.to_BOARD_port_number(sensor_data['address']))) if section[:6] == 'switch': switch_data = self.__get_config(section) if 'pwm-dimmer' == switch_data['hardwaretype']: self.__config.set(section, 'address', str(terrariumUtils.to_BOARD_port_number(switch_data['address']))) elif version == 312: logger.info('Updating configuration file to version: %s' % (version,)) data = self.__get_config('terrariumpi') if 'soundcard' in data and data['soundcard'] == '0': self.__config.set('terrariumpi', 'soundcard', 'bcm2835 ALSA') # Update version number self.__config.set('terrariumpi', 'version', str(to_version)) self.__save_config() self.__config.read(terrariumConfig.CUSTOM_CONFIG) logger.info('Updated configuration. Set version to: %s' % (to_version,))
def __upgrade_config(self, to_version): # Set minimal version to 3.0.0 current_version = 300 new_version = int(to_version.replace('.', '')) if int(self.get_system()['version'].replace('.', '')) >= current_version: current_version = int(self.get_system()['version'].replace( '.', '')) if not current_version < new_version: logger.info('Configuration is up to date') else: logger.info( 'Configuration is out of date. Running updates from %s to %s' % (current_version, new_version)) for version in range(current_version + 1, new_version + 1): if version == 300: logger.info('Updating configuration file to version: %s' % (version, )) # Upgrade: Move temperature indicator from weather to system temperature_indicator = self.__get_config('weather') if 'temperature' in temperature_indicator: self.__config.set( 'terrariumpi', 'temperature_indicator', str(temperature_indicator['temperature'])) self.__config.remove_option('weather', 'temperature') # Upgrade: Change profile image path to new path and config location data = self.__get_config('terrariumpi') if 'image' in data and '/static/images/gecko.jpg' == data[ 'image']: self.__config.set('profile', 'image', '/static/images/profile_image.jpg') self.__config.remove_option('terrariumpi', 'image') # Upgrade: Change profile name path to new config location data = self.__get_config('terrariumpi') if 'person' in data: self.__config.set('profile', 'name', data['person']) self.__config.remove_option('terrariumpi', 'person') # Upgrade: Remove default available languages variable data = self.__get_config('terrariumpi') if 'available_languages' in data: self.__config.remove_option('terrariumpi', 'available_languages') elif version == 310: logger.info('Updating configuration file to version: %s' % (version, )) # Upgrade: Rename active_language to just language data = self.__get_config('terrariumpi') if 'active_language' in data: self.__config.set('terrariumpi', 'language', data['active_language']) self.__config.remove_option('terrariumpi', 'active_language') # Update the GPIO pinnumbering for PWM dimmers and DHT like sensors for section in self.__config.sections(): if section[:6] == 'sensor': sensor_data = self.__get_config(section) if 'dht' in sensor_data[ 'hardwaretype'] or 'am2302' == sensor_data[ 'hardwaretype']: self.__config.set( section, 'address', str( terrariumUtils.to_BOARD_port_number( sensor_data['address']))) if section[:6] == 'switch': switch_data = self.__get_config(section) if 'pwm-dimmer' == switch_data['hardwaretype']: self.__config.set( section, 'address', str( terrariumUtils.to_BOARD_port_number( switch_data['address']))) elif version == 312: logger.info('Updating configuration file to version: %s' % (version, )) data = self.__get_config('terrariumpi') if 'soundcard' in data and data['soundcard'] == '0': self.__config.set('terrariumpi', 'soundcard', 'bcm2835 ALSA') elif version == 330: logger.info('Updating configuration file to version: %s' % (version, )) for section in self.__config.sections(): if section[:8] == 'playlist': playlist_data = self.__get_config(section) self.__config.set( section, 'start', str( datetime.datetime.fromtimestamp( float( playlist_data['start'])).strftime( '%H:%M'))) self.__config.set( section, 'stop', str( datetime.datetime.fromtimestamp( float(playlist_data['stop'])).strftime( '%H:%M'))) if section == 'environment': environment_data = self.__get_config(section) self.__config.set( section, 'light_on', str( datetime.datetime.fromtimestamp( float(environment_data['light_on'])). strftime('%H:%M'))) self.__config.set( section, 'light_off', str( datetime.datetime.fromtimestamp( float(environment_data['light_off'])). strftime('%H:%M'))) self.__config.set( section, 'heater_on', str( datetime.datetime.fromtimestamp( float(environment_data['heater_on'])). strftime('%H:%M'))) self.__config.set( section, 'heater_off', str( datetime.datetime.fromtimestamp( float(environment_data['heater_off'])). strftime('%H:%M'))) self.__config.set( section, 'cooler_on', str( datetime.datetime.fromtimestamp( float(environment_data['cooler_on'])). strftime('%H:%M'))) self.__config.set( section, 'cooler_off', str( datetime.datetime.fromtimestamp( float(environment_data['cooler_off'])). strftime('%H:%M'))) elif version == 351: logger.info('Updating configuration file to version: %s' % (version, )) for section in self.__config.sections(): if section[:6] == 'webcam': data = self.__get_config(section) if 'archive' in data: self.__config.set( section, 'archive', 'motion' if terrariumUtils.is_true( data['archive']) else 'disabled') elif version == 360: logger.info('Updating configuration file to version: %s' % (version, )) for section in self.__config.sections(): if section == 'environment': data = self.__get_config(section) newdata = {} if 'temperature_mode' not in newdata: newdata[ 'temperature_mode'] = 'weatherinverse' if data[ 'cooler_mode'] == 'weather' else data[ 'cooler_mode'] if 'cooler_night_difference' in data: newdata[ 'temperature_day_night_difference'] = data[ 'cooler_night_difference'] if 'cooler_night_source' in data: newdata['temperature_day_night_source'] = data[ 'cooler_night_source'] if 'cooler_sensors' in data: newdata['temperature_sensors'] = data[ 'cooler_sensors'] if 'cooler_night_enabled' in data: newdata[ 'temperature_alarm_max_light_state'] = 'ignore' if terrariumUtils.is_true( data['cooler_night_enabled']) else 'on' if 'cooler_power_switches' in data: newdata[ 'temperature_alarm_max_powerswitches'] = data[ 'cooler_power_switches'] if 'cooler_settle_timeout' in data: newdata['temperature_alarm_max_settle'] = data[ 'cooler_settle_timeout'] if 'cooler_off_duration' in data: newdata[ 'temperature_alarm_max_timer_off'] = data[ 'cooler_off_duration'] if 'cooler_on_duration' in data: newdata[ 'temperature_alarm_max_timer_on'] = data[ 'cooler_on_duration'] if 'cooler_on' in data: newdata[ 'temperature_alarm_max_timer_start'] = data[ 'cooler_on'] if 'cooler_off' in data: newdata[ 'temperature_alarm_max_timer_stop'] = data[ 'cooler_off'] if 'temperature_mode' not in newdata or 'disabled' == newdata[ 'temperature_mode']: newdata[ 'temperature_mode'] = 'weatherinverse' if data[ 'heater_mode'] == 'weather' else data[ 'heater_mode'] if 'heater_night_difference' in data: if 'temperature_day_night_difference' in newdata and terrariumUtils.is_float( newdata[ 'temperature_day_night_difference'] ): newdata['temperature_day_night_difference'] = ( float(newdata[ 'temperature_day_night_difference'] ) + float(data['heater_night_difference']) ) / 2.0 else: newdata[ 'temperature_day_night_difference'] = data[ 'heater_night_difference'] if 'heater_night_source' in data and ( 'temperature_day_night_source' not in newdata or newdata['temperature_day_night_source'] == ''): newdata['temperature_day_night_source'] = data[ 'heater_night_source'] if 'heater_sensors' in data: if 'temperature_sensors' in newdata and newdata[ 'temperature_sensors'] != '': newdata[ 'temperature_sensors'] += ',' + data[ 'heater_sensors'] else: newdata['temperature_sensors'] = data[ 'heater_sensors'] if 'heater_day_enabled' in data: newdata[ 'temperature_alarm_min_light_state'] = 'ignore' if terrariumUtils.is_true( data['heater_day_enabled']) else 'off' if 'heater_power_switches' in data: newdata[ 'temperature_alarm_min_powerswitches'] = data[ 'heater_power_switches'] if 'heater_settle_timeout' in data: newdata['temperature_alarm_min_settle'] = data[ 'heater_settle_timeout'] if 'heater_off_duration' in data: newdata[ 'temperature_alarm_min_timer_off'] = data[ 'heater_off_duration'] if 'heater_on_duration' in data: newdata[ 'temperature_alarm_min_timer_on'] = data[ 'heater_on_duration'] if 'heater_on' in data: newdata[ 'temperature_alarm_min_timer_start'] = data[ 'heater_on'] if 'heater_off' in data: newdata[ 'temperature_alarm_min_timer_stop'] = data[ 'heater_off'] if 'light_mode' in data: newdata['light_mode'] = data['light_mode'] if 'light_min_hours' in data: newdata['light_min_hours'] = data[ 'light_min_hours'] if 'light_max_hours' in data: newdata['light_max_hours'] = data[ 'light_max_hours'] if 'light_hours_shift' in data: newdata['light_hours_shift'] = data[ 'light_hours_shift'] if 'light_power_switches' in data: newdata[ 'light_alarm_min_powerswitches'] = data[ 'light_power_switches'] if 'light_on' in data: newdata['light_alarm_min_timer_start'] = data[ 'light_on'] if 'light_off' in data: newdata['light_alarm_min_timer_stop'] = data[ 'light_off'] if 'light_on_duration' in data: newdata['light_alarm_min_timer_on'] = data[ 'light_on_duration'] if 'light_off_duration' in data: newdata['light_alarm_min_timer_off'] = data[ 'light_off_duration'] newdata['light_alarm_min_settle'] = 10 newdata['light_alarm_max_settle'] = 10 if 'moisture_mode' in data: newdata['moisture_mode'] = data[ 'moisture_mode'] if 'moisture_sensors' in data: newdata['moisture_sensors'] = data[ 'moisture_sensors'] if 'moisture_power_switches' in data: newdata[ 'moisture_alarm_min_powerswitches'] = data[ 'moisture_power_switches'] if 'moisture_on' in data: newdata[ 'moisture_alarm_min_timer_start'] = data[ 'moisture_on'] if 'moisture_off' in data: newdata[ 'moisture_alarm_min_timer_stop'] = data[ 'moisture_off'] if 'moisture_on_duration' in data: newdata['moisture_alarm_min_timer_on'] = data[ 'moisture_on_duration'] if 'moisture_off_duration' in data: newdata['moisture_alarm_min_timer_off'] = data[ 'moisture_off_duration'] if 'moisture_spray_duration' in data: newdata[ 'moisture_alarm_min_duration_on'] = data[ 'moisture_spray_duration'] if 'moisture_spray_timeout' in data: newdata['moisture_alarm_min_settle'] = data[ 'moisture_spray_timeout'] if 'moisture_night_enabled' in data: newdata[ 'moisture_alarm_min_light_state'] = 'ignore' if terrariumUtils.is_true( data['moisture_night_enabled'] ) else 'on' if 'ph_mode' in data: newdata['ph_mode'] = data['ph_mode'] if 'ph_sensors' in data: newdata['ph_sensors'] = data['ph_sensors'] if 'ph_power_switches' in data: newdata['ph_alarm_min_powerswitches'] = data[ 'ph_power_switches'] if 'ph_on' in data: newdata['ph_alarm_min_timer_start'] = data[ 'ph_on'] if 'ph_off' in data: newdata['ph_alarm_min_timer_stop'] = data[ 'ph_off'] if 'ph_on_duration' in data: newdata['ph_alarm_min_timer_on'] = data[ 'ph_on_duration'] if 'ph_off_duration' in data: newdata['ph_alarm_min_timer_off'] = data[ 'ph_off_duration'] if 'ph_settle_timeout' in data: newdata['ph_alarm_min_settle'] = data[ 'ph_settle_timeout'] if 'ph_day_enabled' in data: newdata[ 'ph_alarm_min_light_state'] = 'ignore' if terrariumUtils.is_true( data['ph_day_enabled']) else 'on' if 'sprayer_mode' in data: newdata['humidity_mode'] = data['sprayer_mode'] if 'sprayer_sensors' in data: newdata['humidity_sensors'] = data[ 'sprayer_sensors'] if 'sprayer_power_switches' in data: newdata[ 'humidity_alarm_min_powerswitches'] = data[ 'sprayer_power_switches'] if 'sprayer_on' in data: newdata[ 'humidity_alarm_min_timer_start'] = data[ 'sprayer_on'] if 'sprayer_off' in data: newdata[ 'humidity_alarm_min_timer_stop'] = data[ 'sprayer_off'] if 'sprayer_on_duration' in data: newdata['humidity_alarm_min_timer_on'] = data[ 'sprayer_on_duration'] if 'sprayer_off_duration' in data: newdata['humidity_alarm_min_timer_off'] = data[ 'sprayer_off_duration'] if 'sprayer_spray_duration' in data: newdata[ 'humidity_alarm_min_duration_on'] = data[ 'sprayer_spray_duration'] if 'sprayer_spray_timeout' in data: newdata['humidity_alarm_min_settle'] = data[ 'sprayer_spray_timeout'] if 'sprayer_night_enabled' in data: newdata[ 'humidity_alarm_min_light_state'] = 'ignore' if terrariumUtils.is_true( data['sprayer_night_enabled'] ) else 'on' newdata['humidity_alarm_min_door_state'] = 'closed' if 'watertank_mode' in data: newdata['watertank_mode'] = data[ 'watertank_mode'] if 'watertank_sensors' in data: newdata['watertank_sensors'] = data[ 'watertank_sensors'] if 'watertank_height' in data: newdata['watertank_height'] = data[ 'watertank_height'] if 'watertank_volume' in data: newdata['watertank_volume'] = data[ 'watertank_volume'] if 'watertank_power_switches' in data: newdata[ 'watertank_alarm_min_powerswitches'] = data[ 'watertank_power_switches'] if 'watertank_on' in data: newdata[ 'watertank_alarm_min_timer_start'] = data[ 'watertank_on'] if 'watertank_off' in data: newdata[ 'watertank_alarm_min_timer_stop'] = data[ 'watertank_off'] if 'watertank_on_duration' in data: newdata['watertank_alarm_min_timer_on'] = data[ 'watertank_on_duration'] if 'watertank_off_duration' in data: newdata[ 'watertank_alarm_min_timer_off'] = data[ 'watertank_off_duration'] if 'watertank_pump_duration' in data: newdata[ 'watertank_alarm_min_duration_on'] = data[ 'watertank_pump_duration'] self.save_environment(newdata) break elif version == 385: logger.info('Updating configuration file to version: %s' % (version, )) windspeed_indicator = self.__get_config('weather').get( 'windspeed') if windspeed_indicator is None: windspeed_indicator = self.__get_config( 'terrariumpi').get('windspeed_indicator') if windspeed_indicator is None: windspeed_indicator = 'kmh' self.__config.set('terrariumpi', 'windspeed_indicator', windspeed_indicator) self.__config.remove_option('weather', 'windspeed') elif version == 393: logger.info('Updating configuration file to version: %s' % (version, )) # Only change IDs of sensors that can be scanned collector_update_sql = '' sensor_rename_list = {} for section in self.__config.sections(): if section[:6] == 'sensor': data = self.__get_config(section) if data['hardwaretype'] in [ 'w1', 'owfs', 'miflora' ]: old_id = data['id'] new_id = md5( (data['hardwaretype'] + data['address'] + data['type']).encode()).hexdigest() if old_id != new_id: if old_id not in sensor_rename_list: sensor_rename_list[old_id] = new_id data['id'] = new_id new_section = 'sensor' + new_id if not self.__config.has_section( new_section): self.__config.add_section(new_section) keys = list(data.keys()) keys.sort() for setting in keys: if setting in ['firmware', 'battery']: continue self.__config.set( new_section, str(setting), str(data[setting])) # Clear any existing new data (should not happen) collector_update_sql += 'DELETE FROM sensor_data WHERE id = \'{}\';\n'.format( new_id) # Rename the sensor ID in the database collector_update_sql += 'UPDATE sensor_data SET id = \'{}\' WHERE id = \'{}\';\n'.format( new_id, old_id) self.__config.remove_section(section) # Update environment sensor settings environment = self.__get_config('environment') keys = list(environment.keys()) for setting in keys: if '_sensors' in setting: for old_id in sensor_rename_list: environment[setting] = environment[ setting].replace( old_id, sensor_rename_list[old_id]) self.__config.set('environment', str(setting), str(environment[setting])) if '' != collector_update_sql: config_ok = self.__save_config() if config_ok: self.__reload_config() with open( '.collector.update.{}.sql'.format(version), 'w') as sql_file: sql_file.write(collector_update_sql.strip()) # Update version number self.__config.set('terrariumpi', 'version', str(to_version)) self.__save_config() self.__config.read(terrariumConfig.CUSTOM_CONFIG) logger.info('Updated configuration. Set version to: %s' % (to_version, ))
def __upgrade_config(self,to_version): # Set minimal version to 3.0.0 current_version = 300 new_version = int(to_version.replace('.','')) if int(self.get_system()['version'].replace('.','')) >= current_version: current_version = int(self.get_system()['version'].replace('.','')) if not current_version < new_version: logger.info('Configuration is up to date') else: logger.info('Configuration is out of date. Running updates from %s to %s' % (current_version,new_version)) for version in range(current_version+1,new_version+1): if version == 300: logger.info('Updating configuration file to version: %s' % (version,)) # Upgrade: Move temperature indicator from weather to system temperature_indicator = self.__get_config('weather') if 'temperature' in temperature_indicator: self.__config.set('terrariumpi', 'temperature_indicator', str(temperature_indicator['temperature'])) self.__config.remove_option('weather','temperature') # Upgrade: Change profile image path to new path and config location data = self.__get_config('terrariumpi') if 'image' in data and '/static/images/gecko.jpg' == data['image']: self.__config.set('profile', 'image', '/static/images/profile_image.jpg') self.__config.remove_option('terrariumpi','image') # Upgrade: Change profile name path to new config location data = self.__get_config('terrariumpi') if 'person' in data: self.__config.set('profile', 'name', data['person']) self.__config.remove_option('terrariumpi','person') # Upgrade: Remove default available languages variable data = self.__get_config('terrariumpi') if 'available_languages' in data: self.__config.remove_option('terrariumpi','available_languages') elif version == 310: logger.info('Updating configuration file to version: %s' % (version,)) # Upgrade: Rename active_language to just language data = self.__get_config('terrariumpi') if 'active_language' in data: self.__config.set('terrariumpi', 'language', data['active_language']) self.__config.remove_option('terrariumpi','active_language') # Update the GPIO pinnumbering for PWM dimmers and DHT like sensors for section in self.__config.sections(): if section[:6] == 'sensor': sensor_data = self.__get_config(section) if 'dht' in sensor_data['hardwaretype'] or 'am2302' == sensor_data['hardwaretype']: self.__config.set(section, 'address', str(terrariumUtils.to_BOARD_port_number(sensor_data['address']))) if section[:6] == 'switch': switch_data = self.__get_config(section) if 'pwm-dimmer' == switch_data['hardwaretype']: self.__config.set(section, 'address', str(terrariumUtils.to_BOARD_port_number(switch_data['address']))) elif version == 312: logger.info('Updating configuration file to version: %s' % (version,)) data = self.__get_config('terrariumpi') if 'soundcard' in data and data['soundcard'] == '0': self.__config.set('terrariumpi', 'soundcard', 'bcm2835 ALSA') elif version == 330: logger.info('Updating configuration file to version: %s' % (version,)) for section in self.__config.sections(): if section[:8] == 'playlist': playlist_data = self.__get_config(section) self.__config.set(section, 'start', str(datetime.datetime.fromtimestamp(float(playlist_data['start'])).strftime('%H:%M'))) self.__config.set(section, 'stop', str(datetime.datetime.fromtimestamp(float(playlist_data['stop'])).strftime('%H:%M'))) if section == 'environment': environment_data = self.__get_config(section) self.__config.set(section, 'light_on', str(datetime.datetime.fromtimestamp(float(environment_data['light_on'])).strftime('%H:%M'))) self.__config.set(section, 'light_off', str(datetime.datetime.fromtimestamp(float(environment_data['light_off'])).strftime('%H:%M'))) self.__config.set(section, 'heater_on', str(datetime.datetime.fromtimestamp(float(environment_data['heater_on'])).strftime('%H:%M'))) self.__config.set(section, 'heater_off', str(datetime.datetime.fromtimestamp(float(environment_data['heater_off'])).strftime('%H:%M'))) self.__config.set(section, 'cooler_on', str(datetime.datetime.fromtimestamp(float(environment_data['cooler_on'])).strftime('%H:%M'))) self.__config.set(section, 'cooler_off', str(datetime.datetime.fromtimestamp(float(environment_data['cooler_off'])).strftime('%H:%M'))) elif version == 351: logger.info('Updating configuration file to version: %s' % (version,)) for section in self.__config.sections(): if section[:6] == 'webcam': data = self.__get_config(section) if 'archive' in data: self.__config.set(section, 'archive', 'motion' if terrariumUtils.is_true(data['archive']) else 'disabled') elif version == 360: logger.info('Updating configuration file to version: %s' % (version,)) for section in self.__config.sections(): if section == 'environment': data = self.__get_config(section) newdata = {} if 'temperature_mode' not in newdata: newdata['temperature_mode'] = 'weatherinverse' if data['cooler_mode'] == 'weather' else data['cooler_mode'] if 'cooler_night_difference' in data: newdata['temperature_day_night_difference'] = data['cooler_night_difference'] if 'cooler_night_source' in data: newdata['temperature_day_night_source'] = data['cooler_night_source'] if 'cooler_sensors' in data: newdata['temperature_sensors'] = data['cooler_sensors'] if 'cooler_night_enabled' in data: newdata['temperature_alarm_max_light_state'] = 'ignore' if terrariumUtils.is_true(data['cooler_night_enabled']) else 'on' if 'cooler_power_switches' in data: newdata['temperature_alarm_max_powerswitches'] = data['cooler_power_switches'] if 'cooler_settle_timeout' in data: newdata['temperature_alarm_max_settle'] = data['cooler_settle_timeout'] if 'cooler_off_duration' in data: newdata['temperature_alarm_max_timer_off'] = data['cooler_off_duration'] if 'cooler_on_duration' in data: newdata['temperature_alarm_max_timer_on'] = data['cooler_on_duration'] if 'cooler_on' in data: newdata['temperature_alarm_max_timer_start'] = data['cooler_on'] if 'cooler_off' in data: newdata['temperature_alarm_max_timer_stop'] = data['cooler_off'] if 'temperature_mode' not in newdata or 'disabled' == newdata['temperature_mode']: newdata['temperature_mode'] = 'weatherinverse' if data['heater_mode'] == 'weather' else data['heater_mode'] if 'heater_night_difference' in data: if 'temperature_day_night_difference' in newdata and terrariumUtils.is_float(newdata['temperature_day_night_difference']): newdata['temperature_day_night_difference'] = (float(newdata['temperature_day_night_difference']) + float(data['heater_night_difference'])) / 2.0 else: newdata['temperature_day_night_difference'] = data['heater_night_difference'] if 'heater_night_source' in data and ('temperature_day_night_source' not in newdata or newdata['temperature_day_night_source'] == ''): newdata['temperature_day_night_source'] = data['heater_night_source'] if 'heater_sensors' in data: if 'temperature_sensors' in newdata and newdata['temperature_sensors'] != '': newdata['temperature_sensors'] += ',' + data['heater_sensors'] else: newdata['temperature_sensors'] = data['heater_sensors'] if 'heater_day_enabled' in data: newdata['temperature_alarm_min_light_state'] = 'ignore' if terrariumUtils.is_true(data['heater_day_enabled']) else 'off' if 'heater_power_switches' in data: newdata['temperature_alarm_min_powerswitches'] = data['heater_power_switches'] if 'heater_settle_timeout' in data: newdata['temperature_alarm_min_settle'] = data['heater_settle_timeout'] if 'heater_off_duration' in data: newdata['temperature_alarm_min_timer_off'] = data['heater_off_duration'] if 'heater_on_duration' in data: newdata['temperature_alarm_min_timer_on'] = data['heater_on_duration'] if 'heater_on' in data: newdata['temperature_alarm_min_timer_start'] = data['heater_on'] if 'heater_off' in data: newdata['temperature_alarm_min_timer_stop'] = data['heater_off'] if 'light_mode' in data: newdata['light_mode'] = data['light_mode'] if 'light_min_hours' in data: newdata['light_min_hours'] = data['light_min_hours'] if 'light_max_hours' in data: newdata['light_max_hours'] = data['light_max_hours'] if 'light_hours_shift' in data: newdata['light_hours_shift'] = data['light_hours_shift'] if 'light_power_switches' in data: newdata['light_alarm_min_powerswitches'] = data['light_power_switches'] if 'light_on' in data: newdata['light_alarm_min_timer_start'] = data['light_on'] if 'light_off' in data: newdata['light_alarm_min_timer_stop'] = data['light_off'] if 'light_on_duration' in data: newdata['light_alarm_min_timer_on'] = data['light_on_duration'] if 'light_off_duration' in data: newdata['light_alarm_min_timer_off'] = data['light_off_duration'] newdata['light_alarm_min_settle'] = 10 newdata['light_alarm_max_settle'] = 10 if 'moisture_mode' in data: newdata['moisture_mode'] = data['moisture_mode'] if 'moisture_sensors' in data: newdata['moisture_sensors'] = data['moisture_sensors'] if 'moisture_power_switches' in data: newdata['moisture_alarm_min_powerswitches'] = data['moisture_power_switches'] if 'moisture_on' in data: newdata['moisture_alarm_min_timer_start'] = data['moisture_on'] if 'moisture_off' in data: newdata['moisture_alarm_min_timer_stop'] = data['moisture_off'] if 'moisture_on_duration' in data: newdata['moisture_alarm_min_timer_on'] = data['moisture_on_duration'] if 'moisture_off_duration' in data: newdata['moisture_alarm_min_timer_off'] = data['moisture_off_duration'] if 'moisture_spray_duration' in data: newdata['moisture_alarm_min_duration_on'] = data['moisture_spray_duration'] if 'moisture_spray_timeout' in data: newdata['moisture_alarm_min_settle'] = data['moisture_spray_timeout'] if 'moisture_night_enabled' in data: newdata['moisture_alarm_min_light_state'] = 'ignore' if terrariumUtils.is_true(data['moisture_night_enabled']) else 'on' if 'ph_mode' in data: newdata['ph_mode'] = data['ph_mode'] if 'ph_sensors' in data: newdata['ph_sensors'] = data['ph_sensors'] if 'ph_power_switches' in data: newdata['ph_alarm_min_powerswitches'] = data['ph_power_switches'] if 'ph_on' in data: newdata['ph_alarm_min_timer_start'] = data['ph_on'] if 'ph_off' in data: newdata['ph_alarm_min_timer_stop'] = data['ph_off'] if 'ph_on_duration' in data: newdata['ph_alarm_min_timer_on'] = data['ph_on_duration'] if 'ph_off_duration' in data: newdata['ph_alarm_min_timer_off'] = data['ph_off_duration'] if 'ph_settle_timeout' in data: newdata['ph_alarm_min_settle'] = data['ph_settle_timeout'] if 'ph_day_enabled' in data: newdata['ph_alarm_min_light_state'] = 'ignore' if terrariumUtils.is_true(data['ph_day_enabled']) else 'on' if 'sprayer_mode' in data: newdata['humidity_mode'] = data['sprayer_mode'] if 'sprayer_sensors' in data: newdata['humidity_sensors'] = data['sprayer_sensors'] if 'sprayer_power_switches' in data: newdata['humidity_alarm_min_powerswitches'] = data['sprayer_power_switches'] if 'sprayer_on' in data: newdata['humidity_alarm_min_timer_start'] = data['sprayer_on'] if 'sprayer_off' in data: newdata['humidity_alarm_min_timer_stop'] = data['sprayer_off'] if 'sprayer_on_duration' in data: newdata['humidity_alarm_min_timer_on'] = data['sprayer_on_duration'] if 'sprayer_off_duration' in data: newdata['humidity_alarm_min_timer_off'] = data['sprayer_off_duration'] if 'sprayer_spray_duration' in data: newdata['humidity_alarm_min_duration_on'] = data['sprayer_spray_duration'] if 'sprayer_spray_timeout' in data: newdata['humidity_alarm_min_settle'] = data['sprayer_spray_timeout'] if 'sprayer_night_enabled' in data: newdata['humidity_alarm_min_light_state'] = 'ignore' if terrariumUtils.is_true(data['sprayer_night_enabled']) else 'on' newdata['humidity_alarm_min_door_state'] = 'closed' if 'watertank_mode' in data: newdata['watertank_mode'] = data['watertank_mode'] if 'watertank_sensors' in data: newdata['watertank_sensors'] = data['watertank_sensors'] if 'watertank_height' in data: newdata['watertank_height'] = data['watertank_height'] if 'watertank_volume' in data: newdata['watertank_volume'] = data['watertank_volume'] if 'watertank_power_switches' in data: newdata['watertank_alarm_min_powerswitches'] = data['watertank_power_switches'] if 'watertank_on' in data: newdata['watertank_alarm_min_timer_start'] = data['watertank_on'] if 'watertank_off' in data: newdata['watertank_alarm_min_timer_stop'] = data['watertank_off'] if 'watertank_on_duration' in data: newdata['watertank_alarm_min_timer_on'] = data['watertank_on_duration'] if 'watertank_off_duration' in data: newdata['watertank_alarm_min_timer_off'] = data['watertank_off_duration'] if 'watertank_pump_duration' in data: newdata['watertank_alarm_min_duration_on'] = data['watertank_pump_duration'] self.save_environment(newdata) break elif version == 385: logger.info('Updating configuration file to version: %s' % (version,)) windspeed_indicator = self.__get_config('weather').get('windspeed') if windspeed_indicator is None: windspeed_indicator = self.__get_config('terrariumpi').get('windspeed_indicator') if windspeed_indicator is None: windspeed_indicator = 'kmh' self.__config.set('terrariumpi', 'windspeed_indicator', windspeed_indicator) self.__config.remove_option('weather','windspeed') # Update version number self.__config.set('terrariumpi', 'version', str(to_version)) self.__save_config() self.__config.read(terrariumConfig.CUSTOM_CONFIG) logger.info('Updated configuration. Set version to: %s' % (to_version,))