- 版本:2.1.0
- GitHub:
- NPM: https://npmjs.net.cn/package/nativescript-particle
- 下载
- 昨天:0
- 上周:2
- 上个月:13
NativeScript Particle 插件
先决条件
前往 Particle.io 商店 并订购他们任何或所有酷炫的设备。
在开发此插件和 演示应用 的过程中,我使用了一个 Photon Kit,与之合作非常愉快。
感谢 Brandon Satrom 发送给我一个!
安装
tns plugin add nativescript-particle
iOS 12+ 设置
iOS 12 及以上版本需要您为您的 App ID 启用 '访问 WiFi 信息',请在此处操作 这里。
此外,请将以下内容添加到您的 App_Resources/iOS/app.entitlements
(注意名称!)文件中
<key>com.apple.developer.networking.wifi-info</key>
<true/>
演示应用中已有此设置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.developer.networking.wifi-info</key>
<true/>
</dict>
</plist>
演示应用
如果您想在不编写代码的情况下先玩玩您的 Particle 设备,请按照以下步骤安装我使用 NativeScript Core 创建的演示应用
git clone https://github.com/EddyVerbruggen/nativescript-particle
cd nativescript-particle/src
npm i
npm run demo.ios # or demo.android
提示:如果您每次登录时都感到厌烦输入登录凭据,请将
PARTICLE_USERNAME
和PARTICLE_PASSWORD
属性设置为您自己的。
想看看演示的效果?请查看 这个简短的视频 📺。
API
以下所有示例都假设您已执行以下导入并实例化了 Particle
类
import { Particle, TNSParticleDevice, TNSParticleEvent } from "nativescript-particle";
const particle = new Particle();
startDeviceSetupWizard
为了帮助将设备注册到您的账户(并避免使用 Particle CLI),您可以直接从您的应用中添加设备到您的账户!😎
particle.startDeviceSetupWizard()
.then(isSuccessful => console.log("Wizard success? " + isSuccessful));
login
您的应用与设备之间的通信基于 HTTP(REST),因此第一步是使用 Particle 云端进行身份验证。
particle.login(
{
username: "[email protected]",
password: "my-particle-password"
})
.then(() => console.log("Login successful"))
.catch(error => console.log(`Login error: ${error}`));
loginWithToken
或者,您可以使用访问令牌登录。
particle.loginWithToken("the_token");
logout
一旦与您的设备(们)交互完毕,最好注销,因为这将对插件和底层 SDK 进行一些清理。
没有理由不这么做,因为这样做非常简单
particle.logout();
publish
从您的应用发布事件到 Particle 设备云。
particle.publish(
"ledStatusApp123", // the event name
"ON", // the event data (string)
true, // isPrivate (default true)
30 // ttl (default 60)
);
subscribe
订阅公共事件流,以及您拥有的设备发布的私有事件。您确实需要一个唯一的前缀,否则您会收到很多数据(不仅仅是您自己的设备的数据)!
particle.subscribe(
"ledStatusApp123",
(event: TNSParticleEvent) => console.log(`Got a ledStatus event for App 123 from the Particle Cloud: ${JSON.stringify(event)}`));
unsubscribe
要停止接收发布的事件,请取消订阅事件。确保前缀与您之前订阅的相同。
particle.unsubscribe("ledStatusApp123");
listDevices
确保您已在 Particle 账户中申明了设备,然后按照以下步骤在您的应用中列出它们
particle.listDevices()
.then((devices: Array<TNSParticleDevice>) => {
if (devices.length === 0) {
console.log("No devices have been claimed in this account.");
} else {
console.log("Devices fetched.. now do something neat with 'em.");
}
})
.catch(error => console.log(`Error fetching devices: ${error}`));
返回的 TNSParticleDevice
对象列表具有以下属性和函数
属性 | 类型 | 描述 |
---|---|---|
id | 字符串 |
此设备的唯一 ID。 |
name | 字符串 |
此设备的给定名称。 |
status | 字符串 |
设备当前的状态,通常是 normal 。 |
connected | 布尔值 |
设备是否当前已连接。 |
type | TNSParticleDeviceType |
以下之一:Unknown 、Core 、Photon 、P1 、Electron 、RaspberryPi 、DigistumpOak 、RedBearDuo 、Bluz 。 |
函数 | Array<string> |
当前设备上可用的功能列表。您可以使用 callFunction 来调用这些功能(见下文)。 |
变量 | Array< TNSParticleDeviceVariable > |
当前设备上可用的变量列表。您可以使用 getVariable 来获取它们的值(见下文)。 |
<device>.rename
您可以直接从您的应用中更改设备名称!💪
const myDevice: TNSParticleDevice = null; // you got this from 'listDevices'
myDevice.rename("rocket_bubble")
.then(() => console.log("Device renamed"))
.catch(error => console.log(`Error renaming the device: ${error}`));
<device>.callFunction
您可以在设备上调用您发现的任何 function
。
例如,假设您已经将 此代码教程 部署到您的设备上,因此有一个 led
函数,它接受 1 个参数:值必须是 "on"
或 "off"
const myDevice: TNSParticleDevice = null; // you got this from 'listDevices'
myDevice.callFunction("led", "on")
.then(result => console.log(`Result: ${result}`))
.catch(error => console.log(`Error in callFunction: ${error}`));
如果您有一个需要多个参数的函数怎么办?假设您正在使用 tinker 应用 并想通过 "digitalWrite"
函数将 "D7"
设置为 "HIGH"
myDevice.callFunction("digitalWrite", "D7", "HIGH")
.then(result => console.log(`Result: ${result}`))
.catch(error => console.log(`Error in callFunction: ${error}`));
<device>.getVariable
获取变量与 callFunction
非常相似。
假设您有一个名为 "analogvalue"
的变量,这将为您提供该变量的当前状态
const myDevice: TNSParticleDevice = null; // you got this from 'listDevices'
myDevice.getVariable("analogvalue")
.then(result => console.log(`Result: ${result}`))
.catch(error => console.log(`Error in getVariable: ${error}`));
<device>.subscribe
如果您的设备上的某个应用发布了事件,您可以在您的应用中接收通知。
为了抑制噪声,您可以通过提供前缀来过滤这些事件,在这个例子中是 my-prefix-
,因此可以捕获类似 my-prefix-temp
或 my-prefix-sensorOn
的事件
const myDevice: TNSParticleDevice = null; // you got this from 'listDevices'
myDevice.subscribe(
"my-prefix-",
(event: TNSParticleEvent) => console.log(`device event: ${JSON.stringify(event)}`));
<device>.unsubscribe
要停止接收设备发布的事件,请取消订阅事件。请确保前缀与您之前订阅的前缀相同。
myDevice.unsubscribe("my-prefix-");
<device>.unclaim
从您的账户中删除此设备。
myDevice.unclaim();
谢谢!
markoImake 添加了一些非常酷的特性 。
享受物联网! 🕹🤖🚪🖲💡📸🎙⛈🚦🛎🔊