Skip to content
  • Parallel Gateways

    General Discussion gateway raspberry pi arduino
    10
    0 Votes
    10 Posts
    82 Views
    skywatchS
    @jocke4u I run 2 RF gateways and it's not a problem. When you 'migrate' a node to a new gateway make sure to run the mysensors clear eeprom sketch first to get rid of the old routing table or you might have issues.
  • Home Assistant errors with serial gateway

    Home Assistant gateway
    5
    0 Votes
    5 Posts
    80 Views
    K
    Hi electrik, Yes, my nodes send the sketch name within the presentation function. As for the gateway, I have not set up a sketch name, the example I found did not implement this, so I didn't think it was necessary? I manually named the gateway node in the configuration.yaml file, and the "missing sketch name" message no longer appears in the log. I guess, I'll add an entry for node 0 (controller) as well . I'm still getting the "USB0 not ready after 15.0 secs" at startup, but all seems to work regardless. I connected the gateway to my pc using mycontroller, it all works fine. Logs look normal. Here is the code for one of my nodes, a temperature node with Arduino mini & RFM69 radio, running on battery. // Enable debug prints to serial monitor #define MY_DEBUG #define MY_BAUD_RATE 38400 // Enable and select radio type attached //#define MY_RADIO_RF24 #define MY_RADIO_RFM69 #define MY_IS_RFM69HW #define MY_RFM69_FREQUENCY RFM69_915MHZ #include <MySensors.h> #include <DallasTemperature.h> #include <OneWire.h> #define COMPARE_TEMP 0 // Send temperature only if changed? 1 = Yes 0 = No #define ONE_WIRE_BUS 8 // Pin where dallas sensor is connected #define CHILD_ID_TEMP 0 #define CHILD_ID_BATT 1 // function protos void ReadBat(double& b, uint8_t& bPct); unsigned long SLEEP_TIME = 300000; // Sleep time between reads (5min) (in milliseconds) const int BAT_V = A0; // battery voltage, AnaIn 0 OneWire oneWire(ONE_WIRE_BUS); // Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs) DallasTemperature sensors(&oneWire); // Pass the oneWire reference to Dallas Temperature. float lastTemperature; double bat, lastBat=0.0; uint8_t batPct; int numSensors=0; bool receivedConfig = false; bool metric = true; bool initialValuesSent = false; bool initialValTempSent = false; bool initialValBatSent = false; // Initialize message objects MyMessage msg(CHILD_ID_TEMP, V_TEMP); MyMessage msgBatt(CHILD_ID_BATT, V_VOLTAGE); void before() { // Startup up the OneWire library sensors.begin(); } void setup() { sensors.setWaitForConversion(false); // requestTemperatures() will not block current thread Serial.print("Found "); Serial.print(sensors.getDeviceCount(), DEC); Serial.println(" temperature devices."); sensors.requestTemperatures(); } void presentation() { Serial.println("Sending presentation"); // Send the sketch version information to the gateway and Controller sendSketchInfo("Temperature Sensor", "1.2"); // Present all sensors to controller present(CHILD_ID_TEMP, S_TEMP, "Bed room Temperature"); present(CHILD_ID_BATT, S_MULTIMETER, "Bed room node Voltage"); } void loop() { int16_t conversionTime = 0; float temperature = 0; if (!initialValuesSent) { Serial.println("Sending initial value"); // Read in the battery voltage ReadBat(bat, batPct); // get temperature conversion time conversionTime = sensors.millisToWaitForConversion(sensors.getResolution()); wait(conversionTime); // Fetch temperature temperature = sensors.getTempCByIndex(0); // send the temperature reading // set(float value, uint8_t decimals) send(msg.set(temperature, 2)); Serial.println("Requesting initial Temp value from controller"); request(CHILD_ID_TEMP, V_TEMP); wait(2000, C_SET, V_TEMP); // send bat voltage send(msgBatt.set(bat, 2)); Serial.println("Requesting initial Batt value from controller"); request(CHILD_ID_BATT, V_VOLTAGE); wait(2000, C_SET, V_VOLTAGE); } // { else { // Fetch temperatures from Dallas sensors (non-blocking) sensors.requestTemperatures(); // Read in the battery voltage ReadBat(bat, batPct); // query conversion time and sleep until conversion completed conversionTime = sensors.millisToWaitForConversion(sensors.getResolution()); // sleep() call can be replaced by wait() call if node need to process incoming messages (or if node is repeater) sleep(conversionTime); // Read temperature and send to controller // Fetch temperature temperature = sensors.getTempCByIndex(0); Serial.println("temperature: "); Serial.println(temperature); // Only send data if temperature has changed and no error #if COMPARE_TEMP == 1 if (lastTemperature != temperature && temperature != -127.00 && temperature != 85.00) { #else if (temperature != -127.00 && temperature != 85.00) { #endif // Send in the new temperature // set(float value, uint8_t decimals) send(msg.set(temperature, 2)); // Save new temperatures for next compare lastTemperature=temperature; } // Send in the new battery level sendBatteryLevel(batPct); send(msgBatt.set(bat, 2)); // Save the battery level for next compare lastBat = bat; Serial.println("Sleep..."); sleep(SLEEP_TIME); } } void receive(const MyMessage &message) { if (message.isAck()) { Serial.println("This is an ack from gateway"); } if (message.type == V_TEMP) { if (!initialValTempSent) { Serial.println("Received initial temp value from controller"); initialValTempSent = true; } } else if (message.type == V_VOLTAGE) { if (!initialValBatSent) { Serial.println("Received initial bat value from controller"); initialValBatSent = true; } } if (initialValTempSent && initialValBatSent) initialValuesSent = true; } // b - battery voltage // bPct - battery percent void ReadBat(double& b, uint8_t& bPct) { long sumBat=0; int i; // take average over 64 readings for (i = 0; i < 64; ++i) { // read & sum battery voltage sumBat += analogRead(BAT_V); } sumBat = sumBat >> 6; // shift 6 -> divide by 64 b = sumBat*3.3/1023.0; bPct = (uint8_t)(sumBat*100.0/1023.0); } Here is the serial gateway sketch: #include <SoftwareSerial.h> SoftwareSerial softSerial(8, 9); // RX, TX // Enable debug prints to serial monitor #define MY_DEBUG #define MY_DEBUGDEVICE softSerial // You also need to create softSerial in setup() // Enable and select radio type attached //#define MY_RADIO_RF24 //#define MY_RADIO_NRF5_ESB //#define MY_RADIO_RFM95 #define MY_RADIO_RFM69 #define MY_IS_RFM69HW #define MY_RFM69_FREQUENCY RFM69_915MHZ // 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 a lower baud rate for Arduinos running on 8 MHz (Arduino Pro Mini 3.3V & SenseBender) #if F_CPU == 8000000L #define MY_BAUD_RATE 38400 #endif // 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 // Set blinking period #define MY_DEFAULT_LED_BLINK_PERIOD 300 // Inverses the behavior of leds //#define MY_WITH_LEDS_BLINKING_INVERSE // Flash leds on rx/tx/err // 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 <MySensors.h> void setup() { softSerial.begin(38400); } void presentation() { // Present locally attached sensors } void loop() { // Send locally attached sensor data here }
  • 1 Votes
    11 Posts
    118 Views
    Puneit ThukralP
    @tBS You should try the low power sketches by @NeverDie or @berkseo - They are available on openhardware.io
  • RPI Gateway Error

    Hardware gateway
    5
    0 Votes
    5 Posts
    88 Views
    hakha4H
    Hi! Thank's for info. I had almost given up and now using an ESP GW instead but I'll give your setup a try:+1:
  • 0 Votes
    3 Posts
    45 Views
    T
    @Boots33 Thanks a lot for the quick response. I now have my Nano running as a serial gateway and it is connected via a USB cable directly to my controller (Raspberry Pi 4 running Home Assistant / Hass.io). I added a local motion sensor to the Nano gateway HW and pasted the mysensors MotionSensor example code to the setup(), presentation() and loop() functions as well as to the definitions in the top of the GatewaySerial example code. I disabled the radio definitions as I currently have no radio capability in my gateway (not sure if this was necessary). In Home Assistant / Hass.io I updated the configuration.yaml with the following text (as described on the Home Assistant integration help): mysensors: gateways: - device: '/dev/ttyUSB0' And it works :) In Home Assistant Developer Tools under States I can now see my motion sensor go on and off by the flick of my hand. I had expected a bit more bumps on the road just to get this far, but wow - I am obviously walking in the foot prints of people who have worked hard to make it easy for the rest of us. I am sure I will hit bumps on the way when the radios have to send results to the gateway (thick concrete walls with lots of steel), but for now I will enjoy this big success. Thanks again Boots33
  • ENC28J60 and EtherCard

    My Project gateway
    3
    0 Votes
    3 Posts
    52 Views
    giangiredG
    Finally I've solved. I'm still using UIPEthernet sincee my problem was the use of DHT library (last rev) with UIPEhernet lib. I was having a restart of teh ETH port each time I was reading Temp/hum. I've changed into SimpleDHT lib and now it's working fine. I'm using a mix of W5100 and ENC28J60.
  • Handling NACKs in the gateway

    Development gateway
    9
    0 Votes
    9 Posts
    134 Views
    electrikE
    Exactly. Better to ask then waste many hours 😏
  • ESP32 485

    Hardware gateway
    1
    0 Votes
    1 Posts
    51 Views
    No one has replied
  • W5100 Ethernet Gateway in Release 2.5.0-1

    Troubleshooting gateway
    1
    0 Votes
    1 Posts
    24 Views
    No one has replied
  • 💬 USB RF Gateway

    OpenHardware.io usb rfm69 nrf24 gateway dfu stm32 usb device
    5
    0 Votes
    5 Posts
    492 Views
    M
    @Tommas Hi, now I've posted a device for sale on Tindie, if it's still relevant for you https://www.tindie.com/products/avikmen/usb-rf-gateway-with-stm32-and-nrf24-in-case/
  • 0 Votes
    1 Posts
    263 Views
    No one has replied
  • RFM69HW antenna

    General Discussion pcb gateway rfm69hw antenna
    10
    0 Votes
    10 Posts
    1k Views
    zboblamontZ
    @tsunami My setup is max 50m radius and 433MHz standard power RFM69s so a small 1/4 wave whip works reliably even from a below ground pump chamber 10m away. Your 915MHz at 200m SHOULD work on 1/4 wave if obstacle free line of sight, but you could try a 2.4GHz Wifi router at one location and use a mobile at the other to test if you can see the router. I can see at least 3 neighbouring routers identified on my mobile from over 40m away through masonry, 10 on the laptop, so it's a simple enough test. If you can see the router on either, 915MHz should be rock solid with a simple whip and no need of directional antenna.
  • 1 Votes
    7 Posts
    774 Views
    G
    Hi, for everyone who reads all of this, forget about the last few posts. I don't know why it works even when the Interrups are masked out on the radio, but it works now. The error I had occured because of the config of the OrangePi-Gateway. I removed: --extra-cxxflags="-DMY_RF24_DATARATE=\(RF24_250KBPS\) -DMY_RF24_BASE_RADIO_ID=\(0x00,0xFC,0xE1,0xA8,0xA8\) -DMY_DEBUG_VERBOSE_RF24" and wrote: --extra-cxxflags="-DMY_RF24_DATARATE=\(RF24_250KBPS\) -DMY_DEBUG_VERBOSE_RF24" Now I think I have an working OrangePi-Gateway without signing but with interrupt enabled. If there are new problems I will come back here. The next step for me is to activate signing again and bring the node into homeassistant.
  • 0 Votes
    1 Posts
    500 Views
    No one has replied
  • 0 Votes
    10 Posts
    1k Views
    pvojP
    @nca78 about my gateways: an old gateway running on MySensors 1.5 for years now. There are several nodes and sensors connected through it like temperature sensors, relays, switches. It controls my heating system with heat pump, buffering, 18 circles of floor heating, garden irrigation, alarm system, and some lights just for fun. the new gateway is a gateway to a Bluetooth network. Since MySensors has a great serial API and I have some experience with it I preferred to use it without a radio. I also think that it will be an interesting way of development and it could help to make MySensors even more popular. I had an idea to fork the library but unfortunately I don't have the experience and time to make it in good quality. But I'm sure letting developers to build connectors to different protocols is a very good idea. Catching Bluetooth messages from the air and decode them (with some reverse engineering) to send it through the MySensors gateway is relatively simple compared to the bidirectional communications. Processing some simple sensor data is a good first step.
  • 0 Votes
    5 Posts
    1k Views
    F
    @kimot No, it is an obvious mistake, I am very sorry. Maybe it is becouse the code in master branch is very old, the newest is not yet on github, but the developement branch is quite new. I am going to fix this soon.
  • 0 Votes
    2 Posts
    649 Views
    mfalkviddM
    @jkandasa the gateway is stateless, it has no concept of queue.
  • 0 Votes
    5 Posts
    1k Views
    kotzerK
    @jkandasa Any news here? (still have my rfm69 Boards here to check of the range is much better)

23

Online

11.7k

Users

11.2k

Topics

113.1k

Posts