1 JSON -Grammatik für den Im

1
JSON-Grammatik für den Im- und Export von
Schalt-/Interaktionsregeln
1.1
Aufbau
Grundlage bildet der JSON-Standard. Der im Gegensatz zu XML deutlich
weniger Overhead erzeugt. Wie im folgenden ersichtlich ist auch Voraussetzung,
dass die Regel als Baumstruktur abbildbar ist, gegeben.
Der JSON-Baum darf in der Wurzel als Array oder Objekt beginnen. Objektschachtelung
ist explizit erlaubt. Arrays können gleichzeitig Objekte und Arrays in sich
aufnehmen. Jedes innere JSON-Objekt wird mit einem Key vom Typ String
und in GROSSBUCHSTABEN gefolgt von einem : und dem { eingeleitet
und mit } geschlossen. Die Angabe in Groÿbuchstaben dient zur Abgrenzung
zu den eigentlichen Objektparametern, welche idealerweise in KLEINBUCHSTABEN
dargestellt sein sollten. Bei Integration/Anbindung des Regeldesigners in/an
ein anderes Heimautomatisierungssystem kann je nach Art der Datenübernahme/bereitstellung davon abgewischen werden.
Für das äuÿere Objekt entfällt
die Angabe von Key und :. Arrays werden mit [ eingeleitet und mit ]
abgeschlossen.
Alle vom englischen Format (Dezimalpunkt) abweichende nummerischen Werte
sind als Zeichenketten zu behandeln. Diese Zeichenketten (Strings) werden
zwischen Anführungsstrichen deklariert (z.B. [String]).
1
Gegeben sei folgende Grammatik
N
{N, Σ, P, hrulesi}
mit
:
hrulesi, hrulei, hconditionsi, hgatheri, hconditioni, hactioni, hactorsi, hactorgroupi,
hactori, hvdevi, href _paramsi, hparamsi
Σ
:
hLOG_SY M BOLi
=
{'<', '>', '<=', '>=', '=', ' !='}
hLOG_GAT HERi
=
{'AND', 'OR'}
hLOG_N EG_GAT HERi
=
{'NOT'}
hP ARAM i
=
String
hV ALU Ei
=
String | Int | Bool
hEM P T Y i
=
ε
2
P:
hrules i
hrule i
→ `[' (hrule i | hEMPTY i) `]'
→ `{' `ID' `:'
String `,'
`PARAMS' `:' `{'
`COND' `:' `{'
hconditions i `}' `,'
`ACTION' `:' `['
[ `,' `VDEV' `:'
hconditions i
→ hcondition i
|
hgather i
hactions i `]'
hvdev i
→ hLOG_GATHER i `:'
|
hconditions i
( `,'
hconditions i
→ `SENSOR' `:'
ID `,'
1
`}'
[ `,' `VDEV' `:'
→ hactors i
|
)? `]'
hLOG_NEG_GATHER i `:' `[' hconditions i `]'
href_param i
`REF_PARAMS' `:' `{'
hactions i
] `}'
hgather i
`['
hcondition i
hparams i `}' `,'
hvdev i
( `,'
href_param i
)?
]
hactorgroup i
hactorgroup i → `{' `VDEV' `:' hvdev i `,' `ACTORS' `:' `[' hactors i `]' `}'
hactors i
hactor i
hvdev i
→ hactor i
( `,'
hactor i
→ `{' `ACTOR' `:'
→ `{' `TYPE' `:'
)?
ID `,' `PARAMS' `:' `{'
ID `,' [ `PARAMS' `:' `{'
`REF_PARAMS' `:' `{'
href_params i → hPARAM i `:'
`['
2
hparams i
2
href_params i `}'
hLOG_SYMBOLi `,' hVALUE i
hparams i `}'
hPARAM i `:' hVALUE i
( `,'
hVALUE i
)? `]'
)?
Multiple Angabe von Parametern werden als AND-Verknüpfungen behandelt
Die Darstellung als Array erlaubt mehrparametrige Vergleichsoperationen
3
|
] `}'
→ hPARAM i `:' hVALUE i
( `,'
1
hparams i `}' `}'
1.2
Validierung und Anwendung
3
Zur Validierung werden folgende Anwendungsbeispiele angeführt :
Fernsteuerung des Lichtes
- Das Taster-Signal (z.B. EnOcean) wird von
einem PC-System empfangen und unter Nutzung der entsprechenden
Regel verarbeitet.
Da der PC die Impulse mitzählen kann, können
individuelle gestaltete Helligketis-/ Verdunklungstufen am Endgerät
ohne mechanische Bindung erreicht werden. Die denierten Schaltstufen
sind damit nicht mehr abhängig vom mechanischen Schalter und derer
statischen Beschränkungen.
[
{
"ID": "RULE_1_LIGHT_ON",
"PARAMS": {
"name": "Fernsteuerung Einschaltregel",
"descr": "Einschaltregel zur Fernsteuerung des Lichtes"
},
"COND": {
"SENSOR": "Schalter (S)",
"PARAMS": {
"state": [ "==", "on" ]
}
},
"ACTION": [
{
"ACTOR": "Lampe (L)",
"PARAMS": {
"state": "on"
}
3
technische Korrektheit vernachlässigt
4
}
]
},
{
"ID": "RULE_1_LIGHT_OFF",
"PARAMS": {
"name": "Fernsteuerung Ausschaltregel",
"descr": "Ausschaltregel zur Fernsteuerung des Lichtes"
},
"COND": {
"SENSOR": "Schalter (S)",
"PARAMS": {
"state": [ "!=", "on" ]
}
},
"ACTION": [
{
"ACTOR": "Lampe (L)",
"PARAMS": {
"state": "off"
}
}
]
}
]
Zeitbedingtes Heizen mittels elektrisch gesteuerter Anlagen
- In der
klassischen Schalttechnik werden hierzu analoge Schaltuhren verwendet.
Die Uhr mit Schutzkontaktanschluss wird einfach zwischen dem zu
schaltenden Gerät und der Stromzufuhr (Steckdose) eingebunden. Über
rastende Pins wird i.d.R. ein 24 Stunden-Intervall nachgebildet. Ein
Pin-Intervall hat somit 24·60/Anzahl der P ins
M inuten.
Intern arbeitet
ein Uhrwerk, welches die Pin-Scheibe binnen 24 Stunden einmal um
5
360◦
dreh. Über ein Kontaktband im Innern entsteht je Schaltstellung
der Pins die Verbindung zwischen Steckdose und Durchlass gekappt
bzw.
hergestellt.
bzw.
Bei PC-Steuerung wird diese durch die Systemuhr
diverse Algorithmen ersetzt.
Aufgrund der Reichweite bzgl.
der Programmierbarkeit ist der PC selbst Mikrocontroller-basierter
4
Zeitschaltuhren funktional überlegen. Sämtliche analoge bzw. digitale
Schaltuhren sind ein einziges PC-System ersetzbar.
Version 1: Zeitbegrenzung als Bedingung interpretiert
[
{
"ID": "RULE_2_VAR_A",
"PARAMS": {
"name": "Heizungsteuerung",
"descr": "Regel zur Heizungsteuerung"
},
"COND": {
"AND": [
{
"SENSOR": "Thermometer (T)",
"REF_PARAMS": {
"state": [ "<", "20.5" ]
}
}, {
"SENSOR": "Heizung (H)",
"REF_PARAMS": {
"state": [ "=", "off" ]
},
"VDEV": {
"TYPE": "TIMER",
4
i.d.R. nur Programmierung für konkrete Wochentage und Zeitintervalle möglich,
erlaubt jedoch sekundengenaue Schaltung
6
"REF_PARAMS": {
"time": [ "between", "5", "22" ]
}
}
}
]
},
"ACTION": [
{
"ACTOR": "Heizung (H)",
"PARAMS": {
"state": "on", "temperature": "21.7"
}
}
]
}
]
Version 2: Zeitbegrenzung als Ablehnungskriterium interpretiert
[
{
"ID": "RULE_2_VAR_B",
"PARAMS": {
"name": "Heizungsteuerung",
"descr": "Regel zur Heizungsteuerung"
},
"COND": {
"AND": [
{
"SENSOR": "Thermometer (T)",
"PARAMS": {
"state": [ "<", "20.5" ]
7
}
}, {
"SENSOR": "Heizung (H)",
"PARAMS": {
"state": [ "=", "off" ]
}
}
]
},
"ACTION": [
{
"ACTOR": "Heizung (H)",
"PARAMS": {
"state": "on", "temperature": "21.7"
}
}
],
"VDEV": {
"TYPE": "TIMER",
"REF_PARAMS": {
"time": [ "between", "5", "22" ]
}
}
}
]
Version 3: Zeitbegrenzung als Ausführungsbeschränkung interpretiert
[
{
"ID": "RULE_2_VAR_3",
"PARAMS": {
"name": "Heizungsteuerung",
8
"descr": "Regel zur Heizungsteuerung"
},
"COND": {
"AND": [
{
"SENSOR": "Thermometer (T)",
"PARAMS": {
"state": [ "<", "20.5" ]
}
}, {
"SENSOR": "Heizung (H)",
"PARAMS": {
"state": [ "=", "off" ]
}
}
]
},
"ACTION": [
{
"ACTORGROUP": {
"VDEV": {
"TYPE": "timer",
"PARAMS": {
"time": [ "delay", "7200" ]
}
},
"ACTORS": [{
"ACTOR": "Heizung (H)",
"PARAMS": {
"state": "on", "temperature": "21.7"
}
}]
}
9
}
]
}
]
Treppenhaus
- Angenommen sei ein langer Gang mit einer Länge von
m → ∞ (m ∈ R).
Zur Sicherung des Weges gebe es n Abschnitte
mit je einer ausreichenden Beleuchtungseinheiten.
Rein theoretisch
kann die Beleuchtung generell eingeschaltet bleiben. Infolge entstehen
unkalkulierbare Stromkosten. Eine Möglichkeit die Kosten zu reduzieren
und die auch heute noch üblichste Methode ist eine mechanische Relay/Zeitintervallschaltung zu organisieren (z.B. mittels Taster und Nachlaufrelais
5
je Abschnitt) . Im Falle dieser Nachlaufrelais ist die einstellbare Nachlaufzeit
jedoch begrenzt.
Scheidet somit selbst im endlichen Fall sobald die
Maximalnachlaufzeit überschritten wird.
Die zweite ist regelbasiert.
Man könnte am Ein- und Ausgang Taster anbringen und die Abschnitte
mit diversen Sicherheitszugaben zeitversetzt und für die Dauer schalten,
die der Passant zur Erreichung bzw. zum Durchlaufen des jeweiligen
benötigt.
[
{
"ID": "RULE_3",
"PARAMS": {
"name": "Treppenhaus/ Langer Gang",
"descr": "Regel zur Fernsteuerung des Lichtes"
},
"COND": {
"OR": [
{
"SENSOR": "Taster (S1)",
"PARAMS": {
5
weiteres/Link
10
"event": "click"
}
},
{
"SENSOR": "Taster (S2)",
"PARAMS": {
"event": "click"
}
},
...,
{
"TASTER": "Taster (SN)",
"PARAMS": {
"event": "click"
}
}
]
},
"ACTION": [
{
"ACTOR": "Lampe (L1)",
"PARAMS": {
"state": "on"
}
},
{
"ACTOR": "Lampe (L2)",
"PARAMS": {
"state": "on"
}
},
...,
{
11
"ACTOR": "Lampe (Li)",
"PARAMS": {
"state": "on"
}
}, {
"ACTORGROUP": {
"VDEV": {
"TYPE": "TIMER",
"PARAMS": {
"delay": 600, "duration": 900, "ignore_delay": true
}
},
"ACTORS": [
{
"ACTOR": "Li+1_Lj_GROUP",
"PARAMS": {
"state": "on"
}
}
]
}
}, {
"ACTORGROUP": {
"VDEV": {
"TYPE": "LIGHT_TIMER",
"PARAMS": {
"delay": 1200, "duration": 900, "ignore_delay": true
}
},
"ACTORS": [
{
"ACTOR": "Lj+1_Ln_GROUP",
"PARAMS": {
12
"state": "on"
}
}
]
}
}
]
}
]
Produktionskette
- Beim Einschalten von elektrischen Geräten entstehen
kurzzeitig hohe Ströme, welche in der Summe ganze Maschinen und
ihre sensible Technik zerstören können.
Dies ist einer der Gründe
weswegen Flieÿbandproduktionsketten stets stückweise und kontrolliert
in Betrieb genommen. Man nehme realitätsfern jedoch zu Demonstrationszwecken
den Mittwoch ist Feiertag an. Stilllegung erfolgte nach Betriebsschluss
am Tag zuvor.
[
{
"ID": "RULE_4",
"PARAMS": {
"name": "Produktionskette",
"descr": "Regel zum Hochfahren von Rechen-/Produktionsanlagen (Fliessb
},
"COND": {
"VDEV": "TIMER",
"REF_PARAMS": {
"weekdays": [
"in", "37"
]
},
"PARAMS": {
13
"time": [
"start", "20"
]
}
},
"ACTION": [
{
"ACTOR": "Anlage (M1)",
"PARAMS": {
"state": "on"
}
}, {
"ACTORGROUP": {
"VDEV": "TIMER",
"PARAMS": {
"delay": 1200
},
"ACTORS": [
{
"ACTOR": "Anlage (M2)",
"PARAMS": {
"state": "on"
}
},
{
"ACTOR": "Anlage (M3)",
"PARAMS": {
"state": "on"
}
}
]
}
}, {
14
"ACTORGROUP": {
"VDEV": "TIMER",
"PARAMS": {
"delay": 2000
},
"ACTORS": [
{
"ACTOR": "Anlage (M4)",
"PARAMS": {
"state": "on"
}
}
]
}
}
]
}
]
Klimaanlage
- Sommerszenario
Bei einer Auÿentemperatur (S1)
(S2)
> 70◦
> 30◦ und/oder einer äuÿeren Luftfeuchtigkeit
sollen alle Fenster (A1, A2) geschlossen werden/ bleiben.
Klimaanlage (A3) an auf
21, 5◦ .
Zudem sind alle Räume im Hochsommer (Juli/August) täglich im Zeitraum
(Timer - T3) von 05 - 06 Uhr zu lüften (A1, A2
→
auf ).
[
{
"ID": "RULE_5",
"PARAMS": {
"name": "Klimaanlage1",
"descr": "Regel zur Inbetriebnahme der Klimaanlage im Sommer"
15
},
"COND": {
"OR": [
{
"SENSOR": "Wetterstation (WS)",
"PARAMS": {
"temp": [ ">", 21.5 ]
}
}, {
"SENSOR": "Wetterstation (WS)",
"PARAMS": {
"hydro": [ ">", 75 ]
}
}
]
},
"ACTION": [
{
"ACTOR": "Fenster (A1)",
"PARAMS": {
16
"state": "closed"
}
}, {
"ACTOR": "Fenster (A2)",
"PARAMS": {
"state": "closed"
}
}, {
"ACTOR": "Heizung (H)",
"PARAMS": {
"target": [ ">=", 20.5 ], "hydro": [ "<", 65 ]
}
}
],
"VDEV": {
"TYPE": "LIST",
"PARAMS": {
"list": "summer"
}
}
}
]
17