Acessando o terminal Raspberry Pi usando MQTT

Neste artigo, aprenderemos como acessar o Raspberry Pi de qualquer lugar do mundo usando MQTT. Tudo isso será feito com um script python.

Vários aplicativos já estão disponíveis para acessar terminais baseados em Linux por meio remoto/rede, mas todos eles exigem encaminhamento de porta, mas o MQTT permite sem encaminhamento de porta.

Não precisaremos de nenhum encaminhamento de porta. Isso também será independente de plataforma porque usaremos python para interagir com o sistema para executá-lo dentro de Linux, Windows e até mesmo em OSX.

Ferramentas necessárias/bibliotecas necessárias
Biblioteca python baseada em MQTT – paho
IDE Python
Sistema Linux/Windows

Informações técnicas
Estaremos vinculando a pilha de protocolos MQTT ao terminal usando python. A biblioteca “OS” do Python também é capaz de interagir com processos e terminais do sistema.

Portanto, escreveremos um script python que se comunicará com um corretor MQTT e transferirá e receberá dados. Todos os dados recebidos serão canalizados (transferidos) para o processo do terminal do sistema.

A saída dos processos do sistema também será redirecionada em uma resposta/mensagem MQTT sobre um tópico (o MQTT usa tópicos para se comunicar).

Diagrama de bloco

Figura 1 Terminal MQTT

O script do terminal está inscrito em um tópico – terminal
Publicação no tópico – terminal/saída

Os clientes estão inscritos em um tópico – terminal/saída
Publicação no tópico – terminal

Ambos estão conectados ao corretor – broker.hivemq.com
No porto – 1883

Como é que o sistema funciona?
O sistema é instalado com o script python, ouvindo um tópico MQTT específico (terminal) e conectado a um broker MQTT. Qualquer cliente que queira acessar o terminal está publicando comandos sobre esse tópico (terminal). Quando um cliente envia um comando para nosso script de terminal, ele o lê e o comando é filtrado dessa mensagem. Esse comando é então enviado para o terminal, o resultado desse comando é combinado em uma string e publicado para aquele cliente naquele tópico.

Entendendo o código-fonte
Podemos escrever dois scripts, um para o próprio terminal e outro para acessá-lo.

Script de terminal
Estaremos dividindo nosso código-fonte em duas categorias para facilitar a compreensão.

  1. Interagindo com o terminal do sistema
  2. Comunicação MQTT

Interagindo com o terminal do sistema
Python é uma linguagem de programação/script de alto nível. Python tem várias bibliotecas disponíveis para fazer coisas. Em primeiro lugar, precisaremos de uma biblioteca que possa interagir com nosso sistema; também deve ser independente da plataforma. Então, existe uma biblioteca chamada “SO”em python integrado para acessar o sistema operacional. Importaremos a biblioteca no topo do nosso script. Com isso, você pode fazer muito trabalho facilmente.
Importar sistema operacional

Agora sabemos que o script deve ser multitarefa ou threaded, pois às vezes um comando demora muito para ser concluído e não queremos que nesse período em que passarmos outro comando ele seja rejeitado. Isso pode ser feito usando a biblioteca de subprocessos, então vamos importá-la também.

Subprocesso de importação

Agora que importamos as bibliotecas, precisamos criar uma variável que possa conter o comando e sua saída. Mais tarde veremos como armazenar comandos para essa variável do MQTT.
Para salvar o comando – dados
Para saída de comando – valor_stdout

Tudo o que precisamos está feito. Estaremos enviando e recebendo dados sobre essas variáveis. Então, vamos criar um subprocesso, que enviará diretamente o comando de “dados” para o terminal e armazenará a saída nas variáveis ​​“stdout_value”.
O significado dessa linha agora é o seguinte:
processo = É uma variável que armazena o subprocesso completo, entrada-saída e erros.
subprocesso.Popen = isso significa que estamos dizendo ao processo que iremos canalizar (fornecer entrada e obter saída) alguns dados e retirar alguns deles.
saída padrão = Armazena a saída do processo acima.
stderr = Armazena o erro, se houver
stdin = é para entrada de comando de entrada de string

Agora que iniciamos o processo, precisamos retirar a saída do comando e o erro, se houver.
stdout_value = proc.stdout.read + proc.stderr.read

Agora estamos stroing a saída lendo o “proc.stdout.read ”.

O “stdout_value” é a variável que enviaremos ao nosso cliente no MQTT para saída. Então, vamos enviar abaixo e aprender como é feita a comunicação MQTT.

Comunicação MQTT
Em primeiro lugar, importaremos as bibliotecas necessárias para o MQTT.
importar paho.mqtt.client como mqtt
importar paho.mqtt.publish como publicar

agora iremos declarar uma variável chamada client com mqtt client.
cliente = mqtt.Cliente

Agora faremos duas funções, que são retornos de chamada 1. Para receber mensagens 2. Fazer algo na conexão bem-sucedida.
cliente.on_connect=on_connect
cliente.on_message=on_message

Finalmente, nos conectaremos ao broker MQTT em uma porta e iniciaremos o cliente dentro de um loop sem bloqueio
cliente.connect(“corretor.hivemq.com”, 1883, 60)
cliente.loop_start

Após a conexão ser bem-sucedida, podemos enviar mensagens usando este método de publicação.
publicar.single(tópico, message_data, hostname=”broker.hivemq.com”)

ou podemos criar uma função/método para fazer isso.
def enviar(mensagem,publicar_t):

Este método usa o parâmetro de entrada “mensagem” como a mensagem que precisamos enviar à corretora com o tema.

Agora que temos uma função que é acionada ao receber quaisquer dados do corretor MQTT. Armazenaremos qualquer mensagem recebida do corretor em uma mensagem variável, dentro do “na_mensagem”Método.
mensagem = str(msg.payload)

A sintaxe da mensagem recebida será.
cmd:”comando para executar”

Agora precisamos remover a string “cmd:” e armazenar o comando restante

na variável “data” para processar o comando.
dados = mensagem.replace(“cmd:”,””)

Agora, para enviar a saída, chamamos nosso método send com os parâmetros de saída e transmitimos o resultado.
enviar(stdout_value,toipc_publish_result)

Roteiro de acesso
O script de acesso é apenas uma função, que recebe mensagens do broker MQTT e recebe a entrada do usuário para publicar no script, que é autoexplicado dentro do código.

Então é assim que podemos acessar o sistema completo usando MQTT.

Nota – Não use tópicos comuns para criar acesso ao terminal porque você estará dando acesso a todo o sistema.

Conteúdo Relacionado

Voltar para o blog

Deixe um comentário

Os comentários precisam ser aprovados antes da publicação.