Skip to content

Commit

Permalink
Add modbus dashboard
Browse files Browse the repository at this point in the history
  • Loading branch information
cpq committed Nov 27, 2023
1 parent 30738f6 commit 6745617
Show file tree
Hide file tree
Showing 21 changed files with 2,998 additions and 3 deletions.
55 changes: 55 additions & 0 deletions examples/modbus-dashboard/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
PROG ?= ./example # Program we are building
PACK ?= ./pack # Packing executable
DELETE = rm -rf # Command to remove files
GZIP ?= gzip # For compressing files in web_root/
OUT ?= -o $(PROG) # Compiler argument for output file
SOURCES = main.c mongoose.c net.c packed_fs.c # Source code files
CFLAGS = -W -Wall -Wextra -g -I. # Build options

# Mongoose build options. See https://mongoose.ws/documentation/#build-options
CFLAGS_MONGOOSE += -DMG_ENABLE_PACKED_FS=1

ifeq ($(OS),Windows_NT) # Windows settings. Assume MinGW compiler. To use VC: make CC=cl CFLAGS=/MD OUT=/Feprog.exe
PROG = example.exe # Use .exe suffix for the binary
PACK = pack.exe # Packing executable
CC = gcc # Use MinGW gcc compiler
CFLAGS += -lws2_32 # Link against Winsock library
DELETE = cmd /C del /Q /F /S # Command prompt command to delete files
GZIP = echo # No gzip on Windows
endif

# Default target. Build and run program
all: $(PROG)
$(RUN) $(PROG) $(ARGS)

# Build program from sources
$(PROG): $(SOURCES)
$(CC) $(SOURCES) $(CFLAGS) $(CFLAGS_MONGOOSE) $(CFLAGS_EXTRA) $(OUT)

# Bundle JS libraries (preact, preact-router, ...) into a single file
web_root/bundle.js:
curl -s https://npm.reversehttp.com/preact,preact/hooks,htm/preact,preact-router -o $@

# Create optimised CSS. Prerequisite: npm -g i tailwindcss tailwindcss-font-inter
web_root/main.css: web_root/index.html $(wildcard web_root/*.js)
npx tailwindcss -o $@ --minify

# Generate packed filesystem for serving Web UI
packed_fs.c: $(wildcard web_root/*) $(wildcard certs/*) Makefile web_root/main.css web_root/bundle.js
$(GZIP) web_root/*
$(CC) ../../test/pack.c -o $(PACK)
$(PACK) web_root/* certs/* > $@
$(GZIP) -d web_root/*

mbedtls:
git clone --depth 1 -b v2.28.2 https://github.com/mbed-tls/mbedtls $@

ifeq ($(TLS), mbedtls)
CFLAGS += -DMG_TLS=MG_TLS_MBED -Wno-conversion -Imbedtls/include
CFLAGS += -DMBEDTLS_CONFIG_FILE=\"mbedtls_config.h\" mbedtls/library/*.c
$(PROG): mbedtls
endif

# Cleanup. Delete built program and all build artifacts
clean:
$(DELETE) $(PROG) $(PACK) *.o *.obj *.exe *.dSYM mbedtls
26 changes: 26 additions & 0 deletions examples/modbus-dashboard/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# A complete device dashboard

This example is a demonstration of how Mongoose Library could be integrated
into an embedded device and provide a complete device dashboard with the
following features:

- Authentication: login-protected dashboard
- Multiple logins (with possibly different permissions)
- The Web UI can be fully embedded into the firmware binary, then not
needing a filesystem to serve it; so being resilient to FS problems
- All changes are propagated to all connected clients

## Screenshots

This is a login screen that prompts for user/password

![](screenshots/login.webp)

## Main dashboard

The main dashboard page shows the interactive console

![](screenshots/dashboard.webp)


See a detailed tutorial at https://mongoose.ws/tutorials/device-dashboard/
1 change: 1 addition & 0 deletions examples/modbus-dashboard/certs
32 changes: 32 additions & 0 deletions examples/modbus-dashboard/main.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
// Copyright (c) 2020-2023 Cesanta Software Limited
// All rights reserved

#include "mongoose.h"
#include "net.h"

static int s_sig_num;
static void signal_handler(int sig_num) {
signal(sig_num, signal_handler);
s_sig_num = sig_num;
}

int main(void) {
struct mg_mgr mgr;

signal(SIGPIPE, SIG_IGN);
signal(SIGINT, signal_handler);
signal(SIGTERM, signal_handler);

mg_log_set(MG_LL_DEBUG); // Set debug log level
mg_mgr_init(&mgr);

web_init(&mgr);
while (s_sig_num == 0) {
mg_mgr_poll(&mgr, 50);
}

mg_mgr_free(&mgr);
MG_INFO(("Exiting on signal %d", s_sig_num));

return 0;
}
1 change: 1 addition & 0 deletions examples/modbus-dashboard/mongoose.c
1 change: 1 addition & 0 deletions examples/modbus-dashboard/mongoose.h
Loading

0 comments on commit 6745617

Please sign in to comment.