Jump to content

Απομακρυσμένο On/Off υπολογιστή...


Jaco
 Share

Recommended Posts

UPDATED 26/05/2007

Λόγο του ότι άλλαξα adsl router, είχα πρόβλημα στο να μπορώ να κάνω update στο DDNS, το οποίο ο πρώτος router μου (Linksys) υποστήριζε από μόνος του το DynDns.org... Επομένως, όταν το pc ήταν κλειστό και άλλαζε η IP μου δεν μπορούσα να συνδεθώ εξωτερικά και να το ανοίξω...

Πριν εξηγήσω την διαδικασία για ευκολία δίνω ένα διάγραμμα της λειτουργίας...

diagrammt2.png

Στο διάγραμμα φαίνεται ο εξωτερικός χρήστης, ο update server του no-ip και ο adsl router του σπιτιού-γραφείουμ με ότι έχει από πίσω του...

Το DDNS για να έχει μονίμως ενημερωμένη την δυναμική ΙΡ του router θα πρέπει να υπάρχει ένας client o οποίος θα συνδέεται στον update server του φορέα που παρέχει την υπηρεσία και να τον ενημερώνει ανά τακτά χρονικά διαστήματα για ΙΡ που έχει την στιγμή της σύνδεσης...

Την διαδικασία αυτή την έκανε αυτόματα ο προηγούμενος router μου (Linksys) που υποστήριζε το DynDNS.org, αλλά ο καινούργιος (Tilgin) δεν παρέχει τέτοια δυνατότητα... επομένως ενσωμάτωσα στο software που τρέχει μέσα στον μικροελεγκτή (PSoC) της συσκευής την δυνατότητα να κάνει κάθε 10 λεπτά update στον no-ip server την ΙΡ του router...

Η διαδικασία του update για το DDNS είναι στην ουσία ένα HTTP request που κάνει η συσκευή στην πόρτα 80 του update server της no-ip... Το request αυτό πρέπει να περιέχει κάποιες πληροφορίες όπως είναι το username, password, host, (ip), User-Agent κλπ... Τα 3 πρώτα αφορούν το account του χρήστη στο no-ip, ενώ τα υπόλοιπα αφορούν την επικοινωνία του client με τον server... Το εμπόδιο στην όλη διαδικασία ήταν ότι σχεδών όλοι οι DDNS φορείς απαγορεύουν την διαδικασία του update από clients που οι ίδιοι δεν έχουν δώσει authorization, έτσι ώστε να μην πήζουν οι servers τους από requests πολλών clients... τελικά αυτό το παρέκαμψα διαβάζοντας το source code ενός update client του no-ip για linux... ευτυχώς στις διανομές των clients για linux δίνουν το source code ώστε να το κάνεις compile... :) Τελικά, η συσκευή τώρα συμπεριφέρεται σαν ένας official update client για no-ip καθώς το User-Agent την εμφανίζει πλέον σαν έναν linux no-ip client... Δυστυχώς οι πληροφορίες που υπάρχουν στο internet είναι από λιγοστές μέχρι και ανύπαρκτες, αν και το no-ip standard protocol για clients το δίνει η no-ip είναι άχρηστο γιατί πρέπει να κάνει authorization η ίδια στο λογισμικό σου ή την συσκευή... τρέχα γύρευε δηλαδή...

Όσον αφορά την λειτουργία τώρα, η συσκευή είναι μονίμως συνδεδεμένη στον router και μονίμως έχει τάση (η μέση κατανάλωση που μέτρησα είναι 190mA στα 5V)... Ο υπολογιστής του σπιτιού είναι κλειστός... Επομένως η συσκευή κάνει κάθε 10 λέπτα update στον no-ip update server την τρέχουσα IP του router...

Aν τώρα ο χρήστης θέλει να ανοίξει το pc από ένα άλλο σημείο του.. "κόσμου" το pc του τότε συνδέεται στον υπολογιστή του μέσω ενός client (είτε software, είτε μέσω telnet, με password) δίνοντας το όνομα το οποίο κάνει resolve στην δυναμική του IP, πχ...

telnet enasserver.no-ip.org 10002

Με την εντολή αυτή μέσω του command prompt ανοίγουμε μια telnet σύνδεση μέσω TCP/IP στην TCP πόρτα 10002 από τον υπολογιστή μας στην συσκευή... Υπόψη πως η πόρτα 10002 θα πρέπει να έχει γίνει forward από τον router στην συσκευή...

Αφού γίνει η σύνδεση τότε μέσω ενός ρεπερτορίου εντολών που έχω προγραμματίζει μπορεί κανείς να ελέγξει το power και reset κουμπί του υπολογιστή του, έτσι ώστε να τον κάνει start αν είναι κλειστός, ή hard-shutdown ή reset αν έχει "μπετώσει"...

Η συσκευή δουλεύει σωστά, αλλά θεωρώ ακόμα τον κώδικα beta γιατί δεν έχω γράψει ακόμα εντολές που να μπορούν να αλλάξουν τα στοιχεία του no-ip host (username, password, host name), με αποτέλεσμα τα στοιχεία αυτά να πρέπει να "καούν" στην flash του PSoC κατά την διαδικασία του προγραμματισμού του... τις επόμενες μέρες (και με την ελπίδα λίγου ελεύθερου χρόνου) θα το κάνω και αυτό...

Ο κώδικας, τα schematics και το PCB είναι ελεύθερα προς χρήση, αλλά από την επόμενη εβδομάδα έτσι ώστε να προλάβω να τελειώσω με το ρεπερτόριο των εντολών... όποιος τα θελήσει pm me... Υπόψη πως απαγορέυεται η χρήση του για εμπορικούς σκοπούς... :mad:

UPDATE 28/10/2006

Λοιπόν, το project ξεκίνησε σήμερα και λόγος ότι μου ήρθε αυτήν την εβδομάδα ο λογαριασμός της ΔΕΗ... και πραγματικά ήταν πολλά...! δεν λέει να μου τα παίρνει η ΔΕΗ...

Το πρόβλημα έχει ως εξής: έχω δυο υπολογιστές στο σπίτι οι οποίοι λειτουργούν σαν servers... ο ένας με windows xp pro έχει επάνω του όλο μου το storage, 3 δίσκοι με δεδομένα (ταινίες, μουσική, προγράμματα κ.λ.π.), ο άλλος φοράει Linux, μια διανομή της Fedora (core 4)... O Linux server παλιότερα πριν πάρω τον router της Linksys λειτουργούσε ως DHCP, DNS server, gateway για το internet και έχει πάνω του e-mule και torrent client...

Τελικά πήρα ένα router για να έχω wireless με WPA encryption απευθείας για τον φορητό και το dell axim x51v, οπότε το Linux έβλεπε μόνο το port 22 για να μπορώ να συνδεθώ με SSH χρησιμοποιώντας private/public keys στο εσωτερικό δίκτυο μέσω ενός VPN... Αυτό όμως θα αλλάξει και θα μείνει μόνο ο windows server και θα κάνω port tunneling στην 22 για να έχω SSH μέσω του cygwin στα xp, ώστε να μπορώ να συνδεθώ με remote desktop… Έτσι βγάζω έναν υπολογιστή εκτός...

Και οι δυο υπολογιστές ήταν 24/7 όποτε κάψανε τα έντερά τους, ο ένας είναι AthlonXP 2400+ και ο άλλος ένας ταπεινός PIII-500@650 MHz σε αέρα τρελό clocking... lol... Αυτοί οι δυο κύριοι καίνε πολύ... Οπότε μια είναι η λύση... ΟΙΚΟΝΟΜΙΑ...

Το πρόβλημα τώρα πιο είναι...? Πώς το κάνεις...! Η λύση που σκέφτηκα είναι μια, να μπορεί να ανοίγει ο υπολογιστής μόνο όταν το θέλω εγώ... το πρόβλημα είναι τώρα ότι εγώ θα χρειαστεί να τον ανοίξω και όταν λείπω από το σπίτι, οπότε εκεί τι κάνω...? σκέφτηκα να προσλάβω μια βουλγάρα και να την παίρνω τηλέφωνο όταν χρειάζεται να τον ανοίγει αυτή, αλλά είναι και αντι-οικονομικό, αλλά και τελικά θα την βάζω να ανοίγει άλλα πράγματα... Τελικά, η λύση που βρήκα είναι στον router...

Ο router μπορεί να μένει πάντα ανοικτός χωρίς να κάνει ευτυχισμένη την ΔΕΗ... αλλά εδώ υπάρχουν άλλα προβλήματα... πως μπορείς με ασφάλεια να ανοίξεις τον server από μακριά...? τα προβλήματα είναι πολλά, αλλά τελικά υπάρχει για όλα λύση... το καλύτερο είναι να έχει κάποιος στατική IP, αλλά επειδή δεν συμβαίνει στους περισσότερους μπορεί να γίνει και με όσους έχουν έναν router ο οποίος υποστηρίζει DDNS (dynamic DNS)... o linksys για παράδειγμα που έχω, υποστηρίζει από κληρονομικού του DDNS από την υπηρεσία της DynDNS.org και ΤΖΟ.com (για όσους δεν ξέρουν οι υπηρεσίες αυτές κάνουν IP redirection στην δυναμική μας IP σε μια στατική)... Αν υποστηρίζει ο adsl router αυτή την υπηρεσία, τότε αναλαμβάνει κάθε ένα προκαθορισμένο χρονικό διάστημα συνδέεται στον server της υπηρεσίας και να τον ενημερώνει ποια IP του έχει δώσει ο provider... Σε αντάλλαγμα αποκτάμε μια στατική IP η οποία δεν είναι αριθμός όπως συνήθως, αλλά αναλύεται για παράδειγμα σε servername.dyndns.org οπότε κάνοντας ping εκεί κάνουμε ping στον server μας...

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

Το ότι υπάρχει επικοινωνία με τον router δεν σημαίνει ότι υπάρχει με τον server o οποίος είναι κλειστός... Την λύση μας την δίνουν κάτι ωραίες συσκευούλες οι οποίες λέγονται embedded device servers... μία από αυτές είναι το XPort της Lantronix (http://www.lantronix.com/device-networking/embedded-device-servers/xport.html)

Το πραγματάκι αυτό που είναι όσο ένας μικρός BIC αναπτήρας το φέρνει η Radel (www.radel.gr) σχετικά φθηνά για αυτά που κάνει... Τι κάνει αυτό το πράγμα τώρα... Στην ουσία είναι ένας microcontroller (ένας 16-bit 8086 υπερχρονισμένος στα 44 ή 88ΜΗz), ο οποίος υποστηρίζει ή έχει γραμμένο μέσα του το δικό του TCP/IP stack... υποστηρίζει full duplex 10Base-T και 100Base-TX και τα πρωτόκολλα TCP/IP, UDP/IP, ARP, ICMP, SNMP, TFTP, Telnet, DHCP, BOOTP, HTTP και AutoIP από τα οποία βέβαια δεν τα χρειαζόμαστε όλα, αλλά κυρίως το HTTP και TCP/IP... Το μαγικό με αυτό το σκ@τό είναι ότι λειτουργεί σαν ένας HTTP server και μπορεί να σερβίρει ένα HTML με ενσωματωμένο ένα java applet το οποίο προγραμματίζουμε εμείς... το HTML αυτό αποθηκεύεται σε ένα ή περισσότερα από τα 6 partitions της εσωτερικής flash του microcontroller το οποίο το καθένα έχει μέγεθος 64ΚΒ ή ένα partition με μέγιστο μέγεθος 384ΚΒ το οποίο είναι υπέρ αρκετό... αυτά όμως στην συνέχεια... επίσης στα θετικά η υποστήριξη AES 256bit encryption...

Αν και η χρήση του xport είναι για μετατροπή δεδομένων μεταξύ RS-232 και TCP/IP και data streaming, εδώ θα το χρησιμοποιήσουμε σαν έναν internet-ethernet ΟΝ/OFF switch... μαγικό...? βέβαια στην συνέχεια μπορείς να κάνεις παπάδες επάνω του και με εξωτερικά περιφερειακά, αλλά αυτό είναι για την ώρα άσχετο... τα χάπια μου...

Το xport υποστηρίζει και δυο GPIO (general purpose I/O) pins τα οποία είναι full programmable από το java applet... τώρα το δίλημμα έχει ως εξής, να χρησιμοποιηθεί και ένας εξωτερικός microcontroller ή να αρκεστούμε μόνο στο xport...? αυτό με προβλημάτισε πολύ και ακόμα δεν έχω σίγουρη απάντηση... οικονομοτεχνικά δεν πρέπει να μπει microcontroller για μείωση κόστους και εξαρτημάτων, αλλά κάτι στο πίσω μέρος του μυαλού μου θέλει να μπει... και αυτό βασικά για να είμαι ανεξάρτητος από το java applet και να μπορώ να κάνω τους χειρισμούς μου σε low level κατευθείαν από τον εξωτερικό microcontroller... θα δείξει...

Οι τρόποι λειτουργίας είναι δυο... ο ένας είναι να χρησιμοποιήσουμε τον HTML server του x-port και να συνδεόμαστε από έξω στην πόρτα 25 η οποία θα έχει γίνει forward από τον router στο x-port και θα την χειρίζεται πλέον αυτό... οπότε με το που συνδεθούμε θα μας σερβίρει το HTML με το java applet και χειριζόμενοι τα GPIO θα ανοίγουμε τον server...

O άλλος τρόπος είναι να συνδεθούμε σε ένα άλλο port το οποίο θα γίνει forward από τον router στο x-port και να μιλάμε απευθείας σε αυτό... βασικά γίνεται εύκολα με telnet, αλλά ύμαρτον, μακριά... μπορεί να γίνει και με ένα winsock από την VB... οπότε στην πόρτα αυτή μπορούμε να στέλνουμε κάποια strings-εντολές που θα τα λαμβάνει πλέον σειριακά rs-232 ο microcontroller πίσω από το x-port και θα κάνει τις κατάλληλες ενέργειες...

Το δεύτερο τελικά μου φαίνεται πιο ασφαλές, οπότε και κάνας @#$@!$ να κοιτάει στην πόρτα εκείνη την στιγμή υπάρχει και μια τυπική 256-bit AES η οποία αν και είναι αστείο, κάτι μπορεί να κρύψει...

Το xport μπορεί να πάρει μια οποιαδήποτε IP που του ορίσουμε εμείς και να μιλάει και να ακούσει σε μια πόρτα την οποία μπορούμε πάλι να ορίσουμε... εδώ έχει αρκετά πράγματα για διάβασμα για τις δυνατότητες και τις ρυθμίσεις του:

http://www.lantronix.com/support/documentation.html#embds

Για να μην φάτε τον χρόνο σας άδικα, όποιος πραγματοποιήσει το project μην χάσει χρόνο με το serial και telnet setup... δεν χρειάζεται για εδώ και είναι και χρονοβόρο...

Αφού ορίσουμε την IP και την πόρτα μετά μπορούμε να κάνουμε ότι θέλουμε... θα ξεκινήσω πρώτα με την περίπτωση της χρήσης εξωτερικού microcontroller... προτιμώ embedded C για την ώρα, παρά java και html βραδιάτικα... θα το ποστάρω άλλη στιγμή και για java, ανάλογα και με το ενδιαφέρον...

Καταρχάς, χρειαζόμαστε ένα κύκλωμα για να κάνουμε την δουλειά μας και ένα PCB δυστυχώς για μερικούς... εγώ τα φτιάχνω μόνος μου με έναν laser printer, UV λάμπες, καυστική σόδα για developer και τριχλωριούχο σίδηρο για αποχάλκωση... υπάρχουν όμως και pcb-άδικα που τυπώνουν pcb με χαμηλό κόστος... όποιος θέλει μπορώ να αναφέρω μερικά... για γρήγορο layout χρησιμοποιώ το Eagle PCB της cadsoft.de ( ftp://ftp.cadsoft.de/eagle/program/4.16r1/eagle-win-eng-4.16r1.exe ) το οποίο για γρηγοροδουλειές είναι μανούλα... παρακάτω ακολουθεί το σχηματικό...

schematicsq4.th.png

Στα γρήγορα εξηγώ τι κάνει το κύκλωμα... Την τροφοδοσία την παίρνω από τα 5V του USB... στον server μου όταν κλείνει η τάση παραμένει στα USB και αυτό με βολεύει γιατί μπορεί να δώσει μέχρι 500mA που είναι αρκετά για το κύκλωμα (το xport καίει κοντά στα 300mA και ο avr tiny λιγότερο από 1.5mA στο 1MHz)... Επίσης το ρεύμα από τα ρελέ είναι επίσης μικρό και περιορίζεται ούτος ή άλλως από τον περιοριστή του USB εσωτερικά...

Επειδή χρειάζομαι μόνο 3.3V από τα 5V που δίνει το USB έχω βάλει 2 διόδους σε σειρά για να μου ρίχνουν την τάση στα 3.6V που είναι κοντά στα 3.3V... γενικά δεν υπάρχει πρόβλημα στην τάση αυτή αντί για 3.3V, θα έχουμε απλά μεγαλύτερη τάση στο core σε περίπτωση που θέλουμε να κάνουμε overclocking στο xport να δούμε πόσο ανεβάζει...

Οι πυκνωτές C1 και C2 είναι coupling... οι δίοδοι D3, D4 είναι fast switching 4148 για προστασία των ρελέ από ανάστροφα ρεύματα στην αποφόρτιση του πηνίου κατά την επαναφορά... Τα τρανζίστορ είναι απλά BC337 τα οποία είναι NPN με μέγιστο ρεύμα συλλέκτη 800mA... μην σας φαίνεται μεγάλο, στιγμιαία μπορεί να δώσει τόσο ρεύμα το USB...

To X1 είναι ο USB connector και ο SV1 είναι ο connector που θα φύγουν τα καλώδια για το Power και Reset Switch πάνω στην motherboard, αντί των κλασικών καλωδίων που φεύγουν από το case...

Επομένως, συνδέουμε το USB της πλακέτας στο PC, το RJ-45 με ένα UTP καλώδιο Ethernet στον router και τέλος τα Reset και Power Switch της motherboard στον connector SV1...

Ακολουθεί και το layout...

layout1jb5.th.png

layout2xj3.th.png

Είμαστε έτοιμοι...!!!

Τώρα με ένα utility της Lantronix (http://www.lantronix.com/device-networking/utilities-tools/device-installer.html) τον DeviceInstaller δίνουμε μια IP στο xport, επιλέγουμε την πόρτα που θα μιλάει και ότι άλλες παραμέτρους θεωρούμε χρήσιμες...

Αφού του δώσουμε IP συνδεόμαστε στην πόρτα 25 του xport και αυτό μας σερβίρει το configuration html του... Στα γρήγορα οι πυθμίσεις που του έδωσα είναι οι παρακάτω:

xport1rh2.th.png

xport2xe0.th.png

Εδιτ: Στην παρακάτω φωτό έχω κάνει λάθος, το remote host δεν είναι η IP του server αλλά του router... προσοχή...

xport3cc2.th.png

Από την πλευρά του router τώρα ενεργοποιούμε το DDNS και κάνουμε forward την πόρτα του xport στην IP του...

ddnsvr7.th.png

ddns2ge4.th.png

Μετά καίμε τον κώδικα στον AVR και είναι έτοιμο και λειτουργεί...

Την δική μου πλακέτα την έχω κάνει μόνο με SMD εξαρτήματα, αλλά έχω ποστάρει το PCB με THD (through hole devices) εξαρτήματα για όσους είναι τσακωμένοι με το κολλητήρι τους...

Σημειώνω ότι ο tiny11 δεν έχει ενσωματωμένο UART, αλλά σε συχνότητα λειτουργίας 1MHz μπορεί με soft mode uart, δηλαδή σε software uart μέχρι και 38.4Kbps Baud rate... (http://www.atmel.com/dyn/resources/prod_documents/DOC0941.PDF)

O κώδικας είναι τελείως ρουτίνας... σε assembly το soft uart και με το CodeVisionAVR ο υπόλοιπος κώδικας σε embedded C...

Επίσης για ασφάλεια καλύτερα την σύνδεση στον server από ένα άλλο pc να την κάνετε με ένα πρόγραμμα σε VB το οποίο μπορεί να κουβαλάτε σε ένα USB Flash Stick... εγώ θα γράψω αυτές τις μέρες ένα σε VB6 το οποίο απλά θα ανοίγει ένα socket στην IP και την πόρτα του DDNS και θα στέλνει κάποιες encrypted εντολές με swift key για ανοίγει και να κλείνει τα ρελέ...

Μόλις ευκαιρήσω θα ποστάρω στο ίδιο thread και τους τελειωμένους κώδικες για την VB6 και τον AVR, εφόσον βέβαια υπάρξει και ενδιαφέρων...

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

UPDATE 28/10/2006

Λοιπόν λόγο δουλειάς το πιάνω σε διάσπαρτα διαστήματα, οπότε υπομονή... Μετά από μια ιδέα που ειπώθηκε για έλεγχο του server μέσω τηλεφώνου, πάντρεψα ένα DTMF κύκλωμα με το xport... το αποτέλεσμα τώρα είναι να μπορεί κανείς να χειρίζεται το ON/OFF του υπολογιστή του είτε μέσω τηλεφώνου με ένα Pin code μερικών ψηφίων είτε μέσω internet... το αποτέλεσμα είναι το ίδιο... παραθέτω τις αλλαγές...

Το κύκλωμα ενώ δεν είναι ιδιαίτερα πολύπλοκο, η λειτουργία είναι πιο σύνθετη και πολύπλοκη, αλλά θα προσπαθήσω να την εξηγήσω όσο πιο απλά γίνεται... Η πολυπλοκότητα είναι μεγαλύτερη λόγο του ότι πολλά κυκλώματα και λειτουργίες έχουν ενσωματωθεί μέσα στον microcontroller ο οποίος είναι ο PSoC CY8C29466-PXI... Αυτός σε αντίθεση με τους υπόλοιπους microcontrollers είναι υβριδικός και περιέχει ξεχωριστά analog και digital blocks τα οποία μπορούμε να τα συνδυάσουμε εμείς όπως θέλουμε και να κάνουμε παπάδες...

Η λειτουργία όσων αφορά τον τηλεφωνικό έλεγχο χωρίζεται σε δυο μέρη, ένα είναι η αναγνώριση ότι το τηλέφωνο χτυπάει και δεύτερο ότι πρέπει το κύκλωμα να σηκώσει την γραμμή και να απαντήσει... σαν ένας αυτόματος τηλεφωνητής βρε αδερφέ... αυτό το πράγμα μπορεί να προγραμματιστεί να σηκώνει το τηλέφωνο μετά από 5 μ3 8 χτύπους για παράδειγμα και μετά να απαντάει με ένα κάποια προγραμματιζόμενα μπιπ και να του απαντάμε με τηλεφωνικούς τόνους από το πληκτρολόγιο του τηλεφώνου (DTMF)… το τι είναι το DTMF μπορείτε να το δείτε εδώ...: http://en.wikipedia.org/wiki/DTMF

Επίσης πληροφορίες για τον PSoC εδώ...: http://www.cypress.com/portal/server.pt?space=CommunityPage&control=SetCommunity&CommunityID=209&PageID=215&gid=13&fid=24&category=All&showall=false

Το κύκλωμα ακολουθεί παρακάτω..:

schematiclp1.th.png

Ξεκινώντας από την τηλεφωνική γραμμή πέφτουμε σε μια γέφυρα ανόρθωσης... εν συντομία σε κατάσταση αναμονής η τηλεφωνική γραμμή έχει στα άκρα της 48VDC, όταν σηκώνουμε το τηλέφωνο πέφτει στα 10VDC, και όταν χτυπάει έρχεται ένα εναλλασσόμενο περίπου 70 ~ 90V... ο πυκνωτής C3 κόβει το DC, η γέφυρα ανορθώνει το εναλλασσόμενο μια zener το περιορίζει και με ένα optocoupler παίρνουμε στο pin P2_4 του PSoC τους παλμούς... το pin αυτό πέφτει σε 8-bit counter που μετράει τους παλμούς και ξέρει επομένως πόσες φορές χτύπησε το τηλέφωνο... Μετά από τον αριθμό παλμών που έχουμε καθορίσει ο PSoC με το pin P2_3 κλείνει το relay της εισόδου της τηλεφωνικής γραμμής και την περνάει στον έλεγχό του... Εκεί από το δευτερεύον του μετασχηματιστή μπορεί ο PSoC να ακούει και να απαντάει ταυτόχρονα... το πάνω μέρος είναι το LINE-IN το οποίο ακολουθεί μια περίεργη πορεία και το κάτω μέρος είναι το LINE-OUT...

To LINE-IN κατευθύνεται στο pin P2_1 το οποίο από πίσω έχει ένα switched-capacitor βαθυπερατό φίλτρο δευτέρου βαθμού σε ladder συνδεσμολογία... έτσι φιλτράρουμε την τηλεφωνική γραμμή ώστε να μην υπάρχουν αρμονικές που μπορεί να μπερδέψουν το MT8870P... Η έξοδος του φίλτρου είναι το pin P0_3 το οποίο στην συνέχεια συνδέεται στο MT8870P και ξανά στον PSoC στο pin P0_0... πίσω από το P0_0 υπάρχει ένας comparator ο οποίος μετατρέπει το DTMF σήμα σε παλμό και η έξοδος του είναι το pin P0_4... από εκεί συνδέεται στο pin P2_0 το οποίο έχει από πίσω έναν 8-bit counter που μετράει τους παλμούς... με τον τρόπο αυτό μαθαίνουμε την διάρκεια του παλμού και μπορούμε να ελέγχουμε με έναν εσωτερικό 16-bit counter αν τα σήματα που λαμβάνουμε είναι τα αναμενόμενα και σωστά, φτιάχνοντας κάποια timeouts με τα οποία καταφέρνουμε την σωστή ροή του κώδικα...

Επίσης όπως είπα και πιο πάνω το DTMF σήμα εισέρχεται και στο ρημάδι το MT8870P το οποίο είναι ένας απλός DTMF decoder της σειράς ο οποίος κωδικοποιεί τα DTMF σήματα σε 4-bit encoding το οποίο το λαμβάνουμε από τα pins P1_3, P1_4, P1_5, P1_6 και ένα σήμα STD στο pin P1_7... Το STD δεν είναι άλλο από ένα σήμα το οποίο γίνεται HIGH όταν υπάρχουν έτοιμα κωδικοποιημένα δεδομένα στον MT8870P...

Επίσης υπάρχει και το XPORT το οποίο πέφτει και αυτό πάνω στον PSoC... όλα τα υπόλοιπα είναι θέμα κώδικα και σωστού block programming του PSoC... H δομή των Analog και Digital blocks του PSoC είναι η παρακάτω...:

pr3ul6.th.png

Ακολουθεί το pinout…:

pr2pq2.th.png

Και το pcb...:

pbc1eb3.th.png

pbc2yf2.th.png

Φυσικά για τον κώδικα ούτε λόγος να γίνεται ακόμα... δεν έχω προλάβει αλλά θα γίνει και αυτό... όποιος θέλει να πειραματιστεί, ευχαρίστως... απλά να πω ότι επειδή είναι πολύ time critical εφαρμογή θέλει προσοχή στον χειρισμό των counters ώστε να λαμβάνονται σωστά τα σήματα...

ΕΔΩ το παραπάνω κύκλωμα alive 'n kicking, το οποίο συναρμολόγησε τελικά και ο Βαγγέλης (Bassjunkies) και κάναμε μερικές δοκιμές...

  • Like 1
Link to comment
Share on other sites

Τρομερή η προσπάθεια και μπράβο σου πραγματικά για την όλη υλοποίηση , αλλά νομίζω πως για να αποφύγεις όλο αυτόν τον μπελά-και θεωρώντας δεδομένο πως ο ρούτερ μένει συνέχεια online- μπορείς να αφήσεις το wake on lan στην κάρτας δικτύου ανοικτό και απλά να στέλνεις το λεγόμενο magic packet απο συγκεκριμένες σελίδες που υπάρχουν για αυτή τη δουλειά κάθε φορά που θές να ανοίξεις κάποιο pc. Απο εκεί και πέρα εφόσον ανοίξει το πισι και έχεις κάνει τις ρυθμίσεις σου νομίζω είσαι gg.

Πάντως πολύ καλώς και πλακέτα και απόλα, μπράβο σου!

Link to comment
Share on other sites

Ευχαριστώ παιδιά... όταν η ανάγκη οδηγεί...

Λοιπόν, το wake on lan (WOL) είναι όντως η πιο απλή λύση και με απασχόλησε στην αρχή, αλλά νομίζω δεν σου παρέχει ασφάλεια...

καταρχήν το ξέρουν πολλοί ότι υπάρχει, οπότε αν παρακολουθήσει κανείς το traffic στον router μπορεί να δει το port του WOL και μετά να στείλει την MAC της κάρτας... ενώ με ένα κυλιόμενο κωδικό με μεγάλη περίοδο στο παραπάνω κύκλωμα δεν μπορεί να γίνει αυτό...

Επίσης, αν θυμάμαι καλά το TCP/IP φανερώνει τη MAC address της κάρτας δικτύου, που χρησιμοποιεί και το WOL για να ξυπνήσει την κάρτα... αυτό ισχύει για παράδειγμα αν τρέχει το ARP table...? δεν θυμάμαι, κάποιος που ξέρει από δίκτυα θα μας πει... οπότε μπορεί οποιοσδήποτε απ'έξω να στείλει το magic packet...

Link to comment
Share on other sites

Πολύ έξυπνο Jaco Μπράβο :T:

Μιας και αναφερόμαστε σε τρόπους power On να πω και εγώ κάτι που θυμάμαι. Σε ορισμένες μητρικές (νομίζω gigabyte ήτανε) υπήρχε/υπάρχει μια ρύθμιση στο bios που λέγεται power on/by external modem. Αυτή ουσιαστικά τι έκανε: Συνδέεις ένα εξωτερικό modem σε μια γραμμή τηλεφώνου και όταν πάρεις τηλ. στον αριθμό της γραμμής ξεκινάει ο Η/Υ. Βέβαια δεν είναι και τόσο καλή λύση, αν στη συγκεκριμένη γραμμή δέχεσαι πολλά τηλεφωνήματα, όμως πάραυτα μπορεί να βολέψει κάποιον που έχει δύο γραμμές και ιδιαίτερα αν η μία είναι αρκετά προσωπική.

Link to comment
Share on other sites

Νομιζω οτι υπαρχει μια ακομα λυση για απομακρυσμενο on/off ενος pc (η οποιασδηποτε αλλης ηλεκτρικης συσκευης) αλλα ειναι πανακριβο...Ειναι ενα συστημα εντολων μεσω SMS (χρησιμοποιειται κατα κορον σε ηλεκτρολογικους πινακες αρδευτικων αντλιων), το οποιο χρειαζεται μια sms καρτα και αναλογα το sms που στελνεις στον αριθμο αυτο σου εκτελει καποιες απλες εντολες και σου επιστρεφει επιβεβαιωση αν το θες (πχ σου οπλιζει 1 ρελε το οποιο σου δινει ρευμα καπου). Με ενα ρελε στο μπουτον εκκινησης του pc πιθανοτατα να γινεται η δουλεια που θελουμε. Βεβαια δεν το εχω ψαξει και πολυ αλλα ξερω οτι υπαρχει αυτο το συστημα.

Link to comment
Share on other sites

Αρχική απάντηση από Jaco [Σήμερα, στις 08:25]

Επίσης, αν θυμάμαι καλά το TCP/IP φανερώνει τη MAC address της κάρτας δικτύου, που χρησιμοποιεί και το WOL για να ξυπνήσει την κάρτα...

Αν γίνεται αυτό τότε :eek:

Πάντως εξαιρετική η προσπάθειά σου. Από περιέργεια ποιά σχολή έχεις βγάλει??

Link to comment
Share on other sites

Το GSM είναι τρομερή ευκολία για γενικότερο automation... έχει όμως ένα αρνητικό... το κόστος...

Κοστίζει και σαν συσκευή, αλλά και σαν χρήση... δηλαδή για να ανοίξεις τον server θα πρέπει να στείλεις sms ή να πάρεις τηλέφωνο... η χρέωση sms δεν συμφέρει, αλλά υπάρχουν όμως GSM modem τα αποία μπορούν να προγραμματιστούν να κάνουν κάποιες λειτουργίες μόνο αναγνωρίζοντας τον αριθμό τηλ που τα καλεί και επιβεβαιώσουν με ένα callback... Συνήθως τα modem αυτά έχουν και κάποια gpio αν δεν θέλεις εξωτερικό microcontroller... τέτοια είναι τα sagem, wavecom, telit, telco κ.ά. τα wavecom είναι μακράν τα πιο παραμετροποιήσημα και τρέχουν σε έναν ARM7 με 16Mbit flash και υποστηρίζουν παπάδες, όπως διπλό interface που τα ονομάζουν basic και adl... βασικά το κόστος όμως είναι απαγορευτικό...

Αυτό με την τηλεφωνική γραμμή είναι πολύ καλή ιδέα...! και περιέχει πολύ μεγαλύτερη ασφάλεια από όλες τις περιπτώσεις... έχω υπόψην έναν microcontroller της Cypress τον PSOC C8CY29466 ο οποίος είναι ένας mixed digital - analog block microcontroller, ο οποίος έχει ενσωματωμένο ένα DTMF enc/decoder...

Οπότε τώρα ψήνομαι να το κάνω τις επόμενες μέρες... αυτός θα παρακολουθεί την γραμμή και με ένα Line detector θα απαντά μετά από 10 π.χ. χτύπους και στην συνέχεια θα απαντάει μια ακολουθία από dtmf τόνους σαν προειδοποίηση ότι είναι έτοιμος να λάβει εντολές... οπότε από την άλλη άκρη της γραμμής θα μπορώ να δώσω ένα Pin και την εντολή και αυτός να κλείνει τα ρελέ... έτσι έχεις την ασφάλεια του pin...

To ίδιο βέβαια μπορεί να γίνει με οποιοδήποτε microcontroller που δεν έχει dtmf, δημιουργώντας με pwm δυο συχνότητες από δυο pin και μιξάροντάς σε ένα σημείο για βγει το dtmf... αλλά λόγο του pwm θέλει πολύ κοφτά dsp φίλτρα για τις αρμονικές...

Θα ποστάρω και ένα κύκλωμα για dtmf detection με ρελέ...

επίσης σκέφτομαι ότι αντί για ρελέ μπορούν να χρησιμοποιηθούν και οπτο-τρανζίστορ γιατί το ρεύμα από το mobo δεν είναι μεγάλο και πάνω στον connector του mobo σου δίνει και την πολικότητα με το +/- οπότε δεν υπάρχει και κίνδυνος λάθους συνδεσμολογίας... εξάλλου αυτά που έχω χρησιμοποιήσει είναι της traffo και είναι γενικά δύσκολο το ρελέ με τάση ελέγχου κάτω από 5V γιατί δεν μπορεί να αποθηκεύσει αρκετή ενέργεια το πηνίο για κλείσει τον διακόπτη...

Link to comment
Share on other sites

Ένα μεγάλο μπράβο για όλο αυτό Project....

Μπορεί να μην κατάλαβα και πολλά.....αλλά είναι πολύ ενδιαφέρον...!

Όμως τόσο πολύ καίνε τα pc σου...?

Και εμένα το δικό μου 24/7 ανοιχτό είναι....αλλά δεν είχα τέτοια προβλήματα...!

Με θερμοσίφωνες και κουζίνες....ή το οξυγόνο παλιά της γιαγιάς μου...ολόκληρος κομπρέσορας ήτανε....

Μπροστά σε όλα αυτά μου φαίνεται ότι ένα pc δεν μπορεί να καίει και τόσο....!!

Το δεύτερο με την κλήση και την χρήση κάποιου pin μου άρεσε περισσότερο μιας και μου φάνηκε πιο εύκολο....!

Περιμένουμε αποτελέσματα.....!!!

Link to comment
Share on other sites

Αρχική απάντηση από Jaco

Λοιπόν, το wake on lan (WOL) είναι όντως η πιο απλή λύση και με απασχόλησε στην αρχή, αλλά νομίζω δεν σου παρέχει ασφάλεια...

καταρχήν το ξέρουν πολλοί ότι υπάρχει, οπότε αν παρακολουθήσει κανείς το traffic στον router μπορεί να δει το port του WOL και μετά να στείλει την MAC της κάρτας... ενώ με ένα κυλιόμενο κωδικό με μεγάλη περίοδο στο παραπάνω κύκλωμα δεν μπορεί να γίνει αυτό...

Επίσης, αν θυμάμαι καλά το TCP/IP φανερώνει τη MAC address της κάρτας δικτύου, που χρησιμοποιεί και το WOL για να ξυπνήσει την κάρτα... αυτό ισχύει για παράδειγμα αν τρέχει το ARP table...? δεν θυμάμαι, κάποιος που ξέρει από δίκτυα θα μας πει... οπότε μπορεί οποιοσδήποτε απ'έξω να στείλει το magic packet...

Κατ' αρχήν είναι πολύ δύσκολο να παραβιάσει κάποιος έναν router. Πέραν από τους κωδικούς υπάρχουν και οι access lists για να συνδεθεί κάποιος σε αυτόν. Κοινώς και να έχεις τον κωδικό δε θα μπορείς να συνδεθείς από το σπίτι σου ή το net cafe της γειτονιάς σου, παρά μόνο από συγκεκριμένα μηχανήματα, ενίοτε μέσα στον ίδιο χώρο που είναι και ο router.

Αλλά ακόμα και να συνδεόταν κάποιος σε router δεν έχει και πολλές δυνατότητες να τρέξει το πρόγραμμά του για το sniffing, εκτός αν ξέρει να γράφει προγράμματα για cisco ios, juniper Junos κλπ...

Το magic packet στο WOL όντως περιέχει την ethernet address της κάρτας 16 φορές, αλλά είναι άχρηστη σε κάποιον που δεν είναι στο ίδιο υποδίκτυο με εσένα. Και επειδή η σύνδεση που κάνεις στον isp είναι p-t-p στο ίδιο υποδίκτυο είσαι εσύ και ο router του isp σου.

Τέλος να προσθέσω ότι το WOL χρησιμοποιεί πακέτα udp που σημαίνει ότι κάποιος επίδοξος cracker δε θα λάβει απάντηση αν το pc σου ξεκινήσει τελικά, χώρια που δε νομίζω να δοκιμάσει να στείλει πακέτα σε 65000+ πόρτες και να περιμένει μπας και του παίξει.

Γνώμη μου είναι να μην το φοβάσαι.

Link to comment
Share on other sites

Το MAC δένει με το IP στο ARP table ανεξάρτητα του DYNAMIC ή του STATIC. Οπότε μπορείς να διαβάσεις σχετικά εύκολα την MAC ΑΝ ΚΑΤΑΦΕΡΕΙς και κανείς retrieve. Bέβαια, όπως κατάλαβα o router σου υποστηρίζει DDNS και αυτό είναι καλό αναφορικά με την ασφάλεια σου. Εγώ πάντως θα πρότεινα να κάνεις MAC cloning (σε συνεργασία με τον isp) και να ησυχάσεις μια και καλή.

Aπό την άλλη, θα ήθελα να τονίσω πώς ο router εν αντίθεση με το switch παραβιάζεται για πλάκα ακομα και αν του βάλεις username και password.....Ειδικά με το Brutus Force (το αγαπημένο μου) όπου αφού σου σκανάρει όλες τις πόρτες σε χρόνο dt, στην συνέχεια δοκιμάζει μια σειρά από παραμέτρους αναφορικά με το username και το pass καταλαβαίνοντας πότε πέρασε, από την απάντηση που δίνει το port 21/23/22 - συνήθως. Ακόμα και αν του πεις να κόβει στις τρεις αποτυχημένες προσπάθειες, το παραπάνω εργαλείο ξεγελά τον router και ανοίγει ακόμα περισσότερες (ανάλογα την ταχύτητα του δικτύου). Τι σημαίνει αυτό? Ότι μπορώ να κάνω login στον router, να κάνω retrieve MAC ακόμα και αν είμαι σε άλλο δίκτυο. Προστασια στην περίπτωση αυτή..πάνω από 10 characters στο password.

Πέρα των παραπάνω, αν κάνω Packet Capturing (βλέπε WinPcap -) - (σχετικά δύσκολο αφού έχεις DDNS) δεν χρειάζεται ούτε καν να σε σκαναρώ ούτε να ψάξω να βρω MAC κλπ. Το μόνο που κάνω είναι να στέλνω το ίδιο πακέτο με σένα. Για το τελευταίο η μόνη σίγουρη λύση είναι το Intruder Detection System IDS πού πραγματικά κάνει δυναμικό port redirection και εκεί χάνεται η μπάλα. Για παράδειγμα, ακόμα και να αντιγράφεις το πακετο είτε TCP είτε UDP είναι άχρηστο αφού εσύ για άλλου πας και αλλού καταλήγεις. ’σε που σε κλειδώνει μόλις καταλάβει πως κάτι περίεργο συμβαίνει (port scanning πχ). Πάντως σε γενικές γραμμές έχεις κάνει απίστευτα καλή δουλεία. Μπράβο.

Link to comment
Share on other sites

Το restrict permission παρόλη την ασφάλεια, με περιορίζει από το μέρος που μπορώ να έχω πρόσβαση... Από πόρτες σε κανονικές συνθήκες δεν έχω πολλές ανοικτές, και το remote control που με καίει το κάνω από με port tunneling στην 22 με 1024/2048bit private/public key... συν κάτι πόρτες για html, VPN (και battlefield)... οπότε δεν θέλω να ανοίξω άλλη μια για το magic packet, μάλλον περισσότερο από φόβο γιατί δεν έχω έλεγχο σε αυτήν από τον χαζό router...

για τον λόγο αυτό σκέφτηκα να ανοίξω μια πόρτα για την συσκευή η οποία μπορεί να είναι ψευτοκρυπτογραφημένη με το AES, αλλά το κυριώτερο είναι ότι θα μπορεί να ενεργοποιήται μόνο από ένα κυλιόμενο μη επαναλαμβανόμενο κωδικό για τον οποίο δεν υπάρχει περιορισμός μεγέθους... έχω στον microcontroller μπορώ να φτιάξω ένα κλειδί 2048bit το οποίο να δημιουργείται βάση αλγορίθμου κάθε φορά...

Επίσης έχω γραμμένο ήδη κώδικα για RSA encrytpion

ΕΔΩ

ο οποίος θα μιλάει στην πόρτα μεταξύ του xport και του προγράμματος που θα χρησιμοποιώ από το flash-άκι μου σε οποιοδήποτε υπολογιστή....

όλα αυτά για να ανοίγω μια πόρτα... :nada:

εντάξει ξέρω... το έχω παρατραβήξει... αλλά πλέον το κάνω για την φάση και όχι τόσο για την ουσία... είμαι στο στάδιο του dtmf creation για ενεργοποίηση από τηλέφωνο... τελικά θα το συνδυάσω και με το xport για TCP/IP ενεργοποίηση και από τηλεφώνου με pin και dtmf commands... το πρώτο είναι ήδη έτοιμο, αλλά χωρίς την RSA...

Link to comment
Share on other sites

Αρχική απάντηση από Mainframe [Χθες, στις 18:04]

Bέβαια, όπως κατάλαβα o router σου υποστηρίζει DDNS και αυτό είναι καλό αναφορικά με την ασφάλεια σου.

Για ποιο λόγο είναι καλό για την ασφάλεια το DDNS; Αν προσφέρει κάτι είναι δυνατότητα να αντιστοιχείς ένα όνομα σε μία ip.

Αρχική απάντηση από Mainframe [Χθες, στις 18:04]

Aπό την άλλη, θα ήθελα να τονίσω πώς ο router εν αντίθεση με το switch παραβιάζεται για πλάκα ακομα και αν του βάλεις username και password.....Ειδικά με το Brutus Force (το αγαπημένο μου) όπου αφού σου σκανάρει όλες τις πόρτες σε χρόνο dt, στην συνέχεια δοκιμάζει μια σειρά από παραμέτρους αναφορικά με το username και το pass καταλαβαίνοντας πότε πέρασε, από την απάντηση που δίνει το port 21/23/22 - συνήθως. Ακόμα και αν του πεις να κόβει στις τρεις αποτυχημένες προσπάθειες, το παραπάνω εργαλείο ξεγελά τον router και ανοίγει ακόμα περισσότερες (ανάλογα την ταχύτητα του δικτύου). Τι σημαίνει αυτό? Ότι μπορώ να κάνω login στον router, να κάνω retrieve MAC ακόμα και αν είμαι σε άλλο δίκτυο. Προστασια στην περίπτωση αυτή..πάνω από 10 characters στο password.

Δε βλέπω το λόγο που ένα router είναι λιγότερο ασφαλές από ένα switch. Όλα τα routers έχουν κάποιο υποτυπώδες firewall-acl που θα αποτρέπει το login από το internet ή από άσχετες ip, οπότε το αγαπημένο σου brutus force θα χτυπιέται μόνο του.

Εγώ κυρίως αναφερόμουν σε routers των isp, κατηγορίες cisco, juni, nortel κλπ. Με το να καταφέρεις να χακέψεις το οικιακό routerάκι του πελάτη δε σου δίνει και πολλές δυνατότητες, εκτός από το να του μαμήσεις τη σύνδεση. Στους παραπάνω routers λοιπόν, αν υποθέσουμε ότι βρεις το user-pass και μπεις, για να περάσεις σε enable (ή read-write mode) θα πρέπει να δοκιμάσεις τους κωδικούς με το χέρι, μιας και θα είσαι ήδη σε κάποιο shell στο οποίο δεν μπορείς να τρέξεις τα bf σου.

Αρχική απάντηση από Mainframe [Χθες, στις 18:04]

Πέρα των παραπάνω, αν κάνω Packet Capturing (βλέπε WinPcap -) - (σχετικά δύσκολο αφού έχεις DDNS) δεν χρειάζεται ούτε καν να σε σκαναρώ ούτε να ψάξω να βρω MAC κλπ. Το μόνο που κάνω είναι να στέλνω το ίδιο πακέτο με σένα. Για το τελευταίο η μόνη σίγουρη λύση είναι το Intruder Detection System IDS πού πραγματικά κάνει δυναμικό port redirection και εκεί χάνεται η μπάλα. Για παράδειγμα, ακόμα και να αντιγράφεις το πακετο είτε TCP είτε UDP είναι άχρηστο αφού εσύ για άλλου πας και αλλού καταλήγεις. ’σε που σε κλειδώνει μόλις καταλάβει πως κάτι περίεργο συμβαίνει (port scanning πχ). Πάντως σε γενικές γραμμές έχεις κάνει απίστευτα καλή δουλεία. Μπράβο.

Εξακολουθώ να αναρωτιέμαι ποιον router κατά μήκος της διαδρομής που θα ακολουθήσει το πακέτο θα χακέψεις ώστε να διαβάσεις τα πακέτα που στέλνει.

Link to comment
Share on other sites

UPDATED...!

πρόσθεσα και ένα κύκλωμα ελέγχου της τηλεφωνικής γραμμής για απομακρυσμένο έλεγχο με DTMF... φυσικά παραμένει ο έλεγχος μέσω internet...

Δεν είναι ακόμα έτοιμος ο κώδικας... οπότε είμαι στο 50%...

Link to comment
Share on other sites

Χαίρομαι που αρέσει η ιδέα... :)

Έπεται και συνέχεια...

περιμένω μερικές ξέγνιαστες και χαλαρές ωρίτσες, 4 - 5 το πολύ, να γράψω τον κώδικα για τον Atmel και τον PSoC... θα μου κάτσουν που θα πάει...

Link to comment
Share on other sites

  • 4 months later...

Φιλε, διαβασα περιληπτικα το πρωτο σου γραμμα και θα ηθελα μονο να σου πω οτι εισαι υπερβολικος. Οι υπολογιστες δεν καινε τοσο πολυ ρευμα. Κι εγω εχω 2 υπολ/στες ολο το 24ωρο καιο η χρεωση ειναι ελαχιστη. Οποτε μη σκοτιζεσαι με αυτο το θεμα.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...