Frustrated Newbie - Help with Nodes and Sensors
-
Hi All,
Sorry was out for a couple of days...,
@Emenike
jkandasa is right, as an addition you can also add the debug stuff to you sketch and hook it up to your laptop to see the debugging stuff from the sensor perspective...If the sensor is out of range of you gateway you have some options to fix it:
-
you can put a repeater node in the middle between the sensor and the gateway to extend the range of your network
-
check your radio, exchange it for another one to rule out any radio hardware issues. (some of the radios have issues... especially the Nrf24l01 radios with the round black blob instead of a chip... believe me, I have been there and the range was approx 1.5 meters.....)
-
If you use the Nrf24l01, add the capacitor to the power line of the radio (tought this was a 47uf capacitor), this will also improve communication (make sure you add this on the sensor and the gateway radio!)
-
-
-
Can be an issue, can you try if you see the node if it is basically next to your gateway?
-
@tag Okay I will move them closer until I conclude with all the bugs, then I will move them apart and see if distance is the issue
by the way... is This project in this video a MySensors Gateway or something entirely new?
-
Okay, great!,
Had a look at the link you send, it looks like mysensors, but it is something different... -
This bit is wrong in your gateway sketch.....
// Define a lower baud rate for Arduinos running on 8 MHz (Arduino Pro Mini 3.3V & SenseBender) #if F_CPU == 8000000L //#define MY_BAUD_RATE 38400 #define MY_BAUD_RATE 115200 #endif
The baud rate in the if statement should be 38400 as it says in the line above it.
It won't matter if you are using a 5V arduino, but if you were to use a 3.3V one this would be a big problem.
-
-
Make sure that the same baudrate is used in the gateway sketch and mycontroller.....
-
@tag
but that was exactly how it was until you said to change 38400 …. but it connected alright after | changed to 38400 and brought the node next to the laptop. -
@emenike said in Frustrated Newbie - Help with Nodes and Sensors:
Please note that I am using a Nano for my gate way...
I thought the baud rate should be the same for Arduino and the Putty sniffer, I will revert to "38400"...That part of the gateway sketch is an 'If' statement. It just tells the compilier that 'if' the board is a 3.3v 8MHz type, then reduce the baud rate to match. 8MHz boards are not reliable at 115200.
-
Okay so if I understand correctly, all works if the nodes are basically next to each other... is that correct?
-
@tag Yes! All works well when they are next to each other on the same desk.
I have reverted the default baud rate and all is well. I have gone ahead to create Triggers and Conditions, Schedules, Actions, etc. But I somehow can not seem to tie all up to do what I want.I want to do a whole lot of things, but lets start with the first one. I need to pull in time and date from the controller to my node. How do I do this? Can I have a simple example that shows the steps or syntax and I will try to do other stuff. The Mysensors node uses a project that pulls data from Weather Underground, which I learnt has stopped its free weather information services. I have researched the topic and found a likely alternative in Open Weather Service) . Is anyone using Open Weather? https://openweathermap.org/current)
- I need to create Actions (or triggers that target all 8 objects from my node and set them all "on".
- I need to create another action trigger that targets all 8 objects and sets them to "off"
- I need to create an action trigger cycles through each value on the node and turn them on for a duration I have a variable in the Controller on each value to determine how long each one will run. Its a whole lot, and it appears I may have bitten off more than I can chew.
-
To receive time in your node, you have to call
requestTime();
from your node, then you will receive time on the following function(add this in your node code),void receiveTime(unsigned long _timestamp){ // do actions with received time }
- Regards Wunderground: I have added details in https://forum.mycontroller.org/topic/215/weatherdata-structure-question/3 looks like they will give some access for personal use.
- Regards Open weather, we do not have any direct support, however, you may use a script to collect data.
I need to create Actions (or triggers that target all 8 objects from my node and set them all "on".
You need to create 8 Operations for each object.
Send payload
operation with1
(ON), Add all of them in a rule. define your condition in the rule.I need to create another action trigger that targets all 8 objects and sets them to "off"
You need to create 8 Operations for each object.
Send payload
operation with0
(OFF), Add all of them in a rule. define your condition in the rule.I need to create an action trigger cycles through each value on the node and turn them on for a duration I have a variable in the Controller on each value to determine how long each one will run. Its a whole lot, and it appears I may have bitten off more than I can chew.
Seems this is complex, we may not easy by simple rule definition/timer. A script will be a good solution for this.
Some of the discussions,
https://forum.mycontroller.org/topic/45/timers-and-scripts
https://forum.mycontroller.org/topic/262/how-to-automatically-turn-off-relay-after-defined-time -
Thanks @jkandasa you are awesome support. I see the requestTime() function call in the sketch, but where in MyController do I add the node code?
void receiveTime(unsigned long _timestamp){ // do actions with received time }
-
I have created the UID Tags... See below, did I do it right?
I then tried to create the JS script as described in your old reference you supplied... but I got an error.
What are I doing wrong?
-
I see the requestTime() function call in the sketch, but where in MyController do I add the node code?
This code needs to be added to your MySensors node sketch, the example in your sprinkler sketch.
Nothing to do with MyController to receive timestamp. -
@Emenike said in Frustrated Newbie - Help with Nodes and Sensors:
I then tried to create the JS script as described in your old reference you supplied... but I got an error.
Did you modify the script? If yes, can you post your script?
If not, you have to create all the UID,
valve-status
is not available in your UID's list alsoValue 1
is different thenvalue01
-
Hello @jkandasa
I have been out of town, haven't touched MYC for a while. Just popped intoday and tried my hands on the script. Ran it after creating the Operation and the Timmer to trigger and run it. But it wont tun. I get an error ```{ "errorMessage": "TypeError: Cannot get property \"status\" of null in <eval> at line number 8" }
Here is the JS script that I edited for 8 valves
var myImports = new JavaImporter(java.io, java.lang, java.util); with(myImports) { var LoopThroughValves = mcApi.variable().get("Status"); //Check already running? if(LoopThroughValves.status !== 'running'){ //Update as running valveStatus.value = "running"; mcApi.variable().update(valveStatus); mcApi.logger().debug("Loop Through Valve Script Triggered..."); var masterValve = mcApi.uidTag(0).getByUid("All Zones").getResource(); var valve01 = mcApi.uidTag().getByUid("Zone 1").getResource(); var valve02 = mcApi.uidTag().getByUid("Zone 2").getResource(); var valve03 = mcApi.uidTag().getByUid("Zone 3").getResource(); var valve04 = mcApi.uidTag().getByUid("Zone 4").getResource(); var valve05 = mcApi.uidTag().getByUid("Zone 5").getResource(); var valve06 = mcApi.uidTag().getByUid("Zone 6").getResource(); var valve07 = mcApi.uidTag().getByUid("Zone 7").getResource(); var valve08 = mcApi.uidTag().getByUid("Zone 8").getResource(); var delayTime = 1000 * 60 * 10; //10 minutes //Turn ON master valve and Valve01 masterValve.value = "1"; //Update master valve ON state mcApi.sensor().sendPayload(masterValve); //sensd state valve01.value = "1"; //Update valve01 ON state mcApi.sensor().sendPayload(valve01); //sensd state //Update valve01 is running valveStatus.value2 = "value01"; mcApi.variable().update(valveStatus); //Wait time Thread.sleep(delayTime); //Turn OFF valve01 and turn ON valve02 valve01.value = "0"; //Update valve01 OFF state mcApi.sensor().sendPayload(valve01); //send state valve02.value = "1"; //Update valve02 ON state mcApi.sensor().sendPayload(valve02); //send state //Update valve02 is running valveStatus.value2 = "value02"; mcApi.variable().update(valveStatus); //Wait time Thread.sleep(delayTime); //Turn OFF valve02 and turn ON valve03 valve02.value = "0"; //Update valve02 OFF state mcApi.sensor().sendPayload(valve02); //send state valve03.value = "1"; //Update valve03 ON state mcApi.sensor().sendPayload(valve03); //send state //Update valve03 is running valveStatus.value2 = "value03"; mcApi.variable().update(valveStatus); //Wait time Thread.sleep(delayTime); //Turn OFF valve03 and turn ON valve04 valve03.value = "0"; //Update valve03 OFF state mcApi.sensor().sendPayload(valve03); //send state valve04.value = "1"; //Update valve04 ON state mcApi.sensor().sendPayload(valve04); //send state //Update valve04 is running valveStatus.value3 = "value04"; mcApi.variable().update(valveStatus); //Wait time Thread.sleep(delayTime); //Turn OFF valve04 and turn ON valve05 valve04.value = "0"; //Update valve04 OFF state mcApi.sensor().sendPayload(valve04); //send state valve05.value = "1"; //Update valve05 ON state mcApi.sensor().sendPayload(valve05); //send state //Update valve05 is running valveStatus.value4 = "value05"; mcApi.variable().update(valveStatus); //Wait time Thread.sleep(delayTime); //Turn OFF valve05 and turn ON valve06 valve05.value = "0"; //Update valve05 OFF state mcApi.sensor().sendPayload(valve05); //send state valve06.value = "1"; //Update valve06 ON state mcApi.sensor().sendPayload(valve06); //send state //Update valve06 is running valveStatus.value5 = "value06"; mcApi.variable().update(valveStatus); //Wait time Thread.sleep(delayTime); //Turn OFF valve06 and turn ON valve07 valve06.value = "0"; //Update valve06 OFF state mcApi.sensor().sendPayload(valve06); //send state valve07.value = "1"; //Update valve07 ON state mcApi.sensor().sendPayload(valve07); //send state //Update valve06 is running valveStatus.value6 = "value07"; mcApi.variable().update(valveStatus); //Wait time Thread.sleep(delayTime); //Turn OFF valve07 and turn ON valve08 valve07.value = "0"; //Update valve07 OFF state mcApi.sensor().sendPayload(valve07); //send state valve08.value = "1"; //Update valve08 ON state mcApi.sensor().sendPayload(valve08); //send state //Update valve07 is running valveStatus.value7 = "value08"; mcApi.variable().update(valveStatus); //Wait time Thread.sleep(delayTime); //Turn OFF valve08 and turn OFF master valve valve08.value = "0"; //Update valve08 OFF state mcApi.sensor().sendPayload(valve08); //send state masterValve.value = "0"; //Update master valve OFF state mcApi.sensor().sendPayload(masterValve); //send state //Update not running valveStatus.value = "stopped"; valveStatus.value2 = "-"; mcApi.variable().update(valveStatus); mcApi.logger().debug("Loop Through Valve Script Completed..."); }else{ mcApi.logger().warn("Loop Through Valve Script is already running..."); } }
-
What am I doing wrong? I am posting the Nodes and Sensors just incase...
-
@Emenike Can you post your
UID Tags
andVariables repository
page?