Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #config.ini
- # type can be serial, tcp, or ble
- # port is the serial port to use, commented out will try to auto-detect
- # hostname is the IP/DNS and port for tcp type default is host:4403
- # mac is the MAC address of the device to connect to for ble type
- [interface]
- type = tcp
- port = 4403
- # port = /dev/ttyUSB0
- hostname = 192.168.1.53
- # mac = 00:11:22:33:44:55
- # Additional interface for multi radio support
- [interface2]
- enabled = False
- type = serial
- port = /dev/ttyUSB0
- # port = /dev/ttyACM1
- # port = COM1
- # hostname = localhost
- # mac = 00:11:22:33:44:55
- # example, the third interface would be [interface3] up to 9
- [general]
- # if False will respond on all channels but the default channel
- respond_by_dm_only = True
- # Allows auto-ping feature in a channel, False forces to 1 ping only
- autoPingInChannel = False
- # defaultChannel is the meshtastic default public channel, e.g. LongFast (if none use -1)
- defaultChannel = 0
- # ignoreDefaultChannel, the bot will ignore the default channel set above
- ignoreDefaultChannel = False
- # ignoreChannels is a comma separated list of channels to ignore, e.g. 4,5
- ignoreChannels =
- # require ! to be the first character in a command
- cmdBang = False
- # require explicit command, the message will only be processed if it starts with a command word
- explicitCmd = False
- # list of favorite nodes numbers ex: 2813308004,4258675309 used by script/addFav.py
- favoriteNodeList =
- # motd is reset to this value on boot
- motd = Welcome To KC9UZR LLM Bot
- welcome_message = LLM Bot, For Bot Menu: ping @foo or, cmd
- # whoami
- whoami = True
- # enable or disable the Joke module
- DadJokes = False
- DadJokesEmoji = False
- # enable or disable the Solar module
- spaceWeather = True
- # enable or disable the RSS module, and truncate the story
- rssEnable = True
- rssFeedURL = http://www.hackaday.com/rss.xml,http://rss.slashdot.org/Slashdot/slashdotMain,http://www.reddit.com/r/meshtastic/.rss
- # RSS feed names must match the order of the URLs above, default is used if no match
- rssFeedNames = default,slashdot,mesh
- rssMaxItems = 3
- rssTruncate = 100
- # enable or disable the 'latest' command which uses NewsAPI.org key at https://newsapi.org/register
- enableNewsAPI = True
- newsAPI_KEY =
- newsAPIregion = us
- # could also be 'relevancy' or 'popularity' or 'publishedAt'
- sort_by = relevancy
- # enable or disable the wikipedia search module
- wikipedia = True
- # Use local Kiwix server instead of online Wikipedia
- # Set to False to use online Wikipedia, or provide Kiwix server URL
- useKiwixServer = False
- # Kiwix server URL (e.g., http://127.0.0.1:8080)
- kiwixURL = http://127.0.0.1:8080
- # Kiwix library name (e.g., wikipedia_en_100_nopic_2025-09)
- kiwixLibraryName = wikipedia_en_100_nopic_2025-09
- # Enable LLM local Ollama integration, set true for any LLM support
- ollama = True
- # Ollama server instance to use (defaults to local machine install)
- ollamaHostName = http://localhost:11434
- # Use OpenWebUI instead of direct Ollama API / still leave ollama = True
- useOpenWebUI = False
- openWebUIURL = http://localhost:3000
- # OpenWebUI API key/token (required when useOpenWebUI is True)
- openWebUIAPIKey =
- # Ollama model to use (defaults to gemma3:270m) gemma2 is good for older SYSTEM prompt
- # ollamaModel is used for both Ollama and OpenWebUI when useOpenWebUI its just the model name
- # ollamaModel = gemma3:latest
- # ollamaModel = gemma2:2b
- # if True, the query is sent raw to the LLM, if False uses internal SYSTEM prompt
- rawLLMQuery = True
- # If False, the LLM only replies to the "ask:" and "askai" commands. otherwise DM's automatically go to LLM
- llmReplyToNonCommands = True
- # Enable Wikipedia/Kiwix integration with LLM for RAG (Retrieval Augmented Generation)
- # When enabled, LLM will automatically search Wikipedia/Kiwix and include context in responses
- llmUseWikiContext = True
- # StoreForward Enabled and Limits
- StoreForward = True
- StoreLimit = 5
- reverseSF = False
- # history command
- enableCmdHistory = False
- # command history ignore list ex: 2813308004,4258675309
- lheardCmdIgnoreNodes =
- # 24 hour clock
- zuluTime = False
- # wait time for URL requests
- urlTimeout = 15
- # logging to file of the non Bot messages
- LogMessagesToFile = True
- # Logging of system messages to file
- SyslogToFile = True
- # logging level for the bot (DEBUG, INFO, WARNING, ERROR, CRITICAL)
- sysloglevel = DEBUG
- # Number of log files to keep in days, 0 to keep all
- log_backup_count = 32
- #Do not retry enabling interface if it fails, just exit to let OS restart the bot
- dont_retry_disconnect = False
- #echo command, will echo back your message as the bot
- enableEcho = False
- # command will only echo 1:1 if sent on this channel, otherwise it will prepend @yourname
- echoChannel = 9
- [emergencyHandler]
- # enable or disable the emergency response handler
- enabled = False
- # channel to send a message to when the emergency handler is triggered
- alert_channel = 2
- alert_interface = 1
- [sentry]
- # detect anyone close to the bot
- SentryEnabled = False
- # device interface and channel to send the alert message to
- SentryInterface = 1
- SentryChannel = 2
- emailSentryAlerts = False
- # Enable detection sensor alert, requires external GPIO sensor connected to node
- detectionSensorAlert = False
- # list of ignored nodes numbers ex: 2813308004,4258675309
- sentryIgnoreList =
- # list of watched nodes numbers ex: 2813308004,4258675309
- sentryWatchList =
- # radius in meters to detect someone close to the bot
- SentryRadius = 100
- # holdoff time multiplied by seconds(20) of the watchdog
- SentryHoldoff = 9
- # Enable running external shell command when sentry alert is triggered
- cmdShellSentryAlerts = False
- # External shell command to run when sentry alert is triggered
- sentryAlertNear = sentry_alert_near.sh
- sentryAlertAway = sentry_alert_away.sh
- # HighFlying Node alert
- highFlyingAlert = True
- # Altitude in meters to trigger the alert
- highFlyingAlertAltitude = 2000
- # check with OpenSkyNetwork if highfly detected for aircraft
- highflyOpenskynetwork = True
- # Channel to send Alert when the high flying node is detected
- highFlyingAlertInterface = 1
- # to disable OTA alert set to unused channel like 9
- highFlyingAlertChannel = 2
- # list of nodes numbers to ignore high flying alert ex: 2813308004,4258675309
- highFlyingIgnoreList =
- [bbs]
- enabled = False
- # list of banned nodes numbers ex: 2813308004,4258675309
- bbs_ban_list =
- # list of admin nodes numbers ex: 2813308004,4258675309
- bbs_admin_list =
- # enable bbs synchronization with other nodes
- bbslink_enabled = False
- # list of whitelisted nodes numbers ex: 2813308004,4258675309 empty list allows all
- bbslink_whitelist =
- # enable API script access (increases disk i/o)
- bbsAPI_enabled = False
- # location module
- [location]
- enabled = True
- lat = 38.8484
- lon = -90.0762
- fuzzConfigLocation = True
- fuzzItAll = False
- # Default to metric units rather than imperial
- useMetric = False
- # repeaterList lookup location (rbook / artsci / False)
- repeaterLookup = rbook
- # Satalite Pass Prediction
- # Register for free API https://www.n2yo.com/login/ personal data page at bottom 'Are you developer?'
- n2yoAPIKey =
- # NORAD list https://www.n2yo.com/satellites/
- satList = 25544,7530
- # use Open-Meteo API for weather data not NOAA useful for non US locations
- UseMeteoWxAPI = False
- # NOAA weather forecast days
- NOAAforecastDuration = 3
- # number of weather alerts to display
- NOAAalertCount = 2
- # NOAA Weather EAS Alert Broadcast
- wxAlertBroadcastEnabled = True
- # Enable Ignore any message that includes following word list
- ignoreEASenable = False
- ignoreEASwords = test,advisory
- # Add extra location to the weather alert
- enableExtraLocationWx = False
- # NOAA Coastal Data Enable NOAA Coastal Waters Forecasts and Tide
- coastalEnabled = False
- # Find the correct costal weather directory at https://tgftp.nws.noaa.gov/data/forecasts/marine/coastal/
- # pz = Puget Sound, ph = Honolulu HI, gm = Florida Keys, pk = Alaska
- # this map can help https://www.weather.gov/marine select location and then look at the 'Forecast-by-Zone Map'
- # myCoastalZone is the .txt file with the forecast data
- myCoastalZone = https://tgftp.nws.noaa.gov/data/forecasts/marine/coastal/pz/pzz135.txt
- # number of data points to return, default is 3
- coastalForecastDays = 3
- # NOAA USGS Hydrology river identifiers, LID or USGS ID https://waterdata.usgs.gov 12484500 Columbia River at The Dalles, OR
- # for multiple rivers use comma separated list e.g. 12484500,14105700
- riverList =
- # USA FEMA IPAWS alerts
- ipawsAlertEnabled = True
- # comma separated list of FIPS codes to trigger local alert. find your FIPS codes at https://en.wikipedia.org/wiki/Federal_Information_Processing_Standard_state_code
- myFIPSList = 57,58,53
- # find your SAME https://www.weather.gov/nwr/counties comma separated list of SAME code to further refine local alert.
- mySAMEList = 053029,053073
- # Enable Ignore, headline that includes following word list
- ignoreFEMAenable = True
- ignoreFEMAwords = test,exercise
- # USGS Volcano alerts Enable USGS Volcano Alert Broadcast
- volcanoAlertBroadcastEnabled = False
- # Enable Ignore any message that includes following word list
- ignoreUSGSEnable = False
- ignoreUSGSWords = test,advisory
- # Use Germany/DE Alert Broadcast Data
- enableDEalerts = False
- # comma separated list of regional codes trigger local alert.
- # find your regional codet at https://www.xrepository.de/api/xrepository/urn:de:bund:destatis:bevoelkerungsstatistik:schluessel:rs_2021-07-31/download/Regionalschl_ssel_2021-07-31.json
- myRegionalKeysDE = 110000000000,120510000000
- # Alerts are sent to the emergency_handler interface and channel duplicate messages are send here if set
- eAlertBroadcastCh =
- # CheckList Checkin/Checkout
- [checklist]
- enabled = False
- checklist_db = data/checklist.db
- reverse_in_out = False
- # Auto approve new checklists
- auto_approve = True
- # Check-in reminder interval is 5min
- # Checkin broadcast interface and channel is emergency_handler interface and channel
- # Inventory and Point of Sale System
- [inventory]
- enabled = False
- inventory_db = data/inventory.db
- # Set to True to disable penny precision and round to nickels (USA cash sales)
- # When True: cash sales round down, taxed sales round up to nearest $0.05
- # When False (default): normal penny precision ($0.01)
- disable_penny = False
- [qrz]
- # QRZ Hello to new nodes with message
- enabled = False
- qrz_db = data/qrz.db
- qrz_hello_string = "LLM MeshBot says Hello! DM for more info."
- # Training mode will not send the hello message to new nodes
- training = True
- # repeater module
- [repeater]
- enabled = False
- # list of repeater channels ex: 2,3 which will be consumed
- # and rebroadcasted on the same channel on the other device/node/interface
- # with great power comes great responsibility, danger could be lurking in use of this feature
- # if you have the two nodes on the same radio configurations, you could create a feedback loop
- repeater_channels =
- [scheduler]
- # enable or disable the scheduler module
- enabled = False
- # interface to send the message to
- interface = 1
- # channel to send the message to
- channel = 2
- message = "MeshBot says Hello! DM for more info."
- # enable overides the above and uses the motd as the message
- schedulerMotd = False
- # value can be min,hour,day,mon,tue,wed,thu,fri,sat,sun.
- # value can also be 'joke' (min/interval), 'weather' (time/day), 'link' (hour/interval) for special auto messages
- # or 'news' (hour/interval), 'readrss' (hour/interval), 'mwx' (time/day), 'sysinfo' (hour/interval),
- # 'tide' (time/day), 'solar' (time/day) for automated information broadcasts, matching module needs enabled!
- # 'custom' for module/scheduler.py custom schedule examples
- value =
- # interval to use when time is not set (e.g. every 2 days)
- interval =
- # time of day in 24:00 hour format when value is 'day' and interval is not set
- # Process run :00,:20,:40 try and vary the 20 minute offsets to avoid collision
- time =
- [radioMon]
- # dx cluster `dx` command
- dxspotter_enabled = True
- # alerts in this module use the following interface and channel
- sigWatchBroadcastInterface = 1
- # broadcast channel can also be a comma separated list of channels
- sigWatchBroadcastCh = 2
- # using Hamlib rig control will monitor and alert on channel use
- enabled = False
- rigControlServerAddress = 127.0.0.1:4532
- # minimum SNR as reported by radio via hamlib
- signalDetectionThreshold = -10
- # hold time for high SNR
- signalHoldTime = 10
- # the following are combined to reset the monitor
- signalCooldown = 5
- signalCycleLimit = 5
- # Enable VOX detection using default input
- voxDetectionEnabled = False
- # description to use in the alert message
- voxDescription = VOX
- useLocalVoxModel = False
- # default language for VOX detection
- voxLanguage = en-us
- # sound.card input device to use for VOX detection, 'default' uses system default
- voxInputDevice = default
- # "hey chirpy"
- voxOnTrapList = True
- voxTrapList = chirpy
- # allow use of 'weather' and 'joke' commands via VOX
- voxEnableCmd = True
- # Meshages Text-to-Speech (TTS) for incoming messages and DM
- meshagesTTS = False
- ttsChannels = 2
- # WSJT-X UDP monitoring - listens for decode messages from WSJT-X, FT8/FT4/WSPR etc.
- wsjtxDetectionEnabled = False
- # UDP address and port where WSJT-X broadcasts (default: 127.0.0.1:2237)
- wsjtxUdpServerAddress = 127.0.0.1:2237
- # Comma-separated list of callsigns to watch (empty = all callsigns)
- wsjtxWatchedCallsigns =
- # JS8Call TCP monitoring - connects to JS8Call API for message forwarding
- js8callDetectionEnabled = False
- # TCP address and port where JS8Call API listens (default: 127.0.0.1:2442)
- js8callServerAddress = 127.0.0.1:2442
- # Comma-separated list of callsigns to watch (empty = all callsigns)
- js8callWatchedCallsigns =
- [fileMon]
- filemon_enabled = False
- # text file to monitor for changes
- file_path = alert.txt
- # channel to send the message to can be 2,3 multiple channels comma separated
- broadcastCh = 2
- # news command will return the contents of a text file
- enable_read_news = False
- news_file_path = ../data/news.txt
- # only return a single random (head)line from the news file
- news_random_line = False
- # only return random news 'block' (seprated by two newlines) randomly (precidence over news_random_line)
- news_block_mode = True
- # enable the use of exernal shell commands, this enables some data in `sysinfo`
- enable_runShellCmd = False
- # if runShellCmd and you think it is safe to allow the x: command to run
- # direct shell command handler the x: command in DMs
- allowXcmd = False
- # Enable 2 factor authentication for x: commands
- twoFactor_enabled = True
- # time in seconds to wait for the correct 2FA answer
- twoFactor_timeout = 100
- [smtp]
- # enable or disable the SMTP module
- enableSMTP = False
- # enable or disable the IMAP module for inbound email
- enableImap = False
- # list of Sysop Emails seperate with commas
- sysopEmails =
- SMTP_SERVER = smtp.gmail.com
- # 587 SMTP over TLS/STARTTLS, 25 legacy SMTP, 465 SMTP over SSL
- SMTP_PORT = 587
- # Sender email: be mindful of public access, don't use your personal email
- FROM_EMAIL = none@gmail.com
- SMTP_AUTH = True
- SMTP_USERNAME = none@gmail.com
- SMTP_PASSWORD = none
- EMAIL_SUBJECT = Meshtastic✉️
- # IMAP not implimented yet
- IMAP_SERVER = imap.gmail.com
- # 993 IMAP over TLS/SSL, 143 legacy IMAP
- IMAP_PORT = 993
- # IMAP login usually same as SMTP
- IMAP_USERNAME = none@gmail.com
- IMAP_PASSWORD = none
- IMAP_FOLDER = inbox
- [games]
- # if hop limit for the user exceeds this value, the message will be dropped
- game_hop_limit = 5
- disable_emojis = False
- # enable or disable the games module(s)
- dopeWars = True
- lemonade = True
- blackjack = True
- videopoker = True
- mastermind = True
- golfsim = True
- hangman = True
- hamtest = True
- tictactoe = True
- wordOfTheDay = True
- battleShip = True
- # enable or disable the quiz game module questions are in data/quiz.json
- quiz = False
- # enable or disable the survey game module questions are in data/survey/*_survey.json
- survey = False
- # this is the default survey to use when command givcen, from data/survey/example_survey.json
- defaultSurvey = example
- # Whether to record user ID in responses
- surveyRecordID=True
- # Whether to record location on start of survey
- surveyRecordLocation=True
- [messagingSettings]
- # delay in seconds for response to avoid message collision /throttling
- responseDelay = 2.5
- # delay in seconds for splits in messages to avoid message collision /throttling
- splitDelay = 2.5
- # message chunk size in charcters, chunkr allows exceeding by 3 characters
- MESSAGE_CHUNK_SIZE = 160
- # Request Acknowledgement of message OTA
- wantAck = True
- # Max limit buffer for radio testing in bytes
- maxBuffer = 200
- #Enable Extra logging of Hop count data
- enableHopLogs = False
- # Noisy Node Telemetry Logging and packet threshold
- noisyNodeLogging = False
- noisyTelemetryLimit = 5
- logMetaStats = True
- # Enable detailed packet logging all packets
- DEBUGpacket = False
- # metaPacket detailed logging, the filter negates the port ID
- debugMetadata = False
- metadataFilter = TELEMETRY_APP,POSITION_APP
- # Enable or disable automatic banning of nodes
- autoBanEnabled = False
- # Number of offenses before auto-ban
- autoBanThreshold = 5
- # Throttle value for API requests no ban_hammer
- apiThrottleValue = 20
- # Timeframe for offenses (in seconds)
- autoBanTimeframe = 3600
- [dataPersistence]
- # Enable or disable the data persistence loop service
- enabled = True
- # Interval in seconds for the persistence loop (how often to save data)
- interval = 3000
Add Comment
Please, Sign In to add comment