Notification senden mit Item Inhalt

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Benutzeravatar
udo1toni
Beiträge: 15265
Registriert: 11. Apr 2018 18:05
Answers: 245
Wohnort: Darmstadt

Re: Notification senden mit Item Inhalt

Beitrag 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)
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Benutzeravatar
lenschith
Beiträge: 314
Registriert: 11. Dez 2020 22:36
Answers: 0

Re: Notification senden mit Item Inhalt

Beitrag 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)
    } 
openHAB4.3.3 in einem Docker Container auf RPI5-8GB, AVM: Fritz!Box 7590 - SMART301/302 - Comet, SMART200/210, SMART440, Alexa, Shelly, Tasmota, ESP Easy, WLED

Benutzeravatar
udo1toni
Beiträge: 15265
Registriert: 11. Apr 2018 18:05
Answers: 245
Wohnort: Darmstadt

Re: Notification senden mit Item Inhalt

Beitrag 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.
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Benutzeravatar
lenschith
Beiträge: 314
Registriert: 11. Dez 2020 22:36
Answers: 0

Re: Notification senden mit Item Inhalt

Beitrag 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
openHAB4.3.3 in einem Docker Container auf RPI5-8GB, AVM: Fritz!Box 7590 - SMART301/302 - Comet, SMART200/210, SMART440, Alexa, Shelly, Tasmota, ESP Easy, WLED

Benutzeravatar
udo1toni
Beiträge: 15265
Registriert: 11. Apr 2018 18:05
Answers: 245
Wohnort: Darmstadt

Re: Notification senden mit Item Inhalt

Beitrag 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
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Benutzeravatar
lenschith
Beiträge: 314
Registriert: 11. Dez 2020 22:36
Answers: 0

Re: Notification senden mit Item Inhalt

Beitrag 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
openHAB4.3.3 in einem Docker Container auf RPI5-8GB, AVM: Fritz!Box 7590 - SMART301/302 - Comet, SMART200/210, SMART440, Alexa, Shelly, Tasmota, ESP Easy, WLED

Benutzeravatar
udo1toni
Beiträge: 15265
Registriert: 11. Apr 2018 18:05
Answers: 245
Wohnort: Darmstadt

Re: Notification senden mit Item Inhalt

Beitrag von udo1toni »

Immer gerne!
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Antworten