Nanonet - Realtime Network for IoT

Örnek Uygulamalar

Bu uygulamalarda Web arayüzleri Nononet'in kullanım kolaylığını göstermek amacıyla Javascript'te yazılmıştır. Diğer programlama dillerini de kullanabilirsiniz.
Javascript'in bazı avantajları:
  • Her standart web tarayıcıda çalışabilmesi platform bağımsızlığı sağlar. (Windows, Linux, Android, iOS vs ..)
  • Kod düzenlemesi yaptıktan sonra bir derleyiciye (c compiler vs..) ihtiyaç yoktur. Web tarayıcınızı açarsınız ve çalışır.
  • Nanonet'i kullandığınızda JS içeren web sayfanızı bir web serverda tutmanıza gerek kalmaz. Lokal olarak PC veya telefonunuzda kalabilir, oradan çalışabilir.

Örnek 1: SSH Uzaktan açma kapatma


Eğer uzak bir serverınız varsa muhtemelen SSH Daemon dediğimiz arka planda çalışan, servera giriş yapmanızı sağlayan program yüklüdür. Hacker'lar bunu bilir ve serverınıza SSH atakları düzenler. Başarılı olup giriş yaptıklarında serverınızda tuttuğunuz web sayfaları, emailler ne varsa değiştirebilir, silebilirler.
SSH ataklarından korunmak için IPTABLES, port knocking gibi birçok ayar ve sürekli güncelleme gerektiren bazı yöntemler vardır. Fakat SSH programı çalıştığı, SSH portunuz açık kaldığı sürece ataklar bitmez. CPU nuz ataklara cevap vermekle meşgul olur.

Ya SSH programı dolayısıyla SSH portu kapalıysa? Açık port yok ise atak ta yoktur. Nnet Port Guard programının yazılma amacı budur. Nnet Port Guard programını serverınıza yüklerseniz serverınızdaki SSH programını uzaktan açıp kapatabilirsiniz. Giriş yapacağınız zaman açar, işlem yapar, işiniz bittikten sonra tekrar kapatabilirsiniz.

Servara uzaktan erişebilmek için Nanonet kullanılır. Siz herhangi bir yerde internete bağlı cihazınızdan bir Web Tarayıcıda çalışan arayüz ile uzak SSH ı kontrol edebilirsiniz.

Projeyi Github tan indirip kurabilirsiniz. Web arayüzüne aşağıdaki linkten de ulaşabilirsiniz.

Nnet Port Guard Web arayüzü

Örnek 2: Sipariş alma, Sipariş verme


Sipariş alan kurum diyelim ki bir pide salonu. Sipariş alma ekranını açıyor. Müşteriler Sipariş verme ekranından siparişlerini veriyorlar. Sipariş alan ekran sipariş geldikten sonra 6 saniye aralıklarla geriye bildirim yapıyor. 

Bu uygulama Javascript'te yazılmıştır. Arada Nanonet haricinde başka hiçbir program (php vs..) yoktur. Sayfa açıldığında Nanonet servera LOG in yapıyorlar. Websocket ile servera soket bağlantısı kurmuş oluyorlar. Sonrasında gönderilen veriler gerçek zamanlı olarak birbirlerine iletiliyor. 

  • Önce "Sipariş Alma" ekranı açın
  • Birden fazla "Sipariş Verme" ekranı açarak farklı müşterilerle sipariş vermeyi deneyebilirsiniz.
  • Tüm ekranları cep telefonu, tablet, PC platformlarında aynı anda açabilirsiniz.
  • Dosyaları kendi PC nize indirebilir, lokal olarak ta çalıştırabilirsiniz. 
Sipariş Alma Sipariş Verme

Örnek 3: Ev otomasyonu, Sıcaklık kontrol


Bu uygulamada sıcaklık kontrolü yapan bir cihaz var. Bu cihaz Arduino, Raspberry Pi veya internet çıkışı olan herhangi bir cihaz olabilir. Ortam ısısını ölçüyor ve belli aralıklarla hedef ID ye sıcaklık değerini yolluyor. Hedef ID de ise web tarayıcıda çalışan Javascriptte yazılmış bir uygulama var. Buradan güncellenen sıcaklık değeri görülüyor, aynı zamanda set edilebiliyor, Mesaj yolla kısmından "Status" datasını yolladığımızda bize Noddan zaman bilgisi geliyor. 

Nodun kodları C de yazılmıştır. Linux işletim sisteminde doğrudan çalıştırılabilir. Linux yüklü bir Raspberry Pi'de de problemsiz çalışır. Bu kod Arduino veya diğer cihazlarda çalışması için düzenlenebilir.

Web Uygulaması
Uygulama Videosu

C kodu indir
// (c) nnet.server 2015
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <unistd.h>
#include <time.h>

#include "nnet_lib.c"

int main(int arc, char *argv[]) {
char buffer[size_packetmax+1];
int ret;
time_t tm;
char src[20], dest[20], command[10], data[size_maxdatalen+1];
char *client_id="1122334455DE:2";
int ISI=20;

    printf("Basla...\n");

    init_nnet("69.28.92.166",9090,"1122334455DE:1","zw+T38i1W6Wy0UyoPMPrepoHY+DmypQelI6Hmr4eeD5FZ5e5ASs03VQnPixjOpFh");
    ret=nnet_connect(); if (ret) {printf("error connect:%d\n",ret); return 1;}
    ret=nnet_login();   if (ret) {printf("error login:%d\n",ret); return 1;}
    printf("Logged in, waiting for data ...\n");

    while(1){
        ret=nnet_get_pkg(buffer,size_packetmax,5);  //5->timeout 5 sn.
        if (ret==0) {
            printf("Data received->%s\n",buffer);
            ret=nnet_parse_pkg(buffer,src,dest,command,data); if (ret) {printf("nnet_parse_pkg error:%d\n",ret); continue;}
            else printf("Data parsed:\nsrc=%s, dest=%s, command=%s, data=%s\n",src,dest,command,data);
            if (!strcmp(data,"Status")) {
                printf("Sending Time ... ");
                tm = time(NULL);
                sprintf(buffer,"Time is:%s",ctime(&tm));
                ret=nnet_send_pkg(src,COM_PUT,buffer); if (ret) printf("Send error:%d\n",ret); else printf("OK\n");
            }
            else
            if (strstr(data,"set=")) {
                sscanf(data,"set=%d",&ISI);
            }
        }
        else
        if (ret==1) {
            if (ISI>30) ISI=15; else ISI++;
            printf("Timeout, no data received, Sending Temperature:%d\n",ISI);
            sprintf(data,"isi=%d",ISI);
            ret=nnet_send_pkg(client_id,COM_PUT,data); if (ret) printf("Send error:%d\n",ret);
        }
        else
        if (ret==4) {printf("Server Disconnected\n"); return 1;}
        else {printf("Error :%d\n",ret); return 1;}
    }
return 0;
}