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 Offline
    5546dug5 Offline
    5546dug
    wrote on last edited by
    #23

    Should also tell you I use ui5 in my veras case it makes a difference and I can toggle the switch off and on in my Device page but no Phoney TV changes.

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


                          14

                          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