Inital commit
This commit is contained in:
122
.gitignore
vendored
Normal file
122
.gitignore
vendored
Normal file
@@ -0,0 +1,122 @@
|
||||
# Created by .ignore support plugin (hsz.mobi)
|
||||
### Node template
|
||||
# Logs
|
||||
logs
|
||||
*.log
|
||||
npm-debug.log*
|
||||
|
||||
# Runtime data
|
||||
pids
|
||||
*.pid
|
||||
*.seed
|
||||
|
||||
# Directory for instrumented libs generated by jscoverage/JSCover
|
||||
lib-cov
|
||||
|
||||
# Coverage directory used by tools like istanbul
|
||||
coverage
|
||||
|
||||
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
|
||||
.grunt
|
||||
|
||||
# node-waf configuration
|
||||
.lock-wscript
|
||||
|
||||
# Compiled binary addons (http://nodejs.org/api/addons.html)
|
||||
build/Release
|
||||
|
||||
# Dependency directory
|
||||
# https://docs.npmjs.com/misc/faq#should-i-check-my-node-modules-folder-into-git
|
||||
node_modules
|
||||
### JetBrains template
|
||||
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio
|
||||
|
||||
*.iml
|
||||
|
||||
## Directory-based project format:
|
||||
.idea/
|
||||
# if you remove the above rule, at least ignore the following:
|
||||
|
||||
# User-specific stuff:
|
||||
# .idea/workspace.xml
|
||||
# .idea/tasks.xml
|
||||
# .idea/dictionaries
|
||||
|
||||
# Sensitive or high-churn files:
|
||||
# .idea/dataSources.ids
|
||||
# .idea/dataSources.xml
|
||||
# .idea/sqlDataSources.xml
|
||||
# .idea/dynamic.xml
|
||||
# .idea/uiDesigner.xml
|
||||
|
||||
# Gradle:
|
||||
# .idea/gradle.xml
|
||||
# .idea/libraries
|
||||
|
||||
# Mongo Explorer plugin:
|
||||
# .idea/mongoSettings.xml
|
||||
|
||||
## File-based project format:
|
||||
*.ipr
|
||||
*.iws
|
||||
|
||||
## Plugin-specific files:
|
||||
|
||||
# IntelliJ
|
||||
/out/
|
||||
|
||||
# mpeltonen/sbt-idea plugin
|
||||
.idea_modules/
|
||||
|
||||
# JIRA plugin
|
||||
atlassian-ide-plugin.xml
|
||||
|
||||
# Crashlytics plugin (for Android Studio and IntelliJ)
|
||||
com_crashlytics_export_strings.xml
|
||||
crashlytics.properties
|
||||
crashlytics-build.properties
|
||||
### Windows template
|
||||
# Windows image file caches
|
||||
Thumbs.db
|
||||
ehthumbs.db
|
||||
|
||||
# Folder config file
|
||||
Desktop.ini
|
||||
|
||||
# Recycle Bin used on file shares
|
||||
$RECYCLE.BIN/
|
||||
|
||||
# Windows Installer files
|
||||
*.cab
|
||||
*.msi
|
||||
*.msm
|
||||
*.msp
|
||||
|
||||
# Windows shortcuts
|
||||
*.lnk
|
||||
### OSX template
|
||||
.DS_Store
|
||||
.AppleDouble
|
||||
.LSOverride
|
||||
|
||||
# Icon must end with two \r
|
||||
Icon
|
||||
|
||||
# Thumbnails
|
||||
._*
|
||||
|
||||
# Files that might appear in the root of a volume
|
||||
.DocumentRevisions-V100
|
||||
.fseventsd
|
||||
.Spotlight-V100
|
||||
.TemporaryItems
|
||||
.Trashes
|
||||
.VolumeIcon.icns
|
||||
|
||||
# Directories potentially created on remote AFP share
|
||||
.AppleDB
|
||||
.AppleDesktop
|
||||
Network Trash Folder
|
||||
Temporary Items
|
||||
.apdisk
|
||||
|
||||
12
LICENSE
Normal file
12
LICENSE
Normal file
@@ -0,0 +1,12 @@
|
||||
Copyright (c) 2016, Alexander Pivovarov
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any purpose
|
||||
with or without fee is hereby granted, provided that the above copyright notice and
|
||||
this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD
|
||||
TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
|
||||
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
|
||||
AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
|
||||
WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
56
mikrotik.html
Normal file
56
mikrotik.html
Normal file
@@ -0,0 +1,56 @@
|
||||
<script type="text/javascript">
|
||||
RED.nodes.registerType('mikrotik',{
|
||||
category: 'function',
|
||||
color: '#E9967A',
|
||||
defaults: {
|
||||
name: {value:""},
|
||||
ip : {value: ""},
|
||||
action: {value:"0"}
|
||||
},
|
||||
credentials: {
|
||||
login: {type:"text"},
|
||||
pass: {type:"password"}
|
||||
},
|
||||
inputs:1,
|
||||
outputs:1,
|
||||
icon: "feed.png",
|
||||
label: function() {
|
||||
return this.name||"mikrotik";
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<script type="text/x-red" data-template-name="mikrotik">
|
||||
<div class="form-row">
|
||||
<label for="node-input-ip"><i class="icon-globe"></i> IP</label>
|
||||
<input type="text" id="node-input-ip" placeholder="xxx.xxx.xxx.xxx">
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<label for="node-input-login"><i class="icon-user"></i> Login</label>
|
||||
<input type="text" id="node-input-login" placeholder="login">
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<label for="node-input-pass"><i class="icon-tag"></i> Pass</label>
|
||||
<input type="password" id="node-input-pass" placeholder="password">
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<label for="node-input-action"><i class="icon-tasks"></i> Action</label>
|
||||
<select id="node-input-action" placeholder="action">
|
||||
<option value="0">Log</option>
|
||||
<option value="1">System resources</option>
|
||||
<option value="2">Connected WiFi</option>
|
||||
<option value="3">Reboot</option>
|
||||
<option value="9">Raw (use msg.payload)</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
|
||||
<input type="text" id="node-input-name" class="paletteLabel" placeholder="Name">
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script type="text/x-red" data-help-name="mikrotik">
|
||||
<p>A node that work with Mikrotik WiFi routers.</p>
|
||||
</script>
|
||||
80
mikrotik.js
Normal file
80
mikrotik.js
Normal file
@@ -0,0 +1,80 @@
|
||||
/**
|
||||
* Created by Bladerunner on 11/03/16.
|
||||
*/
|
||||
var mikrotik = require('mikronode');
|
||||
|
||||
module.exports = function(RED) {
|
||||
function NodeMikrotik(config) {
|
||||
RED.nodes.createNode(this,config);
|
||||
this.action = config.action;
|
||||
this.ip = config.ip;
|
||||
this.action = config.action;
|
||||
|
||||
var node = this;
|
||||
var ip = node.ip;
|
||||
var login = node.credentials.login;
|
||||
var pass = node.credentials.pass;
|
||||
var action = '';
|
||||
|
||||
switch (parseInt(node.action)) {
|
||||
case 0:
|
||||
action = '/log/print';
|
||||
break;
|
||||
case 1:
|
||||
action = '/system/resource/print';
|
||||
break;
|
||||
case 2:
|
||||
action = '/interface/wireless/registration-table/print';
|
||||
break;
|
||||
case 3:
|
||||
action = '/system/reboot';
|
||||
break;
|
||||
case 9:
|
||||
action = msg.payload;
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
|
||||
this.on('input', function(msg) {
|
||||
var connection = new mikrotik(ip, login, pass);
|
||||
connection.connect(function(conn) {
|
||||
|
||||
var chan = conn.openChannel();
|
||||
|
||||
chan.write(action, function() {
|
||||
chan.on('done',function(data) {
|
||||
|
||||
var parsed = mikrotik.parseItems(data);
|
||||
|
||||
var pl = [];
|
||||
parsed.forEach(function(item) {
|
||||
pl.push(item);
|
||||
});
|
||||
|
||||
msg.payload = pl;
|
||||
node.send(msg);
|
||||
|
||||
chan.close();
|
||||
conn.close();
|
||||
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
RED.nodes.registerType("mikrotik", NodeMikrotik, {
|
||||
credentials: {
|
||||
login: {type:"text"},
|
||||
pass: {type:"password"}
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
31
package.json
Normal file
31
package.json
Normal file
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"name": "node-red-contrib-mikrotik",
|
||||
"version": "0.0.1",
|
||||
"description": "Node to work with Mikrotik WiFi router",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"author": "Alexander Pivovarov <pivovarov@gmail.com>",
|
||||
"node-red": {
|
||||
"nodes": {
|
||||
"mikrotik": "mikrotik.js"
|
||||
}
|
||||
},
|
||||
"keywords": [
|
||||
"node-red"
|
||||
],
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"mikronode": "^0.3.3"
|
||||
},
|
||||
"main": "mikrotik.js",
|
||||
"devDependencies": {},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/bladerunner2020/node-red-contrib-mikrotik.git"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/bladerunner2020/node-red-contrib-mikrotik/issues"
|
||||
},
|
||||
"homepage": "https://github.com/bladerunner2020/node-red-contrib-mikrotik#readme"
|
||||
}
|
||||
15
readme.md
Normal file
15
readme.md
Normal file
@@ -0,0 +1,15 @@
|
||||
node-red-contrib-mikrotik
|
||||
========================
|
||||
|
||||
Install
|
||||
-------
|
||||
Run command on Node-RED installation directory
|
||||
|
||||
npm install node-red-contrib-mikrotik
|
||||
|
||||
Config
|
||||
-------
|
||||
|
||||
<p>A <a href="http://nodered.org" target="_new">Node-RED</a> node that provides API for Mikrotik WiFi routers.</p>
|
||||
This is an alfa verion. Available actions: log, resources, wifi, connections, reboot, raw.
|
||||
|
||||
Reference in New Issue
Block a user