跳至正文

智能家居 - 确定 GPS 数据

阅读时间 4 分钟

更新 - 3 月 10, 2025

如果您想使用 SmartHome 确定 GPS 数据,例如查询当地天气数据,可以使用 Teltonika RUTX50 路由器来实现,无需使用 Homematic / RaspberryMatic 附加硬件或软件。.

基础知识

Teltonika 路由器 RUTX... 可以通过激活的 SIM 卡发送和接收短信。此外,还可以通过回复内容为„...... "的短信发送位置数据。„密码 gps„.

可通过 HTTP 请求查看收到的短信列表和短信内容。当前经度和纬度数据可根据 SMS 请求从收到的 SMS 中读取。.

这些数据现在可以通过使用 HomeMatic 或 RaspberryMatic 的 SmarttHome 自动化系统中的脚本进行进一步处理。旅行时,不断变化的地理数据可用于基于当前位置的持续更新的天气查询,例如通过以下免费服务进行查询 openweathermap.org 利用。.

提供商短信设置

根据提供商的不同,路由器使用的 SIM 卡可能需要激活短信功能。通常是在登录供应商网站后,在相关设置中进行激活。.

虽然所谓的多卡优惠可以在所有配备这种 SIM 卡的设备上响铃和拨打电话,但短信只支持其中一张 SIM 卡!

设置 - Teltonika 路由器

服务 - 移动实用工具 - SMS 网关

  • 移动发布/获取设置 - 移动发布/获取设置 - 移动发布/获取设置 - 移动发布/获取设置 - 移动发布/获取设置 已启用
  • 用户名 登录名
  • 密码 登录密码

服务 - 输入/输出 - 发布/获取

  • I/O 邮寄/获取设置 已启用
  • 用户名 登录名
  • 密码 登录密码

设置 - RaspberryMatic

安装 CUx 守护进程

CUx 守护进程是一个插件,它在 HomeMatic / RaspberryMatic 中提供虚拟设备,可用于替代系统调用,减轻负担,例如通过 HTTP 请求向路由器发送短信。.

附加组件通过 "设置"-"附加软件 "安装,您可以点击按钮下载附加组件文件。 选择文件 在电脑相应的下载文件夹中,点击 "下载 "按钮。 安装 可装载到中心并进行安装。.

CUx 守护进程 - 创建设备

点击 "系统 "按钮,即可调用 CUx 守护进程。 CUx 守护进程.

点击右上角的按钮 设备 打开界面。在左上角的 CUxD 设备类型下,可从以下列表中选择 系统 选定。.

功能 执行 选择"......",则在名称字段中输入相应的名称,例如. 全球定位系统, 然后点击按钮 在 CCU 上创建设备, 保存设备。.

创建的设备将在右侧窗口中显示其 ID,例如 CUX2801001,并可在脚本中使用此 ID 进行寻址。.

脚本

发送短信以输出 GPS 数据

方括号内的信息必须用您自己的数据代替:

string url=“‚http://[路由器 IP]/cgi-bin/sms_send?username=[用户名]&password=[暗号]&number=[国际电话号码]&text=[密码 gps]'“;
dom.GetObject(„CUxD.CUX2801001:1.CMD_EXEC“).State(„wget -q -O - „#url);;

请注意,字符串是用双逗号(„)和单逗号(‚)括起来的!

该脚本用于将要创建的程序中 GPS_Loc_Update 下面的脚本会调用 GPS_Data 程序,该程序会延迟 30 秒,以等待收到包含 PÜS 数据的短信:

var programObj = dom.GetObject(„GPS_Data“);;
programObj.ProgramExecute();;

计划 GPS_Loc_Update 可以每天执行一次,也可以根据需要,通过时间控制以更短的间隔执行。.

输出短信列表

为了读取 GPS 数据,要求路由器通过 HTTP 请求输出短信列表。.

该脚本需要两个 "绘图链 "类型的变量,必须在底部的 "设置"-"系统变量 "下点击 "新建 "按钮创建:

  • W_Lat (用于保存地理纬度)。
  • W_Lon (用于保存地理经度)

脚本的内容(以 感叹号 是评论;; WriteLine-这些指令仅用于输出控制,可以删除):

var url = „http://[路由器 IP]/cgi-bin/sms_list?username=[用户名]&password=[暗号]“;

!变量的声明
var posValueStart;;
var posValueEnd;;
var pos;;
var data;;
var posStart;;
var posEnd; string stderr; string stdout;;

!WGET 命令,用于向路由器传输 HTTP 请求字符串
system.Exec(„wget -q -O - ‚“#url#“‚“, &stdout, &stderr);;

!供检查的查询结果输出
WriteLine(stdout);;

!索引:1
!日期: Fri Jan 26 11:01:02 2024
!发件人:+49xxxxxxxxxxxxxx
!文本:修复时间:2024-01-26,11:01:01 纬度 54.834682 经度 12.040196 http://maps.google.com/?
! q=54.834682,12.040196&om=1speed:0
!状态:已读

!读取 GPS 数据
pos = 0;;
!搜索值的起始位置
posStart = ‚Latitude: ‚;;
!搜索值结束的位置
posEnd = ‚ 经度: ‚;;
posValueStart = stdout.Find(posStart) + posStart.Length();;
posValueEnd = stdout.Find(posEnd)-posValueStart;;
是您要找的字符串:
string Latitude = stdout.Substr(posValueStart, posValueEnd);;
!将字符串转换为浮点数
var lat = Latitude.ToFloat();;
!输出地理经度以进行检查
WriteLine(„纬度“);WriteLine(纬度);;

!在变量中保存地理经度 W_Lat
dom.GetObject(‚W_Lat‘).State(lat);;

pos = 0;;
posStart = ‚经度: ‚;;
posEnd = ‚ http‘;;
posValueStart = stdout.Find(posStart) + posStart.Length();;
posValueEnd = stdout.Find(posEnd)-posValueStart;;
string Longitude = stdout.Substr(posValueStart, posValueEnd);;
var lon = Longitude.ToFloat();;
WriteLine(„Longitude“);WriteLine(lon);;

dom.GetObject(‚W_Lon‘).State(lon);;

该程序不包含执行条件,因为它是通过上述程序或脚本启动的。.

现在,地理信息可用于查询该地点的天气数据。为此,需要创建另一个程序,该程序通过时间控制定期启动,并使用脚本将这两个值插入上述气象服务的 HTTP 请求字符串中,从而在查询中将不断变化的地点考虑在内。.

计划 W_Data_OWM

组成 URL

!加载 GPS_Data 中填写的变量 W_LatW_Lon 并赋值给变量 url_1url_2

var url_1 = dom.GetObject(„W_Lat“).Value();;
WriteLine(„Lat=“);WriteLine(url_1);;
var url_2 = dom.GetObject(„W_Lon“).Value();;
WriteLine(„Lon=“);WriteLine(url_2);;

!使用 url_1url_2
![xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx]代表注册后收到的气象服务 API 密钥
var url = „https://api.openweathermap.org/data/2.5/weather?lat=“#url_1#“&lon=“#url_2#“&appid=[xxxxxxxxxxxxxxxxxxxxxxxxx]&units=metric“;;
!输出完整字符串进行检查
WriteLine(url);;

接下来是同样的程序,包括声明变量、WGET 命令、输出查询结果以检查和读出所需的天气数据(见第 6.3 节)。. 文件),按照为 GPS 数据提供的程序进行。.

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注