Ankündigung

Einklappen
Keine Ankündigung bisher.

Frage zu: Create a timer for sunset aus den Samples

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Frage zu: Create a timer for sunset aus den Samples

    Hallo,
    ich versuche mich gerade in der Umsetzung des o.g. Samples scheitere aber bei den Rules und dem Gruppensetup.

    Das Stylesheet liefert die gewünschte Uhrzeitnach geringer Anpassung. Im .item habe ich die Zeile aus dem Sample übernommen.

    Bei der Rule bekomme ich im Designer folgende Fehlermeldungen:

    var DateTime sunset = parse(year+"-"+month+"-"+day+"T"+strSunset.state)
    ERROR Message:
    "Multiple markers at this line
    - Couldn't resolve reference to JvmType 'DateTime'.
    - Incompatible types. Expected void but was org.joda.time.DateTime"

    *
    tIndoorLights = createTimer(sunset.minusMinutes(15)) [|
    logInfo("Sunset","Timer tIndoorLights executed")
    gSunset?.members.forEach(Switch|
    sendCommand(Switch, ON)
    )
    ERROR Message:
    "Couldn't resolve reference to JvmIdentifiableElement 'minusMinutes'."

    irgendjemand eine Idee wo der Fehler liegen könnte?

    Danke im voraus

    #2
    Versuch mal ...

    import org.joda.time.*

    Ganz an den Anfang deiner Rule Datei. Dadurch sollte er die Joda Klassen kennen. Leider scheint der Designer die übliche Eclipse Tastenkombination (STRG+Alt+O) die die Includes automatisch setzt nicht zu unterstützen. Deshalb muss man das leider manuell machen

    Kommentar


      #3
      ok, danke - versuche ich heute abend mal.

      Kommentar


        #4
        Zitat von kakaiser Beitrag anzeigen
        ok, danke - versuche ich heute abend mal.
        Problem gelöst?

        Gruß,

        Thomas E.-E.
        Visualisierung, Rule/Logic-Engine, Integrationsplattform mit openhab (Supportforum)

        Kommentar


          #5
          Zitat von teichsta Beitrag anzeigen
          Problem gelöst?

          Gruß,

          Thomas E.-E.
          Halo Thomas,

          ja - auf Windows läufts jetzt - auf Raspberry PI bekomme ich die Regel nicht zum laufen. Ich bin da so langsam am mit dem Latin.

          Kommentar


            #6
            Hi,

            Zitat von kakaiser Beitrag anzeigen
            ja - auf Windows läufts jetzt - auf Raspberry PI bekomme ich die Regel nicht zum laufen
            habe ich das richtig verstanden? Die Regel läuft in openHAB, dass auf einer Windows JVM läuft. Und die gleiche Regel läuft auf dem Raspi nicht? Kommt da eine Fehlermeldung?

            Gruß,

            Thomas E.-E.
            Visualisierung, Rule/Logic-Engine, Integrationsplattform mit openhab (Supportforum)

            Kommentar


              #7
              ja - ich lass es heute abend nochmal im debugging mode laufen damit ich alle Fehlermeldungen bekomme.

              Kommentar


                #8
                Welche JVM läuft auf dem RPI und welche auf dem Windows

                Gruß MOE

                Kommentar


                  #9
                  Zitat von masterofeye Beitrag anzeigen
                  Welche JVM läuft auf dem RPI und welche auf dem Windows

                  Gruß MOE
                  Hallo MOE

                  Auf dem RASPI:

                  java version "1.8.0-ea"
                  Java(TM) SE Runtime Environment (build 1.8.0-ea-b108)
                  Java HotSpot(TM) Client VM (build 25.0-b50, mixed mode)

                  auf win:

                  java version "1.7.0_45"
                  Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
                  Java HotSpot(TM) Client VM (build 24.45-b08, mixed mode, sharing)

                  Kommentar


                    #10
                    Hallo kakaiser,

                    vielleicht versuchst du mal Java 1.7 auf dem RPI zu installieren. Eventuell hat Oracle irgend was geändert in 1.8 was noch nicht so ganz läuft.



                    Gruß Moe

                    Kommentar


                      #11
                      Zitat von masterofeye Beitrag anzeigen
                      Hallo kakaiser,

                      vielleicht versuchst du mal Java 1.7 auf dem RPI zu installieren. Eventuell hat Oracle irgend was geändert in 1.8 was noch nicht so ganz läuft.

                      Gruß Moe
                      Hmmm - mit 1.7.0_45 tut es. darauf muss man erst mal kommen. DANKE!

                      Kommentar


                        #12
                        Hallo zusammen ich möchte gern das dies Rule

                        Code:
                        rule "React to sunset"
                        when 
                                Time cron "0 18 12 * * ?"   // Every day 14:00 hours, evaluate sunset
                        then
                            var year   = now.getYear
                            var month  = now.getMonthOfYear
                            var day    = now.getDayOfMonth
                            var datum  = year+"-"+month+"-"+day+" "+strSunset.state
                            logInfo("Sunset","datum = " + datum)
                            var DateTime sunset = parse(year+"-"+month+"-"+day+"T"+strSunset.state)
                            
                            /*
                             * Indoor Lights
                             */
                             // Cancel timer to avoid reschedule
                            if(tIndoorLights!=null) {
                                logInfo("Sunset","Timer tIndoorLights cancelled") 
                                tIndoorLights.cancel()
                               
                            }
                            logInfo("Sunset","Timer tIndoorLights created") 
                            tIndoorLights = createTimer(sunset.minusMinutes(280)) [|
                                logInfo("Sunset","Timer tIndoorLights executed") 
                                gSunset?.members.forEach(Switch|
                                           callScript(sunsetDimmer)
                                       
                                )
                            ]
                        end
                        das folgende script in cometVISU.script auslöst

                        Code:
                        var Number sunsetDimmer
                        
                        sunsetDimmer=0
                        while(sunsetDimmer<100){
                                sunsetDimmer=sunsetDimmer+5
                                sendCommand(Light_LR_Living_Sofa_D,sunsetDimmer)
                                Thread::sleep(20000)
                        }

                        im log habe ich aber immer folgende Fehlermeldung

                        Code:
                        12:44:00.055 INFO  o.openhab.model.script.Sunset[:53]- Timer tIndoorLights executed
                        12:44:00.285 ERROR org.quartz.core.JobRunShell[:222]- Job DEFAULT.2014-01-15T12:44:00.000+01:00: Proxy for org.eclipse.xtext.xbase.lib.Procedures$Procedure0: org.eclipse.xtext.xbase.impl.XClosureImplCustom@324e4d05 (explicitSyntax: true) threw an unhandled Exception: 
                        java.lang.RuntimeException: The name 'gSunset' cannot be resolved to an item or type.
                        	at org.openhab.model.script.interpreter.ScriptInterpreter.internalFeatureCallDispatch(ScriptInterpreter.java:67)
                        	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._evaluateAbstractFeatureCall(XbaseInterpreter.java:658)
                        	at sun.reflect.GeneratedMethodAccessor47.invoke(Unknown Source)
                        	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
                        	at java.lang.reflect.Method.invoke(Method.java:606)
                        	at org.eclipse.xtext.util.PolymorphicDispatcher.invoke(PolymorphicDispatcher.java:291)
                        12:44:00.297 ERROR org.quartz.core.ErrorLogger[:2361]- Job (DEFAULT.2014-01-15T12:44:00.000+01:00: Proxy for org.eclipse.xtext.xbase.lib.Procedures$Procedure0: org.eclipse.xtext.xbase.impl.XClosureImplCustom@324e4d05 (explicitSyntax: true) threw an exception.
                        org.quartz.SchedulerException: Job threw an unhandled exception.
                        	at org.quartz.core.JobRunShell.run(JobRunShell.java:224)
                        	at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:557)
                        Caused by: java.lang.RuntimeException: The name 'gSunset' cannot be resolved to an item or type.
                        	at org.openhab.model.script.interpreter.ScriptInterpreter.internalFeatureCallDispatch(ScriptInterpreter.java:67)
                        	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._evaluateAbstractFeatureCall(XbaseInterpreter.java:658)
                        	at sun.reflect.GeneratedMethodAccessor47.invoke(Unknown Source)
                        	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
                        	at java.lang.reflect.Method.invoke(Method.java:606)
                        	at org.eclipse.xtext.util.PolymorphicDispatcher.invoke(PolymorphicDispatcher.java:291)
                        was habe ich übersehen?

                        Kommentar


                          #13
                          ich habe es bei callScript(sunsetDimmer) muss ich natürlich das richtige script rufen, also callScript("cometVISU") ist hier richtig.

                          Beziehungsweise ich habe nun das Script noch zu sunsetDimmer.script umbenannt dass man am Namen erkennt was es tut und die Rule entsprechend angepasst.

                          Jetzt wäre es natürlich vorteilhaft wenn die Rule oder das Script nur läuft wenn jemand zu Hause ist, da ich noch keine Bewegungsmelder habe aber mosquitto erfolgreich eingerichtet habe wäre das ne feine sache.

                          Wo bau ich das if am sinvollsten ein im script oder in der rule.

                          Kommentar


                            #14
                            Ich habe mein Problem nun wie folgt gelöst.

                            Code:
                            rule "React to sunset"
                            when 
                                    Time cron "0 14 00 * * ?"   // Every day 14:00 hours, evaluate sunset
                            then
                                var year   = now.getYear
                                var month  = now.getMonthOfYear
                                var day    = now.getDayOfMonth
                                var datum  = year+"-"+month+"-"+day+" "+strSunset.state
                                logInfo("Sunset","datum = " + datum)
                                var DateTime sunset = parse(year+"-"+month+"-"+day+"T"+strSunset.state)
                                
                                /*
                                 * Indoor Lights
                                 */
                                 // Cancel timer to avoid reschedule
                                if(tIndoorLights!=null) {
                                    logInfo("Sunset","Timer tIndoorLights cancelled") 
                                    tIndoorLights.cancel()
                                   
                                }
                                logInfo("Sunset","Timer tIndoorLights created") 
                                tIndoorLights = createTimer(sunset.minusMinutes(30)) [|
                                    logInfo("Sunset","Timer tIndoorLights executed") 
                                    //gSunset?.members.forEach(Switch|
                                        //    sendCommand(Light_LR_Living_Sofa_hiden, ON)
                                           callScript("anwesend")
                                           
                                           
                                   // )
                                ]
                            end
                            Die rule ruft das script anwesend.script

                            if (PresenceMarcus_Phone.state==ON)

                            callScript("sunsetDimmer")
                            das script prüft ob mqtittude das item auf on setzt und führt dann folgendes script aus


                            var Number sunsetDimmer

                            sunsetDimmer=0



                            while(sunsetDimmer<100)

                            {
                            sunsetDimmer=sunsetDimmer+5
                            sendCommand(Light_LR_Living_Sofa_D,sunsetDimmer)
                            Thread::sleep(600000)

                            }
                            Ich bin nun gespannt ob das so funktioniert.
                            Dann werde ich weiter scripts und rules anlegen und ein Schritte weiter zum Smarthome kommen.

                            Kommentar


                              #15
                              Ok es funktioniert wie gewünscht.

                              Gesendet von meinem Nexus 7 mit Tapatalk

                              Kommentar

                              Lädt...
                              X