Seite 3 von 3
Re: Notification senden mit Item Inhalt
Verfasst: 3. Jan 2021 23:24
von udo1toni
Das ist der erste Schritt. Du willst ja vermutlich eine Liste aller Geräte, die Offline sind.
liefert eine Liste von Items. Du möchtest aber einen String, der die Namen der Items dieser Liste enthält. Eine mögliche Variante:
Code: Alles auswählen
var strOffline = new Stringbuilder
gOnlineMonitor.members.filter[i | i.state==OFF ]).forEach[j|
strOffline.append(j.state + " ")
]
logInfo("liste","Die Liste enthält {}",strOffline.toString)
Re: Notification senden mit Item Inhalt
Verfasst: 4. Jan 2021 12:51
von lenschith
Ich habe das so umgebaut, bekomme aber immer noch die selbe Notification und im Log kann ich keine Einträge sehen. Wo habe ich da einen Fehler?
Oder habe ich dich falsch verstanden?
Code: Alles auswählen
var strOffline = new Stringbuilder
rule "Notification LAN "
when
Item gOnlineMonitor changed from ON to OFF or
Item Dummy changed to ON
then
if (notificationName_LAN.state == ON) {
sendNotification('name@domain.de', "Netzwerkkomponente ausgefallen " + gOnlineMonitor.members.filter[i | i.state==OFF ]).forEach[j | strOffline.append(j.state + " ")
]
logInfo("liste","Die Liste enthält {}",strOffline.toString)
}
Re: Notification senden mit Item Inhalt
Verfasst: 4. Jan 2021 20:14
von udo1toni
Nein, so geht das nicht...
Eher so:
Code: Alles auswählen
var strOffline = new Stringbuilder
rule "Notification LAN "
when
Member of gOnlineMonitor changed to OFF or // einer der Member hat nach OFF gewechselt
Item Dummy changed to ON
then
val strOffline = new Stringbuilder // Ein Stringbuilder Objekt
val offline = gOnlineMonitor.members.filter[i | i.state==OFF ]) // die Liste der Items, die offline sind
strOffline.append("Netzwerkkomponente") // Erster Teil der Meldung (Einzahl ohne Leerzeichen!)
if(offline.size == 1) // genau ein Item
strOffline.append(" " + offline.head.name + " ") // also Namen mit Leerzeichen einfügen
else // mehr als ein Item offline
strOffline.append("n ") // Mehrzahl anhängen plus Leerzeichen
offline.forEach[j,k | // für jedes Element der Itemliste
strOffline.append(j.name) // hänge den Namen des Items an
if(k < offline.size - 1) // falls noch mehr als ein weiteres Element auf der Liste
strOffline.append(", ") // hänge ein Komma mit Leerzeichen an
else // falls vorletztes Element der Liste
strOffline.append(" und ") // hänge " und " an
]
strOffline.append("ausgefallen!") // ergänze Rest der Meldung.
if(notificationName_LAN.state == ON) // falls Notification an
sendNotification('name@domain.de', strOffline.toString) // sende den Notification String
end
Ich habe das mal ausführlich inline kommentiert. Falls mehr als ein "und" ausgegeben wird, muss das -1 weg, ich bin mir nicht sicher, ob k null-basiert ist.
Re: Notification senden mit Item Inhalt
Verfasst: 4. Jan 2021 21:10
von lenschith
Wow, so elegant hätte ich das nie hinbekommen:) echt super.
StringBuilder musste noch ausgebessert werden damit es klappt.
Jetzt bekomme ich folgende Nachricht. Es ist ein Gerät Offline.
Netzwerkkomponente Dokuwiki Dokuwiki und ausgefallen!
bzw. wenn ich die - 1 lösche
Netzwerkkomponente Dokuwiki Dokuwiki, ausgefallen!
Also kommt das Item quasi zweimal, es ist aber nur ein Gerät in der Gruppe auf OFF
Re: Notification senden mit Item Inhalt
Verfasst: 4. Jan 2021 21:25
von udo1toni
Oh. Ja, Klammern vergessen...
Code: Alles auswählen
var strOffline = new Stringbuilder
rule "Notification LAN "
when
Member of gOnlineMonitor changed to OFF or // einer der Member hat nach OFF gewechselt
Item Dummy changed to ON
then
val strOffline = new StringBuilder // Ein Stringbuilder Objekt
val offline = gOnlineMonitor.members.filter[i | i.state==OFF ]) // die Liste der Items, die offline sind
strOffline.append("Netzwerkkomponente") // Erster Teil der Meldung (Einzahl ohne Leerzeichen!)
if(offline.size == 1) // genau ein Item
strOffline.append(" " + offline.head.name + " ") // also Namen mit Leerzeichen einfügen
else { // mehr als ein Item offline
strOffline.append("n ") // Mehrzahl anhängen plus Leerzeichen
offline.forEach[j,k | // für jedes Element der Itemliste
strOffline.append(j.name) // hänge den Namen des Items an
if(k < offline.size - 1) // falls noch mehr als ein weiteres Element auf der Liste
strOffline.append(", ") // hänge ein Komma mit Leerzeichen an
else // falls vorletztes Element der Liste
strOffline.append(" und ") // hänge " und " an
]
}
strOffline.append("ausgefallen!") // ergänze Rest der Meldung.
if(notificationName_LAN.state == ON) // falls Notification an
sendNotification('name@domain.de', strOffline.toString) // sende den Notification String
end
Re: Notification senden mit Item Inhalt
Verfasst: 4. Jan 2021 21:34
von lenschith

Super Vielen Dank.
Hätte ich ohne dich nie geschafft. Danke das du mich hier so unterstützt.
Grüße aus Bayern.
Lenschi
Re: Notification senden mit Item Inhalt
Verfasst: 4. Jan 2021 22:24
von udo1toni
Immer gerne!