• 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