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. Development
  3. [security] Introducing signing support to MySensors

[security] Introducing signing support to MySensors

Scheduled Pinned Locked Moved Development
security
491 Posts 48 Posters 334.1k Views 30 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.
  • FotoFieberF FotoFieber

    @Anticimex
    sha256 is secure enough. But if I understand the implementation correctly, you use the space at the end of the payload for the signature and not the full signature.

    Another thing to consider is that the strength of the signature is inversely proportional to the payload size.

    If I calculate it right, the length of the signature is less or equal (23 bytes) 184 bit.

    With a payload of 4 bytes, which would probably be the usual payload I have here, there would be left only 160 bit (20 bytes).

    In comparison a HMAC_SHA256 uses 256 bit,

    Or did I miss something?

    It could be implemented quite simple:

    1. Node sends data to gateway which in my case is published to MQTT
    2. some consumer likes to have this signed and sends the node the message back with a sign request
    3. the node looks at the message and checks, if the value inside the message is still valid. When ok, it sends a HMAC splitted in two messages. If not, it ignores the message or sends NOK.

    The problem with this implementation would be, that the node hast to be active to get the singing request.

    Maybe it would be better to just send two other messages with the HMAC after the data.

    I would suggest to implement the check of the HMAC where it is needed, not in the gateway, In my case, this would be node-red.

    AnticimexA Offline
    AnticimexA Offline
    Anticimex
    Contest Winner
    wrote on last edited by Anticimex
    #74

    @FotoFieber
    Regarding the weakened security based on the message size, you are correct.
    But I still disagree on splitting the messages because it will mean that some messages will fail to be signed (depending on network load) and it is no good to have a solution that adds uncertainty in that respect. And I definitely do not want to add restrictions on which types of nodes are capable on signing and which are not. Having the gateway signing messages is a very real application in use cases like locks and such.
    The opposite is also equally valid, some nodes might send "important" data. The gateway needs to be able to authenticate such nodes (keyfobs etc).
    We have to weigh complexity vs resources, and currently we are pretty much at the limit of our capabilities. An ethernet or mqtt gateway running on an Arduino nano can today barely fit HW support for signing. SW signing does not fit. So we can't really get more complex with the solution without also stepping up the HW platform we execute on.

    Do you feel secure today? No? Start requiring some signatures and feel better tomorrow ;)

    1 Reply Last reply
    0
    • AnticimexA Offline
      AnticimexA Offline
      Anticimex
      Contest Winner
      wrote on last edited by
      #75

      I should add that even if signature was separated in its own message, it still would not be full since the rf solution is only capable of sending 32 byte messages and some bytes are needed for routing info. So if "full" signature is required, some framing protocol will also be needed, and then things really get out of hand on a poor Arduino nano or pro mini.
      I would suggest using RF69 with AES encryption if the signing scheme in place is inadequate.

      Do you feel secure today? No? Start requiring some signatures and feel better tomorrow ;)

      1 Reply Last reply
      0
      • scalzS Offline
        scalzS Offline
        scalz
        Hardware Contributor
        wrote on last edited by
        #76

        Hi.

        I am trying to design some boards. And I would like to have a little precision.
        If I understand right, as signing is included in rfm69 radiohead library with mysensors, I don't need atsha? Atsha recommanded with nrf?

        AnticimexA 1 Reply Last reply
        0
        • scalzS scalz

          Hi.

          I am trying to design some boards. And I would like to have a little precision.
          If I understand right, as signing is included in rfm69 radiohead library with mysensors, I don't need atsha? Atsha recommanded with nrf?

          AnticimexA Offline
          AnticimexA Offline
          Anticimex
          Contest Winner
          wrote on last edited by
          #77

          @scalz
          Well, it depends on what you want. In the first post I have outline my stance on the matter. I prefer signing before anything. RF69 offer optional encryption, not signing. If you are happy with just encryption, then you don't need ATSHA but have to use RF69 (or another circuit).

          Do you feel secure today? No? Start requiring some signatures and feel better tomorrow ;)

          1 Reply Last reply
          0
          • scalzS Offline
            scalzS Offline
            scalz
            Hardware Contributor
            wrote on last edited by
            #78

            @Anticimex : you are right. I confused two different things!! So I think the best is combination of both.
            Thank you for your precision and for sharing your work.

            AnticimexA 2 Replies Last reply
            0
            • scalzS scalz

              @Anticimex : you are right. I confused two different things!! So I think the best is combination of both.
              Thank you for your precision and for sharing your work.

              AnticimexA Offline
              AnticimexA Offline
              Anticimex
              Contest Winner
              wrote on last edited by
              #79

              @scalz
              Thanks and you are welcome :)

              Do you feel secure today? No? Start requiring some signatures and feel better tomorrow ;)

              1 Reply Last reply
              0
              • scalzS scalz

                @Anticimex : you are right. I confused two different things!! So I think the best is combination of both.
                Thank you for your precision and for sharing your work.

                AnticimexA Offline
                AnticimexA Offline
                Anticimex
                Contest Winner
                wrote on last edited by
                #80

                @scalz
                For the record, I share your opinion on using a combination. I will probably go for that myself when I fully deploy my sensornetwork. RF69 with AES encryption on RF level, and ATSHA authentication on protocol level should be enough to protect against most deliberate non-physical mischief.

                Do you feel secure today? No? Start requiring some signatures and feel better tomorrow ;)

                1 Reply Last reply
                0
                • scalzS Offline
                  scalzS Offline
                  scalz
                  Hardware Contributor
                  wrote on last edited by
                  #81

                  @Anticimex : I totally agree with you. I am still defining my needs too. I have only some nrf nodes but I think Mysensors + RFM + Atsha + ota=Zwave killer! it might eliminate repeater needs.
                  On my designs I put nrf and rfm footprints but I think I will move to rfm as soon as I can. I will share my designs when it will be tested. Hope there will be lots of boards for mysensors in the future.
                  Have a good day!

                  AnticimexA 1 Reply Last reply
                  0
                  • scalzS scalz

                    @Anticimex : I totally agree with you. I am still defining my needs too. I have only some nrf nodes but I think Mysensors + RFM + Atsha + ota=Zwave killer! it might eliminate repeater needs.
                    On my designs I put nrf and rfm footprints but I think I will move to rfm as soon as I can. I will share my designs when it will be tested. Hope there will be lots of boards for mysensors in the future.
                    Have a good day!

                    AnticimexA Offline
                    AnticimexA Offline
                    Anticimex
                    Contest Winner
                    wrote on last edited by
                    #82

                    @scalz
                    I have actually designed a board that supports both radios. I have just received them but have not mounted them with components yet so I have not been able to verify the design. But I will post it on the forum as soon as I have. It will be pin-compatible with Sensbender Micro but also support RF69. It is not intended to be replacing that board nor is it an "official" MySensor board. I have just designed it to fit my personal preferences and to serve as a generic multi-purpose sensor backend (it relies on modules and has a lot of headers to support many sensors in parallel on both 3.3 and 5V rails).

                    Do you feel secure today? No? Start requiring some signatures and feel better tomorrow ;)

                    1 Reply Last reply
                    0
                    • scalzS Offline
                      scalzS Offline
                      scalz
                      Hardware Contributor
                      wrote on last edited by scalz
                      #83

                      wow. can't wait to see your creations! Seems interesting. Your board could be very helpful.
                      I love Sensebender. But 0402, it was difficult to solder for me! So I am trying to use 0805 in my designs, easier for me.
                      I am finishing to modify a moteino (0805 so a little bigger) to add nrf and atsha. I am waiting for others boards (not received yet) : uCurrent module, one power management optimization board (based on ulpnode idea), esp8266-07 with nrf, rfm and atsha (I will try to make sort of mqtt gateway), and a mysensors relay board. I have others idea too: dimmer for one main, hb100 (for barrier security), mgc3030 (for gesture. lot of stuff on this one I think). But before I must finish what I started. Hihi, mysensors and automation is addictive!

                      I read in previous post that you advised not to use A6,A7 for atsha. But I imagine that I can use others pin (if i take care of datasheet of course)? I think it is doable, just have to modify pin ref in code next, isn't it? Anyway, I always try to keep mysensors reference design (A3), it is just for personal info.

                      AnticimexA 2 Replies Last reply
                      0
                      • scalzS scalz

                        wow. can't wait to see your creations! Seems interesting. Your board could be very helpful.
                        I love Sensebender. But 0402, it was difficult to solder for me! So I am trying to use 0805 in my designs, easier for me.
                        I am finishing to modify a moteino (0805 so a little bigger) to add nrf and atsha. I am waiting for others boards (not received yet) : uCurrent module, one power management optimization board (based on ulpnode idea), esp8266-07 with nrf, rfm and atsha (I will try to make sort of mqtt gateway), and a mysensors relay board. I have others idea too: dimmer for one main, hb100 (for barrier security), mgc3030 (for gesture. lot of stuff on this one I think). But before I must finish what I started. Hihi, mysensors and automation is addictive!

                        I read in previous post that you advised not to use A6,A7 for atsha. But I imagine that I can use others pin (if i take care of datasheet of course)? I think it is doable, just have to modify pin ref in code next, isn't it? Anyway, I always try to keep mysensors reference design (A3), it is just for personal info.

                        AnticimexA Offline
                        AnticimexA Offline
                        Anticimex
                        Contest Winner
                        wrote on last edited by
                        #84

                        @scalz
                        Then you'll be happy to hear that my board uses 0805 and 1206 and also has enlarged pads for hand soldering on all SMD footprints :)
                        It also features a jumper for current measurement, three power connection options, switchable regulators for super low standby currents and some other features. But I will give the details in a separate post.

                        Do you feel secure today? No? Start requiring some signatures and feel better tomorrow ;)

                        1 Reply Last reply
                        1
                        • scalzS scalz

                          wow. can't wait to see your creations! Seems interesting. Your board could be very helpful.
                          I love Sensebender. But 0402, it was difficult to solder for me! So I am trying to use 0805 in my designs, easier for me.
                          I am finishing to modify a moteino (0805 so a little bigger) to add nrf and atsha. I am waiting for others boards (not received yet) : uCurrent module, one power management optimization board (based on ulpnode idea), esp8266-07 with nrf, rfm and atsha (I will try to make sort of mqtt gateway), and a mysensors relay board. I have others idea too: dimmer for one main, hb100 (for barrier security), mgc3030 (for gesture. lot of stuff on this one I think). But before I must finish what I started. Hihi, mysensors and automation is addictive!

                          I read in previous post that you advised not to use A6,A7 for atsha. But I imagine that I can use others pin (if i take care of datasheet of course)? I think it is doable, just have to modify pin ref in code next, isn't it? Anyway, I always try to keep mysensors reference design (A3), it is just for personal info.

                          AnticimexA Offline
                          AnticimexA Offline
                          Anticimex
                          Contest Winner
                          wrote on last edited by
                          #85

                          @scalz
                          Regarding pin, yes. You can freely choose any digital IO for ATSHA. A6 and A7 are not digital IO so they cannot be used. They are pure analog.

                          Do you feel secure today? No? Start requiring some signatures and feel better tomorrow ;)

                          1 Reply Last reply
                          0
                          • scalzS Offline
                            scalzS Offline
                            scalz
                            Hardware Contributor
                            wrote on last edited by scalz
                            #86

                            Very interesting. So your board will be a great addition. I will follow your work for sure!
                            Thank you very much for your help.

                            1 Reply Last reply
                            0
                            • O Offline
                              O Offline
                              otto001
                              wrote on last edited by
                              #87

                              Hi @all!

                              First off all: thanks for your great work :-)
                              I am about to compile the ethernet gw with software signing, but unfortunately I am getting some compile errors.
                              Does anyone maybe have a sketch handy and would up it here?

                              Thanks in advance and best regards,

                              Otto

                              AnticimexA 1 Reply Last reply
                              0
                              • O otto001

                                Hi @all!

                                First off all: thanks for your great work :-)
                                I am about to compile the ethernet gw with software signing, but unfortunately I am getting some compile errors.
                                Does anyone maybe have a sketch handy and would up it here?

                                Thanks in advance and best regards,

                                Otto

                                AnticimexA Offline
                                AnticimexA Offline
                                Anticimex
                                Contest Winner
                                wrote on last edited by
                                #88

                                @otto001
                                Sorry, but that is not possible on Arduino Nano. There is not enough flash available to support both ethernet and software signing. You have to use ATSHA for an ethernet gw.

                                Do you feel secure today? No? Start requiring some signatures and feel better tomorrow ;)

                                1 Reply Last reply
                                0
                                • O Offline
                                  O Offline
                                  otto001
                                  wrote on last edited by
                                  #89

                                  @Anticimex:
                                  Thanks, but I am trying to compile it for an UNO R3?! That should do it. Nevertheless: Using nanos only for nodes should work with sw signing, shouldnt it?

                                  AnticimexA 1 Reply Last reply
                                  0
                                  • O otto001

                                    @Anticimex:
                                    Thanks, but I am trying to compile it for an UNO R3?! That should do it. Nevertheless: Using nanos only for nodes should work with sw signing, shouldnt it?

                                    AnticimexA Offline
                                    AnticimexA Offline
                                    Anticimex
                                    Contest Winner
                                    wrote on last edited by
                                    #90

                                    @otto001
                                    Yep. It is the ethernet stack that costs the most.
                                    I need you to post the compiler error you get though in order to help you.

                                    Do you feel secure today? No? Start requiring some signatures and feel better tomorrow ;)

                                    1 Reply Last reply
                                    0
                                    • O Offline
                                      O Offline
                                      otto001
                                      wrote on last edited by
                                      #91

                                      I used the latest devel-branch from github.

                                      This is the error:

                                      In file included from /home/otto/sketchbook/libraries/MySensors/MyTransportNRF24.h:26:0,
                                                       from /home/otto/sketchbook/libraries/MySensors/MySensor.h:28,
                                                       from ms_gw_neu.ino:42:
                                      /home/otto/sketchbook/libraries/MySensors/utility/RF24.h:51:11: error: 'SOFT_SPI_MISO_PIN' was not declared in this scope
                                         SoftSPI<SOFT_SPI_MISO_PIN, SOFT_SPI_MOSI_PIN, SOFT_SPI_SCK_PIN, SPI_MODE> spi;
                                                 ^
                                      /home/otto/sketchbook/libraries/MySensors/utility/RF24.h:51:30: error: 'SOFT_SPI_MOSI_PIN' was not declared in this scope
                                         SoftSPI<SOFT_SPI_MISO_PIN, SOFT_SPI_MOSI_PIN, SOFT_SPI_SCK_PIN, SPI_MODE> spi;
                                                                    ^
                                      /home/otto/sketchbook/libraries/MySensors/utility/RF24.h:51:49: error: 'SOFT_SPI_SCK_PIN' was not declared in this scope
                                         SoftSPI<SOFT_SPI_MISO_PIN, SOFT_SPI_MOSI_PIN, SOFT_SPI_SCK_PIN, SPI_MODE> spi;
                                                                                       ^
                                      /home/otto/sketchbook/libraries/MySensors/utility/RF24.h:51:75: error: template argument 1 is invalid
                                         SoftSPI<SOFT_SPI_MISO_PIN, SOFT_SPI_MOSI_PIN, SOFT_SPI_SCK_PIN, SPI_MODE> spi;
                                                                                                                 ^
                                      /home/otto/sketchbook/libraries/MySensors/utility/RF24.h:51:75: error: template argument 2 is invalid
                                      /home/otto/sketchbook/libraries/MySensors/utility/RF24.h:51:75: error: template argument 3 is invalid
                                      In file included from ms_gw_neu.ino:43:0:
                                      /home/otto/sketchbook/libraries/MySensors/MyGateway.h:39:28: error: 'DEFAULT_CE_PIN' was not declared in this scope
                                         MyGateway(uint8_t _cepin=DEFAULT_CE_PIN, uint8_t _cspin=DEFAULT_CS_PIN, uint8_t _inclusion_time = 1, uint8_t _inclusion_pin = 3, uint8_t _rx=6, uint8_t _tx=5, uint8_t _er=4);
                                                                  ^
                                      /home/otto/sketchbook/libraries/MySensors/MyGateway.h:39:59: error: 'DEFAULT_CS_PIN' was not declared in this scope
                                         MyGateway(uint8_t _cepin=DEFAULT_CE_PIN, uint8_t _cspin=DEFAULT_CS_PIN, uint8_t _inclusion_time = 1, uint8_t _inclusion_pin = 3, uint8_t _rx=6, uint8_t _tx=5, uint8_t _er=4);
                                                                                                 ^
                                      ms_gw_neu.ino:80:31: error: no matching function for call to 'MyGateway::MyGateway(MyTransportNRF24&, MyHwATMega328&, MySigningAtsha204Soft&)'
                                      ms_gw_neu.ino:80:31: note: candidates are:
                                      In file included from ms_gw_neu.ino:43:0:
                                      /home/otto/sketchbook/libraries/MySensors/MyGateway.h:39:3: note: MyGateway::MyGateway(uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t)
                                         MyGateway(uint8_t _cepin=DEFAULT_CE_PIN, uint8_t _cspin=DEFAULT_CS_PIN, uint8_t _inclusion_time = 1, uint8_t _inclusion_pin = 3, uint8_t _rx=6, uint8_t _tx=5, uint8_t _er=4);
                                         ^
                                      /home/otto/sketchbook/libraries/MySensors/MyGateway.h:39:3: note:   no known conversion for argument 1 from 'MyTransportNRF24' to 'uint8_t {aka unsigned char}'
                                      /home/otto/sketchbook/libraries/MySensors/MyGateway.h:20:7: note: MyGateway::MyGateway(const MyGateway&)
                                       class MyGateway : public MySensor
                                             ^
                                      /home/otto/sketchbook/libraries/MySensors/MyGateway.h:20:7: note:   candidate expects 1 argument, 3 provided
                                      

                                      and this is the sketch - I am not sure, if everything is right (I am not deep into mysensors yet):

                                      /*
                                       * Copyright (C) 2013 Henrik Ekblad <henrik.ekblad@gmail.com>
                                       * 
                                       * Contribution by a-lurker
                                       *
                                       * 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.
                                       * 
                                       * DESCRIPTION
                                       * The EthernetGateway sends data received from sensors to the ethernet link. 
                                       * The gateway also accepts input on ethernet interface, which is then sent out to the radio network.
                                       *
                                       * The GW code is designed for Arduino 328p / 16MHz.  ATmega168 does not have enough memory to run this program.
                                       * 
                                       *
                                       * COMPILING WIZNET (W5100) ETHERNET MODULE
                                       * > Edit RF24_config.h in (libraries\MySensors\utility) to enable softspi (remove // before "#define SOFTSPI").
                                       *
                                       * COMPILING ENC28J60 ETHERNET MODULE
                                       * > Use Arduino IDE 1.5.7 (or later) 
                                       * > Disable DEBUG in Sensor.h before compiling this sketch. Othervise the sketch will probably not fit in program space when downloading. 
                                       * > Remove Ethernet.h include below and include UIPEthernet.h 
                                       * > Remove DigitalIO include 
                                       * Note that I had to disable UDP and DHCP support in uipethernet-conf.h to reduce space. (which means you have to choose a static IP for that module)
                                       *
                                       * VERA CONFIGURATION:
                                       * Enter "ip-number:port" in the ip-field of the Arduino GW device. This will temporarily override any serial configuration for the Vera plugin. 
                                       * E.g. If you want to use the defualt values in this sketch enter: 192.168.178.66:5003
                                       *
                                       * LED purposes:
                                       * - RX (green) - blink fast on radio message recieved. In inclusion mode will blink fast only on presentation recieved
                                       * - TX (yellow) - blink fast on radio message transmitted. In inclusion mode will blink slowly
                                       * - ERR (red) - fast blink on error during transmission error or recieve crc error  
                                       * 
                                       * See http://www.mysensors.org/build/ethernet_gateway for wiring instructions.
                                       *
                                       */
                                      
                                      #include <DigitalIO.h>     // This include can be removed when using UIPEthernet module  
                                      #include <SPI.h>  
                                      #include <MySensor.h>
                                      #include <MyGateway.h>  
                                      #include <stdarg.h>
                                      #include <MyConfig.h>
                                      #include <MySigningAtsha204Soft.h>
                                      
                                      // Use this if you have attached a Ethernet ENC28J60 shields  
                                      //#include <UIPEthernet.h>  
                                      
                                      // Use this fo WizNET W5100 module and Arduino Ethernet Shield 
                                      #include <Ethernet.h>   
                                      
                                      
                                      #define INCLUSION_MODE_TIME 1 // Number of minutes inclusion mode is enabled
                                      #define INCLUSION_MODE_PIN  3 // Digital pin used for inclusion mode button
                                      
                                      #define RADIO_CE_PIN        5  // radio chip enable
                                      #define RADIO_SPI_SS_PIN    6  // radio SPI serial select
                                      #define RADIO_ERROR_LED_PIN 7  // Error led pin
                                      #define RADIO_RX_LED_PIN    8  // Receive led pin
                                      #define RADIO_TX_LED_PIN    9  // the PCB, on board LED
                                      
                                      #define IP_PORT 5003        // The port you want to open 
                                      IPAddress myIp (192, 168, 1, 66);  // Configure your static ip-address here    COMPILE ERROR HERE? Use Arduino IDE 1.5.7 or later!
                                      
                                      // The MAC address can be anything you want but should be unique on your network.
                                      // Newer boards have a MAC address printed on the underside of the PCB, which you can (optionally) use.
                                      // Note that most of the Ardunio examples use  "DEAD BEEF FEED" for the MAC address.
                                      byte mac[] = { 0xCE, 0x0D, 0xBE, 0xEF, 0xFE, 0xED };  // DEAD BEEF FEED
                                      
                                      
                                      // a R/W server on the port
                                      EthernetServer server = EthernetServer(IP_PORT);
                                      
                                      
                                      MyTransportNRF24 radio;  // NRFRF24L01 radio driver
                                      MyHwATMega328 hw; // Select AtMega328 hardware profile
                                      MySigningAtsha204Soft signer(false); // Select ATSHA204A software signing backend
                                      MyGateway gw(radio, hw, signer);
                                      
                                      // No blink or button functionality. Use the vanilla constructor.
                                      // old MyGateway gw(RADIO_CE_PIN, RADIO_SPI_SS_PIN, INCLUSION_MODE_TIME);
                                      
                                      // Uncomment this constructor if you have leds and include button attached to your gateway 
                                      //MyGateway gw(RADIO_CE_PIN, RADIO_SPI_SS_PIN, INCLUSION_MODE_TIME, INCLUSION_MODE_PIN, RADIO_RX_LED_PIN, RADIO_TX_LED_PIN, RADIO_ERROR_LED_PIN);
                                      
                                      
                                      char inputString[MAX_RECEIVE_LENGTH] = "";    // A string to hold incoming commands from serial/ethernet interface
                                      int inputPos = 0;
                                      
                                      void setup()  
                                      { 
                                        Ethernet.begin(mac, myIp);
                                      
                                        // give the Ethernet interface a second to initialize
                                        delay(1000);
                                      
                                        // Initialize gateway at maximum PA level, channel 70 and callback for write operations 
                                        gw.begin(RF24_PA_LEVEL_GW, RF24_CHANNEL, RF24_DATARATE, writeEthernet);
                                      
                                        // start listening for clients
                                        server.begin();
                                      }
                                      
                                      // This will be called when data should be written to ethernet 
                                      void writeEthernet(char *writeBuffer) {
                                        server.write(writeBuffer);
                                      }
                                      
                                      
                                      void loop()
                                      {
                                        // if an incoming client connects, there will be
                                        // bytes available to read via the client object
                                        EthernetClient client = server.available();
                                      
                                        if (client) {
                                            Serial.print("bytes");
                                            // if got 1 or more bytes
                                            if (client.available()) {
                                               // read the bytes incoming from the client
                                               char inChar = client.read();
                                      
                                               if (inputPos<MAX_RECEIVE_LENGTH-1) { 
                                                 // if newline then command is complete
                                                 if (inChar == '\n') {  
                                                    // a command was issued by the client
                                                    // we will now try to send it to the actuator
                                                    inputString[inputPos] = 0;
                                      
                                                    // echo the string to the serial port
                                                    Serial.print(inputString);
                                      
                                                    gw.parseAndSend(inputString);
                                      
                                                    // clear the string:
                                                    inputPos = 0;
                                                 } else {  
                                                   // add it to the inputString:
                                                   inputString[inputPos] = inChar;
                                                   inputPos++;
                                                 }
                                              } else {
                                                 // Incoming message too long. Throw away 
                                                 inputPos = 0;
                                              }
                                            }
                                         }  
                                         gw.processRadioMessage();    
                                      }
                                      
                                      

                                      Thanks for your help in advance!

                                      Otto

                                      AnticimexA 1 Reply Last reply
                                      0
                                      • O otto001

                                        I used the latest devel-branch from github.

                                        This is the error:

                                        In file included from /home/otto/sketchbook/libraries/MySensors/MyTransportNRF24.h:26:0,
                                                         from /home/otto/sketchbook/libraries/MySensors/MySensor.h:28,
                                                         from ms_gw_neu.ino:42:
                                        /home/otto/sketchbook/libraries/MySensors/utility/RF24.h:51:11: error: 'SOFT_SPI_MISO_PIN' was not declared in this scope
                                           SoftSPI<SOFT_SPI_MISO_PIN, SOFT_SPI_MOSI_PIN, SOFT_SPI_SCK_PIN, SPI_MODE> spi;
                                                   ^
                                        /home/otto/sketchbook/libraries/MySensors/utility/RF24.h:51:30: error: 'SOFT_SPI_MOSI_PIN' was not declared in this scope
                                           SoftSPI<SOFT_SPI_MISO_PIN, SOFT_SPI_MOSI_PIN, SOFT_SPI_SCK_PIN, SPI_MODE> spi;
                                                                      ^
                                        /home/otto/sketchbook/libraries/MySensors/utility/RF24.h:51:49: error: 'SOFT_SPI_SCK_PIN' was not declared in this scope
                                           SoftSPI<SOFT_SPI_MISO_PIN, SOFT_SPI_MOSI_PIN, SOFT_SPI_SCK_PIN, SPI_MODE> spi;
                                                                                         ^
                                        /home/otto/sketchbook/libraries/MySensors/utility/RF24.h:51:75: error: template argument 1 is invalid
                                           SoftSPI<SOFT_SPI_MISO_PIN, SOFT_SPI_MOSI_PIN, SOFT_SPI_SCK_PIN, SPI_MODE> spi;
                                                                                                                   ^
                                        /home/otto/sketchbook/libraries/MySensors/utility/RF24.h:51:75: error: template argument 2 is invalid
                                        /home/otto/sketchbook/libraries/MySensors/utility/RF24.h:51:75: error: template argument 3 is invalid
                                        In file included from ms_gw_neu.ino:43:0:
                                        /home/otto/sketchbook/libraries/MySensors/MyGateway.h:39:28: error: 'DEFAULT_CE_PIN' was not declared in this scope
                                           MyGateway(uint8_t _cepin=DEFAULT_CE_PIN, uint8_t _cspin=DEFAULT_CS_PIN, uint8_t _inclusion_time = 1, uint8_t _inclusion_pin = 3, uint8_t _rx=6, uint8_t _tx=5, uint8_t _er=4);
                                                                    ^
                                        /home/otto/sketchbook/libraries/MySensors/MyGateway.h:39:59: error: 'DEFAULT_CS_PIN' was not declared in this scope
                                           MyGateway(uint8_t _cepin=DEFAULT_CE_PIN, uint8_t _cspin=DEFAULT_CS_PIN, uint8_t _inclusion_time = 1, uint8_t _inclusion_pin = 3, uint8_t _rx=6, uint8_t _tx=5, uint8_t _er=4);
                                                                                                   ^
                                        ms_gw_neu.ino:80:31: error: no matching function for call to 'MyGateway::MyGateway(MyTransportNRF24&, MyHwATMega328&, MySigningAtsha204Soft&)'
                                        ms_gw_neu.ino:80:31: note: candidates are:
                                        In file included from ms_gw_neu.ino:43:0:
                                        /home/otto/sketchbook/libraries/MySensors/MyGateway.h:39:3: note: MyGateway::MyGateway(uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t)
                                           MyGateway(uint8_t _cepin=DEFAULT_CE_PIN, uint8_t _cspin=DEFAULT_CS_PIN, uint8_t _inclusion_time = 1, uint8_t _inclusion_pin = 3, uint8_t _rx=6, uint8_t _tx=5, uint8_t _er=4);
                                           ^
                                        /home/otto/sketchbook/libraries/MySensors/MyGateway.h:39:3: note:   no known conversion for argument 1 from 'MyTransportNRF24' to 'uint8_t {aka unsigned char}'
                                        /home/otto/sketchbook/libraries/MySensors/MyGateway.h:20:7: note: MyGateway::MyGateway(const MyGateway&)
                                         class MyGateway : public MySensor
                                               ^
                                        /home/otto/sketchbook/libraries/MySensors/MyGateway.h:20:7: note:   candidate expects 1 argument, 3 provided
                                        

                                        and this is the sketch - I am not sure, if everything is right (I am not deep into mysensors yet):

                                        /*
                                         * Copyright (C) 2013 Henrik Ekblad <henrik.ekblad@gmail.com>
                                         * 
                                         * Contribution by a-lurker
                                         *
                                         * 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.
                                         * 
                                         * DESCRIPTION
                                         * The EthernetGateway sends data received from sensors to the ethernet link. 
                                         * The gateway also accepts input on ethernet interface, which is then sent out to the radio network.
                                         *
                                         * The GW code is designed for Arduino 328p / 16MHz.  ATmega168 does not have enough memory to run this program.
                                         * 
                                         *
                                         * COMPILING WIZNET (W5100) ETHERNET MODULE
                                         * > Edit RF24_config.h in (libraries\MySensors\utility) to enable softspi (remove // before "#define SOFTSPI").
                                         *
                                         * COMPILING ENC28J60 ETHERNET MODULE
                                         * > Use Arduino IDE 1.5.7 (or later) 
                                         * > Disable DEBUG in Sensor.h before compiling this sketch. Othervise the sketch will probably not fit in program space when downloading. 
                                         * > Remove Ethernet.h include below and include UIPEthernet.h 
                                         * > Remove DigitalIO include 
                                         * Note that I had to disable UDP and DHCP support in uipethernet-conf.h to reduce space. (which means you have to choose a static IP for that module)
                                         *
                                         * VERA CONFIGURATION:
                                         * Enter "ip-number:port" in the ip-field of the Arduino GW device. This will temporarily override any serial configuration for the Vera plugin. 
                                         * E.g. If you want to use the defualt values in this sketch enter: 192.168.178.66:5003
                                         *
                                         * LED purposes:
                                         * - RX (green) - blink fast on radio message recieved. In inclusion mode will blink fast only on presentation recieved
                                         * - TX (yellow) - blink fast on radio message transmitted. In inclusion mode will blink slowly
                                         * - ERR (red) - fast blink on error during transmission error or recieve crc error  
                                         * 
                                         * See http://www.mysensors.org/build/ethernet_gateway for wiring instructions.
                                         *
                                         */
                                        
                                        #include <DigitalIO.h>     // This include can be removed when using UIPEthernet module  
                                        #include <SPI.h>  
                                        #include <MySensor.h>
                                        #include <MyGateway.h>  
                                        #include <stdarg.h>
                                        #include <MyConfig.h>
                                        #include <MySigningAtsha204Soft.h>
                                        
                                        // Use this if you have attached a Ethernet ENC28J60 shields  
                                        //#include <UIPEthernet.h>  
                                        
                                        // Use this fo WizNET W5100 module and Arduino Ethernet Shield 
                                        #include <Ethernet.h>   
                                        
                                        
                                        #define INCLUSION_MODE_TIME 1 // Number of minutes inclusion mode is enabled
                                        #define INCLUSION_MODE_PIN  3 // Digital pin used for inclusion mode button
                                        
                                        #define RADIO_CE_PIN        5  // radio chip enable
                                        #define RADIO_SPI_SS_PIN    6  // radio SPI serial select
                                        #define RADIO_ERROR_LED_PIN 7  // Error led pin
                                        #define RADIO_RX_LED_PIN    8  // Receive led pin
                                        #define RADIO_TX_LED_PIN    9  // the PCB, on board LED
                                        
                                        #define IP_PORT 5003        // The port you want to open 
                                        IPAddress myIp (192, 168, 1, 66);  // Configure your static ip-address here    COMPILE ERROR HERE? Use Arduino IDE 1.5.7 or later!
                                        
                                        // The MAC address can be anything you want but should be unique on your network.
                                        // Newer boards have a MAC address printed on the underside of the PCB, which you can (optionally) use.
                                        // Note that most of the Ardunio examples use  "DEAD BEEF FEED" for the MAC address.
                                        byte mac[] = { 0xCE, 0x0D, 0xBE, 0xEF, 0xFE, 0xED };  // DEAD BEEF FEED
                                        
                                        
                                        // a R/W server on the port
                                        EthernetServer server = EthernetServer(IP_PORT);
                                        
                                        
                                        MyTransportNRF24 radio;  // NRFRF24L01 radio driver
                                        MyHwATMega328 hw; // Select AtMega328 hardware profile
                                        MySigningAtsha204Soft signer(false); // Select ATSHA204A software signing backend
                                        MyGateway gw(radio, hw, signer);
                                        
                                        // No blink or button functionality. Use the vanilla constructor.
                                        // old MyGateway gw(RADIO_CE_PIN, RADIO_SPI_SS_PIN, INCLUSION_MODE_TIME);
                                        
                                        // Uncomment this constructor if you have leds and include button attached to your gateway 
                                        //MyGateway gw(RADIO_CE_PIN, RADIO_SPI_SS_PIN, INCLUSION_MODE_TIME, INCLUSION_MODE_PIN, RADIO_RX_LED_PIN, RADIO_TX_LED_PIN, RADIO_ERROR_LED_PIN);
                                        
                                        
                                        char inputString[MAX_RECEIVE_LENGTH] = "";    // A string to hold incoming commands from serial/ethernet interface
                                        int inputPos = 0;
                                        
                                        void setup()  
                                        { 
                                          Ethernet.begin(mac, myIp);
                                        
                                          // give the Ethernet interface a second to initialize
                                          delay(1000);
                                        
                                          // Initialize gateway at maximum PA level, channel 70 and callback for write operations 
                                          gw.begin(RF24_PA_LEVEL_GW, RF24_CHANNEL, RF24_DATARATE, writeEthernet);
                                        
                                          // start listening for clients
                                          server.begin();
                                        }
                                        
                                        // This will be called when data should be written to ethernet 
                                        void writeEthernet(char *writeBuffer) {
                                          server.write(writeBuffer);
                                        }
                                        
                                        
                                        void loop()
                                        {
                                          // if an incoming client connects, there will be
                                          // bytes available to read via the client object
                                          EthernetClient client = server.available();
                                        
                                          if (client) {
                                              Serial.print("bytes");
                                              // if got 1 or more bytes
                                              if (client.available()) {
                                                 // read the bytes incoming from the client
                                                 char inChar = client.read();
                                        
                                                 if (inputPos<MAX_RECEIVE_LENGTH-1) { 
                                                   // if newline then command is complete
                                                   if (inChar == '\n') {  
                                                      // a command was issued by the client
                                                      // we will now try to send it to the actuator
                                                      inputString[inputPos] = 0;
                                        
                                                      // echo the string to the serial port
                                                      Serial.print(inputString);
                                        
                                                      gw.parseAndSend(inputString);
                                        
                                                      // clear the string:
                                                      inputPos = 0;
                                                   } else {  
                                                     // add it to the inputString:
                                                     inputString[inputPos] = inChar;
                                                     inputPos++;
                                                   }
                                                } else {
                                                   // Incoming message too long. Throw away 
                                                   inputPos = 0;
                                                }
                                              }
                                           }  
                                           gw.processRadioMessage();    
                                        }
                                        
                                        

                                        Thanks for your help in advance!

                                        Otto

                                        AnticimexA Offline
                                        AnticimexA Offline
                                        Anticimex
                                        Contest Winner
                                        wrote on last edited by
                                        #92

                                        @otto001
                                        Hm. Looks like you have a problem with your settings for soft SPI. The errors are not related to the signing backend.
                                        I suspect a problem in MyConfig.h but I have not been up to speed with the changes on development nor have I dabbled with soft SPI. I run "hardware" SPI. @hek maybe knows what setting is wrong for your problem to occur. Could be that the soft SPI driver does not take UNO boards into account?

                                        Do you feel secure today? No? Start requiring some signatures and feel better tomorrow ;)

                                        1 Reply Last reply
                                        0
                                        • O Offline
                                          O Offline
                                          otto001
                                          wrote on last edited by otto001
                                          #93

                                          @Anticimex:

                                          Thanks anyway! I will try again without signing. Maybe there is a problem in the recent devel-branch. With stable 1.4 it compiled without any issues...
                                          /update: does not compile with the "standard" ethernet-gw sketch too.... not related to signing...

                                          AnticimexA 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