IoT at a glance (Summary)

This was summary from my hard-skill presentation at my office. So starting from February, the Software Engineer team at my office agreed to conduce a weekly sharing. (We’ve had a soft-skill discussion once a week) I volunteer myself as a second presenter (the first turn has taken by the other). At first I was confused to choose the topic that I want to share. Some friends told me to share about PID control system which was being implemented in our system. But I think there are some things that I have not yet understand (about the integral windup parameter and such). So I started to look into another topics. One that comes in mind is IoT. Which couple days before, my friend Marsel, let me brought his Raspberry Pi because he didn’t have a plan about it yet. So I thought it may be fine if I share a little about IoT and Single Board Computer (in this case, Raspberry Pi).

Finally, the day has come, and here’s my presentation:

IoT at a Glance. IoT (Internet of Things) is the inter-networking of physical devices, vehicles (also referred to as “connected devices” and “smart devices”), buildings and other items – embedded with electronics, software, sensors, actuators, and network connectivity – that enable these objects to collect and exchange data. Physical devices could be anything .

For example cars (nowadays, there were already cars which has its own operating system), aquarium (you could make automatic feeder or such), bags, shoes, even door or window, and so many things which only limited by our own ideas.

One of an important component of an IoT system is its embedded smart electronic system which connected the non-connected things into world-wide network so it can be accessed through internet. And I take SBC as an example. A single-board computer (SBC) is a complete computer built on a single circuit board, with microprocessor(s), memory, input/output (I/O) and other features required of a functional computer. (*) There are many SBC which are available to buy. Some of them are Raspberry Pi, BeagleBoard, Odroid, etc. And they have their own dis/advantages.

But I choose Raspberry Pi as an example because it’s the one that I currently brought right now (it’s my friend’s actually). The Raspberry Pi is a series of small single-board computers developed in the United Kingdom by the Raspberry Pi Foundation to promote the teaching of basic computer science in schools and in developing countries. The detailed specifications could be read here. Raspberry also develop its own operating system called Raspbian. Raspbian is a free operating system based on Debian optimized for the Raspberry Pi hardware. Raspbian uses PIXEL, Pi Improved Xwindows Environment, Lightweight as its main desktop environment as of the latest update. It is composed of a modified LXDE desktop environment and the Openbox stacking window manager with a new theme and few other changes.

One thing that makes SBC could be used to create embedded devices is its GPIO. GPIO is general purpose input output. Unlike the other I/O, this port is not specifically designed for specific devices. This is the main feature of SBC and this what differ SBC with PC. We can explore this GPIO as much as we want. Connecting any sensors, or actuators. The GPIO voltage is 3.3v each. It was disabled by default. You can enabled it by runtime. Here’s GPIO port map of Raspberry Pi.

188681-c06f001.jpg

And finally I would like to show how Raspberry run. Default Raspbian user account is pi/raspberry (user/password). And for the latest version (Pi 3 model B) which has included Broadcomm wifi, we could connect to available network via wifi by : edit files in /etc/wpa_supplicant/wpa_supplicant.conf

Add these lines:

network={
ssid=’network-name’
psk=’network-pass’
}

And then restart wifi (sudo ifdown wlan0 , sudo ifup wlan0).

And I also give ideas for sample project using Python and Twitter REST API. With this ideas, you can build a system to automatically switch on/off your water system in your house just by tweets.

And, that’s all.
*sorry for my English

Advertisements

Membangun aplikasi menggunakan Android Studio 2.1 (1)

Pada akhir pekan yang panjang ini, saya tertarik kembali mempelajari pembuatan aplikasi android. Terakhir mencoba sudah lama dulu masih memakai Eclipse IDE + Android SDT dan itupun masih menghitung luas segitiga. Dan sejak android meluncurkan IDE sendiri (Android Studio) , saya belum pernah benar-benar mencobanya. Install di laptop sudah pernah, tapi ya itu, dianggurkan saja.

Karena sudah lama sekali, maka saya lupa bagaimana dasar menggunakan android studio, cara debug langsung pada device androidnya. Kalau bahasanya (XML, Java) saya memang belum menguasainya. Bukan lupa. Ehe.

Oleh sebab itulah, kali ini, saya berusaha mendokumentasikan caranya agar kelak ketika lupa dapat membuka tulisan ini. Dan siapatau ada yang membutuhkan, semoga bermanfaat. Okesip.

Sebagai catatan, saya menggunakan Sistem operasi Ubuntu 16.04 LTS 32bit, Android Studio 2.1 (SDK lolipop dan marsmallow), serta device Xiaomi Mi4i untuk debug.

Pertama, pasang adb pada ubuntu dengan menggunakan commandline :

sudo apt-get install adb

Kemudian unduh android studio dari : https://developer.android.com/sdk/index.html

extract , dan letakkan pada /opt/ .

Jalankan dengan perintah

./opt/android-studio/bin/studio.sh

Akan muncul Android Studio Setup Wizard, untuk pengaturan awal aplikasi. Selesaikan proses tersebut.

Start new project

Isi semua field, dan pilih blank activity sebagai percobaan awal

pilih blank activity buat awal
pilih blank activity buat awal

ketika memilih minimum android version, sesuaikan dengan device kita (yang saya gunakan bersistem operasi Lolipop 5.0.2 , dan saya memilih Kitkat 4.4 pada minimum version)

Ketika selesai kita akan menemui tampilan editor android studio dengan default program Hello World.

tampilan IDE android studio
tampilan IDE android studio

Setelah itu coba jalankan pada device anda (ini yang sempat bermasalah) dengan klik Run, dan pilih device anda. Saat itu error message yang muncul adalah :

Unable to create Debug Bridge: Unable to start adb server: Unable to detect adb version, adb output: /Sdk/platform-tools/adb: 1: /Sdk/platform-tools/adb: Syntax error: “)” unexpected

Dari hasil bertanya dengan sesepuh google, saya menemukan jawaban di stackoverflow, bahwa masalah terletak pada platform-tools versi 23.1.0 pada Sistem Operasi Linux 32-bit. Yang perlu dilakukan ialah downgrade ke platform-tools versi 23.0.1 yang dapat diunduh dari https://dl-ssl.google.com/android/repository/platform-tools_r23.0.1-linux.zip

setelah selesai unduh, pindah file ke direktori sdk ( ~/Android/Sdk/ ) lalu rename folder platform-tools yang ada agar tidak conflict, kemudian unzip.

mv platform-tools_r23.0.1-linux.zip ~/Android/Sdk
cd ~/Android/Sdk
mv platform-tools platform-tools-notworking
unzip platform-tools-r23.0.1-linux.zip

Tutup program android studio, lalu jalankan lagi.

Buka project Helloworld yang sudah dibuat, lalu Run

dan voila! maka program akan dipasang pada device android yang terhubung dan dijalankan.

Magento custom order state

magento

Akhirnya diberi kesempatan untuk menuliskan sesuatu di blog ini. Sebenarnya sudah beberapa waktu lalu ingin menulis namun apadaya laptop error dan kerjaan di kantor tidak dapat disambi ngeblog. Dan tulisan kali ini ialah mengenai Magento. Magento adalah platform eCommerce yang cukup lengkap yang berdasar dari ZendPHP framework. Banyak toko jual beli online yang menggunakan platform ini dikarenakan fitur yang sangat banyak, namun salah satu kekurangan dari magento (yang sepertinya sekarang sudah sedikit teratasi) ialah dokumentasi program yang minim.

Kali ini saya akan membagi (sebenarnya sih menyimpan) cara membuat custom order state di Magento. Order state ialah state pesanan yang dikenali oleh program. Pada dasarnya ada 8 state di Magento yaitu :

new, pending_payment, holded, payment_review, cancelled, closed, processing, complete.

Namun ada kemungkinan suatu sistem jual beli membutuhkan state lain pada prosesnya semisal cicilan_pertama atau lainnya. Nah dikarenakan pengguna tidak dapat membuat order state baru melalui menu di backend, maka perlu dibuat modul/extension untuk custom orderstate.

Berikut beberapa langkah yang saya coba (dan telah diuji keberhasilannya) untuk membuat custom order state pada magento:

pertama buatlah modul dan tentukan namanya (misal. CustomState)

daftarkan modul pada aplikasi anda dengan membuat file pada : app/etc/modules/(nama_toko_anda)_CustomState.xml

format:

<?xml version="1.0"?>
    <config>
        <modules>
            <(nama_toko_anda)_CustomState>
                <active>true</active>
                <codePool>local</codePool>
            </(nama_toko_anda)_CustomState>
         </modules>
    </config>

kemudian buat configuration files dari modul anda pada : app/code/local/<nama_toko_anda>/CustomState/etc/config.xml

berikut contoh file konfigurasinya :

<?xml version="1.0"?>
<config>
<modules>
<(nama_toko_anda)_CustomState>
<version>0.1.0</version>
</(nama_toko_anda)_CustomState>
</modules>
<global>
<resources>
<orderstate_setup>
<setup>
<module>(nama_toko_anda)_CustomState</module>
</setup>
<connection>
<use>core_setup</use>
</connection>
</orderstate_setup>
<orderstate_write>
<connection>
<use>core_write</use>
</connection>
</orderstate_write>
<orderstate_read>
<connection>
<use>core_read</use>
</connection>
</orderstate_read>
</resources>
<sales>
<order>
<statuses>
<payment translate="label">
<label>Angsuran 1</label>
</payment>
</statuses>
<states>
<payment translate="label">
<label>Diangsur</label>
<statuses>
<payment default="1"/>
</statuses>
</payment>
</states>
</order>
</sales>
</global>
</config>

dan tahap berikutnya ialah membuat skrip untuk memasukkan dalam SQL database dengan membuat file pada:

app/code/local/<your_store>/CustomState/sql/customstate_setup/mysql4-install-0.1.0.php

<?php
    $installer = $this;

    // Required tables
    $statusTable = $installer->getTable('sales/order_status');
    $statusStateTable = $installer->getTable('sales/order_status_state');

    // Insert statuses
    $installer->getConnection()->insertArray(
        $statusTable,
        array('status', 'label'),
        array(
            array(
                'status' => 'angsuran_1', 
                'label' => 'Angsuran 1'
            )
        )
    );

    // Insert states and mapping of statuses to states
    $installer->getConnection()->insertArray(
        $statusStateTable,
        array('status', 'state', 'is_default'),
            array(
                array(
                    'status' => 'angsuran_1', 
                    'state' => 'Diangsur', 
                    'is_default' => 1
                )
            )
        );

setelah semua selesai, masuk ke backend, system → cache management → flush magento cache.

flush cache magento
flush cache

Logout kemudian login kembali, dan cek state dan status baru anda di System → order statuses.

Capture
new order state

Sekian, semoga tidak menyesatkan, semoga bermanfaat.

Instalasi dan kompilasi TinyOS pada Ubuntu 13.10

downloadSistem operasi dari komputer yang saya gunakan ialah Ubuntu Saucy (13.10). Pada ubuntu, karena merupakan sistem operasi LINUX/UNIX maka hal yang pertama di lakukan untuk melakukan instalasi ialah menambahkan daftar repositori pada direktori /etc/apt/source.list.

 

Kemudian, lakukan instalasi tinyos dengan perintah

$ sudo apt-get install tinyos-source tinyos-tools nescc

Pada awal percobaan, nescc (nested-c compiler) gagal diinstall karena crash dengan paket aplikasi kate-data (dependency dari aplikasi video editor : KDEnlive). Hal ini membuat saya harus menghapus program editor video tersebut demi terpasangnya nescc.. Oleh karena itu saran saya untuk dapat menggunakan nescc anda harus menghapus segala sesuatu yang berhubungan dengan KDE (yang kira-kira memiliki dependency kate-data) terlebih lagi untuk pengguna desktop environment KDE, sebaiknya ganti dan hapus KDE tersebut.

Setelah semuanya berhasil dipasang, kemudian dilakukan pengecekan environment dengan perintah

$ tos-check-env

Setelah itu masuk ke direktori tinyos. Pada mulanya saya tidak tahu lokasinya, namun dengan bantuan perintah ‘locate tinyos’ akhirnya ditemukan bahwa instalasi tinyos disimpan dalam direktori /usr/src/tinyos . Kemudian, masuk ke direktori /tinyos/apps/. Di dalam direktori tersebut terdapat beberapa macam contoh aplikasi tinyOS yang sudah dibuat. Karena ingin mencoba kompilasi, maka saya menggunakan contoh kode dari sini. Program yang saya pilih ialah Radio Sense To leds. Program ini merupakan contoh pada platform sensor node dengan standar 4Hz dan mengirimkan paket data dalam AM packet. Node yang menerima broadcast menampilkan 3 bit nilai paling dasar yang diterima. Aplikasi ini sebagai contoh dasar penggunaan komunikasi AM, timer, dan kerja sensor dalam TinyOS. Untuk melakukan kompilasi diperlukan compiler untuk platform msp430. Maka dari itu saya melakukan instalasi paket msp430-gcc. Setelah itu, saya coba melakukan kompilasi. Daftar platform yang dapat digunakan sebagai target dapat dilihat di direktori /usr/src/tinyos/tos/platforms . Saya mencoba melakukan kompilasi untuk platform EyesIFX yang merupakan sensor node dengan mikrokontroler MSP430, dengan memori eksternal 8Mbit dan support TinyOS (http://en.wikipedia.org/wiki/List_of_wireless_sensor_nodes).

Untuk kompilasi digunakan perintah make <platform> , maka saya ketikkan di terminal :

$ make eyesIFX

Namun ternyata masih ditemukan error dengan pesan :

make: javac: Command not found

download (1)Ternyata diperlukan instalasi JDK (java development kit) untuk melakukan kompilasi aplikasi TinyOS. Maka saya melakukan instalasi lagi paket java jdk :

$ apt-get install openjdk-7-jdk

 

Setelah paket JDK berhasil dipasang, saya coba lagi perintah make, dan alhamdulillah, berhasil.
Berikut bukti screenshoot nya :

build for eyeIFXv2 success
build for eyeIFXv2 success

 

Program yang berhasil dibuat tersimpan dalam direktori:

/usr/src/tinyos/apps/<nama aplikasi>/build/<nama platform>

*contoh kalau punya saya di dalam direktori :

/usr/src/tinyos/apps/RadioSenseToLeds/build/eyesIFXv2

Sekian pengalaman instalasi dan kompilasi aplikasi TinyOS untuk platform msp430 menggunakan notebook Lenovo G460 dengan sistem operasi Linux (Ubuntu 13.10).

Memecah/Split File Menjadi Beberapa Bagian

Nah, kalau pada postingan sebelumnya dijelaskan bagaimana menyatukan file-file yang dipecah menjadi beberapa bagian dengan ukuran byte sama, maka pada postingan kali ini akan dijelaskan bagaimana cara memecah suatu file menjadi beberapa bagian dengan ukuran byte yang ditentukan. Dan caranya juga menggunakan command-line pada ubuntu/debian/linuxmint.

Perintah yang digunakan kali ini ialah split Split adalah salah satu perintah pada shell untuk memecah file menjadi beberapa bagian. Dan ada beberapa option pada split command yang dapat anda lihat dengan perintah :

split --help

Langsung saja akan saya beri contoh, misalkan pada folder master/sampel ada file eagle.deb yang ingin dipecah menjadi file-file berukuran 9 Mb. Printahnya ialah :

split -b9m -d eagle-lin-5.11.0.run eagle-lin-5.11.0.run.0

dan hasilnya ialah :

keterangan :

– option -b9m maksudnya yaitu file dipecah/dibagi dengan ukuran byte masing-masing 9 Mb.

– option -d artinya digunakan prefix numerik, karena pada default prefix yang digunakan ialah alfabet sehingga file akhir akan berakhiran : *.0a , *.0b , dst

– nama file pertama ialah nama file yang akan dipecah, lalu namakedua ialah nama file setelah dipecah.

Sekian post ini,jika ada pertanyaan atau komentar monggo disampaikan dibawah.

Menggabungkan File *.001 Menggunakan Command Line

Mungkin bagi anda yang gemar download film bajakan  sering mengalami masalah ketika file yang didownload memiliki akhiran *mkv.001 , *.mkv.002 , dst. File tersebut oleh pemilik sebelumnya telah di pecah/dibagi pada byte-level menjadi beberapa bagian yang (biasanya) sama besar. Dan jika kita menggunakan Sistem Operasi Wind#ws, kita memerlukan aplikasi pihak ketiga untuk menyatukan file-file pecahan tadi (ada atau tidak cara menyatukanya lewat command prompt saya tidak tahu :p). Namun bagi anda yang menggunakan Sistem Operasi berbasis debian (Debian, Linux Mint, atau Ubuntu) saya memiliki cara untuk menyatukan file-file pecahan tersebut hanya menggunakan command-line.

Berikut cara menyatukan file-file yang dipecah pada byte-level dengan mengikuti pola *.001 , *.002, *.003, dst :

Pertama buka terminal/console, lalu masukk ke direktori/folder tempat file pecahan tersebut berada

Kemudian, misal nama file aslinya adalah : worldpress.mkv dan dipecah menjadi > worldpress.mkv.001 , worldpress.mkv.002 , worldpress.mkv.003, dan berada di folder Downloads, maka cukup ketikkan perintah berikut:

cd /home/nama-user/Downloads/
cat worldpress.mkv.* > worldpress.mkv

tunggu beberapa saat hingga selesai, lalu cek di folder kerja anda maka akan ada 1 file baru yang merupakan hasil penggabungan ketiga file pecahan tersebut. Untuk catatan, perintah ini dapat digunakan untuk semua tipe file, tidak hanya mkv,  dan tentunya dengan penyesuaian pada command yang kita ketikkan.

Mengembalikan / Rescue GRUB yang Hilang

Salah satu masalah yang cukup ‘pasaran’ saat kita menggunakan dual-boot yaitu GRUB error (saat booting hanya tampak prompt dengan tulisan grub rescue) yang biasanya disebabkan ketika kita menginstall OS lain (sebut saja windows) setelah installasi linux. Namun anda tidak perlu panik karena hal tersebut dapat dengan mudah diperbaiki.

Untuk mengembalikan GRUB yang hilang tersebut diperlukan liveCD/liveUSB linux/ubuntu/os lain yang menggunakan GRUB sebagai bootloader. Kemudian boot PC anda menggunakan media tersebut dan ketika ada pilihan try/install, pilih try. Ketika sudah masuk, buka terminal dan ketikkan perintah berikut:

sudo fdisk -l

untuk menampilkan daftar partisi hardisk PC anda. Misalkan Linux/ubuntu anda berada di /dev/sda6 maka yang anda ketikkan :

sudo mount /dev/sda6 /mnt
sudo grub-install --root-directory=/mnt /dev/sda

jika tidak terjadi error maka reboot :

sudo reboot

dan GRUB anda akan kembali normal,

terimakasih.

semoga bermanfaat.

Arduino pada Ubuntu

Bismillah,

Jadi berawal dari tugas akhir mata kuliah Mikrokontroler yang mengharuskan untuk menggunakan device yang kompatibel dengan Arduino IDE , saya dan teman saya (kelompok 2 orang) memutuskan untuk membeli board Arduino Uno Rev.3 . Itu pun belinya nunggu lama karena stock arduino uno di toko elektronik 51 habis, juga di beberapa toko online yang masih inden. Sampai akhirnya teman saya menemukan sebuah online-store yang ready-stock untuk Arduino Uno. Dan ini penampakan arduino uno (unboxed) :

Kenapa harus Uno? bukan Mega/Leonardo/Nano/Lilypad sekalian? Ya sebenernya tergantung kebutuhan juga sih, dan juga salah satu aspek yang menentukan yaitu : budget! Dengan harga pasaran Rp 270.000,00 – Rp 290.000 , Arduino Uno Rev.3 sudah cukup untuk membuat perangkat elektronik cerdas karena memiliki 14 pin I/O dengan 6 Analog Pin, VRef 5V , dan lain lain (bisa cek di website nya untuk spesifikasi lengkap). Untuk menghubungkan arduino dengan PC/Notebook digunakan kabel USB DKU (sama seperti kabel printer).

Pertama kali saya mencoba mengisi program pada arduino tersebut melalui windows, dan itu hal yang mudah (tinggal install driver,dan jadi). Kemudian saya jadi ingin mencoba menggunakan Ubuntu untuk mengunggah sketch (nama source-code yang digunakan arduino) ke Uno saya. Setelah googling beberapa saat akhirnya saya dapat menghubungkan Arduino Uno saya ke Ubuntu 12.04. Berikut saya berikan langkah nya :

1. Unduh dan pasang beberapa package yang dibutuhkan yaitu : avr-libc, avrdude, binutils-avr, gcc-avr, arduino, openjdk-6-jre. Caranya seperti biasa, menggunaka apt-get :

$ sudo apt-get install avr-libc avrdude binutils-avr gcc-avr arduino openjdk-6-jre

2. Kemudian hapus package brltty karena kemungkinan akan crash dengan port komunikasi serial.
$ sudo apt-get remove brltty

3 .  Setelah selesai, hubungkan arduino board ke PC/notebook anda, dan ketikkan pada terminal :

$ dmesg | grep tty
[ 0.000000] console [tty0] enabled
[ 81.653857] usb 2-1.2: GSM modem (1-port) converter now attached to ttyUSB0
[ 81.654028] usb 2-1.2: GSM modem (1-port) converter now attached to ttyUSB1
[ 81.654167] usb 2-1.2: GSM modem (1-port) converter now attached to ttyUSB2
[ 81.654287] usb 2-1.2: GSM modem (1-port) converter now attached to ttyUSB3
[ 8069.049542] cdc_acm 2-1.4:1.0: ttyACM0: USB ACM device

dari pesan tersebut nampak pada notebook saya ada devive baru dikenali pada port serial ttyACM0.

4. kemudian buka IDE arduino dengan mengetikkan:

$ arduino

5. Pada menu Tools/Serial Port , pilih port serial sesuai dengan milik anda, (misal milik saya /dev/ttyACM0 , sesuai dengan yang tadi muncul)

6. Coba salah satu example dan upload

7. Ketika selesai dan benar maka muncul tulisan : Done Uploading pada bagiam bawah.

Selesai! Alhamdulillah ..

Kiranya sekian saja tulisan saya kali ini, semoga bermanfaat. Saya juga masih newbie dalam dunia linux dan arduino jadi jika ada yang mau mengkoreksi tulisan ini saya persilakan. Dan kalau ada yang mau bertanya juga saya persilakan,insyaAllah saya jawab kalau memang saya tau jawabannya. Terimakasih atas kunjungannya. Ada kurangnya mohon maaf.