Seite 2 von 2

Re: multiple Broadcast Meldungen

Verfasst: 17. Aug 2020 12:57
von udo1toni
Warum Deine Rule nicht so will, wie Du, kann ich Dir auch nicht beantworten. Vermutlich ist das Problem dabei, dass counter zu irgendeinem Zeitpunkt wieder auf 0 gesetzt wird.

Aber ein anderer Ansatz:

Code: Alles auswählen

rule "RenaultZEService Zoe send broadcast if under certain limit"
when
    System started or
    Item RenaultZEServices_Zoe_RemainingRange changed
then
    if(RenaultZEServices_Zoe_Charging.state.toString != "Not charging") {                                                           // falscher Zustand, also Abbruch
        logInfo("RemainingRange","Charging Status ist {}. Deshalb Abbruch!",RenaultZEServices_Zoe_Charging.state)
        return;                                                                                                                     // das Semikolongehört da hin!
    }
    var Number nNewState = 0                                                                                                        // Variable für aktuelle Reichweite
    if(RenaultZEServices_Zoe_RemainingRange.state instanceof Number)                                                                // Falls gültige Zahl im Status
        nNewState = RenaultZEServices_Zoe_RemainingRange.state as Number                                                            // Variable setzen

    var Number nOldState = 100                                                                                                      // Variable für alte Reichweite
    if(previousState instanceof Number)                                                                                             // Falls gültige Zahl
        nOldState = previousState as Number                                                                                         // Variable setzen

    var Number nLevel = 0                                                                                                           // Variable für Level
    if(RenaultZEServices_Zoe_ChargeLevel.state instanceof Number)                                                                   // Falls gültige Zahl
        nLevel = RenaultZEServices_Zoe_ChargeLevel.state as Number                                                                  // Variable setzen

    if(nOldState >= 100 && nNewState < 100) {                                                                                       // Falls Reichweite unter 100 gesunken
        sendBroadcastNotification("Achtung! Restreichweite: " + nNewState.toString +"km Ladestatus: " + nLevel.toString + "%"  )
        logInfo("RemainingRange", "Remaining Range unter 100 km")
    }
    if(nOldState >= 50 && nNewState < 50) {                                                                                         // Falls Reichweite unter 100 gesunken
        sendBroadcastNotification("Kritisch! Restreichweite: " + nNewState.toString +"km Ladestatus: " + nLevel.toString + "%"  )
        logInfo("RemainingRange", "Remaining Range unter 50 km")
    }
end
Man kommt ohne zusätzlichen Counter aus, indem man previousState nutzt. Des ist eine implizite Variable, die bei dem Trigger changed zur Verfügung steht (unabhängig von Persistence!)
Da die Rule auch auf System started triggern soll, muss das berücksichtigt werden. Es könnte z.B. sein, dass die Items noch gar nicht initialisiert sind. previousState ist bei der ersten Wertänderung NULL, hier käme es also sicher zu einem Problem. Mit vorbelegten Variablen wird das Problem umgangen.
Sollten previousState und RemainingRange beide nicht initialisiert sein, werden zwei Notifications geschickt. MAn kann das verhindern, aber vielleicht ist das Verhalten sogar gut? Das dürfte ohnehin nur beim Systemstart der Fall sein (nicht beim Reload der Rule-Datei, obwohl sie dann ebenfalls triggert).

Re: multiple Broadcast Meldungen

Verfasst: 17. Aug 2020 14:46
von shuo
Herzlichen Dank für die Rückmeldung. Dein Ansatz klingt logisch und würde ihn gleich mal anwenden.

Vielen Dank!

Re: multiple Broadcast Meldungen

Verfasst: 25. Sep 2020 16:35
von shuo
Hallo Udo.

Nachdem das Auto jetzt "endlich" mal wieder die Schwellen erreicht hat, dass ernüchternde Ergebnis. Auch mit Deinem Code werden die Meldungen mehrfach verschickt.
benachrichtigungen.PNG

Um 13.38 Uhr freute ich mich, dass nichts mehr gekommen ist, jedoch habe ich dann um 15:02/03 Uhr gleich wieder ein paar Meldungen erhalten. Kannst Du Dir das erklären?

Re: multiple Broadcast Meldungen

Verfasst: 25. Sep 2020 16:40
von sihui
shuo hat geschrieben: 25. Sep 2020 16:35 Nachdem das Auto jetzt "endlich" mal wieder die Schwellen erreicht hat, dass ernüchternde Ergebnis.
> Off topic
ZOE wenn ich das richtig gelesen habe. Unser ist auch unterwegs, 52kWh Akku ...

Re: multiple Broadcast Meldungen

Verfasst: 25. Sep 2020 17:39
von udo1toni
shuo hat geschrieben: 25. Sep 2020 16:35 Hallo Udo.

Nachdem das Auto jetzt "endlich" mal wieder die Schwellen erreicht hat, dass ernüchternde Ergebnis. Auch mit Deinem Code werden die Meldungen mehrfach verschickt.

benachrichtigungen.PNG


Um 13.38 Uhr freute ich mich, dass nichts mehr gekommen ist, jedoch habe ich dann um 15:02/03 Uhr gleich wieder ein paar Meldungen erhalten. Kannst Du Dir das erklären?
Ich nehme mal an, dass RenaultZEServices_Zoe_RemainingRange zwischendurch keinen gültigen Wert liefert.

Re: multiple Broadcast Meldungen

Verfasst: 26. Sep 2020 13:55
von shuo
Das könnte natürlich sein. Die Werte kommen direkt vom Renault - Server. Falls es ein ungülter Wert sein sollte, wie könnte ich das mit einbauen?
Hättest Du einen Vorschlag?

Re: multiple Broadcast Meldungen

Verfasst: 26. Sep 2020 22:12
von udo1toni
Im Zweifel musst Du dann ein Proxy Item dazwischenschalten. Bei Wertänderung überträgt eine Rule den Wert vom Originalitem zum Proxy Item, allerdings unter der Bedingung, dass ein gültiger Wert vorliegt. Das muss die Rule natürlich checken.

Re: multiple Broadcast Meldungen

Verfasst: 28. Sep 2020 08:30
von shuo
Hi Udo, soweit klar.
allerdings unter der Bedingung, dass ein gültiger Wert vorliegt.
Wie soll ich das überprüfen? Sowas wie:

Code: Alles auswählen

rule "proxy"
when
    System started or
    Item RenaultZEServices_Zoe_RemainingRange changed
then
   if(RenaultZEServices_Zoe_RemainingRange.state Instanceof Number) ( proxyValue.sendCommand(RenaultZEServices_Zoe_RemainingRange))

proxyValue würde ich dann der eigentlichen Rule übergeben?

Re: multiple Broadcast Meldungen

Verfasst: 28. Sep 2020 09:37
von udo1toni
Ja, aber: 1. Was willst Du da mit System started? Sobald das Item einen gültigen Wert liefert, triggert die Rule eh.
2. instanceof wird klein geschrieben.
3. Du musst kein sendComnand verwenden, sondern postUpdate.
4. Du musst den state senden, nicht das Item.
5. Die Klammern um das sendCommand sind unnötig.

:)

Gesendet von meinem SM-G973F mit Tapatalk



Re: multiple Broadcast Meldungen

Verfasst: 28. Sep 2020 10:00
von shuo
da waren sie wieder die copy-paste Fehler. Danke Udo!