mirror of
https://github.com/thooge/esp32-nmea2000-obp60.git
synced 2025-12-13 05:53:06 +01:00
intermediate: udp reader
This commit is contained in:
143
web/config.json
143
web/config.json
@@ -691,6 +691,7 @@
|
||||
"label": "TCP port",
|
||||
"type": "number",
|
||||
"default": "10110",
|
||||
"check":"checkPort",
|
||||
"description": "the TCP port we listen on",
|
||||
"category": "TCP server"
|
||||
},
|
||||
@@ -766,8 +767,12 @@
|
||||
"label": "remote port",
|
||||
"type": "number",
|
||||
"default": "10110",
|
||||
"check":"checkPort",
|
||||
"description": "the TCP port we connect to",
|
||||
"category": "TCP client"
|
||||
"category": "TCP client",
|
||||
"condition":{
|
||||
"tclEnabled":"true"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "remoteAddress",
|
||||
@@ -776,7 +781,10 @@
|
||||
"default": "",
|
||||
"check": "checkIpAddress",
|
||||
"description": "the IP address we connect to in the form 192.168.1.2\nor an MDNS name like ESP32NMEA2K.local",
|
||||
"category": "TCP client"
|
||||
"category": "TCP client",
|
||||
"condition":{
|
||||
"tclEnabled":"true"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "sendTCL",
|
||||
@@ -784,7 +792,10 @@
|
||||
"type": "boolean",
|
||||
"default": "true",
|
||||
"description": "send out NMEA data to remote TCP server",
|
||||
"category": "TCP client"
|
||||
"category": "TCP client",
|
||||
"condition":{
|
||||
"tclEnabled":"true"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "readTCL",
|
||||
@@ -792,7 +803,10 @@
|
||||
"type": "boolean",
|
||||
"default": "true",
|
||||
"description": "receive NMEA data from remote TCP server",
|
||||
"category": "TCP client"
|
||||
"category": "TCP client",
|
||||
"condition":{
|
||||
"tclEnabled":"true"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "tclToN2k",
|
||||
@@ -800,7 +814,10 @@
|
||||
"type": "boolean",
|
||||
"default": "true",
|
||||
"description": "convert NMEA0183 from remote TCP server to NMEA2000",
|
||||
"category": "TCP client"
|
||||
"category": "TCP client",
|
||||
"condition":{
|
||||
"tclEnabled":"true"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "tclReadFilter",
|
||||
@@ -808,7 +825,10 @@
|
||||
"type": "filter",
|
||||
"default": "",
|
||||
"description": "filter for NMEA0183 data when reading from remote TCP server\nselect aison|aisoff, set a whitelist or a blacklist with NMEA sentences like RMC,RMB",
|
||||
"category": "TCP client"
|
||||
"category": "TCP client",
|
||||
"condition":{
|
||||
"tclEnabled":"true"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "tclWriteFilter",
|
||||
@@ -816,7 +836,10 @@
|
||||
"type": "filter",
|
||||
"default": "",
|
||||
"description": "filter for NMEA0183 data when writing to remote TCP server\nselect aison|aisoff, set a whitelist or a blacklist with NMEA sentences like RMC,RMB",
|
||||
"category": "TCP client"
|
||||
"category": "TCP client",
|
||||
"condition":{
|
||||
"tclEnabled":"true"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "tclSeasmart",
|
||||
@@ -824,7 +847,10 @@
|
||||
"type": "boolean",
|
||||
"default": "false",
|
||||
"description": "send NMEA2000 as seasmart to remote TCP server",
|
||||
"category": "TCP client"
|
||||
"category": "TCP client",
|
||||
"condition":{
|
||||
"tclEnabled":"true"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "udpwEnabled",
|
||||
@@ -840,7 +866,11 @@
|
||||
"type": "number",
|
||||
"default": "10110",
|
||||
"description": "the UDP port we send to",
|
||||
"category": "UDP writer"
|
||||
"check":"checkPort",
|
||||
"category": "UDP writer",
|
||||
"condition":{
|
||||
"udpwEnabled":"true"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "udpwType",
|
||||
@@ -857,7 +887,10 @@
|
||||
{"l":"mc-ap","v":"5"},
|
||||
{"l":"mc-cli","v":"6"}
|
||||
],
|
||||
"category": "UDP writer"
|
||||
"category": "UDP writer",
|
||||
"condition":{
|
||||
"udpwEnabled":"true"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "udpwAddress",
|
||||
@@ -868,7 +901,8 @@
|
||||
"description": "the IP address we connect to in the form 192.168.1.2",
|
||||
"category": "UDP writer",
|
||||
"condition":{
|
||||
"udpwType":["3"]
|
||||
"udpwType":["3"],
|
||||
"udpwEnabled":"true"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -880,7 +914,8 @@
|
||||
"description": "the multicast address we send to 224.0.0.0...239.255.255.255",
|
||||
"category": "UDP writer",
|
||||
"condition":{
|
||||
"udpwType":["4","5","6"]
|
||||
"udpwType":["4","5","6"],
|
||||
"udpwEnabled":"true"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -889,7 +924,10 @@
|
||||
"type": "filter",
|
||||
"default": "",
|
||||
"description": "filter for NMEA0183 data when writing to remote UDP server\nselect aison|aisoff, set a whitelist or a blacklist with NMEA sentences like RMC,RMB",
|
||||
"category": "UDP writer"
|
||||
"category": "UDP writer",
|
||||
"condition":{
|
||||
"udpwEnabled":"true"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "udpwSeasmart",
|
||||
@@ -897,7 +935,84 @@
|
||||
"type": "boolean",
|
||||
"default": "false",
|
||||
"description": "send NMEA2000 as seasmart to remote UDP server",
|
||||
"category": "UDP writer"
|
||||
"category": "UDP writer",
|
||||
"condition":{
|
||||
"udpwEnabled":"true"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "udprEnabled",
|
||||
"label": "enable",
|
||||
"type": "boolean",
|
||||
"default": "false",
|
||||
"description":"enable the UDP reader",
|
||||
"category":"UDP reader"
|
||||
},
|
||||
{
|
||||
"name": "udprPort",
|
||||
"label": "local port",
|
||||
"type": "number",
|
||||
"default": "10110",
|
||||
"check":"checkPort",
|
||||
"description": "the UDP port we listen on",
|
||||
"category": "UDP reader",
|
||||
"condition":{
|
||||
"udprEnabled":"true"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "udprType",
|
||||
"label": "local address type",
|
||||
"type": "list",
|
||||
"default": "0",
|
||||
"description": "to which networks/addresses do we listen\nall: listen on AP and wifi client network\nap: listen in access point network only\ncli: listen in wifi client network\nmc-all: receive multicast from AP and wifi client network\nmc-ap:receive multicast from AP network\nmc-cli: receive muticast wifi client network",
|
||||
"list":[
|
||||
{"l":"all","v":"0"},
|
||||
{"l":"ap","v":"1"},
|
||||
{"l":"cli","v":"2"},
|
||||
{"l":"mc-all","v":"4"},
|
||||
{"l":"mc-ap","v":"5"},
|
||||
{"l":"mc-cli","v":"6"}
|
||||
],
|
||||
"category": "UDP reader",
|
||||
"condition":{
|
||||
"udprEnabled":"true"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "udprToN2k",
|
||||
"label": "to NMEA2000",
|
||||
"type": "boolean",
|
||||
"default": "true",
|
||||
"description": "convert NMEA0183 from UDP to NMEA2000",
|
||||
"category": "UDP reader",
|
||||
"condition":{
|
||||
"udprEnabled":"true"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "udprMC",
|
||||
"label": "multicast address",
|
||||
"type": "string",
|
||||
"default": "224.0.0.1",
|
||||
"check": "checkMCAddress",
|
||||
"description": "the multicast address we listen on 224.0.0.0...239.255.255.255",
|
||||
"category": "UDP reader",
|
||||
"condition":{
|
||||
"udprType":["4","5","6"],
|
||||
"udprEnabled":"true"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "udprReadFilter",
|
||||
"label": "NMEA read Filter",
|
||||
"type": "filter",
|
||||
"default": "",
|
||||
"description": "filter for NMEA0183 data when receiving\nselect aison|aisoff, set a whitelist or a blacklist with NMEA sentences like RMC,RMB",
|
||||
"category": "UDP reader",
|
||||
"condition":{
|
||||
"udprEnabled":"true"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "wifiClient",
|
||||
|
||||
36
web/index.js
36
web/index.js
@@ -181,6 +181,12 @@
|
||||
}
|
||||
}
|
||||
|
||||
checkers.checkPort=function(v,allValues,def){
|
||||
let parsed=parseInt(v);
|
||||
if (isNaN(parsed)) return "must be a number";
|
||||
if (parsed <1 || parsed >= 65536) return "port must be in the range 1..65536";
|
||||
}
|
||||
|
||||
checkers.checkSystemName=function(v) {
|
||||
//2...32 characters for ssid
|
||||
let allowed = v.replace(/[^a-zA-Z0-9]*/g, '');
|
||||
@@ -213,13 +219,20 @@
|
||||
}
|
||||
|
||||
checkers.checkIpAddress=function(v, allValues, def) {
|
||||
if (allValues.tclEnabled != "true") return;
|
||||
if (!v) return "cannot be empty";
|
||||
if (!v.match(/[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*/)
|
||||
&& !v.match(/.*\.local/))
|
||||
return "must be either in the form 192.168.1.1 or xxx.local";
|
||||
}
|
||||
checkers.checkMCAddress=function(v, allValues, def) {
|
||||
if (!v) return "cannot be empty";
|
||||
if (!v.match(/[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*/))
|
||||
return "must be in the form 224.0.0.1";
|
||||
let parts=v.split(".");
|
||||
let o1=parseInt(v[0]);
|
||||
if (o1 < 224 || o1 > 239) return "mulicast address must be in the range 224.0.0.0 to 239.255.255.255"
|
||||
|
||||
}
|
||||
checkers.checkXDR=function(v, allValues) {
|
||||
if (!v) return;
|
||||
let parts = v.split(',');
|
||||
@@ -264,21 +277,22 @@
|
||||
continue;
|
||||
}
|
||||
let check = v.getAttribute('data-check');
|
||||
if (check) {
|
||||
if (check && conditionOk(name)) {
|
||||
let cfgDef=getConfigDefition(name);
|
||||
let checkFunction=checkers[check];
|
||||
if (typeof (checkFunction) === 'function') {
|
||||
if (! loggedChecks[check]){
|
||||
loggedChecks[check]=true;
|
||||
//console.log("check:"+check);
|
||||
}
|
||||
let res = checkFunction(v.value, allValues, getConfigDefition(name));
|
||||
let res = checkFunction(v.value, allValues, cfgDef);
|
||||
if (res) {
|
||||
let value = v.value;
|
||||
if (v.type === 'password') value = "******";
|
||||
let label = v.getAttribute('data-label');
|
||||
if (!label) label = v.getAttribute('name');
|
||||
v.classList.add("error");
|
||||
alert("invalid config for " + label + "(" + value + "):\n" + res);
|
||||
alert("invalid config for "+cfgDef.category+":" + label + "(" + value + "):\n" + res);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -472,10 +486,10 @@
|
||||
if (!(condition instanceof Array)) condition = [condition];
|
||||
return condition;
|
||||
}
|
||||
function checkCondition(element) {
|
||||
let name = element.getAttribute('name');
|
||||
|
||||
function conditionOk(name){
|
||||
let condition = getConditions(name);
|
||||
if (!condition) return;
|
||||
if (!condition) return true;
|
||||
let visible = false;
|
||||
if (!condition instanceof Array) condition = [condition];
|
||||
condition.forEach(function (cel) {
|
||||
@@ -493,7 +507,13 @@
|
||||
}
|
||||
}
|
||||
if (lvis) visible = true;
|
||||
});
|
||||
});
|
||||
return visible;
|
||||
}
|
||||
|
||||
function checkCondition(element) {
|
||||
let name = element.getAttribute('name');
|
||||
let visible=conditionOk(name);
|
||||
let row = closestParent(element, 'row');
|
||||
if (!row) return;
|
||||
if (visible) row.classList.remove('hidden');
|
||||
|
||||
Reference in New Issue
Block a user