commit f9c318272136169d98dabd596c4e71a7f7a4d99f Author: Dimosthenis Kastrinakis Date: Wed Jan 22 06:35:49 2020 +0200 final ergasia diff --git a/img/1.jpg b/img/1.jpg new file mode 100644 index 0000000..77b15f2 Binary files /dev/null and b/img/1.jpg differ diff --git a/img/2.jpg b/img/2.jpg new file mode 100644 index 0000000..80b4a59 Binary files /dev/null and b/img/2.jpg differ diff --git a/img/3.jpg b/img/3.jpg new file mode 100644 index 0000000..280a479 Binary files /dev/null and b/img/3.jpg differ diff --git a/img/4.jpg b/img/4.jpg new file mode 100644 index 0000000..66be4da Binary files /dev/null and b/img/4.jpg differ diff --git a/img/5.jpg b/img/5.jpg new file mode 100644 index 0000000..b08cb7d Binary files /dev/null and b/img/5.jpg differ diff --git a/img/android.png b/img/android.png new file mode 100644 index 0000000..53807ea Binary files /dev/null and b/img/android.png differ diff --git a/img/ardu.jpg b/img/ardu.jpg new file mode 100644 index 0000000..02a2728 Binary files /dev/null and b/img/ardu.jpg differ diff --git a/img/arduscheme.png b/img/arduscheme.png new file mode 100644 index 0000000..1315768 Binary files /dev/null and b/img/arduscheme.png differ diff --git a/img/ardushield.png b/img/ardushield.png new file mode 100644 index 0000000..09c37f4 Binary files /dev/null and b/img/ardushield.png differ diff --git a/img/cover1.jpg b/img/cover1.jpg new file mode 100644 index 0000000..ad43cef Binary files /dev/null and b/img/cover1.jpg differ diff --git a/img/ethernetC.jpg b/img/ethernetC.jpg new file mode 100644 index 0000000..97def3c Binary files /dev/null and b/img/ethernetC.jpg differ diff --git a/img/gui2.png b/img/gui2.png new file mode 100644 index 0000000..9fcfe7d Binary files /dev/null and b/img/gui2.png differ diff --git a/img/shield.jpg b/img/shield.jpg new file mode 100644 index 0000000..46ce3d0 Binary files /dev/null and b/img/shield.jpg differ diff --git a/img/time1.png b/img/time1.png new file mode 100644 index 0000000..a4ab291 Binary files /dev/null and b/img/time1.png differ diff --git a/img/time2.png b/img/time2.png new file mode 100644 index 0000000..0b83065 Binary files /dev/null and b/img/time2.png differ diff --git a/img/time21.png b/img/time21.png new file mode 100644 index 0000000..83fa663 Binary files /dev/null and b/img/time21.png differ diff --git a/img/time22.png b/img/time22.png new file mode 100644 index 0000000..dbb619c Binary files /dev/null and b/img/time22.png differ diff --git a/img/time23.png b/img/time23.png new file mode 100644 index 0000000..d25b2ee Binary files /dev/null and b/img/time23.png differ diff --git a/img/wireshark.png b/img/wireshark.png new file mode 100644 index 0000000..5caaf07 Binary files /dev/null and b/img/wireshark.png differ diff --git a/iot.adoc b/iot.adoc new file mode 100644 index 0000000..4b5a6c9 --- /dev/null +++ b/iot.adoc @@ -0,0 +1,313 @@ +:toc: left +:imagesdir: img += Secure IοT + +Υπάρχουν πολλοί τρόποι για να ασφαλίσουμε μια επικοινωνία μέσω διαδικτύου, αλλά δεν θα λειτουργήσουν όλοι σε ένα μικροελεγκτή όπου η επεξεργαστική ισχύς και η μνήμη είναι περιορισμένη. + +Το project περιλαμβάνει την δημιουργία ενός ασφαλούς και ελαφρού client/server πρωτοκόλλου το οποίο είναι ιδανικό για την εκτέλεση σε μικροελεγκτές. + +Server -> Συσκευή IoT η οποία λαμβάνει εντολές. + +Client -> Αποστολέας εντολών. + +== 1.1. Περιγραφή του Project + +==== 1.1.1 Προαπαιτούμενα για επικοινωνία Client - Server + +- Αρχηκοποίηση παραμέτρων επικοινωνίας. + * Συμφωνία client - server για την αρχηκοποίηση των δεδομένων αφύπνησης (0-m). + * Συμφωνία client - server για την αρχηκοποίηση των δεδομένων δοκιμασίας (1-n). + * Χρήση της ίδιας function για την παραγωγή των hash. + * Χρήση ίδιου μυστικού κωδικού για την επικοινωνία. + * Χρήση κοινών ονομάτων εντολών. +- Δημιουργία τυχαίου αριθμού (seed) για τη γεννήτρια τυχαίων αριθμών (Server). +- Η IP και το Port number του Server πρέπει να είναι γνωστά στον Client. + +==== 1.1.2 Μεθοδολογία + +Σε ορισμένες βιβλιοθήκες, όπως αυτή που χρησιμοποιήθηκε στο project (Arduino Ethernet2 lib), χρειάζεται ο client να στείλει πρώτος δεδομένα αφού δημιουργηθεί η σύνδεση, διαφορετικά ο server δεν αντιλαμβάνεται το κανάλι επικοινωνίας που έχει δημιουργηθεί. + +. Client: Δημιουργεί ένα tcp socket μέσω του οποίου συνδέεται στον server. Στη συνέχεια στέλνει ένα συγκεκριμένο αριθμό από bytes προκειμένου να τον αφυπνήσει. + +. Server: Στέλνει στον Client (n) τυχαία bytes τα οποία θα χρησιμοποιηθούν για την δοκιμσία που πρέπει να λύσει επιτυχώς ο Client. + +. Client: Υπολογίζει και στέλνει το HMAC των δεδομένων που δέχτηκε (n bytes) + την εντολή που θέλει να στείλει στον server για εκτέλεση χρησιμοποιώντας τον μυστικό κωδικό, που μόνο ο server και o client γνωρίζουν. + +. Server: Ξεκινάει να υπολογίζει HMACs (με το μυστικό κωδικό) χρησιμοποιώντας τα n bytes που δημιούργησε + πιθανές εντολές, αλλάζοντας κάθε φορά μόνο την πιθανή προς εκτέλεση εντολή. Κάθε hash που δημιουργεί, το συγκρίνει με το hash που δέχθηκε από τον client και όταν παράξει το hash το οποίο έχει προκύψει από την εντολή που του έστειλε ο client, τότε θα ξέρει πως να ενεργήσει. + ++[ Προαιρετικά: Κάθε εντολή που εκτελείται επιστρέφει έναν κωδικό. Ο server μπορεί να υπολογίσει το HMAC χρησιμοποιώντας τα n τυχαία bytes + τον κωδικό επιστροφής και να το στείλει στον client έτσι ώστε αυτός να μπορέσει το αποτέλεσμα εκτέλεσης. ]+ + +. [ Προαιρετικά: Για να βρει ο client ποια εντολή εκτελέστηκε, ακολουθεί την ίδια διαδικασία που πραγματοποιήθηκε στον server (όλοι οι κωδικοί απάντησης είναι γνωστοί). ] + +==== 1.1.3 Δεδομένα επικοινωνίας + +image::wireshark.png[Arduino με ethernet shield,width="70%"] + +. Client: Στέλνει 0 έως m bytes. + +. Server: Στέλνει 1 έως n τυχαία bytes. + +. Client: Στέλνει HMAC των 256 bits. HMAC(bytes πρόκλησης + προς εκτέλεση εντολή, μυστικός κωδικός). + +. [ Προαιρετικά: Ο server στέλνει HMAC των 256 bits. hmac( πρόκλησης + αποτέλεσμα εντολής, μυστικός κωδικός ) ] + + +==== 1.1.4 Δοκιμές + +.Χρονικές αποκρίσεις + +* Arduino pro mini (16Mhz) + +1η εντολή + +image::time1.png[time1, width="50%"] + +3η εντολή + +image::time2.png[time2, width="50%"] + +* Arduino pro mini (8Mhz) + +1η εντολή + +image::time21.png[time1, width="50%"] + +2η εντολή + +image::time22.png[time2, width="50%"] + +3η εντολή + +image::time23.png[time2, width="50%"] + +===== Παρατηρήσεις: + + Arduino 16Mhz -> 57ms/command + Arduino 8Mhz -> 114ms/command + + * Διπλάσια συχνότητα = μισός χρόνος παραγωγής HMAC. + * Η κάθε επιπλέον εντολή στη συλλογή των εντολών χρειάζεται σταθερό επιπλέον χρόνο μέχρι να αναγνωριστεί και να εκτελεστεί. + + +==== 1.1.5 Προβλήματα που παρουσιάστηκαν κατά την υλοποίηση + +. Δεν υπήρχαν timeouts στην πρώτη υλοποίηση οπότε όταν στράφηκε προς τον έξω κόσμο για πρώτη φορά, σε τυχαία χρονικά διαστήματα, σταματούσε η αποδοχή νέων συνδέσεων. + +. Στην περίπτωση που η συσκευή εγκατασταθεί σε δίκτυο το οποίο δεν έχει σταθερή IP, θα πρέπει να υπάρχει διαδικασία ανανέωσης του DNS. + +. Η μνήμη του arduino έχει γεμίσει κατά 50-60% μόνο με τα βασικά libraries δικτύωσης, κρυπτογραφίας και του IoT πρωτοκόλλου. + +==== 1.1.6 Βελτιώσεις / αναβαθμίσεις + +. Το arduino να ενημερώνει μόνο του το DNS σε περίπτωση δυναμικής IP. + +. Ικανότητα δημιουργίας OTP (One Time Passwords / κωδικοί μιας χρήσης) για την δυνατότητα εκτέλεσης εντολών χωρίς τη χρήση των κρυπτογραφικών συναρτήσεων του πρωτοκόλλου (απλά GET requests). + +. Αναβάθμιση του πρωτοκόλλου για δυνατότητα μεταφοράς μεγαλύτερου όγκου πληροφορίας (AES). + + +==== 1.1.7 Συμπεράσματα + +.Υπέρ + +------------------------------ + +- Όχι πολύπλοκο +- Ελάχιστες απαιτήσεις μνήμης* +- Ελάχιστη χρήση cpu* +- Γρήγορο** +- Αυθεντικοποίηση +- Εμπιστευτικότητα +- Replay protection + +*με τη χρήση των σωστών hash functions + +**όταν χρησιμοποιείται ένα μικρό ποσοστό εντολών + +------------------------------ + +.Κατά + +------------------------------ + +- Χρησιμοποιεί συμμετρική κρυπτογράφηση +- Δεν είναι σχεδιασμένο για να στέλνει πολλά bytes (1 byte commands recommended) +- Απαιτεί έναν τυχαίο αριθμό (seed) +- Όταν χρησιμοποιείται σε μικροελεγκτές είναι ευάλωτο σε DOS επιθέσεις (χρειάζεται firewall) + +------------------------------ + +NOTE: Υλοποιημένο σε Node.JS ως client, αλλά και σε android, με arduino pro mini με ethernet shield ως server. + + + +== 1.2. Υλικό που χρησιμοποιήθηκε κατά την υλοποίησή του + + +.Arduino mini pro. + +image::ardu.jpg[Arduino mini pro, width="50%"] + +.Ethernet shield for arduino. + +image::shield.jpg[Ethernet shield, width="50%"] + +.Καλώδιο ethernet. +image::ethernetC.jpg[Καλώδιο ethernet, width="50%"] + +.Door mechanism. +image::1.jpg[Door mechanism, width="70%"] + +.Door mechanism. + +image::3.jpg[Door mechanism,width="70%"] + +.Arduino με ethernet shield. + +image::4.jpg[Arduino με ethernet shield,width="70%"] + +.Final overview. + +image::5.jpg[Final overview,width="70%"] + + +== 1.3. Συνδεσμολογία & Σχηματικά + +.Arduino & ethernet shield. + +image::ardushield.png[Arduino & ethernet shield, width="100%"] + +.Arduino - door. + +image::arduscheme.png[Arduino - door schematic, width="75%"] + +.Συνδεσμολογία διπλής μπουτονιέρας. + +image::2.jpg[Συνδεσμολογία διπλής μπουτονιέρας, width="75%"] + +== 1.4 Εφαρμογή Android + +.GUI. + +image::android.png[GUI,width="40%"] + +.Settings + +image::gui2.png[Settings,width="40%"] + +.Setup εφαρμογής για επικοινωνία με τον server + +--------------------------- + +[ + { + "group": "Gate", + "actions": [ + { + "action": "State", + "cmd": 0, + "url": "akamai.webhop.me:777", + "hmacKey": "supersecret", + "hashByteLength": 32, + "randDataLength": 100, + "responses": [ + { + "value": "0x00", + "description": "Closed", + "color": "#FF0000" + }, { + "value": "0x01", + "description": "Open", + "color": "#00C110" + }, { + "value": "0x02", + "description": "Middle", + "color": "#E5BF00" + } + ], + "repeat": null, + "type": "state" + }, { + "action": "Switch", + "cmd": 1, + "url": "akamai.webhop.me:777", + "hmacKey": "supersecret", + "hashByteLength": 32, + "randDataLength": 100, + "responses": [ + { + "value": "0x00", + "description": "OK", + "color": "#000000" + } + ], + "repeat": null, + "type": "feedback" + } + ] + }, + { + "group": "Gate Wifi", + "actions": [ + { + "action": "State", + "cmd": 0, + "url": "192.168.0.6:777", + "hmacKey": "supersecret", + "hashByteLength": 32, + "randDataLength": 100, + "responses": [ + { + "value": "0x00", + "description": "Closed", + "color": "#FF0000" + }, { + "value": "0x01", + "description": "Open", + "color": "#00C110" + }, { + "value": "0x02", + "description": "Middle", + "color": "#E5BF00" + } + ], + "repeat": null, + "type": "state" + }, { + "action": "Switch", + "cmd": 1, + "url": "192.168.0.6:777", + "hmacKey": "supersecret", + "hashByteLength": 32, + "randDataLength": 100, + "responses": [ + { + "value": "0x00", + "description": "OK", + "color": "#000000" + } + ], + "repeat": null, + "type": "feedback" + } + ] + } +] + +--------------------------- + +== 1.5 Βιβλιογραφία + +Μπουρλέσης Κωνσταντίνος - 43862 + +Δημοσθένης Καστρινάκης - 44119 + +https://git.swarmlab.io:3000/kasdimos/Ergasia_Secure_IoT + +https://git.swarmlab.io:3000/kasdimos/SecureIot_AndroidClient + +https://git.swarmlab.io:3000/kasdimos/SecureIoT_ArduinoServer + +https://git.swarmlab.io:3000/kasdimos/SecureIoT_NodeJSClient + +image::cover1.jpg[credits,width="40%"] diff --git a/iot.html b/iot.html new file mode 100644 index 0000000..f82a5cb --- /dev/null +++ b/iot.html @@ -0,0 +1,928 @@ + + + + + + + +Secure IοT + + + + + +
+
+
+
+

Υπάρχουν πολλοί τρόποι για να ασφαλίσουμε μια επικοινωνία μέσω διαδικτύου, αλλά δεν θα λειτουργήσουν όλοι σε ένα μικροελεγκτή όπου η επεξεργαστική ισχύς και η μνήμη είναι περιορισμένη.

+
+
+

Το project περιλαμβάνει την δημιουργία ενός ασφαλούς και ελαφρού client/server πρωτοκόλλου το οποίο είναι ιδανικό για την εκτέλεση σε μικροελεγκτές.

+
+
+

Server → Συσκευή IoT η οποία λαμβάνει εντολές.

+
+
+

Client → Αποστολέας εντολών.

+
+
+
+
+

1.1. Περιγραφή του Project

+
+
+

1.1.1 Προαπαιτούμενα για επικοινωνία Client - Server

+
+
    +
  • +

    Αρχηκοποίηση παραμέτρων επικοινωνίας.

    +
    +
      +
    • +

      Συμφωνία client - server για την αρχηκοποίηση των δεδομένων αφύπνησης (0-m).

      +
    • +
    • +

      Συμφωνία client - server για την αρχηκοποίηση των δεδομένων δοκιμασίας (1-n).

      +
    • +
    • +

      Χρήση της ίδιας function για την παραγωγή των hash.

      +
    • +
    • +

      Χρήση ίδιου μυστικού κωδικού για την επικοινωνία.

      +
    • +
    • +

      Χρήση κοινών ονομάτων εντολών.

      +
    • +
    +
    +
  • +
  • +

    Δημιουργία τυχαίου αριθμού (seed) για τη γεννήτρια τυχαίων αριθμών (Server).

    +
  • +
  • +

    Η IP και το Port number του Server πρέπει να είναι γνωστά στον Client.

    +
  • +
+
+
+
+

1.1.2 Μεθοδολογία

+
+

Σε ορισμένες βιβλιοθήκες, όπως αυτή που χρησιμοποιήθηκε στο project (Arduino Ethernet2 lib), χρειάζεται ο client να στείλει πρώτος δεδομένα αφού δημιουργηθεί η σύνδεση, διαφορετικά ο server δεν αντιλαμβάνεται το κανάλι επικοινωνίας που έχει δημιουργηθεί.

+
+
+
    +
  1. +

    Client: Δημιουργεί ένα tcp socket μέσω του οποίου συνδέεται στον server. Στη συνέχεια στέλνει ένα συγκεκριμένο αριθμό από bytes προκειμένου να τον αφυπνήσει.

    +
  2. +
  3. +

    Server: Στέλνει στον Client (n) τυχαία bytes τα οποία θα χρησιμοποιηθούν για την δοκιμσία που πρέπει να λύσει επιτυχώς ο Client.

    +
  4. +
  5. +

    Client: Υπολογίζει και στέλνει το HMAC των δεδομένων που δέχτηκε (n bytes) + την εντολή που θέλει να στείλει στον server για εκτέλεση χρησιμοποιώντας τον μυστικό κωδικό, που μόνο ο server και o client γνωρίζουν.

    +
  6. +
  7. +

    Server: Ξεκινάει να υπολογίζει HMACs (με το μυστικό κωδικό) χρησιμοποιώντας τα n bytes που δημιούργησε + πιθανές εντολές, αλλάζοντας κάθε φορά μόνο την πιθανή προς εκτέλεση εντολή. Κάθε hash που δημιουργεί, το συγκρίνει με το hash που δέχθηκε από τον client και όταν παράξει το hash το οποίο έχει προκύψει από την εντολή που του έστειλε ο client, τότε θα ξέρει πως να ενεργήσει.

    +
  8. +
+
+
+

[ Προαιρετικά: Κάθε εντολή που εκτελείται επιστρέφει έναν κωδικό. Ο server μπορεί να υπολογίσει το HMAC χρησιμοποιώντας τα n τυχαία bytes + τον κωδικό επιστροφής και να το στείλει στον client έτσι ώστε αυτός να μπορέσει το αποτέλεσμα εκτέλεσης. ]

+
+
+
    +
  1. +

    [ Προαιρετικά: Για να βρει ο client ποια εντολή εκτελέστηκε, ακολουθεί την ίδια διαδικασία που πραγματοποιήθηκε στον server (όλοι οι κωδικοί απάντησης είναι γνωστοί). ]

    +
  2. +
+
+
+
+

1.1.3 Δεδομένα επικοινωνίας

+
+
+Arduino με ethernet shield +
+
+
+
    +
  1. +

    Client: Στέλνει 0 έως m bytes.

    +
  2. +
  3. +

    Server: Στέλνει 1 έως n τυχαία bytes.

    +
  4. +
  5. +

    Client: Στέλνει HMAC των 256 bits. HMAC(bytes πρόκλησης + προς εκτέλεση εντολή, μυστικός κωδικός).

    +
  6. +
  7. +

    [ Προαιρετικά: Ο server στέλνει HMAC των 256 bits. hmac( πρόκλησης + αποτέλεσμα εντολής, μυστικός κωδικός ) ]

    +
  8. +
+
+
+
+

1.1.4 Δοκιμές

+
+
Χρονικές αποκρίσεις
+
    +
  • +

    Arduino pro mini (16Mhz)

    +
  • +
+
+
+

1η εντολή

+
+
+
+time1 +
+
+
+

3η εντολή

+
+
+
+time2 +
+
+
+
    +
  • +

    Arduino pro mini (8Mhz)

    +
  • +
+
+
+

1η εντολή

+
+
+
+time1 +
+
+
+

2η εντολή

+
+
+
+time2 +
+
+
+

3η εντολή

+
+
+
+time2 +
+
+
+
Παρατηρήσεις:
+
+
+
Arduino 16Mhz -> 57ms/command
+Arduino  8Mhz -> 114ms/command
+
+
+
+
    +
  • +

    Διπλάσια συχνότητα = μισός χρόνος παραγωγής HMAC.

    +
  • +
  • +

    Η κάθε επιπλέον εντολή στη συλλογή των εντολών χρειάζεται σταθερό επιπλέον χρόνο μέχρι να αναγνωριστεί και να εκτελεστεί.

    +
  • +
+
+
+
+
+

1.1.5 Προβλήματα που παρουσιάστηκαν κατά την υλοποίηση

+
+
    +
  1. +

    Δεν υπήρχαν timeouts στην πρώτη υλοποίηση οπότε όταν στράφηκε προς τον έξω κόσμο για πρώτη φορά, σε τυχαία χρονικά διαστήματα, σταματούσε η αποδοχή νέων συνδέσεων.

    +
  2. +
  3. +

    Στην περίπτωση που η συσκευή εγκατασταθεί σε δίκτυο το οποίο δεν έχει σταθερή IP, θα πρέπει να υπάρχει διαδικασία ανανέωσης του DNS.

    +
  4. +
  5. +

    Η μνήμη του arduino έχει γεμίσει κατά 50-60% μόνο με τα βασικά libraries δικτύωσης, κρυπτογραφίας και του IoT πρωτοκόλλου.

    +
  6. +
+
+
+
+

1.1.6 Βελτιώσεις / αναβαθμίσεις

+
+
    +
  1. +

    Το arduino να ενημερώνει μόνο του το DNS σε περίπτωση δυναμικής IP.

    +
  2. +
  3. +

    Ικανότητα δημιουργίας OTP (One Time Passwords / κωδικοί μιας χρήσης) για την δυνατότητα εκτέλεσης εντολών χωρίς τη χρήση των κρυπτογραφικών συναρτήσεων του πρωτοκόλλου (απλά GET requests).

    +
  4. +
  5. +

    Αναβάθμιση του πρωτοκόλλου για δυνατότητα μεταφοράς μεγαλύτερου όγκου πληροφορίας (AES).

    +
  6. +
+
+
+
+

1.1.7 Συμπεράσματα

+
+
Υπέρ
+
+
- Όχι πολύπλοκο
+- Ελάχιστες απαιτήσεις μνήμης*
+- Ελάχιστη χρήση cpu*
+- Γρήγορο**
+- Αυθεντικοποίηση
+- Εμπιστευτικότητα
+- Replay protection
+
+*με τη χρήση των σωστών hash functions
+
+**όταν χρησιμοποιείται ένα μικρό ποσοστό εντολών
+
+
+
+
Κατά
+
+
- Χρησιμοποιεί συμμετρική κρυπτογράφηση
+- Δεν είναι σχεδιασμένο για να στέλνει πολλά bytes (1 byte commands recommended)
+- Απαιτεί έναν τυχαίο αριθμό (seed)
+- Όταν χρησιμοποιείται σε μικροελεγκτές είναι ευάλωτο σε DOS επιθέσεις (χρειάζεται firewall)
+
+
+
+ + + + + +
+
Note
+
+Υλοποιημένο σε Node.JS ως client, αλλά και σε android, με arduino pro mini με ethernet shield ως server. +
+
+
+
+
+
+

1.2. Υλικό που χρησιμοποιήθηκε κατά την υλοποίησή του

+
+
+
+Arduino mini pro +
+
Figure 1. Arduino mini pro.
+
+
+
+Ethernet shield +
+
Figure 2. Ethernet shield for arduino.
+
+
+
+Καλώδιο ethernet +
+
Figure 3. Καλώδιο ethernet.
+
+
+
+Door mechanism +
+
Figure 4. Door mechanism.
+
+
+
+Door mechanism +
+
Figure 5. Door mechanism.
+
+
+
+Arduino με ethernet shield +
+
Figure 6. Arduino με ethernet shield.
+
+
+
+Final overview +
+
Figure 7. Final overview.
+
+
+
+
+

1.3. Συνδεσμολογία & Σχηματικά

+
+
+
+Arduino & ethernet shield +
+
Figure 8. Arduino & ethernet shield.
+
+
+
+Arduino - door schematic +
+
Figure 9. Arduino - door.
+
+
+
+Συνδεσμολογία διπλής μπουτονιέρας +
+
Figure 10. Συνδεσμολογία διπλής μπουτονιέρας.
+
+
+
+
+

1.4 Εφαρμογή Android

+
+
+
+GUI +
+
Figure 11. GUI.
+
+
+
+Settings +
+
Figure 12. Settings
+
+
+
Setup εφαρμογής για επικοινωνία με τον server
+
+
[
+    {
+        "group": "Gate",
+        "actions": [
+            {
+                "action": "State",
+                "cmd": 0,
+                "url": "akamai.webhop.me:777",
+                "hmacKey": "supersecret",
+                "hashByteLength": 32,
+                "randDataLength": 100,
+                "responses": [
+                    {
+                        "value": "0x00",
+                        "description": "Closed",
+                        "color": "#FF0000"
+                    }, {
+                        "value": "0x01",
+                        "description": "Open",
+                        "color": "#00C110"
+                    }, {
+                        "value": "0x02",
+                        "description": "Middle",
+                        "color": "#E5BF00"
+                    }
+                ],
+                "repeat": null,
+                "type": "state"
+            }, {
+                "action": "Switch",
+                "cmd": 1,
+                "url": "akamai.webhop.me:777",
+                "hmacKey": "supersecret",
+                "hashByteLength": 32,
+                "randDataLength": 100,
+                "responses": [
+                    {
+                        "value": "0x00",
+                        "description": "OK",
+                        "color": "#000000"
+                    }
+                ],
+                "repeat": null,
+                "type": "feedback"
+            }
+        ]
+    },
+    {
+        "group": "Gate Wifi",
+        "actions": [
+            {
+                "action": "State",
+                "cmd": 0,
+                "url": "192.168.0.6:777",
+                "hmacKey": "supersecret",
+                "hashByteLength": 32,
+                "randDataLength": 100,
+                "responses": [
+                    {
+                        "value": "0x00",
+                        "description": "Closed",
+                        "color": "#FF0000"
+                    }, {
+                        "value": "0x01",
+                        "description": "Open",
+                        "color": "#00C110"
+                    }, {
+                        "value": "0x02",
+                        "description": "Middle",
+                        "color": "#E5BF00"
+                    }
+                ],
+                "repeat": null,
+                "type": "state"
+            }, {
+                "action": "Switch",
+                "cmd": 1,
+                "url": "192.168.0.6:777",
+                "hmacKey": "supersecret",
+                "hashByteLength": 32,
+                "randDataLength": 100,
+                "responses": [
+                    {
+                        "value": "0x00",
+                        "description": "OK",
+                        "color": "#000000"
+                    }
+                ],
+                "repeat": null,
+                "type": "feedback"
+            }
+        ]
+    }
+]
+
+
+
+
+
+

1.5 Βιβλιογραφία

+ +
+
+ + + \ No newline at end of file