Ich denke wenn man tief in Java, xtext usw. drin ist, dann kennt man viele Sachen so wie z.B. Lambdas
Thomas
Thomas
<mapping name="WindowStatus2w"> <entry value="0" default="true"> <icon flavour="white" name="fts_window_2w"/> </entry> <entry value="1"> <icon flavour="white" name="fts_window_2w_tilt_l"/> </entry> <entry value="3"> <icon flavour="white" name="fts_window_2w_open_l"/> </entry> <entry value="4"> <icon flavour="white" name="fts_window_2w_tilt_r"/> </entry> <entry value="5"> <icon flavour="white" name="fts_window_2w_tilt_lr"/> </entry> <entry value="7"> <icon flavour="white" name="fts_window_2w_open_l_tilt_r"/> </entry> <entry value="12"> <icon flavour="white" name="fts_window_2w_open_r"/> </entry> <entry value="13"> <icon flavour="white" name="fts_window_2w_tilt_l_open_r"/> </entry> <entry value="15"> <icon flavour="white" name="fts_window_2w_open_lr"/> </entry> </mapping>
/** * Calculate the current state of a double window. * * @param ContactItem cItemTopLeft * Sensor top left. * @param ContactItem cItemBottomLeft * Sensor bottom left. * @param ContactItem cItemTopRight * Sensor top right. * @param ContactItem cItemBottomRight * Sensor bottom right. * * @return Number * Current state of window. */ val org.eclipse.xtext.xbase.lib.Functions$Function4 calculateWindowStateDouble = [ ContactItem cItemTopLeft, ContactItem cItemBottomLeft, ContactItem cItemTopRight, ContactItem cItemBottomRight | var int nState = 0 if (cItemTopLeft.state == CLOSED) { // Left window is tilted. nState = nState + 1 } if (cItemBottomLeft.state == CLOSED) { // Left window is open. nState = nState + 2 } if (cItemTopRight.state == CLOSED) { // Right window is tilted. nState = nState + 4 } if (cItemBottomRight.state == CLOSED) { // Right window is open. nState = nState + 8 } // Return state. return nState ] /** * Convert data of window contacts WindowBedroom1. */ rule "window contacts FF_Bedroom_1" when Item Window_FF_Bedroom_1 received update then logInfo("rules.window.contacts", "Window contacts [FF_Bedroom_1] received update") var int sum = 0 try { sum = calculateWindowStateDouble.apply(Window_FF_Bedroom_1_TL, Window_FF_Bedroom_1_BL, Window_FF_Bedroom_1_TR, Window_FF_Bedroom_1_BR) as Integer } catch (Exception e) { logInfo("rules.window.contacts", "Couldn't calculate state of window contacts [FF_Bedroom_1]") logDebug("rules.window.contacts", "Error: " + e.toString) } logInfo("rules.window.contacts", "state of WindowBedroom1: " + sum) WindowBedroom1.postUpdate(sum) end
[COLOR=#000]gFenster[/COLOR][COLOR=#660].[/COLOR][COLOR=#000]members[/COLOR][COLOR=#660].[/COLOR][COLOR=#000]filter[/COLOR][COLOR=#660]([/COLOR][COLOR=#000]s[/COLOR][COLOR=#660]|[/COLOR][COLOR=#000]s[/COLOR][COLOR=#660].[/COLOR][COLOR=#000]state[/COLOR][COLOR=#660]==[/COLOR][COLOR=#000]OPEN[/COLOR][COLOR=#660]).[/COLOR][COLOR=#000]size[/COLOR]
[COLOR=#c586c0]rule[/COLOR][COLOR=#ce9178]"Fensterkontakte State Changed"[/COLOR] [COLOR=#c586c0]when[/COLOR] [COLOR=#569cd6]Item[/COLOR][COLOR=#d4d4d4] gFensterkontakte received update [/COLOR][COLOR=#608b4e]// NOTE: the rule will trigger multiple times per event[/COLOR] [COLOR=#c586c0]then[/COLOR] [COLOR=#4ec9b0]Thread[/COLOR][COLOR=#c586c0]::[/COLOR][COLOR=#d4d4d4]sleep([/COLOR][COLOR=#b5cea8]500[/COLOR][COLOR=#d4d4d4]) [/COLOR][COLOR=#608b4e]// give persistence time to catch up[/COLOR] [COLOR=#569cd6]val[/COLOR][COLOR=#d4d4d4] haveHistory [/COLOR][COLOR=#d4d4d4]=[/COLOR][COLOR=#d4d4d4] gFensterkontakte[/COLOR][COLOR=#d4d4d4].[/COLOR][COLOR=#d4d4d4]members[/COLOR][COLOR=#d4d4d4].[/COLOR][COLOR=#d4d4d4]filter[c|c[/COLOR][COLOR=#d4d4d4].[/COLOR][COLOR=#d4d4d4]lastUpdate([/COLOR][COLOR=#ce9178]"mapdb"[/COLOR][COLOR=#d4d4d4]) [/COLOR][COLOR=#d4d4d4]!==[/COLOR][COLOR=#569cd6]null[/COLOR][COLOR=#d4d4d4]][/COLOR] [COLOR=#569cd6]val[/COLOR][COLOR=#d4d4d4] mostRecent [/COLOR][COLOR=#d4d4d4]=[/COLOR][COLOR=#d4d4d4] haveHistory[/COLOR][COLOR=#d4d4d4].[/COLOR][COLOR=#d4d4d4]sortBy[lastUpdate([/COLOR][COLOR=#ce9178]"mapdb"[/COLOR][COLOR=#d4d4d4])][/COLOR][COLOR=#d4d4d4].[/COLOR][COLOR=#d4d4d4]last[/COLOR] [COLOR=#c586c0]if[/COLOR][COLOR=#d4d4d4](mostRecent [/COLOR][COLOR=#d4d4d4]===[/COLOR][COLOR=#569cd6]null[/COLOR][COLOR=#d4d4d4]) logError([/COLOR][COLOR=#ce9178]"Test contacts"[/COLOR][COLOR=#d4d4d4], [/COLOR][COLOR=#ce9178]"Failed to find most recent"[/COLOR][COLOR=#d4d4d4])[/COLOR] [COLOR=#c586c0]else[/COLOR][COLOR=#c586c0]if[/COLOR][COLOR=#d4d4d4](mostRecent[/COLOR][COLOR=#d4d4d4].[/COLOR][COLOR=#d4d4d4]state [/COLOR][COLOR=#d4d4d4]==[/COLOR][COLOR=#b5cea8]OPEN[/COLOR][COLOR=#d4d4d4]){[/COLOR] [COLOR=#569cd6]val[/COLOR][COLOR=#d4d4d4] dt [/COLOR][COLOR=#d4d4d4]=[/COLOR][COLOR=#d4d4d4] gKontakteZeit[/COLOR][COLOR=#d4d4d4].[/COLOR][COLOR=#d4d4d4]members[/COLOR][COLOR=#d4d4d4].[/COLOR][COLOR=#d4d4d4]filter[dt|dt[/COLOR][COLOR=#d4d4d4].[/COLOR][COLOR=#d4d4d4]name [/COLOR][COLOR=#d4d4d4]==[/COLOR][COLOR=#d4d4d4] mostRecent[/COLOR][COLOR=#d4d4d4].[/COLOR][COLOR=#d4d4d4]name[/COLOR][COLOR=#d4d4d4]+[/COLOR][COLOR=#ce9178]"_last_opened"[/COLOR][COLOR=#d4d4d4]][/COLOR][COLOR=#d4d4d4].[/COLOR][COLOR=#d4d4d4]head[/COLOR] [COLOR=#c586c0]if[/COLOR][COLOR=#d4d4d4](dt [/COLOR][COLOR=#d4d4d4]===[/COLOR][COLOR=#569cd6]null[/COLOR][COLOR=#d4d4d4]) logError([/COLOR][COLOR=#ce9178]"Test contacts"[/COLOR][COLOR=#d4d4d4], [/COLOR][COLOR=#ce9178]"Failed to find "[/COLOR][COLOR=#d4d4d4]+[/COLOR][COLOR=#d4d4d4] mostRecent[/COLOR][COLOR=#d4d4d4].[/COLOR][COLOR=#d4d4d4]name[/COLOR][COLOR=#d4d4d4]+[/COLOR][COLOR=#ce9178]"_last_opened"[/COLOR][COLOR=#d4d4d4])[/COLOR] [COLOR=#c586c0]else[/COLOR][COLOR=#d4d4d4] dt[/COLOR][COLOR=#d4d4d4].[/COLOR][COLOR=#d4d4d4]postUpdate([/COLOR][COLOR=#569cd6]new[/COLOR][COLOR=#4ec9b0]DateTimeType[/COLOR][COLOR=#d4d4d4])[/COLOR] [COLOR=#d4d4d4] }[/COLOR] [COLOR=#c586c0]end[/COLOR]
[COLOR=#c586c0]rule[/COLOR][COLOR=#ce9178]"Test rule"[/COLOR] [COLOR=#c586c0]when[/COLOR] [COLOR=#569cd6]Item[/COLOR][COLOR=#d4d4d4] gFenster received update [/COLOR][COLOR=#608b4e]// NOTE: the rule will trigger multiple times per event[/COLOR] [COLOR=#c586c0]then[/COLOR] [COLOR=#4ec9b0]Thread[/COLOR][COLOR=#c586c0]::[/COLOR][COLOR=#d4d4d4]sleep([/COLOR][COLOR=#b5cea8]500[/COLOR][COLOR=#d4d4d4]) [/COLOR][COLOR=#608b4e]// give persistence time to catch up[/COLOR] [COLOR=#569cd6]val[/COLOR][COLOR=#d4d4d4] AnzahlFenster [/COLOR][COLOR=#d4d4d4]=[/COLOR] [COLOR=#000]gFenster[/COLOR][COLOR=#660].[/COLOR][COLOR=#000]members[/COLOR][COLOR=#660].[/COLOR][COLOR=#000]filter[/COLOR][COLOR=#660]([/COLOR][COLOR=#000]s[/COLOR][COLOR=#660]|[/COLOR][COLOR=#000]s[/COLOR][COLOR=#660].[/COLOR][COLOR=#000]state[/COLOR][COLOR=#660]==[/COLOR][COLOR=#000]OPEN[/COLOR][COLOR=#660]).[/COLOR][COLOR=#000]size[/COLOR] Summe_offene_Fenster_Item[COLOR=#d4d4d4].[/COLOR][COLOR=#d4d4d4]postUpdate([/COLOR][COLOR=#569cd6]AnzahlFenster[/COLOR][COLOR=#d4d4d4])[/COLOR] [COLOR=#c586c0]end[/COLOR]
Wir verarbeiten personenbezogene Daten über die Nutzer unserer Website mithilfe von Cookies und anderen Technologien, um unsere Dienste bereitzustellen. Weitere Informationen findest Du in unserer Datenschutzerklärung.
Indem Du unten auf "ICH stimme zu" klickst, stimmst Du unserer Datenschutzerklärung und unseren persönlichen Datenverarbeitungs- und Cookie-Praktiken zu, wie darin beschrieben. Du erkennst außerdem an, dass dieses Forum möglicherweise außerhalb Deines Landes gehostet wird und bist damit einverstanden, dass Deine Daten in dem Land, in dem dieses Forum gehostet wird, gesammelt, gespeichert und verarbeitet werden.
Kommentar