Status things, moeten opgevraagd worden en I'm lost in the woods. input gevraagd.
De situatie;
Het huidige systeem is van ISYGLT een bedraad systeem, robust maar niet echt van deze tijd.
Het hart van deze installatie is de MA-IP-2-master.
Mijn intentie is altijd al geweest om een RPI te gaan gebruiken en langzaam de ISYGLT componenten te vervangen.
Er zijn volgens mij 2 opties; a:MODbus b:TCP
Met MODbus geen ervaring dus dat wil ik nu (denk ik) laten liggen.
De oplossing zou kunnen liggen in deze string "38912,15162,10797,11296,28460,45568,8,22"
die 8 cijfers zijn eigenlijk 8 * 2 Byte. Dus zou ik 38912 omzetten krijg ik "0":"10011000","1":"10011000"
Waar de cijfers/byte's en bit's voor staan is voor mij klaare taal.
Die gegevens houden de actuele status van mijn lampen deuren dim waardes etc en ik kan ze opvragen door naar
http://192.168.1.13/cgi-bin/readpc?p=1 te gaan (Blank page) maar in de source code
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| <html><head><title>r</title><meta http-equiv="expires" content="0">
<script>
function run()
{if(n==top.rfrcount){top.update_anzvalues();top.start_read_values(top.anzreptime);}}
</script></head><body>
<script>
top.r1=[38912,15162,10797,11296,28460,45568,8,22];
top.r2=[0,0,0,0,0,0,39,33];
top.r3=[0,0,0,0,0,0,41,44];
top.SichPageNr=1;
top.SichPageTyp=2;
n=0;
run();
</script>
</body>
</html> |
Zien we top.r1=[] met de gevraagde info.
De MA-2-IP-master heeft een kleine web server met HTML en JavaScript ondersteuning.
Nu heb ik een kleine webpagina geschreven die de gegevens van bovenvermelde source code leest.
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
<html><head>
<meta http-equiv="Content-Script-Type" content="text/javascript">
<meta http-equiv="Content-Style-Type" content="text/css">
</head>
<body>
<p id="semo"><script type="text/javascript">
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
var x = this.responseText;
var z = x.slice((x.search("r1")+4),(x.search("r2")-8)).split(",");
document.title = z;
document.getElementById("semo").innerHTML = z;
}
};
xhttp.open("GET", "cgi-bin/readpc?p=1", true);
xhttp.send();
</script></body></html> |
en de string in de title en body zet.
Zover ik heb kunnen testen kan ik geen Ajax post/get response of php gebruiken op de IP-master
tevens moet ik chrome opstarten security flag disabled anders fliegt er de "has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource." me om de oren.
geen idee of deze policy alleen geldt voor client side browser, of ook als mijn RPI de gegevens vraagt?
Op de RPI de volgend JS
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
| function readPC(pageNr = 1) {
var xhttp;
xhttp=new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
var x = xhttp.responseText
// select string top.r1[string] from source
var z = x.slice((x.search("r1")+4),(x.search("r2")-8)).split(",");
// split 2byte into 1 byte and load up to a nice JSON string
for (var i=0; i < 8; i++){
q+= '"' + (2*i) + '":"';
q+= toBinary(z[i]).substring(0, 8) + '",';
if (((2*i)+1) < 15){
q+= '"' + ((2*i)+1) + '":"';
q+= toBinary(z[i]).substring(0, 8) + '",';
} else {
q+= '"' + ((2*i)+1) + '":"';
q+= toBinary(z[i]).substring(0, 8) + '"}';
}
}
}
}
xhttp.open("GET", 'http://192.168.1.13/cgi-bin/readpc?p=' + pageNr, false);
xhttp.send();
}
function toBinary(nr) {
// 2byte to 16bit, add zero's if needed
return parseInt(nr).toString(2).padStart(16, '0');
} |
Die ik oproep met
HTML:
1
2
3
4
5
6
7
8
9
10
| <!DOCTYPE html>
<html><head>
<script src="json.js"></script>
</head>
<body><script>
var q='{',x=[];
readPC();
x = JSON.parse(q);
console.log(x[0]);
</script></body></html> |
als ik die laatste pagina laadt in chrome op gestart met windows r, chrome.exe --user-data-dir="C:/Chrome dev session" --disable-web-security
krijg ik de gevraagde informatie in een json string. (het is nog niet zo dat ik bv jquery.json[0][1] kan doen)
en nu weet ik het echt niet meer hoe verder en of dit eigenlijk wel de juiste weg is.
Ik zie werkelijk door de bomen het bos niet meer,
Wat is er nodig om het werkend te krijgen?
Het thing dat de gegevens kan opvragen. (als dat is gelukt, kijk ik wel hoe de items er aan gehangen gaan worden)
* HomePlayer Is een Frankenstein coder Die veel leest en try and error is mijn way of life, echter loop ik tegen de lamp die uit is en nu opzoek naar info om het aan te zetten.
Gevraagd = geen kant en klare oplossing, maar sleutel worden en/of code snippets die mij mogelijk de juiste richting op sturen