part of '../../main.dart'; class ClimateEntity extends Entity { @override EntityHistoryConfig historyConfig = EntityHistoryConfig( chartType: EntityHistoryWidgetType.numericAttributes, numericState: false, numericAttributesToShow: ["current_temperature"] ); static const SUPPORT_TARGET_TEMPERATURE = 1; static const SUPPORT_TARGET_TEMPERATURE_RANGE = 2; static const SUPPORT_TARGET_HUMIDITY = 4; static const SUPPORT_FAN_MODE = 8; static const SUPPORT_PRESET_MODE = 16; static const SUPPORT_SWING_MODE = 32; static const SUPPORT_AUX_HEAT = 64; //static const SUPPORT_OPERATION_MODE = 16; //static const SUPPORT_HOLD_MODE = 256; //static const SUPPORT_AWAY_MODE = 1024; //static const SUPPORT_ON_OFF = 4096; ClimateEntity(Map rawData, String webHost) : super(rawData, webHost); bool get supportTargetTemperature => ((supportedFeatures & ClimateEntity.SUPPORT_TARGET_TEMPERATURE) == ClimateEntity.SUPPORT_TARGET_TEMPERATURE); bool get supportTargetTemperatureRange => ((supportedFeatures & ClimateEntity.SUPPORT_TARGET_TEMPERATURE_RANGE) == ClimateEntity.SUPPORT_TARGET_TEMPERATURE_RANGE); bool get supportTargetHumidity => ((supportedFeatures & ClimateEntity.SUPPORT_TARGET_HUMIDITY) == ClimateEntity.SUPPORT_TARGET_HUMIDITY); bool get supportFanMode => ((supportedFeatures & ClimateEntity.SUPPORT_FAN_MODE) == ClimateEntity.SUPPORT_FAN_MODE); bool get supportSwingMode => ((supportedFeatures & ClimateEntity.SUPPORT_SWING_MODE) == ClimateEntity.SUPPORT_SWING_MODE); bool get supportPresetMode => ((supportedFeatures & ClimateEntity.SUPPORT_PRESET_MODE) == ClimateEntity.SUPPORT_PRESET_MODE); bool get supportAuxHeat => ((supportedFeatures & ClimateEntity.SUPPORT_AUX_HEAT) == ClimateEntity.SUPPORT_AUX_HEAT); List get hvacModes => attributes["hvac_modes"] != null ? (attributes["hvac_modes"] as List).cast() : null; List get fanModes => attributes["fan_modes"] != null ? (attributes["fan_modes"] as List).cast() : null; List get presetModes => attributes["preset_modes"] != null ? (attributes["preset_modes"] as List).cast() : null; List get swingModes => attributes["swing_modes"] != null ? (attributes["swing_modes"] as List).cast() : null; double get temperature => _getDoubleAttributeValue('temperature'); double get currentTemperature => _getDoubleAttributeValue('current_temperature'); double get targetHigh => _getDoubleAttributeValue('target_temp_high'); double get targetLow => _getDoubleAttributeValue('target_temp_low'); double get maxTemp => _getDoubleAttributeValue('max_temp') ?? 100.0; double get minTemp => _getDoubleAttributeValue('min_temp') ?? -100.0; double get targetHumidity => _getDoubleAttributeValue('humidity'); double get maxHumidity => _getDoubleAttributeValue('max_humidity'); double get minHumidity => _getDoubleAttributeValue('min_humidity'); double get temperatureStep => _getDoubleAttributeValue('target_temp_step') ?? 0.5; String get hvacAction => attributes['hvac_action']; String get fanMode => attributes['fan_mode']; String get presetMode => attributes['preset_mode']; String get swingMode => attributes['swing_mode']; bool get awayMode => attributes['away_mode'] == "on"; //bool get isOff => state == EntityState.off; bool get auxHeat => attributes['aux_heat'] == "on"; @override void update(Map rawData, String webHost) { super.update(rawData, webHost); if (supportTargetTemperature) { historyConfig.numericAttributesToShow.add("temperature"); } if (supportTargetTemperatureRange) { historyConfig.numericAttributesToShow.add("target_temp_high"); historyConfig.numericAttributesToShow.add("target_temp_low"); } } @override Widget _buildStatePart(BuildContext context) { return ClimateStateWidget(); } @override Widget _buildAdditionalControlsForPage(BuildContext context) { return ClimateControlWidget(); } @override double _getDoubleAttributeValue(String attributeName) { var temp1 = attributes["$attributeName"]; if (temp1 is int) { return temp1.toDouble(); } else if (temp1 is double) { return temp1; } else { return null; } } }