Одноплатный компьютер Raspberry Pi хорош тем, что на его основе можно сделать массу «умных» устройств с доступом через интернет, например, автоматическую систему открывания ворот, световой контроллер или регистратор температуры и прочих параметров. И, возможно, вам потребуется получить доступ к такому устройству не через вашу локальную сеть, а через Интернет.

Сегодня существует целый ряд онлайн-сервисов и платформ, которые позволяют получить доступ к устройствам Интернета вещей через глобальную сеть с определенной степенью защиты. Большинство из них сосредоточено на центральной точке доверия виртуального облака. Но есть один сервис, не похожий на другие, и называется он Beame.
Beame позволяет выдачу публично доверенных учетных данных TLS и доступ непосредственно к целевому устройству с end-to-end шифрованием из любого браузера и любой точки мира. По сути, вы будете работать и разрабатывать на устройстве, как если бы оно было бы обычным веб-сервером. Beame может предоставить HTML-страницы, javascript и другие стандартные функциональные возможности веб-сервера.
В данном примере мы создадим простую программу включения и выключения светодиода с помощью Raspberry Pi, доступ к которому будет осуществляться через Beame, то есть через защищенное интернет-соединение. Для начала нам следует загрузить NodeJS (6.9.x).
ssh pi@myip
curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
sudo apt-get install nodejs
node --version
pi@raspberrypi:~ $ node --version
v6.9.2
Затем следует установить Beame: beame-insta-ssl. После этого вам нужно будет получить токен по ссылке https://ypxf72akb6onjvrq.ohkv8odznwh5jpwm.v1.p.beameio.net/insta-ssl, где необходимо подтвердить, что вы не робот. Токен будет отправлен на email.
# beame-insta-ssl create 'token from email'

# beame-insta-ssl tunnel 8008 http
Starting tunnel https://qwertyuio.asdfghjkl.v1.d.beameio.net -> http://localhost:8008
Теперь все, что нам нужно сделать, это собрать небольшой проект, который что-то делает. Как и отмечалось выше, наша программа будет мигать светодиодом. Ниже приведен код этой программы и лог curl.
var http = require('http');
var url = require('url');
var Gpio = require('onoff').Gpio;
var led = new Gpio(14, 'out');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/html'});
var command = url.parse(req.url).pathname.slice(1);
switch(command) {
case "on":
led.writeSync(1);
res.end("It's ON");
break;
case "off":
led.writeSync(0);
res.end("It's OFF");
break;
default:
res.end('Hello? yes, this is pi!');
}
}).listen(1337);
console.log("Our on off server is listenting on port 1334");
~ 523 > curl https://cgqjqvahrdurqwhi.v1.p.beameio.net/on -v
* Trying 52.57.114.229...
* TCP_NODELAY set
* Connected to cgqjqvahrdurqwhi.v1.p.beameio.net (52.57.114.229) port 443 (#0)
* TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
* Server certificate: cgqjqvahrdurqwhi.v1.p.beameio.net
* Server certificate: GlobalSign Organization Validation CA - SHA256 - G2
* Server certificate: GlobalSign Root CA
> GET /on HTTP/1.1
> Host: cgqjqvahrdurqwhi.v1.p.beameio.net
> User-Agent: curl/7.51.0
> Accept: */*
>
< HTTP/1.1 200 OK
< content-type: text/html
< date: Tue, 03 Jan 2017 00:16:17 GMT
< connection: close
< transfer-encoding: chunked
<
* Curl_http_done: called premature == 0
* Closing connection 0
curl https://cgqjqvahrdurqwhi.v1.p.beameio.net/off -v
* Trying 52.57.114.229...
* TCP_NODELAY set
* Connected to cgqjqvahrdurqwhi.v1.p.beameio.net (52.57.114.229) port 443 (#0)
* TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
* Server certificate: cgqjqvahrdurqwhi.v1.p.beameio.net
* Server certificate: GlobalSign Organization Validation CA - SHA256 - G2
* Server certificate: GlobalSign Root CA
> GET /off HTTP/1.1
> Host: cgqjqvahrdurqwhi.v1.p.beameio.net
> User-Agent: curl/7.51.0
> Accept: */*
>
< HTTP/1.1 200 OK
< content-type: text/html
< date: Tue, 03 Jan 2017 00:16:45 GMT
< connection: close
< transfer-encoding: chunked
<
* Curl_http_done: called premature == 0
* Closing connection 0
© digitrode.ru