Come 'testare' un contatto normalmente aperto via tcp/ip?

In una rete locale, vorrei leggere da programma installato su pc1, un contatto normalmente aperto L'unico mezzo di comunicazione del pc1 con l'esterno e' la rete locale Vorrei evitare di interrogare continuamente il contatto per sentire quando viene chiuso, ma esserne 'informato' in qualche modo Comunque, se fosse per semplificare l'elettronica, anche l'interrogazione ciclica sarebbe sopportabile Secondo voi qual'e' la via piu' semplice/economica per ottenere quanto richiesto (per combinazione intendo hardware e software)? Ciao e grazie RobertoA

Reply to
RobertoA
Loading thread data ...

Il 31/05/2014 15:27, RobertoA ha scritto:

Puoi usare i 2 doppini non usati del cavo ethernet 100, G.

Reply to
Giorgio

Il 31/05/2014 15:27, RobertoA ha scritto:

Sono curioso di sentire altre risposte, ma ormai (intendo al giorno d'oggi) un Raspberry mi sembra diventato un'alternativa economicamente interessante. Alimentazione e lan da un lato e contatto collegato ad un pin GPIO dall'altra tramite una resistenza di pull-up, fine dell'hardware.

Uno script Python sul Raspi che legge il contatto, gestisce l'antirimbalzo, e quando lo stato varia apre una connessione TCP verso il PC destinatario inviandogli un messaggio.

Sul PC destinatario uno script in qualsiasi linguaggio che faccia da server TCP in ascolto, magari si puo` aggiungere all'interno del programma gia` presente.

Reply to
Claudio_F

"Giorgio" ha scritto nel messaggio news:5389e3b9$0$20697$ snipped-for-privacy@news.tiscali.it...

Grazie per la risposta Di che doppini 'non usati' stai parlando? E supponendo ci siano, quando arrivano al pc1 che deve 'leggere' lo stato del pulsante, come dovrebbero essere usati?

Reply to
RobertoA

"Claudio_F" ha scritto nel messaggio news:lmcoli$lop$ snipped-for-privacy@speranza.aioe.org...

Grazie per la risposta Dici che a meno del costo di un raspberry non c'e' niente? Che possa parlare via ethernet intendo

Reply to
RobertoA

"RobertoA" ha scritto nel messaggio news:lmckl5$ddm$ snipped-for-privacy@virtdiesel.mng.cu.mi.it...

[cut]

Se si tratta di ethernet 100 mbit cablata vengono utilizzate solo 2 coppie su 4. Fai due adattatori M/F per portarti fuori una coppia, colleghi il contatto dall'altra parte e lato pc potresti utilizzare un convertitore USB to serial collegando TX ed RX alla coppia. Un semplice programmino invia a bassa velocita' (1200 bps o meno) un pacchetto formato da uno o piu' byte e, se lo ricevi, significa che il

Se non hai il filo, esistono dei moduli che forniscono una seriale over wifi tipo questo che acquistai tempo fa e mai provai

formatting link
.

Ciao, Pier.

formatting link

Reply to
Pier GSi

Il giorno sabato 31 maggio 2014 15:27:05 UTC+2, RobertoA ha scritto:

...

Prova a collegare su un connettore plug l'1 col 3 e il 2 col 6 (Tx con Rx), fai il ping (al tuo stesso PC) e guarda cosa succede.

Piccio.

Reply to
Piccio

"Piccio" ha scritto nel messaggio news: snipped-for-privacy@googlegroups.com... Il giorno sabato 31 maggio 2014 15:27:05 UTC+2, RobertoA ha scritto:

...

Prova a collegare su un connettore plug l'1 col 3 e il 2 col 6 (Tx con Rx), fai il ping (al tuo stesso PC) e guarda cosa succede.

Piccio.

---------------------------

Grazie per la risposta Non ho capito bene come funzionerebbe il resto della rete locale Se il cavo che parte da pc1 lo mando allo switch principale della lan, come faccio a cortocircuitare il tx e l'rx ? Se il pc stesse trasferendo dati con altri dispositivi?

Reply to
RobertoA

Il giorno domenica 1 giugno 2014 09:50:51 UTC+2, RobertoA ha scritto:

In effetti occorrerebbe una seconda scheda di rete dedicata.

Piccio.

Reply to
Piccio

Il 31/05/2014 17:32, RobertoA ha scritto:

Non lo so, per questo ero curioso di sentire altre risposte. Sia Arduino ethernet che i comuni serial server costano di piu` e non e` detto che possano originare traffico senza ulteriore hardware.

E comunque il raspi si puo`programmare per fare / leggere cose arbitrariamente complesse (nei limiti della sua velocita`), per cui e` molto di piu` di un semplice "ripetitore di contatto".

Lo avevo preso tempo fa ma mai acceso. Sull'onda della curiosita` nata da questo thread l'ho provato ieri sera per la prima volta con la sua distribuzione base (raspbian). Ci sono ancora molte cose oscure, ma la lettura contatto (con debounch software) + trasmissione TCP del messaggio APERTO o CHIUSO ad ogni variazione funziona:

#! /usr/bin/env python #--------------------------------------------------------------------- # RaspberryPi TCP client - Python 2 & 3 - By C.Fin 2014 #--------------------------------------------------------------------- import RPi.GPIO as gpio import time import socket #--------------------------------------------------------------------- class Debouncher(object):

def __init__(self, initial_state=0, cyc=1): self.cyc = cyc self.state = 2 if initial_state == 0 else 0 self.counter = 0

def debounch(self, value): if self.state == 0: if value == 0: self.counter=self.cyc self.state = 1 return 1

elif self.state == 1: if value == 1: self.state = 0 else: self.counter -= 1 if self.counter == 0: self.state = 2 return 1

elif self.state == 2: if value == 1: self.counter = self.cyc self.state = 3 return 0

else: if value == 0: self.state = 2 else: self.counter -= 1 if self.counter == 0: self.state = 0 return 0 #--------------------------------------------------------------------- def message(msg): print(msg) sock = socket.socket() sock.settimeout(1) REMOTE_ADDR = "192.168.1.25", 4005 try: sock.connect(REMOTE_ADDR) sock.sendall(msg.encode("ascii")) sock.close() except socket.error: print("No connessione TCP!") #--------------------------------------------------------------------- def main(): ACT = 1 # 0=chiuso verso massa 1=chiuso verso Vcc gpio.setmode(gpio.BCM) gpio.setup(24, gpio.IN) if gpio.input(24) == ACT: closed = True ; message("CHIUSO") else: closed = False ; message("APERTO") debouncher = Debouncher(ACT if closed else ACT^1, cyc=9) while True: time.sleep(0.010) contact = debouncher.debounch(gpio.input(24)) if contact == ACT: if not closed: closed = True ; message("CHIUSO") else: if closed: closed = False ; message("APERTO") #--------------------------------------------------------------------- main()

Sul PC destinatario il server stampa i messaggi in arrivo:

#! /usr/bin/env python #--------------------------------------------------------------------- # Server TCP - Python 2 & 3 - By C.Fin 2014 #--------------------------------------------------------------------- try: from socketserver import TCPServer, BaseRequestHandler except ImportError: from SocketServer import TCPServer, BaseRequestHandler #--------------------------------------------------------------------- class Gest(BaseRequestHandler):

def handle(self): sock = self.request data = sock.recv(1024) addr = self.client_address print( "From (%s:%s) Recieved: " % (addr[0], addr[1], data.decode("ascii")) ) #--------------------------------------------------------------------- def main(): LOCAL_ADDR = "192.168.1.25", 4005 server = TCPServer(LOCAL_ADDR, Gest) server.serve_forever() #--------------------------------------------------------------------- main()

From (192.168.1.12:44601) Recieved: From (192.168.1.12:44602) Recieved: From (192.168.1.12:44603) Recieved: From (192.168.1.12:44604) Recieved: From (192.168.1.12:44605) Recieved: From (192.168.1.12:44606) Recieved: From (192.168.1.12:44607) Recieved: From (192.168.1.12:44608) Recieved: From (192.168.1.12:44609) Recieved: From (192.168.1.12:44610) Recieved: From (192.168.1.12:44611) Recieved:

Reply to
Claudio_F

Il 01/06/2014 11:36, Piccio ha scritto:

Un banale adattatore USB-Ethernet e' sufficiente, pochi euro e si risolve. Meglio se configurato con un indirizzo IP diverso dalla LAN. I tempi di risposta pero' sono dell'ordine del secondo.

angelo

Reply to
angelo

Il 01/06/2014 22:15, RobertoA ha scritto:

Come ha suggerito Piccio: collegando i pin 1+3 e 2+6 sul plug ethernet.

angelo

Reply to
angelo

"angelo" ha scritto nel messaggio news:lmfm3f$rdk$ snipped-for-privacy@speranza.aioe.org...

E quando hai la presa usb disponibile (del convertitore usb-ethernet) come fai a 'sentire' la chiusura di un contatto?

Reply to
RobertoA

Oppure usare una uscita della scheda audio per generare un segnale e rilevarlo con uno degli ingressi.

Reply to
asdf

"angelo" ha scritto nel messaggio news:lmg1k6$qd5$ snipped-for-privacy@speranza.aioe.org...

No, spetta. Allora il pc1 si collega col cavo ethernet allo switch centrale Il convertitore ethernet-usb si collega col cavo ethernet allo switch centrale (almeno immagino tu intenda questo) Ora resta il cavo usb del convertitore, immagino da usare per 'sentire' la chiusura contatto Come fai a far 'leggere' al pc la chiusura di un contatto usando il cavo usb?

Reply to
RobertoA

L'unico canale di comunicazione che il pc1 ha con l'esterno e' la connessione lan

Reply to
RobertoA

Il 01/06/2014 23:19, RobertoA ha scritto:

Direi di lasciare la rete com'e' e usare l'adattatore USB per "sentire" il tuo contatto. Per farlo devi prendere un cavo di rete, inserirlo nell'adattatore e, all'altro capo, collegare tra loro i fili 1 e 3 mentre l'interruttore lo metti tra il 2 e il 6. Poi configuri l'indirizzo IP dell'adattatore (possibilmente esterno alla tua rete) e alla fine con un ping al suo indirizzo sai se risponde o meno. Naturalmente tra l'interruttore e l'adattatore USB il collegamento dev'essere diretto, senza altri dispositivi in mezzo.

angelo

Reply to
angelo

Il giorno domenica 1 giugno 2014 23:20:24 UTC+2, RobertoA ha scritto:

Oppure collega una qualsiasi periferica con presa di rete (IpCam, stampante , altro) e interrompi tramite l'interruttore il segnale Rx: se risponde all

Naturalmente IP fisso, no DHCP.

Piccio.

Reply to
Piccio

"angelo" ha scritto nel messaggio news:lmg6ts$855$ snipped-for-privacy@speranza.aioe.org...

Allora ho capito male io, intendi dire che l'adattatroe usb-ethernet va collagato al pc1 via usb? E allora non posso, l'unico canale comunicazione che ha il pc1 con l'esterno e' la rete locale

Reply to
RobertoA

"Piccio" ha scritto nel messaggio news: snipped-for-privacy@googlegroups.com... Il giorno domenica 1 giugno 2014 23:20:24 UTC+2, RobertoA ha scritto:

Oppure collega una qualsiasi periferica con presa di rete (IpCam, stampante, altro) e interrompi tramite l'interruttore il segnale Rx: se risponde allora

Naturalmente IP fisso, no DHCP. Piccio.

--------------------

Ringrazio per la risposta Veramente cercavo qualcosa di piu' semplice di un Arduino o Beagleboard Una telecamera ip e' sicuramente roba piu' complessa Vorrei individuare un prodotto del tipo cpu-interfacciaethernet-webserver Ridotto ai minimissimi termini

Reply to
RobertoA

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.