Seite 3 von 4

Re: Heizungssteuerung Rules Problem

Verfasst: 5. Dez 2019 23:12
von udo1toni
Ändere mal bitte die letzte log-Zeile ab in

Code: Alles auswählen

        logInfo("pwm","Heizphase: {} Länge: {} Sekunden",sHeiz,nTime)
nTime ist die eine Veriable, die wir noch nicht im log sehen...

Re: Heizungssteuerung Rules Problem

Verfasst: 6. Dez 2019 17:12
von leupy
Erste Phase läuft korrekt 10 Min nach starten der Regel

Code: Alles auswählen

2019-12-06 16:41:19.397 [INFO ] [lipse.smarthome.model.script.heizung] - Komfort
2019-12-06 16:41:19.408 [INFO ] [lipse.smarthome.model.script.heizung] - Komfort
2019-12-06 16:41:19.478 [INFO ] [g.eclipse.smarthome.model.script.pwm] - Timer wird ausgeführt!
2019-12-06 16:41:19.483 [INFO ] [g.eclipse.smarthome.model.script.pwm] - Pulsphase: true
2019-12-06 16:41:19.489 [INFO ] [g.eclipse.smarthome.model.script.pwm] - Pulslänge: 0
2019-12-06 16:41:19.494 [INFO ] [g.eclipse.smarthome.model.script.pwm] - Heizphase: OFF Länge: 600 Sekunden
Zweite Startet danach mit Fehler

Code: Alles auswählen

2019-12-06 16:50:30.144 [INFO ] [lipse.smarthome.model.script.heizung] - Komfort
2019-12-06 16:51:19.502 [INFO ] [g.eclipse.smarthome.model.script.pwm] - Timer wird ausgeführt!
2019-12-06 16:51:19.511 [INFO ] [g.eclipse.smarthome.model.script.pwm] - Pulsphase: false
2019-12-06 16:51:19.523 [INFO ] [g.eclipse.smarthome.model.script.pwm] - Pulslänge: 30
2019-12-06 16:51:19.537 [INFO ] [g.eclipse.smarthome.model.script.pwm] - Heizphase: OFF Länge: 420 Sekunden
2019-12-06 16:51:19.546 [ERROR] [org.quartz.core.JobRunShell         ] - Job DEFAULT.2019-12-06T16:41:19.475+01:00: Proxy for org.eclipse.xtext.xbase.lib.Procedures$Procedure0: [ | {
Müsste nicht nach der ersten Phase OFF auch eine ON Länge folgen ?

Re: Heizungssteuerung Rules Problem

Verfasst: 15. Dez 2019 12:36
von leupy
Hallo nochmal,
ich habe jetzt doch Abstand von der PWM genommen da die nicht sauber läuft und versucht das ganze zu vereinfachen.
Ich wollte in der folgenden Regel jetzt 3 Modi realisieren.
Heizung 100 % > Heizung an
Heizung 50 % > bedeutet Ventil 5 min an 5 min aus.
Heizung 0 % > Heizung aus.

Leider habe ich wie immer Problem mit dem erstellen von Regeln :cry:
Kann mir da jemand weiter helfen :?:

Code: Alles auswählen

//--------------------------------------------------- 
// Heizung Esszimmer
//--------------------------------------------------- 
// Globale Variablen werden zu Beginn der Datei definiert


var Boolean bOn_HE = false                                       // 
var Number nPWM = 0                                              // ON in %

rule "Init Heizung"
when
    System started or 
    Time cron "0 00 21 * * ?"
then
 
    Heizung_E_Soll.postUpdate(21.0)
    Heizung_E_Soll_N.postUpdate(18.0)
end
//----------------------------------------------------
//Essimmer Einschaltbedingung über Zeit 
//----------------------------------------------------
rule "Heizung Tag"
when
    Time cron "0 45 5 ? * MON-FRI" or // Werktags   05:45:00 Uhr
    Time cron "0 0 8 ? * SAT-SUN"     // Wochenende 08:00:00 Uhr
then
    HeizungMode.postUpdate(ON)          //Heizung Tag an wenn ON Komfort
end

rule "Heizung Nacht"
when
    Time cron "0 0 20 * * ?"            // Täglich 20:00:00 Uhr
then
    HeizungMode.postUpdate(OFF)         //Heizung Nacht an wenn OFF
end
//----------------------------------------------------
//Esszimmer Soll/ist Vergleich Temperatur und setzen von Puls Variablen
//----------------------------------------------------
rule "Heizung WZ Ist/Soll vergleich"
when
    Item Sonoff86Temp changed or                                        // Istwert Temp 
    Item Heizung_E_Soll changed or                                      // Sollwert Heizung 
    Item Heizung_E_Soll_N changed or                                    // Sollwert Nacht Heizung 
    Item HeizungMode changed
then
    val Number wtsi_E = (Sonoff86Temp.state as Number).doubleValue      // Temperatur Ist
    var Number nSoll = (Heizung_E_Soll_N.state as Number).doubleValue   // erstmal Temperatur Soll Nacht setzen

    if(HeizungMode.state == ON) {
        logInfo("heizung", "Komfort")
        nSoll = (Heizung_E_Soll.state as Number ).doubleValue           // Falls Komfort, Temperatur Soll Tag setzen
    }
    nPWM = 0                                                            // erst mal PWM 0
    if(wtsi_E < nSoll)       nPWM = 0                                   // Ist > Soll minus 0,5 bis Soll
    if(wtsi_E < nSoll - 0.5) nPWM = 50                                  // Ist => Soll minus 0,5 - 1 Grad
    if(wtsi_E < nSoll -1 )   nPWM = 100                                 // ansonsten
end
//------------------------------------------------------------------
// Stuerung Heizungsventil
//------------------------------------------------------------------
rule "Ventil Esszimmer"
when
    (nPWM = 0) or
    (nPWM = 50) or
    (nPWm =100) and 
    (bOn_HE = false)                                               //Variable
then
    sendCommand (Heizung_E, ON)                                  // erstmal Heizung an
    if(nPWM = 0)                                              // Heizung aus bei Wert 0
      {logInfo("Heizung", "Aus") 
      sendCommand (Heizung_E, OFF)   
      }
    if(nPWM =50) 
      {logInfo("Heizung", "50%")                                 // Heizung 50% 
     tP5?.cancel                                                 // falls Timer bereits vorhanden, entfernen
     tP5 = createTimer(now.plusSeconds(300)                      // Timer 5min
     sendCommand (Heizung_E, OFF)                                // Heizung aus
     bOn_HE = true                                               // Variabel setzen
     }
     if(bOn_HE = true) 
     {logInfo("Heizung", "Aus 5min")
     tP55?.cancel                                                 // falls Timer bereits vorhanden, entfernen
     tP55 = createTimer(now.plusSeconds(300) 
     bOn_HE = false                                               // Variable rücksetzen 
     }
         
end
Fehlermeldung

Code: Alles auswählen

2019-12-15 12:29:31.027 [WARN ] [el.core.internal.ModelRepositoryImpl] - Configuration model 'E_heizung copy.rules' has errors, therefore ignoring it: [63,5]: no viable alternative at input '('
[64,5]: no viable alternative at input '('
[65,5]: no viable alternative at input '('
[77,6]: missing ')' at 'sendCommand'
[84,6]: missing ')' at 'bOn_HE'

Re: Heizungssteuerung Rules Problem

Verfasst: 15. Dez 2019 13:48
von peter-pan
Schau dir mal die Trigger-Bedingungen hier an:

Code: Alles auswählen

when
    (nPWM = 0) or
    (nPWM = 50) or
    (nPWm =100) and 
    (bOn_HE = false)                                               //Variable
then
das wird nicht funktionieren.

Re: Heizungssteuerung Rules Problem

Verfasst: 15. Dez 2019 14:52
von leupy
peter-pan hat geschrieben: 15. Dez 2019 13:48 Schau dir mal die Trigger-Bedingungen hier an:

Code: Alles auswählen

when
    (nPWM = 0) or
    (nPWM = 50) or
    (nPWm =100) and 
    (bOn_HE = false)                                               //Variable
then
das wird nicht funktionieren.
Okay hab das auf
rule "Ventil Esszimmer"
when
Item Sonoff86Temp changed
then

geändert da ja die Werte dann in der if abgefragt werden und 2 Klammern haben gefehlt.

Code: Alles auswählen

//------------------------------------------------------------------
rule "Ventil Esszimmer"
when
     Item Sonoff86Temp changed                                      // Temperatur hat sich geändert
then
      sendCommand (Heizung_E, ON)                                  // erstmal Heizung an
    if(nPWM = 0)                                              // Heizung aus bei Wert 0
      {logInfo("Heizung", "Aus") 
      sendCommand (Heizung_E, OFF)   
      }
    if(nPWM =50) and (bOn_HE = false)
      {logInfo("Heizung", "50%")                                 // Heizung 50% 
     tP5?.cancel                                                 // falls Timer bereits vorhanden, entfernen
     tP5 = createTimer(now.plusSeconds(300))                     // Timer 5min
      sendCommand (Heizung_E, OFF)                                // Heizung aus
      bOn_HE = true                                               // Variabel setzen
      }
     if(bOn_HE = true) 
     {logInfo("Heizung", "Aus 5min")
     tP55?.cancel                                                 // falls Timer bereits vorhanden, entfernen
     tP55 = createTimer(now.plusSeconds(300)) 
     bOn_HE = false                                               // Variable rücksetzen 
     }
     
Hab jetzt keinen Fehler mehr muss jetzt schauen ob die so läuft.

Re: Heizungssteuerung Rules Problem

Verfasst: 15. Dez 2019 14:59
von peter-pan
...das wird immer noch nicht funktionieren.
Du kannst keine Variablen als Trigger benutzen. Schau mal hier, da sind die Triggermöglichkeiten aufgeführt.

Re: Heizungssteuerung Rules Problem

Verfasst: 15. Dez 2019 15:06
von leupy
peter-pan hat geschrieben: 15. Dez 2019 14:59 ...das wird immer noch nicht funktionieren.
Du kannst keine Variablen als Trigger benutzen. Schau mal hier, da sind die Triggermöglichkeiten aufgeführt.
habs gerade geändert
Läuft jetzt ohne Fehler muss nur schauen ob das auch funst.
Danke

Re: Heizungssteuerung Rules Problem

Verfasst: 15. Dez 2019 15:16
von leupy
Läuft doch nicht, zu Früh gefreut.

Code: Alles auswählen

==> /var/log/openhab2/openhab.log <==

2019-12-15 15:14:35.320 [INFO ] [lipse.smarthome.model.script.Heizung] - 50%

2019-12-15 15:14:35.325 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Ventil Esszimmer': An error occurred during the script execution: index=1, size=1
:?:

Re: Heizungssteuerung Rules Problem

Verfasst: 15. Dez 2019 16:42
von peter-pan
...Puuh!!! :?:

Also was ich gesehen habe, ist dass das "end" in der Regel fehlt. Aber das ist wahrscheinlich beim Kopieren verloren gegangen.

Die Regel läuft aber an, bis zum

Code: Alles auswählen

    {logInfo("Heizung", "50%")      // Heizung 50% 
Danach bricht sie dann ab. Hab aber im Moment keine Ahnung warum. Vielleicht liegt's am Timer ? Vielleicht kann @udo1toni weiterhelfen.

Re: Heizungssteuerung Rules Problem

Verfasst: 15. Dez 2019 20:00
von udo1toni
Ich sehe nur eine Rule voller Fehler.

Es fängt mit (mindestens) unorthodoxer Schreibweise an, Leerzeichen, wo keine hingehören, geschwungene Klammern an unüblicher Stelle...
Es geht weiter mit komplett falschen Vergleichen (= statt ==) und createTimer ohne gültiges Lambda. Das am Ende fehlende end ist da nur das Tüpfelchen auf dem i.

Welchen Editor verwendest Du zur Erstellung der Rules? Ich möchte Dir dringend empfehlen, Visual Studio Code (oder kurz VSCode) zu installieren (nicht Visual Studio!). In VSCode gibt es Plugins, die sich direkt aus dem Editor heraus installieren lassen, unter Anderem das openHAB Plugin. Nach der Installation richtet man das Konfigurationsverzeichnis als Arbeitsverzeichnis ein (üblicherweise über einen zugewiesenen Laufwerksbuchstaben) und konfiguriert in den Einstellungen von VSCode -> Plugins -> openHAB die IP des eigenen openHAB Servers. Wenn der Server läuft, hat man danach in VSCode autocompletion und Fehleranzeige.