我们控制Android设备



这是第三次尝试与android成为智能家居朋友,让我提醒您,第一次通过HTTP控制android设备的尝试是使用Paw Server应用程序。 此应用程序允许使用BeanShell语言将您的代码嵌入xhtml页面中并与之交互,接收数据或对其进行管理。 为了与智能家居服务器( ioBroker )集成,编写了一个驱动程序,但是对于其第一个配置,必须手动加载脚本。 此外,通过驱动程序,脚本得到了更新,从而可以添加新功能并修复错误,但在尝试脱离Paw Server中为实现新功能而设定的方法时,也施加了许多限制。

第二次尝试是基于Paw服务器的源代码构建应用程序。 主要目标是简化用户的配置过程,并添加以前版本中无法实现的新功能。

在同一版本中,决定完全放弃Paw服务器,并重写ioBroker的应用程序和驱动程序。 除了现有的HTTP之外,还添加新的连接方法MQTT。 从系统本身和内置传感器添加更多选择事件的设置。 当然,应用程序首先会针对ioBroker进行优化,但是可以很轻松地将其集成到其他系统中。

谷歌播放

该应用程序允许您:

  1. 获取系统设置的状态(背光亮度,屏幕状态,音量,电池等)
  2. 从来电,语音识别中接收数据
  3. 从内置传感器接收数据。
  4. 获取位置坐标。
  5. 获取已安装的应用程序列表并启动它们。
  6. 管理系统设置(背光亮度,音量级别等)
  7. 打电话。
  8. 创建通知和对话框。
  9. 发送文本到语音合成。
  10. 与塔斯克互动。
  11. 将文件发送到设备(仅HTTP)。

外表




该应用程序的外观不是最终的,并且可能会有所不同。 我想更改或添加很多东西,但是这一切都是随着时间的流逝。

我认为,通过应用程序进行导航,应该不会有困难。 在首次启动时,该应用程序会简要告知新版本中的当前更改,并建议使用“助手”。 通过转到应用程序设置,您可以更改基本操作参数,选择连接类型,选择要传输到服务器的事件,还可以允许或拒绝访问某些数据(电话簿,消息,呼叫列表和照片)。

在主屏幕上,您可以看到“区块”,虽然这是试用版,但随着时间的推移,我计划扩展其功能。 目前,可用的“平铺”中有:按钮,调光器,时间,列表,颜色,信息。 切片的主要任务是从服务器发送或接收数据(命令)或管理其他设备。 尽管没有全面了解所有工作原理,但我现在将不介绍所有细微差别。

连接数


现在有关连接和控制命令,该应用程序通过HTTP和MQTT提供了两个连接选项。 每种方法都有其优缺点,请选择哪种连接方法。

HTTP


此方法涉及通过Wi-Fi连接到本地网络。 该应用程序“提升”其Web服务器(在连接时可以在通知中看到IP地址和端口),并可以对其进行管理。 这可以直接(通过浏览器)完成,也可以通过POST或GET请求与UD服务器集成完成。





来自请求的响应将以JSON格式返回,设备名称,IP地址和命令状态将在响应主体中传输。 一些请求会调用附加的“回调”,例如,在将文本发送到语音合成时,应用程序将向服务器发送有关说出文本的开始及其完成的请求。 以相同的方式,该应用程序将有关事件和内置传感器读数的数据传输到服务器。 因此,为了完整工作,需要UD服务器能够处理它们。

MQTT


MQTT协议非常流行,并且受到各种DD系统的支持,这使得将应用程序轻松集成到其中。 选择此连接方法时,可以同时使用本地和外部MQTT代理。

连接到MQTT代理时,将创建主分支/ PAW / ,后跟设备名称(每个设备必须具有自己的名称),这些名称又分为主题/ info // comm /的两个分支,您可以从名称中猜测info(信息)分支发布来自设备的所有传入信息,而comm(命令)分支中的主题用于管理该信息。 这样做是为了清楚起见,以便更好地了解哪个主题负责什么。



在主分支中还有/ all_devices /,在此分支中有所有设备都订阅的主题,这使您可以一次管理所有设备。

为了通用起见,在这些主题中其值可以为true(true)或false(false),它们可以采用不同的值,即1,on,auto,true是true值, 0,off,false,manual为false 。 该应用程序的另一个功能是检查命令的执行,如果成功执行,则在同一主题中发布一个空值。 并且,如果发布后的值没有消失,则表明执行该命令时发生错误,或者该值与该主题的正确值不匹配。 例如,更改音量级别时,如果该值与数字不对应或超过最大值,则对于给定类型的音量级别,它将返回错误。

同样在此版本中,用于通知和“对话”的命令集也得到了扩展,它们允许您显示更详细的信息,以及在将设备用作告密者的情况下与用户进行交互。 构造它们时,需要大量参数,因此,有必要在适当的主题中以JSON格式发布值。

对于通知主题/ comm /通知/创建 (以下是值的示例)

{ "noti":"Any text", "title":"Title 2", "info":"Any text", "vibrate":true, "sound":true, "light":true, "id":2 } 

对于“对话”主题/通讯/通知/警报 。 来自“对话框”的响应采用JSON格式,并发布在主题/信息/警报/响应中

 { "alert":"Turn the lights off?", "title":"Light", "negative":"No", "positive":"Yes", "neutral":"Neutral", "sound":true, "id":2 } 

IoBroker集成




在应用程序中嵌入通过MQTT协议工作的能力,我只是想简化与系统的集成,而不必编写单独的驱动程序。 但是某些功能无法通过MQTT协议实现,因此无法放弃驱动程序。

驱动程序对象的结构类似于MQTT的结构,并且也分为两个分支/ info // comm / ,它具有相似的命令管理和对错误数据的相同反应。 我不会在这里描述驱动程序的配置和操作,所有相关信息将在GitHub上更新。

注意事项


至于管理系统设置(控制背光灯亮度,从睡眠中醒来等),不同的设备对命令的响应是否不同。 由于设备,SDK版本,固件种类繁多,因此很难为每个命令设置一个行为模型。 在这里,您需要根据设备选择操作,例如,对于大多数设备而言,关闭屏幕(将其发送到睡眠状态)足以更改背光超时时间,但是在某些设备上,此操作无效。 对于其他设备,对于大多数设备,将立即发生更改,但是对于其他设备,则必须先使设备进入睡眠状态,然后将其唤醒,以使更改生效。 这种最小的问题出现在SDK 19(Android 4.4)上,但这并不准确。)另外,请不要忘记对Tasker的支持,如果您缺少功能,则可以添加它并通过应用程序进行交互。

Source: https://habr.com/ru/post/zh-CN443908/


All Articles