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. Controllers
  3. Home Assistant
  4. Need a refresher on presentation and HA

Need a refresher on presentation and HA

Scheduled Pinned Locked Moved Home Assistant
5 Posts 2 Posters 1.8k Views 2 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.
  • D Offline
    D Offline
    drock1985
    wrote on last edited by
    #1

    Hi,

    I took a bit of a hiatus from this site/Arduino and now can't for the life of me debug a presentation on a node with two LED lights.

    Here is the errors I am getting during presentation:

    Starting repeater (RNNRA-, 2.0.0)
    TSM:INIT
    TSM:RADIO:OK
    TSP:ASSIGNID:OK (ID=24)
    TSM:FPAR
    TSP:MSG:SEND 24-24-255-255 s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=bc:
    TSP:MSG:READ 4-4-24 s=255,c=3,t=8,pt=1,l=1,sg=0:1
    TSP:MSG:FPAR RES (ID=4, dist=1)
    TSP:MSG:PAR OK (ID=4, dist=2)
    TSP:MSG:READ 0-0-24 s=255,c=3,t=8,pt=1,l=1,sg=0:0
    TSP:MSG:FPAR RES (ID=0, dist=0)
    TSP:MSG:PAR OK (ID=0, dist=1)
    TSP:MSG:READ 2-2-24 s=255,c=3,t=8,pt=1,l=1,sg=0:1
    TSP:MSG:FPAR RES (ID=2, dist=1)
    TSM:FPAR:OK
    TSM:ID
    TSM:CHKID:OK (ID=24)
    TSM:UPL
    TSP:PING:SEND (dest=0)
    TSP:MSG:SEND 24-24-0-0 s=255,c=3,t=24,pt=1,l=1,sg=0,ft=0,st=ok:1
    TSP:MSG:READ 0-0-24 s=255,c=3,t=25,pt=1,l=1,sg=0:1
    TSP:MSG:PONG RECV (hops=1)
    TSP:CHKUPL:OK
    TSM:UPL:OK
    TSM:READY
    TSP:MSG:SEND 24-24-0-0 s=255,c=3,t=15,pt=6,l=2,sg=0,ft=0,st=ok:0100
    TSP:MSG:SEND 24-24-0-0 s=255,c=0,t=18,pt=0,l=5,sg=0,ft=0,st=ok:2.0.0
    TSP:MSG:SEND 24-24-0-0 s=255,c=3,t=6,pt=1,l=1,sg=0,ft=0,st=ok:0
    TSP:MSG:READ 0-0-24 s=255,c=3,t=15,pt=6,l=2,sg=0:0100
    TSP:MSG:READ 0-0-24 s=255,c=3,t=6,pt=0,l=1,sg=0:M
    TSP:MSG:SEND 24-24-0-0 s=255,c=3,t=11,pt=0,l=18,sg=0,ft=0,st=ok:Holiday Desk Light
    TSP:MSG:SEND 24-24-0-0 s=255,c=3,t=12,pt=0,l=3,sg=0,ft=0,st=ok:1.0
    TSP:MSG:SEND 24-24-0-0 s=1,c=0,t=3,pt=0,l=0,sg=0,ft=0,st=ok:
    !TSP:MSG:SEND 24-24-0-0 s=2,c=0,t=3,pt=0,l=0,sg=0,ft=0,st=fail:
    NODE:!REG
    NODE:!REG
    Request registration...
    TSP:MSG:SEND 24-24-0-0 s=255,c=3,t=26,pt=1,l=1,sg=0,ft=1,st=ok:2
    TSP:MSG:READ 0-0-24 s=255,c=3,t=27,pt=1,l=1,sg=0:1
    Node registration=1
    Init complete, id=24, parent=0, distance=1, registration=1
    

    and here is my sketch

    /**
     * The MySensors Arduino library handles the wireless radio link and protocol
     * between your home built sensors/actuators and HA controller of choice.
     * The sensors forms a self healing radio network with optional repeaters. Each
     * repeater and gateway builds a routing tables in EEPROM which keeps track of the
     * network topology allowing messages to be routed to nodes.
     *
     * Created by Henrik Ekblad <henrik.ekblad@mysensors.org>
     * Copyright (C) 2013-2015 Sensnology AB
     * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors
     *
     * Documentation: http://www.mysensors.org
     * Support Forum: http://forum.mysensors.org
     *
     * This program is free software; you can redistribute it and/or
     * modify it under the terms of the GNU General Public License
     * version 2 as published by the Free Software Foundation.
     *
     *******************************
     *
     * REVISION HISTORY
     * Version 1.0 - Henrik Ekblad
     * 
     * DESCRIPTION
     * Example sketch showing how to control physical relays. 
     * This example will remember relay state after power failure.
     * http://www.mysensors.org/build/relay
     */ 
    
    // Enable debug prints to serial monitor
    #define MY_DEBUG 
    
    // Enable and select radio type attached
    #define MY_RADIO_NRF24
    //#define MY_RADIO_RFM69
    
    // Enable repeater functionality for this node
    #define MY_REPEATER_FEATURE
    
    #include <SPI.h>
    #include <MySensors.h>
    
    #define LIGHTS_MULTI 3
    #define LIGHTS_WHITE 5
    
    #define CHILD_ID_MULTI 1
    #define CHILD_ID_WHITE 2
    
    #define LIGHTS_MULTI_ON 1  // GPIO value to write to turn on attached relay
    #define LIGHTS_MULTI_OFF 0 // GPIO value to write to turn off attached relay
    
    #define LIGHTS_WHITE_ON 1  // GPIO value to write to turn on attached relay
    #define LIGHTS_WHITE_OFF 0 // GPIO value to write to turn off attached relay
    
    MyMessage msgMULTI(CHILD_ID_MULTI, V_LIGHT);
    MyMessage msgWHITE(CHILD_ID_WHITE, V_LIGHT);
    
    void before() { 
         // Then set relay pins in output mode
        pinMode(LIGHTS_MULTI, OUTPUT);   
        pinMode(LIGHTS_WHITE, OUTPUT);  
        // Set relay to last known state (using eeprom storage) 
        digitalWrite(LIGHTS_MULTI, loadState(1)?LIGHTS_MULTI_ON:LIGHTS_MULTI_OFF);
        digitalWrite(LIGHTS_WHITE, loadState(2)?LIGHTS_WHITE_ON:LIGHTS_WHITE_OFF);
      }
    
    
    void setup() {
    // present(255, 18);
    }
    
    void presentation()  
    {   
      // Send the sketch version information to the gateway and Controller
      sendSketchInfo("Holiday Desk Light", "1.0");
    
          present(CHILD_ID_MULTI, S_LIGHT);
          present(CHILD_ID_WHITE, S_LIGHT);
          send(msgMULTI.set(1));
          send(msgWHITE.set(1));
          
      }
     
    void loop() 
    {
      
    }
    
    void receive(const MyMessage &message) {
      // We only expect one type of message from controller. But we better check anyway.
      if (message.type==V_LIGHT && message.sensor == CHILD_ID_MULTI) {
         // Change relay state
         digitalWrite(LIGHTS_MULTI, message.getBool()?LIGHTS_MULTI_ON:LIGHTS_MULTI_OFF);
         // Store state in eeprom
         saveState(message.sensor, message.getBool());
         // Write some debug info
         Serial.print("Incoming change for sensor:");
         Serial.print(message.sensor);
         Serial.print(", New status: ");
         Serial.println(message.getBool());
       } 
    
         if (message.type==V_LIGHT && message.sensor == CHILD_ID_WHITE) {
         // Change relay state
         digitalWrite(LIGHTS_WHITE, message.getBool()?LIGHTS_WHITE_ON:LIGHTS_WHITE_OFF);
         // Store state in eeprom
         saveState(message.sensor, message.getBool());
         // Write some debug info
         Serial.print("Incoming change for sensor:");
         Serial.print(message.sensor);
         Serial.print(", New status: ");
         Serial.println(message.getBool());
       }
    }
    

    Anyone help a born-again newb? :{

    Thanks

    My Projects
    2 Door Chime Sensor
    Washing Machine Monitor

    1 Reply Last reply
    0
    • martinhjelmareM Offline
      martinhjelmareM Offline
      martinhjelmare
      Plugin Developer
      wrote on last edited by
      #2
      • Add a short wait between presentations of child 1 and 2 in presentation. Presentation of second child failed to be received.
      • Send initial values for both children in loop.
      • Send feedback of state change to gateway/controller in receive.
      1 Reply Last reply
      1
      • D Offline
        D Offline
        drock1985
        wrote on last edited by
        #3

        hi @martinhjelmare

        I added a wait into the presentation, and that got rid of the fail message. Now I am trying to send the initial value (so that HA will register it) and it does not seem to be working. I also added the sending of the status in the receive message, here is an updated sketch and my debug log. What could I be missing?

        Thanks again!

        Starting repeater (RNNRA-, 2.0.0)
        TSM:INIT
        TSM:RADIO:OK
        TSP:ASSIGNID:OK (ID=24)
        TSM:FPAR
        TSP:MSG:SEND 24-24-255-255 s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=bc:
        TSM:FPAR
        TSP:MSG:SEND 24-24-255-255 s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=bc:
        TSP:MSG:READ 4-4-24 s=255,c=3,t=8,pt=1,l=1,sg=0:1
        TSP:MSG:FPAR RES (ID=4, dist=1)
        TSP:MSG:PAR OK (ID=4, dist=2)
        TSP:MSG:READ 0-0-24 s=255,c=3,t=8,pt=1,l=1,sg=0:0
        TSP:MSG:FPAR RES (ID=0, dist=0)
        TSP:MSG:PAR OK (ID=0, dist=1)
        TSP:MSG:READ 2-2-24 s=255,c=3,t=8,pt=1,l=1,sg=0:1
        TSP:MSG:FPAR RES (ID=2, dist=1)
        TSM:FPAR:OK
        TSM:ID
        TSM:CHKID:OK (ID=24)
        TSM:UPL
        TSP:PING:SEND (dest=0)
        TSP:MSG:SEND 24-24-0-0 s=255,c=3,t=24,pt=1,l=1,sg=0,ft=0,st=ok:1
        TSP:MSG:READ 0-0-24 s=255,c=3,t=25,pt=1,l=1,sg=0:1
        TSP:MSG:PONG RECV (hops=1)
        TSP:CHKUPL:OK
        TSM:UPL:OK
        TSM:READY
        TSP:MSG:SEND 24-24-0-0 s=255,c=3,t=15,pt=6,l=2,sg=0,ft=0,st=ok:0100
        TSP:MSG:SEND 24-24-0-0 s=255,c=0,t=18,pt=0,l=5,sg=0,ft=0,st=ok:2.0.0
        TSP:MSG:SEND 24-24-0-0 s=255,c=3,t=6,pt=1,l=1,sg=0,ft=0,st=ok:0
        TSP:MSG:READ 0-0-24 s=255,c=3,t=15,pt=6,l=2,sg=0:0100
        TSP:MSG:READ 0-0-24 s=255,c=3,t=6,pt=0,l=1,sg=0:M
        TSP:MSG:SEND 24-24-0-0 s=255,c=3,t=11,pt=0,l=18,sg=0,ft=0,st=ok:Holiday Desk Light
        TSP:MSG:SEND 24-24-0-0 s=255,c=3,t=12,pt=0,l=3,sg=0,ft=0,st=ok:1.0
        TSP:MSG:SEND 24-24-0-0 s=1,c=0,t=3,pt=0,l=0,sg=0,ft=0,st=ok:
        TSP:MSG:SEND 24-24-0-0 s=2,c=0,t=3,pt=0,l=0,sg=0,ft=0,st=ok:
        NODE:!REG
        NODE:!REG
        Request registration...
        TSP:MSG:SEND 24-24-0-0 s=255,c=3,t=26,pt=1,l=1,sg=0,ft=0,st=ok:2
        TSP:MSG:READ 0-0-24 s=255,c=3,t=27,pt=1,l=1,sg=0:1
        Node registration=1
        Init complete, id=24, parent=0, distance=1, registration=1
        TSP:SANCHK:OK
        TSP:MSG:READ 1-1-255 s=255,c=3,t=7,pt=0,l=0,sg=0:
        TSP:MSG:BC
        TSP:MSG:FPAR REQ (sender=1)
        TSP:PING:SEND (dest=0)
        TSP:MSG:SEND 24-24-0-0 s=255,c=3,t=24,pt=1,l=1,sg=0,ft=0,st=ok:1
        TSP:MSG:READ 0-0-24 s=255,c=3,t=25,pt=1,l=1,sg=0:1
        TSP:MSG:PONG RECV (hops=1)
        TSP:CHKUPL:OK
        TSP:MSG:GWL OK
        TSP:MSG:SEND 24-24-1-1 s=255,c=3,t=8,pt=1,l=1,sg=0,ft=0,st=ok:1
        TSP:SANCHK:OK
        

        sketch

        /**
         * The MySensors Arduino library handles the wireless radio link and protocol
         * between your home built sensors/actuators and HA controller of choice.
         * The sensors forms a self healing radio network with optional repeaters. Each
         * repeater and gateway builds a routing tables in EEPROM which keeps track of the
         * network topology allowing messages to be routed to nodes.
         *
         * Created by Henrik Ekblad <henrik.ekblad@mysensors.org>
         * Copyright (C) 2013-2015 Sensnology AB
         * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors
         *
         * Documentation: http://www.mysensors.org
         * Support Forum: http://forum.mysensors.org
         *
         * This program is free software; you can redistribute it and/or
         * modify it under the terms of the GNU General Public License
         * version 2 as published by the Free Software Foundation.
         *
         *******************************
         *
         * REVISION HISTORY
         * Version 1.0 - Henrik Ekblad
         * 
         * DESCRIPTION
         * Example sketch showing how to control physical relays. 
         * This example will remember relay state after power failure.
         * http://www.mysensors.org/build/relay
         */ 
        
        // Enable debug prints to serial monitor
        #define MY_DEBUG 
        
        // Enable and select radio type attached
        #define MY_RADIO_NRF24
        //#define MY_RADIO_RFM69
        
        // Enable repeater functionality for this node
        #define MY_REPEATER_FEATURE
        
        #include <SPI.h>
        #include <MySensors.h>
        
        #define LIGHTS_MULTI 3
        #define LIGHTS_WHITE 5
        
        #define CHILD_ID_MULTI 1
        #define CHILD_ID_WHITE 2
        
        #define LIGHTS_MULTI_ON 1  // GPIO value to write to turn on attached relay
        #define LIGHTS_MULTI_OFF 0 // GPIO value to write to turn off attached relay
        
        #define LIGHTS_WHITE_ON 1  // GPIO value to write to turn on attached relay
        #define LIGHTS_WHITE_OFF 0 // GPIO value to write to turn off attached relay
        
        MyMessage msgMULTI(CHILD_ID_MULTI, V_LIGHT);
        MyMessage msgWHITE(CHILD_ID_WHITE, V_LIGHT);
        
        void before() { 
             // Then set relay pins in output mode
            pinMode(LIGHTS_MULTI, OUTPUT);   
            pinMode(LIGHTS_WHITE, OUTPUT);  
            // Set relay to last known state (using eeprom storage) 
            digitalWrite(LIGHTS_MULTI, loadState(CHILD_ID_MULTI)?LIGHTS_MULTI_ON:LIGHTS_MULTI_OFF);
            digitalWrite(LIGHTS_WHITE, loadState(CHILD_ID_WHITE)?LIGHTS_WHITE_ON:LIGHTS_WHITE_OFF);
          }
        
        
        void setup() {
        // present(255, 18);
        }
        
        void presentation()  
        {   
          // Send the sketch version information to the gateway and Controller
          sendSketchInfo("Holiday Desk Light", "1.0");
        
              present(CHILD_ID_MULTI, S_LIGHT);
              wait(150);
              present(CHILD_ID_WHITE, S_LIGHT);
              wait(150);
              send(msgMULTI.set(1));
              wait(150);
              send(msgWHITE.set(1));  
          }
         
        void loop() 
        {
          
        }
        
        void receive(const MyMessage &message) {
          // We only expect one type of message from controller. But we better check anyway.
          if (message.type==V_LIGHT && message.sensor == CHILD_ID_MULTI) {
             // Change relay state
             digitalWrite(LIGHTS_MULTI, message.getBool()?LIGHTS_MULTI_ON:LIGHTS_MULTI_OFF);
             send(msgMULTI, message.getBool()?LIGHTS_MULTI_ON:LIGHTS_MULTI_OFF);
             // Store state in eeprom
             saveState(message.sensor, message.getBool());
             // Write some debug info
             Serial.print("Incoming change for sensor:");
             Serial.print(message.sensor);
             Serial.print(", New status: ");
             Serial.println(message.getBool());
           } 
        
             if (message.type==V_LIGHT && message.sensor == CHILD_ID_WHITE) {
             // Change relay state
             digitalWrite(LIGHTS_WHITE, message.getBool()?LIGHTS_WHITE_ON:LIGHTS_WHITE_OFF);
             send(msgWHITE, message.getBool()?LIGHTS_WHITE_ON:LIGHTS_WHITE_OFF);
             // Store state in eeprom
             saveState(message.sensor, message.getBool());
             // Write some debug info
             Serial.print("Incoming change for sensor:");
             Serial.print(message.sensor);
             Serial.print(", New status: ");
             Serial.println(message.getBool());
           }
        }
        

        My Projects
        2 Door Chime Sensor
        Washing Machine Monitor

        1 Reply Last reply
        0
        • martinhjelmareM Offline
          martinhjelmareM Offline
          martinhjelmare
          Plugin Developer
          wrote on last edited by martinhjelmare
          #4

          Send initial values in loop. No set/req messages are allowed until after the node is registered at the gateway. This happens after presentation in mysensors 2.0.

          See example sketch here:
          https://home-assistant.io/components/mysensors/#presentation

          D 1 Reply Last reply
          1
          • martinhjelmareM martinhjelmare

            Send initial values in loop. No set/req messages are allowed until after the node is registered at the gateway. This happens after presentation in mysensors 2.0.

            See example sketch here:
            https://home-assistant.io/components/mysensors/#presentation

            D Offline
            D Offline
            drock1985
            wrote on last edited by
            #5

            @martinhjelmare

            Thanks, i finally got it. I went to the example you have on home-assistant.io and removed the button and added a second actuator. Works like it should now. You are the king!

            Final code for anyone whom it may help/want it.

            /*
             * Documentation: http://www.mysensors.org
             * Support Forum: http://forum.mysensors.org
             *
             * http://www.mysensors.org/build/relay
             * 
             * 
             *Holiday LED Lights MySensors Module, for MySensors v2.0 
             * Nothing fancy, just a two actuator (on/off) virtual switch for small
             * low powred LED strings that normally run from a battery pack. 
             * 
             * 
              */
              
              
            
            #define MY_DEBUG
            #define MY_RADIO_NRF24
            #define MY_REPEATER_FEATURE
            #define MY_NODE_ID 24 // or comment out for auto
            #include <SPI.h>
            #include <MySensors.h>
            
            #define MULTI_PIN  3 // Pin that Multi-Coloured LED string is connected to
            #define WHITE_PIN 5  // Pin that White LED string is connected to
            #define CHILD_ID_MULTI 1 // Child ID for Multi-Coloured LED String
            #define CHILD_ID_WHITE 2 // Child ID for White LED String
            #define MULTI_ON 1
            #define MULTI_OFF 0
            #define WHITE_ON 1
            #define WHITE_OFF 0
            
            
            bool stateMULTI = false; // Place holders for the loop function to register nodes in Home-Assistant
            bool initialValueSentMULTI = false;
            bool stateWHITE = false;
            bool initialValueSentWHITE = false;
            
            MyMessage msgMULTI(CHILD_ID_MULTI, V_STATUS); //Presentation of Switch for Multi-Coloured LEDS
            MyMessage msgWHITE(CHILD_ID_WHITE, V_STATUS); //Presentation of Switch for White LEDS
            
            void setup()
            {
              // Make sure relays are off when starting up
              digitalWrite(MULTI_PIN, MULTI_OFF);
              pinMode(MULTI_PIN, OUTPUT);
              digitalWrite(WHITE_PIN, WHITE_OFF);
              pinMode(WHITE_PIN, OUTPUT);
            }
            
            void presentation()  {
              sendSketchInfo("HolidayDeskLights", "1.0");
              present(CHILD_ID_MULTI, S_LIGHT);
              present(CHILD_ID_WHITE, S_LIGHT);
            }
            
            void loop()
            {
              if (!initialValueSentMULTI) {
                Serial.println("Sending initial value");
                send(msgMULTI.set(stateMULTI?MULTI_ON:MULTI_OFF));
                Serial.println("Requesting initial value from controller");
                request(CHILD_ID_MULTI, V_STATUS);
                wait(2000, C_SET, V_STATUS);
              }
            
                if (!initialValueSentWHITE) {
                Serial.println("Sending initial value");
                send(msgWHITE.set(stateWHITE?WHITE_ON:WHITE_OFF));
                Serial.println("Requesting initial value from controller");
                request(CHILD_ID_WHITE, V_STATUS);
                wait(2000, C_SET, V_STATUS);
              }
            
            }
            
            void receive(const MyMessage &message) {
              if (message.isAck()) {
                 Serial.println("This is an ack from gateway");
              }
            
              if (message.type == V_STATUS && message.sensor == CHILD_ID_MULTI) {
                if (!initialValueSentMULTI) {
                  Serial.println("Receiving initial value from controller");
                  initialValueSentMULTI = true;
                }
                // Change relay state
                stateMULTI = (bool)message.getInt();
                digitalWrite(MULTI_PIN, stateMULTI?MULTI_ON:MULTI_OFF);
                send(msgMULTI.set(stateMULTI?MULTI_ON:MULTI_OFF));
              }
            
              if (message.type == V_STATUS && message.sensor == CHILD_ID_WHITE) {
                if (!initialValueSentWHITE) {
                  Serial.println("Receiving initial value from controller");
                  initialValueSentWHITE = true;
                }
                // Change relay state
                stateWHITE = (bool)message.getInt();
                digitalWrite(WHITE_PIN, stateWHITE?WHITE_ON:WHITE_OFF);
                send(msgWHITE.set(stateWHITE?WHITE_ON:WHITE_OFF));
              }
              
            }
            

            My Projects
            2 Door Chime Sensor
            Washing Machine Monitor

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


            12

            Online

            11.7k

            Users

            11.2k

            Topics

            113.0k

            Posts


            Copyright 2019 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