Java Error in Presence Simulation

Für welche Projekte verwendet Ihr OpenHAB? Was habt Ihr automatisiert? Stellt eure Projekte hier vor.

Moderatoren: Cyrelian, seppy

int5749
Beiträge: 1161
Registriert: 4. Nov 2019 22:08
Answers: 9

Re: Java Error in Presence Simulation

Beitrag von int5749 »

Ich bin dem Fehler einen Schritt weiter auf die Schliche gekommen. Scheinbar habe ich mir den Fehler mit dem Einbau einer Dimmers eingefangen :oops:

Alle anderen Lampen haben "ON" oder "OFF", der Dimmer "0" oder "100".
Sobald ich den Dimmer aus der Gruppe der Anwesendheitssimulation entferne, läuft diese wieder.

Jetzt muss ich mal gucken, wie ich dem Dimmer "ON"/"OFF" sende :roll:

Viele Grüße
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

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

Re: Java Error in Presence Simulation

Beitrag von udo1toni »

Ah. Ja, das erklärt es. Du kannst zwei Dinge ausprobieren.
Es gibt die Methode .getStateAs(), ich bin mit nicht sicher, ob diese auch für HistoricItems zur Verfügung steht, aber mehr als eine Fehlermeldung kann ja nicht auftreten, also .getStateAs(OnOffType) sollte immer ON oder OFF liefern.
Sollte das nicht gehen, kannst Du nach ItemType filtern:

Code: Alles auswählen

...filter[i|i instanceof DimmerItem].filter[...]
und so in zwei voneinander getrennten Arbeitsschritten ON/OFF und 0/100 gezielt verarbeiten.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

int5749
Beiträge: 1161
Registriert: 4. Nov 2019 22:08
Answers: 9

Re: Java Error in Presence Simulation

Beitrag von int5749 »

udo1toni hat geschrieben: 3. Okt 2023 22:23 Es gibt die Methode .getStateAs(), ich bin mit nicht sicher, ob diese auch für HistoricItems zur Verfügung steht, aber mehr als eine Fehlermeldung kann ja nicht auftreten, also .getStateAs(OnOffType) sollte immer ON oder OFF liefern.
Script execution of rule with UID 'ki-7' failed: 'getStateAs' is not a member of 'org.openhab.core.persistence.HistoricItem'; line 187, column 49, length 50 in ki
Somit werde ich morgen mal den 2. Weg probieren.

Danke schon mal, ich werde berichten ;)
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

int5749
Beiträge: 1161
Registriert: 4. Nov 2019 22:08
Answers: 9

Re: Java Error in Presence Simulation

Beitrag von int5749 »

udo1toni hat geschrieben: 3. Okt 2023 22:23

Code: Alles auswählen

...filter[i|i instanceof DimmerItem].filter[...]
Wenn ich das wie folgt umsetze

Code: Alles auswählen

    gLights_auto.members.filter[ f | f.state instanceof SwitchItem != f.historicState(past,"jdbc").state ].forEach[ m |
          logInfo("presence","Restore {} to historic state!",m.name)

            val actions = getActions("pushover", "pushover:pushover-account:account")
            val oldValue = m.historicState(past,"jdbc").state
            m.sendCommand(oldValue.toString)
            logInfo("presence","Restore {} to historic state: {}",m.name, oldValue)
ist zwar der Fehler weg, leider wir jedes mal der Wert gesetzt auch wenn der Wert "ON oder OFF" eigentlich korrekt ist :/

Scheinbar habe ich da noch einen Fehler, auch wenn die Regel bzw. Log nichts an Fehler ausgibt.

Viele Grüße
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

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

Re: Java Error in Presence Simulation

Beitrag von udo1toni »

Also abgesehen davon, dass der Filter nicht sinnvoll ist, meinte ich eigentlich, dass Du zwei Schleifen baust, eine, die sich um die Switch Items kümmert, und eine zweite, die sich um die Dimmer kümmert.

Allerdings ergibt das auch keinen Sinn, die Anweisungen sollten eigentlich unabhängig vom Datentyp funktionieren. Allerdings kann es sein, dass einzelne historicItems weder ON, OFF noch einen Zahlwert liefern, das könnte den Code viel eher ins Straucheln bringen.

Code: Alles auswählen

class java.lang.String cannot be cast to class java.lang.Integer
ist auch etwas seltsam, denn es gibt überhaupt kein Casting nach Number, jedenfalls nicht im gezeigten Snippet.
Kannst Du die Rule noch mal komplett zeigen?
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

int5749
Beiträge: 1161
Registriert: 4. Nov 2019 22:08
Answers: 9

Re: Java Error in Presence Simulation

Beitrag von int5749 »

udo1toni hat geschrieben: 4. Okt 2023 18:06 Kannst Du die Rule noch mal komplett zeigen?
Sehr gerne, die folgende Zeile habe ich noch neu angepasst

Code: Alles auswählen

gLights_auto.members.filter[ f | f instanceof SwitchItem && f.state != f.historicState(past,"jdbc").state ].forEach[ m |

Code: Alles auswählen

rule "Presence Simulator"
when
	Time cron "0 */1 * * * ?"
then
    if(Absence.state != ON)                                                      // Hauptschalter aus?
        return;                                                                  // dann Abbruch

    logInfo("Presence","START RULE")
    val past = now.minusDays(7)                                                  // jetzt vor sieben Tagen
    logInfo("Presence","Datum: {}", past)
	val oldValue = Lampe_OG_Schlafz_Decke.historicState(past,"jdbc").state
    logInfo("Presence","oldValue: {}", oldValue)

    gLights_auto.members.filter[ f | f instanceof SwitchItem && f.state != f.historicState(past,"jdbc").state ].forEach[ m |
          logInfo("presence","Restore {} to historic state!",m.name)

            val actions = getActions("pushover", "pushover:pushover-account:account")
            val oldValue = m.historicState(past,"jdbc").state
            m.sendCommand(oldValue.toString)
            logInfo("presence","Restore {} to historic state: {}",m.name, oldValue)
            actions.sendMessageToDevice("J", "Restore " + m.name + " to historic state: " + oldValue.toString, "Presence Simulation")
    ]
end
Da führt nun dazu, das die Rule ohne Probleme läuft, wenn etwas geschaltet wird, hier habe ich mal 2 Lampen eingeachaltet gehabt die vor 7 Tagen aus waren.
18:19:00.574 [INFO ] [rg.openhab.core.model.script.Presence] - START RULE
18:19:00.575 [INFO ] [rg.openhab.core.model.script.Presence] - Datum: 2023-09-27T18:19:00.575511666+02:00[Europe/Berlin]

18:19:00.582 [INFO ] [rg.openhab.core.model.script.presence] - Restore Lampe_EG_Deko_Wand to historic state!
18:19:00.584 [INFO ] [openhab.event.ItemCommandEvent ] - Item 'Lampe_EG_Deko_Wand' received command OFF
18:19:00.584 [INFO ] [rg.openhab.core.model.script.presence] - Restore Lampe_EG_Deko_Wand to historic state: OFF
18:19:00.587 [INFO ] [openhab.event.ItemStatePredictedEvent] - Item 'Lampe_EG_Deko_Wand' predicted to become OFF
18:19:00.589 [INFO ] [openhab.event.ItemStateUpdatedEvent ] - Item 'Lampe_EG_Deko_Wand' updated to OFF
18:19:00.590 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Lampe_EG_Deko_Wand' changed from ON to OFF
18:19:00.591 [INFO ] [openhab.event.GroupStateUpdatedEvent ] - Group 'Lampen' updated to ON through Lampe_EG_Deko_Wand
18:19:00.661 [INFO ] [openhab.event.ItemStateUpdatedEvent ] - Item 'Lampe_EG_Deko_Wand' updated to OFF
18:19:00.662 [INFO ] [openhab.event.GroupStateUpdatedEvent ] - Group 'Lampen' updated to ON through Lampe_EG_Deko_Wand

18:19:00.708 [INFO ] [rg.openhab.core.model.script.presence] - Restore Lampe_EG_Deko_Decke to historic state!
18:19:00.710 [INFO ] [openhab.event.ItemCommandEvent ] - Item 'Lampe_EG_Deko_Decke' received command OFF
18:19:00.711 [INFO ] [rg.openhab.core.model.script.presence] - Restore Lampe_EG_Deko_Decke to historic state: OFF
18:19:00.714 [INFO ] [openhab.event.ItemStatePredictedEvent] - Item 'Lampe_EG_Deko_Decke' predicted to become OFF
18:19:00.715 [INFO ] [openhab.event.ItemStateUpdatedEvent ] - Item 'Lampe_EG_Deko_Decke' updated to OFF
18:19:00.716 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Lampe_EG_Deko_Decke' changed from ON to OFF
18:19:00.717 [INFO ] [openhab.event.GroupStateUpdatedEvent ] - Group 'Lampen' updated to ON through Lampe_EG_Deko_Decke
18:19:00.780 [INFO ] [openhab.event.ItemStateUpdatedEvent ] - Item 'Lampe_EG_Deko_Decke' updated to OFF
18:19:00.781 [INFO ] [openhab.event.GroupStateUpdatedEvent ] - Group 'Lampen' updated to ON through Lampe_EG_Deko_Decke
18:19:00.801 [INFO ] [openhab.event.ItemStateUpdatedEvent ] - Item 'Lampe_EG_Deko_Decke' updated to OFF
18:19:00.801 [INFO ] [openhab.event.GroupStateUpdatedEvent ] - Group 'Lampen' updated to ON through Lampe_EG_Deko_Decke
Jedoch wird weiterhin ein Fehler angezeigt, wenn nichts geschaltet wird :roll:
18:20:00.574 [INFO ] [rg.openhab.core.model.script.Presence] - START RULE
18:20:00.576 [INFO ] [rg.openhab.core.model.script.Presence] - Datum: 2023-09-27T18:20:00.575863283+02:00[Europe/Berlin]
18:20:00.585 [ERROR] [.internal.handler.ScriptActionHandler] - Script execution of rule with UID 'ki-7' failed: class java.lang.String cannot be cast to class java.lang.Integer (java.lang.String and java.lang.Integer are in module java.base of loader 'bootstrap') in ki
Seltsam für mich.
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

int5749
Beiträge: 1161
Registriert: 4. Nov 2019 22:08
Answers: 9

Re: Java Error in Presence Simulation

Beitrag von int5749 »

udo1toni hat geschrieben: 4. Okt 2023 18:06 Also abgesehen davon, dass der Filter nicht sinnvoll ist, meinte ich eigentlich, dass Du zwei Schleifen baust, eine, die sich um die Switch Items kümmert, und eine zweite, die sich um die Dimmer kümmert.
Nachtrag: Das hatte ich schon so weit verstanden ;) wollte aber erst einmal eine Schleife ans laufen bekommen, bevor ich die zweite für das Dimmer Item hinzufüge. Dort dran war ich dann ja schon gescheitert :(

Viele Grüße
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

Antworten