【智能家居革命】用Python+AI打造全屋自动化系统,代码开源!

发布时间:2025-08-01 16:32

智能家居系统实现全屋自动化 #生活知识# #生活感悟# #科技生活变迁# #新兴科技产品#

Python人工智能应用模型专题:智能家居自动化控制系统

【智能家居革命】用Python+AI打造全屋自动化系统,代码开源!

场景介绍

随着物联网技术的发展,智能家居正逐渐普及。本系统将结合Python、物联网和机器学习技术,开发一个能够感知环境、学习用户习惯并自动控制家居设备的智能中枢。系统不仅能实现远程控制,还能通过分析用户行为模式自动调整家居环境,实现真正的智能化生活。

技术亮点 多模态感知:整合温湿度、光照、人体感应等多传感器数据自适应学习:使用强化学习优化控制策略边缘计算:在本地设备实现实时决策语音交互:集成语音控制接口可视化面板:实时监控家居状态 文件结构

smart_home_control/ │── core/ # 核心控制模块 │ │── sensor_integration.py # 传感器集成 │ │── decision_engine.py # 决策引擎 │ └── device_control.py # 设备控制 │── learning/ # 机器学习模块 │ │── behavior_analysis.py # 用户行为分析 │ └── reinforcement_learning.py # 强化学习 │── interface/ # 交互接口 │ │── web_dashboard.py # Web面板 │ │── voice_control.py # 语音控制 │ └── mobile_api.py # 移动端API │── utils/ # 工具类 │ │── config_manager.py # 配置管理 │ └── logging.py # 日志系统 │── main.py # 主程序 └── requirements.txt # 依赖库 核心代码实现 1. 传感器集成模块 (core/sensor_integration.py)

import random from datetime import datetime import numpy as np from typing import Dict, List class VirtualSensorHub: """虚拟传感器集线器(实际应用中替换为真实传感器接口)""" def __init__(self): self.sensors = { 'temperature': {'value': 22.0, 'range': (10.0, 35.0)}, 'humidity': {'value': 45.0, 'range': (20.0, 80.0)}, 'light': {'value': 300, 'range': (0, 1000)}, 'motion': {'value': False, 'threshold': 0.7}, 'air_quality': {'value': 50, 'range': (0, 500)} } self.history = {sensor: [] for sensor in self.sensors} def read_all(self) -> Dict[str, float]: """读取所有传感器数据(模拟真实环境变化)""" data = {} for name, config in self.sensors.items(): if name == 'motion': # 运动传感器随机触发 if random.random() > config['threshold']: config['value'] = True else: config['value'] = False else: # 其他传感器小幅度随机变化 delta = random.uniform(-0.5, 0.5) min_val, max_val = config['range'] config['value'] = np.clip(config['value'] + delta, min_val, max_val) data[name] = config['value'] self.history[name].append((datetime.now(), config['value'])) return data def get_history(self, sensor_name: str, minutes: int = 60) -> List[tuple]: """获取传感器历史数据""" if sensor_name not in self.history: return [] cutoff = datetime.now() - timedelta(minutes=minutes) return [(ts, val) for ts, val in self.history[sensor_name] if ts >= cutoff] class SensorFusion: """多传感器数据融合""" def __init__(self): self.sensor_hub = VirtualSensorHub() self.current_state = {} def update(self) -> Dict[str, float]: """更新并融合传感器数据""" raw_data = self.sensor_hub.read_all() # 环境舒适度计算(简化版) temp = raw_data['temperature'] humidity = raw_data['humidity'] comfort = 0.5 * (1 - abs(temp - 22)/10) + 0.3 * (1 - abs(humidity - 45)/60) raw_data['comfort_index'] = np.clip(comfort, 0, 1) # 活动状态判断 raw_data['activity_level'] = 0 if raw_data['motion']: light_level = raw_data['light'] / 1000 raw_data['activity_level'] = min(light_level + 0.3, 1) self.current_state = raw_data return self.current_state def detect_anomalies(self) -> Dict[str, str]: """检测环境异常""" anomalies = {} state = self.current_state # 温度异常检测 if state['temperature'] > 30: anomalies['temperature'] = '过高' elif state['temperature'] < 15: anomalies['temperature'] = '过低' # 空气质量检测 if state['air_quality'] > 150: anomalies['air_quality'] = '差' # 高湿度检测 if state['humidity'] > 70: anomalies['humidity'] = '高湿度' return anomalies

python

运行

2. 决策引擎模块 (core/decision_engine.py)

from enum import Enum import json import os from typing import Dict, Any class DeviceType(Enum): LIGHT = "light" THERMOSTAT = "thermostat" AIR_PURIFIER = "air_purifier" CURTAIN = "curtain" AUDIO = "audio" class DecisionEngine: def __init__(self, config_file="scenarios.json"): self.scenarios = self._load_scenarios(config_file) self.user_preferences = { "daytime_temp": 22, "night_temp": 18, "max_light": 80, "sleep_time": "23:00", "wakeup_time": "7:00" } def _load_scenarios(self, config_file: str) -> Dict[str, Any]: """加载预定义场景配置""" default_scenarios = { "morning": { "trigger": {"time": "7:00", "motion": True}, "actions": [ {"device": DeviceType.CURTAIN.value, "command": "open"}, {"device": DeviceType.LIGHT.value, "command": "on", "value": 50}, {"device": DeviceType.AUDIO.value, "command": "play", "value": "morning_playlist"} ] }, # 其他预定义场景... } if os.path.exists(config_file): with open(config_file) as f: return json.load(f) return default_scenarios def make_decision(self, sensor_data: Dict[str, Any]) -> Dict[str, Any]: """基于当前状态做出控制决策""" decisions = {} # 1. 检查预定义场景触发条件 for scenario, config in self.scenarios.items(): if self._check_conditions(config["trigger"], sensor_data): for action in config["actions"]: device = action["device"] decisions[device] = { "command": action["command"], "value": action.get("value") } # 2. 基于规则的自动调节 if not decisions.get(DeviceType.LIGHT.value): light_decision = self._adjust_lighting(sensor_data) if light_decision: decisions[DeviceType.LIGHT.value] = light_decision if not decisions.get(DeviceType.THERMOSTAT.value): temp_decision = self._adjust_temperature(sensor_data) if temp_decision: decisions[DeviceType.THERMOSTAT.value] = temp_decision # 3. 异常情况处理 anomalies = sensor_data.get("anomalies", {}) if "air_quality" in anomalies: decisions[DeviceType.AIR_PURIFIER.value] = { "command": "set_mode", "value": "turbo" } return decisions def _check_conditions(self, trigger: Dict[str, Any], sensor_data: Dict[str, Any]) -> bool: """检查场景触发条件""" # 实现时间、传感器值等条件检查 pass def _adjust_lighting(self, sensor_data: Dict[str, Any]) -> Dict[str, Any]: """智能灯光调节逻辑""" lux = sensor_data["light"] motion = sensor_data["motion"] if not motion: return {"command": "off"} target = min(int(lux / 10), self.user_preferences["max_light"]) return {"command": "set_brightness", "value": target} def _adjust_temperature(self, sensor_data: Dict[str, Any]) -> Dict[str, Any]: """智能温控调节逻辑""" # 实现基于时间、活动的温度调节 pass

python

运行

3. 设备控制模块 (core/device_control.py)

import requests from typing import Dict, Optional class DeviceController: """设备控制抽象层(实际实现需对接具体IoT平台)""" def __init__(self, api_endpoint="http://localhost:8000/api"): self.endpoint = api_endpoint self.device_status = {} def send_command(self, device_id: str, command: str, value: Optional[str] = None) -> bool: """发送控制命令到设备""" payload = { "device_id": device_id, "command": command, "value": value } try: response = requests.post( f"{self.endpoint}/control", json=payload, timeout=3 ) if response.status_code == 200: self.device_status[device_id] = { "state": command, "value": value, "last_updated": datetime.now() } return True except Exception as e: print(f"Control failed: {e}") return False def get_device_status(self, device_id: str) -> Dict[str, Any]: """获取设备当前状态""" # 优先返回缓存状态 if device_id in self.device_status: return self.device_status[device_id] try: response = requests.get( f"{self.endpoint}/status/{device_id}", timeout=3 ) if response.status_code == 200: return response.json() except Exception as e: print(f"Status check failed: {e}") return {"state": "unknown", "value": None} def discover_devices(self) -> List[Dict[str, str]]: """发现局域网内智能设备""" try: response = requests.get(f"{self.endpoint}/discover", timeout=5) if response.status_code == 200: return response.json() except Exception as e: print(f"Discovery failed: {e}") return []

python

运行

4. 用户行为分析模块 (learning/behavior_analysis.py)

import pandas as pd from sklearn.cluster import KMeans from typing import Dict, List class BehaviorAnalyzer: """用户行为模式分析""" def __init__(self, data_retention_days=30): self.data = pd.DataFrame(columns=[ 'timestamp', 'temperature', 'light', 'motion', 'device_actions', 'hour', 'day_of_week' ]) self.retention_days = data_retention_days self.behavior_models = {} def add_record(self, sensor_data: Dict[str, Any], actions: Dict[str, Any]): """添加行为记录""" new_row = { 'timestamp': datetime.now(), 'temperature': sensor_data['temperature'], 'light': sensor_data['light'], 'motion': sensor_data['motion'], 'device_actions': str(actions), 'hour': datetime.now().hour, 'day_of_week': datetime.now().weekday() } self.data = self.data.append(new_row, ignore_index=True) self._clean_old_data() def _clean_old_data(self): """清理过期数据""" cutoff = datetime.now() - pd.Timedelta(days=self.retention_days) self.data = self.data[self.data['timestamp'] > cutoff] def analyze_routines(self) -> Dict[str, List[Dict[str, Any]]]: """分析用户日常行为模式""" if len(self.data) < 100: # 数据不足时不进行分析 return {} # 按小时和星期几分组分析 patterns = {} for (hour, day), group in self.data.groupby(['hour', 'day_of_week']): if len(group) < 5: # 样本太少则跳过 continue # 使用聚类分析找出典型模式 features = group[['temperature', 'light', 'motion']] kmeans = KMeans(n_clusters=min(3, len(group)), random_state=42) group['cluster'] = kmeans.fit_predict(features) # 提取各簇中心点作为典型模式 patterns[f"{day}_{hour}"] = [] for center in kmeans.cluster_centers_: patterns[f"{day}_{hour}"].append({ 'temperature': center[0], 'light': center[1], 'motion_prob': center[2] }) self.behavior_models = patterns return patterns def predict_actions(self, current_time: datetime) -> Dict[str, Any]: """预测用户可能的操作""" hour = current_time.hour day = current_time.weekday() key = f"{day}_{hour}" if key not in self.behavior_models: return {} # 返回最近似的模式(简化处理) return self.behavior_models[key][0]

python

运行

5. 强化学习模块 (learning/reinforcement_learning.py)

import numpy as np import random from collections import deque class RLController: """基于强化学习的优化控制器""" def __init__(self, state_size=5, action_size=4): self.state_size = state_size # 温度,湿度,光照,活动,时间 self.action_size = action_size # 温度±1,灯光±10% self.memory = deque(maxlen=2000) self.gamma = 0.95 # 折扣因子 self.epsilon = 1.0 # 探索率 self.epsilon_min = 0.01 self.epsilon_decay = 0.995 self.learning_rate = 0.001 self.model = self._build_model() def _build_model(self): """构建简单的神经网络模型""" from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense model = Sequential() model.add(Dense(24, input_dim=self.state_size, activation='relu')) model.add(Dense(24, activation='relu')) model.add(Dense(self.action_size, activation='linear')) model.compile(loss='mse', optimizer='adam') return model def remember(self, state, action, reward, next_state, done): """存储经验""" self.memory.append((state, action, reward, next_state, done)) def act(self, state): """选择动作""" if np.random.rand() <= self.epsilon: return random.randrange(self.action_size) act_values = self.model.predict(state) return np.argmax(act_values[0]) def replay(self, batch_size=32): """经验回放学习""" if len(self.memory) < batch_size: return minibatch = random.sample(self.memory, batch_size) for state, action, reward, next_state, done in minibatch: target = reward if not done: target = reward + self.gamma * np.amax(self.model.predict(next_state)[0]) target_f = self.model.predict(state) target_f[0][action] = target self.model.fit(state, target_f, epochs=1, verbose=0) if self.epsilon > self.epsilon_min: self.epsilon *= self.epsilon_decay def get_control_suggestion(self, state): """获取控制建议""" state = np.reshape(state, [1, self.state_size]) action = self.act(state) # 将动作索引转换为实际控制值 suggestions = {} if action == 0: suggestions['thermostat'] = {'adjust': +1} elif action == 1: suggestions['thermostat'] = {'adjust': -1} elif action == 2: suggestions['light'] = {'adjust': +10} elif action == 3: suggestions['light'] = {'adjust': -10} return suggestions

python

运行

6. Web控制面板 (interface/web_dashboard.py)

from flask import Blueprint, render_template, jsonify import threading from core.sensor_integration import SensorFusion from core.decision_engine import DecisionEngine dashboard = Blueprint('dashboard', __name__) # 共享系统状态 system_state = { 'sensors': {}, 'devices': {}, 'scenarios': [] } def background_monitor():

python

运行

网址:【智能家居革命】用Python+AI打造全屋自动化系统,代码开源! https://www.yuejiaxmz.com/news/view/1210360

相关内容

【智能家居革命】用Python+AI打造全屋自动化系统,代码开源!
【智能家居革命背后的Python力量】:揭秘Python如何重塑家居自动化未来
基于 Python Django 的西西家居全屋定制系统(源码+部署+文档)
AI智能家居系统如何实现自动化控制?
Python实战:打造智能抽屉管理系统,提升家居自动化体验
Python在家居自动化中的应用:打造智能生活新体验
智能家居谷歌系统:打造全屋智能化
AI助力自动化:利用AI生成BAT脚本与Python代码,简化日常生活任务
智慧居家全屋智能系统的神奇变革
家庭自动化:Python打造智能家庭助理配置指南

随便看看