### Navigazione

- indice
- moduli |
- successivo |
- precedente |
- pywws 13.12.dev1118 documentazione »
- Guide per gli utenti »

# Come impostare una registrazione ‘live’ con pywws

## Introduzione

Ci sono due abbastanza differenti modalità di funzionamento con pywws. Tradizionalmente con `Hourly` viene eseguito a intervalli regolari (di solito un’ora) da cron. Questo è adatto per siti Web abbastanza statici, ma aggiornamenti più frequenti possono essere utili per i siti come Weather Underground (http://www.wunderground.com/). Il più recente programma `LiveLog` gira continuamente e può i caricare dati ogni 48 secondi.

## Guida introduttiva

Prima di tutto, è necessario installare pywws e assicurarsi che si possono ottenere i dati dalla tua stazione meteo. Vedere Come iniziare con pywws per i dettagli.

Esecuzione di prova `LiveLog` dalla riga di comando, con un alto livello di verbosità in modo da poter vedere ciò che sta accadendo:

    python -m pywws.LiveLog -vvv ~/weather/data

Entro cinque minuti (supponendo di aver impostato un intervallo di registrazione di 5 minuti) si dovrebbe vedere un messaggio ‘live_data new ptr’, seguita dal recupero di eventuali nuovi dati dalla stazione meteo ed elaborarli. Lasciate che `LiveLog` funzionare per un minuto o due o più, poi fermare il processo digitando ‘<Ctrl>C’.

## Percorsi dei file di configurazione

Aprire il file weather.ini con un editor di testo. Si dovrebbe avere una sezione di `[paths]` simile al seguente (dove `xxx` è il tuo nome utente):

    [paths]
    work = /tmp/weather
    templates = /home/xxx/weather/templates/
    graph_templates = /home/xxx/weather/graph_templates/
    local_files = /home/xxx/weather/results/

Modificare queste per soddisfare le vostre preferenze di installazione. `work` è una directory temporanea utilizzata per archiviare i file intermedi, `templates` è la directory per i tuoi file modello di testo e `graph_templates` è la directory per i tuoi file grafici di modello e `local_files` è una directory dove viene messo l’output del modello che non è stato caricato in un sito web. Non usare le directory di esempio pywws per questi, perchè saranno sovrascritti quando si aggiorna pywws.

Copiare i modelli di testo e grafico nelle directory appropriate. Si possono trovare alcuni esempi forniti con pywws utili per iniziare. Se hai installato pywws con `pip` gli esempi dovrebbero essere in `/usr/share/pywws` o `/usr/local/share/pywws` o simili.

## Configurazione dell’esecuzione periodica

In weather.ini si dovrebbe avere una sezione `[live]` simile alla seguente:

    [live]
    services = []
    plot = []
    text = []

Questa sezione specifica cosa pywws dovrebbe fare ogni volta che ottiene una nuova lettura dalla stazione meteo, cioè ogni 48 secondi. La voce `services` è un elenco di servizi meteo online dove caricare dati, ad esempio `['underground_rf']`. Le voci `plot` e `text` sono elenchi di file di modello grafici e file di testo che devono essere elaborati e, opzionalmente, caricati sul tuo sito web. Probabilmente si dovrebbe lasciare tutto questo vuoto tranne che per i servizi `services`.

Se si utilizza YoWindow (http://yowindow.com/) si può aggiungere una voce alla sezione `[live]` per specificare il file di YoWindow, ad esempio:

    [live]
    services = ['underground_rf']
    text = [('yowindow.xml', 'L')]
    ...

Si noti l’uso del flag `'L'` – questo dice a pywws si inviare il risultato alla directory “local files” invece di caricarlo sul tuo sito ftp.

Se non li hai già, create quattro altre sezioni nel file weather.ini: `[logged]`, `[hourly]`, `[12 hourly]` e `[daily]`. Queste sezioni dovrebbero avere voci simili alla sezione `[live]` e specificare cosa fare ogni volta i dati vengono registrati (5-30 minuti, a seconda l’intervallo di registrazione), ogni ora, due volte al giorno e una volta al giorno. Aggiungere i nomi dei file di modello alle voci appropriate, ad esempio:

    [logged]
    services = ['underground', 'metoffice']
    plot = []
    text = []

    [hourly]
    services = []
    plot = ['7days.png.xml', '24hrs.png.xml', 'rose_24hrs.png.xml']
    text = [('tweet.txt', 'T'), '24hrs.txt', '6hrs.txt', '7days.txt']

    [12 hourly]
    services = []
    plot = []
    text = []

    [daily]
    services = []
    plot = ['28days.png.xml']
    text = [('forecast.txt', 'T'), 'allmonths.txt']

Si noti l’uso del flag `'T'` – questo dice a pywws si inviare il risultato a Twitter invece di caricarlo sul proprio sito ftp.

Cambiato nella versione 13.06_r1015: Aggiunto il flag `'T'`. Precedentemente i modelli Twitter sono stati indicati separatamente in voci `twitter` in `[hourly]` e di altre sezioni. La sintassi precedente funziona ancora, ma è obsoleta.

Cambiato nella versione 13.05_r1013: aggiunto il modello `'yowindow.xml'`. Precedentemente il file yowindow era generato da un modulo separato, richiamato dalla voce `yowindow` nella sezione `[live]`. La sintassi precedente funziona ancora, ma è obsoleta.

## Upload asincrono

Nuovo nella versione 13.09_r1057.

Il caricamento dei dati in siti web o ‘services’ a volte può richiedere del tempo, in particolare se un sito è andato off line e i tempi di caricamento sono lunghi. In condizioni di normale funzionamento pywws attende che tutti i caricamenti siano elaborati prima di scaricare ulteriori dati dalla stazione meteo. Questo può portare alcune volte a dati di essere mancanti.

L’elemento `asynchronous` nella sezione `[config]` di weather.ini può essere impostato su `True` per dire a `LiveLog` per fare questi caricamenti in un processo separato. Questa funzionalità è ancora un po’ sperimentale – provatelo a vostro rischio.

## Utilizzare gli script di utilità

L’installazione di pywws include un breve script `pywws-livelog.py` che viene installato in `/usr/bin` o `/usr/local/bin` o simili. Si dovrebbe essere in grado di utilizzare questo script per eseguire `LiveLog`:

    pywws-livelog.py -v ~/weather/data

## Esecuzione in background

Al fine di avere :py:mod: `LiveLog` in esecuzione dopo aver terminato di utilizzare il computer deve essere eseguito come un processo in background. Nella maggior parte dei sistemi Linux/UNIX è possibile farlo mettendo una e commerciale (‘&’) alla fine della riga di comando. Per esempio:

    pywws-livelog.py ~/weather/data &

Tuttavia, sarebbe utile sapere cosa è andato storto se il programma si blocca per qualsiasi motivo. Con `LiveLog` è possibile memorizzare i messaggi in un file di log specificato con il opzione `-l`:

    pywws-livelog.py -v -l ~/weather/data/pywws.log ~/weather/data &

## Riavvio automatico

Ci sono diversi modi per configurare un sistema Linux per avviare un programma quando la macchina si avvia. In genere, questi comportano di mettere un file in `/etc/init.d/`, che richiede i privilegi di root. Il problema è leggermente più difficile da garantire se un programma si riavvia quando si blocca. La mia soluzione per entrambi i problemi è quello di eseguire il seguente script da cron, ogni ora.

    #!/bin/sh

    pidfile=/var/run/pywws.pid
    datadir=/data/weather
    logfile=$datadir/live_logger.log

    # exit if process is running
    [ -f $pidfile ] && kill -0 `cat $pidfile` && exit

    # email last few lines of the logfile to see why it died
    if [ -f $logfile ]; then
      log=/var/log/log-weather
      tail -40 $logfile >$log
      /home/jim/scripts/email-log.sh $log "weather log"
      rm $log
      fi

    # restart process
    pywws-livelog.py -v -l $logfile $datadir &
    echo $! >$pidfile

Questo memorizza l’id di processo del `LiveLog` del pidfile. Se il processo è in esecuzione, lo script non serve a nulla. Se il processo si è bloccato, mi invia un e-mail con le ultime 40 righe del file di log (usando uno script che crea un messaggio e lo passa al sendmail) e poi si riavvia `LiveLog`. Avrete bisogno di modificare molto questo per soddisfare le posizioni dei file e così via, ma dà un’idea di cosa fare.

Commenti o domande? Si prega di iscriversi per al mailing list pywws http://groups.google.com/group/pywws e facci sapere.

### Navigazione

- indice
- moduli |
- successivo |
- precedente |
- pywws 13.12.dev1118 documentazione »
- Guide per gli utenti »