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

    Sunrize sunset forward

    Scheduled Pinned Locked Moved Scripts
    11 Posts 3 Posters 4.7k 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
      last edited by

      Hi,
      First, thank you for mycontroler.org. It is a great controler for mySensors.
      I'd like to send the sunrize and sunset time to one of my node which display some data on a LED matrix chain i have. The sending and receiving data is working great via forward payload rules. I already receive data from my other sensors. So this part is ok.
      I just don't know how to get the sunrize and sunset information which are already on the dashboard. I assume that it can be done with a script, but i have no idea how to get the data.
      Could anyone point me to a direction for my research ?
      Thanks

      L 1 Reply Last reply Reply Quote 0
      • 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

                          0

                          Online

                          587

                          Users

                          529

                          Topics

                          3.4k

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