Seite 1 von 1

2 Regeln in einer xxx.rules Datei funktionieren nicht

Verfasst: 12. Apr 2020 11:31
von Joe
Hallo zusammen,
hat jemand ein Idee warum die erste Regel "Brunnenschalter_on" nicht funktioniert, wenn ich diese in Verbindung mit der zweiten Regel "Wechselschalter_Aussentemperatur_Brunnen2" innerhalb einer "xxx.rules" Datei habe? :?:
Wenn ich die erste Regel in eine extra xxx.rules Datei packe funktioniert diese ohne Probleme. :?

Code: Alles auswählen

rule "Brunnenschalter_on" 
  when 
    Time cron "0 22 11 ? * *"         
  then
	  Brunnenschalter.sendCommand(ON) //Brunnenschalter On
      sendTelegram("bot1", "Brunnenschalter - " + Brunnenschalter.state.toString())
end 

val aTemp = Temperature.state as Number
rule "Wechselschalter_Aussentemperatur_Brunnen2"
  when
    Item Temperature changed //wenn Außentemperatur sich ändert dann
  then
		if (aTemp <= 15.00){
		SonoffT1.sendCommand(OFF)
        //sendTelegram("bot1", "Temperatur im Garten beträgt: " + Temperature.state.toString())
		}else if (aTemp > 16.00){
		SonoffT1.sendCommand(ON)
        //sendTelegram("bot1", "Temperatur im Garten beträgt: " + Temperature.state.toString())
		}
end
Frohe Ostern und schon mal Danke für die Hilfe

Re: 2 Regeln in einer xxx.rules Datei funktionieren nicht

Verfasst: 12. Apr 2020 11:36
von Darkwin101
Das einzige was mir auffällt ist das Var/Val am Anfang oder innerhalb der Regeln deklariert werden das würde ich mal ausprobieren in dem ich das val innerhalb des then Teils setzt.

Re: 2 Regeln in einer xxx.rules Datei funktionieren nicht

Verfasst: 12. Apr 2020 12:21
von udo1toni
Was meinst Du denn mit "funktioniert nicht"?

Grundsätzlich:
  1. val bedeutet Konstante. Wenn Du außerhalb einer Rule eine Konstante definierst, ist sie unabänderlich, bis die Rules Datei neu eingelesen wird.
  2. Globale Variablen und Konstanten müssen zu Beginn der Datei definiert werden, vor der ersten Rule.
  3. dynamische Wertzuweisungen außerhalb Rules sind nicht statthaft (Temperature.state ist ein variabler Wert).
  4. Ein Casting nach Number ohne Prüfung auf einen gültigen Wert kann und wird Null Pointer Exceptions hervorrufen.
Deine Rules sollten also eher so aussehen:

Code: Alles auswählen

rule "Brunnenschalter on" 
when
    Time cron "0 22 11 ? * *"         
then
    Brunnenschalter.sendCommand(ON)                                               // Brunnenschalter On
    sendTelegram("bot1", "Brunnenschalter - " + Brunnenschalter.state.toString())
end 

rule "Außentemperatur Brunnen2"
when
    Item Temperature changed                                                      // wenn Außentemperatur sich ändert
then
    val Number aTemp = if(Temperature.state instanceof Number) (Temperature.state as Number) else 15.5

    if(aTemp <= 15)
        SonoffT1.sendCommand(OFF)
    else if(aTemp > 16)
        SonoffT1.sendCommand(ON)

    if(aTemp <= 15 || aTemp > 16)
        //sendTelegram("bot1", "Temperatur im Garten beträgt: " + aTemp.toString)
end
Der ternäre Operator in der Wertzuweisung bewirkt, dass aTemp auf einen Wert gesetzt wird, der sich innerhalb des Hysteresefensters befindet, falls der Sensor keinen gültigen Wert liefert.

Re: 2 Regeln in einer xxx.rules Datei funktionieren nicht

Verfasst: 12. Apr 2020 14:27
von Joe
Hi Udo,
danke für den Tipp und die Modifikationen an der Regel.
Leider funktioniert die Geschichte immer noch nicht, wenn ich meine Code deaktiviere und Deinen verwende.
Es geht wieder nur dann, wenn ich die erste Regel in eine extra Datei kopiere.
Das kann doch alles nicht sein.
Hast Du noch eine Idee wo der Fehler liegen kann?

Re: 2 Regeln in einer xxx.rules Datei funktionieren nicht

Verfasst: 12. Apr 2020 15:12
von udo1toni
Bist Du sicher, dass es an genau diesen beiden Regeln hängt? sind das die einzigen Regeln im System/in der Datei?

Re: 2 Regeln in einer xxx.rules Datei funktionieren nicht

Verfasst: 12. Apr 2020 16:06
von Joe
Ja ich hatte extra eine neue Datei erstellt, dass ich mit den Sonoffs nicht durcheinander komme.
Wie gesagt wenn ich die beiden Regeln in unterschiedliche Dateien packe geht alles wie es sein sollte.
Habe den Raspberry auch schon neu gestartet... das ist zum Mäuse melken.

Re: 2 Regeln in einer xxx.rules Datei funktionieren nicht

Verfasst: 13. Apr 2020 06:36
von udo1toni
Bist Du sicher, dass Du keine namensgleiche Rule in einer anderen Datei hast? Ich kann mir ehrlich gesagt nicht vorstellen, wie dieser fehler zustande kommen soll, solange alle Rules systemweit eindeutige Namen haben ist es unerheblich, wie viele Rules in wievielen Dateien auf dem System liegen, sie werden alle passend ausgeführt (vorausgesetzt natürlich, die Ressourcen reichen aus).

Hast Du eine andere Rule, welche ebenfalls auf Time cron "0 22 11 ..." triggert?

Re: 2 Regeln in einer xxx.rules Datei funktionieren nicht

Verfasst: 14. Apr 2020 21:21
von Joe
Hi Udo,
bin ja froh das nur ich die Situation nicht erklären kann :-)
Nein ich habe keinen anderen trigger der um diese Zeit startet, es ist auch egal welche Zeit ich einstelle es funktioniert nicht.
Ich habe auch keine Rule die den gleichen Namen hat, ich habe schon die mit Zahlen aufgefüllt.
Danke aber für Deinen Einsatz, ich werde das ganze jetzt in einer extra-Datei abwickeln.

Re: 2 Regeln in einer xxx.rules Datei funktionieren nicht

Verfasst: 14. Apr 2020 23:32
von peter-pan
...Frage ! Funktioniert diese Syntax ?
sendTelegram("bot1", "Brunnenschalter - " + Brunnenschalter.state.toString())
Ich meine damit das Klammerpaar nach ".. .toString()". Ich habe das so noch nicht gesehen

Re: 2 Regeln in einer xxx.rules Datei funktionieren nicht

Verfasst: 15. Apr 2020 07:38
von Joe
Ja funktionieren ohne Probleme.
Ich nutze diese immer, da ich bei manchen noch zusätzliche Infos in die () schreibe die ich gerne übermittelt hätte.