Setting up pytomation and arduino

72 views
Skip to first unread message

Ronnie Evans

unread,
Feb 22, 2016, 8:48:41 AM2/22/16
to pytomation
Hi everyone. I am new to pytomation and python but have been working with arduino and linux for years. My plan is to integrate pytomation in to an arduino home control system that I already have so I can use the Web interface and app control. I know that at the moment the arduino driver supports raw i/o control but I'm confident that I can get the arduino to do whatever I want with the commands coming to it. I however have no idea what I'm doing in the python part. There are some good examples but they use other devices than just an arduino and I'm not sure what is what yet. As I learn more about the software I may add more device types.

I would like to know if anyone has a very simple arduino only example the configuration file and myhouse file? It wouldn't hurt if it included the use of the Webserver.

Thanks in advance for any help
Ronnie

George Farris

unread,
Feb 22, 2016, 12:45:05 PM2/22/16
to pytom...@googlegroups.com
Greetings,

Here is an example of using the uno.

Make sure you import the Arduino modules in your instance file:

from pytomation.interfaces import Serial, Arduino and all other modules
required 

# Configure the interface
uno = Arduino(Serial('/dev/ttyACM0', 9600))

#Define I/O points.
uno.setChannel('ADIC')
uno.setChannel('ADON')
uno.setChannel('AAIO')

#Use in a Light
l_bedroom = Light(address='ADIC', 
            devices=(uno),
            name='Master Bedroom Light')


There is documentation in the pytomation/interfaces/arduino.py file

Cheers
George

George Farris

unread,
Feb 22, 2016, 12:58:35 PM2/22/16
to pytom...@googlegroups.com
Did you look at this:

http://www.pytomation.com/home/documentation/interfaces/arduino

The docs on the Pytomation web site.




On Mon, 2016-02-22 at 05:48 -0800, Ronnie Evans wrote:

George Farris

unread,
Feb 22, 2016, 1:07:31 PM2/22/16
to pytom...@googlegroups.com
Hey Ronnie,

Sorry to flood you with email:-)  If you have any suggestions, code or
documentation improvements please feel free to send them to me and I'll add
it.  Documentation is a work in progress and it can always be better with
more complete examples etc.

Cheers
George


Ronnie Evans

unread,
Feb 22, 2016, 2:26:33 PM2/22/16
to pytomation
Thanks for the quick reply George. Yes I had found and read that article. I will give it another read after work and using your example I will experiment the the uno some more. I will document things as I go I plan to make a how to of an article to explain some things I'm useing for people who may be wanting to do a similar project.

Many thanks
Ronnie

George Farris

unread,
Feb 22, 2016, 2:56:15 PM2/22/16
to pytom...@googlegroups.com
One thing to keep in mind with Pytomation.

It is great to define and use Lights, Motion sensors, Contacts etc and do
standard things such as timers and other logic.  The MainLoop is what makes
it really quite powerful because you can do thing there that can't be done
with the regular Pytomation definitions.

Here is a copy of my instance file where I do additional stuff with the
MainLoop.

George
seaview.py

Jason Sharpee

unread,
Feb 22, 2016, 3:05:12 PM2/22/16
to pytom...@googlegroups.com

George, thanks for sharing your file.  Haven't looked at it in a while.

  In my newer platform I added an SMTP object / notification object that can be mapped to as well, maybe something like that should be created/ported in pytomation? https://github.com/zonyl/netomity/blob/master/NetomityTests/Devices/NotificationTests.cs

Welcome to the platform Ronnie!
-J

--
You received this message because you are subscribed to the Google Groups "pytomation" group.
To unsubscribe from this group and stop receiving emails from it, send an email to pytomation+...@googlegroups.com.
To post to this group, send email to pytom...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Ronnie Evans

unread,
Feb 23, 2016, 8:33:35 PM2/23/16
to pytomation
Ok I have pytomation installed (i think correctly). I have installed in the default location with all of the dependencies from requirements.txt satisfied. 

I was wondering if I needed to restart the computer after a change to the code or if i can just restart the script?
When i try to restart the process using "/etc/init.d/pytomation restart" I get "failed to kill 3045: No such process"


 I have the uno driver working (tested by sending values via serial monitor). 

I haven't tried playing with the web interface except to simply try to view it and i get a connection refused error (with instance file examples). 

I made a new instance Myhouse.py based on the code from the first response .


import select
from pytomation.interfaces import Arduino, Serial, Command

from pytomation.devices import Door, Light 


# Configure the interface 
uno = Arduino(Serial('/dev/ttyACM0', 9600)) 

#Define I/O points. 
uno.setChannel('ADIC') 
uno.setChannel('ADON') 


#Use in a Light and Door
d_bedroom = Door(address='ADIC',  
            devices=(uno), 
            name='Master Bedroom Door')
l_bedroom = Light(address='ADON',  
            devices=(uno), 
            name='Master Bedroom Light') 



I guess its my ignorance of python thats holding me up here. From arduino I would expect the code to have at least something like

if (d_bedroom==HIGH) {
    digitalWrite(l_bedroom, HIGH);
  }
 else {
    digitalWrite( l_bedroom, LOW);
  }

or something in order to make a change based on the state of the door. Where are these in pytomation?

George Farris

unread,
Feb 23, 2016, 11:52:00 PM2/23/16
to pytom...@googlegroups.com
Oh yeah right, sorry I need to fix the install script.  That probably won't work.

To begin it's a good idea to just change to the directory where Pytomation is installed and run it like so:

python2 ./pytomation.py



On Tue, 2016-02-23 at 17:33 -0800, Ronnie Evans wrote:
Ok I have pytomation installed (i think correctly). I have installed in the default location with all of the dependencies from requirements.txt satisfied. 

I was wondering if I needed to restart the computer after a change to the code or if i can just restart the script?
When i try to restart the process using "/etc/init.d/pytomation restart" I get "failed to kill 3045: No such process"


 I have the uno driver working (tested by sending values via serial monitor). 

I haven't tried playing with the web interface except to simply try to view it and i get a connection refused error (with instance file examples). 

I made a new instance Myhouse.py based on the code from the first response .


import select
from pytomation.interfaces import Arduino, Serial, Command


add this:  PytoWebSocketServer, HTTP to your import line so it looks like so:

from pytomation.interfaces import Arduino, Serial, Command, PytoWebSocketServer, HTTP


from pytomation.devices import Door, Light 




Now add the webserver with this line:

websocket = PytoWebSocketServer()


You should now be able to connect to http://localhost:8080 and give it the default user and pass from the config.py file
You should then be able to turn devices on and off from the browser.




# Configure the interface 
uno = Arduino(Serial('/dev/ttyACM0', 9600)) 

#Define I/O points. 
uno.setChannel('ADIC') 
uno.setChannel('ADON') 


#Use in a Light and Door
d_bedroom = Door(address='ADIC',  
            devices=(uno), 
            name='Master Bedroom Door')
l_bedroom = Light(address='ADON',  
            devices=(uno), 
            name='Master Bedroom Light') 


You automate this by adding the door device to the Light like so:

l_bedroom = Light(address='ADON',
devices=(uno,d_bedroom),
name='Master Bedroom Light')

Notice the devices line in the Light, that will automatically turn the Light on and off when the door contact changes




I guess its my ignorance of python thats holding me up here. From arduino I would expect the code to have at least something like

if (d_bedroom==HIGH) {
    digitalWrite(l_bedroom, HIGH);
  }
 else {
    digitalWrite( l_bedroom, LOW);
  }


This kind of logic only happens in the MainLoop, in many cases you don't require it.


Ronnie Evans

unread,
Feb 24, 2016, 5:26:58 PM2/24/16
to pytomation
When I run the script in terminal via python2 /pytomation.py or by dragging and dropping the file in terminal i get an error. So Im assuming that I still don't have all the dependencies installed but i don't know what is missing as it points to a few files.
Traceback (most recent call last):
  File "/home/pytomation/pytomation.py", line 4, in <module>
    from pytomation.common import config, pytomation_system
  File "/home/pytomation/pytomation/common/__init__.py", line 1, in <module>
    from .pytomation_system import *
  File "/home/pytomation/pytomation/common/pytomation_system.py", line 4, in <module>
    from ..utility.periodic_timer import PeriodicTimer
  File "/home/pytomation/pytomation/utility/__init__.py", line 1, in <module>
    from .cron_timer import *
  File "/home/pytomation/pytomation/utility/cron_timer.py", line 12, in <module>
    from .periodic_timer import PeriodicTimer
  File "/home/pytomation/pytomation/utility/periodic_timer.py", line 4, in <module>
    from apscheduler.schedulers.background import BackgroundScheduler
  File "/usr/local/lib/python2.7/dist-packages/apscheduler/schedulers/background.py", line 4, in <module>
    from apscheduler.schedulers.base import BaseScheduler
  File "/usr/local/lib/python2.7/dist-packages/apscheduler/schedulers/base.py", line 10, in <module>
    from tzlocal import get_localzone
ImportError: No module named tzlocal



George Farris

unread,
Feb 24, 2016, 6:01:38 PM2/24/16
to pytom...@googlegroups.com
You are missing the pytz module.

pip2 install pytz

or if pip is linked to pip2

pip install pytz

You may have both python2 and python3 on your system.  make sure you use
the correct pip.

George

Ronnie Evans

unread,
Feb 25, 2016, 7:49:05 PM2/25/16
to pytomation
Today I started with a clean install of mint 17.1 and some study on python. After installing pip and the dev packages I installed everything in the requirements.txt and ran pip2 list the result was.

$ pip2 list
APScheduler (3.0.5)
apt-xapian-index (0.45)
apturl (0.4.1ubuntu4)
argparse (1.2.1)
BeautifulSoup (3.2.1)
bitsets (0.7.10)
chardet (2.0.1)
colorama (0.2.5)
command-not-found (0.3)
concepts (0.7.10)
configglue (1.1.2)
debtagshw (0.1)
defer (1.0.6)
dirspec (13.10)
dnspython (1.11.1)
duplicity (0.6.23)
features (0.5.5)
feedparser (5.1.3)
fileconfig (0.5.2)
gevent (1.0.2)
gevent-websocket (0.9.5)
graphviz (0.4.10)
greenlet (0.4.9)
html5lib (0.999)
httplib2 (0.8)
interruptingcow (0.6)
lockfile (0.8)
lxml (3.3.3)
Mako (0.9.1)
MarkupSafe (0.18)
mock (1.3.0)
nemo-emblems (0.0.1)
numpy (1.8.2)
oauthlib (0.6.1)
oneconf (0.3.7)
PAM (0.4.2)
paramiko (1.10.1)
pexpect (3.1)
phue (0.8)
Pillow (2.3.0)
pip (1.5.4)
piston-mini-client (0.7.5)
protobuf (2.5.0)
pycrypto (2.6.1)
pycups (1.9.66)
pycurl (7.19.3)
pyephem (3.7.6.0)
pygobject (3.12.0)
pygooglevoice (0.5, /home/ronnie/pytomation/pytomation/src/pygooglevoice)
pyharmony (1.0, /home/ronnie/pytomation/pytomation/src/pyharmony)
pyinotify (0.9.4)
pyjnest (0.6, /home/ronnie/pytomation/pytomation/src/pyjnest)
pyOpenSSL (0.13)
pyserial (2.6)
pysmbc (1.0.14.1)
python-apt (0.9.3.5)
python-debian (0.1.21-nmu2ubuntu2)
pytz (2015.7)
pyxdg (0.25)
reportlab (3.0)
requests (2.2.1)
sessioninstaller (0.0.0)
setuptools (3.3)
six (1.5.2)
system-service (0.1.6)
Twisted-Core (13.2.0)
Twisted-Names (13.2.0)
Twisted-Web (13.2.0)
tzlocal (1.2)
ujson (1.35)
urllib3 (1.7.1)
uTidylib (0.2)
wsaccel (0.6.2)
wsgiref (0.1.2)
zope.interface (4.0.5)


Now I run the script "$ sudo python2 ./pytomation.py"  and I get a new error

$ sudo python2 ./pytomation.py

Traceback (most recent call last):
  File "./pytomation.py", line 4, in <module>

    from pytomation.common import config, pytomation_system
  File "/home/ronnie/pytomation/pytomation/pytomation/common/__init__.py", line 1, in <module>
    from .pytomation_system import *
  File "/home/ronnie/pytomation/pytomation/pytomation/common/pytomation_system.py", line 4, in <module>
    from ..utility.periodic_timer import PeriodicTimer
  File "/home/ronnie/pytomation/pytomation/pytomation/utility/__init__.py", line 1, in <module>
    from .cron_timer import *
  File "/home/ronnie/pytomation/pytomation/pytomation/utility/cron_timer.py", line 12, in <module>
    from .periodic_timer import PeriodicTimer
  File "/home/ronnie/pytomation/pytomation/pytomation/utility/periodic_timer.py", line 4, in <module>
    from apscheduler.schedulers.background import BackgroundScheduler
  File "/usr/local/lib/python2.7/dist-packages/apscheduler/schedulers/background.py", line 4, in <module>
    from apscheduler.schedulers.base import BaseScheduler
  File "/usr/local/lib/python2.7/dist-packages/apscheduler/schedulers/base.py", line 15, in <module>
    from apscheduler.executors.pool import ThreadPoolExecutor
  File "/usr/local/lib/python2.7/dist-packages/apscheduler/executors/pool.py", line 2, in <module>
    import concurrent.futures
ImportError: No module named concurrent.futures


After googleing around i found that i should install the features package so i did and still the same error. I did notice apscheduler is APScheduler I don’t know if that has anything to do with it but it is referenced in the error. Any idea on what’s missing now?

George Farris

unread,
Feb 25, 2016, 10:53:40 PM2/25/16
to pytom...@googlegroups.com
Hmm try 

pip2 install futures

Also you shouldn't run pytomation with sudo, however, now that you have
done so you should maybe remove the pyto.log file before running it
without sudo.


It's been a while since I tried to install Pytomation on anything but
Arch and Raspbian so this is good information.  

If it works we'll add stuff like this to the docs and the FAQ.

Thanks
George

Ronnie Evans

unread,
Feb 26, 2016, 5:21:34 PM2/26/16
to pytomation
Ok that worked. Now pytomation and the web socket are running. Using the web interface i can click the on and off button and see the rx led on the arduino flashes so i know its sending to the board. But the led on pin 13 never lights. Im not sure if my instance is correct but I think it follows the examples I have seen.
Also when i send AHN or ALN to the arduino with arduino serial monitor it works.
I run it with sudo because I don't have the permissions for serial setup.

My instance is


import select

from pytomation.interfaces import Arduino, Serial, Command, PytoWebSocketServer, HTTP

from pytomation.devices import Door, Light
websocket = PytoWebSocketServer()


# Configure the interface
uno = Arduino(Serial('/dev/ttyACM0', 9600))

#Define I/O points.
 
uno.setChannel('ADON')


#Use in a Light

l_bedroom = Light(address='ADON', 
            devices=(uno),
            name='Master Bedroom Light')


 
Thanks again for all the help

George Farris

unread,
Feb 26, 2016, 6:04:38 PM2/26/16
to pytom...@googlegroups.com
Is it a UNO?  Did you upload the sketch to the Arduino from
pytomation/uno_sketch?

You can change the permissions on the port with:

sudo chmod 666 /dev/ttyS0 or /dev/ttyUSB0 or /dev/ttyACM0

You can set this so it is always 666 by creating a file called:

/etc/udev/rules.d/99-local.rules and add these lines
save it and make it executable with: sudo chmod +x 99-local.rules

#
# Locally defined rules.
#
KERNEL=="tty[A-Z]*", GROUP="uucp", MODE="0666"

Note some distros use "uucp" and some use "dialout" just list your serial
port with ls -l /dev/ttyUSB0, for example and you will see which group to
use.

Arch uses "uucp"

Now reboot or update udev with:  sudo udevadm control --reload-rules

Cheers
George

Ronnie Evans

unread,
Feb 26, 2016, 6:10:06 PM2/26/16
to pytomation
Yes it's an uno.
Yes I uploaded the sketch. I tested it by sending it values via the arduino serial monitor and watched it turn on and off.

Thanks for the info on serial.

George Farris

unread,
Feb 26, 2016, 6:27:09 PM2/26/16
to pytom...@googlegroups.com
It's been a while since I used the UNO, sure you have the led plugged into
the correct pin?

Also in your pytomation/common/config.py file you can set logging on for
the arduino and then view things in the pylog.log file in real time with:
"tailf pylog.log"

Just uncomment the arduino line to get logging.

George

George Farris

unread,
Feb 26, 2016, 6:31:47 PM2/26/16
to pytom...@googlegroups.com
Sorry missed the point where you said you tested the LED already.

Hang in there, it's been a while since I wrote the driver, something may
have changed.  I'll see if I can test but also if you can look at the log
that would be great.

Thanks for your patience, ya never learn anything if it just works right:-)

George


On Fri, 2016-02-26 at 15:10 -0800, Ronnie Evans wrote:

George Farris

unread,
Feb 26, 2016, 6:47:46 PM2/26/16
to pytom...@googlegroups.com
BTW you should include these in your from line with Light and Door

InterfaceDevice, Generic, StateDevice, State, Attribute

George


On Fri, 2016-02-26 at 15:10 -0800, Ronnie Evans wrote:

George Farris

unread,
Feb 26, 2016, 10:49:32 PM2/26/16
to pytom...@googlegroups.com
Hey Ronnie,

Your addressing on your board is wrong, it does have an example in the
docs on the site but I know now it needs to be shown more prominently.

here is the correct way to address the device:

#Define I/O points. 
 
uno.setChannel('ADON')   <- This is correct.


#Use in a Light 

l_bedroom = Light(address='ADON',     <-- this is wrong
            devices=(uno), 
            name='Master Bedroom Light') 


address="AN" is what you want.

l_bedroom = Light(address='AN',     <-- this is correct
            devi
ces=(uno), 
            name='Master Bedroom Light') 



On Fri, 2016-02-26 at 15:10 -0800, Ronnie Evans wrote:

Ronnie Evans

unread,
Feb 27, 2016, 3:26:35 AM2/27/16
to pytomation
That was it. Now the Web interface controls the arduino just fine :)
I played around with taking an input and setting an output ex. uno, d_bedroom it worked but the output doesn't always respond to a change of input. I suspect it has to do with contact bounce at the input pin but I haven't investigated it further. When I discover more I will post what I find.

Awesome software BTW and again many thanks for the help

Ronnie Evans

unread,
Feb 28, 2016, 4:44:56 PM2/28/16
to pytomation
Just writing as an update but i also have a question.
The problem of some commands not responding was a bad USB cable.
I have 3 working unos on 3 usb ports one has 2 ssr's one has a motion detector and the other is running a modified uno sketch to be an ir blaster. (just one tv for now).

My questions are what is the preferred method of ending the script and restarting?
How to make the light ignore the md when it is turned on already and the md says to go off?
How to properly add a delay to that keeps the light on after the md says still?


 When using the following the state is held at motion for 30 extra seconds but only if the command is sent from the web interface. The md still turns it on and off like it was with out it.

m_livingroom = Motion(address='AC', 
            devices=(uno),
         delay={
                         Attribute.COMMAND: Command.STILL,
                         Attribute.SECS: 30,
                         },
        name='Livingroom Motion',
 


I have also tried the following but it didn't work either. This time there was no affect to the normal operation.

l_livingroom = Light(address='AN', 
             devices=(uno2, m_livingroom),
         trigger=({
                'command': Command.ON,
                'mapped': Command.OFF,
                'source': m_livingroom,
                'secs': 30,
            },),
             name='Livingroom Light',
         commands=[Command.ON, Command.OFF])


My uno code for the moment for turning on and off my magnavox tv. Just in case it can help someone. With an ir led on pin 3 you can send AHC or ALC to the uno and it will turn on or off the tv to change the brand / model / device just change  irsend.sendRC5(2060, 12); to the correct code.

#include <IRremote.h>

IRsend irsend;
int board = 'A';    //First board 'A', second borad 'B' etc  pin 13 will blink board address
                        //after reset 1 blink for A, 2 for B etc
char id[] = "PYARUNO";    // returned when board is sent a '?'

int cmd;
int chn;        //channel
int pin;        //actual pin on arduino
int eom = '.';           // end of message
int error = '?';         // error or unknown response
int reset = '!';         // board rest or power up


// this holds the direction of the I/O
// 0 = digital In, 1 = digital Out
// 2 = analog In, analog Out is not supported yet.
int ioPinsDirection[19];
int ioPinsValue[19];

void setup()
{
    Serial.begin(9600);
    Serial.write(reset);    // Send reset '!' to signal we are up and running
 
}

void loop()
{
    int direction;
    char avalue[5];

    if (Serial.available() > 0)
    {
        // right now we handle one board which is board 'A'
    char rx_cmd = Serial.read();
        if (rx_cmd == board )
    {
        //Serial.write("Board A\n");
            while (Serial.available() == 0)
            { delayMicroseconds(100); }
            cmd = Serial.read();
            //Serial.write(cmd);
           
            //Serial.write(" Command\n");
        //Serial.print(sin);
        switch (cmd)
        {
            case 72:        // 'H' set digital pin HIGH
                    while (Serial.available() == 0)
                    { delayMicroseconds(100); }
                    chn = Serial.read();
                    pin = chn - 65;
                    if (pin == 2)
                    {
                      irsend.sendRC5(2060, 12);
                       delay(40);
                    }else
                      Serial.write(error);
                    break;             

            case 76:        // 'L' set digital pin LOW
                    while (Serial.available() == 0)
                    { delayMicroseconds(100); }
                    chn = Serial.read();
                    pin = chn - 65;
                    if (pin == 2)
                    {
                      irsend.sendRC5(2060, 12);
                       delay(40);
                    } else
                      Serial.write(error);
                    break;              

           
                
        }
   
    }}}

George Farris

unread,
Feb 29, 2016, 11:36:18 AM2/29/16
to pytom...@googlegroups.com
On Sun, 2016-02-28 at 13:44 -0800, Ronnie Evans wrote:

> My questions are what is the preferred method of ending the script and
> restarting? 
>

There is no preferred way, when I'm testing I just kill it with ctrl-c,
otherwise I edit and then use the pytomation.sh file and kill it with the
PID that it sets.


Have you had a good read through the docs?  One thing to keep in mind is
some device only response to commands they know about.

> How to make the light ignore the md when it is turned on already and the
> md says to go off?


For this you can use the "ignore" attribute.


>  When using the following the state is held at motion for 30 extra
> seconds but only if the command is sent from the web interface. The md
> still turns it on and off like it was with out it.
>
> > m_livingroom = Motion(address='AC',  
> >             devices=(uno),
> >          delay={
> >                          Attribute.COMMAND: Command.STILL,
> >                          Attribute.SECS: 30,
> >                          }, 
> >         name='Livingroom Motion',
>  

You should probably put the delay on the device you are controlling with
the motion detector.  Also delay takes a source attribute.


>
> I have also tried the following but it didn't work either. This time
> there was no affect to the normal operation.
>
> > l_livingroom = Light(address='AN',  
> >              devices=(uno2, m_livingroom),
> >

Here your trigger command is looking for an 'ON' from a motion device that
will only give you a 'STILL'.  Change Command.ON to Command.STILL


> >          trigger=({
> >                 'command': Command.ON,
> >                 'mapped': Command.OFF,
> >                 'source': m_livingroom,
> >                 'secs': 30,
> >             },),
> >              name='Livingroom Light',
> >

Not sure what this is for, you should delete it.

> >          commands=[Command.ON, Command.OFF])
>


Thanks for this.
Cheers
George

Ronnie Evans

unread,
Mar 1, 2016, 10:45:33 AM3/1/16
to pytomation
Hi george,
Yes I have read through the docs, but will read everything again. I guess my problem was knowing where to put the items to make them efective. After figuring it out it makes sense.

About the ignore attribute, I have been able to make it work with the light switch. I just wasn't sure what device to ignore to make it effective for the Web interface.

commands=[Command.ON, Command.OFF])
I found this in an example. Used to only show those options on Web interface.
I did delete tho.

Thanks
Ronnie

George Farris

unread,
Mar 1, 2016, 11:54:52 AM3/1/16
to pytom...@googlegroups.com
Hi Ronnie,

Aw yes, the age old documentation problem:-)  I have been slowly working on
them but there is always something else.  I am completely open to help or
suggestions here.  The problem with developers doing dos is making
assumptions, so any help is appreciated.

Do you remember where you found the commands=[Commands.ON, Commands.OFF],
I'll see if it can be explained or removed if not required.

George

Jason Sharpee

unread,
Mar 1, 2016, 1:06:04 PM3/1/16
to pytom...@googlegroups.com
If you look under the tests folder I generally have every scenario I conceived of in there with some inline comments and obvious test example.

-J


--
You received this message because you are subscribed to the Google Groups "pytomation" group.
To unsubscribe from this group and stop receiving emails from it, send an email to pytomation+...@googlegroups.com.
To post to this group, send email to pytom...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.



--
Jason Sharpee

George Farris

unread,
Mar 1, 2016, 1:53:30 PM3/1/16
to pytom...@googlegroups.com
I'm going to look at putting some checks in on devices that take a source
and make sure the command is correct, then I can spit it out in the log. 

So if you have a trigger command and a motion source but use a Command.ON
instead of a Command.STILL, it will error out.

Unless someone wants to write a lint program for Pytomation:-)

George




On Tue, 2016-03-01 at 07:45 -0800, Ronnie Evans wrote:
Reply all
Reply to author
Forward
0 new messages