Arduino Forum upgrade scheduled for Monday, October 20th, 11am-4pm (CEST). Sorry for the inconvenience!
Pages: 1 2 [3]   Go Down
Author Topic: Executar comandos remotos com RF 433MHz - Automação Residencial  (Read 2041 times)
0 Members and 1 Guest are viewing this topic.
Portugal
Offline Offline
Edison Member
*
Karma: 37
Posts: 1613
Pretending you know everything then you will learn nothing.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
O que me intriga é, o Master pergunta e o slave responde. Mas como responde? Seria possível o sensor enviar dados ao Master através do receptor?
Nao.Visto o master ser o transmissor e o slave apenas o receptor, o receptor por si só não tem forma de enviar estados ao master.
Ja pensas-te em considerar cablar isso num rs485 ou então mudar de radio para o nrf24 por exemplo de modo a teres uma comunicação half-duplex?
O rf 433 é inseguro e pelo que li tu estas a tentar fazer um alarme com ele para a tua casa.Decerto não vais querer que um vizinho que tente abrir um portão te comece a alterar coisas na tua casa pondo em risco a tua segurança e os teus bens.
Dou te um exemplo no mês passado na minha empresa instala-mos um sistema de segurança com biometria e controlo de acessos por RF-ID.Só entra quem tem cartão tudo super seguro mas depois colocaram um comando 433Mhz para quem queira abrir a porta poder usar o comando dentro da empresa.Aquele comando deitou por terra o investimento de cerca de 1200€ ja que me bastou colocar um arduino com um receptor 433 tocar no botão do comando, ler o código que o comando envia e replica-lo.Como de esperar a porta abre ...
Resposta do fornecedor do sistema- há e tal isso é de estrema dificuldade ao utilizador comum de replicar e que nunca tiveram problemas ...
« Last Edit: October 08, 2014, 05:02:45 pm by HugoPT » Logged

Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B


Offline Offline
Jr. Member
**
Karma: 0
Posts: 53
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Certo, vou ver a respeito mais tarde. Acha que se eu mudar aquele msg de 1 para qualquer outra coisa mais complexa, tipo (58481784816648189) número aleatório vai resolver ou a segurança falha que estavas a falar não se baseia nisto, e sim pelo próprio componente?

Se realmente for melhor testar o nRF, posso usar apenas para o alarme.

E pra esclarecer um pouco mais, possui alarme já instalado em casa, onde a central liga automaticamente para a casa quando disparado.
O que estou querendo fazer, é apenas um alarme em um ponto que não foi feito por este serviço, por isso não é algo muito grande. Mas não exclui nenhuma possibilidade dita, apenas para não preocupares.
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 53
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Acha que se eu mudar aquele msg de 1 para qualquer outra coisa mais complexa, tipo (58481784816648189) número aleatório vai resolver ou a segurança falha que estavas a falar não se baseia nisto, e sim pelo próprio componente?

Fiz uns testes agora, e percebi que só funciona se tiver apenas um caracter. Se eu usar 01, ele não funciona. Adicionei um Serial.print para confirmar e nem isso mostra. Duas letras ou mais também não funcionam. Acho que usar um número aleatório não vai adiantar, e deve ter sido por isso que o hello não funcionava. Estranho...
Logged

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3393
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Acho que precisas de estudar varios conceitos e C para os poderes colocar em pratica.

Se tu recebeste o hello, nao recebes um numero aleatorio porque?

Se o numero enviado para o slave e aleatorio, como e que o slave sabe que e esse o comando correcto??

O que e inseguro aqui e o RF433... nao e o "protocolo" que estas a usar. O RF433 servira para enviar o estado do sensor de presenca (da forma que eu expliquei) e pouco mais se realmente queres ter algo seguro.

Para teres uma ideia do que o Hugo disse, eu com um RF433 posso controlar a minha caldeira... e muito provavelmente a do meu vizinho. E so querer...

Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Offline Offline
Jr. Member
**
Karma: 0
Posts: 53
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bom, não estou cogitando a possibilidade de usar um rs485, mas "talvez" o nRF24l01

Estou satisfeito com o resultado do RF 433MHz, mesmo sendo inseguro, ninguém poderá abrir portões, nem desativar a segurança, pois os mesmos não estão ligados à arduino. Apenas luzes, filtro (desligar ao sair de casa, evitando vazamentos em quedas de energia), e um alarme (não são todos, apenas um).

Quando pensei em deixar mais complexo a msg, o número aleatório, na verdade, era um que eu escolhi na hora, apenas para ocupar em tamanho, sendo assim, mais difícil alguém enviar o mesmo valor de msg para meus arduinos e controlá-los.

Porém me disseste que a segurança não está na comunicação, portanto pode não ser totalmente solucionável. Mas quanto ao valor msg ter mais de dois caracteres, ele não mais executa os ifs, apenas com um caractere.

Code:
void loop(){
  char *msg;
...
if(readString.indexOf("lFiltro")>=0){
            statusFiltro = true;
            const char *msg = "000001";
            vw_send((uint8_t *)msg, strlen(msg));
            vw_wait_tx(); // Wait until the whole message is gone
          }


Code:
if(buf[i] == '000001'){ //Se receber do master 1
        digitalWrite(led, HIGH); //acende o led
        Serial.print("entrou 1");

}

Não recebo nada se for 000001, apenas se for 1, 2, 3...9 ou letras a,b,c...z

Enfim, se alguém quiser me prejudicar através do RF 433MHz, basta querer para me prejudicar com qualquer outro meio de comunicação, mesmo sendo mais difícil.

Senhores, agradeço a ajuda até agora. Desculpe por tentar solucionar meus problemas apenas com o que é necessário, ao invés de estudar C mais afundo e ter capacidade de comunicar melhor com vocês. Estou deixando este aprendizado mais para frente, por ora, não tenho condições de aprender, devido ao trabalho e outros estudos, mas pretendo mesmo aprender e desenvolver aplicações mais sofisticadas.

Obrigado!
Logged

Portugal
Offline Offline
Edison Member
*
Karma: 37
Posts: 1613
Pretending you know everything then you will learn nothing.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Quando pensei em deixar mais complexo a msg, o número aleatório, na verdade, era um que eu escolhi na hora, apenas para ocupar em tamanho, sendo assim, mais difícil alguém enviar o mesmo valor de msg para meus arduinos e controlá-los.
Aqui nada muda meteres um numero maior ou nao em nada torna mais dificil de "snifar" o codigo enviado.Basta escutar e o teu numero maior irá aparecer de igual forma que um pequeno.
Quote
if(buf == '000001'){ //Se receber do master 1
}
Nao vejo o resto do codigo para saber como ja o tens para traz mas isto nao está correcto ja que as '  ' servem apenas para representar um caracter e nao varios como tu tens
Logged

Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B


'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3393
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

E as strings nao se comparam com ==, mas com o strcmp()...

So tu podes decidir com o que te sentes confortavel... cabe-nos a nos que temos mais experiencia alertar-te para os potenciais perigos de algumas tecnologias ou implementacoes.

Como disse, a minha caldeira pode ser controlada por alguem com um desses modulos RF... no entanto, eu sinto-me confortavel por saber que a caldeira so funciona dentro de determinadas horas (em que normalmente esta gente em casa para detectar problemas) e os meus vizinhos que estao perto o suficiente para faze-lo sao um reformado e um carpinteiro...

Ja ter controlos desses para abrir portas nem pensar... bem como ligar coisas dessas a internet... Se empresas como a Apple e outras nao conseguem garantir a seguranca dos seus utilizadores, porque e que uma solucao caseira por mim sera? smiley-wink
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Offline Offline
Jr. Member
**
Karma: 0
Posts: 53
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Realmente nem eu estou achando o código que estou utilizando no momento. Mas como houve uma mudança, o loop ficou assim:

Code:
void loop()
{
 
    uint8_t buf[VW_MAX_MESSAGE_LEN];
    uint8_t buflen = VW_MAX_MESSAGE_LEN;

    if (vw_get_message(buf, &buflen)) // Non-blocking
    {
int i;

// Message with a good checksum received, dump it.
Serial.print("Got: ");

for (i = 0; i < buflen; i++)
{
   Serial.print(buf[i]);

if(buf[i] == '1'){ //Se receber do master 1
        digitalWrite(led, HIGH); //acende o led
        Serial.print("entrou 1");
}
        if(buf[i] == '3'){digitalWrite(led, LOW);}
   Serial.print(" ");
}
Serial.println("");
        digitalWrite(13, false);

   }
}

tentei usar os strcmp() mas estás a falhar por causa de uma const char. Tentei isto:

Code:
const char buf;

Mas interrompi este método, então parei-me aqui.

« Last Edit: October 09, 2014, 10:59:04 pm by yago4xd » Logged

Portugal
Offline Offline
Edison Member
*
Karma: 37
Posts: 1613
Pretending you know everything then you will learn nothing.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Não recebo nada se for 000001, apenas se for 1, 2, 3...9 ou letras a,b,c...z
Se consegues fazer com 1,2,3 ...ab...z entao porque é que insistes em enviar uma string tipo lFiltro?
Se optares por usar um protocolo super simples de enviar apenas um byte tens 256 valores disponiveis para enviares ,o que te da para controlar 256 funçoes especificas no slave.As strings só sao boas para o programador, o microcontrolador nao necessita de tratar uma string para tomar uma decisao e entrar num if.Optares por passar uma string para o slave só aumentas a complexidade do lado do slave.
Podes fazer um protocolo super simples em que defines que o teu lFiltro(o que quer que isso seja) represente  a letra 'a', entao basta enviares o 'a' e isso é suficiente para o microcontrolador entrar num if especifico.
O Bubulindo explicou-te isso à uns posts atraz...
Usar o strcmp() tambem tem de funcionar mas só vais aumentar o overload do protocolo.
Visto nao estares á vontade com o C segue o caminho mais facil de momento
Logged

Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B


Offline Offline
Jr. Member
**
Karma: 0
Posts: 53
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Certo, minha ideia era usar palavras para facilitar identificação dos slaves. Mas já optei por usar apenas um caractere mesmo.

Quanto a segurança, não há nada que se devem preocupar, caso alguém mal intencionado resolva controlar pelo arduino dele, só poderá acender/apagar as luzes. Não conseguirá abrir nenhuma porta, (no caso, eu usei RF-ID) ou a segurança da minha casa. Este alarme, é apenas um reforço para os já existente, pois não foi feito um ponto de sensor em uma área de passagem externa para interna da casa.

O tópico fica em aberto para mais sugestões ou dúvidas de outras pessoas.
Por enquanto seguirei por este caminho mesmo.

Muito obrigado pela colaboração de todos, e tenham um ótimo dia.
Logged

Pages: 1 2 [3]   Go Up
Arduino Forum upgrade scheduled for Monday, October 20th, 11am-4pm (CEST). Sorry for the inconvenience!
Jump to: