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
© Copyright 2024 ExpyDoc