Repository files navigation

Logo

#Ioflo

##Enabling The Programmable World

http://ioflo.com

Getting Started

Installation

$ pip install ioflo

on OS X

$ sudo pip install ioflo

Command Line

$ ioflo -h

usage: ioflo [-h] [-V] [-v VERBOSE] [-c CONSOLE] [-p PERIOD] [-r] [-R]
[-n NAME] -f FILENAME [-b [BEHAVIORS [BEHAVIORS ...]]]
[-m PARSEMODE] [-U USERNAME] [-P PASSWORD] [-S [STATISTICS]]
Runs ioflo. Example: ioflo -f filename -p period -v level -r -h -b
'mybehaviors.py'
optional arguments:
-h, --help show this help message and exit
-V, --version Prints out version of ioflo.
-v VERBOSE, --verbose VERBOSE
Verbosity level.
-c CONSOLE, --console CONSOLE
File path name to console log file.
-p PERIOD, --period PERIOD
Period per skedder run in seconds.
-r, --realtime Run skedder at realtime.
-R, --retrograde Shift skedder timers when retrograde clock detected.
-n NAME, --name NAME Skedder name.
-f FILENAME, --filename FILENAME
File path to FloScript file.
-b [BEHAVIORS [BEHAVIORS ...]], --behaviors [BEHAVIORS [BEHAVIORS ...]]
Module name strings to external behavior packages.
-m PARSEMODE, --parsemode PARSEMODE
FloScript parsing mode.
-U USERNAME, --username USERNAME
Username.
-P PASSWORD, --password PASSWORD
Password.
-S [STATISTICS], --statistics [STATISTICS]
Profile and compute performance statistics. Put
statistics into file path given by optional argument.
Default statistics file path is
/tmp/ioflo/profile/NAME.

Example:

Put the following into the file box1.flo


#example mission box1.flo
house box1
framer vehiclesim be active first vehicle_run
frame vehicle_run
do simulator motion uuv
framer mission be active first northleg
frame northleg
set elapsed with 20.0
set heading with 0.0
set depth with 5.0
set speed with 2.5
go next if elapsed >= goal
frame eastleg
set heading with 90.0
go next if elapsed >= goal
frame southleg
set heading with 180.0
go next if elapsed >= goal
frame westleg
set heading with 270.0
go next if elapsed >= goal
frame mission_stop
bid stop vehiclesim
bid stop autopilot
bid stop me
framer autopilot be active first autopilot_run
frame autopilot_run
do controller pid speed
do controller pid heading
do controller pid depth
do controller pid pitch

To run

$ ioflo -v terse -f box1.flo

Something like this should print on the console.

----------------------
Building ...
Building Houses for Skedder Skedder ...
Created house box1. Assigning registries, creating instances ...
Built house box1 with meta:
plan: Share {'value': 'Test'}
version: Share {'value': '0.7.2'}
platform: Share {'os': 'unix', 'processor': 'intel'}
period: Share {'value': 0.125}
real: Share {'value': False}
filepath: Share {'value': 'box1.flo'}
mode: Share {'value': []}
behaviors: Share {'value': []}
credentials: Share {'username': '', 'password': ''}
name: Share {'value': 'box1'}
Warning: Nonexistent goal share goal.heading ... creating anyway
Warning: Transfer into non-existent field 'value'in share goal.heading ... creating anyway
Warning: Nonexistent goal share goal.depth ... creating anyway
Warning: Transfer into non-existent field 'value'in share goal.depth ... creating anyway
Warning: Nonexistent goal share goal.speed ... creating anyway
Warning: Transfer into non-existent field 'value'in share goal.speed ... creating anyway
Ordering taskable taskers for house box1
Resolving house box1
Resolving framer vehiclesim
Resolving framer mission
Resolving framer autopilot
Tracing outlines for house box1
Tracing outlines for framer vehiclesim
Tracing outlines for framer mission
Tracing outlines for framer autopilot
Starting mission from file box1.flo...
Starting Framer vehiclesim ...
To: vehiclesim<<vehicle_run> at 0.0 Starting Framer mission ...To: mission<<northleg> at 0.0 Starting Framer autopilot ...To: autopilot<<autopilot_run> at 0.0To: mission<<eastleg> at 20.0 Via: northleg (go next if elapsed >= goal) From: <northleg> after 20.000To: mission<<southleg> at 40.0 Via: eastleg (go next if elapsed >= goal) From: <eastleg> after 20.000To: mission<<westleg> at 60.0 Via: southleg (go next if elapsed >= goal) From: <southleg> after 20.000To: mission<<mission_stop> at 80.0 Via: westleg (go next if elapsed >= goal) From: <westleg> after 20.000 Stopping autopilot in autopilot_run at 80.000 Stopping vehiclesim in vehicle_run at 80.125 Stopping mission in mission_stop at 80.125No running or started taskers. Shutting down skedder ...Total elapsed real time = 0.2099Aborting all ready taskers ... Aborting vehiclesim at 80.125 Tasker 'vehiclesim' aborted Aborting mission at 80.125 Tasker 'mission' aborted Aborting autopilot at 80.125 Tasker 'autopilot' aborted----------------------

Documentation

github

https://github.com/ioflo/ioflo_manuals

License

APACHE 2.0

Supported Python Versions

Python 3.7.4 +

About

Automated Reasoning Engine and Flow Based Programming Framework

Resources

Stars

156 stars

Watchers

17 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Logo

#Ioflo

##Enabling The Programmable World

http://ioflo.com

Getting Started

Installation

$ pip install ioflo

on OS X

$ sudo pip install ioflo

Command Line

$ ioflo -h

usage: ioflo [-h] [-V] [-v VERBOSE] [-c CONSOLE] [-p PERIOD] [-r] [-R]
[-n NAME] -f FILENAME [-b [BEHAVIORS [BEHAVIORS ...]]]
[-m PARSEMODE] [-U USERNAME] [-P PASSWORD] [-S [STATISTICS]]
Runs ioflo. Example: ioflo -f filename -p period -v level -r -h -b
'mybehaviors.py'
optional arguments:
-h, --help show this help message and exit
-V, --version Prints out version of ioflo.
-v VERBOSE, --verbose VERBOSE
Verbosity level.
-c CONSOLE, --console CONSOLE
File path name to console log file.
-p PERIOD, --period PERIOD
Period per skedder run in seconds.
-r, --realtime Run skedder at realtime.
-R, --retrograde Shift skedder timers when retrograde clock detected.
-n NAME, --name NAME Skedder name.
-f FILENAME, --filename FILENAME
File path to FloScript file.
-b [BEHAVIORS [BEHAVIORS ...]], --behaviors [BEHAVIORS [BEHAVIORS ...]]
Module name strings to external behavior packages.
-m PARSEMODE, --parsemode PARSEMODE
FloScript parsing mode.
-U USERNAME, --username USERNAME
Username.
-P PASSWORD, --password PASSWORD
Password.
-S [STATISTICS], --statistics [STATISTICS]
Profile and compute performance statistics. Put
statistics into file path given by optional argument.
Default statistics file path is
/tmp/ioflo/profile/NAME.

Example:

Put the following into the file box1.flo


#example mission box1.flo
house box1
framer vehiclesim be active first vehicle_run
frame vehicle_run
do simulator motion uuv
framer mission be active first northleg
frame northleg
set elapsed with 20.0
set heading with 0.0
set depth with 5.0
set speed with 2.5
go next if elapsed >= goal
frame eastleg
set heading with 90.0
go next if elapsed >= goal
frame southleg
set heading with 180.0
go next if elapsed >= goal
frame westleg
set heading with 270.0
go next if elapsed >= goal
frame mission_stop
bid stop vehiclesim
bid stop autopilot
bid stop me
framer autopilot be active first autopilot_run
frame autopilot_run
do controller pid speed
do controller pid heading
do controller pid depth
do controller pid pitch

To run

$ ioflo -v terse -f box1.flo

Something like this should print on the console.

----------------------
Building ...
Building Houses for Skedder Skedder ...
Created house box1. Assigning registries, creating instances ...
Built house box1 with meta:
plan: Share {'value': 'Test'}
version: Share {'value': '0.7.2'}
platform: Share {'os': 'unix', 'processor': 'intel'}
period: Share {'value': 0.125}
real: Share {'value': False}
filepath: Share {'value': 'box1.flo'}
mode: Share {'value': []}
behaviors: Share {'value': []}
credentials: Share {'username': '', 'password': ''}
name: Share {'value': 'box1'}
Warning: Nonexistent goal share goal.heading ... creating anyway
Warning: Transfer into non-existent field 'value'in share goal.heading ... creating anyway
Warning: Nonexistent goal share goal.depth ... creating anyway
Warning: Transfer into non-existent field 'value'in share goal.depth ... creating anyway
Warning: Nonexistent goal share goal.speed ... creating anyway
Warning: Transfer into non-existent field 'value'in share goal.speed ... creating anyway
Ordering taskable taskers for house box1
Resolving house box1
Resolving framer vehiclesim
Resolving framer mission
Resolving framer autopilot
Tracing outlines for house box1
Tracing outlines for framer vehiclesim
Tracing outlines for framer mission
Tracing outlines for framer autopilot
Starting mission from file box1.flo...
Starting Framer vehiclesim ...
To: vehiclesim<<vehicle_run> at 0.0 Starting Framer mission ...To: mission<<northleg> at 0.0 Starting Framer autopilot ...To: autopilot<<autopilot_run> at 0.0To: mission<<eastleg> at 20.0 Via: northleg (go next if elapsed >= goal) From: <northleg> after 20.000To: mission<<southleg> at 40.0 Via: eastleg (go next if elapsed >= goal) From: <eastleg> after 20.000To: mission<<westleg> at 60.0 Via: southleg (go next if elapsed >= goal) From: <southleg> after 20.000To: mission<<mission_stop> at 80.0 Via: westleg (go next if elapsed >= goal) From: <westleg> after 20.000 Stopping autopilot in autopilot_run at 80.000 Stopping vehiclesim in vehicle_run at 80.125 Stopping mission in mission_stop at 80.125No running or started taskers. Shutting down skedder ...Total elapsed real time = 0.2099Aborting all ready taskers ... Aborting vehiclesim at 80.125 Tasker 'vehiclesim' aborted Aborting mission at 80.125 Tasker 'mission' aborted Aborting autopilot at 80.125 Tasker 'autopilot' aborted----------------------

Documentation

github

https://github.com/ioflo/ioflo_manuals

License

APACHE 2.0

Supported Python Versions

Python 3.7.4 +

About

Automated Reasoning Engine and Flow Based Programming Framework

Resources

Stars

156 stars

Watchers

17 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Logo

#Ioflo

##Enabling The Programmable World

http://ioflo.com

Getting Started

Installation

$ pip install ioflo

on OS X

$ sudo pip install ioflo

Command Line

$ ioflo -h

usage: ioflo [-h] [-V] [-v VERBOSE] [-c CONSOLE] [-p PERIOD] [-r] [-R]
[-n NAME] -f FILENAME [-b [BEHAVIORS [BEHAVIORS ...]]]
[-m PARSEMODE] [-U USERNAME] [-P PASSWORD] [-S [STATISTICS]]
Runs ioflo. Example: ioflo -f filename -p period -v level -r -h -b
'mybehaviors.py'
optional arguments:
-h, --help show this help message and exit
-V, --version Prints out version of ioflo.
-v VERBOSE, --verbose VERBOSE
Verbosity level.
-c CONSOLE, --console CONSOLE
File path name to console log file.
-p PERIOD, --period PERIOD
Period per skedder run in seconds.
-r, --realtime Run skedder at realtime.
-R, --retrograde Shift skedder timers when retrograde clock detected.
-n NAME, --name NAME Skedder name.
-f FILENAME, --filename FILENAME
File path to FloScript file.
-b [BEHAVIORS [BEHAVIORS ...]], --behaviors [BEHAVIORS [BEHAVIORS ...]]
Module name strings to external behavior packages.
-m PARSEMODE, --parsemode PARSEMODE
FloScript parsing mode.
-U USERNAME, --username USERNAME
Username.
-P PASSWORD, --password PASSWORD
Password.
-S [STATISTICS], --statistics [STATISTICS]
Profile and compute performance statistics. Put
statistics into file path given by optional argument.
Default statistics file path is
/tmp/ioflo/profile/NAME.

Example:

Put the following into the file box1.flo


#example mission box1.flo
house box1
framer vehiclesim be active first vehicle_run
frame vehicle_run
do simulator motion uuv
framer mission be active first northleg
frame northleg
set elapsed with 20.0
set heading with 0.0
set depth with 5.0
set speed with 2.5
go next if elapsed >= goal
frame eastleg
set heading with 90.0
go next if elapsed >= goal
frame southleg
set heading with 180.0
go next if elapsed >= goal
frame westleg
set heading with 270.0
go next if elapsed >= goal
frame mission_stop
bid stop vehiclesim
bid stop autopilot
bid stop me
framer autopilot be active first autopilot_run
frame autopilot_run
do controller pid speed
do controller pid heading
do controller pid depth
do controller pid pitch

To run

$ ioflo -v terse -f box1.flo

Something like this should print on the console.

----------------------
Building ...
Building Houses for Skedder Skedder ...
Created house box1. Assigning registries, creating instances ...
Built house box1 with meta:
plan: Share {'value': 'Test'}
version: Share {'value': '0.7.2'}
platform: Share {'os': 'unix', 'processor': 'intel'}
period: Share {'value': 0.125}
real: Share {'value': False}
filepath: Share {'value': 'box1.flo'}
mode: Share {'value': []}
behaviors: Share {'value': []}
credentials: Share {'username': '', 'password': ''}
name: Share {'value': 'box1'}
Warning: Nonexistent goal share goal.heading ... creating anyway
Warning: Transfer into non-existent field 'value'in share goal.heading ... creating anyway
Warning: Nonexistent goal share goal.depth ... creating anyway
Warning: Transfer into non-existent field 'value'in share goal.depth ... creating anyway
Warning: Nonexistent goal share goal.speed ... creating anyway
Warning: Transfer into non-existent field 'value'in share goal.speed ... creating anyway
Ordering taskable taskers for house box1
Resolving house box1
Resolving framer vehiclesim
Resolving framer mission
Resolving framer autopilot
Tracing outlines for house box1
Tracing outlines for framer vehiclesim
Tracing outlines for framer mission
Tracing outlines for framer autopilot
Starting mission from file box1.flo...
Starting Framer vehiclesim ...
To: vehiclesim<<vehicle_run> at 0.0 Starting Framer mission ...To: mission<<northleg> at 0.0 Starting Framer autopilot ...To: autopilot<<autopilot_run> at 0.0To: mission<<eastleg> at 20.0 Via: northleg (go next if elapsed >= goal) From: <northleg> after 20.000To: mission<<southleg> at 40.0 Via: eastleg (go next if elapsed >= goal) From: <eastleg> after 20.000To: mission<<westleg> at 60.0 Via: southleg (go next if elapsed >= goal) From: <southleg> after 20.000To: mission<<mission_stop> at 80.0 Via: westleg (go next if elapsed >= goal) From: <westleg> after 20.000 Stopping autopilot in autopilot_run at 80.000 Stopping vehiclesim in vehicle_run at 80.125 Stopping mission in mission_stop at 80.125No running or started taskers. Shutting down skedder ...Total elapsed real time = 0.2099Aborting all ready taskers ... Aborting vehiclesim at 80.125 Tasker 'vehiclesim' aborted Aborting mission at 80.125 Tasker 'mission' aborted Aborting autopilot at 80.125 Tasker 'autopilot' aborted----------------------

Documentation

github

https://github.com/ioflo/ioflo_manuals

License

APACHE 2.0

Supported Python Versions

Python 3.7.4 +

About

Automated Reasoning Engine and Flow Based Programming Framework

Resources

Stars

156 stars

Watchers

17 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Logo

#Ioflo

##Enabling The Programmable World

http://ioflo.com

Getting Started

Installation

$ pip install ioflo

on OS X

$ sudo pip install ioflo

Command Line

$ ioflo -h

usage: ioflo [-h] [-V] [-v VERBOSE] [-c CONSOLE] [-p PERIOD] [-r] [-R]
[-n NAME] -f FILENAME [-b [BEHAVIORS [BEHAVIORS ...]]]
[-m PARSEMODE] [-U USERNAME] [-P PASSWORD] [-S [STATISTICS]]
Runs ioflo. Example: ioflo -f filename -p period -v level -r -h -b
'mybehaviors.py'
optional arguments:
-h, --help show this help message and exit
-V, --version Prints out version of ioflo.
-v VERBOSE, --verbose VERBOSE
Verbosity level.
-c CONSOLE, --console CONSOLE
File path name to console log file.
-p PERIOD, --period PERIOD
Period per skedder run in seconds.
-r, --realtime Run skedder at realtime.
-R, --retrograde Shift skedder timers when retrograde clock detected.
-n NAME, --name NAME Skedder name.
-f FILENAME, --filename FILENAME
File path to FloScript file.
-b [BEHAVIORS [BEHAVIORS ...]], --behaviors [BEHAVIORS [BEHAVIORS ...]]
Module name strings to external behavior packages.
-m PARSEMODE, --parsemode PARSEMODE
FloScript parsing mode.
-U USERNAME, --username USERNAME
Username.
-P PASSWORD, --password PASSWORD
Password.
-S [STATISTICS], --statistics [STATISTICS]
Profile and compute performance statistics. Put
statistics into file path given by optional argument.
Default statistics file path is
/tmp/ioflo/profile/NAME.

Example:

Put the following into the file box1.flo


#example mission box1.flo
house box1
framer vehiclesim be active first vehicle_run
frame vehicle_run
do simulator motion uuv
framer mission be active first northleg
frame northleg
set elapsed with 20.0
set heading with 0.0
set depth with 5.0
set speed with 2.5
go next if elapsed >= goal
frame eastleg
set heading with 90.0
go next if elapsed >= goal
frame southleg
set heading with 180.0
go next if elapsed >= goal
frame westleg
set heading with 270.0
go next if elapsed >= goal
frame mission_stop
bid stop vehiclesim
bid stop autopilot
bid stop me
framer autopilot be active first autopilot_run
frame autopilot_run
do controller pid speed
do controller pid heading
do controller pid depth
do controller pid pitch

To run

$ ioflo -v terse -f box1.flo

Something like this should print on the console.

----------------------
Building ...
Building Houses for Skedder Skedder ...
Created house box1. Assigning registries, creating instances ...
Built house box1 with meta:
plan: Share {'value': 'Test'}
version: Share {'value': '0.7.2'}
platform: Share {'os': 'unix', 'processor': 'intel'}
period: Share {'value': 0.125}
real: Share {'value': False}
filepath: Share {'value': 'box1.flo'}
mode: Share {'value': []}
behaviors: Share {'value': []}
credentials: Share {'username': '', 'password': ''}
name: Share {'value': 'box1'}
Warning: Nonexistent goal share goal.heading ... creating anyway
Warning: Transfer into non-existent field 'value'in share goal.heading ... creating anyway
Warning: Nonexistent goal share goal.depth ... creating anyway
Warning: Transfer into non-existent field 'value'in share goal.depth ... creating anyway
Warning: Nonexistent goal share goal.speed ... creating anyway
Warning: Transfer into non-existent field 'value'in share goal.speed ... creating anyway
Ordering taskable taskers for house box1
Resolving house box1
Resolving framer vehiclesim
Resolving framer mission
Resolving framer autopilot
Tracing outlines for house box1
Tracing outlines for framer vehiclesim
Tracing outlines for framer mission
Tracing outlines for framer autopilot
Starting mission from file box1.flo...
Starting Framer vehiclesim ...
To: vehiclesim<<vehicle_run> at 0.0 Starting Framer mission ...To: mission<<northleg> at 0.0 Starting Framer autopilot ...To: autopilot<<autopilot_run> at 0.0To: mission<<eastleg> at 20.0 Via: northleg (go next if elapsed >= goal) From: <northleg> after 20.000To: mission<<southleg> at 40.0 Via: eastleg (go next if elapsed >= goal) From: <eastleg> after 20.000To: mission<<westleg> at 60.0 Via: southleg (go next if elapsed >= goal) From: <southleg> after 20.000To: mission<<mission_stop> at 80.0 Via: westleg (go next if elapsed >= goal) From: <westleg> after 20.000 Stopping autopilot in autopilot_run at 80.000 Stopping vehiclesim in vehicle_run at 80.125 Stopping mission in mission_stop at 80.125No running or started taskers. Shutting down skedder ...Total elapsed real time = 0.2099Aborting all ready taskers ... Aborting vehiclesim at 80.125 Tasker 'vehiclesim' aborted Aborting mission at 80.125 Tasker 'mission' aborted Aborting autopilot at 80.125 Tasker 'autopilot' aborted----------------------

Documentation

github

https://github.com/ioflo/ioflo_manuals

License

APACHE 2.0

Supported Python Versions

Python 3.7.4 +

About

Automated Reasoning Engine and Flow Based Programming Framework

Resources

Stars

156 stars

Watchers

17 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Logo

#Ioflo

##Enabling The Programmable World

http://ioflo.com

Getting Started

Installation

$ pip install ioflo

on OS X

$ sudo pip install ioflo

Command Line

$ ioflo -h

usage: ioflo [-h] [-V] [-v VERBOSE] [-c CONSOLE] [-p PERIOD] [-r] [-R]
[-n NAME] -f FILENAME [-b [BEHAVIORS [BEHAVIORS ...]]]
[-m PARSEMODE] [-U USERNAME] [-P PASSWORD] [-S [STATISTICS]]
Runs ioflo. Example: ioflo -f filename -p period -v level -r -h -b
'mybehaviors.py'
optional arguments:
-h, --help show this help message and exit
-V, --version Prints out version of ioflo.
-v VERBOSE, --verbose VERBOSE
Verbosity level.
-c CONSOLE, --console CONSOLE
File path name to console log file.
-p PERIOD, --period PERIOD
Period per skedder run in seconds.
-r, --realtime Run skedder at realtime.
-R, --retrograde Shift skedder timers when retrograde clock detected.
-n NAME, --name NAME Skedder name.
-f FILENAME, --filename FILENAME
File path to FloScript file.
-b [BEHAVIORS [BEHAVIORS ...]], --behaviors [BEHAVIORS [BEHAVIORS ...]]
Module name strings to external behavior packages.
-m PARSEMODE, --parsemode PARSEMODE
FloScript parsing mode.
-U USERNAME, --username USERNAME
Username.
-P PASSWORD, --password PASSWORD
Password.
-S [STATISTICS], --statistics [STATISTICS]
Profile and compute performance statistics. Put
statistics into file path given by optional argument.
Default statistics file path is
/tmp/ioflo/profile/NAME.

Example:

Put the following into the file box1.flo


#example mission box1.flo
house box1
framer vehiclesim be active first vehicle_run
frame vehicle_run
do simulator motion uuv
framer mission be active first northleg
frame northleg
set elapsed with 20.0
set heading with 0.0
set depth with 5.0
set speed with 2.5
go next if elapsed >= goal
frame eastleg
set heading with 90.0
go next if elapsed >= goal
frame southleg
set heading with 180.0
go next if elapsed >= goal
frame westleg
set heading with 270.0
go next if elapsed >= goal
frame mission_stop
bid stop vehiclesim
bid stop autopilot
bid stop me
framer autopilot be active first autopilot_run
frame autopilot_run
do controller pid speed
do controller pid heading
do controller pid depth
do controller pid pitch

To run

$ ioflo -v terse -f box1.flo

Something like this should print on the console.

----------------------
Building ...
Building Houses for Skedder Skedder ...
Created house box1. Assigning registries, creating instances ...
Built house box1 with meta:
plan: Share {'value': 'Test'}
version: Share {'value': '0.7.2'}
platform: Share {'os': 'unix', 'processor': 'intel'}
period: Share {'value': 0.125}
real: Share {'value': False}
filepath: Share {'value': 'box1.flo'}
mode: Share {'value': []}
behaviors: Share {'value': []}
credentials: Share {'username': '', 'password': ''}
name: Share {'value': 'box1'}
Warning: Nonexistent goal share goal.heading ... creating anyway
Warning: Transfer into non-existent field 'value'in share goal.heading ... creating anyway
Warning: Nonexistent goal share goal.depth ... creating anyway
Warning: Transfer into non-existent field 'value'in share goal.depth ... creating anyway
Warning: Nonexistent goal share goal.speed ... creating anyway
Warning: Transfer into non-existent field 'value'in share goal.speed ... creating anyway
Ordering taskable taskers for house box1
Resolving house box1
Resolving framer vehiclesim
Resolving framer mission
Resolving framer autopilot
Tracing outlines for house box1
Tracing outlines for framer vehiclesim
Tracing outlines for framer mission
Tracing outlines for framer autopilot
Starting mission from file box1.flo...
Starting Framer vehiclesim ...
To: vehiclesim<<vehicle_run> at 0.0 Starting Framer mission ...To: mission<<northleg> at 0.0 Starting Framer autopilot ...To: autopilot<<autopilot_run> at 0.0To: mission<<eastleg> at 20.0 Via: northleg (go next if elapsed >= goal) From: <northleg> after 20.000To: mission<<southleg> at 40.0 Via: eastleg (go next if elapsed >= goal) From: <eastleg> after 20.000To: mission<<westleg> at 60.0 Via: southleg (go next if elapsed >= goal) From: <southleg> after 20.000To: mission<<mission_stop> at 80.0 Via: westleg (go next if elapsed >= goal) From: <westleg> after 20.000 Stopping autopilot in autopilot_run at 80.000 Stopping vehiclesim in vehicle_run at 80.125 Stopping mission in mission_stop at 80.125No running or started taskers. Shutting down skedder ...Total elapsed real time = 0.2099Aborting all ready taskers ... Aborting vehiclesim at 80.125 Tasker 'vehiclesim' aborted Aborting mission at 80.125 Tasker 'mission' aborted Aborting autopilot at 80.125 Tasker 'autopilot' aborted----------------------

Documentation

github

https://github.com/ioflo/ioflo_manuals

License

APACHE 2.0

Supported Python Versions

Python 3.7.4 +

About

Automated Reasoning Engine and Flow Based Programming Framework

Resources

Stars

156 stars

Watchers

17 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Logo

#Ioflo

##Enabling The Programmable World

http://ioflo.com

Getting Started

Installation

$ pip install ioflo

on OS X

$ sudo pip install ioflo

Command Line

$ ioflo -h

usage: ioflo [-h] [-V] [-v VERBOSE] [-c CONSOLE] [-p PERIOD] [-r] [-R]
[-n NAME] -f FILENAME [-b [BEHAVIORS [BEHAVIORS ...]]]
[-m PARSEMODE] [-U USERNAME] [-P PASSWORD] [-S [STATISTICS]]
Runs ioflo. Example: ioflo -f filename -p period -v level -r -h -b
'mybehaviors.py'
optional arguments:
-h, --help show this help message and exit
-V, --version Prints out version of ioflo.
-v VERBOSE, --verbose VERBOSE
Verbosity level.
-c CONSOLE, --console CONSOLE
File path name to console log file.
-p PERIOD, --period PERIOD
Period per skedder run in seconds.
-r, --realtime Run skedder at realtime.
-R, --retrograde Shift skedder timers when retrograde clock detected.
-n NAME, --name NAME Skedder name.
-f FILENAME, --filename FILENAME
File path to FloScript file.
-b [BEHAVIORS [BEHAVIORS ...]], --behaviors [BEHAVIORS [BEHAVIORS ...]]
Module name strings to external behavior packages.
-m PARSEMODE, --parsemode PARSEMODE
FloScript parsing mode.
-U USERNAME, --username USERNAME
Username.
-P PASSWORD, --password PASSWORD
Password.
-S [STATISTICS], --statistics [STATISTICS]
Profile and compute performance statistics. Put
statistics into file path given by optional argument.
Default statistics file path is
/tmp/ioflo/profile/NAME.

Example:

Put the following into the file box1.flo


#example mission box1.flo
house box1
framer vehiclesim be active first vehicle_run
frame vehicle_run
do simulator motion uuv
framer mission be active first northleg
frame northleg
set elapsed with 20.0
set heading with 0.0
set depth with 5.0
set speed with 2.5
go next if elapsed >= goal
frame eastleg
set heading with 90.0
go next if elapsed >= goal
frame southleg
set heading with 180.0
go next if elapsed >= goal
frame westleg
set heading with 270.0
go next if elapsed >= goal
frame mission_stop
bid stop vehiclesim
bid stop autopilot
bid stop me
framer autopilot be active first autopilot_run
frame autopilot_run
do controller pid speed
do controller pid heading
do controller pid depth
do controller pid pitch

To run

$ ioflo -v terse -f box1.flo

Something like this should print on the console.

----------------------
Building ...
Building Houses for Skedder Skedder ...
Created house box1. Assigning registries, creating instances ...
Built house box1 with meta:
plan: Share {'value': 'Test'}
version: Share {'value': '0.7.2'}
platform: Share {'os': 'unix', 'processor': 'intel'}
period: Share {'value': 0.125}
real: Share {'value': False}
filepath: Share {'value': 'box1.flo'}
mode: Share {'value': []}
behaviors: Share {'value': []}
credentials: Share {'username': '', 'password': ''}
name: Share {'value': 'box1'}
Warning: Nonexistent goal share goal.heading ... creating anyway
Warning: Transfer into non-existent field 'value'in share goal.heading ... creating anyway
Warning: Nonexistent goal share goal.depth ... creating anyway
Warning: Transfer into non-existent field 'value'in share goal.depth ... creating anyway
Warning: Nonexistent goal share goal.speed ... creating anyway
Warning: Transfer into non-existent field 'value'in share goal.speed ... creating anyway
Ordering taskable taskers for house box1
Resolving house box1
Resolving framer vehiclesim
Resolving framer mission
Resolving framer autopilot
Tracing outlines for house box1
Tracing outlines for framer vehiclesim
Tracing outlines for framer mission
Tracing outlines for framer autopilot
Starting mission from file box1.flo...
Starting Framer vehiclesim ...
To: vehiclesim<<vehicle_run> at 0.0 Starting Framer mission ...To: mission<<northleg> at 0.0 Starting Framer autopilot ...To: autopilot<<autopilot_run> at 0.0To: mission<<eastleg> at 20.0 Via: northleg (go next if elapsed >= goal) From: <northleg> after 20.000To: mission<<southleg> at 40.0 Via: eastleg (go next if elapsed >= goal) From: <eastleg> after 20.000To: mission<<westleg> at 60.0 Via: southleg (go next if elapsed >= goal) From: <southleg> after 20.000To: mission<<mission_stop> at 80.0 Via: westleg (go next if elapsed >= goal) From: <westleg> after 20.000 Stopping autopilot in autopilot_run at 80.000 Stopping vehiclesim in vehicle_run at 80.125 Stopping mission in mission_stop at 80.125No running or started taskers. Shutting down skedder ...Total elapsed real time = 0.2099Aborting all ready taskers ... Aborting vehiclesim at 80.125 Tasker 'vehiclesim' aborted Aborting mission at 80.125 Tasker 'mission' aborted Aborting autopilot at 80.125 Tasker 'autopilot' aborted----------------------

Documentation

github

https://github.com/ioflo/ioflo_manuals

License

APACHE 2.0

Supported Python Versions

Python 3.7.4 +

About

Automated Reasoning Engine and Flow Based Programming Framework

Resources

Stars

156 stars

Watchers

17 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Logo

#Ioflo

##Enabling The Programmable World

http://ioflo.com

Getting Started

Installation

$ pip install ioflo

on OS X

$ sudo pip install ioflo

Command Line

$ ioflo -h

usage: ioflo [-h] [-V] [-v VERBOSE] [-c CONSOLE] [-p PERIOD] [-r] [-R]
[-n NAME] -f FILENAME [-b [BEHAVIORS [BEHAVIORS ...]]]
[-m PARSEMODE] [-U USERNAME] [-P PASSWORD] [-S [STATISTICS]]
Runs ioflo. Example: ioflo -f filename -p period -v level -r -h -b
'mybehaviors.py'
optional arguments:
-h, --help show this help message and exit
-V, --version Prints out version of ioflo.
-v VERBOSE, --verbose VERBOSE
Verbosity level.
-c CONSOLE, --console CONSOLE
File path name to console log file.
-p PERIOD, --period PERIOD
Period per skedder run in seconds.
-r, --realtime Run skedder at realtime.
-R, --retrograde Shift skedder timers when retrograde clock detected.
-n NAME, --name NAME Skedder name.
-f FILENAME, --filename FILENAME
File path to FloScript file.
-b [BEHAVIORS [BEHAVIORS ...]], --behaviors [BEHAVIORS [BEHAVIORS ...]]
Module name strings to external behavior packages.
-m PARSEMODE, --parsemode PARSEMODE
FloScript parsing mode.
-U USERNAME, --username USERNAME
Username.
-P PASSWORD, --password PASSWORD
Password.
-S [STATISTICS], --statistics [STATISTICS]
Profile and compute performance statistics. Put
statistics into file path given by optional argument.
Default statistics file path is
/tmp/ioflo/profile/NAME.

Example:

Put the following into the file box1.flo


#example mission box1.flo
house box1
framer vehiclesim be active first vehicle_run
frame vehicle_run
do simulator motion uuv
framer mission be active first northleg
frame northleg
set elapsed with 20.0
set heading with 0.0
set depth with 5.0
set speed with 2.5
go next if elapsed >= goal
frame eastleg
set heading with 90.0
go next if elapsed >= goal
frame southleg
set heading with 180.0
go next if elapsed >= goal
frame westleg
set heading with 270.0
go next if elapsed >= goal
frame mission_stop
bid stop vehiclesim
bid stop autopilot
bid stop me
framer autopilot be active first autopilot_run
frame autopilot_run
do controller pid speed
do controller pid heading
do controller pid depth
do controller pid pitch

To run

$ ioflo -v terse -f box1.flo

Something like this should print on the console.

----------------------
Building ...
Building Houses for Skedder Skedder ...
Created house box1. Assigning registries, creating instances ...
Built house box1 with meta:
plan: Share {'value': 'Test'}
version: Share {'value': '0.7.2'}
platform: Share {'os': 'unix', 'processor': 'intel'}
period: Share {'value': 0.125}
real: Share {'value': False}
filepath: Share {'value': 'box1.flo'}
mode: Share {'value': []}
behaviors: Share {'value': []}
credentials: Share {'username': '', 'password': ''}
name: Share {'value': 'box1'}
Warning: Nonexistent goal share goal.heading ... creating anyway
Warning: Transfer into non-existent field 'value'in share goal.heading ... creating anyway
Warning: Nonexistent goal share goal.depth ... creating anyway
Warning: Transfer into non-existent field 'value'in share goal.depth ... creating anyway
Warning: Nonexistent goal share goal.speed ... creating anyway
Warning: Transfer into non-existent field 'value'in share goal.speed ... creating anyway
Ordering taskable taskers for house box1
Resolving house box1
Resolving framer vehiclesim
Resolving framer mission
Resolving framer autopilot
Tracing outlines for house box1
Tracing outlines for framer vehiclesim
Tracing outlines for framer mission
Tracing outlines for framer autopilot
Starting mission from file box1.flo...
Starting Framer vehiclesim ...
To: vehiclesim<<vehicle_run> at 0.0 Starting Framer mission ...To: mission<<northleg> at 0.0 Starting Framer autopilot ...To: autopilot<<autopilot_run> at 0.0To: mission<<eastleg> at 20.0 Via: northleg (go next if elapsed >= goal) From: <northleg> after 20.000To: mission<<southleg> at 40.0 Via: eastleg (go next if elapsed >= goal) From: <eastleg> after 20.000To: mission<<westleg> at 60.0 Via: southleg (go next if elapsed >= goal) From: <southleg> after 20.000To: mission<<mission_stop> at 80.0 Via: westleg (go next if elapsed >= goal) From: <westleg> after 20.000 Stopping autopilot in autopilot_run at 80.000 Stopping vehiclesim in vehicle_run at 80.125 Stopping mission in mission_stop at 80.125No running or started taskers. Shutting down skedder ...Total elapsed real time = 0.2099Aborting all ready taskers ... Aborting vehiclesim at 80.125 Tasker 'vehiclesim' aborted Aborting mission at 80.125 Tasker 'mission' aborted Aborting autopilot at 80.125 Tasker 'autopilot' aborted----------------------

Documentation

github

https://github.com/ioflo/ioflo_manuals

License

APACHE 2.0

Supported Python Versions

Python 3.7.4 +

About

Automated Reasoning Engine and Flow Based Programming Framework

Resources

Stars

156 stars

Watchers

17 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Logo

#Ioflo

##Enabling The Programmable World

http://ioflo.com

Getting Started

Installation

$ pip install ioflo

on OS X

$ sudo pip install ioflo

Command Line

$ ioflo -h

usage: ioflo [-h] [-V] [-v VERBOSE] [-c CONSOLE] [-p PERIOD] [-r] [-R]
[-n NAME] -f FILENAME [-b [BEHAVIORS [BEHAVIORS ...]]]
[-m PARSEMODE] [-U USERNAME] [-P PASSWORD] [-S [STATISTICS]]
Runs ioflo. Example: ioflo -f filename -p period -v level -r -h -b
'mybehaviors.py'
optional arguments:
-h, --help show this help message and exit
-V, --version Prints out version of ioflo.
-v VERBOSE, --verbose VERBOSE
Verbosity level.
-c CONSOLE, --console CONSOLE
File path name to console log file.
-p PERIOD, --period PERIOD
Period per skedder run in seconds.
-r, --realtime Run skedder at realtime.
-R, --retrograde Shift skedder timers when retrograde clock detected.
-n NAME, --name NAME Skedder name.
-f FILENAME, --filename FILENAME
File path to FloScript file.
-b [BEHAVIORS [BEHAVIORS ...]], --behaviors [BEHAVIORS [BEHAVIORS ...]]
Module name strings to external behavior packages.
-m PARSEMODE, --parsemode PARSEMODE
FloScript parsing mode.
-U USERNAME, --username USERNAME
Username.
-P PASSWORD, --password PASSWORD
Password.
-S [STATISTICS], --statistics [STATISTICS]
Profile and compute performance statistics. Put
statistics into file path given by optional argument.
Default statistics file path is
/tmp/ioflo/profile/NAME.

Example:

Put the following into the file box1.flo


#example mission box1.flo
house box1
framer vehiclesim be active first vehicle_run
frame vehicle_run
do simulator motion uuv
framer mission be active first northleg
frame northleg
set elapsed with 20.0
set heading with 0.0
set depth with 5.0
set speed with 2.5
go next if elapsed >= goal
frame eastleg
set heading with 90.0
go next if elapsed >= goal
frame southleg
set heading with 180.0
go next if elapsed >= goal
frame westleg
set heading with 270.0
go next if elapsed >= goal
frame mission_stop
bid stop vehiclesim
bid stop autopilot
bid stop me
framer autopilot be active first autopilot_run
frame autopilot_run
do controller pid speed
do controller pid heading
do controller pid depth
do controller pid pitch

To run

$ ioflo -v terse -f box1.flo

Something like this should print on the console.

----------------------
Building ...
Building Houses for Skedder Skedder ...
Created house box1. Assigning registries, creating instances ...
Built house box1 with meta:
plan: Share {'value': 'Test'}
version: Share {'value': '0.7.2'}
platform: Share {'os': 'unix', 'processor': 'intel'}
period: Share {'value': 0.125}
real: Share {'value': False}
filepath: Share {'value': 'box1.flo'}
mode: Share {'value': []}
behaviors: Share {'value': []}
credentials: Share {'username': '', 'password': ''}
name: Share {'value': 'box1'}
Warning: Nonexistent goal share goal.heading ... creating anyway
Warning: Transfer into non-existent field 'value'in share goal.heading ... creating anyway
Warning: Nonexistent goal share goal.depth ... creating anyway
Warning: Transfer into non-existent field 'value'in share goal.depth ... creating anyway
Warning: Nonexistent goal share goal.speed ... creating anyway
Warning: Transfer into non-existent field 'value'in share goal.speed ... creating anyway
Ordering taskable taskers for house box1
Resolving house box1
Resolving framer vehiclesim
Resolving framer mission
Resolving framer autopilot
Tracing outlines for house box1
Tracing outlines for framer vehiclesim
Tracing outlines for framer mission
Tracing outlines for framer autopilot
Starting mission from file box1.flo...
Starting Framer vehiclesim ...
To: vehiclesim<<vehicle_run> at 0.0 Starting Framer mission ...To: mission<<northleg> at 0.0 Starting Framer autopilot ...To: autopilot<<autopilot_run> at 0.0To: mission<<eastleg> at 20.0 Via: northleg (go next if elapsed >= goal) From: <northleg> after 20.000To: mission<<southleg> at 40.0 Via: eastleg (go next if elapsed >= goal) From: <eastleg> after 20.000To: mission<<westleg> at 60.0 Via: southleg (go next if elapsed >= goal) From: <southleg> after 20.000To: mission<<mission_stop> at 80.0 Via: westleg (go next if elapsed >= goal) From: <westleg> after 20.000 Stopping autopilot in autopilot_run at 80.000 Stopping vehiclesim in vehicle_run at 80.125 Stopping mission in mission_stop at 80.125No running or started taskers. Shutting down skedder ...Total elapsed real time = 0.2099Aborting all ready taskers ... Aborting vehiclesim at 80.125 Tasker 'vehiclesim' aborted Aborting mission at 80.125 Tasker 'mission' aborted Aborting autopilot at 80.125 Tasker 'autopilot' aborted----------------------

Documentation

github

https://github.com/ioflo/ioflo_manuals

License

APACHE 2.0

Supported Python Versions

Python 3.7.4 +

About

Automated Reasoning Engine and Flow Based Programming Framework

Resources

Stars

156 stars

Watchers

17 watching

Forks

Releases

Packages

Used by

Contributors

Languages