Ankündigung

Einklappen
Keine Ankündigung bisher.

Rule : Send command 2 std vor Sonnenuntergang

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

    Rule : Send command 2 std vor Sonnenuntergang

    Hallo zusammen ,

    ich auf der Suche noch einer Lösung für meine Teich aktuell läuft es mit dem gcal Binding wo fix zeiten für die Teichpumpe eingestellt habe.

    Jetzt möchte ich das aber ändern hab das sunext (Sonnenstand) rule aus dem wiki .

    Möchte jetzt damit folgendes machen , die Teichpumpe soll 2 Stunde vor Sonnenuntergang bis 1 Stunden laufen .

    Geht sowas ?

    Danke

    #2
    Entweder Du berechnest Dir die Zeit des Sonnenuntergangs und setzt 2 Stunden vorher einen Switch um, der dann die Regel auslöst. Das sollte mit den Zeitfunktionen aus Java kein so großes Problem sein.

    Alternativ lässt Du die Regel bei einem Sonnenstand >0 auslösen, den Wert müsste man ausprobieren. Damit hast Du dann aber immer unterschiedliche Zeiten bis zum Untergang.

    Die Laufzeit begrenzen kannst Du entweder mit einem Timer oder auch über den Sonnenstand oder eine fixe Zeit.

    Kommentar


      #3
      Ich nutze den Sonnenuntergang basierend einer API Abfrage bei wunderground und baue darauf meine Rule auf:

      Item:

      String strSunset "Sonnenuntergang [%s]" <moon> (gWeather) { http="<[http://api.wunderground.com/api/APICODE/astronomy/q/zmw:00000.26.10739.xml:21600000:XSLT(wunderground_ sunset.xsl)]" }

      Rule:

      rule "React to sunset"
      when
      Time cron "0 30 17 * * ?" // Every day 13:00h, 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.plusMinutes(20)) [|
      logInfo("Sunset","Timer tIndoorLights executed")
      gSunset?.members.forEach(Switch|
      sendCommand(Switch, ON)
      )
      {
      gSunsetS?.members.forEach(Rollershutter|
      sendCommand(Rollershutter, DOWN)
      )
      Thread::sleep(15000)
      sendCommand(Shutter_EG_WZ_West_door, STOP)
      sendCommand(Shutter_OG_Flur_Sued, STOP)
      sendCommand(Shutter_OG_Flur_Ost, STOP)
      }

      ]

      end


      Wenn du den Timer tIndoorLights = createTimer(sunset.plusMinutes(20))mit 120 statt 20 besetzt hast du deinen Startpunkt.

      Deine Actions/ Commands musst du dann nur noch oben einfügen.

      Das XSL lautet so:

      <?xml version="1.0" ?>
      - <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
      <xslutput indent="yes" method="xml" encoding="UTF-8" omit-xml-declaration="yes" />

      - <xsl:template match="/">
      - <!-- format: hh:mm:ss -->
      <xsl:value-of select="//response/sun_phase/sunset/hour/text()" />

      <xsl:text>:</xsl:text>

      <xsl:value-of select="//response/sun_phase/sunset/minute/text()" />

      <xsl:text>:00</xsl:text>

      </xsl:template>


      </xsl:stylesheet>

      Kommentar


        #4
        Danke für dein Beispiel..


        Hab es versucht bei mir einzubauen , leider startet der Timer sofort obwohl im Log eine andere Zeit ist .

        Sollte doch passen ? hab 1.3

        openhab.log

        21:17:04.359 INFO o.openhab.model.script.Sunrise[:73]- datum = 2013-10-18 7:42
        21:17:07.280 INFO o.openhab.model.script.Sunrise[:73]- Timer tpondOn created2013-10-18T07:32:00.000+02:00
        21:17:08.584 INFO o.o.b.e.internal.ExecBinding[:333]- executed commandLine 'sudo /usr/local/bin/z-wave_openhab ON 9'
        21:17:09.255 INFO o.openhab.model.script.Sunrise[:73]- Timer tpondOff created2013-10-18T08:42:00.000+02:00
        21:17:10.326 INFO o.o.b.e.internal.ExecBinding[:333]- executed commandLine 'sudo /usr/local/bin/z-wave_openhab OFF 9'



        meine rule

        rule "React to sunrise"
        when
        Time cron "0 17 21 * * ?" // Every day 21:30h, evaluate sunset
        then
        var year = now.getYear
        var month = now.getMonthOfYear
        var day = now.getDayOfMonth
        var datum = year+"-"+month+"-"+day+" "+ Sunrise_Time.state.toString()
        logInfo("Sunrise","datum = " + datum)
        var DateTime sunrise = parse(year+"-"+month+"-"+day+"T" + Sunrise_Time.state.toString())


        // Cancel timer to avoid reschedule
        if(tpondOn!=null) {
        logInfo("Sunrise","Timer tpondOn cancelled")
        tpondOn.cancel()
        }
        if(tpondOff!=null) {
        logInfo("Sunrise","Timer tpondOff cancelled")
        tpondOff.cancel()
        }
        logInfo("Sunrise","Timer tpondOn created" + sunrise.minusMinutes(10).toString())
        tpondOn = createTimer(sunrise.minusMinutes(10)) [|
        sendCommand(POND,ON)
        ]
        logInfo("Sunrise","Timer tpondOff created" + sunrise.plusMinutes(60).toString())
        tpondOff =createTimer(sunrise.plusMinutes(60)) [|
        sendCommand(POND,OFF)
        ]
        end

        Kommentar


          #5
          Hi

          könnte sein das es an deinem Aufruf liegt:

          Zitat von theneon Beitrag anzeigen
          logInfo("Sunrise","Timer tpondOn created" + sunrise.minusMinutes(10).toString())
          tpondOn = createTimer(sunrise.minusMinutes(10)) [|
          sendCommand(POND,ON)
          ]
          logInfo("Sunrise","Timer tpondOff created" + sunrise.plusMinutes(60).toString())
          tpondOff =createTimer(sunrise.plusMinutes(60)) [|
          sendCommand(POND,OFF)
          ]
          end
          Probiers es mal ohne das PIPE Zeichen - das ist bei mir wegen der mehreren Aufrufe drin:

          logInfo("Sunrise","Timer tpondOn created" + sunrise.minusMinutes(10).toString())
          tpondOn = createTimer(sunrise.minusMinutes(10)) [
          sendCommand(POND,ON)
          ]

          Grüsse
          Karsten

          Kommentar


            #6
            Zitat von kakaiser Beitrag anzeigen
            Probiers es mal ohne das PIPE Zeichen - das ist bei mir wegen der mehreren Aufrufe drin
            nein, dass |-Zeichen wird gebraucht.

            Gruß,

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

            Kommentar

            Lädt...
            X