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.

Code: Alles auswählen

gOnlineMonitor.members.filter[i | i.state==OFF ])
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
:D 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!