wIoT - A distributed IoT operating system basing on NodeJS
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

11 KiB

wIoT

FOSSA Status version language license download contributors last commit

github star github forks gitHub watchers

An awesome project.

System Primitives

Wire

Generate a new wire, which can transport and persist data.

Syntax

new wiot.wire([default_value = 0[, isPersist = false]])

Parameters

  • default_value: (Optional) The default value of this wire when initializing.
  • isPersist: (Optional) Persist the data in Flash so after restart the data can be recovered from Flash.

Returns

wire Object: wire object that serves as a parameter of other primitives.

Example

let wire1 = new wiot.wire();
let wire2 = new wiot.wire(15); //Initizlize as 15
let wire3 = new wiot.wire(15, true); //Persist in Flash

Buffer

Buffer is used to connected two wires. Only when the data in input wire has been changed and held for a peroid, the new data can be synchronized to the output wire.

Syntax

wiot.buffer(node, wire_output, wire_input[, delay_s = 0[, isSyncAtInit = false]])

Parameters

  • node: The node object to run the buffer.
  • wire_output: The wire object as the output.
  • wire_input: The wire object as the input.
  • delay_s: (Optional) The peroid for the changed input data to hold in seconds.
  • isSyncAtInit: (Optional) Whether to synchronize the two wire at system startup.

Returns

primitive object

Example

let node1 = new wiot.node.nodemcu('abcde');

let wire1 = new wiot.wire();
let wire2 = new wiot.wire(15); //Initizlize as 15

wiot.buffer(node1, wire2, wire1, 3); //when wire1 changes and hold for 3 seconds,
									// the wire2 will be updated with the data in wire1

Operate

Operate is used to determine the relationship among wires.

Syntax

wiot.operate(node, expression, wire_output, ...wires_input)

Parameters

  • node: The node object to run the operate.
  • expression: The expression between the output wire and the input wires. The first wire_input will be $0, the second wire_input will be $1...
  • wire_output: The wire object as the output.
  • wires_input: The wire objects as the inputs.

Returns

primitive object

Example

let node1 = new wiot.node.nodemcu('abcde');

let wire1 = new wiot.wire();
let wire2 = new wiot.wire(15);
let wire3 = new wiot.wire(1);

wiot.operate(node1, '$0+$1', wire1, wire2, wire3); //wire1=wire2+wire3
													// After startup, the wire1 will be 16

NodeMCU Primitives

gpio

Method to operate the PINs on NodeMCU board.

Syntax

wiot.gpio(node, mode, pin, wire)

Parameters

  • node: The node object to run the gpio.
  • mode: Determine the mode of PIN. wiot.INPUT or wiot.OUTPUT.
  • pin: Which PIN to use. e.g. node.D3
  • wire: The wire object as the output/input.

Returns

primitive object

Example

let node1 = new wiot.node.nodemcu('abcde');

let wire1 = new wiot.wire();

//when D3 is LOW/HIGH, set D4 to be LOW/HIGH
wiot.gpio(node1, wiot.INPUT, node1.D3, wire1);
wiot.gpio(node1, wiot.OUTPUT, node1.D4, wire1);

adc

Method to get the input voltage of the Analog Pin (D0).

Syntax

wiot.adc(node, wire_output)

Parameters

  • node: The node object to run.
  • wire_output: The wire object as the output.

Returns

primitive object

Example

let node1 = new wiot.node.nodemcu('abcde');

let wire1 = new wiot.wire();

wiot.adc(node1, wire1);

pwm

Method to launch a PWM pulse on appointed PIN.

Syntax

wiot.pwm(node, pin, wire_duty, wire_clock)

Parameters

  • node: The node object to run.
  • pin: Which PIN to use. e.g. node.D3
  • wire_duty: The wire object to control the duty.
  • wire_clock: The wire object to control the clock frequency.

Returns

primitive object

print

Print a message via UART.

Syntax

wiot.print(node, ...wires_input)

Parameters

  • node: The node object to run.
  • wires_input: The wire object to need to be print to console when changed.

Returns

primitive object

sjson_encode

Convert a Lua table into JSON format string.

Syntax

wiot.sjson_encode(node, wire_output, wire_input)

Parameters

  • node: The node object to run.
  • wire_output: The wire object that will receive the encoded JSON string.
  • wire_input: The wire object of the input Lua table.

Returns

primitive object

sjson_decode

Convert a JSON format string into Lua table.

Syntax

wiot.sjson_decode(node, wire_output, wire_input)

Parameters

  • node: The node object to run.
  • wire_output: The wire object that will receive the decoded Lua table.
  • wire_input: The wire object of the input JSON string.

Returns

primitive object

udp

Setup a UDP server.

Syntax

wiot.udp(node, wire_res_ip, wire_res_port, wire_res_data, wire_send_ip, wire_send_port, wire_send_data[, localport = parseInt(Math.random()*20000)+10000])

Parameters

  • node: The node object to run.
  • wire_res_ip: The wire object that identify the IP of the bind.
  • wire_res_port: The wire object of the port to listen to.
  • wire_res_data: The wire object that will receive the incoming data.
  • wire_send_ip: The wire object of the ip of target.
  • wire_send_port: The wire object of the port of target.
  • wire_send_data: The wire object of the data to be sent.
  • localport: The local UDP server port.

Returns

primitive object

tcp

Setup a TCP server.

Syntax

wiot.tcp(node, host, port, wire_res_data, wire_send_data)

Parameters

  • node: The node object to run.
  • host: The wire object that identify the IP of the server.
  • port: The wire object of the port to listen to.
  • wire_res_data: The wire object that will receive the incoming data.
  • wire_send_data: The wire object of the data to be sent.

Returns

primitive object

http

HTTP request.

Syntax

wiot.http(node, wire_statusCode, wire_res, wire_url[, wire_body = new wiot.wire(`''`)[, header = 'nil'[, method = 'GET']]])

Parameters

  • node: The node object to run.
  • wire_statusCode: The wire object of the status code.
  • wire_res: The wire object of the received data.
  • wire_url: The wire object of the request URL.
  • wire_body: The wire object of the body of the sent data.
  • header: The header of HTTP request.
  • method: The HTTP method. e.g. GET, POST, HEADER, REQUEST, DELETE, PUT

Returns

primitive object

bigiot

Connect to bigiot. Can be used to connect 天猫精灵 and 小爱同学.

Syntax

wiot.bigiot(node, DeviceID, APIkey, wire_output, wire_trigger)

Parameters

  • node: The node object to run.
  • DeviceID: Device ID of the device on bigiot.
  • APIkey: API key of the bigiot application.
  • wire_output: The wire of the data sent to bigiot.
  • wire_trigger: The wire to trigger a request.

Returns

primitive object

mail

Send a email.

Syntax

wiot.mail(node, wire_en, wire_to, wire_subject, wire_body[, from = 'wiot'])

Parameters

  • node: The node object to run.
  • wire_en: The wire to trigger a mail sending.
  • wire_to: The wire of the target email address.
  • wire_subject: The wire of the subject.
  • wire_body: The wire of the email body.
  • from: The title of sender.

Returns

primitive object

memobird

Print using memobird.

Syntax

wiot.memobird(node, AppKey, UserID, memobirdID, wire_en, wire_body)

Parameters

  • node: The node object to run.
  • AppKey: The application key from memobird.
  • UserID: The user ID of memobird account.
  • memobirdID: The ID of the memobird.
  • wire_en: The wire of the trigger.
  • wire_body: The wire of the body of the printed data.

Returns

primitive object

redis

Connect to Redis.

Syntax

wiot.redis(node, host, channel, wire_res, wire_send[, port = 6379])

Parameters

  • node: The node object to run.
  • host: The host of Redis server.
  • channel: The channel to join.
  • wire_res: The wire object to put the received data.
  • wire_send: The wire of the sent data.
  • port: The port of the Redis server.

Returns

primitive object

webpage

Generate and launch a web page.

Syntax

wiot.webpage(node, key, template[, wires_output_map = {}[, wires_input_map = {}[, interval_s = 0.4[, host = 'http://wiot-webpage.yimian.xyz/']]]])

Parameters

  • node: The node object to run.
  • key: The access key of the webpage application.
  • template: The template of the webpage.
  • wire_output_map: The output map of the webpage.
  • wire_input_map: The input map of the webpage.
  • interval_s: The interval to check the status (AJAX) in seconds.
  • host: The host of the webpage server.

Returns

primitive object

Operators

if

Method to achieve a IF function in the wiot.operate's expression.

Syntax

wiot.if(condition, ifYes, ifNo)

Parameters

  • condition: The condition to determine which of the following expression to be used.
  • ifYes: The expression to be used when the condition is true.
  • ifNo: The expression to be used when the condition is not true.

Returns

String Expression

Example

//Button controller breathing LED

let w = new wiot.wire(0),
	w1 = new wiot.wire(10),
	w2 = new wiot.wire(),
	w3 = new wiot.wire();

let node =  new wiot.node.nodemcu('abcde');

wiot.gpio(wiot.INPUT, node.D3, w3, node);
wiot.pwm(node.D4, w2, new wiot.wire(500), node);


wiot.operate(wiot.if(`$1==1`, `math.abs($0%2047-1023)`, `1023`), node, w2, w, w3);
wiot.operate('($0+10)%2048', node, w, w1);
wiot.buffer(w1, w, node, .001, true);

Modules

breathing

This will generate a breathing signal.

Syntax

wiot.breathing(node, period_s, wire_output)

Parameters

  • node: The node object to run.
  • period_s: The period of breathing in seconds.
  • wire_output: The output wire.

Returns

primitive object