De command parser / webserver is op de schop.
Aan de command parser ( web server ) is een contentJSON toegevoegd.
Voorlopig is een JSON voor P1, PulseMeters en Temperatuur meters en Remote433MHz en BuildersVars beschikbaar eea kan eenvoudig uitgebreid worden. Alle vijf kunnen afzonderlijk of tesamen aangeroepen worden.
aanroep = contentJSON&
P1 en/of
PulseMeters en/of
TemperatureMeters en/of
Remote433MHz en/of
BuildersVars met het & teken als scheidingsteken.
JavaScript:
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
30
31
32
33
34
| xhr.open("GET", (URL + ":" + PORT + "/contentJSON&P1&PulseMeters&TemperatureMeters&Remote433MHz&BuildersVars&&&=") + Math.random().toString(), true);
//uitlezen
var response = JSON.parse(this.response);
for (var sensor in response) {
if (sensor == "P1") { // SmartMeter
// response.P1.ConsumptionWattNow
for (var property in response[sensor]) {
console.log(sensor + " " + property + " "+ response[sensor][property])
}
}
else { //PulseMeters en of TemperatureMeters en of Remote433MHz en of BuildersVars
for (var index in response[sensor]) {
// response.PulseMeters[0].ID
// response.TemperatureMeters[0].CelsiusTemperature
// response.Remote433MHz[0].Definition
for (var property in response[sensor][index]) {
console.log(sensor + " ( " + index + " ) " + property + " " + response[sensor][index][property])
}
}
}
} |
Bovenstaande code met mijn test Netduino komt dit eruit rollen...
P1 ConsumptionWattNow 0
P1 SolarDeliverTotal -2
P1 ElectraConsumedTotal -2
P1 SolarDeliverToday -2
P1 ElectraConsumedToday -2
P1 ElectraHigh -1
P1 ElectraLow -1
P1 SolarHigh -1
P1 SolarLow -1
P1 SolarDeliveryNow 0
P1 GasConsumedToday -1
P1 GasConsumedTotal -1
P1 CurrentElectricityTariff High
PulseMeters ( 0 ) ID -1
PulseMeters ( 0 ) WattageNow 0
PulseMeters ( 0 ) KWH 0
PulseMeters ( 0 ) Pulses 2321
TemperatureMeters ( 0 ) ID -1
TemperatureMeters ( 0 ) Celsius 0
remote433MHz ( 0 ) Definition KamerLamp
remote433MHz ( 0 ) Status On
remote433MHz ( 0 ) LastMessage 150624084347
BuildersVars ( 0 ) ID 1
BuildersVars ( 0 ) Value 34567
Heb je meer PulseMeters of TemperatuurMeters dan worden deze uiteraard ook in deze lijst zichtbaar.
bv: PulseMeters ( 1 ) ID 5
Nu heeft het gros hier geen boodschap aan maar er zijn gebruikers die met JSONs werken.
Er zijn genoeg voorbeelden aanwezig om zelf verder te hastsflatsen.
en dan roep je de JSON zo aan in JavaScript:
JavaScript:
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
| var content = JSON.parse(this.response);
content["PulseMeters"][0]["WattageNow"]
content["PulseMeters"][0]["KWH"]
content["TemperatureMeters"][0]["Celsius"]
content["remote433MHz"][0]["Status"]
content["P1"]["ConsumptionWattNow"]
content["BuildersVars"][0]["Value"]
// of zo
content["TemperatureMeters"][0].Celsius
content["P1"].ConsumptionWattNow
// of zo
content.TemperatureMeters[0].Celsius
content.P1.ConsumptionWattNow
//of store in sub var.
var P1 = content["P1"];
P1.ConsumptionWattNow
var temperatuur = content["TemperatureMeters"][0]
temperatuur.Celsius |
En hier de JSON in praktijk in het standaard dashBoard INDEX.HTML
JavaScript:
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
| function NetduinoMain() {
document.getElementById("CircleRead").style.backgroundColor = '#990033';
var URL = arrNetduinosOnline[0], PORT = arrNetduinosOnline[1];
var xhr = new XMLHttpRequest();
xhr.open("GET", (URL + ":" + PORT + "/contentJSON&PulseMeters&P1&TemperatureMeters&&&=" + Math.random().toString()), true);
xhr.onload = function () {
if (xhr.readyState === 4) {
if (this.status == 200) {
NetduinoMainParseContent(JSON.parse(this.response));
}
}
}
xhr.send(null);
}
function NetduinoMainParseContent(content) {
var SmartMeter = content["P1"];
var PulseMeter = content["PulseMeters"][0];
var TemperatureMeter = content["TemperatureMeters"][0];
varSolarWattNow.refresh(PulseMeter.WattageNow);
varSolarPanelsKWH.refresh(PulseMeter.KWH * 0.001);
varTemperature.refresh(TemperatureMeter.Celsius);
varSolarDeliverToday.refresh(SmartMeter.SolarDeliverToday);
varSolarDeliverTotal.refresh((SmartMeter.SolarDeliverTotal - arrsubtractHistoric[2]).toFixed(0));
varConsumptionWattNow.refresh(SmartMeter.ConsumptionWattNow);
varGasConsumedToday.refresh(SmartMeter.GasConsumedToday);
varGasConsumedTotal.refresh((SmartMeter.GasConsumedTotal - arrsubtractHistoric[1]).toFixed(0));
varElectraConsumedTotal.refresh((SmartMeter.ElectraConsumedTotal - arrsubtractHistoric[0]).toFixed(0));
varElectraConsumedToday.refresh(SmartMeter.ElectraConsumedToday);
setBackToGreen()
} |
Omdat de oude liveData.HTML webpagina met
CSV bestanden werkt is er programma code geschreven die oud met nieuw verbind zodat de nieuwe Netduino webserver ook hiervoor gebruikt kan worden.
JavaScript:
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
30
31
32
33
34
35
36
| //convert JSON to CSV
var responseJSON = JSON.parse(this.response);
var contentCSV = Port;
var ID = -1;
for (var sensor in responseJSON) {
if (sensor == "P1") {
for (var property in responseJSON[sensor]) {
// you can not log the ElectricityTariff on a chart
if (property != "CurrentElectricityTariff")
contentCSV += "," + property;
}
}
else { //PulseMeters, TemperatureMeters, Vars
for (var index in responseJSON[sensor]) {
for (var property in responseJSON[sensor][index]) {
// the index is Not the ID of the sensor or buildersVar.
// the ID is given by the user in the Options.html page.
// the index is the number of representation in the dropDownList
if (property == "ID")
ID = responseJSON[sensor][index][property];
else
contentCSV += "," + sensor + "( " + ID + " )" + property;
}
}
} |
Het is niet zozeer het programmeren, het zijn de ideeën hierachter, daar hoef je geen Einstein voor te zijn.
De versie 3.8 Remote werkt goed, klik uit, klik aan.....mijn halve huis is geautomatiseerd.
[
Voor 46% gewijzigd door
Willie Wortel op 30-06-2015 12:20
]