Rule für Item zu aktualisieren

Allgemeine Fragen zum Thema "Smart Home" und Entscheidungshilfen

Moderator: seppy

stargazer
Beiträge: 29
Registriert: 23. Apr 2020 22:38

Rule für Item zu aktualisieren

Beitrag von stargazer »

Hallo,
sorry für die Anfängerfrage.
Ich möchte meinen Receiver in OH einbinden. Dazu hab ich ein Item und eine Rule erstellt
vu.items

Code: Alles auswählen

Switch	VuPower			"Power"				<switch>			(gVu)
String	VuPowerstatus		"Powerstatus [%s]"		<screen>			(gVu)		{http="<[http://root:Passwort@10.10.10.10:80/web/powerstate:3000:REGEX(.*?<e2instandby>(.*?)</e2instandby>.*)]"}
vu.rules

Code: Alles auswählen

rule "VuPower"
    when
        Item VuPower received command
    then
        if(receivedCommand == ON)
            sendHttpGetRequest ("http://root:Passwort@10.10.10.10:80/web/remotecontrol?command=116")
        if(receivedCommand == OFF)
            sendHttpGetRequest ("http://root:Passwort@10.10.10.10:80/web/remotecontrol?command=116")
end
Damit kann ich im BasicUI den Reciver Ein- und Ausschalten. Ebenfalls sehe ich den Powerstatus (false,true).
Mit einer weiteren Rule möchte ich den Status vom Switch "VuPower" ändern auch wenn ich mit der Receiver Fernbedienung schalte.

Code: Alles auswählen

rule "VuPowerstatus"
    when
        Item VuPowerstatus received update
    then
    logInfo("Test", "Test")
        if (VuPowerstatus == "false")
            logInfo("Status Update", "false")
            VuPower.postUpdate(ON)
        if (VuPowerstatus == "true")
            logInfo("Status Update", "true")
            VuPower.postUpdate(OFF)
end
Das Test Log wird geschrieben. Leider funktioniert die "if" Abfrage nicht wie gewünscht um den VuPower.postUpdate abzusetzen.
Im Log erscheint der VuPowerstatus auch versetzt. Liegt es eventuell auch daran das der Wert neu formatiert werden muss, oder ist einfach meine Rule falsch ?

Code: Alles auswählen

2020-05-04 11:15:27.561 [ome.event.ItemCommandEvent] - Item 'VuPower' received command ON
2020-05-04 11:15:27.593 [vent.ItemStateChangedEvent] - VuPower changed from OFF to ON
2020-05-04 11:15:28.432 [vent.ItemStateChangedEvent] - VuPowerstatus changed from 
false	 to 
true	

2020-05-04 11:15:28.432 [INFO ] [.eclipse.smarthome.model.script.Test] - Test

Darkwin101
Beiträge: 424
Registriert: 6. Mär 2019 11:19
Answers: 14

Re: Rule für Item zu aktualisieren

Beitrag von Darkwin101 »

Grundsätzlich muss ein Befehl auch der If Anweisung zugeordnet werden, dies geschieht mit den Doppel Klammern:

Code: Alles auswählen

rule "VuPowerstatus"
    when
        Item VuPowerstatus received update
    then
    logInfo("Test", "Test")
        if (VuPowerstatus == "false"){
            logInfo("Status Update", "false")
            VuPower.postUpdate(ON)}
        if (VuPowerstatus == "true"){
            logInfo("Status Update", "true")
            VuPower.postUpdate(OFF)}
end
Sonst werden alle Befehle einfach nacheinander abgearbeitet.
Das gleiche gilt auch für die erste Regel die du gepostet hast.

stargazer
Beiträge: 29
Registriert: 23. Apr 2020 22:38

Re: Rule für Item zu aktualisieren

Beitrag von stargazer »

vielen Dank.
Im Log sehe ich aber nach wie vor nur den Test.
Kann ich die Abfrage

Code: Alles auswählen

if (VuPowerstatus == "false"){
logInfo("Status Update", "false")
VuPower.postUpdate(ON)}
überhaupt so formulieren?
Wie kann ich mir im Log den Wert von VuPowerstatus anzeigen lassen?

Code: Alles auswählen

logInfo(VuPowerstatus, "Test")
liefert mir die Fehlermeldung im Visual Studio Code "Type mismatch:Cannot convert StringItem to String"

Darkwin101
Beiträge: 424
Registriert: 6. Mär 2019 11:19
Answers: 14

Re: Rule für Item zu aktualisieren

Beitrag von Darkwin101 »

Ah Ja sorry das ganze ist Ja ein Switch also muss es auch VuPowerstatus.state sein

Code: Alles auswählen

rule "VuPowerstatus"
    when
        Item VuPowerstatus received update
    then
    logInfo("Test", "Test")
        if (VuPowerstatus.state == "false"){
            logInfo("Status Update", "false")
            VuPower.postUpdate(ON)}
        if (VuPowerstatus.state == "true"){
            logInfo("Status Update", "true")
            VuPower.postUpdate(OFF)}
end
Bei den Logs kann ich dir nicht Helfen damit kenne ich mich nicht aus das habe ich auch noch nicht so ganz Verstanden

stargazer
Beiträge: 29
Registriert: 23. Apr 2020 22:38

Re: Rule für Item zu aktualisieren

Beitrag von stargazer »

Hab mir zusätzlich zum testen noch eine Kanalabfrage eingebaut.
Hier stimmt auch die Formatierung im Log.

Code: Alles auswählen

2020-05-04 13:20:50.703 [vent.ItemStateChangedEvent] - VuKanal changed from  to Das Erste HD
Wenn ich diese in meiner Rule abfrage funktioniert das ganze auch.

D.h. meine "VuPowerstatus" Abfrage welche diese Einträge ins Log schreibt

Code: Alles auswählen

2020-05-04 13:20:50.648 [vent.ItemStateChangedEvent] - VuPowerstatus changed from 
true	 to 
false	
müsste neu Formatiert werden weil wahrscheinlich Leerzeichen enthalten sind.

Wie kann man das erreichen?

stargazer
Beiträge: 29
Registriert: 23. Apr 2020 22:38

Re: Rule für Item zu aktualisieren

Beitrag von stargazer »

ok, konnte mir jetzt damit behelfen das ich die Sendung Abfrage ob der Reicver an oder aus ist.

Code: Alles auswählen

rule "VuPowerstatus"
    when
        Item VuSendung received update
    then
         if (VuSendung.state != "N/A"){
            VuPower.postUpdate(ON)}
        if (VuSendung.state == "N/A"){
            VuPower.postUpdate(OFF)}
end
Trotzdem wäre der Code interessant der den VuPowerstatus Wert entsprechend zuschneiden kann, bzw. wie ich mir den Item Wert direkt im Log anzeigen lassen kann.

Danke nochmals

Darkwin101
Beiträge: 424
Registriert: 6. Mär 2019 11:19
Answers: 14

Re: Rule für Item zu aktualisieren

Beitrag von Darkwin101 »

Formatierung benötigst du ja nicht wirklich du musst nur Wissen wie viele Leerzeichen enthalten sind und dann abfragen "false ..."
mit den entsprechenden Leerzeichen
Die Punkte habe ich gemacht damit der Editor Hier die Leerzeichen nicht entfernt

stargazer
Beiträge: 29
Registriert: 23. Apr 2020 22:38

Re: Rule für Item zu aktualisieren

Beitrag von stargazer »

ahh, dachte es gibts so eine Art Befehl "StringStripWS" welcher alle Leerzeichen putzt.

Darkwin101
Beiträge: 424
Registriert: 6. Mär 2019 11:19
Answers: 14

Re: Rule für Item zu aktualisieren

Beitrag von Darkwin101 »

Das ist denke ich auch möglich da kann ich dir als Anfänger leider keine Antwort drauf geben da werden sich bestimmt erfahrenere User zu Wort melden

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

Re: Rule für Item zu aktualisieren

Beitrag von udo1toni »

Ich bin etwas irritiert von Deiner ersten Rule. Vielleicht ist das aber nur ein Tippfehler... ON und OFF mit identischem Befehl?

Wenn Du http://root:Passwort@10.10.10.10:80/web/powerstate im Browser eingibst, wie sieht denn die komplette Antwort aus? Vielleicht kannst Du komplett auf Rules verzichten...
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten