Rpi MQTT Gateway on Docker



  • Has anyone successfully installed a raspberry pi Mysensors MQTT Gateway in a docker container?
    There is a docker file with a mysensors mqtt online, but it does not work.
    And if it where, it is lacking personalization files and config files.



  • If anyone is interested.. I got MySensors Ethernet Gateway working in a docker container on a RPi, with a radio connected physically to the Pi.

    0_1549915308677_f7d902cb-9819-421f-ae76-7ed4a6acc9b3-image.png



  • Hi,

    I am starting with MySensors to switch my mighthat gateway in near future. Could you share a bit more? I have some experience with docker.

    Thanks



  • @jrbenito I did jump the gun a little early. Sure, the gateway works, if you have externally connected devices, like an external MySensors gateway, but it does not work if you have the radio wired directly onto the RPi. It cannot fint the SPI.

    Basically I did this:

    A DockerFile (the .configure section needs to be modified to personal preferences)

    FROM balenalib/raspberrypi3-debian
    
    RUN apt-get update && apt-get install -y --no-install-recommends git bash make g++ \
      && cd /root \
      && git clone https://github.com/mysensors/MySensors.git --branch development \
      && cd /root/MySensors \
      && mkdir -p /data \
      && LDFLAGS="-static" ./configure --my-transport=rfm69 --my-rfm69-frequency=868 --my-is-rfm69hw --my-gateway=ethernet --my-port=5003 --my-leds-err-pin=29 --my-leds-rx-pin=31 --my-leds-tx-pin=33 --my-rfm69-encryption-enabled --my-signing-request-signatures --my-signing=software --my-config-file="/data/mysensors.conf" \
      && make \
      && cd /root \
      && apt-get remove -y git make g++ && apt-get autoremove -y
    
    EXPOSE 5003
    
    ENTRYPOINT ["/root/MySensors/bin/mysgw"]
    

    And a Docker-compose.yml file (ports needs to be configured. I think 5003 is not needed, since 5003 would be used if the gateway was handling the radio wired to the pins of the pi. Run with serial instead)

    version: '3'
    services:
      portainer:
        container_name: portainer
        image: portainer/portainer:arm
        restart: always
        volumes:
          - '/var/run/docker.sock:/var/run/docker.sock'
        expose:
          - 9000
        ports:
          - 9000:9000
      
      mysensors:
        build:
          context: .
          dockerfile: Dockerfile
        container_name: mysensor_eth
        restart: unless-stopped
        privileged: true
        devices:
          - /dev/ttyACM0:/dev/ttyACM0
        ports:
          - 5003:5003  
        volumes:
          - /mnt/usb1/mysensorsd/data:/data:rw
          - /sys:/sys:rw
          - /tmp:/tmp
    
    

    The config file needs to be on a exposed volume and have the eeprom file pointed to the same volume
    File mysensors.conf and it needs to be modified for signing keys and path to log aqnd eeprom

    i had everything on /mnt/usb1/mysensors and folders data created within that path. I set access to full RW for everyone

    # Logging
    # Verbosity: debug,info,notice,warn,err
    verbose=debug
    
    # Enable logging to a file.
    log_file=1
    # Log file path.
    log_filepath=/mnt/usb1/mysensors/data/mysgw.log
    
    # Enable logging to a named pipe.
    # Use this option to view your gateway's log messages
    # from the log_pipe_file defined bellow.
    # To do so, run the following command on another terminal:
    #   cat "log_pipe_file"
    log_pipe=1
    log_pipe_file=/tmp/mysgw.pipe
    
    # Enable logging to syslog.
    syslog=0
    
    # EEPROM settings
    eeprom_file=/mnt/usb1/mysensors/data/mysensors.eeprom
    eeprom_size=1024
    
    # Software signing settings
    # Note: The gateway must have been built with signing
    #       support to use the options below.
    #
    # To generate a HMAC key run mysgw with: --gen-soft-hmac-key
    # copy the new key in the line below and uncomment it.
    soft_hmac_key=****************
    # To generate a serial key run mysgw with: --gen-soft-serial-key
    # copy the new key in the line below and uncomment it.
    soft_serial_key=*******************
    
    # Encryption settings
    # Note: The gateway must have been built with encryption
    #       support to use the options below.
    #
    # To generate a AES key run mysgw with: --gen-aes-key
    # copy the new key in the line below and uncomment it.
    aes_key=**************
    

    I do not use the MySensors on a docker. I had som many problems with it, SPI beeing one, and the LEDs an other.
    It literally takes 3 minutes to set it up and run nativelly on a Pi, and this gives you full access to everything.

    I run everything else in a docker.



  • @magpern SPI access in Docker container is possible, you have to use --privileged switch when creating container and some other switches when compiling. I ended up with the following Dockerfile:

    FROM raspbian/stretch AS build
    
    WORKDIR /root
    RUN apt-get update && apt-get install -y --no-install-recommends git bash make g++ \
      && git clone https://github.com/mysensors/MySensors.git --branch development 
    WORKDIR MySensors
    RUN echo "##### Building version: $(cat library.properties | grep version | cut -d= -f2)-$(git describe --tags)"
    RUN LDFLAGS="-static" ./configure --my-transport=rfm69 --my-rfm69-frequency=433 --my-is-rfm69hw --my-gateway=mqtt --my-controller-ip-address=<ip of the mqtt server> --my-mqtt-user=<user> --my-mqtt-password=<password> --my-mqtt-publish-topic-prefix=mysensors-out --my-mqtt-subscribe-topic-prefix=mysensors-in  --my-leds-err-pin=12 --my-leds-rx-pin=16 --my-leds-tx-pin=18 --my-config-file=/data/mysensors.conf --spi-driver=BCM --soc=BCM2836 --cpu-flags="-mcpu=cortex-a53 -mfloat-abi=hard -mfpu=neon-fp-armv8 -mneon-for-64bits -mtune=cortex-a53" \
      && make
    
    FROM hypriot/rpi-alpine-scratch
    RUN mkdir /data
    WORKDIR /root
    COPY --from=build /root/MySensors/bin/mysgw .
    
    EXPOSE 5003
    ENTRYPOINT ["./mysgw"]
    

    I couldn't get ethernet mode to work (I got core dump as soon as client connected to gateway) so I'm using MQTT mode which works great. Here is the relevant run command:

    docker run --privileged --volume /opt/mysensors:/data --restart unless-stopped --name mysgw zurajm/mysgw-mqtt-alpine:latest
    

    the mysensors.conf resides in /opt/mysensors:

    # Logging
    # Verbosity: debug,info,notice,warn,err
    verbose=debug
    
    # Enable logging to a file.
    log_file=0
    # Log file path.
    log_filepath=/tmp/mysgw.log
    
    # Enable logging to a named pipe.
    # Use this option to view your gateway's log messages
    # from the log_pipe_file defined bellow.
    # To do so, run the following command on another terminal:
    #   cat "log_pipe_file"
    log_pipe=0
    log_pipe_file=/tmp/mysgw.pipe
    
    # Enable logging to syslog.
    syslog=0
    
    # EEPROM settings
    eeprom_file=/data/mysensors.eeprom
    eeprom_size=1024
    
    # Software signing settings
    # Note: The gateway must have been built with signing
    #       support to use the options below.
    #
    # To generate a HMAC key run mysgw with: --gen-soft-hmac-key
    # copy the new key in the line below and uncomment it.
    #soft_hmac_key=
    # To generate a serial key run mysgw with: --gen-soft-serial-key
    # copy the new key in the line below and uncomment it.
    #soft_serial_key=
    
    # Encryption settings
    # Note: The gateway must have been built with encryption
    #       support to use the options below.
    #
    # To generate a AES key run mysgw with: --gen-aes-key
    # copy the new key in the line below and uncomment it.
    #aes_key=
    

    I only modified eeprom_file location to /data folder.

    I hope someone can benefit from it.

    BR, Miha



  • Hi,

    I was looking for this!
    How can I get this docker container?
    Cheers,
    Joaoabs


Log in to reply
 

Suggested Topics

52
Online

11.4k
Users

11.1k
Topics

112.7k
Posts