Questo forum utilizza i cookies
Questo forum fa uso di cookie per migliorare l'esperienza utente. I cookie sono piccoli file di testo memorizzati sul tuo browser. I cookie impostati dal forum possono essere utilizzati solo su questo sito e non costituiscono rischio per la sicurezza, vengono utilizzati unicamente per memorizzare le tue preferenze. Navigando sul sito accetti che RaspberryItaly installi i cookie sul tuo browser.
Per maggiori informazioni consulta l'informativa sui Cookie di RasberryItaly

Un cookie verra memorizzato nel browser indipendentemente dalla scelta per evitare che questa domanda ti venga posta di nuovo. Sarai in grado di modificare le impostazioni dei cookie in qualsiasi momento utilizzando il link nel footer.
  • Benvenuti su RaspberryItaly!
Benvenuto ospite! Login Login con Facebook Registrati Login with Facebook


Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5

[-]
Tags
telegram messaggio shell l restituire di output tramite farsi della

Farsi restituire l'output della shell (tramite messaggio di telegram)
#1
Ciao a tutti, ho collegato un sensore DHT11 al mio RPi 3 e funziona tutto perfettamente. 
Il problema sorge solo quando vado ad interrogare il sensore tramite il mio bot di telegram con il comando /temp, perchè i risultati li vedo solo sulla shell di comando e non so come recuperarli per farmeli inviare sul bot. 
L'output della shell è: Temperatura = 22.0*C  Umidita = 47.0%
Questo è il mio programma:
 
import time
import datetime
import telepot
import os
import sys

id_a = [1111111]

def handle(msg):
    chat_id = msg['chat']['id']
    command = msg['text']
    sender = msg['from']['id']
    
    print 'Got command: %s' % command

    if sender in id_a:

        if command == '/led':
            os.system("sudo python /home/pi/led.py")      #avvia un programma che accende un led 
            bot.sendMessage(chat_id, str('Led acceso'))  #per 5 secondi

        elif command == '/temp':
            os.system("sudo python /home/pi/sensoreDHT.py 11 14")
            bot.sendMessage(chat_id, str())        

    else:
        bot.sendMessage(chat_id, str('Non sei autorizzato a darmi ordini!'))

bot = telepot.Bot('TOKEN')
bot.message_loop(handle)
print 'Sono pronto ...'

while 1:
    time.sleep(10)

Chiaramente sono da sostituire id_a e TOKEN,  ma chiedo aiuto per riuscire a recuperare l'output dalla shell. 
Ho provato anche ad aggiungere:

import commands
import subprocess

batcmd = "dir"
stderr = subprocess.STDOUT
result = subprocess.check_output([batcmd], stderr=subprocess.STDOUT)

bot.sendMessage(chat_id, str(result))  

ma l'unico risultato che mi compare sulla notifica di telegram, sono i nomi di alcuni programmi e di alcune cartelle.... 
Spero nell'aiuto di qualche buon programmatore!
Risposta
#2
Scusa la domanda ma, cosa ti spinge a mandare in esecuzione un'applicazione python da un'applicazione python?

PS: per aiutarci a leggere il codice usa il tag "[ code python ]" e "[ /code ]"

Mandi

Barbezuan
Risposta
#3
(26/03/2017, 19:12)barbezuan Ha scritto: Scusa la domanda ma, cosa ti spinge a mandare in esecuzione un'applicazione python da un'applicazione python?

PS: per aiutarci a leggere il codice usa il tag "[ code python ]" e "[ /code ]"

Mi sono appassionato solo recentemente alla programmazione, e per muovere i primi passi, faccio dei semplici programmi e dopo cerco di integrarli (per quello uso il comando os.system).
Onestamente al fatto di mandare in esecuzione un'applicazione python da un'applicazione python non ci avevo mai pensato  Big Grin 
A questo punto, proverò ad integrare anche i programmi per accendere il led e gestire il sensore direttamente in un unico codice, ma poi come faccio a farmi mandare su telegram la notifica con i risultati della temperatura e dell'umidità? Che comando uso? Perché altrimenti mi stampa come adesso il risultato solo sulla shell...
Scusate ma mi sono dimenticato di mettere i tag per aiutarvi a leggere il codice essendo il primo messaggio che posto.
Risposta
#4
Perché non usi l'eccellente servizio RpiNotify?

Ps: ho editato il primo post per sistemare la visualizzazione del codice
Risposta
#5
RpiNotify lo userò più avanti per farmi mandare una notifica ogni volta che il RPi si avvia (ad esempio se salta la corrente) e in ogni caso mi manderebbe solo un messaggio che avrei scritto io precedente e non i valori appena letti dal sensore, e possibilmente vorrei ricevere la notifica direttamente sul mio bot personale. Adesso ad esempio, se mando il comando /led si accende un led per cinque secondi e poi mi arriva una notifica direttamente sul mio bot con scritto Led acceso. Poi a me non interessa fare un controllo costante, ma solo quando gli dico io di farlo.
Risposta
#6
Non proprio, puoi usare delle variabili.
Risposta
#7
Quindi dici di mettere l'output in una variabile? Secondo te riesco a catturare l'output della shell con il comando raw_input e poi metterlo in una variabile? Se si, in caso come potrei "pulire" la variabile una volta letto il risultato?
Risposta
#8
Quindi dici di mettere l'output in una variabile? Secondo te riesco a catturare l'output della shell con il comando raw_input e poi metterlo in una variabile? Se si, in caso come potrei "pulire" la variabile una volta letto il risultato?
Risposta
#9
Si, si e si, ma invece di richiamare la shell da Python e poi pescare le variabili dallo script shell, per poi mandarle al bot, perché non fai tutto solo da Python, molto più pulito, no?

Inviato dal mio A0001 utilizzando Tapatalk
Risposta
#10
Ma per fare tutto da Python come dici te, che comando uso per farmi mettere il risultato nella variabile senza stampare nulla sulla shell?
Risposta
  


Vai al forum:


Navigazione: 1 Ospite(i)
Forum con nuovi Post
Forum senza nuovi post
Forum bloccato
Forum Redirect