Ich denke ich habe eine brauchbare Alternative.
Der Ansatz ist, dass ich einige Items vorab erstelle und diese entsprechend als Speicher missbrauche. Mit Persistence würden die Meldungen auch bei einem Neustart erhalten bleiben.
items
Code: Alles auswählen
Group Messages "Liste aller Meldungen"
String MessageSet "Dummy zum setzen/löschen von Alarmmeldungen"
String Message_1 "" (Messages)
String Message_2 "" (Messages)
String Message_3 "" (Messages)
String Message_4 "" (Messages)
String Message_5 "" (Messages)
String Message_6 "" (Messages)
String Message_7 "" (Messages)
String Message_8 "" (Messages)
String Message_9 "" (Messages)
String Message_10 "" (Messages)
rule
Code: Alles auswählen
rule "Alarm Service"
when
Item MessageSet received command
then
logInfo("Alarm Service", "Trigger ausgelöst")
var NeueMeldungID = MessageSet.state.toString.split(":").get(0)
var NeueMeldungText = MessageSet.state.toString.split(":").get(1)
if ( NeueMeldungID == "Remove") {
if ( NeueMeldungText == "All") {
// Alle Meldungen löschen
Messages.members.forEach [item |
sendCommand(item, "")
]
} else {
// Bestimmte Meldung löschen
Messages.members.forEach [item |
if ( item.state.toString().startsWith(NeueMeldungText + ":") )
{
sendCommand(item, "")
}
]
}
} else {
// Prüfen ob selbe Meldung schon existiert
val TmpExist = false
Messages.members.forEach [item |
if ( item.state.toString() == MessageSet.state.toString() )
{
TmpExist = true
}
]
// Wenn Meldung noch nicht existiert
val TmpBreak = false
if ( TmpExist == false)
{
Messages.members.forEach [item |
if (item.state == NULL || item.state.toString() == "")
{
if ( TmpBreak == false)
{
sendCommand(item, MessageSet.state.toString())
}
TmpBreak = true
}
]
}
}
end
widget
Code: Alles auswählen
<div ng-repeat="item in itemsInGroup('Messages')">
<div ng-if="item.state != ''">{{item.state.split(':')[1]}}</div>
</div>
Den State von "MessageSet" kann ich jetzt wie folgende setzen:
Mit "FensterXYZ:Das Fenster XYZ ist noch offen" füge ich der "Liste" eine Meldung hinzu
Mit "Remove:FensterXYZ" entferne ich es
Mit "Remove:All" lösche ich die komplette Liste
PS: Die Rule wäre schlanker wenn ich auf die Schnelle rausgefunden hätte wie man eine forEach abbricht.