renamed "modem" to "freedata-server"

This commit is contained in:
DJ2LS 2024-04-17 22:49:08 +02:00
parent 8ea8cb30ce
commit efe8bb3aec
91 changed files with 90 additions and 147 deletions

View file

@ -33,7 +33,7 @@ jobs:
pip install -r requirements.txt
- name: Build binaries
working-directory: modem
working-directory: freedata-server
run: |
python3 -m nuitka --remove-output --assume-yes-for-downloads --follow-imports --include-data-dir=lib=lib --include-data-files=lib/codec2/*=lib/codec2/ --include-data-files=config.ini.example=config.ini --standalone server.py --output-filename=freedata-server

View file

@ -34,10 +34,10 @@ jobs:
fileName: " hamlib-w64-*.zip"
latest: true
extract: true
out-file-path: "modem/lib/hamlib/"
out-file-path: "freedata-server/lib/hamlib/"
- name: Build binaries
working-directory: modem
working-directory: freedata-server
run: |
python3 -m nuitka --remove-output --assume-yes-for-downloads --follow-imports --include-data-dir=lib=lib --include-data-files=lib/codec2/*=lib/codec2/ --include-data-files=config.ini.example=config.ini --standalone server.py --output-filename=freedata-server

View file

@ -62,26 +62,26 @@ jobs:
CERTIFICATE_PASSWORD: ${{ secrets.CERTIFICATE_PASSWORD }}
- name: Build binaries
working-directory: modem
working-directory: freedata-server
run: |
python3 -m nuitka --remove-output --assume-yes-for-downloads --follow-imports --include-data-dir=lib=lib --include-data-files=lib/codec2/*=lib/codec2/ --include-data-files=config.ini.example=config.ini --standalone server.py --output-filename=freedata-server
#- name: Download Portaudio binaries Linux macOS
# if: ${{!startsWith(matrix.os, 'windows')}}
# working-directory: modem
# working-directory: freedata-server
# run: |
# if ! test -d "server.dist/modem/_sounddevice_data"; then
# git clone https://github.com/spatialaudio/portaudio-binaries dist/modem/_sounddevice_data/portaudio-binaries
# if ! test -d "server.dist/freedata-server/_sounddevice_data"; then
# git clone https://github.com/spatialaudio/portaudio-binaries dist/freedata-server/_sounddevice_data/portaudio-binaries
# fi
#- name: Download Portaudio binaries Windows
# if: ${{startsWith(matrix.os, 'windows')}}
# working-directory: modem
# working-directory: freedata-server
# run: |
# if(Test-Path -Path "server.dist/modem/_sounddevice_data"){
# if(Test-Path -Path "server.dist/freedata-server/_sounddevice_data"){
# echo "sounddevice folder already exists"
# } else {
# git clone https://github.com/spatialaudio/portaudio-binaries dist/modem/_sounddevice_data/portaudio-binaries
# git clone https://github.com/spatialaudio/portaudio-binaries dist/freedata-server/_sounddevice_data/portaudio-binaries
# }
- name: LIST ALL FILES
@ -99,7 +99,7 @@ jobs:
with:
type: 'zip'
filename: '${{ matrix.zip_name }}.zip'
directory: ./modem/server.dist
directory: ./freedata-server/server.dist
path: .
# exclusions: '*.git* /*node_modules/* .editorconfig'
@ -110,14 +110,14 @@ jobs:
uses: actions/upload-artifact@v4
with:
name: '${{ matrix.zip_name }}'
path: ./modem/server.dist/${{ matrix.zip_name }}.zip
path: ./freedata-server/server.dist/${{ matrix.zip_name }}.zip
- name: Release Modem
uses: softprops/action-gh-release@v2
if: startsWith(github.ref, 'refs/tags/v')
with:
draft: true
files: ./modem/server.dist/${{ matrix.zip_name }}.zip
files: ./freedata-server/server.dist/${{ matrix.zip_name }}.zip
- name: LIST ALL FILES
run: ls -R

4
.gitignore vendored
View file

@ -1,5 +1,5 @@
# possible installation of codec2 within modem
modem/codec2
# possible installation of codec2 within freedata-server
freedata-server/codec2
# temporary test artifacts
**/build

View file

@ -49,7 +49,7 @@ class ARQSession:
self.config = config
self.event_manager: EventManager = modem.event_manager
#self.states = modem.states
#self.states = freedata-server.states
self.states = state_manager
self.states.setARQ(True)

View file

@ -419,7 +419,7 @@ class OFDM_CONFIG(ctypes.Structure):
("timing_mx_thresh", ctypes.c_float), # Threshold for timing metrics
("nc", ctypes.c_int), # Number of carriers
("ns", ctypes.c_int), # Number of Symbol frames
("np", ctypes.c_int), # Number of modem frames per packet
("np", ctypes.c_int), # Number of freedata-server frames per packet
("bps", ctypes.c_int), # Bits per Symbol
("txtbits", ctypes.c_int), # Number of auxiliary data bits
("nuwbits", ctypes.c_int), # Number of unique word bits

View file

@ -7,8 +7,8 @@ class BeaconCommand(TxCommand):
return self.frame_factory.build_beacon(beacon_state)
#def transmit(self, modem):
# super().transmit(modem)
#def transmit(self, freedata-server):
# super().transmit(freedata-server)
# if self.config['MODEM']['enable_morse_identifier']:
# mycall = f"{self.config['STATION']['mycall']}-{self.config['STATION']['myssid']}"
# modem.transmit_morse("morse", 1, 0, mycall)
# freedata-server.transmit_morse("morse", 1, 0, mycall)

View file

@ -160,7 +160,7 @@ class Demodulator():
nbytes = codec2.api.freedv_rawdatarx(
freedv, bytes_out, audiobuffer.buffer.ctypes
)
# get current modem states and write to list
# get current freedata-server states and write to list
# 1 trial
# 2 sync
# 3 trial sync
@ -171,7 +171,7 @@ class Demodulator():
if rx_status not in [0]:
self.is_codec2_traffic_counter = self.is_codec2_traffic_cooldown
self.log.debug(
"[MDM] [demod_audio] modem state", mode=mode_name, rx_status=rx_status,
"[MDM] [demod_audio] freedata-server state", mode=mode_name, rx_status=rx_status,
sync_flag=codec2.api.rx_sync_flags_to_text[rx_status]
)

View file

@ -82,19 +82,19 @@ class EventManager:
self.broadcast(event)
def modem_started(self):
event = {"modem": "started"}
event = {"freedata-server": "started"}
self.broadcast(event)
def modem_restarted(self):
event = {"modem": "restarted"}
event = {"freedata-server": "restarted"}
self.broadcast(event)
def modem_stopped(self):
event = {"modem": "stopped"}
event = {"freedata-server": "stopped"}
self.broadcast(event)
def modem_failed(self):
event = {"modem": "failed"}
event = {"freedata-server": "failed"}
self.broadcast(event)
def freedata_message_db_change(self):

View file

@ -109,7 +109,7 @@ class RF:
def stop_modem(self):
try:
# let's stop the modem service
# let's stop the freedata-server service
self.service_queue.put("stop")
# simulate audio class active state for reducing cli output
# self.stream = lambda: None
@ -117,7 +117,7 @@ class RF:
# self.stream.stop
except Exception:
self.log.error("[MDM] Error stopping modem")
self.log.error("[MDM] Error stopping freedata-server")
def init_audio(self):
self.log.info(f"[MDM] init: get audio devices", input_device=self.audio_input_device,

View file

@ -41,7 +41,7 @@ class ScheduleManager:
# wait some time
threading.Event().wait(timeout=10)
# get actual modem instance
# get actual freedata-server instance
self.modem = modem
self.running = True # Set the running flag to True

View file

@ -132,11 +132,11 @@ def get_serial_devices():
devices = serial_ports.get_ports()
return api_response(devices)
@app.route('/modem/state', methods=['GET'])
@app.route('/freedata-server/state', methods=['GET'])
def get_modem_state():
return api_response(app.state_manager.sendState())
@app.route('/modem/cqcqcq', methods=['POST', 'GET'])
@app.route('/freedata-server/cqcqcq', methods=['POST', 'GET'])
def post_cqcqcq():
if request.method not in ['POST']:
return api_response({"info": "endpoint for triggering a CQ via POST"})
@ -145,7 +145,7 @@ def post_cqcqcq():
enqueue_tx_command(command_cq.CQCommand)
return api_ok()
@app.route('/modem/beacon', methods=['POST'])
@app.route('/freedata-server/beacon', methods=['POST'])
def post_beacon():
if request.method not in ['POST']:
return api_response({"info": "endpoint for controlling BEACON STATE via POST"})
@ -165,7 +165,7 @@ def post_beacon():
return api_response(request.json)
@app.route('/modem/ping_ping', methods=['POST'])
@app.route('/freedata-server/ping_ping', methods=['POST'])
def post_ping():
if request.method not in ['POST']:
return api_response({"info": "endpoint for controlling PING via POST"})
@ -175,7 +175,7 @@ def post_ping():
enqueue_tx_command(command_ping.PingCommand, request.json)
return api_ok()
@app.route('/modem/send_test_frame', methods=['POST'])
@app.route('/freedata-server/send_test_frame', methods=['POST'])
def post_send_test_frame():
if request.method not in ['POST']:
return api_response({"info": "endpoint for triggering a TEST_FRAME via POST"})
@ -184,7 +184,7 @@ def post_send_test_frame():
enqueue_tx_command(command_test.TestCommand)
return api_ok()
@app.route('/modem/fec_transmit', methods=['POST'])
@app.route('/freedata-server/fec_transmit', methods=['POST'])
def post_send_fec_frame():
if request.method not in ['POST']:
return api_response({"info": "endpoint for triggering a FEC frame via POST"})
@ -193,7 +193,7 @@ def post_send_fec_frame():
enqueue_tx_command(command_feq.FecCommand, request.json)
return api_ok()
@app.route('/modem/fec_is_writing', methods=['POST'])
@app.route('/freedata-server/fec_is_writing', methods=['POST'])
def post_send_fec_is_writing():
if request.method not in ['POST']:
return api_response({"info": "endpoint for triggering a IS WRITING frame via POST"})
@ -202,18 +202,18 @@ def post_send_fec_is_writing():
#server_commands.modem_fec_is_writing(request.json)
return 'Not implemented yet'
@app.route('/modem/start', methods=['POST'])
@app.route('/freedata-server/start', methods=['POST'])
def post_modem_start():
if request.method not in ['POST']:
return api_response({"info": "endpoint for STARTING modem via POST"})
return api_response({"info": "endpoint for STARTING freedata-server via POST"})
print("start received...")
app.modem_service.put("start")
return api_response(request.json)
@app.route('/modem/stop', methods=['POST'])
@app.route('/freedata-server/stop', methods=['POST'])
def post_modem_stop():
if request.method not in ['POST']:
return api_response({"info": "endpoint for STOPPING modem via POST"})
return api_response({"info": "endpoint for STOPPING freedata-server via POST"})
print("stop received...")
app.modem_service.put("stop")
@ -223,7 +223,7 @@ def post_modem_stop():
def get_modem_version():
return api_response({"version": app.MODEM_VERSION})
@app.route('/modem/send_arq_raw', methods=['POST'])
@app.route('/freedata-server/send_arq_raw', methods=['POST'])
def post_modem_send_raw():
if request.method not in ['POST']:
return api_response({"info": "endpoint for SENDING RAW DATA via POST"})
@ -235,7 +235,7 @@ def post_modem_send_raw():
return api_response(request.json)
else:
api_abort('Error executing command...', 500)
@app.route('/modem/stop_transmission', methods=['POST'])
@app.route('/freedata-server/stop_transmission', methods=['POST'])
def post_modem_send_raw_stop():
if request.method not in ['POST']:
@ -341,7 +341,7 @@ def stop_server():
audio.sd._terminate()
except Exception as e:
print(e)
print("Error stopping modem")
print("Error stopping freedata-server")
time.sleep(1)
print('Server shutdown...')
print("------------------------------------------")
@ -354,12 +354,12 @@ def main():
config_file = set_config()
app.config_manager = CONFIG(config_file)
# start modem
# start freedata-server
app.p2p_data_queue = queue.Queue() # queue which holds processing data of p2p connections
app.state_queue = queue.Queue() # queue which holds latest states
app.modem_events = queue.Queue() # queue which holds latest events
app.modem_fft = queue.Queue() # queue which holds latest fft data
app.modem_service = queue.Queue() # start / stop modem service
app.modem_service = queue.Queue() # start / stop freedata-server service
app.event_manager = event_manager.EventManager([app.modem_events]) # TODO remove the app.modem_event custom queue
# init state manager
app.state_manager = state_manager.StateManager(app.state_queue)
@ -368,7 +368,7 @@ def main():
# start service manager
app.service_manager = service_manager.SM(app)
# start modem service
# start freedata-server service
app.modem_service.put("start")
# initialize database default values
DatabaseManager(app.event_manager).initialize_default_values()

View file

@ -62,7 +62,7 @@ class SM:
self.event_manager.modem_restarted()
else:
self.log.warning("[SVC] modem command processing failed", cmd=cmd, state=self.state_manager.is_modem_running)
self.log.warning("[SVC] freedata-server command processing failed", cmd=cmd, state=self.state_manager.is_modem_running)
def start_modem(self):
@ -72,7 +72,7 @@ class SM:
return False
if self.state_manager.is_modem_running:
self.log.warning("modem already running")
self.log.warning("freedata-server already running")
return False
@ -80,12 +80,12 @@ class SM:
audio_test = self.test_audio()
if False in audio_test or None in audio_test or self.state_manager.is_modem_running:
self.log.warning("starting modem failed", input_test=audio_test[0], output_test=audio_test[1])
self.log.warning("starting freedata-server failed", input_test=audio_test[0], output_test=audio_test[1])
self.state_manager.set("is_modem_running", False)
self.event_manager.modem_failed()
return False
self.log.info("starting modem....")
self.log.info("starting freedata-server....")
self.modem = modem.RF(self.config, self.event_manager, self.modem_fft, self.modem_service, self.state_manager, self.app.radio_manager)
self.frame_dispatcher = frame_dispatcher.DISPATCHER(self.config,
@ -102,7 +102,7 @@ class SM:
return True
def stop_modem(self):
self.log.info("stopping modem....")
self.log.info("stopping freedata-server....")
del self.modem
self.modem = False
self.state_manager.set("is_modem_running", False)

View file

@ -9,7 +9,7 @@ class StateManager:
self.newstate = None
self.last = time.time()
# modem related states
# freedata-server related states
# not every state is needed to publish, yet
# TODO can we reduce them?
self.channel_busy_slot = [False, False, False, False, False]

View file

@ -1,52 +0,0 @@
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
# DAEMON --------------------------------------------------
server_a = Analysis(['server.py'],
pathex=[],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
server_pyz = PYZ(server_a.pure, server_a.zipped_data,
cipher=block_cipher)
server_exe = EXE(server_pyz,
server_a.scripts,
[],
exclude_binaries=True,
name='freedata-server',
bundle_identifier='app.freedata.freedata-server',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=True,
disable_windowed_traceback=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None )
# add lib folder to system path. We only need to do this once
server_a.datas += Tree('lib', prefix='lib')
# daemon_a.datas += Tree('./codec2', prefix='codec2')
coll = COLLECT(server_exe,
server_a.binaries,
server_a.zipfiles,
server_a.datas,
strip=False,
upx=True,
upx_exclude=[],
name='modem')

Binary file not shown.

View file

@ -1,5 +0,0 @@
# PyAudio
## downloaded from
https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyaudio

View file

@ -23,12 +23,12 @@ setup(
license='GPL3.0',
entry_points={
'console_scripts': [
'freedata-server=modem.server:main', # Points to the main() function in server.py
'freedata-server=freedata-server.server:main', # Points to the main() function in server.py
],
},
include_package_data=True, # Ensure non-python files are included if specified
package_data={
# Include all files under any directory within the 'modem' package
'modem': ['lib/**/*'], # Recursive include for all files in 'lib' and its subdirectories
# Include all files under any directory within the 'freedata-server' package
'freedata-server': ['lib/**/*'], # Recursive include for all files in 'lib' and its subdirectories
},
)

View file

@ -1,6 +1,6 @@
import sys
import time
sys.path.append('modem')
sys.path.append('freedata-server')
import unittest
import unittest.mock
@ -58,7 +58,7 @@ class TestARQSession(unittest.TestCase):
@classmethod
def setUpClass(cls):
config_manager = CONFIG('modem/config.ini.example')
config_manager = CONFIG('freedata-server/config.ini.example')
cls.config = config_manager.read()
cls.logger = structlog.get_logger("TESTS")
cls.frame_factory = DataFrameFactory(cls.config)

View file

@ -1,5 +1,5 @@
import sys
sys.path.append('modem')
sys.path.append('freedata-server')
import unittest
import config
@ -7,13 +7,13 @@ class TestConfigMethods(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.config = config.CONFIG('modem/config.ini.example')
cls.config = config.CONFIG('freedata-server/config.ini.example')
def test_config_exists(self):
c = config.CONFIG('modem/config.ini.example')
c = config.CONFIG('freedata-server/config.ini.example')
self.assertTrue(c.config_exists())
#c = config.CONFIG('modem/nonexistant')
#c = config.CONFIG('freedata-server/nonexistant')
#self.assertFalse(c.config_exists())
def test_read(self):

View file

@ -1,5 +1,5 @@
import sys
sys.path.append('modem')
sys.path.append('freedata-server')
import unittest
from config import CONFIG
@ -12,7 +12,7 @@ class TestDataFrameFactory(unittest.TestCase):
@classmethod
def setUpClass(cls):
config_manager = CONFIG('modem/config.ini.example')
config_manager = CONFIG('freedata-server/config.ini.example')
config = config_manager.read()
cls.factory = DataFrameFactory(config)

View file

@ -1,5 +1,5 @@
import sys
sys.path.append('modem')
sys.path.append('freedata-server')
import unittest
import queue

View file

@ -1,5 +1,5 @@
import sys
sys.path.append('modem')
sys.path.append('freedata-server')
import numpy as np
import unittest
@ -17,7 +17,7 @@ class TestDataFrameFactory(unittest.TestCase):
@classmethod
def setUpClass(cls):
config_manager = CONFIG('modem/config.ini.example')
config_manager = CONFIG('freedata-server/config.ini.example')
cls.config = config_manager.read()
cls.event_queue = queue.Queue()

View file

@ -1,5 +1,5 @@
import sys
sys.path.append('modem')
sys.path.append('freedata-server')
import numpy as np
import unittest
@ -14,7 +14,7 @@ class TestDataFrameFactory(unittest.TestCase):
@classmethod
def setUpClass(cls):
config_manager = CONFIG('modem/config.ini.example')
config_manager = CONFIG('freedata-server/config.ini.example')
cls.config = config_manager.read()
cls.event_queue = queue.Queue()

View file

@ -1,7 +1,7 @@
import sys
import time
sys.path.append('modem')
sys.path.append('freedata-server')
import unittest
import unittest.mock
@ -59,7 +59,7 @@ class TestMessageProtocol(unittest.TestCase):
@classmethod
def setUpClass(cls):
config_manager = CONFIG('modem/config.ini.example')
config_manager = CONFIG('freedata-server/config.ini.example')
cls.config = config_manager.read()
cls.logger = structlog.get_logger("TESTS")
cls.frame_factory = DataFrameFactory(cls.config)

View file

@ -1,7 +1,7 @@
import sys
import time
sys.path.append('modem')
sys.path.append('freedata-server')
import unittest
import unittest.mock
@ -58,7 +58,7 @@ class TestP2PConnectionSession(unittest.TestCase):
@classmethod
def setUpClass(cls):
config_manager = CONFIG('modem/config.ini.example')
config_manager = CONFIG('freedata-server/config.ini.example')
cls.config = config_manager.read()
cls.logger = structlog.get_logger("TESTS")
cls.frame_factory = DataFrameFactory(cls.config)

View file

@ -1,5 +1,5 @@
import sys
sys.path.append('modem')
sys.path.append('freedata-server')
import unittest
from config import CONFIG
@ -18,7 +18,7 @@ class TestProtocols(unittest.TestCase):
@classmethod
def setUpClass(cls):
config_manager = CONFIG('modem/config.ini.example')
config_manager = CONFIG('freedata-server/config.ini.example')
cls.config = config_manager.read()
cls.state_manager_queue = queue.Queue()
@ -34,7 +34,7 @@ class TestProtocols(unittest.TestCase):
modem.TESTMODE = True
frame_handler.TESTMODE = True
#cls.modem.start_modem()
#cls.freedata-server.start_modem()
cls.frame_dispatcher = DISPATCHER(cls.config,
cls.event_manager,
cls.state_manager,
@ -53,7 +53,7 @@ class TestProtocols(unittest.TestCase):
# Run ping command
api_params = { "dxcall": "AA1AAA-1"}
ping_cmd = PingCommand(self.config, self.state_manager, self.event_manager, api_params)
#ping_cmd.run(self.event_queue, self.modem)
#ping_cmd.run(self.event_queue, self.freedata-server)
frame = ping_cmd.test(self.event_queue)
# Shortcut the transmit queue directly to the frame dispatcher
self.shortcutTransmission(frame)
@ -69,7 +69,7 @@ class TestProtocols(unittest.TestCase):
api_params = {}
cmd = CQCommand(self.config, self.state_manager, self.event_manager, api_params)
#cmd.run(self.event_queue, self.modem)
#cmd.run(self.event_queue, self.freedata-server)
frame = cmd.test(self.event_queue)
self.shortcutTransmission(frame)

View file

@ -13,10 +13,10 @@ class TestIntegration(unittest.TestCase):
@classmethod
def setUpClass(cls):
#cmd = "flask --app modem/server run"
cmd = "python3 modem/server.py"
#cmd = "flask --app freedata-server/server run"
cmd = "python3 freedata-server/server.py"
my_env = os.environ.copy()
my_env["FREEDATA_CONFIG"] = "modem/config.ini.example"
my_env["FREEDATA_CONFIG"] = "freedata-server/config.ini.example"
cls.process = Popen(shlex.split(cmd), stdin=PIPE, env=my_env)
time.sleep(1)

View file

@ -39,7 +39,7 @@ def create_hmac_salts(dxcallsign: str, mycallsign: str, num_tokens: int):
for _ in range(len(token_array)):
file.write(token_array[_] + '\n')
print("files created - place them in modem/hmac folder and share the file with the remote station")
print("files created - place them in freedata-server/hmac folder and share the file with the remote station")
except Exception:
print("error creating hmac file")

View file

@ -1,20 +1,20 @@
"""
FreeDATA % python3.11 tools/custom_mode_tests/create_custom_ofdm_mod.py | ./modem/lib/codec2/build_osx/src/freedv_data_raw_rx --vv --framesperburst 1 DATAC1 - /dev/null
FreeDATA % python3.11 tools/custom_mode_tests/create_custom_ofdm_mod.py | ./freedata-server/lib/codec2/build_osx/src/freedv_data_raw_rx --vv --framesperburst 1 DATAC1 - /dev/null
"""
import sys
sys.path.append('modem')
sys.path.append('freedata-server')
import numpy as np
modem_path = '/../../modem'
modem_path = '/../../freedata-server'
if modem_path not in sys.path:
sys.path.append(modem_path)
#import modem.codec2 as codec2
#import freedata-server.codec2 as codec2
from codec2 import *
import threading
import modulator as modulator
@ -50,7 +50,7 @@ def demod(txbuffer):
nbytes = api.freedv_rawdatarx(
freedv, bytes_out, audiobuffer.buffer.ctypes
)
# get current modem states and write to list
# get current freedata-server states and write to list
# 1 trial
# 2 sync
# 3 trial sync

View file

@ -5,7 +5,7 @@ deprecated_daemon.py
Author: DJ2LS, January 2022
daemon for providing basic information for the modem like audio or serial devices
daemon for providing basic information for the freedata-server like audio or serial devices
"""
# pylint: disable=invalid-name, line-too-long, c-extension-no-member
@ -92,7 +92,7 @@ with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
#pass
print(jsondata.get("routing_table"))
if jsondata.get('freedata') == "modem-message":
if jsondata.get('freedata') == "freedata-server-message":
log.info(jsondata)
if jsondata.get('ping') == "acknowledge":

View file

@ -1,2 +1,2 @@
# FREEDATA_CONFIG=modem/config.ini flask --app modem/server run
FREEDATA_CONFIG=modem/config.ini python3 modem/server.py
# FREEDATA_CONFIG=freedata-server/config.ini flask --app freedata-server/server run
FREEDATA_CONFIG=freedata-server/config.ini python3 freedata-server/server.py