Tutorial Mongoose OS – 2 : Menghubungkan ke mDash
Internet of things adalah jaringan antar perangkat (thing) seperti kendaraan, perabot rumah tangga yang terdiri dari elektronika perangkat keras, software dan konektivitas antar perangkat yang memungkinkan semuanya untuk saling berkomunikasi, beriteraksi dan bertukar data.
Setelah pada tulisan sebelumnya kita telah menginstal Mongoose OS pada ESP8266 dan menghubungkannya dengan Internet melalui jaringan Wi-Fi. Pada sesi ini, penulis akan menunjukan bagaimana melakukan setup lanjutan untuk menghubungkan ESP8266 dengan Dashboard milik Mongoose yang bernama mDash
Diasumsikan pembaca telah mengikuti tulisan sebelumnya tentang bagaimana menginstal Mongoose OS pada ESP8266. Jika belum, sangat direkomendasikan untuk membacanya terlebih dahulu sebelum melanjutkan tulisan ini.
- Login ke mDash
Buka dan login ke mDash melalui alamat dash.mongoose-os.com. Daftar jika belum memiliki akun mDash, jika ingin praktis, dapat digunakan akun Google ataupun akun Github untuk login. Pada halaman dashboard klik button Add new device. mDash akan membuat 1 device bernama My Device #1 yang muncul pada tabel
Klik tautan pada kolom tabel Token (
***cc0c
), ini sama dengan meng-copy kode token dari My Device #1
yang baru saja dibuat. Lalu pada mos tool ketikan perintah berikut pada command input
mos config-set dash.enable=true dash.token=TOKEN_HERE
ganti TOKEN_HERE
dengan kode token yang tadi dicopy dari mDash lalu tekan enter.
Adverstiment
Perhatikan pada log device yang awalnya status online: false
setelah kode token dimasukan akan berubah menjadi status online: true
, status device pada mDash juga akan berubah menjadi online lengkap dengan nama aplikasi hingga arsitektur dari device.
Begitupula version
pada kolom Device Shadow akan terus bertambah berdasarkan data yang dikirim oleh ESP8266. Klik tanda + pada Device Shadow untuk melihat lebih lengkap tentang uptime report.
Pada checkpoint ini mDash sudah terhubung dengan ESP8266, data yang dikirimkan oleh perangkat. juga akan dapat diakses melalui dashboard mDash.
Adverstiment
- Ubah Program
Mari bereksplorasi lebih lanjut, buka direktori tempat aplikasi berada di C:\mos\app1\
lalu klik buka dengan code editor (bisa dengan notepad++) file init.js
yang berada di subdirektori fs
. Penulis akan mengubah beberapa baris di baris 23 dan baris 38 menjadi sebagai berikut
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
load('api_aws.js'); | |
load('api_azure.js'); | |
load('api_config.js'); | |
load('api_dash.js'); | |
load('api_events.js'); | |
load('api_gcp.js'); | |
load('api_gpio.js'); | |
load('api_mqtt.js'); | |
load('api_shadow.js'); | |
load('api_timer.js'); | |
load('api_sys.js'); | |
load('api_watson.js'); | |
let btn = Cfg.get('board.btn1.pin'); // Built-in button GPIO | |
let led = Cfg.get('board.led1.pin'); // Built-in LED GPIO number | |
let onhi = Cfg.get('board.led1.active_high'); // LED on when high? | |
let state = {on: false, btnCount: 0, uptime: 0}; // Device state | |
let online = false; // Connected to the cloud? | |
let setLED = function(on) { | |
let level = onhi ? on : !on; | |
GPIO.write(led, level); | |
print('halo MongooseOS LED on ->', on); | |
}; | |
GPIO.set_mode(led, GPIO.MODE_OUTPUT); | |
setLED(state.on); | |
let reportState = function() { | |
Shadow.update(0, state); | |
}; | |
// Update state every second, and report to cloud if online | |
Timer.set(1000, Timer.REPEAT, function() { | |
state.uptime = Sys.uptime(); | |
state.ram_free = Sys.free_ram(); | |
print('online:', online, JSON.stringify(state)); | |
print('ini embeddednesia.com'); | |
if (online) reportState(); | |
}, null); | |
// Set up Shadow handler to synchronise device state with the shadow state | |
Shadow.addHandler(function(event, obj) { | |
if (event === 'UPDATE_DELTA') { | |
print('GOT DELTA:', JSON.stringify(obj)); | |
for (let key in obj) { // Iterate over all keys in delta | |
if (key === 'on') { // We know about the 'on' key. Handle it! | |
state.on = obj.on; // Synchronise the state | |
setLED(state.on); // according to the delta | |
} else if (key === 'reboot') { | |
state.reboot = obj.reboot; // Reboot button clicked: that | |
Timer.set(750, 0, function() { // incremented 'reboot' counter | |
Sys.reboot(); // Sync and schedule a reboot | |
}, null); | |
} | |
} | |
reportState(); // Report our new state, hopefully clearing delta | |
} | |
}); | |
if (btn >= 0) { | |
let btnCount = 0; | |
let btnPull, btnEdge; | |
if (Cfg.get('board.btn1.pull_up') ? GPIO.PULL_UP : GPIO.PULL_DOWN) { | |
btnPull = GPIO.PULL_UP; | |
btnEdge = GPIO.INT_EDGE_NEG; | |
} else { | |
btnPull = GPIO.PULL_DOWN; | |
btnEdge = GPIO.INT_EDGE_POS; | |
} | |
GPIO.set_button_handler(btn, btnPull, btnEdge, 20, function() { | |
state.btnCount++; | |
let message = JSON.stringify(state); | |
let sendMQTT = true; | |
if (Azure.isConnected()) { | |
print('== Sending Azure D2C message:', message); | |
Azure.sendD2CMsg('', message); | |
sendMQTT = false; | |
} | |
if (GCP.isConnected()) { | |
print('== Sending GCP event:', message); | |
GCP.sendEvent(message); | |
sendMQTT = false; | |
} | |
if (Watson.isConnected()) { | |
print('== Sending Watson event:', message); | |
Watson.sendEventJSON('ev', {d: state}); | |
sendMQTT = false; | |
} | |
if (Dash.isConnected()) { | |
print('== Click!'); | |
// TODO: Maybe do something else? | |
sendMQTT = false; | |
} | |
// AWS is handled as plain MQTT since it allows arbitrary topics. | |
if (AWS.isConnected() || (MQTT.isConnected() && sendMQTT)) { | |
let topic = 'devices/' + Cfg.get('device.id') + '/events'; | |
print('== Publishing to ' + topic + ':', message); | |
MQTT.pub(topic, message, 0 /* QoS */); | |
} else if (sendMQTT) { | |
print('== Not connected!'); | |
} | |
}, null); | |
} | |
Event.on(Event.CLOUD_CONNECTED, function() { | |
online = true; | |
Shadow.update(0, {ram_total: Sys.total_ram()}); | |
}, null); | |
Event.on(Event.CLOUD_DISCONNECTED, function() { | |
online = false; | |
}, null); |
Pada fungsi setLED
, penulis ubah satu baris print menjadi
[/js]
Juga pada fungsi Timer yang ditrigger tiap satu detik, penulis ubah menjadi
[js] Timer.set(1000, Timer.REPEAT, function() {state.uptime = Sys.uptime();
state.ram_free = Sys.free_ram();
print(‘online:’, online, JSON.stringify(state));
print(‘ini embeddednesia.com’);
if (online) reportState();
}, null);
[/js]
Kemudian build dengan mos tool
sebagaimana tutorial sebelumnya dengan menggunakan command mos build
- Advertisement -
- Update Firmware Over The Air
Pada tutorial sebelumnya, telah ditunjukan bagaimana menggunakan perintah mos flash untuk melakukan flashing firmware melalui antarmuka serial. Lalu bagaimana jika anda mempunyai banyak perangkat yang tersebar di lebih dari 100 titik hingga luar kota, bahkan luar pulau dan kemudian dihadapkan pada keharuskan untuk mengupdate firmware perangkat. Tentu menjadi tidak efisien jika harus mendatangi perangkat tersebut satu persatu hanya untuk mengupdate firmware masing – masing perangkat. Untung dengan mDash, programmer dapat mengupdate firmware secara remote melalui jaringan internet atau OTA (over the air)
Caranya, pada mDash klik button OTA update Selected > Choose firmware .zip file lalu pilih lokasi fw.zip di c:\mos\build\fw.zip
Tunggu beberapa saat hingga proses update firmware selesei
Setelah proses update firmware selesei, buka mos tool
dan perhatikan pada console log akan menampilkan print sebagaimana ditunjukan pada langkah sebelumnya