Página 1 de 1

Auxilio com conexão ethernet.

MensagemEnviado: 08 Jan 2015 14:47
por fabim
Pessoal, por hobby estou fazendo um projetinho com meu filhote de 8 anos.
É uma plaquinha com o BBB, alguns relays etc.
Peguei na net um exemplo de serviço bem simples de comunicação com a ethernet, e até o momento esta funcionando através de cabo por conexão local.
Quero fazer algo diferente para controlar esta plaquinha pela internet, só que:
Como meu IP em minha casa não é estático, e não tem como eu ficar pedindo para o pistolinha ficar vendo o IP etc.

Eu imaginei o seguinte, o servidor na verdade fica escutando uma porta, ou seja, a informação chega para o IP do modem no caso, o NAT traduz para IP local e determinada porta claro.
A BBB vai pegar esta informação que chegou na PORTA tal e trata-la etc.
Agora como eu vou fazer para saber qual o IP que o modem de casa pegou ?
Fiquei imaginando o seguinte, eu tenho um domínio, e poderia de alguma forma fazer a BBB pegar o IP atual e de alguma forma colocar no meu domínio.
No APP do celular, ou no browser, eu teria que acessar o domínio e saber qual é o IP que a BBB escreveu a ultima vez, e desta forma assumir este IP como HOST e desta forma abrir uma conexão com ele ??????

Ou o buraco é mais embaixo ?
É que não tenho a mínima idéia de onde começar ! RS

ABÇS, FABIM

Re: Auxilio com conexão ethernet.

MensagemEnviado: 08 Jan 2015 14:55
por tcpipchip
No-ip.com
.
.
.
.
.

Re: Auxilio com conexão ethernet.

MensagemEnviado: 08 Jan 2015 15:12
por fabim
EIM ? CÛMA ?

Re: Auxilio com conexão ethernet.

MensagemEnviado: 08 Jan 2015 15:19
por denis
Acho que dá pra fazer isso com o wget do Linux, tipo "wget http://www.ip-adress.com/"
Ai é só procurar a string dentro do HTML com o seu IP.

Para acessar um dispositvo que estava em casa tive que criar um Forward no roteador, apontando para um IP fixo.

Re: Auxilio com conexão ethernet.

MensagemEnviado: 08 Jan 2015 15:52
por xultz
Fábio, o no-ip.com oferece um serviço de DNS de grátis (na verdade, ele oferece um subdominio). Assim, você poderia registrar o subdominio fabim.no-ip.com no site (até 3 é de grátis). A zica é que teu modem de IP de tempos em tempos. Prá resolver isto, o site oferece um programinha que você roda em uma máquina na tua rede, só que obviamente ela precisa ficar ligada o tempo todo (Win e Linux). Esse programa fica olhando teu IP e se ele alterou, ele informa pro site no-ip e ele atualiza o IP do teu subdomínio.
Aí no teu modem você configura um port forward que encaminha para o IP e porta da tua BBB, e nessa porta você programinha ficar escutando. Assim, você pode acessar fabim.no-ip.com:2424 (supondo que você escolheu a porta 2424 pro forward) e o acesso vai direto prá BBB.
Na BBB, eu sugiro você fazer teu programete em javascript e rodar no node.js que já vem instalado no Angstrom padrão da mesma, é ridículo de simples de criar um servidor web com o node.js. E com o bonescript, você pode acessar o hardware do BBB e fazer todas as viadagens que desejar. É um brincadeira bem divertida.

Re: Auxilio com conexão ethernet.

MensagemEnviado: 08 Jan 2015 16:21
por fabim
Denis, eu entendi o wget de boa.
O forward, eu não entendi.
De desculpem, mais sou totalmente Luiz Inácio da Silva, sobre a logia por traz de tudo isto.

Pelo meu pouquíssimo conhecimento, eu imaginei que a BBB lá em casa poderia escrever o IP atual que o meu modem pegou em uma tabelinha no meu domínio.
E meu celular, ou pc, ou qualquer outra forma possível de uso, usaria a mesma logia, ou seja, faria uma conexão com meu domínio, abriria esta tabela e faria a leitura do IP.
Ai meu dispositivo móvel assumiria este IP e faria uma conexão TCPIP, ou não sei se é de outra forma pois não sei se um modem suporta conexão, e trocaria informações pela net através de um canal utilizando o dito IP como host. Atrás do NET do modem, existe a BBB ouvindo determinada porta, que também não sei dizer como isto funciona.

Acho que estou no caminho rs

Re: Auxilio com conexão ethernet.

MensagemEnviado: 08 Jan 2015 16:34
por fabim
xuxu, eu fiquei com a net aberta, neste meio tempo você também escreveu !!! rs
Cara o forward seria uma espécie de ponteiro ?
Tipo, no meu modem eu faria a configuração de forward para qualquer tentativa de conexão externa ser direcionado internamente ao ip estático da BBB ?
No java, please !! rs

Re: Auxilio com conexão ethernet.

MensagemEnviado: 08 Jan 2015 17:03
por barboza
Procure por DDNS (Dynamic DNS (Domain Name System)).

Verá que possivelmente seu modem/roteador tem este serviço, que juntamente com um servidor externo (no-ip, por exemplo), você sempre terá o IP da sua casa.

Então ao invés de acessar via IP (numero) diretamente, você terá um dominio da sua casa (casa_do_fabim.noip.com) e através do tradutor de endereço (dominio -> ip), você terá o seu número IP recuperado.

Depois do seu IP conhecido você poderá encaminhar solicitações a sua BB, mas para isso irá precisar romper seu modem/roteador, que poderá ser via forward, liberação/direcionamento de porta ou por DMZ.

Re: Auxilio com conexão ethernet.

MensagemEnviado: 08 Jan 2015 18:11
por xultz
Fábio, vamos por partos.
Primeiro, Javascript !=== Java (!=== quer dizer que é diferente e não tem nada a ver). Eu acredito que o Javascript venha a se tornar a linguagem de programação mais importante a se aprender, depois do C.
Bom, vamos falar de port forward. Uma conexão TCP/IP ou UDP/IP sempre tem um IP e uma porta relacionada. Assim, quando você quer acessar o site do www.google.com, o teu navegador pergunta prá um servidor de DNS (que teu provedor de internet fornece) qual é o IP do domínio google.com. Sabendo deste IP, ele abre um socket (no caso, do tipo TCP) neste IP na porta 80 (porque se você não disse qual porta deseja, o browser sempre abre a porta 80 por padrão). Estabelecido este socket, ele envia umas informações padronizadas pelo protocolo HTTP, recebe respostas, e todo mundo fica mega feliz.
Todo computador conectado em uma rede tem um IP. E todo computador permite abrir 65.536 portas de conexão. Em cada uma destas portas você pode estabelecer um serviço. Um serviço nada mais é um programa que você escreve de forma que ele fique escutando numa determinada porta, num determinado protocolo (TCP ou UDP) e espera informações em um outro protocolo, que pode ser padrão (como HTTP, Telnet, SSH, FTP, etc), ou pode ser num protocolo que você inventar.
Do outro lado da rede, se um computador deseja acessar teu serviço, ele precisa estabelecer um socket (que é uma conexão)no IP do teu computador, na porta que teu serviço está escutando, no protocolo que ele está escutando, e enviar as informações no protocolo que você está usando ou inventou. Simples assim.
O problema é que temos dois tipos de IP: os IPs verdadeiros e os IPs falsos.
Os IPs verdadeiros são aqueles que não começam com 127.0.0.1, 192.168.X.X, 172.X.X.X, 10.X.X.X (obviamente, estou falando somente de IPV4). O pepino é que eles são poucos, e estão acabando. Assim, somente máquinas que estejam efetivamente na Internet, ganham IPs verdadeiros. Um macete utilizado prá conectar muito mais máquinas na Internet é usar redes com IPs falsos. Desta forma, você cria uma rede local ethernet, escolhe uma faixa de IPs falsos que preferir, e dá um IP falso prá cada uma. Porém, uma das máquinas terá duas placas de rede, uma ligada na Internet, outra ligada na rede local. Assim, somente esta máquina que está conectada na Internet (chamada de gateway), ganha IP verdadeiro. Nos outros computadores, é feita uma configuração do IP falso do gateway. Quando um computador quer acessar uma máquina na Internet (por exemplo, o google), ele manda a conexão para o gateway e pede educadamente que ele faça de conta que é ele que quer acessar o google, e repita tudo que receber do google de volta para ele.
A zica é: como uma máquina que esteja na Internet acessa o serviço que está rodando no teu computador que possui um IP falso? Não consegue.
Um truque para burlar esta limitação é criar um port forward. No gateway, é feita uma configuração, onde você escolhe uma porta que o gateway ficará escutando. E você configura para que qualquer conexão nesta porta ele reenvie para um determinado computador e porta dentro da rede local. Por exemplo, o IP e porta do teu serviço rodando no teu computador.

Tá, mas você não tem um computador com duas placas de rede, uma ligada na Internet e outra na rede lcal, certo? Errado, você tem sim. Este computador é teu modem. Um modem não passa de um computador dedicado para esta tarefa. No meu caso eu uso ADSL da GVT. Meu modem possui uma porta que ligo na linha telefônica, e ele possui uma porta de ethernet onde ele estáligado uma rede local, e mais uma saída wi-fi, que está em outra rede local.
Tá, mas você não configurou nada de IP, nem endereço de gateway nos teus computadores, certo? Errado, você fez sim, mas deixou que o modem fizesse isso tudo, por meio de um serviço chamado DHCP.

Pois então, vamos colocar em números. Suponha que você tem em casa uma rede local, cujos IPs são 192.168.0.X. Suponha que teu modem (que é o gateway) tenha IP 192.168.0.1, e suponha que você configurou tua BBB para o IP 192.168.0.30. É importante colocar um IP fixo na BBB, por motivos óbvios.
Aí suponha que você escreveu um programa que fica escutando na porta 14500 (eu inventei esse número agora, sem motivo nenhum). Beleza. Outros computadores dentro da tua rede local podem acessar este IP e porta.
Tá, mas como faz o port forward? Simples e complicado: você acessa a página de configurações do teu modem, procura as opções de port forward, e cria uma nova regra. Escolhe uma porta (que pode ser 14500, ou qualquer outra), e diz que conexões que cheguem nesta porta sejam redirecionados para o IP 192.168.0.30, na porta 14500. Pronto. Agora uma máquina na Internet, conectada pelo meio que for, se acessar o IP verdadeiro do teu modem na porta que você configurou a regra de forward, vai cair direto na tua BBB.

Tá, mas e a questão do IP do modem mudar o tempo todo? Prá isto, você usa um serviço de DynDNS (como por exemplo o no-ip). Se o modem suportar (tem que ver no manual dele se ele permite), é possível que ele converser com o seridor do no-ip e informe sempre que o IP dele mudar, e você pode acessar teu serviço por meio de um nome de domínio.

Tá, e como faz em javascript e no node.js um serviço rodando na BBB?

Aqui tem um exemplinho bobo (que usei recentemente num trabalho da faculdade):

Código: Selecionar todos
var b = require('bonescript');

var led = 'P9_12';
var pot = 'P9_36';

b.pinMode(led, b.OUTPUT);

console.log("Sensor Iniciado");

var net = require('net');

net.createServer(conexao).listen(14500);

var leitura = 0;
var x = 0;

function converte()
{
        b.analogRead(pot, function(valor)
        {
            var angulo = 0;
            angulo = Math.round(valor.value * 270);
            console.log("Leitura: " + angulo);
            leitura = angulo;
        });

        if(x == 0)
        {
                x = 1;
                b.digitalWrite(led, 1);
        }
        else
        {
                x = 0;
                b.digitalWrite(led, 0);
        }
}


function conexao(meia)
{
    console.log("Conectado: " + meia.remoteAddress + ":" + meia.remotePort);
    meia.on('data', function()
    {
        console.log("Realizando conversão");
        converte();
        meia.write(leitura.toString());
        console.log("Valor convertido: " + leitura);
    });
   
    meia.on('close', function()
    {
        console.log("Encerrando conexao");
        meia.destroy();
    });
}


Neste programa, eu tenho um LED ligado no pino P9_12 e um potenciômetro no pino P9_36. Ele fica escutando na porta 14500, e se receber um dado qualquer, ele faz uma conversão AD do potenciômetro, inverte o led, e envia como ASC o valor desta conversão. Simples assim.
Acredite, TCP/IP é f*d@, eu tive que implementar num PIC e foi um trampo do além. Isso aí em cima é uma sonho.
Se quiser usar protocolo HTTP, basta usar um módulo no node chamado http, mas algumas coisas precisa fazer na mão. Ou usa um módulo chamado express, que faz quase tudo que você precisa sozinho. Se quser, tenho exemplo com http que pegava esta informação, colocava numa página web, e envia para um broswer, também em javascript sobre node.js.

Re: Auxilio com conexão ethernet.

MensagemEnviado: 08 Jan 2015 20:03
por fabim
xuxuzis, cara, depois dizem que exemplificar coisas da forma que exemplificou atrapalha.
Agora eu tendi, tendi tendi.
Legalzio.
Me manda uma pm com o seu skype, queria trocar uma ideóta convosco !
Brigadão !!

Re: Auxilio com conexão ethernet.

MensagemEnviado: 09 Jan 2015 06:37
por denis
Haha, o xultz falou tudo.

Eu só faria um comentário, acho mais fácil instalar o lighttpd que é um servidor web bem leve, acho que roda de boa na BBB.
Faz um CGI e joga na pasta cgi-bin do lighttpd.

Se você não manja CGI não precisa se assustar, nada mais é do que um executável que gera o conteúdo a ser exibido, dá pra fazer em C mesmo.

Re: Auxilio com conexão ethernet.

MensagemEnviado: 09 Jan 2015 07:20
por xultz
O lighttp é bacana, mas acho o node mais interessante por vários motivos.
Primeiro porque ele já está instalado por padrão no Angstrom que vem com a BBB. Segundo que ele possui um serviço chamado bonescript que facilita o acesso ao hardware, prá acessar GPIO e tudo mais. E terceiro, se acessar a BBB na porta 3000 pelo browser, vai abrir uma IDE chamada Cloud9 que é um tesão, prontinha prá escrever teu programetes em javascript e rodar na BBB, no node.js. Um doce.