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. General Discussion
  3. Concept of a flexible but simple smart network

Concept of a flexible but simple smart network

Scheduled Pinned Locked Moved General Discussion
25 Posts 6 Posters 4.3k Views 4 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.
  • alowhumA Offline
    alowhumA Offline
    alowhum
    Plugin Developer
    wrote on last edited by
    #15

    Is encryption built in?

    1 Reply Last reply
    0
    • Z Offline
      Z Offline
      Zeph
      Hero Member
      wrote on last edited by
      #16

      What is W3P? Is this some sort of CANBUS?

      axillentA 1 Reply Last reply
      0
      • K Offline
        K Offline
        kimot
        wrote on last edited by kimot
        #17

        I think your addressing concept do not respect hardware - microcontrollers and radio modules we are using.
        Some hardware ( RFM69, serial in 9bit mode, etc. ) can filter incoming messages itself and do not disturb controller when
        receive different address then node own ID or broadcast.
        For example with RFM69 you can store node ID and broadcast address in radiomodule and it will receive only messages with this specific addresses.
        But your address schema uses 4 lower bits for node ID ( 0-16 ) and lower 8 bits in all combination for broadcast too.
        Your node must receive all 16 bits to distinguish - if it is node addressed message or broadcast call.
        So you cannot use addressing features of our hardware.
        I think, better is divide 16 bits to 8 bit node ID and 8 bits network ID.
        Network filtering and routing then make gateway and distribute messages to connected nodes or other networks.

        axillentA 1 Reply Last reply
        0
        • Z Zeph

          What is W3P? Is this some sort of CANBUS?

          axillentA Offline
          axillentA Offline
          axillent
          Mod
          wrote on last edited by
          #18

          @zeph yes and no. it is very very simple hardware, similar to LocoNet. allows to transfer a few kbit/sec on single wire (w3p - 3 wire VCC + Signal + GND) using 1 npn transistor + 4 resistors at absolute minimum

          sense and drive

          1 Reply Last reply
          0
          • K kimot

            I think your addressing concept do not respect hardware - microcontrollers and radio modules we are using.
            Some hardware ( RFM69, serial in 9bit mode, etc. ) can filter incoming messages itself and do not disturb controller when
            receive different address then node own ID or broadcast.
            For example with RFM69 you can store node ID and broadcast address in radiomodule and it will receive only messages with this specific addresses.
            But your address schema uses 4 lower bits for node ID ( 0-16 ) and lower 8 bits in all combination for broadcast too.
            Your node must receive all 16 bits to distinguish - if it is node addressed message or broadcast call.
            So you cannot use addressing features of our hardware.
            I think, better is divide 16 bits to 8 bit node ID and 8 bits network ID.
            Network filtering and routing then make gateway and distribute messages to connected nodes or other networks.

            axillentA Offline
            axillentA Offline
            axillent
            Mod
            wrote on last edited by
            #19

            @kimot the main idea of all my project is to manage network abstraction layer regardless hardware
            only translation + driver layers are hardware related, but them allow to transfer logical layer data throuth any physical hardware
            my 16bit addressing could be translated to addresses used by your hardware to keep handle communication based on hardware advantages.

            I just launched a network with translation throuth Ethernet/TCP with application server running on orangepi
            Working pretty well. On logical level it is always 16bit addressing with broadcasting support.
            developing device you should not take care how message will reach another device
            this is handled while developing appropriate translations/drivers on bridge side.

            bridge - a device connecting 2 or more different physycal layers.

            it is also allows to crate a building blocks.
            For example I'm running ESP8266 with TCP interface to network on one side and UART&JSON interface on other side
            attaching MCU to ESP by UART a can connect any kind of network to my network

            sense and drive

            1 Reply Last reply
            0
            • axillentA Offline
              axillentA Offline
              axillent
              Mod
              wrote on last edited by
              #20

              just to illustrate how translation is working
              you do not need direct logic match between abstract layer and the layer of used interface

              here is how translation is working between my network and MQTT broker:

              0_1541172446514_91ed42fc-c745-43ba-a897-c7cca1244feb-изображение.png

              bellow is initialization of 2 different nodes attached to 2 different interfaces, one to TCP/IP network, other to MQTT broker
              it is a code from linux application server

              //-----------------------------------------------------------------------------------------
              // Nodes
              //-----------------------------------------------------------------------------------------
              // --- inet
              typedef Smartlets::Common::RouteTableFile									RouteTable;
              typedef STAVRP::Linux::TCPDrv<0>											TCPDrv;
              typedef Smartlets::Interface::Translator::INet<Message, TCPDrv, RouteTable>	TranslINet;
              typedef Smartlets::Interface::P2P<Message, TranslINet, 16, 16>			InterfaceINet;
              typedef Smartlets::Node::NodeBasic<Message, InterfaceINet, ApplInet>		NodeINet;
              
              // --- mqtt
              typedef Smartlets::Interface::Translator::Mqtt<Message>				TranslMqtt;
              typedef Smartlets::Interface::P2P<Message, TranslMqtt, 16, 16>			InterfaceMqtt;
              typedef Smartlets::Node::NodeBasic<Message, InterfaceMqtt, ApplMqtt>		NodeMqtt;
              

              Inside Translator:Mqtt the following is used for example inside TX method (sending message):

              	static bool TX(const Message& msg) {
              
              		char key[128];
              
              		if( msg.header.tx.IsBroadcast() )
              			sprintf(key, "/%s/bc/o/%d/%d/%d/%d", data.swi_domain.c_str(), msg.header.tx.GetBroadcastID(), msg.header.rx.GetNetSegment(), msg.header.rx.GetNetDevID(), msg.header.type.type);
              		else
              			sprintf(key, "/%s/m/o/%d/%d/%d/%d/%d", data.swi_domain.c_str(), msg.header.tx.GetNetSegment(), msg.header.tx.GetNetDevID(), msg.header.rx.GetNetSegment(), msg.header.rx.GetNetDevID(), msg.header.type.type);
              
              		std::string	payload = json_ext::FromMessage(msg);
              		data.drv.TXPut(STAVRP::Linux::MqttEntry(key, payload));
              
              		return true;
              	}```
              
              and this is how it is finally bridged between:
              
              
              while(1) {
              
              	//---------------------------------------------------------------------------
              	// loop inet
              	//---------------------------------------------------------------------------
              	if( NodeINet::Loop() ) {
              
              		Message msg = NodeINet::RX();
              
              		Logger::root() << log4cpp::Priority::DEBUG << "inet-> tx=" << msg.header.tx.id;
              
              		NodeINet::CommitRX(false);
              
              		// --- routing
              		if( NodeINet::TX(msg) ) {
              			Logger::root() << log4cpp::Priority::DEBUG << "inet->inet TX OK";
              			// delayed queue
              		} else {
              			Logger::root() << log4cpp::Priority::ERROR << "inet->inet TX failed";
              		}
              
              		if( NodeMqtt::TX(msg) ) {
              			Logger::root() << log4cpp::Priority::DEBUG << "inet->mqtt TX OK";
              		} else {
              			Logger::root() << log4cpp::Priority::ERROR << "inet->mqtt TX failed";
              		}
              
              	}
              
              	//---------------------------------------------------------------------------
              	// loop mqtt
              	//---------------------------------------------------------------------------
              	if( NodeMqtt::Loop() ) {
              
              		Message msg = NodeMqtt::RX();
              
              		Logger::root() << log4cpp::Priority::DEBUG << "mqtt-> tx=" << msg.header.tx.id;
              
              		NodeMqtt::CommitRX(false);
              
              		if( NodeINet::TX(msg) ) Logger::root() << log4cpp::Priority::DEBUG << "mqtt->inet TX OK";
              		else Logger::root() << log4cpp::Priority::ERROR << "mqtt->inet TX failed";
              
              	}
              
              	sleep(1);
              
              }```
              

              sense and drive

              1 Reply Last reply
              0
              • axillentA Offline
                axillentA Offline
                axillent
                Mod
                wrote on last edited by axillent
                #21

                made a few steps forward

                launched ESP8266 node & bridge and STM32 bridge and TCP/IP router based on linux (orangepi)
                bellow is my working example
                list of supported platforms:

                • STM8S/IAR
                • STM32F0/Keil - draft
                • ATMEL/Atmel studio - draft
                • Arduino ESP8266
                • Arduino STM32
                • Linux/g++

                i;m working on 2 libs. first is to handle platform dependant things. second is platform independant smart devices network
                regardless platform and regardless communication hardware the framework allows to transfer messages using RX/TX notation with 16 bit global addressing.
                Addressing is organized as 4096 segments where 4094 are 15 node segments each and 2 segments are for broadcadsting

                framework allows to connect potentially absolutelly different communication hardware
                currently i'm running:

                • simple one wire (1 wire signal + 2 wire power) network
                • wifi based nodes
                • twisted pair connected ethernet devices

                bridge between different types of network is organized on TCP/IP application server running currently on linux
                etc. potentially allows to connect network segments regardless physicall location, only internet connection is required

                why i'm doing this? mostly for fan but also to implement 2 principles:

                • application layer to be independant from hardware and transport. message format is universal and is the same regardless platform and communication hardware. Addressing is also universal. Application should not take care about intermediate specific, this is handled by other components
                • avoid a central unit. each device can communicate with each device. the only central component is application server. but is is very simple, robust and reliable. failover is supported

                My example:
                0_1542366195599_swi_network_example1.png

                sense and drive

                1 Reply Last reply
                0
                • axillentA Offline
                  axillentA Offline
                  axillent
                  Mod
                  wrote on last edited by
                  #22

                  for esp8266 i made an universal bridge application
                  it can be used for both:

                  • single node, esp8266 is running a final application. on the photo above my thermostats to measure room temperature, report it and to send ON/OFF commands to heaters

                  • bridge. can be used to connect other type networks wirelessly to application server. UART is used for this + json translation. currently this is implemented to connect heating controllers located on each floor

                  0_1542367097091_swi.png

                  main and failover servers can be configured
                  also each node is configured to handle from one to a few network segments. this allows simple routing from application server back to node
                  esp8266 is using ArduinoOTA and zero hardcording.
                  after fresh programming esp creates AP and smartphone can be used to preconfigure a node
                  any updates are keeping configuration except major updates there stored structure can be affected

                  application server is also support MQTT translation
                  etc. it looks like a routing between my network and MQTT server
                  RX/TX adresing are mapped to MQTT topic while message is translated into JSON:
                  0_1542367488414_b02f627d-a80b-4837-9c39-335bcb337667-изображение.png

                  sense and drive

                  1 Reply Last reply
                  0
                  • axillentA Offline
                    axillentA Offline
                    axillent
                    Mod
                    wrote on last edited by axillent
                    #23

                    also from last
                    byteorder handling is build in
                    library allows to choose any order
                    I select bigendian because this is natural to my major MCU - STM8
                    on little endian platforms (like STM32, ESP8266 and ARM64) data is automatically translated

                    sense and drive

                    1 Reply Last reply
                    1
                    • axillentA Offline
                      axillentA Offline
                      axillent
                      Mod
                      wrote on last edited by
                      #24

                      just published my libraries
                      anyonw is welsome on review and comments https://github.com/axillent :

                      • list item stavrp C++ multiplafrom suport library, platforms are at different level of support

                      • list item smartletsp C++ smart devices network

                      • list item swilib and integration of above two libraries with arduino framework

                      sense and drive

                      1 Reply Last reply
                      2
                      • axillentA Offline
                        axillentA Offline
                        axillent
                        Mod
                        wrote on last edited by
                        #25

                        Linux Router https://github.com/axillent/swi_appserver

                        sense and drive

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


                        15

                        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