HomeGenie Forum
General Category => Troubleshooting and Support => Topic started by: vortmax on March 07, 2016, 01:36:53 AM
-
I have a somewhat new problem that is baffling me.
First of all, when I trigger any program that turns multiple lights on or off, I'm getting a 10 to 20 second delay between them. This happens if I manually trigger the program or have it trigger automatically. Also, occasionally one light will start to slowly cycle on and off after the program triggers, as if it's being repeatedly commanded on, off, on, off, etc....
The only thing I've added were three programs. One that lungs my wife's and my phones and sets a "isHome" parameter (but doesn't actually do anything zwavey), and two more that turn off lights when "isHome" goes to false and turns them on if "isHome" becomes true. Both of the last two scripts are wizard scripts and I've debugged the first to make sure it wasn't glitching and spamming a bunch of commands.
The only other oddity I've seen are time out errors that are new since I updated a while back, some reoccurring error with the sql database (that I think broke energy monitoring).
Anyone have an idea of what could be happening or how to figure it out?
-
Hi,
First of all, when I trigger any program that turns multiple lights on or off, I'm getting a 10 to 20 second delay between them. This happens if I manually trigger the program or have it trigger automatically.
On my side, this kind of stuff come when i start the whole system, but i use raspbian jessie which is not re commended for now ;)
Also, occasionally one light will start to slowly cycle on and off after the program triggers, as if it's being repeatedly commanded on, off, on, off, etc....
My familly tell me that kind of things on my side too, but i didn't see ... Not often, perhaps one time ...
Anyone have an idea of what could be happening or how to figure it out?
Activate the log and take a look when something like that append ... But perhaps you already did ...
-
This is no help to you but I'd love to see the code that detects when your phone is in the house!! That sounds pretty cool!!
-
That's a built-in APP. I think it's the "Ping Me At Home" code, but I could be wrong. I believe it looks for when your phone returns a ping at it's assigned IP address.
EDIT: Here's an updated version that knows multiple people.
http://www.homegenie.it/forum/index.php?topic=1174 (http://www.homegenie.it/forum/index.php?topic=1174)
-
This is no help to you but I'd love to see the code that detects when your phone is in the house!! That sounds pretty cool!!
Here's the code. I roughly based it on the included "pingme" code. It doesn't work with the alarm system...it just always pings and raises "home" or "notHome" events. I also made it able to discern my wife and my phones, so it knows who's home. I have a range extender that mangles MAC addresses, so each person has 2 possible IP's, which is why the check looks funny. I'm working now on making it more generic....I think I can pull it off with a virtual module.
Program Code:
int missed_ping_matt = 0;
int missed_ping_laura = 0;
bool[] isAlive = new bool[4]{ false, false, false, false };
int loop_count = 0;
bool first_run = true;
while (Program.IsEnabled)
{
isAlive[0] = false;
isAlive[1] = false;
isAlive[2] = false;
isAlive[3] = false;
int max_missed = 0;
Int32.TryParse(Program.InputField("PhoneScan.MissedAttempts").Value, out max_missed );
//Ping all the addresses
if (Program.InputField("PhoneScan.Address1").Value != "")
{
isAlive[0] = Net.Ping(Program.InputField("PhoneScan.Address1").Value);
}
if (Program.InputField("PhoneScan.Address2").Value != "")
{
isAlive[1] = Net.Ping(Program.InputField("PhoneScan.Address2").Value);
}
if (Program.InputField("PhoneScan.Address3").Value != "")
{
isAlive[2] = Net.Ping(Program.InputField("PhoneScan.Address3").Value);
}
if (Program.InputField("PhoneScan.Address4").Value != "")
{
isAlive[3] = Net.Ping(Program.InputField("PhoneScan.Address4").Value);
}
//----------------------------------------------------------------------------
// Check for missed pings
//if both addresses are down, the phone is not in the house
if (isAlive[0] == false && isAlive[1] == false)
{
//if we think the phone is alive
if( Program.Parameter("PhoneScan.MattHome").Value == "true" )
{
//increment the ping counter
missed_ping_matt++;
//if we exceed the missed ping threshold
if ( missed_ping_matt > max_missed )
{
//we are no longer home so set/alert the parameter
if( !first_run ) Program.RaiseEvent("PhoneScan.MattHome", "false", "Matt is not home"); else Program.Parameter("PhoneScan.MattHome").Value = "false";
//see if we need to raise the "empty house" event
if( Program.Parameter("PhoneScan.LauraHome").Value == "false" )
{
//Both people are gone, so raise/set house empty
if( !first_run ) Program.RaiseEvent("PhoneScan.HouseEmpty", "true", "The house is empty"); else Program.Parameter("PhoneScan.HouseEmpty").Value = "true";
}
}
}else{
//the phone is still not home, like we thought
missed_ping_matt = 0;
}
//Else a phone has been detected
}else{
missed_ping_matt = 0;
//if we think the phone isn't home
if( Program.Parameter("PhoneScan.MattHome").Value == "false" )
{
//The phone was detected, so update the parameter
if( !first_run ) Program.RaiseEvent("PhoneScan.MattHome", "true", "Matt is home"); else Program.Parameter("PhoneScan.MattHome").Value = "true";
//see if we need to raise the "someone home" event
if( Program.Parameter("PhoneScan.HouseEmpty").Value == "true" )
{
//If the house was empty, it isn't now
if( !first_run ) Program.RaiseEvent("PhoneScan.HouseEmpty", "false", "Someone is home"); else Program.Parameter("PhoneScan.HouseEmpty").Value = "false";
}
}
}
//--------------------------------------------------------------------------------------------------
// Laura's phone
//if both addresses are down, the phone is not in the house
if (isAlive[2] == false && isAlive[3] == false)
{
//if we think the phone is alive
if( Program.Parameter("PhoneScan.LauraHome").Value == "true" )
{
missed_ping_laura++;
//if we exceed the missed ping threshold
if ( missed_ping_laura > max_missed )
{
if( !first_run ) Program.RaiseEvent("PhoneScan.LauraHome", "false", "Laura is not home"); else Program.Parameter("PhoneScan.LauraHome").Value = "false";
//see if we need to raise the "empty house" event
if( Program.Parameter("PhoneScan.MattHome").Value == "false" )
{
//we are no longer home
if( !first_run ) Program.RaiseEvent("PhoneScan.HouseEmpty", "true", "The house is empty"); else Program.Parameter("PhoneScan.HouseEmpty").Value = "true";
}
}
}else{
//the phone is still not home, like we thought
missed_ping_laura = 0;
}
//Else a phone has been detected
}else{
missed_ping_laura = 0;
//if we think the phone isn't home
if( Program.Parameter("PhoneScan.LauraHome").Value == "false" )
{
if( !first_run ) Program.RaiseEvent("PhoneScan.LauraHome", "true", "Laura is home"); else Program.Parameter("PhoneScan.LauraHome").Value = "true";
//see if we need to raise the "someone home" event
if( Program.Parameter("PhoneScan.HouseEmpty").Value == "true" )
{
if( !first_run ) Program.RaiseEvent("PhoneScan.HouseEmpty", "false", "Someone is home"); else Program.Parameter("PhoneScan.HouseEmpty").Value = "false";
}
}
}
if( first_run ) first_run = false;
// Pause for PollRate seconds
int pause_int = 10;
Int32.TryParse(Program.InputField("PhoneScan.PollRate").Value, out pause_int );
Pause( pause_int );
}
Trigger Code:
Program.Setup( () => {
Program.AddInputField("PhoneScan.Address1", "", "IP address to ping #1");
Program.AddInputField("PhoneScan.Address2", "", "IP address to ping #2");
Program.AddInputField("PhoneScan.Address3", "", "IP address to ping #3");
Program.AddInputField("PhoneScan.Address4", "", "IP address to ping #4");
Program.AddInputField("PhoneScan.MissedAttempts", "", "Number of missed attempts to allow");
Program.AddInputField("PhoneScan.PollRate", "", "Interval to poll devices");
Program.Parameter("PhoneScan.MattHome").Value = "false";
Program.Parameter("PhoneScan.LauraHome").Value = "false";
Program.Parameter("PhoneScan.HouseEmpty").Value = "true";
});
return true;
-
Hi,
First of all, when I trigger any program that turns multiple lights on or off, I'm getting a 10 to 20 second delay between them. This happens if I manually trigger the program or have it trigger automatically.
On my side, this kind of stuff come when i start the whole system, but i use raspbian jessie which is not re commended for now ;)
Also, occasionally one light will start to slowly cycle on and off after the program triggers, as if it's being repeatedly commanded on, off, on, off, etc....
My familly tell me that kind of things on my side too, but i didn't see ... Not often, perhaps one time ...
Anyone have an idea of what could be happening or how to figure it out?
Activate the log and take a look when something like that append ... But perhaps you already did ...
I'm running this on an older PC running windows 7. I thought it was plenty powerful, but it might be underpowered.
I'm going to try the logging, but I haven't found a good, reliable way to reproduce the issue...which makes it huge pain to sort through logs and find the issue. Has anyone written a logfile parser to translate the zwave packets into a human readable format?
-
Hi,
I have the same problem with my installation on a RPI2. I have some z-wave radiator valves which I send the SetTemperature command after they wake up. I sent about six commands down to the valve and it took about 30 seconds to send all commands. After a reboot it lasts about 1,5 seconds. So as longer the Pi is up as longer it takes to send the commands. Also the duration between motion detection and turning on a light increases over the time.
My solution is to restart the application each day at midnight.
If there is a solution I would also be interested in.
br. Christian