17
Feb
08

problemi di comunicazione

Nell’albergo della mia ragazza, mi trovo a dover far comunicare un vecchio centralino con il pc della reception (attrezzato con Ubuntu), per poter stampare a video il log delle telefonate e di conseguenza mandare in pensione la vecchia stampante ad aghi.
La connessione avviene tramite /dev/ttyS0, tutti i parametri sono impostati secondo le specifiche fornite dal produttore del centralino (baudrate: 1200, databits: 8, stopbits: 2, parità: none, controllo flusso: hardware) e lanciando la stampa dal centralino, i dati vengono visualizzati regolarmente.

Il problema è che ogni tentativo di loggare in un file quei dati, porta ad un file illeggibile dai normali editor di testo (ho provato con cutecom, minicom, kermit ed anche con “cat /dev/ttyS0 > file.log”).
L’unico modo per visualizzare il contenuto è fare un bel “cat” nel terminale, soluzione non praticabile dal personale di reception.

Credo di essere risalito alla sorgente del problema: ogni riga trasmessa comincia con un carattere 0×18, che corrisponde in ASCII al comando “CANCEL”; le cose che non capisco sono:

  • perchè ogni linea comincia con un CANCEL?
  • è realmente questo che impedisce a Gedit di aprire il mio log?
  • come faccio a “strippare” quel carattere dall’output e mettere solo il testo in un file di testo ?

Ogni consiglio è gradito, anche se prevede l’uso del terminale: al limite faccio uno script automatizzato per i centralinisti, basta che poi possano aprire il log con un editor di testo.

Come premio anticipato, fornisco un bel cartello “area videosorvegliata” in formato SVG rifatto da me sopra a quello ministeriale, dato che quest’ultimo è una .gif troppo piccola per ottenere una stampa decente.

Clicca sull’immagine qui sotto per ottenere il file .svgarea_videosorvegliata.png


23 Risposte a “problemi di comunicazione”


  1. 17 Febbraio 2008 alle 23:00

    Prova

    cat infile | sed ’s/^.//’ > outfile

  2. 2 maurizio
    17 Febbraio 2008 alle 23:25

    al max credo che il comando vada modificato con un /g alla fine perche con il sed l’estensione /g permette di effettuare la modifica in ogni occorrenza del file.
    dovrebbe andare bene..

  3. 17 Febbraio 2008 alle 23:29

    la strada è buona, nel senso che mi ha rimosso tutti i ^X, ma se lo apro con vim ci sono ancora in giro dei ^M ed un ^@ proprio all’inizio… ragazzi, non ci capisco nulla di queste cose! :P

  4. 17 Febbraio 2008 alle 23:34

    posto una snippet del file in questione per spiegare meglio, più di così non posso perchè ci sono i numeri telefonici:

    ^@^X ^M
    ^X
    ^XADDEBITI TELEFONICI AL 17/02/08 ORE 14:58 CAMERA: 9 ^M
    ^X
    ^XDATA ORA NUMERO CHIAMATO DURATA SCATTI IMPORTO^M

    questo è più o meno quello che si vede con vim.

  5. 17 Febbraio 2008 alle 23:59

    sed -e ’s/^.//’ -e ’s/.$//’ | grep -v ‘^$’

    Questa dovrebbe rimuovere il primo e l’ultimo carattere e poi le righe rimaste vuote.

  6. 18 Febbraio 2008 alle 0:06

    macchè, con quel grep alla fine mi restituisce “Il file binario (standard input) corrisponde”, se tolgo il grep spariscono anche i ^M, ma resta sempre quel ^@^X all’inizio che a questo punto dichiaro colpevole a tutti gli effetti!

  7. 18 Febbraio 2008 alle 0:31

    sed -e ‘1d’ -e ’s/^.//’ -e ’s/.$//’ | grep -v ‘^$’
    cancelliamo la prima riga

  8. 18 Febbraio 2008 alle 1:27

    stefantalpalaru, ti posso solo ringrazia re per la pazienza, ma ancora non ci siamo…
    togliendo la parte “grep” da quest’ultimo comando, ottengo che vim non mostra più nessun carattere “strano”, ma gedit continua a rifiutarsi di aprire il file, dicendo che probabilmente è binario.
    Se apro il file con Geany, mi dice che probabilmente contiene un byte NULL e lo apre in sola lettura.

  9. 9 unwiredbrain
    18 Febbraio 2008 alle 4:56

    Perché non ci fornisci un file con numeri fittizi? Così ci possiamo lavorare liberamente senza irrompere nella privacy di nessuno…

  10. 18 Febbraio 2008 alle 11:54

    Provare cosi’?

    luca@cavalli:~$ hexdump -Cv test.txt
    00000000 18 66 69 6c 65 20 64 69 20 70 72 6f 76 61 0d 0a |.file di prova..|
    00000010
    luca@cavalli:~$ sed -e “s/\x18//g” -e “s/\r//g” test.txt | hexdump -Cv
    00000000 66 69 6c 65 20 64 69 20 70 72 6f 76 61 0a |file di prova.|
    0000000e

  11. 11 Enrico e Antonio
    18 Febbraio 2008 alle 17:41

    fai un programmino java che riceve la tua stringa e la memorizza in una variabile, chiamiamola “ingresso”. Dopodichè, in java,

    int nrCodeUnit=ingresso.length();
    int nrCodePoint=ingresso.codePointCount(0, nrCodeUnit);
    int contatore=0;
    bool flag=false;
    while (contatore<nrCodePoint && !flag)
    {
    if(ingresso.codePointAt(contatore)<32)
    {
    contatore++;
    }
    else
    {
    flag=true;
    }
    }
    ingresso=ingresso.substring(contatore);

    adesso salva la stringa “ingresso” risultante e non dovresti avere + problemi.

    Facci sapere

  12. 18 Febbraio 2008 alle 18:38

    Intanto grazie a tutti,
    @unwiredbrain: eccoti il file modificato, però non so se salvandolo con vi sia cambiato qualcosa rispetto all’originale… bah, tanto vale provare:
    centralino.log

    @loopback: forse non ho capito bene qualcosa, ma non è che ottenga granchè di comprensibile con quei comandi…

    @Enrico e Antonio (che bello, un commento a quattro mani!): la mia padronanza del java è seconda solo a quella del cinese non semplificato… diciamo che la parte che mi impedisce di provare la vostra soluzione è quel “fai un programmino” all’inizio :P

  13. 13 Enrico e Antonio
    18 Febbraio 2008 alle 19:00

    solidali con le tue difficolta’ ecco un link che potra’ esserti veramente d’aiuto

    http://www.consulentecina.com/100frasi_in_cinese_cc/100frasi_in_cinese.htm

    facci sapere.

    ;-)

  14. 14 Enrico e Antonio
    18 Febbraio 2008 alle 19:00

    ok! cercheremo di risolverti il problema entro la giornata di domani.

  15. 18 Febbraio 2008 alle 19:05

    LOL! mi avete fatto sbellicare, con quel link :D

  16. 16 unwiredbrain
    18 Febbraio 2008 alle 22:57

    Ma io… Vedo degli 055 scendendo verso il basso!

  17. 18 Febbraio 2008 alle 23:08

    Oops!
    ehm… no, sono solo numeri di fantasia… ma sei sicuro di vederli? :P

    ach! mi è scappato che il log era doppio… meno male che i numeri comunque sono tutti “di famiglia”. Adesso li ho tolti :)

  18. 18 Febbraio 2008 alle 23:27

    Io la so! Io la so! Io, io, io!

    Allora, la soluzione era banale, basta dare tutto in pasto a “strings” :)

    $ cat /dev/ttyS0 | strings > tuo_file.txt

    Il comando string leva tutto quello che non e’ stampabile, il carattere 0×00 che c’e’ all’inizio del file, i vari 0×18 all’inizio delle righe, i ritorni a capo alla windows (doppi, \r e \n, tanto per andare sul sicuro), lasciando solo il testo puro e semplice.

  19. 18 Febbraio 2008 alle 23:34

    Meglio ancora:

    $ cat /dev/ttyS0 | strings -n 1 > tuo_file.txt

    Altrimenti filtra anche tutte le righe piu’ corte di 4 caratteri.

  20. 20 Lapo
    18 Febbraio 2008 alle 23:34

    strings è tuo amico, ugh tardi, bravo loopback

  21. 18 Febbraio 2008 alle 23:43

    YAY! Funziona!
    Grazie a entrambi, il premio lo potete ritirare tutti e due senza litigare :)

    anzi, grazie a tutti quanti!

  22. 18 Febbraio 2008 alle 23:58

    Ulisse, facciamo che dei 200 caffe’ che ti devo offrire (uno per ogni tua icona che ho nel pc, ho fatto una stima di massima… e non oso nemmeno contare quanti caffe’ devo a Lapo) ne scaliamo 1. Me ne restano solo 199…

  23. 19 Febbraio 2008 alle 0:05

    uhm… mi sa che mio cugino non dormirebbe per un pezzo :D

    bisogna che trovi il tempo di rimettermi a fare qualche icona, sennò qui perdo la mano!


Lascia un commento




Fai una donazione!

Ti è tornato utile qualcosa che ho scritto?
Ti ho fatto risparmiare un sacco di soldi con qualche dritta o consiglio?
Ti sono semplicemente molto simpatico?

Sentiti libero di farmi una donazione, non me la prendo a male! ;)

 

Febbraio: 2008
L M M G V S D
« Gen   Mar »
 123
45678910
11121314151617
18192021222324
2526272829  

Categorie

SocialVibe


Creative Commons License
Tutto il materiale su questo blog, salvo diversa specificazione è pubblicato sotto Licenza Creative Commons CC-By-SA.