• Categories
    • Recent
    • Tags
    • Popular
    • Register
    • Login

    Sunrize sunset forward

    Scheduled Pinned Locked Moved Scripts
    11 Posts 3 Posters 4.8k Views 1 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • L Offline
      loic13 @loic13
      last edited by

      @loic13
      I found this:
      static String SKEY_SUNRISE_TIME
      static String SKEY_SUNSET_TIME
      How can i retrieve the values and forward it (forward payload?) ?
      Thanks

      jkandasaJ 1 Reply Last reply Reply Quote 0
      • jkandasaJ Offline
        jkandasa @loic13
        last edited by

        @loic13 For now there is no way to get sunrise and sunset time on script. I have created a ticket to track this one. I will add support soon for this.

        https://github.com/mycontroller-org/mycontroller/issues/322

        1 Reply Last reply Reply Quote 0
        • L Offline
          loic13
          last edited by

          Thank you jkandasa.

          jkandasaJ 1 Reply Last reply Reply Quote 0
          • jkandasaJ Offline
            jkandasa @loic13
            last edited by

            @loic13 This feature introduced on https://github.com/mycontroller-org/mycontroller/issues/322

            Example:

            JavaScript

            var myImports = new JavaImporter(java.io, java.lang, java.util);
            
            with(myImports) {  
              var location = mcApi.utils().getServerLocationSettings();
            }
            
            Result:
            {
              "myImports": {},
              "location": {
                "name": "Namakkal",
                "latitude": "11.2333",
                "longitude": "78.1667",
                "sunriseTime": 1481677080000,
                "sunsetTime": 1481718360000
              }
            }
            
            1 Reply Last reply Reply Quote 0
            • L Offline
              loic13
              last edited by

              I, Thank you very much, that's perfect.
              I'm sorry to ask again, i don't know javascript. How can i access the sunrizeTime and sunsetTime value on my script ?
              I manage to send a string using the sendPayload() function but what is the correct way to access sunrizeTime value?:
              mcApi.sensor().sendPayload(???????);
              Thank you.

              jkandasaJ 1 Reply Last reply Reply Quote 0
              • jkandasaJ Offline
                jkandasa @loic13
                last edited by jkandasa

                @loic13 You can send sunrise, sunset time as custom variable to your node, or any other type as you want.

                As a first step create a sensor with variables, In this example I am using sensor type as Custom and SensorVariable types as Variable 1 for sunrise and Variable 2 for sunset.
                0_1481865090142_upload-7da6ffae-f597-4c11-a2e3-8fc609c0d119

                Add these sensorVariables to UidTag

                0_1481865168235_upload-02950fef-8c83-4060-a856-b93792b0c0d5

                JavaScript: (Type: Operation)
                var myImports = new JavaImporter(java.io, java.lang, java.util);
                
                with(myImports) {
                  //Get Sunrise/Sunset details
                  var locSettings = mcApi.utils().getServerLocationSettings();
                 
                 //Get sensor variables for sunrise and sunset
                  var sensorSunRise = mcApi.uidTag().getByUid("sunrise").getResource();
                  var sensorSunSet = mcApi.uidTag().getByUid("sunset").getResource();
                  
                  //Update timezone offset values (by default gives GMT timestamp values)
                  var sunrise = locSettings.sunriseTime + locSettings.timezoneOffset;
                  var sunset = locSettings.sunsetTime + locSettings.timezoneOffset;
                
                 //Convert milliseconds to seconds and load it in sensor variable value
                  sensorSunRise.value = sunrise / 1000;
                  sensorSunSet.value = sunset / 1000; 
                
                  //Send/Update thise sensorvariable with updated value
                  mcApi.sensor().sendPayload(sensorSunRise); 
                  mcApi.sensor().sendPayload(sensorSunSet);
                }
                

                Note: I have introduced timezoneOffset on most recent build. You have to download snapshot build to execute above script. Thank you!

                You can add this script on Timer, and you specify update this to your node on every day midnight.

                1 Reply Last reply Reply Quote 0
                • L Offline
                  loic13
                  last edited by

                  @jkandasa Thank you very much.
                  Everything is working.
                  1_1481983136361_IMG_20161217_084224-s.jpg 0_1481983136323_IMG_20161217_084055-s.jpg

                  1 Reply Last reply Reply Quote 1
                  • A Offline
                    adulovic
                    last edited by

                    Hi,
                    I am attempting to use a relay and a PIR switch to turn on the lights when someone approaches the door.
                    So far, I got it working fine, and I'm using a simple 'Forward Payload' but I now I am looking for a way to have it trigger only at night.
                    Ideally, this should be done through the controller, and not on the script level. Being lazy, I have created a reusable snippet for all of my relays, and use it for a number of different applications.

                    I tried following the instructions on this post in order to create rules that would allow the payload forwarding only between sunset and sunrise time, but am stuck at the javascript portion, as it gives me an error when I try to run the script: "errorMessage": "TypeError: mcApi.utils().getServerLocationSettings is not a function in <eval> at line number 6".

                    I could probably accomplish my goal in some other way, by using a photovoltaic cell, or modifying the script for this particular relay to request the time from the controller, but I'd really like to be able to create and use a rule on the controller itself.

                    Perhaps a revision of your step-by-step instruction on how to accomplish this is in order, as I am sure there are plenty people interested in using the sunrise/sunset times for enabling/disabling triggered actions.

                    PS. am using MySensors 2.1.0 and MyController 0.0.3.Final-SNAPSHOT

                    jkandasaJ 1 Reply Last reply Reply Quote 0
                    • jkandasaJ Offline
                      jkandasa @adulovic
                      last edited by

                      @adulovic

                      I tried following the instructions on this post in order to create rules that would allow the payload forwarding only between sunset and sunrise time, but am stuck at the javascript portion, as it gives me an error when I try to run the script: "errorMessage": "TypeError: mcApi.utils().getServerLocationSettings is not a function in <eval> at line number 6".

                      SNAPSHOT version changes very often, can you give a try on latest one?

                      1 Reply Last reply Reply Quote 0
                      • L Offline
                        loic13
                        last edited by

                        @adulovic
                        Hi,
                        As jkandasa said, you should probably download the last SNAPSHOT version again. Your error message seems to be because you don't have the SNAPSHOT with his modification.
                        As for the step-by-step i can try to explain the way i did it:

                        • First, i'm using a Raspberry Pi Zero for the controller with an up-to-date Raspbian distro.
                        • I have the last 0.0.3.Final-SNAPSHOT of MyController.org(at least the one from 24 days ago with jkandasa's modification).
                        • I'm using the 2.0.0 version of MySensors (soon to be updated to the last version).
                        • On MyControler.org i created 2 UID tags (sunrize and sunset) which point to 2 dummy sensors (child of a MySensors node).
                        • Then i have the java script which send the sunrize and sunset value to this UID tags:
                        var myImports = new JavaImporter(java.io, java.lang, java.util);
                        
                        with(myImports) {
                          //Get Sunrise/Sunset details
                          var locSettings = mcApi.utils().getServerLocationSettings();
                        
                          //Get sensor variables for sunrise and sunset
                          var sensorSunRise = mcApi.uidTag().getByUid("sunrize").getSensorVariable();
                          var sensorSunSet = mcApi.uidTag().getByUid("sunset").getSensorVariable();
                        
                          //Update timezone offset values (by default gives GMT timestamp values)
                          //sensorSunRise.value = locSettings.sunriseTime + locSettings.timezoneOffset;
                          //sensorSunSet.value = locSettings.sunsetTime + locSettings.timezoneOffset;
                        
                          var dtr = new Date(locSettings.sunriseTime);
                          sensorSunRise.value = dtr.getHours() + ':' + dtr.getMinutes();
                        
                          var dts = new Date(locSettings.sunsetTime);
                          sensorSunSet.value = dts.getHours() + ':' + dts.getMinutes();
                        
                          //Send/Update thise sensorvariable with updated value
                          mcApi.sensor().sendPayload(sensorSunRise);
                          mcApi.sensor().sendPayload(sensorSunSet);
                        }
                        
                        • On MyControler.org i created an Operation to execute the java script
                        • and a Timer to start the Operation before Sunrize every day.

                        For your java script you just need to add an if statement comparing the sunrize and sunset values with the current time, and you should be good.

                        1 Reply Last reply Reply Quote 1
                        • First post
                          Last post

                        1

                        Online

                        598

                        Users

                        530

                        Topics

                        3.4k

                        Posts
                        Copyright © 2015-2025 MyController.org | Contributors | Localization