diff --git a/html/images/logos/tyconsystems.png b/html/images/logos/tyconsystems.png
new file mode 100644
index 0000000000..b0be6e6cbb
Binary files /dev/null and b/html/images/logos/tyconsystems.png differ
diff --git a/html/images/os/tyconsystems.png b/html/images/os/tyconsystems.png
new file mode 100644
index 0000000000..756465474d
Binary files /dev/null and b/html/images/os/tyconsystems.png differ
diff --git a/includes/definitions/tpdin.yaml b/includes/definitions/tpdin.yaml
new file mode 100644
index 0000000000..b05423031b
--- /dev/null
+++ b/includes/definitions/tpdin.yaml
@@ -0,0 +1,13 @@
+os: tpdin
+text: 'Tycon Systems TPDIN'
+type: appliance
+icon: tyconsystems
+over:
+ - { graph: sensor_voltage, text: 'Device Voltage' }
+ - { graph: sensor_current, text: 'Device Current' }
+ - { graph: sensor_temperature, text: 'Device Temperature' }
+mib_dir:
+ - tycon
+discovery:
+ - sysObjectId:
+ - .1.3.6.1.4.1.45621.2
\ No newline at end of file
diff --git a/includes/discovery/sensors/current/tpdin.inc.php b/includes/discovery/sensors/current/tpdin.inc.php
new file mode 100644
index 0000000000..4d479a6110
--- /dev/null
+++ b/includes/discovery/sensors/current/tpdin.inc.php
@@ -0,0 +1,59 @@
+.
+ *
+ * @package LibreNMS
+ * @link http://librenms.org
+ * @copyright 2017 Neil Lathwood
+ * @author Neil Lathwood
+ */
+
+$tpdin_oids = array(
+ array(
+ 'oid' => '.1.3.6.1.4.1.45621.2.2.9.0',
+ 'index' => 'current1',
+ 'descr' => 'Current 1',
+ 'current' => $pre_cache['tpdin_monitor'][0]['current1'],
+ ),
+ array(
+ 'oid' => '.1.3.6.1.4.1.45621.2.2.10.0',
+ 'index' => 'current2',
+ 'descr' => 'Current 2',
+ 'current' => $pre_cache['tpdin_monitor'][0]['current2'],
+ ),
+ array(
+ 'oid' => '.1.3.6.1.4.1.45621.2.2.11.0',
+ 'index' => 'current3',
+ 'descr' => 'Current 3',
+ 'current' => $pre_cache['tpdin_monitor'][0]['current3'],
+ ),
+ array(
+ 'oid' => '.1.3.6.1.4.1.45621.2.2.12.0',
+ 'index' => 'current4',
+ 'descr' => 'Current 4',
+ 'current' => $pre_cache['tpdin_monitor'][0]['current4'],
+ ),
+);
+
+foreach ($tpdin_oids as $data) {
+ if ($data['current'] > 0) {
+ discover_sensor($valid['sensor'], 'current', $device, $data['oid'], $data['index'], $device['os'], $data['descr'], 10, '1', null, null, null, null, $data['current']);
+ }
+}
+
+unset($tpdin_oids);
diff --git a/includes/discovery/sensors/pre-cache/tpdin.inc.php b/includes/discovery/sensors/pre-cache/tpdin.inc.php
new file mode 100644
index 0000000000..026db312cb
--- /dev/null
+++ b/includes/discovery/sensors/pre-cache/tpdin.inc.php
@@ -0,0 +1,27 @@
+.
+ *
+ * @package LibreNMS
+ * @link http://librenms.org
+ * @copyright 2017 Neil Lathwood
+ * @author Neil Lathwood
+ */
+
+echo 'TPDIN2-MIB::monitor ';
+$pre_cache['tpdin_monitor'] = snmpwalk_cache_oid($device, 'monitor', array(), 'TPDIN2-MIB');
diff --git a/includes/discovery/sensors/temperature/tpdin.inc.php b/includes/discovery/sensors/temperature/tpdin.inc.php
new file mode 100644
index 0000000000..f269910ff6
--- /dev/null
+++ b/includes/discovery/sensors/temperature/tpdin.inc.php
@@ -0,0 +1,47 @@
+.
+ *
+ * @package LibreNMS
+ * @link http://librenms.org
+ * @copyright 2017 Neil Lathwood
+ * @author Neil Lathwood
+ */
+
+$tpdin_oids = array(
+ array(
+ 'oid' => '.1.3.6.1.4.1.45621.2.2.13.0',
+ 'index' => 'temperature1',
+ 'descr' => 'External Temp',
+ 'current' => $pre_cache['tpdin_monitor'][0]['temperature1'],
+ ),
+ array(
+ 'oid' => '.1.3.6.1.4.1.45621.2.2.14.0',
+ 'index' => 'temperature2',
+ 'descr' => 'Internal Temp',
+ 'current' => $pre_cache['tpdin_monitor'][0]['temperature2'],
+ ),
+);
+
+foreach ($tpdin_oids as $data) {
+ if ($data['current'] > 0) {
+ discover_sensor($valid['sensor'], 'temperature', $device, $data['oid'], $data['index'], $device['os'], $data['descr'], 10, '1', null, null, null, null, $data['current']);
+ }
+}
+
+unset($tpdin_oids);
diff --git a/includes/discovery/sensors/voltage/tpdin.inc.php b/includes/discovery/sensors/voltage/tpdin.inc.php
new file mode 100644
index 0000000000..7737e952bf
--- /dev/null
+++ b/includes/discovery/sensors/voltage/tpdin.inc.php
@@ -0,0 +1,59 @@
+.
+ *
+ * @package LibreNMS
+ * @link http://librenms.org
+ * @copyright 2017 Neil Lathwood
+ * @author Neil Lathwood
+ */
+
+$tpdin_oids = array(
+ array(
+ 'oid' => '.1.3.6.1.4.1.45621.2.2.5.0',
+ 'index' => 'voltage1',
+ 'descr' => 'Voltage 1',
+ 'current' => $pre_cache['tpdin_monitor'][0]['voltage1'],
+ ),
+ array(
+ 'oid' => '.1.3.6.1.4.1.45621.2.2.6.0',
+ 'index' => 'voltage2',
+ 'descr' => 'Voltage 2',
+ 'current' => $pre_cache['tpdin_monitor'][0]['voltage2'],
+ ),
+ array(
+ 'oid' => '.1.3.6.1.4.1.45621.2.2.7.0',
+ 'index' => 'voltage3',
+ 'descr' => 'Voltage 3',
+ 'current' => $pre_cache['tpdin_monitor'][0]['voltage3'],
+ ),
+ array(
+ 'oid' => '.1.3.6.1.4.1.45621.2.2.8.0',
+ 'index' => 'voltage4',
+ 'descr' => 'Voltage 4',
+ 'current' => $pre_cache['tpdin_monitor'][0]['voltage4'],
+ ),
+);
+
+foreach ($tpdin_oids as $data) {
+ if ($data['current'] > 0) {
+ discover_sensor($valid['sensor'], 'voltage', $device, $data['oid'], $data['index'], $device['os'], $data['descr'], 10, '1', null, null, null, null, $data['current']);
+ }
+}
+
+unset($tpdin_oids);
diff --git a/includes/polling/os/tpdin.inc.php b/includes/polling/os/tpdin.inc.php
new file mode 100644
index 0000000000..bef748993e
--- /dev/null
+++ b/includes/polling/os/tpdin.inc.php
@@ -0,0 +1,31 @@
+.
+ *
+ * @package LibreNMS
+ * @link http://librenms.org
+ * @copyright 2017 Neil Lathwood
+ * @author Neil Lathwood
+ */
+
+$tycon_data = snmp_get_multi_oid($device, 'name.0 version.0', '-OUQs', 'TPDIN2-MIB');
+
+$hardware = $tycon_data['name.0'];
+$version = $tycon_data['version.0'];
+
+unset($tycon_data);
diff --git a/mibs/tycon/TPDIN2-MIB b/mibs/tycon/TPDIN2-MIB
new file mode 100644
index 0000000000..fbb1d36b6f
--- /dev/null
+++ b/mibs/tycon/TPDIN2-MIB
@@ -0,0 +1,176 @@
+TPDIN2-MIB DEFINITIONS ::= BEGIN
+
+IMPORTS
+ OBJECT-TYPE, MODULE-IDENTITY, enterprises,
+ Integer32
+ FROM SNMPv2-SMI
+ DisplayString
+ FROM SNMPv2-TC;
+
+tpdin2 MODULE-IDENTITY
+ LAST-UPDATED "201703031251Z"
+ ORGANIZATION
+ "Tycon Systems"
+ CONTACT-INFO
+ "http://www.tyconsystems.com/"
+ DESCRIPTION
+ "TPDIN Monitor Web V2 custom MIB"
+::= { tycon 2 }
+
+-- TPDIN Monitor Web V2
+
+tycon OBJECT IDENTIFIER ::= { enterprises 45621 }
+product OBJECT IDENTIFIER ::= { tpdin2 1 }
+monitor OBJECT IDENTIFIER ::= { tpdin2 2 }
+
+-- product properties
+
+Tenths ::= TEXTUAL-CONVENTION
+ DISPLAY-HINT "d-1"
+ STATUS current
+ DESCRIPTION
+ "tenths"
+ SYNTAX INTEGER (0..10000)
+
+
+name OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Product name."
+ ::= { product 1 }
+
+version OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Product version."
+ ::= { product 2 }
+
+builddate OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Build date."
+ ::= { product 3 }
+
+-- relay properties
+
+relay1 OBJECT-TYPE
+ SYNTAX INTEGER
+ MAX-ACCESS read-write
+ STATUS current
+ DESCRIPTION
+ "Relay 1"
+ ::= { monitor 1 }
+
+relay2 OBJECT-TYPE
+ SYNTAX INTEGER
+ MAX-ACCESS read-write
+ STATUS current
+ DESCRIPTION
+ "Relay 2"
+ ::= { monitor 2 }
+
+relay3 OBJECT-TYPE
+ SYNTAX INTEGER
+ MAX-ACCESS read-write
+ STATUS current
+ DESCRIPTION
+ "Relay 3"
+ ::= { monitor 3 }
+
+relay4 OBJECT-TYPE
+ SYNTAX INTEGER
+ MAX-ACCESS read-write
+ STATUS current
+ DESCRIPTION
+ "Relay 4"
+ ::= { monitor 4 }
+
+-- monitor properties
+
+voltage1 OBJECT-TYPE
+ SYNTAX Tenths
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Voltage 1"
+ ::= { monitor 5 }
+
+voltage2 OBJECT-TYPE
+ SYNTAX Tenths
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Voltage 2"
+ ::= { monitor 6 }
+
+voltage3 OBJECT-TYPE
+ SYNTAX Tenths
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Voltage 3"
+ ::= { monitor 7 }
+
+voltage4 OBJECT-TYPE
+ SYNTAX Tenths
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Voltage 4"
+ ::= { monitor 8 }
+
+current1 OBJECT-TYPE
+ SYNTAX Tenths
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Current 1"
+ ::= { monitor 9 }
+
+current2 OBJECT-TYPE
+ SYNTAX Tenths
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Current 2"
+ ::= { monitor 10 }
+
+current3 OBJECT-TYPE
+ SYNTAX Tenths
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Current 3"
+ ::= { monitor 11 }
+
+current4 OBJECT-TYPE
+ SYNTAX Tenths
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Current 4"
+ ::= { monitor 12 }
+
+temperature1 OBJECT-TYPE
+ SYNTAX Tenths
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "External Temp"
+ ::= { monitor 13 }
+
+temperature2 OBJECT-TYPE
+ SYNTAX Tenths
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Internal Temp"
+ ::= { monitor 14 }
+
+END
diff --git a/tests/OSDiscoveryTest.php b/tests/OSDiscoveryTest.php
index b420fb5a9d..c39a2ab0db 100644
--- a/tests/OSDiscoveryTest.php
+++ b/tests/OSDiscoveryTest.php
@@ -1763,6 +1763,11 @@ class DiscoveryTest extends \PHPUnit_Framework_TestCase
$this->checkOS('tpconductor');
}
+ public function testTpdin()
+ {
+ $this->checkOS('tpdin');
+ }
+
public function testTplink()
{
$this->checkOS('tplink');
diff --git a/tests/snmpsim/tpdin.snmprec b/tests/snmpsim/tpdin.snmprec
new file mode 100644
index 0000000000..abb6144115
--- /dev/null
+++ b/tests/snmpsim/tpdin.snmprec
@@ -0,0 +1,2 @@
+1.3.6.1.2.1.1.1.0|4|TPDIN2
+1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.45621.2