Navigation

    • Register
    • Login
    • Search
    • OpenHardware.io
    • Categories
    • Recent
    • Tags
    • Popular
    1. Home
    2. Jan Kocon
    • Profile
    • Following
    • Followers
    • Topics
    • Posts
    • Best
    • Groups

    Jan Kocon

    @Jan Kocon

    0
    Reputation
    5
    Posts
    87
    Profile views
    0
    Followers
    0
    Following
    Joined Last Online

    Jan Kocon Follow

    Best posts made by Jan Kocon

    This user hasn't posted anything yet.

    Latest posts made by Jan Kocon

    • RE: USB gateway Arduino Mega: HA doesn't see switches and relays

      So, I've found sketch which is perfectly integrating with Home Assistant:

      https://github.com/th0m4sek/mysensors/tree/master?fbclid=IwAR0Bn7kfJ_whDpGWfeB3RpyfU0FAofEm1E3KjPvn4enJnUtNuT7qWmHvb3Y

      hope it works in the future projects!

      posted in Home Assistant
      Jan Kocon
      Jan Kocon
    • RE: USB gateway Arduino Mega: HA doesn't see switches and relays

      Well... another update:

      I've deleted this part from code:

        if (!initialValueSent) {
          Serial.println("Sending initial value");
          send(msg1.set(loadState(1)?RELAY_OFF:RELAY_ON),true);
          wait(1000);
          send(msg2.set(loadState(2)?RELAY_OFF:RELAY_ON),true);
          wait(1000);
          send(msg3.set(loadState(3)?RELAY_OFF:RELAY_ON),true);
          wait(1000);
          send(msg4.set(loadState(4)?RELAY_OFF:RELAY_ON),true);
          wait(1000);
          Serial.println("Sending initial value: Completed");
          wait(5000);
        }
      

      and its working fine, I'm not getting update for intitial value and degub lines apears when I'm pressing buttons and they are working fine and I can see changes in HA.

      Still when I'm changing state on GUI it's coming back to previous state in GUI but it's holding new state on Arduino.
      Last problem with debug log:

      2019-08-29 15:43:56 WARNING (MainThread) [mysensors.message] Error decoding message from gateway, bad data received: Incoming change for sensor:3, New status: 1
      2019-08-29 15:43:56 WARNING (MainThread) [mysensors] Not a valid message: not enough values to unpack (expected 5, got 0)
      

      Any idea what to change in code?

      posted in Home Assistant
      Jan Kocon
      Jan Kocon
    • RE: USB gateway Arduino Mega: HA doesn't see switches and relays

      @petewill I've tried that config earlier but no luck.

      I've added some changes in my Arduino code, here is actual code:

      // Override Setting for Manual Node ID to 2
      #define MY_NODE_ID 2
      
      // Enable debug prints to serial monitor
      #define MY_DEBUG 
      
      // Enable and select radio type attached
      //#define MY_RADIO_NRF24
      
      // Enable serial gateway
      #define MY_GATEWAY_SERIAL
      
      // Enable repeater functionality for this node
      #define MY_REPEATER_FEATURE
      
      #include <SPI.h>
      #include <MySensors.h>  
      #include <Bounce2.h>
      
      // Enable repeater functionality for this node
      #define MY_REPEATER_FEATURE
      
      
      #define RELAY_1  14  // Arduino Digital I/O pin number for first relay (second on pin+1 etc)
      #define RELAY_2  15
      #define RELAY_3  16
      #define RELAY_4  17
      #define NUMBER_OF_RELAYS 4 // Total number of attached relays
      #define RELAY_ON 1  // GPIO value to write to turn on attached relay
      #define RELAY_OFF 0 // GPIO value to write to turn off attached relay
      
      #define BUTTON1_PIN 5
      #define BUTTON2_PIN 6
      #define BUTTON3_PIN 7
      #define BUTTON4_PIN 8
      
      bool initialValueSent = false;
      
      MyMessage msg1(1, V_LIGHT);
      MyMessage msg2(2, V_LIGHT);
      MyMessage msg3(3, V_LIGHT);
      MyMessage msg4(4, V_LIGHT);
      
      void before() { 
        for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS;sensor++, pin++) {
          // Then set relay pins in output mode
          pinMode(pin, OUTPUT);   
          // Set relay to last known state (using eeprom storage) 
          digitalWrite(pin, loadState(sensor)?RELAY_ON:RELAY_OFF);
        }
      }
      Bounce debouncer1 = Bounce();
      Bounce debouncer2 = Bounce();
      Bounce debouncer3 = Bounce();
      Bounce debouncer4 = Bounce();
      
      void setup() { 
        // Setup locally attached sensors
        delay(10000);
        
         // Setup the button.
        pinMode(BUTTON1_PIN, INPUT_PULLUP);
        pinMode(BUTTON2_PIN, INPUT_PULLUP);
        pinMode(BUTTON3_PIN, INPUT_PULLUP);
        pinMode(BUTTON4_PIN, INPUT_PULLUP);
        
        // After setting up the button, setup debouncer.
        debouncer1.attach(BUTTON1_PIN);
        debouncer1.interval(5);
        debouncer2.attach(BUTTON2_PIN);
        debouncer2.interval(5);
        debouncer3.attach(BUTTON3_PIN);
        debouncer3.interval(5);
        debouncer4.attach(BUTTON4_PIN);
        debouncer4.interval(5);
      
      }
      void presentation()  
      {   
        // Send the sketch version information to the gateway and Controller
        sendSketchInfo("Relay", "1.0");
      
        for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS;sensor++, pin++) {
          // Register all sensors to gw (they will be created as child devices)
          present(sensor, S_LIGHT);
        }
      }
      
      void loop() { 
        if (!initialValueSent) {
          Serial.println("Sending initial value");
          send(msg1.set(loadState(1)?RELAY_OFF:RELAY_ON),true);
          wait(1000);
          send(msg2.set(loadState(2)?RELAY_OFF:RELAY_ON),true);
          wait(1000);
          send(msg3.set(loadState(3)?RELAY_OFF:RELAY_ON),true);
          wait(1000);
          send(msg4.set(loadState(4)?RELAY_OFF:RELAY_ON),true);
          wait(1000);
          Serial.println("Sending initial value: Completed");
          wait(5000);
        }
        
        // Send locally attached sensor data here 
        if (debouncer1.update()) {
          // Get the update value.
          int value = debouncer1.read();
          // Send in the new value.
          if(value == LOW){
               saveState(1, !loadState(1));
               digitalWrite(RELAY_1, loadState(1)?RELAY_ON:RELAY_OFF);
               send(msg1.set(loadState(1)));
               }
        }
        if (debouncer2.update()) {
            int value2 = debouncer2.read();
          if(value2 == LOW){
               saveState(2, !loadState(2));
               digitalWrite(RELAY_2, loadState(2)?RELAY_ON:RELAY_OFF);
               send(msg2.set(loadState(2)));
               }
        }
        if (debouncer3.update()) {
            int value3 = debouncer3.read();
          if(value3 == LOW){
               saveState(3, !loadState(3));
               digitalWrite(RELAY_3, loadState(3)?RELAY_ON:RELAY_OFF);
               send(msg3.set(loadState(3)));
               }
        }
        if (debouncer4.update()) {
            int value4 = debouncer4.read();
          if(value4 == LOW){
               saveState(4, !loadState(4));
               digitalWrite(RELAY_4, loadState(4)?RELAY_ON:RELAY_OFF);
               send(msg4.set(loadState(4)));
               }
        }
      }
      
      
      void receive(const MyMessage &message) {
        // We only expect one type of message from controller. But we better check anyway.
        if (message.type==V_LIGHT) {
           // Change relay state
           digitalWrite(message.sensor-1+RELAY_1, message.getBool()?RELAY_ON:RELAY_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());
         } 
      }
      

      and finally I can see my relays in GUI:
      alt text

      mysensor file:

      {
          "0": {
              "sensor_id": 0,
              "children": {
                  "1": {
                      "id": 1,
                      "type": 3,
                      "description": "",
                      "values": {
                          "2": "1"
                      }
                  },
                  "2": {
                      "id": 2,
                      "type": 3,
                      "description": "",
                      "values": {
                          "2": "1"
                      }
                  },
                  "3": {
                      "id": 3,
                      "type": 3,
                      "description": "",
                      "values": {
                          "2": "1"
                      }
                  },
                  "4": {
                      "id": 4,
                      "type": 3,
                      "description": "",
                      "values": {
                          "2": "1"
                      }
                  }
              },
              "type": 17,
              "sketch_name": "Relay",
              "sketch_version": "1.0",
              "battery_level": 0,
              "protocol_version": "2.3.1",
              "heartbeat": 0
          }
      }
      

      But it couldn't be to good...
      Home Assistant doesn't save changes in GUI so when I'm switch relay to off it will turn off the relay and it will stay off on device but after 2-3 seconds it's coming back on in GUI (on arduino it's still off). To trun it back on I have to turn on and turn off relay in GUI pretty fast before it will 'switch' back again.

      when I'm switching relay in GUI I'm getting this:

      2019-08-29 13:14:07 WARNING (MainThread) [mysensors.message] Error decoding message from gateway, bad data received: Incoming change for sensor:1, New status: 0
      2019-08-29 13:14:07 WARNING (MainThread) [mysensors] Not a valid message: not enough values to unpack (expected 5, got 0)
      

      and additionaly every few seconds I'm getting those lines in logs (even when it's iddle):

      2019-08-29 13:16:34 WARNING (MainThread) [mysensors.message] Error decoding message from gateway, bad data received: Sending initial value
      2019-08-29 13:16:34 WARNING (MainThread) [mysensors] Not a valid message: not enough values to unpack (expected 5, got 0)
      2019-08-29 13:16:34 DEBUG (MainThread) [homeassistant.components.mysensors.gateway] Node update: node 0 child 1
      2019-08-29 13:16:34 DEBUG (MainThread) [homeassistant.components.mysensors.device] Entity update: Relay 0 1: value_type 2, value = 1
      2019-08-29 13:16:35 DEBUG (MainThread) [homeassistant.components.mysensors.gateway] Node update: node 0 child 2
      2019-08-29 13:16:35 DEBUG (MainThread) [homeassistant.components.mysensors.device] Entity update: Relay 0 2: value_type 2, value = 1
      2019-08-29 13:16:36 DEBUG (MainThread) [homeassistant.components.mysensors.gateway] Node update: node 0 child 3
      2019-08-29 13:16:36 DEBUG (MainThread) [homeassistant.components.mysensors.device] Entity update: Relay 0 3: value_type 2, value = 1
      2019-08-29 13:16:37 DEBUG (MainThread) [homeassistant.components.mysensors.gateway] Node update: node 0 child 4
      2019-08-29 13:16:37 DEBUG (MainThread) [homeassistant.components.mysensors.device] Entity update: Relay 0 4: value_type 2, value = 1
      2019-08-29 13:16:37 DEBUG (SyncWorker_32) [mysensors.persistence] Saving sensors to persistence file /config/mysensors2.json
      2019-08-29 13:16:38 WARNING (MainThread) [mysensors.message] Error decoding message from gateway, bad data received: Sending initial value: Completed
      2019-08-29 13:16:38 WARNING (MainThread) [mysensors] Not a valid message: not enough values to unpack (expected 5, got 0)
      
      posted in Home Assistant
      Jan Kocon
      Jan Kocon
    • RE: USB gateway Arduino Mega: HA doesn't see switches and relays

      @petewill I've uncommented "//presentation" part in the code

      ...
        debouncer4.attach(BUTTON4_PIN);
        debouncer4.interval(5);
      
        //presentation();
      }
      void presentation()  
      ...
      

      and I've got this in the log:

      2019-08-28 17:40:25 ERROR (MainThread) [mysensors.handler] Node 0 is unknown, will not add child 1
      2019-08-28 17:40:25 ERROR (MainThread) [mysensors.handler] Node 0 is unknown, will not add child 2
      2019-08-28 17:40:25 ERROR (MainThread) [mysensors.handler] Node 0 is unknown, will not add child 3
      2019-08-28 17:40:25 ERROR (MainThread) [mysensors.handler] Node 0 is unknown, will not add child 4
      

      Plus I've added those lines in void setup:

      // Make sure relays are off when starting up
        digitalWrite(RELAY_1, RELAY_OFF);
        digitalWrite(RELAY_2, RELAY_OFF);
        digitalWrite(RELAY_3, RELAY_OFF);
        digitalWrite(RELAY_4, RELAY_OFF);
        pinMode(RELAY_1, OUTPUT);
        pinMode(RELAY_2, OUTPUT);
        pinMode(RELAY_3, OUTPUT);
        pinMode(RELAY_4, OUTPUT);
      

      I've defined node in the code

      #define MY_NODE_ID 1
      

      and updated HA config

      mysensors:
        gateways:
          - device: '/dev/ttyACM0'
            persistence_file: 'mysensors.json'
            baud_rate: 115200
            topic_in_prefix: 'mygateway1-out'
            topic_out_prefix: 'mygateway1-in'
            nodes: 
              1:
                name: 'test'
        optimistic: true
        persistence: true
        retain: true
        version: '2.0'
      

      but unfortunatelly when I'm pressing any button on Arduino I'm getting this in log:

      2019-08-28 17:50:50 WARNING (MainThread) [mysensors] Node 0 is unknown
      2019-08-28 17:50:50 INFO (MainThread) [mysensors] Requesting new presentation for node 0
      

      And i have no idea what esle to do 😞

      posted in Home Assistant
      Jan Kocon
      Jan Kocon
    • USB gateway Arduino Mega: HA doesn't see switches and relays

      Hi, I'm struigling with connecting MySensors to my Home Assistant (server on unRaid - docker).

      here is my sketch (4 relays but I've another sketch for 24 which will be used when everything will be working):

      // Enable debug prints to serial monitor
      #define MY_DEBUG 
      
      // Enable and select radio type attached
      //#define MY_RADIO_NRF24
      //#define MY_RADIO_RFM69
      
      // Set LOW transmit power level as default, if you have an amplified NRF-module and
      // power your radio separately with a good regulator you can turn up PA level. 
      //#define MY_RF24_PA_LEVEL RF24_PA_LOW
      
      // Enable serial gateway
      #define MY_GATEWAY_SERIAL
      
      #define MY_BAUD_RATE 38400
      
      // Flash leds on rx/tx/err
      // #define MY_LEDS_BLINKING_FEATURE
      // Set blinking period
      // #define MY_DEFAULT_LED_BLINK_PERIOD 300
      
      // Inverses the behavior of leds
      // #define MY_WITH_LEDS_BLINKING_INVERSE
      
      // Enable inclusion mode
      #define MY_INCLUSION_MODE_FEATURE
      // Enable Inclusion mode button on gateway
      #define MY_INCLUSION_BUTTON_FEATURE
      
      // Inverses behavior of inclusion button (if using external pullup)
      //#define MY_INCLUSION_BUTTON_EXTERNAL_PULLUP
      
      // Set inclusion mode duration (in seconds)
      #define MY_INCLUSION_MODE_DURATION 60 
      // Digital pin used for inclusion mode button
      #define MY_INCLUSION_MODE_BUTTON_PIN  3 
      
      // Uncomment to override default HW configurations
      //#define MY_DEFAULT_ERR_LED_PIN 4  // Error led pin
      //#define MY_DEFAULT_RX_LED_PIN  6  // Receive led pin
      //#define MY_DEFAULT_TX_LED_PIN  5  // the PCB, on board LED
      
      #include <SPI.h>
      #include <MySensors.h>  
      #include <Bounce2.h>
      
      // Enable repeater functionality for this node
      #define MY_REPEATER_FEATURE
      
      #define RELAY_1  14  // Arduino Digital I/O pin number for first relay (second on pin+1 etc)
      #define RELAY_2  15
      #define RELAY_3  16
      #define RELAY_4  17
      
      #define NUMBER_OF_RELAYS 4 // Total number of attached relays
      
      #define RELAY_ON 1  // GPIO value to write to turn on attached relay
      #define RELAY_OFF 0 // GPIO value to write to turn off attached relay
      
      #define BUTTON_PIN 5
      #define BUTTON2_PIN 6
      #define BUTTON3_PIN 7
      #define BUTTON4_PIN 8
      
      void before() { 
        for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS;sensor++, pin++) {
          // Then set relay pins in output mode
          pinMode(pin, OUTPUT);   
          // Set relay to last known state (using eeprom storage) 
          digitalWrite(pin, loadState(sensor)?RELAY_ON:RELAY_OFF);
        }
      }
      Bounce debouncer = Bounce();
      Bounce debouncer2 = Bounce();
      Bounce debouncer3 = Bounce();
      Bounce debouncer4 = Bounce();
      
      void setup() { 
        // Setup locally attached sensors
        delay(10000);
         // Setup the button.
        pinMode(BUTTON_PIN, INPUT_PULLUP);
        pinMode(BUTTON2_PIN, INPUT_PULLUP);
        pinMode(BUTTON3_PIN, INPUT_PULLUP);
        pinMode(BUTTON4_PIN, INPUT_PULLUP);
        // After setting up the button, setup debouncer.
        debouncer.attach(BUTTON_PIN);
        debouncer.interval(5);
        debouncer2.attach(BUTTON2_PIN);
        debouncer2.interval(5);
        debouncer3.attach(BUTTON3_PIN);
        debouncer3.interval(5);
        debouncer4.attach(BUTTON4_PIN);
        debouncer4.interval(5);
      
        //presentation();
      }
      void presentation()  
      {   
        // Send the sketch version information to the gateway and Controller
        sendSketchInfo("Relay", "1.0");
      
        for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS;sensor++, pin++) {
          // Register all sensors to gw (they will be created as child devices)
          present(sensor, S_LIGHT);
        }
      }
      MyMessage msg(1, V_LIGHT);
      MyMessage msg2(2, V_LIGHT);
      MyMessage msg3(3, V_LIGHT);
      MyMessage msg4(4, V_LIGHT);
      
      void loop() { 
        // Send locally attached sensor data here 
        if (debouncer.update()) {
          // Get the update value.
          int value = debouncer.read();
          // Send in the new value.
          if(value == LOW){
               saveState(1, !loadState(1));
               digitalWrite(RELAY_1, loadState(1)?RELAY_ON:RELAY_OFF);
               send(msg.set(loadState(1)));
               }
        }
        if (debouncer2.update()) {
            int value2 = debouncer2.read();
          if(value2 == LOW){
               saveState(2, !loadState(2));
               digitalWrite(RELAY_2, loadState(2)?RELAY_ON:RELAY_OFF);
               send(msg2.set(loadState(2)));
               }
        }
        if (debouncer3.update()) {
            int value3 = debouncer3.read();
          if(value3 == LOW){
               saveState(3, !loadState(3));
               digitalWrite(RELAY_3, loadState(3)?RELAY_ON:RELAY_OFF);
               send(msg3.set(loadState(3)));
               }
        }
        if (debouncer4.update()) {
            int value4 = debouncer4.read();
          if(value4 == LOW){
               saveState(4, !loadState(4));
               digitalWrite(RELAY_4, loadState(4)?RELAY_ON:RELAY_OFF);
               send(msg4.set(loadState(4)));
               }
        }
      }
      
      
      void receive(const MyMessage &message) {
        // We only expect one type of message from controller. But we better check anyway.
        if (message.type==V_LIGHT) {
           // Change relay state
           digitalWrite(message.sensor-1+RELAY_1, message.getBool()?RELAY_ON:RELAY_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());
         } 
      }
      

      Home Assistant config:

      mysensors:
        gateways:
          - device: '/dev/ttyACM0'
            persistence_file: 'mysensors.json'
            baud_rate: 38400
            topic_in_prefix: 'mygateway1-out'
            topic_out_prefix: 'mygateway1-in' 
        optimistic: false
        persistence: true
        retain: true
        version: '2.0'
      

      mysensors.json generated by Home Assistant:

      {}
      

      when I'm connecting arduino to HA I'm getting this:

      2019-08-26 18:33:09 INFO (MainThread) [mysensors] Connected to Serial<id=0x14800ea0cf90, open=True>(port='/dev/ttyACM0', baudrate=38400, bytesize=8, parity='N', stopbits=1, timeout=0, xonxoff=False, rtscts=False, dsrdtr=False)
      2019-08-26 18:33:10 DEBUG (MainThread) [mysensors.handler] n:0 c:255 t:3 s:9 p:Starting gateway (R-NGA-, 2.0.0)
      2019-08-26 18:33:10 INFO (MainThread) [mysensors.handler] n:0 c:255 t:3 s:14 p:Gateway startup complete.
      2019-08-26 18:33:10 DEBUG (MainThread) [homeassistant.components.mysensors.gateway] Node update: node 0 child 255
      2019-08-26 18:33:15 DEBUG (SyncWorker_12) [mysensors.persistence] Saving sensors to persistence file /config/mysensors.json
      2019-08-26 18:33:20 DEBUG (MainThread) [mysensors.handler] n:0 c:255 t:3 s:9 p:No registration required
      2019-08-26 18:33:20 DEBUG (MainThread) [mysensors.handler] n:0 c:255 t:3 s:9 p:Init complete, id=0, parent=0, distance=0, registration=1
      

      any idea to make it work?

      posted in Home Assistant
      Jan Kocon
      Jan Kocon