简介
完成基础自定义后,可能需要添加更多功能、修改默认行为、自定义 UI 控制面板等,以满足产品和应用需求。
本节介绍如何自定义设备控制面板界面或参数控制,甚至可以扩展现有的通知功能。
前提条件
假设你已经准备好应用开发环境。请按照说明设置开发环境。以下所有参考内容均基于克隆自 GitHub 的 ESP RainMaker Home 示例应用源码仓库。
假设你已经了解混合应用的工作原理,并熟悉 React Native 和 Expo 应用开发流程。
API 配置
自定义 API 端点
在 rainmaker.config.ts 中自定义 ESP RainMaker API 端点和认证设置:
export const SDKConfig = {
baseUrl: "https://your-custom-api.com", // 自定义 API 端点
version: "v1",
authUrl: "https://your-custom-auth.com", // 自定义 OAuth 端点
clientId: "your-client-id", // OAuth 客户端 ID
redirectUrl: "yourapp://com.yourcompany.yourapp/success", // OAuth 重定向 URL
customStorageAdapter: asyncStorageAdapter,
localDiscoveryAdapter: EspLocalDiscoveryAdapter,
localControlAdapter: ESPLocalControlAdapter,
provisionAdapter: provisionAdapter,
notificationAdapter: ESPNotificationAdapter,
oauthAdapter: espOauthAdapter,
appUtilityAdapter: ESPAppUtilityAdapter,
};
环境特定配置
可以为不同环境创建配置:
// 开发环境配置
const developmentConfig = {
baseUrl: "https://api.staging.rainmaker.espressif.com",
};
// 生产环境配置
const productionConfig = {
baseUrl: "https://api.rainmaker.espressif.com",
};
// 根据环境使用相应的配置
export const SDKConfig = __DEV__ ? developmentConfig : productionConfig;
自定义设备控制面板
打开源代码,在 app/(device)/device_panels/ 目录下创建新的面板组件来自定义设备控制面板。
现有设备面板:
Light.tsx- 灯光设备控制面板Switch.tsx- 开关设备控制面板Temperature.tsx- 温度传感器面板Fallback.tsx- 默认回退面板
创建自定义设备面板
- 在
app/(device)/device_panels/目录下创建新的 TypeScript 文件 - 导入必要的组件和 hooks
- 实现自定义 UI 和控制逻辑
- 在设备配置中注册面板
示例 - 自定义灯光面板结构:
// app/(device)/device_panels/CustomLight.tsx
import React from "react";
import { View, Text, StyleSheet } from "react-native";
import { observer } from "mobx-react-lite";
import { useToast } from "@/hooks/useToast";
import { useTranslation } from "react-i18next";
import {
PowerButton,
BrightnessSlider,
HueSlider,
SaturationSlider,
} from "@/components/ParamControls";
import { ControlPanelProps } from "@/types/global";
const CustomLightPanel: React.FC<ControlPanelProps> = ({ device, node }) => {
const { t } = useTranslation();
const toast = useToast();
return (
<View style={styles.container}>
<PowerButton device={device} node={node} />
<BrightnessSlider device={device} node={node} />
<HueSlider device={device} node={node} />
<SaturationSlider device={device} node={node} />
{/* 在此处添加自定义控件 */}
</View>
);
};
const styles = StyleSheet.create({
container: {
flex: 1,
padding: 20,
},
});
export default observer(CustomLightPanel);
自定义参数控件
在 components/ParamControls/ 目录下添加新的参数控件类型,以支持自定义设备参数。
现有参数控件:
PowerButton.tsx- 电源开/关控件BrightnessSlider.tsx- 亮度控件HueSlider.tsx- 色相控件SaturationSlider.tsx- 饱和度控件ColorTemperatureSlider.tsx- 色温控件SpeedSlider.tsx- 风扇速度控件TemperatureSlider.tsx- 温度控件ToggleSwitch.tsx- 切换开关控件Slider.tsx- 通用滑块控件DropdownSelector.tsx- 下拉选择器TextInput.tsx- 文本输入控件