Skip to content
  • MySensors
  • OpenHardware.io
  • Categories
  • Recent
  • Tags
  • Popular
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo
  1. Home
  2. My Project
  3. PhoneyTV for Vera is Here!

PhoneyTV for Vera is Here!

Scheduled Pinned Locked Moved My Project
34 Posts 6 Posters 27.2k Views 3 Watching
  • 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.
  • 5546dug5 5546dug

    @BulldogLowell yes I have v3.1 So I was wrong -at least consistent!
    I have Vera controller and at the moment My Sensors serial GW is connected ,

    The vera dashboard shows node for light on and off and that is really what I want. To start the lights remotely , I think using the reset locally (d2 to gnd?) may work but only if we are there

    BulldogLowellB Offline
    BulldogLowellB Offline
    BulldogLowell
    Contest Winner
    wrote on last edited by
    #24

    @5546dug said:

    The vera dashboard shows node for light on and off and that is really what I want.

    then you are there...

    is it working?

    1 Reply Last reply
    0
    • 5546dug5 Offline
      5546dug5 Offline
      5546dug
      wrote on last edited by
      #25

      no it is not

      1 Reply Last reply
      0
      • 5546dug5 Offline
        5546dug5 Offline
        5546dug
        wrote on last edited by
        #26

        @BulldogLowell I see in v3.1 pin d2 is called ' button pin' and is an' input' and 'pullup'
        (understand it is for the pushbutton use but even then it is only for a few sec. in my setup.)
        Also there is d13 defined as for the relay and used with the radio could that be an issue?

        How is the controller/GW telling the Phoney TV to change states? Do I need to run a wire from d2 (?) to gnd/vcc to create an interupt?
        I don't really need the button, but I will leave it there

        1 Reply Last reply
        0
        • 5546dug5 Offline
          5546dug5 Offline
          5546dug
          wrote on last edited by
          #27

          @BulldogLowell Just noticed your post is v3.1 lib 1.4.1 and I have lib 1.4

          That might be why I can't control from Vera ....then there is that d2 interrupt connection.

          BulldogLowellB 1 Reply Last reply
          0
          • 5546dug5 5546dug

            @BulldogLowell Just noticed your post is v3.1 lib 1.4.1 and I have lib 1.4

            That might be why I can't control from Vera ....then there is that d2 interrupt connection.

            BulldogLowellB Offline
            BulldogLowellB Offline
            BulldogLowell
            Contest Winner
            wrote on last edited by
            #28

            @5546dug

            hmmm, looking at the code I posted I see why you have a problem.

            Try this:

            /*
             * PhoneyTV v3.1.1
             *
             * This Sketch illuminates 6 sets of LED's in a random fashion as to mimic the
             * light eminating from a television.  It is intended to make an empty home,
             * or an empty section of a home, appear to be occupied by someone watching
             * TV.  As an alternative to a real television left on, this uses less than 1%
             * of the electrical energy.
             *
             * With the use of the MySensors plugin and gateway, PhoneyTV is intended to
             * be used with a controller (e.g. Vera or Raspberry PI).
             *
             * Sketch does not use any delays to create the random blinking as a way to
             * assure that communication back to the gateway is as unaffected as possible.
             *
             * You can adjust the length of the blink interval and its "twitchyness" by
             * modifying the random number generators, if you prefer more/less 'motion' in
             * in your unit.  The lines are highlighted in the code, play around to create the
             * random effect you like.
             *
             * Sketch takes advantage of available PWM on pins 3, 5 & 6 using the white/blue LEDs
             * to allow fluctuations in the intensity of the light, enhancing the PhoneyTV's
             * realistic light effects.
             *
             * Created 12-APR-2014
             * Free for distrubution
             * Credit should be given to MySensors.org for their base code for relay control
             * and for the radio configuration.  Thanks Guys.
             *
             * 29-May-2014
             * Version 2:  Simplified the code, removing all redundant relay setup from original
             * code.  Added an on/off momentary pushputton option to be set up on pin 2.  Inproved
             * the dark dips for longer duration (can be configured) at intervals.
             *
             * 6-Jun-2015
             * Version 3.1
             * Updated for MySensors V1.4.1
             * Contributed by Jim (BulldogLowell@gmail.com) Inspired by Josh >> Deltanu1142@gmail.com
             */
            //
            #include <MySensor.h>
            #include <SPI.h>
            #include <Bounce2.h>
            //
            #define SKETCH_NAME "PhoneyTV"
            #define SKETCH_VERSION "3.1.1"
            //
            #define RADIO_RESET_DELAY_TIME 20
            //
            #define BUTTON_PIN  2  // Arduino Digital I/O pin number for button 
            #define CHILD_ID 1   // 
            #define RADIO_ID 5  //AUTO
            //
            #define DEBUG_ON
            //
            #ifdef DEBUG_ON
            #define DEBUG_PRINT(x)   Serial.print(x)
            #define DEBUG_PRINTLN(x) Serial.println(x)
            #define SERIAL_START(x)  Serial.begin(x)
            #else
            #define DEBUG_PRINT(x)
            #define DEBUG_PRINTLN(x)
            #define SERIAL_START(x)
            #endif
            //
            MySensor gw;
            MyMessage msg(CHILD_ID, V_LIGHT);
            //
            byte ledPin3 =  3;      // White using PWM
            byte ledPin4 =  4;      // Red
            byte ledPin5 =  5;      // Blue using PWM
            byte ledPin6 =  6;      // Blue using PWM
            byte ledPin7 =  7;      // Green
            byte ledPin8 =  8;      // White (No PWM)
            //
            Bounce debouncer = Bounce();
            byte oldValue = 0;
            boolean state = false;
            boolean oldState = false;
            int dipInterval = 10;
            int darkTime = 250;
            unsigned long currentDipTime;
            unsigned long dipStartTime;
            unsigned long currentMillis;
            byte ledState = LOW;
            unsigned long previousMillis = 0UL;
            byte led = 5;
            unsigned long interval = 2000UL;
            int twitch = 50;
            int dipCount = 0;
            int analogLevel = 100;
            boolean timeToDip = false;
            boolean gotAck=false;
            //
            void setup()
            {
              SERIAL_START(115200);
              pinMode(ledPin3, OUTPUT);
              pinMode(ledPin4, OUTPUT);
              pinMode(ledPin5, OUTPUT);
              pinMode(ledPin6, OUTPUT);
              pinMode(ledPin7, OUTPUT);
              pinMode(ledPin8, OUTPUT);
              pinMode(BUTTON_PIN, INPUT_PULLUP);
              //
              debouncer.attach(BUTTON_PIN);
              debouncer.interval(50);
              //
              gw.begin(incomingMessage, RADIO_ID, true, 0);  // configured as a repeating node!!
              gw.sendSketchInfo(SKETCH_NAME, SKETCH_VERSION);
              gw.wait(RADIO_RESET_DELAY_TIME);
              gw.present(CHILD_ID, S_LIGHT);
              gw.wait(RADIO_RESET_DELAY_TIME);
              while(!gw.send(msg.set(state), false))
              {
                gw.wait(RADIO_RESET_DELAY_TIME);
              }
              gw.wait(RADIO_RESET_DELAY_TIME);
              DEBUG_PRINTLN(F("Sensor Presentation Complete"));
            }
            //
            void loop()
            {
              gw.process();
              debouncer.update();
              byte value = debouncer.read();
              if (value != oldValue && value == 0)
              {
                state = !state;
                while(!gotAck)
                {
                  gw.send(msg.set(state), true);
                  gw.wait(RADIO_RESET_DELAY_TIME);
                }
                gotAck = false;
                DEBUG_PRINT(F("State Changed to:"));
                DEBUG_PRINTLN(state? F("PhoneyTV ON") : F("PhoneyTV OFF"));
              }
              oldValue = value;
              if (state)
              {
                if (timeToDip == false)
                {
                  currentMillis = millis();
                  if (currentMillis - previousMillis > interval)
                  {
                    previousMillis = currentMillis;
                    interval = random(750, 4001); //Adjusts the interval for more/less frequent random light changes
                    twitch = random(40, 100); // Twitch provides motion effect but can be a bit much if too high
                    dipCount = dipCount++;
                  }
                  if (currentMillis - previousMillis < twitch)
                  {
                    led = random(3, 9);
                    analogLevel = random(50, 255); // set the range of the 3 pwm leds
                    ledState = !ledState;
                    switch (led) //for the three PWM pins
                    {
                      case 3:
                        pwmWrite();
                        break;
                      case 5:
                        pwmWrite();
                        break;
                      case 6:
                        pwmWrite();
                        break;
                      default:
                        digitalWrite(led, ledState);
                    }
                    if (dipCount > dipInterval)
                    {
                      timeToDip = true;
                      dipCount = 0;
                      dipStartTime = millis();
                      darkTime = random(50, 150);
                      dipInterval = random(5, 250); // cycles of flicker
                    }
                  }
                }
                else
                {
                  DEBUG_PRINTLN(F("Dip Time"));
                  currentDipTime = millis();
                  if (currentDipTime - dipStartTime < darkTime)
                  {
                    for (int i = 3; i < 9; i++)
                    {
                      digitalWrite(i, LOW);
                    }
                  }
                  else
                  {
                    timeToDip = false;
                  }
                }
              }
              else
              {
                if (state != oldState)
                {
                  for (int i = 3; i < 9; i++)
                  {
                    digitalWrite(i, LOW);
                  }
                }
              }
              oldState = state;
            }
            //
            void incomingMessage(const MyMessage &message)
            {
              if (message.isAck())
              {
                DEBUG_PRINTLN(F("This is an ack from gateway"));
                gotAck = true;
              }
              if (message.type == V_LIGHT)
              {
                state = message.getBool();
                DEBUG_PRINT(F("Incoming change for sensor... New State = "));
                DEBUG_PRINTLN(state? F("ON") : F("OFF"));
              }
            }
            //
            void pwmWrite()
            {
              if (ledState == HIGH) 
              {
                analogWrite(led, analogLevel);
              }
              else 
              {
                digitalWrite(led, LOW);
              }
            }
            
            1 Reply Last reply
            0
            • 5546dug5 Offline
              5546dug5 Offline
              5546dug
              wrote on last edited by
              #29

              @BulldogLowell Thanks
              I will try. 3.1.1 when I get home

              1 Reply Last reply
              0
              • 5546dug5 Offline
                5546dug5 Offline
                5546dug
                wrote on last edited by
                #30

                @BulldogLowell
                here is screen shot of error codeArduino: 1.6.5 (Windows 8.1), Board: "Arduino Nano, ATmega328"

                Using library MySensors in folder: C:\Users\Carolyn & Doug\Documents\Arduino\libraries\MySensors (legacy)

                Using library SPI in folder: C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\SPI

                Using library Bounce2 in folder: C:\Users\Carolyn & Doug\Documents\Arduino\libraries\Bounce2 (legacy)

                C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10605 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\eightanaloginputs -IC:\Users\Carolyn & Doug\Documents\Arduino\libraries\MySensors -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\SPI -IC:\Users\Carolyn & Doug\Documents\Arduino\libraries\Bounce2 C:\Users\CAROLY~1\AppData\Local\Temp\build5063782765207672318.tmp\phoney_tv_july_20_3.1.1.cpp -o C:\Users\CAROLY~1\AppData\Local\Temp\build5063782765207672318.tmp\phoney_tv_july_20_3.1.1.cpp.o

                phoney_tv_july_20_3.1.1.ino: In function 'void setup()':
                phoney_tv_july_20_3.1.1.ino:111:6: error: 'class MySensor' has no member named 'wait'
                phoney_tv_july_20_3.1.1.ino:113:6: error: 'class MySensor' has no member named 'wait'
                phoney_tv_july_20_3.1.1.ino:116:8: error: 'class MySensor' has no member named 'wait'
                phoney_tv_july_20_3.1.1.ino:118:6: error: 'class MySensor' has no member named 'wait'
                phoney_tv_july_20_3.1.1.ino: In function 'void loop()':
                phoney_tv_july_20_3.1.1.ino:133:10: error: 'class MySensor' has no member named 'wait'
                'class MySensor' has no member named 'wait'

                BulldogLowellB 1 Reply Last reply
                0
                • 5546dug5 5546dug

                  @BulldogLowell
                  here is screen shot of error codeArduino: 1.6.5 (Windows 8.1), Board: "Arduino Nano, ATmega328"

                  Using library MySensors in folder: C:\Users\Carolyn & Doug\Documents\Arduino\libraries\MySensors (legacy)

                  Using library SPI in folder: C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\SPI

                  Using library Bounce2 in folder: C:\Users\Carolyn & Doug\Documents\Arduino\libraries\Bounce2 (legacy)

                  C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10605 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\eightanaloginputs -IC:\Users\Carolyn & Doug\Documents\Arduino\libraries\MySensors -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\SPI -IC:\Users\Carolyn & Doug\Documents\Arduino\libraries\Bounce2 C:\Users\CAROLY~1\AppData\Local\Temp\build5063782765207672318.tmp\phoney_tv_july_20_3.1.1.cpp -o C:\Users\CAROLY~1\AppData\Local\Temp\build5063782765207672318.tmp\phoney_tv_july_20_3.1.1.cpp.o

                  phoney_tv_july_20_3.1.1.ino: In function 'void setup()':
                  phoney_tv_july_20_3.1.1.ino:111:6: error: 'class MySensor' has no member named 'wait'
                  phoney_tv_july_20_3.1.1.ino:113:6: error: 'class MySensor' has no member named 'wait'
                  phoney_tv_july_20_3.1.1.ino:116:8: error: 'class MySensor' has no member named 'wait'
                  phoney_tv_july_20_3.1.1.ino:118:6: error: 'class MySensor' has no member named 'wait'
                  phoney_tv_july_20_3.1.1.ino: In function 'void loop()':
                  phoney_tv_july_20_3.1.1.ino:133:10: error: 'class MySensor' has no member named 'wait'
                  'class MySensor' has no member named 'wait'

                  BulldogLowellB Offline
                  BulldogLowellB Offline
                  BulldogLowell
                  Contest Winner
                  wrote on last edited by
                  #31

                  @5546dug

                  I think you need to update your MySensors IDE.

                  1 Reply Last reply
                  0
                  • 5546dug5 Offline
                    5546dug5 Offline
                    5546dug
                    wrote on last edited by
                    #32

                    Ok I will try that also
                    Thanks

                    1 Reply Last reply
                    0
                    • 5546dug5 Offline
                      5546dug5 Offline
                      5546dug
                      wrote on last edited by
                      #33

                      @BulldogLowell I downloaded lib 1.4.1 and just like that your code worked 100% THANKS.

                      It is something I could not have done.

                      Just a question, when in your code 3.1.1 you have a few scattered lines through out the declaration code with only // on these lines does it mean anything in particular ?
                      I couldn't find anything wrote up like the notations of /* and */ for writing comments and paragraphs .

                      BulldogLowellB 1 Reply Last reply
                      0
                      • 5546dug5 5546dug

                        @BulldogLowell I downloaded lib 1.4.1 and just like that your code worked 100% THANKS.

                        It is something I could not have done.

                        Just a question, when in your code 3.1.1 you have a few scattered lines through out the declaration code with only // on these lines does it mean anything in particular ?
                        I couldn't find anything wrote up like the notations of /* and */ for writing comments and paragraphs .

                        BulldogLowellB Offline
                        BulldogLowellB Offline
                        BulldogLowell
                        Contest Winner
                        wrote on last edited by
                        #34

                        @5546dug said:

                        Just a question, when in your code 3.1.1 you have a few scattered lines through out the declaration code with only // on these lines does it mean anything in particular ?

                        Adding the "//" is only a personal preference of mine to use the comment marks rather than leaving a blank line. for me, with a certain text editor that I use, it is easier to edit and not inadvertently delete some curly brace and screw up my code!

                        @5546dug said:

                        your code worked 100% THANKS.

                        happy to hear you are going now, sorry about the mixup.

                        1 Reply Last reply
                        0
                        Reply
                        • Reply as topic
                        Log in to reply
                        • Oldest to Newest
                        • Newest to Oldest
                        • Most Votes


                        18

                        Online

                        11.7k

                        Users

                        11.2k

                        Topics

                        113.1k

                        Posts


                        Copyright 2025 TBD   |   Forum Guidelines   |   Privacy Policy   |   Terms of Service
                        • Login

                        • Don't have an account? Register

                        • Login or register to search.
                        • First post
                          Last post
                        0
                        • MySensors
                        • OpenHardware.io
                        • Categories
                        • Recent
                        • Tags
                        • Popular