Membuka drive NTFS di Mac


Sekedar sharing bagaimana caranya membuka partisi ntfs di Mac, bagi sebagian pengguna Mac membuka partisi ntfs tidak semudah seperti pengguna windows karena memang mac sendiri tidak menggunakan ntfs sebagai primary partition, dan ribetnya adalah ketika akan membuka harddisk eksternal yang kebanyakan berpartisi ntfs kita tidak bisa write disitu jadi hanya read mode saja, dan ini terjadi pada diri saya yang kebetulan menggunakan Mac OS dirumah dan berbagai macam OS dikantor.

Yah langsung aja begini caranya, sebenarnya ada berbagai macam cara dan yang paling mudah adalah download aplikasi berbayar dan langsung bisa digunakan, dan cara agak ribetnya adalah tapi gratis adalah seperti dibawah ini.

Pertama tama adalah download Fuse For Mac disini terus buka terminal terus ketik ini

xcode-select --install

Kalau belum diinstall terus install, kemudian install brew ikuti langkah disini kalau udah install ntfs-3g menggunakan brew

brew install ntfs-3g

Continue reading Membuka drive NTFS di Mac

Advertisements

Displaying data from RHF1S001 in node-red


rhf1s001The RisingHF’s Temperature and humidity LoRaWAN sensor node RHF1S001 is aimed at outdoor application with it’s IP64 protection level. And thanks to it’s high performance internal antenna and LoRa technology used, the sensor could operate in extremely hard environment or ultra-long range application. In addition to all above, the ultra-low sleep current help it to work in a long life, 5 years (uplink every 2 minutes) or even 10 (uplink every 5 minutes) years.

Here is sample code to displaying data to dashboard node-red, Raw data taken from MQTT convert to JSON Object.

Screenshot from 2018-07-03 07-53-19

[{"id":"4e63f2ca.376b64","type":"mqtt in","z":"b6605d08.a927b","name":"","topic":"thrf/#","qos":"2","broker":"ce3645f8.a18d78","x":70,"y":2920,"wires":[["9c30a7cc.16ac38"]]},{"id":"a4fb0e04.52f6b","type":"function","z":"b6605d08.a927b","name":"decode temp","func":"var obj = msg.payload;\nvar data = obj.data;\n\nvar temp1 = data.toString().substr(2, 2);\nvar temp2 = data.toString().substr(4, 2);\nvar temp = temp2 + temp1;\n// var tmp = \"0x\" + temp; \n\nfunction hexToDec(hex) {\n return hex.toLowerCase().split('').reduce( (result, ch) =>\n result * 16 + '0123456789abcdefgh'.indexOf(ch), 0);\n}\n\nvar value = hexToDec(temp);\n\nvar t = ((175 * value)/65536) - 46.85;\n\nmsg.payload = t.toFixed(2);\n// return msg;\n// msg.payload = obj.data;\nreturn msg;","outputs":1,"noerr":0,"x":430,"y":2980,"wires":[["db7f0faf.eec008"]]},{"id":"de0b9d41.21bd3","type":"function","z":"b6605d08.a927b","name":"data","func":"var obj = msg.payload;\nmsg.payload = obj.data;\nreturn msg;","outputs":1,"noerr":0,"x":410,"y":2920,"wires":[["88553271.5b5678"]]},{"id":"88553271.5b5678","type":"debug","z":"b6605d08.a927b","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":590,"y":2920,"wires":[]},{"id":"9c30a7cc.16ac38","type":"json","z":"b6605d08.a927b","name":"","property":"payload","action":"obj","pretty":true,"x":210,"y":2920,"wires":[["de0b9d41.21bd3","a4fb0e04.52f6b","3ef4e4a1.49fcac","cbbcecc.d9fbc9"]]},{"id":"3ef4e4a1.49fcac","type":"function","z":"b6605d08.a927b","name":"decode hum","func":"var obj = msg.payload;\nvar data = obj.data;\n\n\nvar humidity = data.toString().substr(6, 2);\n// var hum = \"0x\" + humidity; \n\nfunction hexToDec(hex) {\n return hex.toLowerCase().split('').reduce( (result, ch) =>\n result * 16 + '0123456789abcdefgh'.indexOf(ch), 0);\n}\n\nvar value = hexToDec(humidity);\n\n\nvar RH = (((125 * value)/256) -6);\n\nmsg.payload = RH.toFixed(2);\n\n// return msg;\n// msg.payload = obj.data;\nreturn msg;","outputs":1,"noerr":0,"x":430,"y":3040,"wires":[["3dd9c892.32f9b8"]]},{"id":"cbbcecc.d9fbc9","type":"function","z":"b6605d08.a927b","name":"decode batt","func":"var obj = msg.payload;\nvar data = obj.data;\nvar batt = data.toString().substr(16, 2);\n\nfunction hexToDec(hex) {\n return hex.toLowerCase().split('').reduce( (result, ch) =>\n result * 16 + '0123456789abcdefgh'.indexOf(ch), 0);\n}\n\n\n\nmsg.payload = (hexToDec(batt) + 150) * 0.01;\n\n// msg.payload = RH.toFixed(2);\n\n// return msg;\n// msg.payload = obj.data;\nreturn msg;","outputs":1,"noerr":0,"x":430,"y":3100,"wires":[["c70731a.a7ba85"]]},{"id":"3dd9c892.32f9b8","type":"ui_chart","z":"b6605d08.a927b","name":"","group":"44b692c4.bec04c","order":0,"width":0,"height":0,"label":"hum rhf","chartType":"line","legend":"false","xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":false,"ymin":"","ymax":"","removeOlder":1,"removeOlderPoints":"","removeOlderUnit":"3600","cutout":0,"useOneColor":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"useOldStyle":false,"x":640,"y":3040,"wires":[[],[]]},{"id":"c70731a.a7ba85","type":"ui_chart","z":"b6605d08.a927b","name":"","group":"44b692c4.bec04c","order":0,"width":0,"height":0,"label":"batt rhf","chartType":"line","legend":"false","xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":false,"ymin":"","ymax":"","removeOlder":1,"removeOlderPoints":"","removeOlderUnit":"3600","cutout":0,"useOneColor":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"useOldStyle":false,"x":640,"y":3100,"wires":[[],[]]},{"id":"db7f0faf.eec008","type":"ui_chart","z":"b6605d08.a927b","name":"","group":"44b692c4.bec04c","order":0,"width":0,"height":0,"label":"temperture rhf","chartType":"line","legend":"false","xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":false,"ymin":"","ymax":"","removeOlder":1,"removeOlderPoints":"","removeOlderUnit":"3600","cutout":0,"useOneColor":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"useOldStyle":false,"x":660,"y":2980,"wires":[[],[]]},{"id":"ce3645f8.a18d78","type":"mqtt-broker","z":"","name":"loralocal","broker":"00.00.00.00","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""},{"id":"44b692c4.bec04c","type":"ui_group","z":"","name":"RHF","tab":"b031aecd.a463f","order":1,"disp":true,"width":"6","collapse":false},{"id":"b031aecd.a463f","type":"ui_tab","z":"","name":"GATEWAY","icon":"desktop_mac","order":2}]

Datasheet sensor

http://www.risinghf.com/#/product-details?product_id=1&lang=en

Membuat services di Ubuntu


Terkadang kita menginginkan sebuah program supaya bisa jalan otomatis pada saat kita restart atau pada saat system kita jalan, nah cara mudahnya adalah dengan membuat services yang meng-execute program kita tersebut.

Caranya mudah pada kali ini saya contohkan membuat services untuk mengexecute node-red setiap kali system start atau restart di ubuntu.

Pertama tama pastikan node-red sudah terinstall dan saya tidak akan membahasnya disini saya hanya akan membuat servicesnya caranya buat file node-red.service didirectory dibawah ini

sudo nano /etc/systemd/system/node-red.service

Lalu masukkan baris ini didalamnya

[Unit]
Description=Node-RED
After=syslog.target network.target

[Service]
ExecStart=/usr/bin/node-red --max-old-space-size=128 -v
Restart=on-failure
KillSignal=SIGINT

# log output to syslog as 'node-red'
SyslogIdentifier=node-red
StandardOutput=syslog

# non-root user to run as
WorkingDirectory=/home/onix/ #nama username mu
User=onix
Group=onix

[Install]
WantedBy=multi-user.target

Udah gitu aja gampang kan, ini bisa digunakan untuk menjalankan apa saja tinggal ganti ExecStartnya saja.

Untuk menjalankan servicesnya tinggal tuliskan perintah ini di terminal

sudo systemctl start node-red.services #ini kalau nama servicesnya node-red

Untuk melihat statusnya tinggal ganti start dengan status dengan command yang sama

Atau untuk menjadikan aplikasinya jalan pada saat reboot ganti start dengan enable dengan command yang sama.

Selamat Mencoba

Salam Ngoprek …

Happy Coding …

Parsing value json di node-red


Kali ini saya akan share bagaimana caranya parsing data json (dari mqtt) di node-red untuk mengambil valuenya saja yang nantinya data tersebut bebas kita gunakan untuk mentrigger sesuatu atau hanya untuk ditampilkan di ui node-red. Setelah browsing sana sini, tanya sana sini akhirnya entah kenapa tiba tiba malah bisa memparsing data dari mqtt yang bentuknya json, simplenya silahkan copas aja langsung flow node-red dibawah ini

[{"id":"cf8a386d.c705e8","type":"inject","z":"527576f4.5e79c8","name":"","topic":"lora","payload":"{\"temperature\":26,\"humidity\":30}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":130,"y":900,"wires":[["5979b9b5.eb2a48"]]},{"id":"5979b9b5.eb2a48","type":"json","z":"527576f4.5e79c8","name":"","property":"payload","action":"obj","pretty":true,"x":290,"y":900,"wires":[["28036454.a91e2c","422cfaee.d99884"]]},{"id":"28036454.a91e2c","type":"function","z":"527576f4.5e79c8","name":"data","func":"var obj = msg.payload;\nmsg.payload = obj.temperature;\nreturn msg;","outputs":1,"noerr":0,"x":450,"y":900,"wires":[["b7bc5dc0.c6099"]]},{"id":"422cfaee.d99884","type":"function","z":"527576f4.5e79c8","name":"data","func":"var obj = msg.payload;\nmsg.payload = obj.humidity;\nreturn msg;","outputs":1,"noerr":0,"x":450,"y":960,"wires":[["71392630.791538"]]},{"id":"b7bc5dc0.c6099","type":"debug","z":"527576f4.5e79c8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":650,"y":900,"wires":[]},{"id":"71392630.791538","type":"debug","z":"527576f4.5e79c8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":650,"y":960,"wires":[]}]

Disini saya mencontohkan untuk menginjek data berupa json kalau mau ngambil dari mqtt juga bisa cuman untuk praktisnya saja saya masukkan kedalam inject, datanya simple sebenarnya hanya berupa json seperti dibawah ini

{
"temperature": 26,
"humidity": 30
}

Kemudian data tersebut saya ubah didalam function sehingga nanti value dari temperature dan humiditynya saja yang diambil untuk diolah lebih lanjut. Demikian catatan saya kali ini semoga bermanfaat.

Happy Coding …

Salam Ngoprek …

Telegram Fish Feeder


Ngga kerasa sudah bertemu ramadhan lagi, nah kali ini untuk mengisi waktu pas weekend dan puasa saya membuat Fish Feeder Alias pemberi makan ikan, ini sebenarnya project yang sudah lama saya ingin buat tapi karena sesuatu dan lain hal baru sempet dibuat sekarang.

Designya sebenarnya cukup simple kebetulan saya ada servo micro, esp8266 dan saya pikir saya bisa buat fish feeder ini dari kedua alat tersebut, dan tentu saja dibantu 3d printer saya untuk struktur fish feedernya.

Awal design saya corat coret di buku catatan saya setelah selesai draftnya saya lanjutkan designnya menggunakan fusion 360 dari Autodesk ini merupakan software design favorit saya, dulunya saya suka dengan 123D dari autodesk juga namun 123D sudah tidak release diganti dengan fusion 360, yang saya suka dengan software ini adalah kemampuan parametricnya.

Tidak membutuhkan waktu yang lama untuk membuat designnya namun saya beberapa kali melakukan test print untuk mencocokkan design dengan bentuk nya ketika sudah diimplementasikan, yah itulah enaknya menggunakan printer 3d bisa sesuka hati design kalau ngga suka ya tinggal diprint lagi :).

 

ini adalah beberapa design saya sebelum saya print, sengaja saya buat model micro servonya juga sehingga saya bisa dengan mudah membayangkan posisi dari servo dan gear pendorong makanan ikan.

Untuk elektronik dikarenakan saya dirumah kebetulan ada wemos ya saya menggunakan wemos sebagai microcontroller dan karena sudah ada wifi didalamnya saya kepikiran kenapa ngga saya sekalian gunakan telegram api sebagai remotenya, karena sepertinya cara ini adalah yang paling mudah daripada saya harus routing ddns yang bikin ribet :). 

Saya menggunakan library CTBOT karena pas saya coba kok ya sepertinya library ini yang paling mudah jujur belum pernah nyoba yang lain iseng iseng cari di library arduino CT bot ini nongol paling atas ya udah saya install aja dan setelah dicoba langsung bisa.

Untuk kodingannya gampang banget saya pake contoh yang untuk matikan dan nyalakan lampu lalu saya tambahkan dengan contoh servo sweep sudah gitu aja gampang kan 🙂

Yang penasaran pengen coba saya share disini untuk design 3dnya silahkan didownload dan diedit sesuka hati.

Link Thingiversenya

Dan codingannya disini 

 

 

 

 

Ok semoga bermanfaat

Happy Coding …

Salam Ngoprek …

 

lora mini dev and ttn


lora_mini_devKali ini nyobain lora module buatan dragino namanya lora mini dev, uniknya dari module ini adalah sudah jadi satu antara RF dan mikro kontrollernya, untuk programmingnya sendiri cukup mudah karena sudah ada usb nya jadi tinggal colok aja mikro usb bawaannya terus bisa diprogram menggunakan arduino ide.

Reviewnya menyusul ya ini tadi baru  test OTAA ke thethingsnetwork si lancar jaya cuman awalnya sempat bingung untuk pin mapping lmicnya, soalnya nyari nyari didokumentasinya ngga nemu.

Beruntung banget pas lagi browsing nemu, nah dibawah ini adalah pinout mappingnya karena kalau pinout ini salah dijamin lora mini dev ini ngga akan bekerja di lmic

 const lmic_pinmap lmic_pins = {
 .nss = 10,
 .rxtx = LMIC_UNUSED_PIN,
 .rst = 9,
 .dio = {2, 6, 7},
};

Silahkan yang pingin nyoba nyoba ini modul bisa pake lmic standard tinggal nanti menyesuaikan lmicnya seperti diatas.

kalau mau liat2 codingannya ke github saya disini tinggal ganti lmicnya seperti diatas

Happy Coding ..

Salam ngoprek …

simple paho-mqtt with python


Bagi kalian yang sedang main IOT mungkin simple script main-main saya dibawah ini mudah-mudahan bisa bermanfaat, iseng sebelum tidur main-main dengan python dan paho mqtt, simple nya si hanya untuk subscribe mqtt dan publish mqtt, mungkin kedepannya ditambahin fitur web.

Yang penasaran silahkan main ke github saya disini 

Sekian semoga bermanfaat

Happy Coding !!!