De opstart JSON options pagina is klaar, hier kan je een DaL voorbeeld tekst opstart JSON downloaden. Heb even alle opties aangevinkt om output te creëren, dus zijn de meeste velden leeg.
de opstart JSON in tekst format.
Mocht je twijfelen of de JSON juist is, knip en plak de JSON
HIER om te testen.
Alle numerieke invoer is alfa numeriek gemaakt zodat ook tekst ingevoerd kan worden. Alle tekst is aanpasbaar en staat niet meer hard in de code als tekst.
Nu nog uittesten.
---
De JSON opmaak die gebruikt wordt in de DaL options.html pagina en op opmaak van je raspberry
moeten identiek zijn. Als de opmaak niet identiek is kan DaL niet juist functioneren. Dus verander je wat aan de opmaak, dan MOET deze opmaak naar je raspberry worden verzonden.!
Het zit allemaal heel logisch in elkaar en maakt DaL betrouwbaarder.
Als je VALUES hebt veranderd moet de opmaak ook weggeschreven worden in je raspberryconfig.js bestand. Dus resumé mee, de opmaak moet zowel in je raspberryconfig alsook op de raspberry identiek zijn. Het lijkt overweldigend moeilijk maar is het niet. DaL is wel 10x zo krachtig geworden hiermee.!
En uiteraard worden alle JSONs zowel de opmaak json alsook de configuratie/opstart json gecontroleerd op syntax fouten, onjuiste invoer.
Alle XHR webpagina routines voor wegschrijven en inladen van bestanden op de Raspberry zijn herschreven. Bestanden worden nu in 1x geladen/wegeschreven in plaats van in stukken. Omdat het geheugen van de rasp vele malen groter is dan van een Netduino.
omdat eea nogal complex is zit er een uitgebreide error afhandeling in om het debuggen zo eenvoudig mogelijk te maken, in NOW:
met opzet fout in de opstart JSON: "Smart Meter Parameters", key: "baudrate"
goed in het externe bestand:
fout:

dit is trouwens de opstartJSON in de sourcecode.
het nieuwe inlezen ziet er zo uit:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| p = dalProps.GetNamedObject("pvoutputstreams")
name = p.GetNamedString("name")
If startupJSON.ContainsKey(name) Then
a = startupJSON.GetNamedArray(name)
For Each o In a
s = New js(o.GetObject, p)
If s.getBoolean("operate") Then
With DaL.ProviderStreamsProperties(ct)
.Stream = s.getString("stream")
.APIKey = s.getString("apikey")
.Feed_SystemID = s.getString("systemid")
.Interval = CInt(s.getValue("interval"))
.PinOnWrite = parsePinOnWrite(s.getString("pinonwrite"))
.Task = EnumTasks.sendtoPVOutput
.TimeFilterID = parseIntStr(s.getString("timerfilter"))
.CompareFilterID = parseIntStr(s.getString("comparisonfilter"))
End With
ct += 1
End If
Next
End If |
maar echt alles gaat op de schop:
Buiten een gloednieuwe motor zit er een krachtige foutafhandeling in geprogrammeerd zodat het zoeken naar fouten tot een minimum beperkt blijft. Als dit stabiel draait wil ik me gaan toeleggen op nieuwe uitdagingen zoals het touchscreen. Er is BTW een
nieuwe Rasberry uit.
De foutmeldingen komen netjes in de errors map met de folder/file datum erin.
ik heb even een functie geschreven die alle JSON invoer nakijkt, vertrouwen is goed maar nakijken is beter.
Visual Basic:
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
| Private Function checkDalJSONproperties() As Boolean
Dim errDT As String = "DateTime: " & Date.Now.ToString("dddd, d MMM yyyy - HH:mm:ss") & vbCrLf
Dim errTxt As String = ""
Dim err As Boolean = False
Dim Pe As JsonObject = Nothing
Try
If Not JsonObject.TryParse(_Props.Replace("'", """"), Pe) Then
errTxt = errDT & "can not continue, DaL properties layout JSON is corrupt"
err = True
Debug.WriteLine(errTxt)
appendToFile("Errors", "JSON ", errTxt).Wait()
Throw New Exception(errTxt)
End If
For Each element In Pe
For Each Keys In element.Value.GetObject
If Not dalProps.ContainsKey(element.Key) Then
errTxt = errDT & "DaLpropertiesJSON element: '" & element.Key & "' not found"
Debug.WriteLine(errTxt)
appendToFile("Errors", "JSON ", errTxt).Wait()
err = True
Else
If Not dalProps(element.Key).GetObject.ContainsKey(Keys.Key) Then
errTxt = errDT & "DaLpropertiesJSON element: '" & element.Key & "' key: '" & Keys.Key & "' not found"
Debug.WriteLine(errTxt)
appendToFile("Errors", "JSON ", errTxt).Wait()
err = True
Else
Dim oName = dalProps.GetNamedObject(element.Key).GetNamedString("name")
If startupJSON.ContainsKey(oName) Then
For Each o In startupJSON.GetNamedArray(oName)
If Keys.Key <> "name" Then
If Keys.Value.ValueType = JsonValueType.String Then
If Not o.GetObject.ContainsKey(dalProps.GetNamedObject(element.Key).GetNamedString(Keys.Key)) Then
errTxt = errDT & "DaLstartupJSON element: '" & element.Key & "' name: '" & oName & "' element key: '" & Keys.Key & "' not found"
Debug.WriteLine(errTxt)
appendToFile("Errors", "JSON ", errTxt).Wait()
err = True
End If
End If
End If
Next
End If
If Keys.Value.ValueType = JsonValueType.Object Then
For Each h In Keys.Value.GetObject
If Not dalProps.GetNamedObject(element.Key).GetNamedObject(Keys.Key).ContainsKey(h.Key) Then
errTxt = errDT & "DaLpropertiesJSON element: '" & element.Key & "' key: '" & Keys.Key & "' value: '" & h.Key & "' not found"
Debug.WriteLine(errTxt)
appendToFile("Errors", "JSON ", errTxt).Wait()
err = True
Else
If startupJSON.ContainsKey(oName) Then
Dim oZ = dalProps.GetNamedObject(element.Key).GetNamedObject(Keys.Key)
If startupJSON.GetNamedArray(oName)(0).GetObject.ContainsKey(oZ.GetNamedString("name")) Then
If Not startupJSON.GetNamedArray(oName)(0).GetObject.GetNamedArray(oZ.GetNamedString("name"))(0).GetObject.ContainsKey(oZ.GetNamedString(h.Key)) Then
If h.Key <> "name" Then
errTxt = errDT & "DaLstartupJSON '" & oName & "' key '" & oZ.GetNamedString(h.Key) & "' not found"
Debug.WriteLine(errTxt)
appendToFile("Errors", "JSON ", errTxt).Wait()
err = True
End If
End If
Else
errTxt = errDT & "DaLstartupJSON '" & oName & "' key '" & oZ.GetNamedString(h.Key) & "' not found"
Debug.WriteLine(errTxt)
appendToFile("Errors", "JSON ", errTxt).Wait()
err = True
End If
End If
End If
Next
End If
End If
End If
Next
Next
If err Then
errTxt = "Error in JSON probs or startupJSON, can not continue, check your JSON error listfile in map 'Error' on your Raspberry"
Throw New Exception(errTxt)
End If
Catch ex As Exception
DaL.exeptions.storeExeption("Error in JSON ", ex)
Debug.WriteLine(errTxt)
End Try
Return err
End Function |
zo is de pagina uiteindelijk geworden. Met full na controle in de webpagina alsook in de raspberry om fouten te voorkomen.

Als je nu nog een fout maakt dan kom je in de krant.
Stay tuned to this channel for the release of DaL 2.0 Next Generation.
Er is op bij de FlowMeter een extra optie toegevoegd, "flowPerHour", als deze optie ingevuld is wordt de COP berekend met de flowperhour invoer. De diepe gedachte hierachter dat mijn flow redelijk constant 830 liter per uur. Je hebt dan eigenlijk helemaal geen flowmeter nodig maar kan wel aardig de COP van een warmtepomp berekenen volgens de ingebouwde formule.
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| "FlowMeter" : [
{
"ID" : "Warmtepomp COP",
"Operate" : true,
"digital Pin" : "D12",
"kfactor" : "",
"waterFlow per hour" : 830,
"Water Temperature IN" : "Temperatuur sensor DS18B20('WP WaterIN').celcius",
"Water Temperature OUT" : "Temperatuur sensor DS18B20('WP WaterUIT').celcius",
"WP wattage NOW" : "PulseMeter('WarmtePomp').watts",
"Interval" : 30,
"pinOnWrite" : "PCA9685 RGB pinOnWrite( 'LED' )( '1' )( 'WP flowMeter' )",
"Timer Filter" : "",
"Comparison Filter" : ""
}], |
Met het nakijken/uittesten van de code stofzuig ik ook alle foutafhandeling schoon. Nu met volledige check, het programma gaat niet verder bij onvolledige ingave, waar ook in het programma. NB: Alle tekst die zichtbaar is in de voorbeeld image kan aangepast worden in de JSON naar eigen wensen.

Je moet er absoluut vanuit kunnen gaan dat de Options webpagina 100% juist is anders kunnen we beter stoppen.
Heb eerst even de WIKI gemoderniseerd, die webpagina stamde nog uit de tijd dat we HTML aan het leren waren, we zijn nu gevorderd ... toch.
Als in de startupJSON een key wordt veranderd (om wat voor reden dan ook) kan deze niet meer worden gevonden. DaL zal dan een foutmelding geven. Aan de hand van de melding kan eenvoudig de fout worden opgelost:

Het is met DaL NG niet meer mogelijk foute invoer te verwerken naar de Raspberry.
Zo kopieer je de startupJSON in je DaL NG source code:
Zo kopieer je de properties en layout JSON in je DaL NG source code:
Je kan alle code uiteraard ook uploaden in een extern bestand.
voorbeeld van foute invoer in de opstartJSON:
zo pas je de eigenschappen aan in je Layout JSON.
Overal in het programma wordt alles aangepast, ook in de WIKI. Een gemuteerde layout JSON moet ook geupload worden naar je raspberry of hardcoded handmatig copy paste.
De DaL versie Next Generation draait vanaf vandaag in mijn Central "hoofd" Raspberry. (dan moet het wel goed zijn

)
Wat nu nog te doen,.? ... de dashboard designer aanpassen zodat deze ook de opstartJSON kan lezen.
[
Voor 149% gewijzigd door
Willie Wortel op 04-04-2018 11:57
]