configGway.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322
  1. // 1-channel LoRa Gateway for ESP8266
  2. // Copyright (c) 2016, 2017, 2018, 2019 Maarten Westenberg version for ESP8266
  3. // Version 6.1.4 E EU868
  4. // Date: 2019-11-29
  5. //
  6. // Based on work done by Thomas Telkamp for Raspberry PI 1ch gateway and many others.
  7. // Contibutions of Dorijan Morelj and Andreas Spies for OLED support.
  8. //
  9. // All rights reserved. This program and the accompanying materials
  10. // are made available under the terms of the MIT License
  11. // which accompanies this distribution, and is available at
  12. // https://opensource.org/licenses/mit-license.php
  13. //
  14. // NO WARRANTY OF ANY KIND IS PROVIDED
  15. //
  16. // Author: Maarten Westenberg (mw12554@hotmail.com)
  17. //
  18. // This file contains a number of compile-time settings that can be set on (=1) or off (=0)
  19. // The disadvantage of compile time is minor compared to the memory gain of not having
  20. // too much code compiled and loaded on your ESP device.
  21. //
  22. // NOTE:
  23. // If version if vor ESP32 Heltec board, compile with ESP32 setting and board
  24. // "ESP32 Dev Module" or "Heltec WiFi Lora 32"
  25. //
  26. // For ESP8266 Wemos: compile with "Wemos R1 D1" and choose
  27. // the right _PIN_OUT below. Selecting OLED while that is not connected does not
  28. // really matter.
  29. //
  30. // ========================================================================================
  31. // Specify the correct version and date of your gateway here.
  32. // Normally it is provided with teh GitHub version
  33. #define VERSION "V.6.1.4.E.EU868; 191129a"
  34. // This value of DEBUG determines whether some parts of code get compiled.
  35. // Also this is the initial value of debug parameter.
  36. // The value can be changed using the admin webserver
  37. // For operational use, set initial DEBUG vaulue 0
  38. #define DEBUG 1
  39. // Debug message will be put on Serial is this one is set.
  40. // If set to 0, no USB Serial prints are done
  41. // Set to 1 it will prinr all user level messages (with correct debug set)
  42. // If set to 2 it will also print interrupt messages (not recommended)
  43. #define _DUSB 1
  44. // Define whether we should do a formatting of SPIFFS when starting the gateway
  45. // This is usually a good idea if the webserver is interrupted halfway a writing
  46. // operation. Also to be used when software is upgraded
  47. // Normally, value 0 is a good default.
  48. #define _SPIFF_FORMAT 0
  49. // Define the frequency band the gateway will listen on. Valid options are:
  50. // EU863_870 Europe
  51. // US902_928 North America
  52. // AU925_928 Australia
  53. // CN470_510 China
  54. // IN865_867 India
  55. // CN779-787 (Not Used!)
  56. // EU433 Europe
  57. // AS923 (Not Used)
  58. // See https://www.thethingsnetwork.org/docs/lorawan/frequency-plans.html
  59. // You can find the definitions in "loraModem.h" and frequencies in
  60. #define EU863_870 1
  61. // Define whether to use the old Semtech gateway API, which is still supported by TTN,
  62. // but is more lightweight than the new TTN tcp based protocol.
  63. // NOTE: Only one of the two should be defined! TTN Router project has stopped
  64. //
  65. #define _UDPROUTER 1
  66. //#define _TTNROUTER 1
  67. // The spreading factor is the most important parameter to set for a single channel
  68. // gateway. It specifies the speed/datarate in which the gateway and node communicate.
  69. // As the name says, in principle the single channel gateway listens to one channel/frequency
  70. // and to one spreading factor only.
  71. // This parameters contains the default value of SF, the actual version can be set with
  72. // the webserver and it will be stored in SPIFF
  73. // NOTE: The frequency is set in the loraModem.h file and is default 868.100000 MHz.
  74. #define _SPREADING SF9
  75. // Channel Activity Detection
  76. // This function will scan for valid LoRa headers and determine the Spreading
  77. // factor accordingly. If set to 1 we will use this function which means the
  78. // 1-channel gateway will become even more versatile. If set to 0 we will use the
  79. // continuous listen mode.
  80. // Using this function means that we HAVE to use more dio pins on the RFM95/sx1276
  81. // device and also connect enable dio1 to detect this state.
  82. #define _CAD 1
  83. // Definitions for the admin webserver.
  84. // A_SERVER determines whether or not the admin webpage is included in the sketch.
  85. // Normally, leave it in!
  86. #define A_SERVER 1 // Define local WebServer only if this define is set
  87. #define A_REFRESH 1 // Allow the webserver refresh or not?
  88. #define A_SERVERPORT 80 // Local webserver port (normally 80)
  89. #define A_MAXBUFSIZE 192 // Must be larger than 128, but small enough to work
  90. // Definitions for over the air updates. At the moment we support OTA with IDE
  91. // Make sure that tou have installed Python version 2.7 and have Bonjour in your network.
  92. // Bonjour is included in iTunes (which is free) and OTA is recommended to install
  93. // the firmware on your router witout having to be really close to the gateway and
  94. // connect with USB.
  95. #define A_OTA 1
  96. // We support a few pin-out configurations out-of-the-box: HALLARD, COMPRESULT and TTGO ESP32.
  97. // If you use one of these two, just set the parameter to the right value.
  98. // If your pin definitions are different, update the loraModem.h file to reflect these settings.
  99. // 1: HALLARD
  100. // 2: COMRESULT pin out
  101. // 3: ESP32 Wemos pin out
  102. // 4: ESP32 TTGO pinning (should work for 433 and OLED too).
  103. // 5: ESP32 TTGO EU868/EU433 MHz with OLED
  104. // 6: Other, define your own in loraModem.h
  105. #define _PIN_OUT 4
  106. // Gather statistics on sensor and Wifi status
  107. // 0= No statistics
  108. // 1= Keep track of messages statistics, number determined by MAX_STAT
  109. // 2= Option 1 + Keep track of messages received PER each SF (default)
  110. // 3= See Option 2, but with extra channel info (Do not use when no Hopping is selected)
  111. #define _STATISTICS 3
  112. // Single channel gateways if they behave strict should only use one frequency
  113. // channel and one spreading factor. However, the TTN backend replies on RX2
  114. // timeslot for spreading factors SF9-SF12.
  115. // Also, the server will respond with SF12 in the RX2 timeslot.
  116. // If the 1ch gateway is working in and for nodes that ONLY transmit and receive on the set
  117. // and agreed frequency and spreading factor. make sure to set STRICT to 1.
  118. // In this case, the frequency and spreading factor for downlink messages is adapted by this
  119. // gateway
  120. // NOTE: If your node has only one frequency enabled and one SF, you must set this to 1
  121. // in order to receive downlink messages
  122. // NOTE: In all other cases, value 0 works for most gateways with CAD enabled
  123. #define _STRICT_1CH 1
  124. // Allows configuration through WifiManager AP setup. Must be 0 or 1
  125. #define _WIFIMANAGER 0
  126. // Define the name of the accesspoint if the gateway is in accesspoint mode (is
  127. // getting WiFi SSID and password using WiFiManager)
  128. #define AP_NAME "ESP8266-Gway-Things4U"
  129. #define AP_PASSWD "ttnAutoPw"
  130. // This section defines whether we use the gateway as a repeater
  131. // For his, we use another output channel as the channel (default==0) we are
  132. // receiving the messages on.
  133. #define _REPEATER 0
  134. // Will we use Mutex or not?
  135. // +SPI is input for SPI, SPO is output for SPI
  136. #define MUTEX 0
  137. // Define if OLED Display is connected to I2C bus. Note that defining an OLED display does not
  138. // impact performance very much, certainly if no OLED is connected. Wrong OLED will not show
  139. // sensible results on display
  140. // OLED==0; No OLED display connected
  141. // OLED==1; 0.9 Oled Screen based on SSD1306
  142. // OLED==2; 1"3 Oled screens for Wemos, 128x64 SH1106
  143. #define OLED 1
  144. // Define whether we want to manage the gateway over UDP (next to management
  145. // thru webinterface).
  146. // This will allow us to send messages over the UDP connection to manage the gateway
  147. // and its parameters. Sometimes the gateway is not accesible from remote,
  148. // in this case we would allow it to use the SERVER UDP connection to receive
  149. // messages as well.
  150. // NOTE: Be aware that these messages are NOT LoRa and NOT LoRa Gateway spec compliant.
  151. // However that should not interfere with regular gateway operation but instead offer
  152. // functions to set/reset certain parameters from remote.
  153. #define GATEWAYMGT 0
  154. // Do extensive logging
  155. // Use the ESP8266 SPIFS filesystem to do extensive logging.
  156. // We must take care that the filesystem never(!) is full, and for that purpose we
  157. // rather have new records/line of statistics than very old.
  158. // Of course we must store enough records to make the filesystem work
  159. #define STAT_LOG 1
  160. // Set the Server Settings (IMPORTANT)
  161. #define _LOCUDPPORT 1700 // UDP port of gateway! Often 1700 or 1701 is used for upstream comms
  162. // Timing
  163. #define _MSG_INTERVAL 15 // Reset timer in seconds
  164. #define _PULL_INTERVAL 55 // PULL_DATA messages to server to get downstream in milliseconds
  165. #define _STAT_INTERVAL 120 // Send a 'stat' message to server
  166. #define _NTP_INTERVAL 3600 // How often do we want time NTP synchronization
  167. #define _WWW_INTERVAL 60 // Number of seconds before we refresh the WWW page
  168. // This defines whether or not we would use the gateway as
  169. // as sort of backend system which decodes
  170. // 1: _LOCALSERVER is used
  171. // 0: Do not use _LOCALSERVER
  172. #define _LOCALSERVER 1 // See server definitions for decodes
  173. // Gateway Ident definitions. Where is the gateway located?
  174. #define _DESCRIPTION "ESP Gateway" // Name of the gateway
  175. #define _EMAIL "your@email.com" // Owner
  176. #define _PLATFORM "ESP8266"
  177. #define _LAT 52.0
  178. #define _LON 5.0
  179. #define _ALT 1 // Altitude
  180. // ntp
  181. // Please add daylight saving time to NTP_TIMEZONES when desired
  182. #define NTP_TIMESERVER "nl.pool.ntp.org" // Country and region specific
  183. #define NTP_TIMEZONES 1 // How far is our Timezone from UTC (excl daylight saving/summer time)
  184. #define SECS_IN_HOUR 3600
  185. #define NTP_INTR 0 // Do NTP processing with interrupts or in loop();
  186. // lora sensor code definitions
  187. // Defines whether the gateway will also report sensor/status value on MQTT
  188. // such as GPS, battery or temperature.
  189. // after all, a gateway can be a node to the system as well. Some sensors like GPS can be
  190. // sent to the backend as a parameter, some (like humidity for example) can only be sent
  191. // as a regular sensor value.
  192. // Set its LoRa address and key below in this file, See spec. para 4.3.2
  193. #define GATEWAYNODE 0
  194. #define _CHECK_MIC 0
  195. // We can put the gateway in such a mode that it will (only) recognize
  196. // nodes that are put in a list of trusted nodes.
  197. // Values:
  198. // 0: Do not use names for trusted Nodes
  199. // 1: Use the nodes as a translation table for hex codes to names (in TLN)
  200. // 2: Same as 1, but is nodes NOT in the nodes list below they are NOT shown.
  201. // NOTE: This list is dynamic!
  202. #define _TRUSTED_NODES 1
  203. #define _TRUSTED_DECODE 1
  204. // ========================================================================
  205. // DO NOT CHANGE BELOW THIS LINE
  206. // Probably do not change items below this line, only if lists or
  207. // configurations on configNode.h are not large enough for example.
  208. // ========================================================================
  209. // Maximum number of statistics records gathered. 20 is a good maximum (memory intensive)
  210. // For ESP32 maybe 30 could be used as well
  211. #define MAX_STAT 20
  212. // We will log a list of LoRa nodes that was forwarded using this gateway.
  213. // For eacht node we record:
  214. // - node Number, or known node name
  215. // - Last seen 'seconds since 1/1/1970'
  216. // - SF seen (8-bit integer with SF per bit)
  217. // The initial version _NUMMAX stores max this many nodes, please
  218. // "define _SEENMAX 0" when not used
  219. #define _SEENMAX 25
  220. #define _SEENFILE "/gwayNum.txt"
  221. // Name of he configfile in SPIFFs filesystem
  222. // In this file we store the configuration and other relevant info that should
  223. // survive a reboot of the gateway
  224. #define CONFIGFILE "/gwayConfig.txt"
  225. // Define the correct radio type that you are using
  226. #define CFG_sx1276_radio
  227. //#define CFG_sx1272_radio
  228. // Serial Port speed
  229. #define _BAUDRATE 115200 // Works for debug messages to serial momitor
  230. // MQTT definitions, these settings should be standard for TTN
  231. // and need no changing
  232. #define _TTNSERVER "router.eu.thethings.network"
  233. #define _TTNPORT 1700 // Standard port for TTN
  234. // If you have a second back-end server defined such as Semtech or loriot.io
  235. // your can define _THINGPORT and _THINGSERVER with your own value.
  236. // If not, make sure that you do not define these, which will save CPU time
  237. // Port is UDP port in this program
  238. //
  239. // Default for testing: Switched off
  240. #define _THINGSERVER "your,webserver.org" // Server URL of the LoRa-udp.js handler
  241. #define _THINGPORT 1700 // Port 1700 is old compatibility
  242. // For asserting and testing the following defines are used.
  243. //
  244. #if !defined(CFG_noassert)
  245. #define ASSERT(cond) if(!(cond)) gway_failed(__FILE__, __LINE__)
  246. #else
  247. #define ASSERT(cond) /**/
  248. #endif