Hop on over to the Particle.io store and order any or all of their cool devices.
While developing this plugin and the demo app I used a Photon Kit and it was a joy to work with.
Thanks, Brandon Satrom for sending one over!
tns plugin add nativescript-particle
iOS 12 and up requires you to enable 'Access WiFi Information' for your App ID here.
Also, add this to your App_Resources/iOS/app.entitlements
(mind the name!) file:
<key>com.apple.developer.networking.wifi-info</key>
<true/>
The demo app has this:
<?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>
If you want to just play with your Particle device without writing code yet,follow these steps to install the demo app I've created with NativeScript Core:
git clone https://github.com/EddyVerbruggen/nativescript-particle
cd nativescript-particle/src
npm i
npm run demo.ios # or demo.android
Tip: If you get tired entering your login credentials every time you log in, set the
PARTICLE_USERNAME
andPARTICLE_PASSWORD
properties to reflect your own.
Want to see the demo in action? Check out this short video
All examples below assume you have these imports and instantiated the Particle
class:
import { Particle, TNSParticleDevice, TNSParticleEvent } from "nativescript-particle";
const particle = new Particle();
startDeviceSetupWizard
To help registering devices to your account (and avoid having to use the Particle CLI) you can add devices to your account right from your app!
particle.startDeviceSetupWizard()
.then(isSuccessful => console.log("Wizard success? " + isSuccessful));
login
Communication between your app and a device is HTTP (REST) based,so the first step is authenticating yourself with the Particle Cloud:
particle.login(
{
username: "my-particle-username@mydomain.com",
password: "my-particle-password"
})
.then(() => console.log("Login successful"))
.catch(error => console.log(`Login error: ${error}`));
loginWithToken
Alternatively, you can login with an access token.
particle.loginWithToken("the_token");
logout
Once done interacting with your device(s) it's best to log out as this will do a little cleanup in the plugin and underlying SDK.
There's no reason not to because it couldn't be easier:
particle.logout();
publish
Publish an event from your app to the Particle Device Cloud.
particle.publish(
"ledStatusApp123", // the event name
"ON", // the event data (string)
true, // isPrivate (default true)
30 // ttl (default 60)
);
subscribe
Subscribe to the firehose of public events, plus the private events published by devices one owns.You really want to use a unique prefix, otherwise you'll receive a lot of data (not only from your own devices!).
particle.subscribe(
"ledStatusApp123",
(event: TNSParticleEvent) => console.log(`Got a ledStatus event for App 123 from the Particle Cloud: ${JSON.stringify(event)}`));
unsubscribe
To stop receiving published events, unsubscribe from the events. Make sure the prefix is equal to the one you previously subscribed with.
particle.unsubscribe("ledStatusApp123");
listDevices
Make sure you've claimed a device in your Particle account, then do this to list them in your app:
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}`));
The returned list of TNSParticleDevice
objects has these properties and functions:
Property | Type | Description |
---|---|---|
id | string |
The unique ID of this device. |
name | string |
The given name of this device. |
status | string |
The current status of the device, usually normal . |
connected | boolean |
Whether or not the device is currently connected.. |
type | TNSParticleDeviceType |
One of Unknown , Core , Photon , P1 , Electron , RaspberryPi , DigistumpOak , RedBearDuo , Bluz . |
functions | Array<string> |
The list of functions currently available on the device. You can invoke these with callFunction (see below). |
variables | Array< TNSParticleDeviceVariable > |
The list of variables currently available on the device. You can get their values with getVariable (see below). |
<device>.rename
You can change the device name right from your app!
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
You can invoke any of the functions
you discovered on the device.
As an example let's assume you've flashed this code tutorial to your device,so there's a led
function which takes 1 argument: the value must be either "on"
, or "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}`));
What if you have a function which takes multiple arguments? Let's assume you're using the tinker app and want to set "D7"
to "HIGH"
via the "digitalWrite"
function:
myDevice.callFunction("digitalWrite", "D7", "HIGH")
.then(result => console.log(`Result: ${result}`))
.catch(error => console.log(`Error in callFunction: ${error}`));
<device>.getVariable
Getting a variable is quite similar to callFunction
.
Let's say you have a variable named "analogvalue"
, then this will give you the current state of that variable:
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
You can get notified in your app in case an app on one of your devices publishes an event.
To suppress noise you can filter those events by supplying a prefix, in this case my-prefix-
, so events like my-prefix-temp
or my-prefix-sensorOn
are caught:
const myDevice: TNSParticleDevice = null; // you got this from 'listDevices'
myDevice.subscribe(
"my-prefix-",
(event: TNSParticleEvent) => console.log(`device event: ${JSON.stringify(event)}`));
<device>.unsubscribe
To stop receiving published events from your devices, unsubscribe from the events. Make sure the prefix is equal to the one you previously subscribed with.
myDevice.unsubscribe("my-prefix-");
<device>.unclaim
Removes this device from your account.
myDevice.unclaim();
markoImake for adding a few very cool features.
Happy IoT'ing!
NativeScript 可以使用 Javascript,CSS, XML 创建真正的 Native 跨平台应用,支持 iOS Android,NativeScript 将您的跨平台代码翻译成目标平台的代码。 UI 使用 XML 描述,CSS 样式,在编译时将 UI 转化成本地原生代码,最终得到正在的 Native 原生应用。 Telerik 公开了用于创建安卓、iOS和Windows Unive
NativeScript Command-Line Interface The NativeScript CLI lets you create, build, and deploy NativeScript-based apps on iOS and Android devices. Get it using: npm install -g nativescript What is Native
NativeScript-Snackbar �� �� �� NativeScript plugin for Material Design SnackBar component. Installation: NativeScript 7+:tns plugin add @nstudio/nativescript-snackbar NativeScript version prior to 7:t
Nativescript-Ripple This plugin aims to bring a native (or close to native) ripple implementation on Android and iOS. The android version uses a RippleDrawable and conserves the previous background, a
NativeScript-FloatingActionButton NativeScript plugin for Material Design Floating Action Button UI component. Installation Nativescript 7+: ns plugin add @nstudio/nativescript-floatingactionbutton Na
NativeScript CardView A NativeScript plugin to provide an XML widget to implement the Material Design CardView component. Installation NativeScript 7+: ns plugin add @nstudio/nativescript-cardview Nat