我想通过使用websockets和Web客户端来实现对NAT /防火墙(动态IP)背后的远程Raspberry的访问。
我想通过Chart.defaults.global.tooltips.custom = function(tooltip) {
// Tooltip Element
var tooltipEl = document.getElementById('chartjs-tooltip');
// Hide if no tooltip
if (tooltip.opacity === 0) {
tooltipEl.style.opacity = 0;
return;
}
// Set Text
if (tooltip.body) {
var total = 0;
// get the value of the datapoint
var value = this._data.datasets[tooltip.dataPoints[0].datasetIndex].data[tooltip.dataPoints[0].index].toLocaleString();
// calculate value of all datapoints
this._data.datasets[tooltip.dataPoints[0].datasetIndex].data.forEach(function(e) {
total += e;
});
// calculate percentage and set tooltip value
tooltipEl.innerHTML = '<h1>' + (value / total * 100) + '%</h1>';
}
// calculate position of tooltip
var centerX = (this._chartInstance.chartArea.left + this._chartInstance.chartArea.right) / 2;
var centerY = ((this._chartInstance.chartArea.top + this._chartInstance.chartArea.bottom) / 2);
// Display, position, and set styles for font
tooltipEl.style.opacity = 1;
tooltipEl.style.left = centerX + 'px';
tooltipEl.style.top = centerY + 'px';
tooltipEl.style.fontFamily = tooltip._fontFamily;
tooltipEl.style.fontSize = tooltip.fontSize;
tooltipEl.style.fontStyle = tooltip._fontStyle;
tooltipEl.style.padding = tooltip.yPadding + 'px ' + tooltip.xPadding + 'px';
};
来做。 Raspbian和Web Client将订阅一个公共频道,然后他们将通过该频道交换ssh数据包。
困难的部分是在Raspberry端将socket.io
数据包转换为ssh命令。
有没有人实现过这个系统?
也许像this。
答案 0 :(得分:0)
如果你只想用ssh试试tmate
以下是如何将其用于远程设置的说明
需要:
`
#!/bin/bash
#if Internet connection
if [[ $(ping -W 1 -c 1 8.8.8.8) == *", 0% packet loss,"* ]];
then
echo online;
#if connection already exists
if [[ -S /tmp/tmate.sock ]];
then
echo "aready up"
else
tmate -S /tmp/tmate.sock new-session -d
fi
tmate -S /tmp/tmate.sock wait tmate-ready
ssh=$(tmate -S /tmp/tmate.sock display -p '#{tmate_ssh}')
ssh=$(sed 's~ssh ~~g' <<< $ssh)
echo $ssh
#sends ssh session to you
curl "https://script.google.com/macro/s/{{ google script location }}/exec?id={{ unique id for raspberry pi }}&ssh=$ssh" > /dev/null
else
#no Internet retry in 30 seconds
echo offline;
sleep 30s
bash {{ location of this script }}
fi
使用@reboot {{ user }} bash {{ location of script }}
登录谷歌并在输入此代码时转到http://script.google.com/
`
function doGet(e) {
var id = e.parameter.id;
var ssh = e.parameter.ssh;
var ss = SpreadsheetApp.openByUrl("{{ url of google spread sheet to dump data to }}").getActiveSheet();
var lr = ss.getLastRow();
var data = ss.getRange(1,1,lr,1).getValues();
data = data.join("`").split("`");
var loc = data.indexOf(id);
if(loc != -1){
ss.getRange(loc+1,2).setValue(ssh);
}else{
ss.appendRow([id,ssh]);
}
}
现在在发布命中部署的google脚本下,因为网络应用甚至允许匿名,现在你有了你的谷歌脚本网址。
注意:
除了tmate之外的所有东西只是在断电或需要重启时重新建立连接