我的车不是任何人都将被称为“聪明”。这是一个十一岁的丰田Avensis,没有Hubcaps,不匹配的侧面镜子,并在后窗的污垢上追踪“我”追踪,它是 - 拥抱口语 - 一个真正的搅拌器。我不能抱怨 - 它是正确的,而不是忠实地维护。

肖恩2007年丰田Avensis

肖恩2007年丰田Avensis

然而,事实证明,它是汽车仪器实验的智能选择。我想看看我是否可以将我的“低科技”汽车连接到云端并将其数据流传到新的遗物。我认为这将是做一点汽车性能监测和游戏的好方法新遗物移动Android SDK.

所以,在我把所有东西放在一起后,我去了一个驾驶 - 在都柏林驾驶的开始/停止城市的良好组合,然后在高速公路上打开一点。这是这一点新的遗物见解仪表板与我从该旅程中录制的一些数据:

肖恩的仪表板

我收集了我的速度,发动机转数(rpms)和冷却剂温度(当然是在摄氏)上的数据。我甚至设置了一个新的遗物警报关于我的速度。为了确保我在控制下保持我的领先脚,我可以在30公里/小时内(120 km / h)的30 km / hr以内,我设置了一个警报以触发。这很好地工作,正如您在这里看到的那样:

肖恩的驱动器警报

那我怎么做?

那么我是如何从这个古老的搅拌器中获得尖端数据的?这不是那么困难!

当您将车辆带入车库时,例如诊断出发动机警告灯,机械师使用一个名为的协议OBD-11.要将其诊断工具连接到您的汽车中的控制单元,提供有关汽车性能的各种信息。该协议可用于从汽车内的仪器中读取数据,包括速度,RPM和节气门位置等实时数据。

好的,但我是如何从汽车中的那个数据来进入新的遗物?用我的智能手机 - 显然。

事实证明,有一个Bluetooth OBD-II连接器丰富专为此目的而设计,所以我购买了一个。由于我想在Android中运行这个,我必须搜索一下,但我最终找到了一个开源GitHub上的Android Obd Reader。不幸的是,回购不再维护,但有一点故障排除,我得到了OBD Reader应用程序并运行Android Studio和一个nexus 6仿真器。

然后我跟着了安装Android应用程序的步骤为了新遗物移动,所以我可以从OBD Reader应用程序中提取自定义事件。

一些代码调整

一旦我安装了移动安装,我就可以看到OBD应用程序从Nexus 6仿真器成功地报告。幸运的是,读者能够将数据传输到已有的服务器 - 我所要做的就是用手机自定义事件替换该默认功能,以将其发送到新的遗物洞察力。

这是读者的原始代码:

if(prefs.getBoolean(ConfigActivity.upload_data_key,false){//上载HTTP最终读数的当前读数Vin = prefts.getString(ConfigActivity.vehicle_id_key,“undefined_vin”);映射 temp = new hashmap ();temp.putlall(commandResult);obdreading阅读= new obdreading(lat,lon,alt,system.currenttimemillis(),vin,temp);新的uploadasynctask()。执行(阅读);

以下是我所做的更改:

if(prefs.getBoolean(ConfigActivity.upload_data_key,false){//上载HTTP最终读数的当前读数Vin = prefts.getString(ConfigActivity.vehicle_id_key,“undefined_vin”);映射 temp = new hashmap ();temp.putlall(commandResult);obdreading阅读= new obdreading(lat,lon,alt,system.currenttimemillis(),vin,temp);//重新排列数据的新代码和使用新的遗物自定义事件映射nrreading = new hashmap();if(temp!= null){for(map.entry 条目:temp.entryset()){string key =条目.getkey();尝试{string value =条目.getvalue()。替换(“nodata”,“0nd”)。拆分(“(?<= \\ d)\\ s *(?= [a-za-z%:])“)[0];对象ObjectVal =(对象)Double.Parsedouble(Value);nrreading.put(key,Objectval);catch(numberformatexception ne){log.d(标记,“条目:”); } } } NewRelic.recordCustomEvent("Car", nrreading);

正如您所见,我不得不做一些数据争吵,因为它最初是以字符串格式为单位。我使用了Regex来将数字字符串与单位字符串分开。然后我将数字字符串转换为双重,以便最终绘制洞察力。这新relic.recordcustomevent()方法还需要一个地图<字符串,对象&gt;格式图,而OBD应用程序提供的地图是在Map 格式,因此在将字符串转换为双打时,代码也将值对其进行排序映射<字符串,对象>格式。

一旦完成所有转换和排序,就完成了newrelic.recordcustomevent()执行方法,将自定义事件发送为Car EventType到Insights。

应用程序在运行时收集自定义事件,并在600秒后(或者应用程序进入后台),代理将此自定义事件数据发送到Insights,我甚至可以查询它。

肖恩的驱动器自定义事件

结论

在智能吸尘器,冰箱,恒温器和窗口色调中,汽车也不例外。从实际上智能车特斯拉的型号s为了谷歌即将到来的自驾车,似乎未来今天而不是明天。随着地平线上的AI增强型汽车的舰队,仪器将成为将这些车辆放在道路上的重要组成部分。

新的遗物移动不可能更容易实现。即使在多年来没有维持Android OBD项目,我所拥有的最糟糕的问题是它花了我三个小时的故障排除,以弄清楚应用程序将在Nexus仿真器上工作但不在我的手机上。事实证明,我前一天刚刚用完了电话数据!

我还发现,我的汽车的速度表注册大约5公里/小时的速度比我的车实际上是旅行。有目的的设计选择?我不知道,但我应该减慢一点......

Sean Winters是新瑞宾列办事处的技术支持工程师。没有帮助客户利用新遗物的力量,他正在做赢得他幻想足球联盟所需的一切。查看帖子

对新遗物博客的写作有兴趣吗?亚搏体育登入网送我们一个球场!!