diff --git a/html/images/os/westmountainradio.svg b/html/images/os/westmountainradio.svg
new file mode 100644
index 0000000000..876d1d8889
--- /dev/null
+++ b/html/images/os/westmountainradio.svg
@@ -0,0 +1 @@
+
diff --git a/includes/definitions/discovery/westmountainradio.yaml b/includes/definitions/discovery/westmountainradio.yaml
new file mode 100644
index 0000000000..18bd5813d8
--- /dev/null
+++ b/includes/definitions/discovery/westmountainradio.yaml
@@ -0,0 +1,84 @@
+mib: RMCU
+modules:
+ os:
+ hardware: RMCU::version.0
+ hardware_regex: '/(?.*) FW Version/'
+ version: RMCU::version.0
+ version_regex: '/FW Version (?.*)/'
+ sensors:
+ voltage:
+ options:
+ divisor: 1000
+ data:
+ -
+ oid: RMCU::analog6val-int
+ num_oid: '.1.3.6.1.4.1.15117.1.4.6.{{ $index }}'
+ descr: "Input"
+ low_limit: '8' # exposed in web interface, not MIB
+ high_limit: '15.5'
+ current:
+ options:
+ divisor: 1000
+ data:
+ -
+ oid: RMCU::analog1val-int
+ num_oid: '.1.3.6.1.4.1.15117.1.4.1.{{ $index }}'
+ index: 1
+ descr: "Outlet 1"
+ -
+ oid: RMCU::analog2val-int
+ num_oid: '.1.3.6.1.4.1.15117.1.4.2.{{ $index }}'
+ index: 2
+ descr: "Outlet 2"
+ -
+ oid: RMCU::analog3val-int
+ num_oid: '.1.3.6.1.4.1.15117.1.4.3.{{ $index }}'
+ index: 3
+ descr: "Outlet 3"
+ -
+ oid: RMCU::analog4val-int
+ num_oid: '.1.3.6.1.4.1.15117.1.4.4.{{ $index }}'
+ index: 4
+ descr: "Outlet 4"
+ -
+ oid: RMCU::analog5val-int
+ num_oid: '.1.3.6.1.4.1.15117.1.4.5.{{ $index }}'
+ index: 5
+ descr: "Outlet 5"
+ state:
+ data:
+ -
+ oid: RMCU::digout1val
+ num_oid: '.1.3.6.1.4.1.15117.1.2.66.{{ $index }}'
+ descr: "Outlet 1 State"
+ states:
+ - { value: 0, generic: 3, graph: 0, descr: outletOff }
+ - { value: 1, generic: 0, graph: 0, descr: outletOn }
+ -
+ oid: RMCU::digout2val
+ num_oid: '.1.3.6.1.4.1.15117.1.2.68.{{ $index }}'
+ descr: "Outlet 2 State"
+ states:
+ - { value: 0, generic: 3, graph: 0, descr: outletOff }
+ - { value: 1, generic: 0, graph: 0, descr: outletOn }
+ -
+ oid: RMCU::digout3val
+ num_oid: '.1.3.6.1.4.1.15117.1.2.70.{{ $index }}'
+ descr: "Outlet 3 State"
+ states:
+ - { value: 0, generic: 3, graph: 0, descr: outletOff }
+ - { value: 1, generic: 0, graph: 0, descr: outletOn }
+ -
+ oid: RMCU::digout4val
+ num_oid: '.1.3.6.1.4.1.15117.1.2.72.{{ $index }}'
+ descr: "Outlet 4 State"
+ states:
+ - { value: 0, generic: 3, graph: 0, descr: outletOff }
+ - { value: 1, generic: 0, graph: 0, descr: outletOn }
+ -
+ oid: RMCU::digout5val
+ num_oid: '.1.3.6.1.4.1.15117.1.2.74.{{ $index }}'
+ descr: "Outlet 5 State"
+ states:
+ - { value: 0, generic: 3, graph: 0, descr: outletOff }
+ - { value: 1, generic: 0, graph: 0, descr: outletOn }
diff --git a/includes/definitions/westmountainradio.yaml b/includes/definitions/westmountainradio.yaml
new file mode 100644
index 0000000000..0b326008c1
--- /dev/null
+++ b/includes/definitions/westmountainradio.yaml
@@ -0,0 +1,16 @@
+os: westmountainradio
+text: 'West Mountain RMCU'
+type: power
+mib_dir: westmountainradio
+icon: westmountainradio
+snmp_bulk: false
+bad_snmpEngineTime: true
+bad_hrSystemUptime: true
+over:
+ - { graph: device_current, text: Current }
+ - { graph: device_voltage, text: Voltage }
+ - { graph: device_state, text: 'Power Status' }
+discovery:
+ -
+ sysObjectID:
+ - .1.3.6.1.4.1.15117.1
diff --git a/mibs/westmountainradio/RMCU b/mibs/westmountainradio/RMCU
new file mode 100644
index 0000000000..96ed893e5e
--- /dev/null
+++ b/mibs/westmountainradio/RMCU
@@ -0,0 +1,523 @@
+-- MIB. Import this into your MIB Browser software.
+-- This is for West Mountain Radio RIGrunner 4005i
+
+RMCU DEFINITIONS ::= BEGIN
+
+IMPORTS
+ --enterprises, IpAddress, Gauge, TimeTicks FROM RFC1155-SMI
+ DisplayString FROM RFC1213-MIB
+ OBJECT-TYPE FROM RFC-1212
+ TEXTUAL-CONVENTION FROM SNMPv2-TC
+ NOTIFICATION-TYPE, Gauge32, Integer32, enterprises, MODULE-IDENTITY FROM SNMPv2-SMI
+ TRAP-TYPE FROM RFC-1215;
+
+rr4005i MODULE-IDENTITY
+ LAST-UPDATED "201710111300Z"
+ ORGANIZATION "West Mountain Radio"
+ CONTACT-INFO "www.westmountainradio.com"
+ DESCRIPTION "West Mountain Radio RIGrunner 4005i"
+ REVISION "201710111300Z"
+ DESCRIPTION "Revision"
+ ::= { enterprises 15117 1 }
+
+wmr OBJECT IDENTIFIER ::= { enterprises 15117 }
+
+product OBJECT IDENTIFIER ::= { rr4005i 1 }
+control OBJECT IDENTIFIER ::= { rr4005i 2 }
+control-ints OBJECT IDENTIFIER ::= { rr4005i 4 }
+traps OBJECT IDENTIFIER ::= { rr4005i 3 }
+
+-- ON-OFF ::= INTEGER { ON(1), OFF(0) }
+
+FixedDiv1000 ::= TEXTUAL-CONVENTION
+ DISPLAY-HINT "d-3"
+ STATUS current
+ DESCRIPTION "Fixed point, thousandths"
+ SYNTAX Integer32
+
+name OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Unit name"
+ ::= { product 1 }
+
+
+version OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Software and hardware version"
+ ::= { product 2 }
+
+build-date OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Date of software was built"
+ ::= { product 3 }
+
+
+
+analog1name OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Name of analog input #1"
+ ::= { control 1 }
+
+analog1val OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Value of analog input #1"
+ ::= { control 2 }
+
+analog2name OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Name of analog input #2"
+ ::= { control 3 }
+
+analog2val OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Value of analog input #2"
+ ::= { control 4 }
+
+analog3name OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Name of analog input #3"
+ ::= { control 5 }
+
+analog3val OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Value of analog input #3"
+ ::= { control 6 }
+
+analog4name OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Name of analog input #4"
+ ::= { control 7 }
+
+analog4val OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Value of analog input #4"
+ ::= { control 8 }
+
+analog5name OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Name of analog input #5"
+ ::= { control 9 }
+
+analog5val OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Value of analog input #5"
+ ::= { control 10 }
+
+analog6name OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Name of analog input #6"
+ ::= { control 11 }
+
+analog6val OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Value of analog input #6"
+ ::= { control 12 }
+
+
+
+
+
+digout1name OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Name of digital output #1"
+ ::= { control 65 }
+
+digout1val OBJECT-TYPE
+ SYNTAX INTEGER
+ MAX-ACCESS read-write
+ STATUS current
+ DESCRIPTION
+ "Value of digital output #1"
+ ::= { control 66 }
+
+digout2name OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Name of digital output #2"
+ ::= { control 67 }
+
+digout2val OBJECT-TYPE
+ SYNTAX INTEGER
+ MAX-ACCESS read-write
+ STATUS current
+ DESCRIPTION
+ "Value of digital output #2"
+ ::= { control 68 }
+
+digout3name OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Name of digital output #3"
+ ::= { control 69 }
+
+digout3val OBJECT-TYPE
+ SYNTAX INTEGER
+ MAX-ACCESS read-write
+ STATUS current
+ DESCRIPTION
+ "Value of digital output #3"
+ ::= { control 70 }
+
+digout4name OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Name of digital output #4"
+ ::= { control 71 }
+
+digout4val OBJECT-TYPE
+ SYNTAX INTEGER
+ MAX-ACCESS read-write
+ STATUS current
+ DESCRIPTION
+ "Value of digital output #4"
+ ::= { control 72 }
+
+digout5name OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Name of digital output #5"
+ ::= { control 73 }
+
+digout5val OBJECT-TYPE
+ SYNTAX INTEGER
+ MAX-ACCESS read-write
+ STATUS current
+ DESCRIPTION
+ "Value of digital output #5"
+ ::= { control 74 }
+
+
+
+
+
+
+
+
+
+
+analog1val-int OBJECT-TYPE
+ SYNTAX FixedDiv1000
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Value of analog input #1"
+ ::= { control-ints 1 }
+
+analog2val-int OBJECT-TYPE
+ SYNTAX FixedDiv1000
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Value of analog input #2"
+ ::= { control-ints 2 }
+
+analog3val-int OBJECT-TYPE
+ SYNTAX FixedDiv1000
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Value of analog input #3"
+ ::= { control-ints 3 }
+
+analog4val-int OBJECT-TYPE
+ SYNTAX FixedDiv1000
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Value of analog input #4"
+ ::= { control-ints 4 }
+
+analog5val-int OBJECT-TYPE
+ SYNTAX FixedDiv1000
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Value of analog input #5"
+ ::= { control-ints 5 }
+
+analog6val-int OBJECT-TYPE
+ SYNTAX FixedDiv1000
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Value of analog input #6"
+ ::= { control-ints 6 }
+
+
+
+
+
+
+
+
+trap-auth NOTIFICATION-TYPE
+ STATUS current
+ DESCRIPTION
+ "Trap caused by authorization failure"
+ ::= {traps 1}
+
+trap-analog-over1 NOTIFICATION-TYPE
+ OBJECTS {name, analog1val}
+ STATUS current
+ DESCRIPTION
+ "Trap caused by analog input #1 being over threshold"
+ ::= {traps 2}
+
+trap-analog-over2 NOTIFICATION-TYPE
+ OBJECTS {name, analog2val}
+ STATUS current
+ DESCRIPTION
+ "Trap caused by analog input #2 being over threshold"
+ ::= {traps 3}
+
+trap-analog-over3 NOTIFICATION-TYPE
+ OBJECTS {name, analog3val}
+ STATUS current
+ DESCRIPTION
+ "Trap caused by analog input #3 being over threshold"
+ ::= {traps 4}
+
+trap-analog-over4 NOTIFICATION-TYPE
+ OBJECTS {name, analog4val}
+ STATUS current
+ DESCRIPTION
+ "Trap caused by analog input #4 being over threshold"
+ ::= {traps 5}
+
+trap-analog-over5 NOTIFICATION-TYPE
+ OBJECTS {name, analog5val}
+ STATUS current
+ DESCRIPTION
+ "Trap caused by analog input #5 being over threshold"
+ ::= {traps 6}
+
+trap-analog-over6 NOTIFICATION-TYPE
+ OBJECTS {name, analog6val}
+ STATUS current
+ DESCRIPTION
+ "Trap caused by analog input #6 being over threshold"
+ ::= {traps 7}
+
+
+
+
+
+
+trap-analog-under6 NOTIFICATION-TYPE
+ OBJECTS {name, analog6val}
+ STATUS current
+ DESCRIPTION
+ "Trap caused by analog input #6 being under threshold"
+ ::= {traps 23}
+
+
+trap-poweron NOTIFICATION-TYPE
+ OBJECTS {name}
+ STATUS current
+ DESCRIPTION
+ "Trap caused by power-on"
+ ::= {traps 34}
+
+
+
+
+trap-test NOTIFICATION-TYPE
+ OBJECTS {name}
+ STATUS current
+ DESCRIPTION
+ "Trap caused by user test"
+ ::= {traps 52}
+
+
+
+
+
+trap-digout-inactive1 NOTIFICATION-TYPE
+ OBJECTS {name}
+ STATUS current
+ DESCRIPTION
+ "Trap caused by digitout output #1 going inactive"
+ ::= {traps 72}
+
+trap-digout-inactive2 NOTIFICATION-TYPE
+ OBJECTS {name}
+ STATUS current
+ DESCRIPTION
+ "Trap caused by digitout output #2 going inactive"
+ ::= {traps 73}
+
+trap-digout-inactive3 NOTIFICATION-TYPE
+ OBJECTS {name}
+ STATUS current
+ DESCRIPTION
+ "Trap caused by digitout output #3 going inactive"
+ ::= {traps 74}
+
+trap-digout-inactive4 NOTIFICATION-TYPE
+ OBJECTS {name}
+ STATUS current
+ DESCRIPTION
+ "Trap caused by digitout output #4 going inactive"
+ ::= {traps 75}
+
+trap-digout-inactive5 NOTIFICATION-TYPE
+ OBJECTS {name}
+ STATUS current
+ DESCRIPTION
+ "Trap caused by digitout output #5 going inactive"
+ ::= {traps 76}
+
+
+
+trap-digout-active1 NOTIFICATION-TYPE
+ OBJECTS {name}
+ STATUS current
+ DESCRIPTION
+ "Trap caused by digitout output #1 going active"
+ ::= {traps 88}
+
+trap-digout-active2 NOTIFICATION-TYPE
+ OBJECTS {name}
+ STATUS current
+ DESCRIPTION
+ "Trap caused by digitout output #2 going active"
+ ::= {traps 89}
+
+trap-digout-active3 NOTIFICATION-TYPE
+ OBJECTS {name}
+ STATUS current
+ DESCRIPTION
+ "Trap caused by digitout output #3 going active"
+ ::= {traps 90}
+
+trap-digout-active4 NOTIFICATION-TYPE
+ OBJECTS {name}
+ STATUS current
+ DESCRIPTION
+ "Trap caused by digitout output #4 going active"
+ ::= {traps 91}
+
+trap-digout-active5 NOTIFICATION-TYPE
+ OBJECTS {name}
+ STATUS current
+ DESCRIPTION
+ "Trap caused by digitout output #5 going active"
+ ::= {traps 92}
+
+
+
+
+
+
+trap-analog-urecover6 NOTIFICATION-TYPE
+ OBJECTS {name, analog6val}
+ STATUS current
+ DESCRIPTION
+ "Trap caused by analog input #6 recovering from under alarm"
+ ::= {traps 109}
+
+
+trap-analog-orecover1 NOTIFICATION-TYPE
+ OBJECTS {name, analog1val}
+ STATUS current
+ DESCRIPTION
+ "Trap caused by analog input #1 recovering from over alarm"
+ ::= {traps 120}
+
+trap-analog-orecover2 NOTIFICATION-TYPE
+ OBJECTS {name, analog2val}
+ STATUS current
+ DESCRIPTION
+ "Trap caused by analog input #2 recovering from over alarm"
+ ::= {traps 121}
+
+trap-analog-orecover3 NOTIFICATION-TYPE
+ OBJECTS {name, analog3val}
+ STATUS current
+ DESCRIPTION
+ "Trap caused by analog input #3 recovering from over alarm"
+ ::= {traps 122}
+
+trap-analog-orecover4 NOTIFICATION-TYPE
+ OBJECTS {name, analog4val}
+ STATUS current
+ DESCRIPTION
+ "Trap caused by analog input #4 recovering from over alarm"
+ ::= {traps 123}
+
+trap-analog-orecover5 NOTIFICATION-TYPE
+ OBJECTS {name, analog5val}
+ STATUS current
+ DESCRIPTION
+ "Trap caused by analog input #5 recovering from over alarm"
+ ::= {traps 124}
+
+trap-analog-orecover6 NOTIFICATION-TYPE
+ OBJECTS {name, analog6val}
+ STATUS current
+ DESCRIPTION
+ "Trap caused by analog input #6 recovering from over alarm"
+ ::= {traps 125}
+
+
+
+
+
+
+END
diff --git a/tests/data/westmountainradio_westmountainradio.json b/tests/data/westmountainradio_westmountainradio.json
new file mode 100644
index 0000000000..6f8a6c7563
--- /dev/null
+++ b/tests/data/westmountainradio_westmountainradio.json
@@ -0,0 +1,366 @@
+{
+ "os": {
+ "discovery": {
+ "devices": [
+ {
+ "sysName": "",
+ "sysObjectID": ".1.3.6.1.4.1.15117.1",
+ "sysDescr": "West Mountain Radio RIGrunner 4005i",
+ "sysContact": "",
+ "version": "4.08",
+ "hardware": "RIGRunner 4005i",
+ "features": null,
+ "os": "westmountainradio",
+ "type": "power",
+ "serial": null,
+ "icon": "westmountainradio.svg",
+ "location": ""
+ }
+ ]
+ },
+ "poller": "matches discovery"
+ },
+ "sensors": {
+ "discovery": {
+ "sensors": [
+ {
+ "sensor_deleted": 0,
+ "sensor_class": "current",
+ "poller_type": "snmp",
+ "sensor_oid": ".1.3.6.1.4.1.15117.1.4.1.0",
+ "sensor_index": "1",
+ "sensor_type": "westmountainradio",
+ "sensor_descr": "Outlet 1",
+ "group": null,
+ "sensor_divisor": 1000,
+ "sensor_multiplier": 1,
+ "sensor_current": 0.22,
+ "sensor_limit": null,
+ "sensor_limit_warn": null,
+ "sensor_limit_low": null,
+ "sensor_limit_low_warn": null,
+ "sensor_alert": 1,
+ "sensor_custom": "No",
+ "entPhysicalIndex": null,
+ "entPhysicalIndex_measured": null,
+ "sensor_prev": null,
+ "user_func": null,
+ "state_name": null
+ },
+ {
+ "sensor_deleted": 0,
+ "sensor_class": "current",
+ "poller_type": "snmp",
+ "sensor_oid": ".1.3.6.1.4.1.15117.1.4.2.0",
+ "sensor_index": "2",
+ "sensor_type": "westmountainradio",
+ "sensor_descr": "Outlet 2",
+ "group": null,
+ "sensor_divisor": 1000,
+ "sensor_multiplier": 1,
+ "sensor_current": 0.681,
+ "sensor_limit": null,
+ "sensor_limit_warn": null,
+ "sensor_limit_low": null,
+ "sensor_limit_low_warn": null,
+ "sensor_alert": 1,
+ "sensor_custom": "No",
+ "entPhysicalIndex": null,
+ "entPhysicalIndex_measured": null,
+ "sensor_prev": null,
+ "user_func": null,
+ "state_name": null
+ },
+ {
+ "sensor_deleted": 0,
+ "sensor_class": "current",
+ "poller_type": "snmp",
+ "sensor_oid": ".1.3.6.1.4.1.15117.1.4.3.0",
+ "sensor_index": "3",
+ "sensor_type": "westmountainradio",
+ "sensor_descr": "Outlet 3",
+ "group": null,
+ "sensor_divisor": 1000,
+ "sensor_multiplier": 1,
+ "sensor_current": 0,
+ "sensor_limit": null,
+ "sensor_limit_warn": null,
+ "sensor_limit_low": null,
+ "sensor_limit_low_warn": null,
+ "sensor_alert": 1,
+ "sensor_custom": "No",
+ "entPhysicalIndex": null,
+ "entPhysicalIndex_measured": null,
+ "sensor_prev": null,
+ "user_func": null,
+ "state_name": null
+ },
+ {
+ "sensor_deleted": 0,
+ "sensor_class": "current",
+ "poller_type": "snmp",
+ "sensor_oid": ".1.3.6.1.4.1.15117.1.4.4.0",
+ "sensor_index": "4",
+ "sensor_type": "westmountainradio",
+ "sensor_descr": "Outlet 4",
+ "group": null,
+ "sensor_divisor": 1000,
+ "sensor_multiplier": 1,
+ "sensor_current": 0,
+ "sensor_limit": null,
+ "sensor_limit_warn": null,
+ "sensor_limit_low": null,
+ "sensor_limit_low_warn": null,
+ "sensor_alert": 1,
+ "sensor_custom": "No",
+ "entPhysicalIndex": null,
+ "entPhysicalIndex_measured": null,
+ "sensor_prev": null,
+ "user_func": null,
+ "state_name": null
+ },
+ {
+ "sensor_deleted": 0,
+ "sensor_class": "current",
+ "poller_type": "snmp",
+ "sensor_oid": ".1.3.6.1.4.1.15117.1.4.5.0",
+ "sensor_index": "5",
+ "sensor_type": "westmountainradio",
+ "sensor_descr": "Outlet 5",
+ "group": null,
+ "sensor_divisor": 1000,
+ "sensor_multiplier": 1,
+ "sensor_current": 0,
+ "sensor_limit": null,
+ "sensor_limit_warn": null,
+ "sensor_limit_low": null,
+ "sensor_limit_low_warn": null,
+ "sensor_alert": 1,
+ "sensor_custom": "No",
+ "entPhysicalIndex": null,
+ "entPhysicalIndex_measured": null,
+ "sensor_prev": null,
+ "user_func": null,
+ "state_name": null
+ },
+ {
+ "sensor_deleted": 0,
+ "sensor_class": "state",
+ "poller_type": "snmp",
+ "sensor_oid": ".1.3.6.1.4.1.15117.1.2.66.0",
+ "sensor_index": "0",
+ "sensor_type": "RMCU::digout1val",
+ "sensor_descr": "Outlet 1 State",
+ "group": null,
+ "sensor_divisor": 1,
+ "sensor_multiplier": 1,
+ "sensor_current": 1,
+ "sensor_limit": null,
+ "sensor_limit_warn": null,
+ "sensor_limit_low": null,
+ "sensor_limit_low_warn": null,
+ "sensor_alert": 1,
+ "sensor_custom": "No",
+ "entPhysicalIndex": null,
+ "entPhysicalIndex_measured": null,
+ "sensor_prev": null,
+ "user_func": null,
+ "state_name": "RMCU::digout1val"
+ },
+ {
+ "sensor_deleted": 0,
+ "sensor_class": "state",
+ "poller_type": "snmp",
+ "sensor_oid": ".1.3.6.1.4.1.15117.1.2.68.0",
+ "sensor_index": "0",
+ "sensor_type": "RMCU::digout2val",
+ "sensor_descr": "Outlet 2 State",
+ "group": null,
+ "sensor_divisor": 1,
+ "sensor_multiplier": 1,
+ "sensor_current": 1,
+ "sensor_limit": null,
+ "sensor_limit_warn": null,
+ "sensor_limit_low": null,
+ "sensor_limit_low_warn": null,
+ "sensor_alert": 1,
+ "sensor_custom": "No",
+ "entPhysicalIndex": null,
+ "entPhysicalIndex_measured": null,
+ "sensor_prev": null,
+ "user_func": null,
+ "state_name": "RMCU::digout2val"
+ },
+ {
+ "sensor_deleted": 0,
+ "sensor_class": "state",
+ "poller_type": "snmp",
+ "sensor_oid": ".1.3.6.1.4.1.15117.1.2.70.0",
+ "sensor_index": "0",
+ "sensor_type": "RMCU::digout3val",
+ "sensor_descr": "Outlet 3 State",
+ "group": null,
+ "sensor_divisor": 1,
+ "sensor_multiplier": 1,
+ "sensor_current": 0,
+ "sensor_limit": null,
+ "sensor_limit_warn": null,
+ "sensor_limit_low": null,
+ "sensor_limit_low_warn": null,
+ "sensor_alert": 1,
+ "sensor_custom": "No",
+ "entPhysicalIndex": null,
+ "entPhysicalIndex_measured": null,
+ "sensor_prev": null,
+ "user_func": null,
+ "state_name": "RMCU::digout3val"
+ },
+ {
+ "sensor_deleted": 0,
+ "sensor_class": "state",
+ "poller_type": "snmp",
+ "sensor_oid": ".1.3.6.1.4.1.15117.1.2.72.0",
+ "sensor_index": "0",
+ "sensor_type": "RMCU::digout4val",
+ "sensor_descr": "Outlet 4 State",
+ "group": null,
+ "sensor_divisor": 1,
+ "sensor_multiplier": 1,
+ "sensor_current": 0,
+ "sensor_limit": null,
+ "sensor_limit_warn": null,
+ "sensor_limit_low": null,
+ "sensor_limit_low_warn": null,
+ "sensor_alert": 1,
+ "sensor_custom": "No",
+ "entPhysicalIndex": null,
+ "entPhysicalIndex_measured": null,
+ "sensor_prev": null,
+ "user_func": null,
+ "state_name": "RMCU::digout4val"
+ },
+ {
+ "sensor_deleted": 0,
+ "sensor_class": "state",
+ "poller_type": "snmp",
+ "sensor_oid": ".1.3.6.1.4.1.15117.1.2.74.0",
+ "sensor_index": "0",
+ "sensor_type": "RMCU::digout5val",
+ "sensor_descr": "Outlet 5 State",
+ "group": null,
+ "sensor_divisor": 1,
+ "sensor_multiplier": 1,
+ "sensor_current": 0,
+ "sensor_limit": null,
+ "sensor_limit_warn": null,
+ "sensor_limit_low": null,
+ "sensor_limit_low_warn": null,
+ "sensor_alert": 1,
+ "sensor_custom": "No",
+ "entPhysicalIndex": null,
+ "entPhysicalIndex_measured": null,
+ "sensor_prev": null,
+ "user_func": null,
+ "state_name": "RMCU::digout5val"
+ },
+ {
+ "sensor_deleted": 0,
+ "sensor_class": "voltage",
+ "poller_type": "snmp",
+ "sensor_oid": ".1.3.6.1.4.1.15117.1.4.6.0",
+ "sensor_index": "0",
+ "sensor_type": "westmountainradio",
+ "sensor_descr": "Input",
+ "group": null,
+ "sensor_divisor": 1000,
+ "sensor_multiplier": 1,
+ "sensor_current": 12.033,
+ "sensor_limit": 15.5,
+ "sensor_limit_warn": null,
+ "sensor_limit_low": 8,
+ "sensor_limit_low_warn": null,
+ "sensor_alert": 1,
+ "sensor_custom": "No",
+ "entPhysicalIndex": null,
+ "entPhysicalIndex_measured": null,
+ "sensor_prev": null,
+ "user_func": null,
+ "state_name": null
+ }
+ ],
+ "state_indexes": [
+ {
+ "state_name": "RMCU::digout1val",
+ "state_descr": "outletOff",
+ "state_draw_graph": 0,
+ "state_value": 0,
+ "state_generic_value": 3
+ },
+ {
+ "state_name": "RMCU::digout1val",
+ "state_descr": "outletOn",
+ "state_draw_graph": 0,
+ "state_value": 1,
+ "state_generic_value": 0
+ },
+ {
+ "state_name": "RMCU::digout2val",
+ "state_descr": "outletOff",
+ "state_draw_graph": 0,
+ "state_value": 0,
+ "state_generic_value": 3
+ },
+ {
+ "state_name": "RMCU::digout2val",
+ "state_descr": "outletOn",
+ "state_draw_graph": 0,
+ "state_value": 1,
+ "state_generic_value": 0
+ },
+ {
+ "state_name": "RMCU::digout3val",
+ "state_descr": "outletOff",
+ "state_draw_graph": 0,
+ "state_value": 0,
+ "state_generic_value": 3
+ },
+ {
+ "state_name": "RMCU::digout3val",
+ "state_descr": "outletOn",
+ "state_draw_graph": 0,
+ "state_value": 1,
+ "state_generic_value": 0
+ },
+ {
+ "state_name": "RMCU::digout4val",
+ "state_descr": "outletOff",
+ "state_draw_graph": 0,
+ "state_value": 0,
+ "state_generic_value": 3
+ },
+ {
+ "state_name": "RMCU::digout4val",
+ "state_descr": "outletOn",
+ "state_draw_graph": 0,
+ "state_value": 1,
+ "state_generic_value": 0
+ },
+ {
+ "state_name": "RMCU::digout5val",
+ "state_descr": "outletOff",
+ "state_draw_graph": 0,
+ "state_value": 0,
+ "state_generic_value": 3
+ },
+ {
+ "state_name": "RMCU::digout5val",
+ "state_descr": "outletOn",
+ "state_draw_graph": 0,
+ "state_value": 1,
+ "state_generic_value": 0
+ }
+ ]
+ },
+ "poller": "matches discovery"
+ }
+}
diff --git a/tests/snmpsim/westmountainradio_westmountainradio.snmprec b/tests/snmpsim/westmountainradio_westmountainradio.snmprec
new file mode 100644
index 0000000000..532b1e3f6c
--- /dev/null
+++ b/tests/snmpsim/westmountainradio_westmountainradio.snmprec
@@ -0,0 +1,65 @@
+1.3.6.1.2.1.1.1.0|4|\"West Mountain Radio RIGrunner 4005i
+1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.15117.1
+1.3.6.1.2.1.1.3.0|67|945103
+1.3.6.1.2.1.1.4.0|4|
+1.3.6.1.2.1.1.5.0|4|
+1.3.6.1.2.1.1.6.0|4|
+1.3.6.1.2.1.1.7.0|2|-1
+1.3.6.1.4.1.15117.1.1.1.0|4|4005i #1234
+1.3.6.1.4.1.15117.1.1.2.0|4|RIGRunner 4005i FW Version 4.08
+1.3.6.1.4.1.15117.1.1.3.0|4|16-Sep-19 09:03:27
+1.3.6.1.4.1.15117.1.2.1.0|4|Node 1
+1.3.6.1.4.1.15117.1.2.2.0|4|0.21 Amps
+1.3.6.1.4.1.15117.1.2.3.0|4|Node 2
+1.3.6.1.4.1.15117.1.2.4.0|4|0.62 Amps
+1.3.6.1.4.1.15117.1.2.5.0|4|Node 3
+1.3.6.1.4.1.15117.1.2.6.0|4|OFF
+1.3.6.1.4.1.15117.1.2.7.0|4|Node 4
+1.3.6.1.4.1.15117.1.2.8.0|4|OFF
+1.3.6.1.4.1.15117.1.2.9.0|4|Node 5
+1.3.6.1.4.1.15117.1.2.10.0|4|OFF
+1.3.6.1.4.1.15117.1.2.11.0|4|Supply
+1.3.6.1.4.1.15117.1.2.12.0|4|12.03 Volts
+1.3.6.1.4.1.15117.1.2.65.0|4|Node 1
+1.3.6.1.4.1.15117.1.2.66.0|2|1
+1.3.6.1.4.1.15117.1.2.67.0|4|Node 2
+1.3.6.1.4.1.15117.1.2.68.0|2|1
+1.3.6.1.4.1.15117.1.2.69.0|4|Node 3
+1.3.6.1.4.1.15117.1.2.70.0|2|0
+1.3.6.1.4.1.15117.1.2.71.0|4|Node 4
+1.3.6.1.4.1.15117.1.2.72.0|2|0
+1.3.6.1.4.1.15117.1.2.73.0|4|Node 5
+1.3.6.1.4.1.15117.1.2.74.0|2|0
+1.3.6.1.4.1.15117.1.3.1.0|5|
+1.3.6.1.4.1.15117.1.3.2.0|5|
+1.3.6.1.4.1.15117.1.3.3.0|5|
+1.3.6.1.4.1.15117.1.3.4.0|5|
+1.3.6.1.4.1.15117.1.3.5.0|5|
+1.3.6.1.4.1.15117.1.3.6.0|5|
+1.3.6.1.4.1.15117.1.3.7.0|5|
+1.3.6.1.4.1.15117.1.3.23.0|5|
+1.3.6.1.4.1.15117.1.3.34.0|5|
+1.3.6.1.4.1.15117.1.3.52.0|5|
+1.3.6.1.4.1.15117.1.3.72.0|5|
+1.3.6.1.4.1.15117.1.3.73.0|5|
+1.3.6.1.4.1.15117.1.3.74.0|5|
+1.3.6.1.4.1.15117.1.3.75.0|5|
+1.3.6.1.4.1.15117.1.3.76.0|5|
+1.3.6.1.4.1.15117.1.3.88.0|5|
+1.3.6.1.4.1.15117.1.3.89.0|5|
+1.3.6.1.4.1.15117.1.3.90.0|5|
+1.3.6.1.4.1.15117.1.3.91.0|5|
+1.3.6.1.4.1.15117.1.3.92.0|5|
+1.3.6.1.4.1.15117.1.3.109.0|5|
+1.3.6.1.4.1.15117.1.3.120.0|5|
+1.3.6.1.4.1.15117.1.3.121.0|5|
+1.3.6.1.4.1.15117.1.3.122.0|5|
+1.3.6.1.4.1.15117.1.3.123.0|5|
+1.3.6.1.4.1.15117.1.3.124.0|5|
+1.3.6.1.4.1.15117.1.3.125.0|5|
+1.3.6.1.4.1.15117.1.4.1.0|2|220
+1.3.6.1.4.1.15117.1.4.2.0|2|681
+1.3.6.1.4.1.15117.1.4.3.0|2|0
+1.3.6.1.4.1.15117.1.4.4.0|2|0
+1.3.6.1.4.1.15117.1.4.5.0|2|0
+1.3.6.1.4.1.15117.1.4.6.0|2|12033