Timer Rules will nicht schalten. Nur 7 Probleme.

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Benutzeravatar
Detlef
Beiträge: 190
Registriert: 11. Dez 2019 21:50
Answers: 1
Wohnort: Recklinghausen
Kontaktdaten:

Timer Rules will nicht schalten. Nur 7 Probleme.

Beitrag von Detlef »

Hallo
es handelt sich um eine Rollosteuerung die über 433 MHZ läuft. Also ON und Off , Switch.

Eine Sonnenschutz-Schaltung soll später erfolgen. ( "On" und wiederholt" ON " nach für 3 Sekunden, Sekunden je nach länge der Rollos. )

Aber zunächst habe ich hier ein Problem.

Code: Alles auswählen

var Timer tGassi = null
var int iGassi = 0

rule "Alles Runterfahren und absichern zum Gassi gehen"
when 
    Item 	RelaisVentilsteuerung2 changed				//EG_Stairwell_AlarmES received command ON
then
    tGassi?.cancel
    iGassi = 0
    tGassi = createTimer(Now.plusMillis(10), [|
		iGassi ++
		select (iGassi) {

			case 1: Shellyswitch25Bcddc277Ae67192168087Relay2Input.sendCommand(ON) 
			case 2: EG_LivingDining_Kamera.sendCommand(ON)
			case 3: Doris_Bad_Temperatur_Soll_Setpoint.postUpdate(18)
			case 4: EG_Stairwell_Heating.postUpdate(17)
			case 5: OU_Terrace_Light_Wand.sendCommand(ON)
			case 6: OU_Terrace_Light_Garden.sendCommand(ON)
		}
		if((Astro_Sun_Event_SU.state != ON && iGassi < 4) || (Astro_Sun_Event_SU.state == ON && iGassi < 6))
			tGassie.reschedule(now.plusSeconds(3))
	])
end
Habe schon mit verschiedene Items versucht die Rules zum laufen zu bringen. Ich habe da kein Erfolg.
Kann da jemand helfen? Im Log steht nichts?
Im VS sind 7 Fehlermeldungen:mismatched input 'case' expecting 'end'
Mit freundlichen Grüße aus Recklinghausen

EmptySoft
Beiträge: 247
Registriert: 7. Jan 2020 14:45
Answers: 2
Kontaktdaten:

Re: Timer Rules will nicht schalten. Nur 7 Probleme.

Beitrag von EmptySoft »

Nach dem speichern der Rule kommt die Meldung dass sie implementiert wurde?

stimmt tGassi?.cancel, das kenne ich leider nicht (bin aber recht neu.

select oder doch switch?

Code: Alles auswählen

Switch(iGassi) {
    case "1":
BYe
Harald

Tokamak
Beiträge: 183
Registriert: 20. Aug 2019 08:37
Answers: 4
Wohnort: Aachen

Re: Timer Rules will nicht schalten. Nur 7 Probleme.

Beitrag von Tokamak »

@Detlef
Das select() heißt in Java switch()

@EmptySoft
tGassi?.cancel ist die Kurzform für

Code: Alles auswählen

if (tGassi!==null) tGassi.cancel 
Proxmox mit OH 4.2 und HABApp 24 im LXC-Container

Benutzeravatar
Detlef
Beiträge: 190
Registriert: 11. Dez 2019 21:50
Answers: 1
Wohnort: Recklinghausen
Kontaktdaten:

Re: Timer Rules will nicht schalten. Nur 7 Probleme.

Beitrag von Detlef »

Hallo
Danke erst einmal für eure Anteilnahme. Die Rules ist vom Udo und zu mächtig für mich zu verstehen.
Habe eine Änderung vorgenommen und das Problem bleibt weiterhin.

Jetzt habe ich auch im Log eine meldung.
"2020-06-08 19:06:45.974 [WARN ] [el.core.internal.ModelRepositoryImpl] - Configuration model 'Rollostimer.rules' has errors, therefore ignoring it: [14,4]: mismatched input 'case' expecting '}'

[14,10]: mismatched input ':' expecting ']'

[14,12]: missing ')' at 'DB_TV'

[15,4]: mismatched input 'case' expecting 'end'"

Code: Alles auswählen

var Timer tGassi = null
var int iGassi = 0

rule "Alles Runterfahren und absichern zum Gassi gehen"
when 
    Item EG_Stairwell_AlarmES received command ON
then
    tGassi?.cancel
    iGassi = 0
    tGassi = createTimer(Now.plusMillis(10), [|
		iGassi ++
		select (iGassi) {

			case 1: DB_TV.sendCommand(ON) 
			case 2: EG_LivingDining_Kamera.sendCommand(ON)
			case 3: Doris_Bad_Temperatur_Soll_Setpoint.postUpdate(18)
			case 4: EG_Stairwell_Heating.postUpdate(17)
			case 5: OU_Terrace_Light_Wand.sendCommand(ON)
			case 6: OU_Terrace_Light_Garden.sendCommand(ON)
		}
		if((Astro_Sun_Event_SU.state != ON && iGassi < 4) || (Astro_Sun_Event_SU.state == ON && iGassi < 6))
			tGassie.reschedule(now.plusSeconds(3))
	])
end
Mit freundlichen Grüße aus Recklinghausen

Tokamak
Beiträge: 183
Registriert: 20. Aug 2019 08:37
Answers: 4
Wohnort: Aachen

Re: Timer Rules will nicht schalten. Nur 7 Probleme.

Beitrag von Tokamak »

Hallo Detlef,

wir hatten doch geschrieben, dass es kein select() in Java gibt.

Versuche es mal mit

Code: Alles auswählen

var Timer tGassi = null
var int iGassi = 0

rule "Alles Runterfahren und absichern zum Gassi gehen"
when 
    Item EG_Stairwell_AlarmES received command ON
then
    tGassi?.cancel
    iGassi = 0
    tGassi = createTimer(now.plusMillis(10), [|
		iGassi ++
		switch (iGassi) {

			case 1: DB_TV.sendCommand(ON) 
			case 2: EG_LivingDining_Kamera.sendCommand(ON)
			case 3: Doris_Bad_Temperatur_Soll_Setpoint.postUpdate(18)
			case 4: EG_Stairwell_Heating.postUpdate(17)
			case 5: OU_Terrace_Light_Wand.sendCommand(ON)
			case 6: OU_Terrace_Light_Garden.sendCommand(ON)
		}
		if((Astro_Sun_Event_SU.state != ON && iGassi < 4) || (Astro_Sun_Event_SU.state == ON && iGassi < 6))
			tGassie.reschedule(now.plusSeconds(3))
	])
end
Die Rule ist an sich relativ einfach. Wird EG_Stairwell_AlarmES ausgelöst, wird ein Timer gestartet, der nacheinander im 3-Sekunden-Abstand vier Befehle absetzt.
Im Falle, wenn die Sonne bereits unergegangen ist, werden zusätzlich Lichter auf der Terrasse eingeschaltet.

Zugegeben, das ist ein wenig verklausuliert. Udo schreibt diese Art von Timern, die sich mehrfach selbst durchlaufen, gerne :)
Proxmox mit OH 4.2 und HABApp 24 im LXC-Container

Benutzeravatar
Detlef
Beiträge: 190
Registriert: 11. Dez 2019 21:50
Answers: 1
Wohnort: Recklinghausen
Kontaktdaten:

Re: Timer Rules will nicht schalten. Nur 7 Probleme.

Beitrag von Detlef »

Hallo
man, habe ich doch verstanden selekt ist switch und alles ist richtig.
Deine neue Formel sieht gut aus.
Ein Fehler wird in VS noch angezeigt.
tGassie.reschedule(now.plusSeconds(3)) ist noch "undefiniert"

Aber das eine Problem sollte sich gleich lösen, wenn Astro schaltet.

ich werde warten und testen.

Schade das ich kein Informatik Studiert habe. Dan würde ich das auch besser können.
Danke für deine Rückmeldung.
Mit freundlichen Grüße aus Recklinghausen

EmptySoft
Beiträge: 247
Registriert: 7. Jan 2020 14:45
Answers: 2
Kontaktdaten:

Re: Timer Rules will nicht schalten. Nur 7 Probleme.

Beitrag von EmptySoft »

Habe auch nicht Informtik studiert. Lesen, probieren, Logfiles lesen, googeln, fragen und es wird :) (achja, dazwischen ärgern, weil ich Java hasse)
BYe
Harald

Benutzeravatar
Detlef
Beiträge: 190
Registriert: 11. Dez 2019 21:50
Answers: 1
Wohnort: Recklinghausen
Kontaktdaten:

Re: Timer Rules will nicht schalten. Nur 7 Probleme.

Beitrag von Detlef »

Super es funktioniert!!!!

War ein Schreibfehler in der Rules vom Harald! In der letzten Zeile Gassi nicht Gassie.

Code: Alles auswählen

var Timer tGassi = null
var int iGassi = 0

rule "Alles Runterfahren und absichern zum Gassi gehen"
when 
    Item EG_Stairwell_AlarmES received command ON
then
    tGassi?.cancel
    iGassi = 0
    tGassi = createTimer(now.plusMillis(10), [|
		iGassi ++
		switch (iGassi) {

			case 1: DB_TV.sendCommand(ON) 
			case 2: EG_LivingDining_Kamera.sendCommand(ON)
			case 3: Doris_Bad_Temperatur_Soll_Setpoint.postUpdate(14)
			case 4: EG_Stairwell_Heating.postUpdate(14)
			case 5: OU_Terrace_Light_Wand.sendCommand(ON)
			case 6: OU_Terrace_Light_Garden.sendCommand(ON)
		}
		if((Astro_Sun_Event_SU.state != ON && iGassi < 4) || (Astro_Sun_Event_SU.state == ON && iGassi < 6))
			tGassi.reschedule(now.plusSeconds(3))
	])
end
Kann ja mal für passieren ne!
Hier nochmal das perfekte Ergebnis. Nicht "Studiert" aber" Perfekt".
Mit freundlichen Grüße aus Recklinghausen

Antworten