nativescript-particle
从 NativeScript 应用中控制 Particle.io 设备!
npm i --save nativescript-particle

NativeScript Particle 插件

NPM version Twitter Follow

Particle.io logo

先决条件

前往 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_USERNAMEPARTICLE_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 以下之一:UnknownCorePhotonP1ElectronRaspberryPiDigistumpOakRedBearDuoBluz
函数 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-tempmy-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 添加了一些非常酷的特性

享受物联网! 🕹🤖🚪🖲💡📸🎙⛈🚦🛎🔊