Skip to main content

Development and deployment environment for micrOS, the diy micropython automation OS (IoT)

Project description

LOGO micrOS

micropython based smart edge IoT platform

telnet esp32S2 tinypico esp32S3 esp32S3 raspberry-pico-w espCAM-esp-s OTA GPIO clock async irq socket cron stable upy stable

Thanks for GitHub stars, follow us on:

Instagram YouTube Facebook Thingiverse DockerHub

PyPI Version

In case of any technical comments or requests, please use GitHub Discussions.

MICROSVISUALIZATION SHORTCUTS
Example shortcut (usage of the API): link
Access rest api over browser: http://<nodename>.local



๐Ÿ“ฒ ๐Ÿ’ป Communication over WiFi: Generic communication API
๐Ÿ“ฒ Apple shortcuts compatible http REST API
ย ย  โœ‰๏ธ Expose upython module functions - telnet TCP/IP
โš™๏ธ ๐Ÿ“ Device initialization from user config
๐Ÿงฉ Codeless end user experience via phone client
๐Ÿšช No external server or service required for client-device communication
ย ย  โš ๏ธ ๐Ÿ›ก Works on Local Network (WiFi-WLAN)
๐Ÿ›  Easy to customize, create your own Load Modules:
ย ย  1. Write LM_<your_app>.py
ย ย  2. Copy (OTA/USB) python script to your device (drap&drop)
ย ย  3. Call any function from <your_app> module
๐Ÿฆพ Built-in scheduling (IRQs):
ย ย  - Time stamp based
ย ย  - Geolocation based utc + sunset, sunrise rest features
ย ย  - Simple periodic
ย ย  - Async task manager

๐Ÿš€๐ŸŽˆLightweight and high performance core system that leaves you space ๐Ÿ˜Ž

โ—‰ Shortcuts:

  1. micrOS Client Application link
  2. micrOS Installer link
  3. micrOS Tutorials link
  4. micrOS System and features link
  5. Pin mapping - GPIO link
  6. micrOS Node configuration link
  7. micrOS gateway with Prometheus: link
  8. micrOS customization with LMs: link
  9. Release notes: link


micrOS Client Application

AppStore ย ย ย ย ย ย ย  AppStore



Installing micrOS with DevToolKit #ESP32 and more

macOS / Windows / Linux to install any esp32 board

pypi

End-to-End solution for deployment, update, monitor and develop micrOS boards.

I would suggest to use micrOS GUI as a primary interface for micrOS development kit, but you can use cli as well if you prefer.

Note: The main purpose of the USB deployment scripts to install micropython on the board and put all micrOS resources from micrOs/toolkit/workspace/precompiled to the connected board.


1. Install python3.9

Link for python 3.9 download

Note: Allow extend system path with that python version (installation parameter)
On Windows: RUN AS ADMINISTARTOR


2. Install micrOS devToolKit GUI

On macOS

ย Open command line, press: commnd+space + type: terminal + press: enter

Download and install micrOS devToolKit python package:
pip3 install --upgrade pip; pip3 install micrOSDevToolKit

Later on you can update the package with

pip3 uninstall micrOSDevToolKit; pip3 install micrOSDevToolKit


On Windows:

Download and install micrOS devToolKit python package:

Open Windows PowerShell, press windows+R + type: powershell + press enter

Copy the following lines to the PowerShell and press enter.

python -m pip install --upgrade pip
python -m pip install micrOSDevToolKit

Later on you can update the package with

python -m pip uninstall micrOSDevToolKit
python -m pip install micrOSDevToolKit


3. Start micrOS devToolKit GUI

Copy the following command to the command line and press enter to start.

devToolKit.py

It will open a graphical user interface for micrOS device management, like usb deploy, update, OTA operations, test executions, etc...


MICROSVISUALIZATION

  • Example
1. Select BOARD TYPE
2. Click on [Deploy (USB)] button -> presss YES

It will install your board via USB with default settings. Continue with micrOS Client app...

Note: At the first USB deployment, devToolKit will ask to install SerialUSB driver and it will open the driver installer as well, please follow the steps and install the necessary driver.

โ•”โ•— โ•”โ•—                  โ•”โ•โ•โ•โ•—โ•”โ•— โ•”โ•—โ•”โ•โ•— โ•”โ•—       โ•”โ•โ•โ•โ•—
โ•‘โ•‘ โ•‘โ•‘                  โ•‘โ•”โ•โ•โ•โ•‘โ•‘ โ•‘โ•‘โ•‘โ•‘โ•šโ•—โ•‘โ•‘       โ•šโ•—โ•”โ•—โ•‘
โ•‘โ•šโ•โ•โ•‘โ•”โ•โ•โ•— โ•”โ•—โ•”โ•—โ•”โ•โ•โ•—     โ•‘โ•šโ•โ•โ•—โ•‘โ•‘ โ•‘โ•‘โ•‘โ•”โ•—โ•šโ•โ•‘    โ•”โ•โ•— โ•‘โ•‘โ•‘โ•‘
โ•‘โ•”โ•โ•—โ•‘โ•š โ•—โ•‘ โ•‘โ•šโ•โ•‘โ•‘โ•”โ•—โ•‘     โ•‘โ•”โ•โ•โ•โ•‘โ•‘ โ•‘โ•‘โ•‘โ•‘โ•šโ•—โ•‘โ•‘    โ•šโ•โ• โ•‘โ•‘โ•‘โ•‘
โ•‘โ•‘ โ•‘โ•‘โ•‘โ•šโ•โ•šโ•—โ•šโ•—โ•”โ•โ•‘โ•‘โ•โ•ฃ    โ•”โ•โ•šโ•—  โ•‘โ•šโ•โ•โ•‘โ•‘โ•‘ โ•‘โ•‘โ•‘    โ•”โ•โ•—โ•”โ•โ•šโ•โ•‘
โ•šโ• โ•šโ•โ•šโ•โ•โ•โ• โ•šโ• โ•šโ•โ•โ•    โ•šโ•โ•โ•  โ•šโ•โ•โ•โ•โ•šโ• โ•šโ•โ•    โ•šโ•โ•โ•šโ•โ•โ•โ•

micrOS Projects

RingLamp

RoboArm

RGB_CCT



micrOS Video Tutorials

YoutubeChannel



micrOS System, message-function visualization

MICROSVISUALIZATION

Note: micrOS development kit contains command line interface for socket communication. Example: devToolKit.py --connect


micrOS Framework Features๐Ÿ’ก

MICROSARCHITECTURE

  • ๐Ÿ•ฏmicrOS loader - starts micrOS or WEBREPL(update / recovery modes)

    • OTA update - push update over wifi (webrepl automation) / monitor update and auto restart node
  • ๐Ÿ“„Config handling - user config - node_config.json

    • โณBoot phase - preload Load Module(s)
      • For pinout and last state initialization - based on node_config boothook
      • Example values: rgb load_n_init; neopixel load_n_init
    • ๐Ÿ“กNetwork handling - based on node_config
      • STA / AP network modes, nwmd
      • NTP + UTC aka clock setup
      • Static IP configuration, devip
      • dhcp hostname setup, devfid.local
    • โš™๏ธScheduling / External events - Interrupt callback - based on node_config
      • Time based
        • โŒ›๏ธsimple LM task pool execution timirq & timirqcbf
          • Timer(0)
        • ๐Ÿ—“cron [time stump!LM task] pool execution cron & crontasks
          • Timer(1)

          • timestamp: WD:H:M:S!LM FUNC, ranges: 0-6:0-23:0-59:0-59!LM FUNC

            • example: *:8:0:0!rgb rgb r=10 g=60 b=100; etc., it will set rgb color on analog rgb periphery at 8am every day.
            • WD: 0...6 0=Monday, 6=Sunday -> optional range handling: 0-2 means Monday to Wednesday
          • tag: sunset / sunrise

            • example: sunset!rgb rgb r=10 g=60 b=100; etc., it will set rgb color on analog rgb periphery at every sunset, every day.
            • optional minute offset (+/-): sunrise+30
          • API: api.sunrise-sunset.org

      • ๐Ÿ’ฃEvent based
        • Set trigger event irqX
          • Trigger up/down/both irqX_trig
          • With LM callback function irqX_cbf
        • X = 1, 2, 3 or 4
  • โš™๏ธ**[L]oad [M]odule** aka application handling

    • Lot of built-in functions (table below)
    • Create your own module with 3 easy steps
      • Create a python file, naming convention: LM_<your_app_name>.py
        • Replace <your_app_name> for anything you prefer!
      • Write python functions, you can call any function from that module...
      • Upload modul with "drag&Drop" with help of devToolKit GUI devToolKit.py
  • ๐Ÿ“จSocket interpreter - wireless communication interface with the nodes

    • System commands: help, version, reboot, webrepl, webrepl --update, etc.
      • After webrepl --update command the micrOS system reboots and waits for ota update in webrepl mode.
    • Config handling SET/GET/DUMP - node_config.json
      • enter configuration mode: conf
      • exit configuration mode:noconf
      • Print out all parameters and values: dump
    • LM - Load Module function execution (application modules)
      • Example: system info
  • ๐Ÿ–‡**[L]ogical [P]inout** handling - lookuptables for each board

    • Predefined pinout modules for esp32, tinyPico
    • Create your pinout based on IO_esp32.py, naming convencion: IO_<name>.py
    • To activate your custom pinout set cstmpmap config parameter to <name>
  • ๐Ÿ“Task manager aka Async LM jobs - Capable of execute [L]oad [M]odules in the background - Invoke with single execution & or loop execution && - Example: - In loop: system heartbeat && - Loop frequency conrol: system heartbeat &&1000, it will execute every sec - Single call: system heartbeat & - Delayed execution (ms): system heartbeat &1000, waits 1 sec before execution. - Stop task: task kill system.heartbeat - Show task live ouput: task show system.heartbeat

โŒ˜ DevToolKit CLI feature:

  • Socket client python plugin - interactive - non interactive mode

Built in periphery support

#Sensors / inputes #Actuators / outputs

pheriphery-io-preview

[CLICK] Show micrOS Load Module functions


Device Pinouts for wiring

Logical pin association handling

micrOS/source/microIO.py

LogicalPin lookup tables:

Note: Good idea to use costant variable for pin map declaration, check the files for more info, These files are also precompiled automatically into byte steams -> .mpy

MicrOStinyPicopinout

GENERAL CONTROLLER CONCEPT: microPLC

MicrOSESP23pinout

MicrOSESP23S2pinout


micrOS node configuration, parameters with description

These parameters controlls micrOS core functionalities, so you can define an entire system by setting your custom configurations via these values.

Basic parameters:

Config keys Default value and type Reboot required Description
devfid node01 <str> Yes Device friendly "unique" ID - (1) defines AccessPoint (AP) network name and (2) in Station (STA) network mode the DHCP device name for IP address resolve also (3) this is the ShellCli prompt.
staessid your_wifi_name <str> Yes Wifi router name to connect (for STA default connection mode)
stapwd your_wifi_passwd <str> Yes Wifi router password (for STA default connection mode)
appwd ADmin123 <str> Yes Device system password.: Used in AP password (access point mode) + webrepl password + micrOS auth
boothook n/a <str> Yes Add Load Module execution(s) to the boot sequence. Separator ;. Examples: rgb load_n_init; cct load_n_init but you can call any load module function here if you want to run it at boot time.
webui False bool Yes Launch http rest server on port 80 (in parallel with micrOS shell on port 9008 aka socport). It has 2 endpoints: / aka main page (index.html) and /rest aka rest (json) interface for load module execution. Example: <devfid>.local or <devfid>.local/rest + optional parameters: /rgb/toggle. Apple shortcuts compatible
cron False <bool> Yes Enable timestamp based Load Module execution aka Cron scheduler (linux terminology), Timer(1) hardware interrupt enabler.
crontasks n/a <str> Yes Cron scheduler input, task format: WD:H:M:S!module function e.g.: 1:8:0:0!system heartbeat, task separator in case of multiple tasks: ;. [WD:0-6, H:0-23, M:0-59, S:0-59] in case of each use: *. Instead WD:H:M:S you can use suntime tags: sunset, sunrise, optional offset: sunset+-<minutes>, sunrise+-<minutes>, example: sunset-30!system heartbeat. Range of days: WD can be conrete day number or range like: 0-2 means Monday to Wednesday.
irq1 False <bool> Yes External event interrupt enabler - Triggers when desired signal state detected - button press happens / motion detection / etc.
irq1_cbf n/a <str> Yes irq1 enabled, calls the given Load Modules, e.x.: module function optional_parameter(s) when external trigger happens.
irq1_trig n/a <str> Yes Sets trigger mode for external irq, signal phase detection, values up (default: n/a) or down or both.
irq2 False <bool> Yes External event interrupt enabler - Triggers when desired signal state detected - button press happens / motion detection / etc.
irq2_cbf n/a <str> Yes irq2 enabled, calls the given Load Modules, e.x.: module function optional_parameter(s) when external trigger happens.
irq2_trig n/a <str> Yes Sets trigger mode for external irq, signal phase detection, values up (default: n/a) or down or both.
irq3 False <bool> Yes External event interrupt enabler - Triggers when desired signal state detected - button press happens / motion detection / etc.
irq3_cbf n/a <str> Yes irq3 enabled, calls the given Load Modules, e.x.: module function optional_parameter(s) when external trigger happens.
irq3_trig n/a <str> Yes Sets trigger mode for external irq, signal phase detection, values up (default: n/a) or down or both.
irq4 False <bool> Yes External event interrupt enabler - Triggers when desired signal state detected - button press happens / motion detection / etc.
irq4_cbf n/a <str> Yes irq4 enabled, calls the given Load Modules, e.x.: module function optional_parameter(s) when external trigger happens.
irq4_trig n/a <str> Yes Sets trigger mode for external irq, signal phase detection, values up (default: n/a) or down or both.
irq_prell_ms 300 <int> Yes "Prell": contact recurrence (hw property), for fake event filtering... :D Time window to ignore external IRQ events in ms.
timirq False <bool> Yes Timer(0) interrupt enabler - background "subprocess" like execution, timer based infinite loop for the LoadModule execution.
timirqcbf n/a <str> Yes if timirq enabled, calls the given Load Module(s), e.x.: module function optional_parameter(s), task separator: ;
timirqseq 1000 <int> Yes Timer interrupt period in ms, default: 3000 ms (for timirq infinite loop timer value)
telegram n/a str No TELEGRAM_BOT_TOKEN to enable micrOS Notifications. Hint, to create bot with botfather: click. After enabling this, send /ping to telegram chat for chat ID sync.

Advanced parameter options:

Config keys Default value and type Reboot required Description
utc 60 <int> Yes NTP-RTC - timezone setup (UTC in minute) - it is automatically calibrated in STA mode based on geolocation.
cstmpmap n/a <str> Yes Default (n/a), select pinmap automatically based on platform (IO_<platform>). Manual control / customization of application pins, syntax: pin_map_name; pin_name:pin_number; etc. [1][optional] pin_map_name represented as IO_<pin_map_name>.py/.mpy file on device. [2+][optinal] dht:22 overwrite individual existing load module pin(s). Hint: <module> pinmap() to get app pins, example: neopixel pinmap()
boostmd True <bool> Yes boost mode - set up cpu frequency low or high 16Mhz-24MHz (depends on the board).
aioqueue 4 <int> Yes Set asyc task queue limit, system overload protection
devip n/a <str> Yes(N/A) Device IP address, (first stored IP in STA mode will be the device static IP on the network), you can set specific static IP address here.
nwmd n/a <str> Yes Prefered network mode - AP or STA, default is STA.
soctout 30 <int> Yes Socket server connection timeout. If user is passive for soctout sec, and new connection incoming, then close passive connection. So it is time limit per connection in the socqueue.
socqueue 3 int Yes Socker server-s (webCli, ShellCli) client number limiter (it can be increased based on available resources). 3 means: 3 open connection enabled for webCli and 3 for shellCli.
socport 9008 <int> Yes Socket server service port (should not be changed due to client and API inconpatibility).
auth False <bool> Yes Enables socket password authentication, password: appwd. Passwordless functions: hello, version, exit. WARNING OTA upade not supported in this mode (yet).
dbg True <bool> Yes Debug mode - enable micrOS system printout, server info, etc. + progress LED.
hwuid n/a <str> N/A USED BY SYSTEM (state storage) - hardware address - dev uid
guimeta n/a str No USED BY micrOS Client (state storage) - stores - offloaded parameter type in config. Clinet widget meta data storage.

Note: Default empty value: n/a in case of string parameter. Note: Cron is only available on devices with Timer(1): esp32



Networking - automatic network modes

MICROSNWMODES

micrOS Gateway in docker

MICROSVISUALIZATION

With prometheus database. Check the micrOS Gateway docker README for details.

Resources:

modify prometheus.yml regarding what sensors on which endpoint do you want to scrapre data from.

cd ./env/docker
docker-compose -p gateway up -d

Official DockerHub

micrOS Customization

Aka How to write Load Modules

  1. Create python file with the following naming convension: LM_your_app.py
  2. You can create any function in this modul, these will be exposed by micrOS framework over tcp/ip so these can be accessable via phone client.
  3. drag-n-drop LM file to micrOS devToolKit GUI
  4. Select device
  5. Press upload

LM_simple.py

def hello(name="Anonymous"):
	return f"Hello {name}!"


def add_two_numbers(a, b):
	return f"{a}+{b} = {a+b}"

LM_simple_led.py

from machine import Pin					# Import micropython Pin module

PIN = None								# Cache created Pin instance

def load_n_init():
	global PIN
	if PIN is None:
		PIN = Pin(4, Pin.OUT)			# Init PIN 4 as OUTPUT and store (cache) in global var.
	return PIN


def on():
	pin = load_n_init()
	pin.value(1)							# Set pin high - LED ON
	return "LED ON"


def off():
	pin = load_n_init()
	pin.value(0)							# Set pin low - LED OFF
	return "LED OFF"


def toggle():
	pin = load_n_init()
	pin.value(not pin.value())
	return "LED ON" if pin.value() else "LED OFF"
	
def help():
	return 'load_n_init', 'on', 'off', 'toggle'

For more info: Micropython official Pins

LM_template.py

Function naming convesions for Load Modules.

from LogicalPins import physical_pin, pinmap_dump
from machine import Pin

def load_n_init():
	"""
	[RECOMMENDED]
	Function naming convension to create IO (Pin) objects
	- function to initialize IO peripheries

	physical_pin - to resolve pin on board by logical name (tag)
	"""
	
	pin_number = physical_pin('redgb')	# select pin number from platfrom lookup table
	red = Pin(pin_number)
	return red


def lmdep():
   """
   [OPTIONAL] [IN CASE OF LM DEPENDENCY]
   Function to return Load Module dependencies (tuple)
   - example: if this module uses LM_rgb.py, you should
   				 return 'rgb'
   """
	return '<module_name>'


def pinmap():
	"""
	[OPTIONAL]
	Return list of pins
	Example:
		RoboArm $  rgb pinmap >json
		{"rgbue": 15, "rgreenb": 12, "redgb": 14}
	return: dict {pinkey: pinvalue}
	
	pinmap_dump - logical pinmap resolver based on IO_<device_tag>.py
	
	Example:
	return pinmap_dump(['redgb', 'rgreenb', 'rgbue'])
	"""
	return pinmap_dump(['redgb'])


def status(lmf=None):
	"""
	[OPTIONAL]
	Function naming convension for
	module state-machine return
	return: dict
	
	Example in case of RGB color state return
	return {'R': data[0], 'G': data[1], 'B': data[2], 'S': data[3]}
	"""
	return {'key': 'value'}


def help():
	"""
	[OPTIONAL]
	Return help message tuple
	"""
	return 'load_n_init', 'pinmap', 'status', 'lmdep'

micrOS Common module

Common module with additinal features for LoadModule-s

Module responsible for collecting additional feature definitions dedicated to the micrOS framework and LoadModules. Code: micrOS/source/Common.py


socket_stream decorator

Adds an extra msgobj to the wrapped function's argument list. The msgobj provides a socket message interface for the open connection.

Example: LM_my_module.py

from Common import socket_stream

@socket_stream
def function_name(arg1, arg2, ..., msgobj=None):
    # function body
    msgobj("Reply from Load Module to shellCli :)")

Usage(s): LM_system


transition(from_val, to_val, step_ms, interval_sec)

Generator for color transitions.

Parameters:

  • from_val: Starting value
  • to_val: Target value
  • step_ms: Step to reach to_val
  • interval_sec: Full intervals

Returns:

  • A generator that yields the intermediate values between from_val and to_val in steps of step_ms.

Usage(s): LM_rgb LM_cct LM_servo


transition_gen(*args, interval_sec=1.0)

Create multiple transition generators.

Parameters:

  • args: Pairs of from_val and to_val values for each channel
  • interval_sec: Interval in seconds to calculate the optimal fade/transition effect

Returns:

  • If only one transition generator is created, it returns the generator and the step size in milliseconds (gen, step_ms). If multiple transition generators are created, it returns a list of generators and the step size in milliseconds ([gen1, gen2, ...], step_ms).

Usage(s): LM_rgb LM_cct LM_servo


class SmartADC

ADC wrapper class for reading analog values.

Methods:

  • __init__(self, pin): Initializes the ADC object with the specified pin.
  • get(self): Reads the analog value from the ADC and returns a dictionary with the raw value, percentage, and voltage.
  • get_singleton(pin): Returns a singleton SmartADC object for the specified pin.

micro_task(tag, task=None)

Async task creation from LoadModules.

Parameters:

  • tag: If None, returns the task generator object. If a taskID is provided, returns the existing task object by tag.
  • task: Coroutine to execute.

Returns:

  • If tag is None, returns the task generator object. If a taskID is provided, returns the existing task object by tag. If task is provided, returns the task creation state: True for success, False for failure.

Example: LM_my_task.py

import uasyncio as asyncio
from Common import micro_task

async def __task(period_ms):
	counter = 0
	with micro_task(tag="mytask") as my_task:
		while True:
			
			# DO something here in the async loop...
			counter += 1

			# Store data in task cache (task show mytask)
			my_task.out = f'MyTask Counter: {counter}'
		
			# Async sleep - feed event loop
			await asyncio.sleep_ms(period_ms)


def create_task():
	# [!] ASYNC TASK CREATION [1*] with async task callback + taskID (TAG) handling
	state = micro_task(tag="mytask", task=__task(period_ms=5))
	return "Starting" if state else "Already running"

Usage(s): LM_presence LM_buzzer LM_cct LM_dimmer LM_neopixel LM_neopixel LM_rgb LM_roboarm etc.

data_logger(f_name, data=None, limit=12, msgobj=None)

micrOS Common Data logger solution.

Parameters:

  • f_name: Log name (without extension, automatically appends .dat)
  • data: Data to append to the log. If None, reads the log and returns it as a message stream.
  • limit: Line limit for the log (default: 12)
  • msgobj: Socket stream object (automatically set)

Returns:

  • If data is None, returns the log as a message stream. If data is provided, returns True if the write operation was successful, False otherwise.

Example: LM_my_logger.py

from Common import data_logger


def log_data(data):
	if not data_logger(f_name="mylog", data=data, limit=20):
		return "data_logger, error... check system alarms"
	return "data saved."

	
def get_data():
	return data_logger(f_name="mylog")
	

def help():
	return 'log_data data="value"', 'get_data'

Usage(s): LM_dht22


notify(text)

micrOS common notification handler (Telegram).

Prerequisite

Set Telegram API KEY in node config: telegram key

conf
 telegram <API KEY>
noconf
my_notification "hello"
 notify, msg was sent.

Parameters:

  • text: Notification text

Returns:

  • True if the notification was sent successfully, False otherwise.

Example: LM_my_notification.py

from Common import notify

def send_notification(msg="Hello from micrOS board"):
	if not notify(msg):
		return "notify, error... check system alarms"
	return "notify, msg was sent."

Usage(s): LM_presence


rest_endpoint(endpoint, function):

Add custom endpint <localhost.local>/endpoint from Load Modules to WebCli html server.

Prerequisite

Enable webui True in node config.

Parameters:

  • endpoint: name of the http endpoint after the main address, like localhost.local/my_endpoint, in this case the my_endpoint is the input paramater here.

  • function: callback function, this will be called when endpoint is called, it must return 2 values: html type and data for example html/text, data data for example: hello world. Supported data types: text/html, text/plain, image/jpeg

Returns:

  • True if function successfuly registered on the endpoint

Example: LM_my_endpoint.py

from Common import rest_endpoint

def load_n_init():
	...
	rest_endpoint('my_endpoint', _response)
	return "Endpoint was created: http://localhost/my_endpoint"

def _response():
	reply = "hello world"
	return 'text/plain', reply

Usage(s): LM_OV2640



RELESE NOTE

Next main release version 2.0.0.0

Almost same as Current v 1.48.0 content
	- WebCli (multiport async servers)
	- Camera support
	- Full async as technically possible (InterCon)
	- Async task management
Missing:
	- review + optimization(?)
	- testing with gateway (ongoing)

Planned features in version 2.1.0-0

- micropython 1.22 integration with ShellCli (+interCon) and WebCli SSL/TLS support
- Camera performance enhancements (WebCli) - investigation needed (techical limitations?) - but actually fine enough :D
- telegram picture reply (? techical limitation ?)
VERSION (TAG) RELEASE INFO MICROS CORE MEMORY USAGE SUPPORTED DEVICE(S) APP PROFILES Load Modules NOTE
v0.1.0-0 release_Info-0.1.0-0 78,4% 29 776 byte esp8266 App Profiles LM manual Stable Core with applications - first release
v0.4.0-0 release_Info-0.4.0-0 81,0% 30768 byte esp8266 App Profiles LM manual micrOS multi device support with finalized core and so more. OTA update feature.
v0.4.0-0 release_Info-0.4.0-0 47,1% 52 416 byte esp32 App Profiles LM manual micrOS multi device support with finalized core and advanced task scheduler based on time, and and so more. OTA update feature.
v1.0.0-0 release_Info-1.0.0-0 47,9% 53 280 byte esp32 App Profiles LM manual Release of v1 micrOS, timer and event based irqs, cron task scheduling, realtime communication, multiple device support. OTA, etc.
v1.2.2-0 release_Info-1.2.2-0 48,6% 54 032 byte esp32 App Profiles LM manual Public Release of v1 micrOS, timer and event based irqs, cron task scheduling, realtime communication, multiple device support. OTA update, thread from socket shell (beta) etc.
v light-1.3.0-0 - - esp8266 lightweight branch - remove esp8266 due to memory limitation - BUT still supported with limited functionalities on lightweight branch. Hint: Change branch on github and download zip file, then start micrOSDevToolKit dashboard GUI
v 1.5.0-1 release_Info-1.5.0-1 58,2% 64 704 byte esp32 (tinyPico) App Profiles LM manual Advanced Timer IRQ based scheduling (cron & timirq), Geolocation based timing features, External IRQs with 4 channel (event filtering), finalized light controls, Device-Device comminucation support, etc.
v 1.21.0-4 release_Info-1.21.0-4 57.3% 63 728 byte esp32 (tinyPico, esp32s2, esp32s3) App Profiles LM manual Full async core system with advanced task management and device to device communication, task scheduling and much more ... with more then 30 application/pheriphery support.


Developer Quick guide

Note:

Secure Core (OTA static modules) (GUI): boot.py, micrOSloader.mpy, Network.mpy, ConfigHandler.mpy, Debug.mpy

Erase device & Deploy micropython & Install micrOS

Go to micrOS repo, where the devToolKit.py located.

devToolKit.py --make

Note: Follow the steps :)

Search and Connect to the device

devToolKit.py -s -c

User commands

devToolKit.py -h

optional arguments:
  -h, --help            show this help message and exit

Base commands:
  -m, --make            Erase & Deploy & Precompile (micrOS) & Install (micrOS)
  -r, --update          Update/redeploy connected (usb) micrOS. - node config will be restored
  -s, --search_devices  Search devices on connected wifi network.
  -o, --OTA             OTA (OverTheArir update with webrepl)
  -c, --connect         Connect via socketclinet
  -p CONNECT_PARAMETERS, --connect_parameters CONNECT_PARAMETERS
                        Parameters for connection in non-interactivve mode.
  -a APPLICATIONS, --applications APPLICATIONS
                        List/Execute frontend applications. [list]
  -stat, --node_status  Show all available micrOS devices status data.
  -cl, --clean          Clean user connection data: device_conn_cache.json

Search devices

devToolKit.py --search_devices

or

devToolKit.py -s

List discovered devices with status updates

devToolKit.py -stat

or

devToolKit.py --node_status

Output:

       [ UID ]                [ FUID ]		[ IP ]		[ STATUS ]	[ VERSION ]	[COMM SEC]
__localhost__                 __simulator__     127.0.0.1	OFFLINE		<n/a>		n/a
micr<ID>OS            TinyDevBoard      10.0.1.72	ONLINE		1.16.2-2		0.072
micr<ID>OS            LivingKitchen     10.0.1.200	ONLINE		1.16.2-2		0.076
micr<ID>OS            RoboArm           10.0.1.232	ONLINE		1.15.4-0		0.072
micr<ID>S            Cabinet           10.0.1.204	ONLINE		1.16.2-2		0.074
micr<ID>4OS            TestBird          10.0.1.179	ONLINE		1.16.2-1		0.083
micr<ID>OS            RingLamp          10.0.1.75	ONLINE		1.16.2-2		0.099
micr<ID>OS            CatFeeder         10.0.1.111	OFFLINE		<n/a>		n/a
micr<ID>OS            ImpiGamePro       10.0.1.23	OFFLINE		<n/a>		n/a
micr<ID>S            micrOSPublic02    10.0.1.47	ONLINE		1.16.2-2		0.101
micr<ID>cOS            micrOSPublic01    10.0.1.197	ONLINE		1.16.2-2		0.099
micr<ID>cOS            experipurple      10.0.1.94	OFFLINE		<n/a>		n/a

Other Developer commands

Development & Deployment & Connection:
  -f, --force_update    Force mode for -r/--update and -o/--OTA
  -e, --erase           Erase device
  -d, --deploy          Deploy micropython
  -i, --install         Install micrOS on micropython
  -l, --list_devs_n_bins
                        List connected devices & micropython binaries.
  -ls, --node_ls        List micrOS node filesystem content.
  -u, --connect_via_usb
                        Connect via serial port - usb
  -b, --backup_node_config
                        Backup usb connected node config.
  -sim, --simulate      start micrOS on your computer in simulated mode
  -cc, --cross_compile_micros
                        Cross Compile micrOS system [py -> mpy]
  -gw, --gateway        Start micrOS Gateway rest-api server
  -v, --version         Get micrOS version - repo + connected device.

Socket terminal example - non interactive

Identify device

devToolKit.py -c -p '--dev slim01 hello'
Load MicrOS device cache: /Users/bnm/Documents/NodeMcu/MicrOs/tools/device_conn_cache.json
Activate MicrOS device connection address
[i]         FUID        IP               UID
[0] Device: slim01 - 10.0.1.73 - 0x500x20x910x680xc0xf7
Device was found: slim01
hello:slim01:0x500x20x910x680xc0xf7

Get help

devToolKit.py -c -p '--dev BedLamp help'

[MICROS]   - built-in shell commands
   hello   - hello msg - for device identification
   version - returns micrOS version
   exit    - exit from shell socket prompt
   reboot  - system soft reboot (vm), hard reboot (hw): reboot -h
   webrepl - start webrepl, for file transfers use with --update
[CONF] Configure mode - built-in shell commands
  conf       - Enter conf mode
    dump       - Dump all data
    key        - Get value
    key value  - Set value
  noconf     - Exit conf mode
[TASK] postfix: &x - one-time,  &&x - periodic, x: wait ms [x min: 20ms]
  task list         - list tasks with <tag>s
  task kill <tag>   - stop task
  task show <tag>   - show task output
[EXEC] Command mode (LMs):
   help lm  - list ALL LoadModules
   cct
      help
   co2
      help
   dht22
        help
   intercon
           help
   robustness
             help
   system
         help

Embedded config handler

devToolKit.py -c -p '--dev BedLamp conf <a> dump'
  
  staessid  :        <your-wifi-passwd>
  devip     :        10.0.1.204
  version   :        1.11.0-1
  devfid    :        BedLamp
  cron      :        True
  cronseq   :        3000
  soctout   :        10
  irq2_cbf  :        n/a
  stapwd    :        <your-wifi-name>
  dbg       :        False
  irq2      :        False
  irq1      :        False
  irq1_cbf  :        n/a
  appwd     :        ADmin123
  irq2_trig :        n/a
  hwuid     :        micr7c9ebd623ff8OS
  crontasks :        sunset!cct toggle True;*:0:30:0!cct toggle False;*:5:0:0!cct toggle False
  timirq    :        True
  irq3      :        False
  irq3_cbf  :        n/a
  irq4      :        False
  irq4_cbf  :        n/a
  irq4_trig :        n/a
  nwmd      :        STA
  timirqcbf :        system ha_sta
  irq_prell_ms:      300
  boothook  :        cct load_n_init
  aioqueue  :        3
  auth      :        False
  timirqseq :        60000
  utc       :        60
  boostmd   :        True
  socport   :        9008
  irq3_trig :        n/a
  irq1_trig :        n/a
  guimeta   :        ...
  cstmpmap  :        n/a

Load Modules - User defined functions

devToolKit.py -c -p '--dev BedLamp system info'

CPU clock: 24 [MHz]
Mem usage: 71.0 %
FS usage: 14.6 %
upython: v1.19.1 on 2022-06-18
board: ESP32 module with ESP32
mac: 7c:9e:bd:62:3f:f8
uptime: 0 1:29:19

SocketClient

Config:

micrOS/toolkit/user_data/device_conn_cache.json

{
    "__devuid__": [
        "192.168.4.1",
        9008,
        "__device_on_AP__"
    ],
    "__localhost__": [
        "127.0.0.1",
        9008,
        "__simulator__"
    ],
    "micr500291863428OS": [
        "10.0.1.72",
        9008,
        "BedLamp"
    ]
}

Interactive mode

devToolKit.py -c 
or
devToolKit.py -connect

[i]         FUID        IP               UID
[0] Device: __device_on_AP__ - 192.168.4.1 - __devuid__
[1] Device: __simulator__ - 127.0.0.1 - __localhost__
[2] Device: BedLamp - 10.0.1.72 - micr500291863428OS

Choose a device index: 5
Device was selected: ['10.0.1.204', 9008, 'Cabinet']
BedLamp $ help
[MICROS]   - built-in shell commands
   hello   - hello msg - for device identification
   version - returns micrOS version
   exit    - exit from shell socket prompt
   reboot  - system soft reboot (vm), hard reboot (hw): reboot -h
   webrepl - start webrepl, for file transfers use with --update
[CONF] Configure mode - built-in shell commands
  conf       - Enter conf mode
    dump       - Dump all data
    key        - Get value
    key value  - Set value
  noconf     - Exit conf mode
[TASK] postfix: &x - one-time,  &&x - periodic, x: wait ms [x min: 20ms]
  task list         - list tasks with <tag>s
  task kill <tag>   - stop task
  task show <tag>   - show task output
[EXEC] Command mode (LMs):
   help lm  - list ALL LoadModules
   cct
      help
   co2
      help
   dht22
        help
   intercon
           help
   robustness
             help
   system
         help
BedLamp $  exit
Bye!

Project structure

micrOS resources library

micrOS Core

Core micrOS resources
	1	172	Time.py                  (mlint: True)	(pylint: 8.76)	(ref.: 6)
	2	123	micrOSloader.py          (mlint: True)	(pylint: 7.63)	(ref.: 1)
	3	53	Hooks.py                 (mlint: True)	(pylint: 9.62)	(ref.: 1)
	4	452	Server.py                (mlint: True)	(pylint: 9.23)	(ref.: 4)
	5	516	Tasks.py                 (mlint: True)	(pylint: 9.46)	(ref.: 11)
	6	220	Config.py                (mlint: True)	(pylint: 9.38)	(ref.: 12)
	7	9	reset.py                 (mlint: True)	(pylint: 8.75)	(ref.: 0)
	8	264	Shell.py                 (mlint: True)	(pylint: 9.4)	(ref.: 1)
	9	213	Notify.py                (mlint: True)	(pylint: 9.57)	(ref.: 2)
	10	161	Common.py                (mlint: True)	(pylint: 8.98)	(ref.: 19)
	11	155	InterConnect.py          (mlint: True)	(pylint: 9.11)	(ref.: 1)
	12	204	Debug.py                 (mlint: True)	(pylint: 8.61)	(ref.: 23)
	13	214	Network.py               (mlint: True)	(pylint: 9.64)	(ref.: 9)
	14	225	Scheduler.py             (mlint: True)	(pylint: 9.43)	(ref.: 1)
	15	133	microIO.py               (mlint: True)	(pylint: 9.05)	(ref.: 35)
	16	69	micrOS.py                (mlint: True)	(pylint: 9.3)	(ref.: 1)
	17	159	Interrupts.py            (mlint: True)	(pylint: 9.08)	(ref.: 2)
	18	19	main.py                  (mlint: True)	(pylint: 8.89)	(ref.: 0)
	19	146	urequests.py             (mlint: True)	(pylint: 8.79)	(ref.: 3)

SUM CODE LINES (WITH COMMENTS, WITHOUT EMPTY LINES): 3507

micrOS Load Modules

micrOS Load Module resources
	1	262	LM_roboarm.py            (mlint: True)	(pylint: 9.18)	(ref.: 0)
	2	133	LM_stepper.py            (mlint: True)	(pylint: 9.04)	(ref.: 1)
	3	129	LM_genIO.py              (mlint: True)	(pylint: 7.42)	(ref.: 1)
	4	499	LM_oled_ui.py            (mlint: False)	(pylint: 8.74)	(ref.: 0)
	5	197	LM_system.py             (mlint: True)	(pylint: 7.48)	(ref.: 2)
	6	53	LM_robustness.py         (mlint: True)	(pylint: 7.04)	(ref.: 0)
	7	122	LM_co2.py                (mlint: True)	(pylint: 8.39)	(ref.: 3)
	8	217	LM_oled.py               (mlint: True)	(pylint: 9.31)	(ref.: 1)
	9	85	LM_tinyrgb.py            (mlint: True)	(pylint: 8.18)	(ref.: 0)
	10	104	LM_aht10.py              (mlint: False)	(pylint: 8.39)	(ref.: 0)
	11	299	LM_bme280.py             (mlint: True)	(pylint: 7.98)	(ref.: 0)
	12	39	LM_ph_sensor.py          (mlint: True)	(pylint: 6.32)	(ref.: 0)
	13	240	LM_buzzer.py             (mlint: True)	(pylint: 8.79)	(ref.: 0)
	14	224	LM_switch.py             (mlint: True)	(pylint: 8.64)	(ref.: 2)
	15	124	LM_servo.py              (mlint: True)	(pylint: 7.87)	(ref.: 4)
	16	49	LM_rgbcct.py             (mlint: True)	(pylint: 8.57)	(ref.: 0)
	17	280	LM_oled_sh1106.py        (mlint: True)	(pylint: 8.88)	(ref.: 1)
	18	304	LM_neopixel.py           (mlint: True)	(pylint: 7.34)	(ref.: 2)
	19	317	LM_cct.py                (mlint: True)	(pylint: 8.65)	(ref.: 1)
	20	47	LM_L9110_DCmotor.py      (mlint: True)	(pylint: 8.08)	(ref.: 0)
	21	283	LM_neoeffects.py         (mlint: True)	(pylint: 6.97)	(ref.: 0)
	22	33	LM_i2c.py                (mlint: True)	(pylint: 6.43)	(ref.: 0)
	23	72	LM_dht22.py              (mlint: True)	(pylint: 7.78)	(ref.: 0)
	24	68	LM_L298N_DCmotor.py      (mlint: True)	(pylint: 9.02)	(ref.: 0)
	25	44	LM_esp32.py              (mlint: True)	(pylint: 5.0)	(ref.: 0)
	26	64	LM_pet_feeder.py         (mlint: True)	(pylint: 7.94)	(ref.: 0)
	27	87	LM_rencoder.py           (mlint: False)	(pylint: 8.24)	(ref.: 0)
	28	72	LM_dht11.py              (mlint: True)	(pylint: 7.78)	(ref.: 0)
	29	76	LM_telegram.py           (mlint: False)	(pylint: 9.15)	(ref.: 0)
	30	161	LM_OV2640.py             (mlint: False)	(pylint: 8.94)	(ref.: 0)
	31	282	LM_rgb.py                (mlint: True)	(pylint: 8.4)	(ref.: 2)
	32	70	LM_distance.py           (mlint: True)	(pylint: 8.37)	(ref.: 0)
	33	323	LM_VL53L0X.py            (mlint: True)	(pylint: 9.14)	(ref.: 0)
	34	107	LM_light_sensor.py       (mlint: True)	(pylint: 8.91)	(ref.: 0)
	35	12	LM_rp2w.py               (mlint: True)	(pylint: 5.56)	(ref.: 0)
	36	207	LM_presence.py           (mlint: False)	(pylint: 8.38)	(ref.: 4)
	37	200	LM_dimmer.py             (mlint: True)	(pylint: 8.32)	(ref.: 0)
	38	60	LM_demo.py               (mlint: False)	(pylint: 8.46)	(ref.: 0)
	39	96	LM_lmpacman.py           (mlint: True)	(pylint: 6.98)	(ref.: 0)
	40	60	LM_catgame.py            (mlint: True)	(pylint: 8.85)	(ref.: 0)
	41	46	LM_intercon.py           (mlint: True)	(pylint: 8.64)	(ref.: 3)
	42	54	LM_ds18.py               (mlint: True)	(pylint: 5.38)	(ref.: 0)

SUM CODE LINES (WITH COMMENTS, WITHOUT EMPTY LINES): 6201

LM (Load Modules) - Application logic - accessable over socket server as a command

micrOS devToolkit resources

DevToolKit Dashboard apps

You can easly copy the Template_app.py, and create a new socket based app. Template_app.py

micrOS/toolkit/dashboard_apps
โ”‚ย ย  โ”œโ”€โ”€ AirQualityBME280_app.py
โ”‚ย ย  โ”œโ”€โ”€ AirQualityDHT22_CO2_app.py
โ”‚ย ย  โ”œโ”€โ”€ AnalogCCT_app.py
โ”‚ย ย  โ”œโ”€โ”€ AnalogRGB_app.py
โ”‚ย ย  โ”œโ”€โ”€ CatGame_app.py
โ”‚ย ย  โ”œโ”€โ”€ Dimmer_app.py
โ”‚ย ย  โ”œโ”€โ”€ GetVersion_app.py
โ”‚ย ย  โ”œโ”€โ”€ GetVersion_app.pyc
โ”‚ย ย  โ”œโ”€โ”€ NeopixelTest_app.py
โ”‚ย ย  โ”œโ”€โ”€ RoboArm_app.py
โ”‚ย ย  โ”œโ”€โ”€ SysCheck_app.py
โ”‚ย ย  โ”œโ”€โ”€ Template_app.py

Stored connection data and default node configs

micrOS/toolkit/user_data
โ”‚ย ย  โ”œโ”€โ”€ device_conn_cache.json        <- connection cache
โ”‚ย ย  โ””โ”€โ”€ node_config_archive
โ”‚ย ย      โ”œโ”€โ”€ BigRGB-node_config.json
โ”‚ย ย      โ”œโ”€โ”€ Chillight-node_config.json
โ”‚ย ย      โ”œโ”€โ”€ Kapcsolo230-node_config.json
โ”‚ย ย      โ”œโ”€โ”€ LampController-node_config.json
โ”‚ย ย      โ”œโ”€โ”€ MeasureNode-node_config.json
โ”‚ย ย      โ”œโ”€โ”€ MrGreen-node_config.json
โ”‚ย ย      โ”œโ”€โ”€ RingLamp-node_config.json
โ”‚ย ย      โ””โ”€โ”€ test-node_config.json

Virtaulenv for development and stored USB-Serial drivers

micrOS/env/
โ”œโ”€โ”€ __init__.py
โ”œโ”€โ”€ driver_cp210x
โ”‚ย ย  โ”œโ”€โ”€ CP210x_Universal_Windows_Driver
โ”‚ย ย  โ””โ”€โ”€ macOS_VCP_Driver
โ”œโ”€โ”€ requirements.txt
โ””โ”€โ”€ venv
    โ”œโ”€โ”€ bin
    โ”œโ”€โ”€ include
    โ”œโ”€โ”€ lib
    โ””โ”€โ”€ pyvenv.cfg

Precompiled resources for easy install

micrOS/toolkit/workspace/precompiled
    โ”‚ย ย  โ”œโ”€โ”€ BgJob.mpy
    โ”‚ย ย  โ”œโ”€โ”€ Common.mpy
    โ”‚ย ย  โ”œโ”€โ”€ ConfigHandler.mpy
    โ”‚ย ย  โ”œโ”€โ”€ Debug.mpy
    โ”‚ย ย  โ”œโ”€โ”€ Hooks.mpy
    โ”‚ย ย  โ”œโ”€โ”€ InterConnect.mpy
    โ”‚ย ย  โ”œโ”€โ”€ InterpreterCore.mpy
    โ”‚ย ย  โ”œโ”€โ”€ InterpreterShell.mpy
    โ”‚ย ย  โ”œโ”€โ”€ InterruptHandler.mpy
    โ”‚ย ย  โ”œโ”€โ”€ LM_L298N_DCmotor.mpy
    โ”‚ย ย  โ”œโ”€โ”€ LM_L9110_DCmotor.py
    โ”‚ย ย  โ”œโ”€โ”€ LM_VL53L0X.py
    โ”‚ย ย  โ”œโ”€โ”€ LM_bme280.mpy
    โ”‚ย ย  โ”œโ”€โ”€ LM_buzzer.mpy
    โ”‚ย ย  โ”œโ”€โ”€ LM_catgame.py
    โ”‚ย ย  โ”œโ”€โ”€ LM_cct.mpy
    โ”‚ย ย  โ”œโ”€โ”€ LM_co2.mpy
    โ”‚ย ย  โ”œโ”€โ”€ LM_dht11.mpy
    โ”‚ย ย  โ”œโ”€โ”€ LM_dht22.mpy
    โ”‚ย ย  โ”œโ”€โ”€ LM_dimmer.mpy
    โ”‚ย ย  โ”œโ”€โ”€ LM_distance_HCSR04.py
    โ”‚ย ย  โ”œโ”€โ”€ LM_ds18.mpy
    โ”‚ย ย  โ”œโ”€โ”€ LM_esp32.py
    โ”‚ย ย  โ”œโ”€โ”€ LM_genIO.mpy
    โ”‚ย ย  โ”œโ”€โ”€ LM_i2c.py
    โ”‚ย ย  โ”œโ”€โ”€ LM_intercon.mpy
    โ”‚ย ย  โ”œโ”€โ”€ LM_light_sensor.mpy
    โ”‚ย ย  โ”œโ”€โ”€ LM_neoeffects.mpy
    โ”‚ย ย  โ”œโ”€โ”€ LM_neopixel.mpy
    โ”‚ย ย  โ”œโ”€โ”€ LM_oled.mpy
    โ”‚ย ย  โ”œโ”€โ”€ LM_oled_ui.mpy
    โ”‚ย ย  โ”œโ”€โ”€ LM_pet_feeder.py
    โ”‚ย ย  โ”œโ”€โ”€ LM_ph_sensor.py
    โ”‚ย ย  โ”œโ”€โ”€ LM_rgb.mpy
    โ”‚ย ย  โ”œโ”€โ”€ LM_roboarm.mpy
    โ”‚ย ย  โ”œโ”€โ”€ LM_robustness.py
    โ”‚ย ย  โ”œโ”€โ”€ LM_servo.mpy
    โ”‚ย ย  โ”œโ”€โ”€ LM_stepper.mpy
    โ”‚ย ย  โ”œโ”€โ”€ LM_switch.mpy
    โ”‚ย ย  โ”œโ”€โ”€ LM_system.mpy
    โ”‚ย ย  โ”œโ”€โ”€ LM_tinyrgb.mpy
    โ”‚ย ย  โ”œโ”€โ”€ IO_esp32.mpy
    โ”‚ย ย  โ”œโ”€โ”€ IO_tinypico.mpy
    โ”‚ย ย  โ”œโ”€โ”€ LogicalPins.mpy
    โ”‚ย ย  โ”œโ”€โ”€ Network.mpy
    โ”‚ย ย  โ”œโ”€โ”€ Scheduler.mpy
    โ”‚ย ย  โ”œโ”€โ”€ SocketServer.mpy
    โ”‚ย ย  โ”œโ”€โ”€ Time.mpy
    โ”‚ย ย  โ”œโ”€โ”€ TinyPLed.mpy
    โ”‚ย ย  โ”œโ”€โ”€ boot.py
    โ”‚ย ย  โ”œโ”€โ”€ micrOS.mpy
    โ”‚ย ย  โ”œโ”€โ”€ micrOSloader.mpy
    โ”‚ย ย  โ””โ”€โ”€ reset.mpy

Note: From the micrOS/source/ by default the LMs are not compiling, to extend complied LM list add LM explicitly to the following file:

micrOs/toolkit/LM_to_compile.dat

HINTS

  • Save screen console buffer (output) Press ctrl + A : and type hardcopy -h <filename>

  • Create callgraph: pycallgraph

  • Convert PNG/JPG-s to GIF: convert -delay 60 ./*.png mygif.gif

  • micrOS core and Load Module source code info:

devToolKit.py -lint
OR
devToolKit.py --linter

micrOS gateway - Linux service template

  • Prerequisite: install micrOS devtoolkit PiP package

  • Create service: micrOS gateway service

  • [1] create micros-gw.service file:

[Unit]
Description=micrOS gateway REST API service
After=network-online.target

[Service]
Environment="API_AUTH=<usr_name>:<password>"  <-- replace
ExecStart=/usr/bin/python3 -m devToolKit -gw  <-- check (depends on deployment) OR /bin/bash
WorkingDirectory=/home/gateway                <-- replace
StandardOutput=inherit
StandardError=inherit
Restart=always
User=<user>                                   <-- replace

[Install]
WantedBy=multi-user.target
  • [2] copy service to sudo cp micros-gw.service /lib/systemd/system/

  • [3] start service: sudo systemctl start micros-gw.service

  • [4] enable service at bootup: sudo systemctl enable micros-gw.service

  • [5] show service state: sudo systemctl status micros-gw.service

GIT

  • Add git tag: git tag -a vX.Y.Z-K -m "tag message"

  • Publish tags: git push origin --tags

  • Pretty git view: git log --pretty=oneline

  • File change list: git diff --name-only fbb4875609a3c0ee088b6a118ebf9f8a500be0fd HEAD | grep 'mpy-MicrOS'

  • GitHub embed youtube link: https://github.com/itskeshav/Add-youtube-link-in-Readme.md

  • Git history visualization with Gource

gource \
    --highlight-users \
    --hide filenames \
    --file-idle-time 0 \
    --max-files 0 \
    --seconds-per-day 0.01 \
    --auto-skip-seconds 1 \
    --title "micrOS Evolution" \
    --output-ppm-stream - \
    | ffmpeg -y -r 30 -f image2pipe -vcodec ppm -i - -vcodec libx264 -preset ultrafast -pix_fmt yuv420p -crf 1 -threads 0 -bf 0 output.mp4

git push -u origin master

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

micrOSDevToolKit-1.48.2.tar.gz (9.4 MB view hashes)

Uploaded Source

Built Distribution

micrOSDevToolKit-1.48.2-py3-none-any.whl (9.5 MB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page