Hello Arnaud,<div><br></div><div>Thanks for your feedback!</div><div><br><div class="gmail_quote">2012/6/11 Arnaud Quette <span dir="ltr"><<a href="mailto:aquette.dev@gmail.com" target="_blank">aquette.dev@gmail.com</a>></span><br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br><div class="gmail_quote">2012/6/10 Luiz Angelo Daros de Luca <span dir="ltr"><<a href="mailto:luizluca@gmail.com" target="_blank">luizluca@gmail.com</a>></span><br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hello guys,<br></blockquote><div><br>Hello Luiz<br> <br></div><div class="im"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
I was some years ago when I sent something to this list.<br></blockquote></div><div><br>yup, Google told me it was in 2009, on the megatec driver...<br> </div><div class="im"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">



NUT is a great tool but lacks SNMP management. It can access a device using SNMP<br>
but I found no way to read NUT values using SNMP. It would be very<br>
useful in order to integrate with<br>
network management software based on SNMP. As I did not find a<br>
solution, I wrote it myself.<br></blockquote></div><div><br>well, there is (was/will be) one, but never finished nor integrated:<br>- a set of 3 tasks, among which 2 are agent related:<br><a href="https://alioth.debian.org/pm/task.php?group_project_id=31&group_id=30602&func=browse" target="_blank">https://alioth.debian.org/pm/task.php?group_project_id=31&group_id=30602&func=browse</a><br>


- a patch with an agent based on RFC1628 (so limited to 1 UPS, no multiple devices, no PDU nor whatever...)<br><a href="https://alioth.debian.org/tracker/index.php?func=detail&aid=312563&group_id=30602&atid=411544" target="_blank">https://alioth.debian.org/tracker/index.php?func=detail&aid=312563&group_id=30602&atid=411544</a></div>

</div></blockquote><div><br></div><div>I found this MIB but, as you already said, it was too much limited. So, I just wrote a new one.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div class="gmail_quote"><div><br>
 </div><div class="im"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
I wrote a MIB file and a SNMP agent for net-snmp (pass_persist) in<br>
order to expose the contents of upsc command to SNMP softwares. I<br>
works simply by adding to snmpd.conf:<br>
<br>
pass_persist .1.3.6.1.4.1.26376.99 /my/path/to/snmp.nut -f<br>
<br>
The script and MIB files are at:<br>
<br>
<a href="https://github.com/luizluca/nut-snmpagent" target="_blank">https://github.com/luizluca/nut-snmpagent</a><br>
<br>
It is, for sure, not finished. I did not find a IANA enterprise<br>
number, that is no costs to register, for NUT so I<br>
spoofed my company one. I'm still using a fake upsc output in order to<br>
have a more complex mix of devices.<br>
I collected some output examples in the documentation but I might<br>
still missed some special case.<br></blockquote></div><div><br>I can provide some .dev files for simulation using dummy-ups driver.<br>this should help you in testing corner cases...<br>note that there is already a .dev and a .seq in the source distribution, "data" sub directory.<br>

</div></div></blockquote><div><br></div><div>Interesting! This is one think that I needed. I'll check the existing data and, if I need something special,</div><div>I'll ask if you have it.</div><div><br></div><div>

 </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="gmail_quote"><div>
<br></div><div class="im"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
Also, I did not extensively tested it with real hardware. Anyway, my<br>
UPS is quite simple for that.<br>
<br>
I got two minor doc bugs in the process. The first is that the<br>
driver.version.data, that I found in some examples, its not listed as<br>
a variable.<br></blockquote></div><div><br>right, there are still some data missing in nut-names.txt, but I'm ramping up to fix these lacks.<br><br><br>driver.flag.*<br>driver.parameter.*<br>=> scripts/augeas/nutupsconf.aug<br>


==> ups_fields stores all drivers parameters and flags (no distinction here yet between VAR_VALUE and VAR_FLAG)<br><br></div><div class="im"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">



The other is the description of "power.minimum" as "Maximum seen<br>
apparent power (VA)".<br></blockquote></div><div><br>the is a typo error, fixed in r3653. thanks for your report.<br>Note that we may investigate future mechanisms to share data mapping and descriptions, that would ease maintenance work on the SNMP agent.<br>

</div></div></blockquote><div><br></div><div>I generated the MIB mostly with scripts and using the nut doc as input. However, there is some parts that just need to be hand made.</div><div>I don't think that it will be possible to automatize all the update process. In my case, I used the MIB information converted to XML (using smidump)</div>

<div>in order to build most of the snmp-agent code.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="gmail_quote"><div>
 </div><div class="im"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
I would appreciate some feedback/help/suggestions in any part of the<br>
solution. I'm willing to release it with any permissive license.<br>
The agent might not fit the requirements of all users (it is written<br>
in ruby with a lot of metaprogramming) but the MIB file<br>
seems to be in a good shape, expect for the missing IANA number. BTW,<br>
I'm no SNMP expert.<br></blockquote></div><div><br>all this is great!<br>the SNMP agent (and a NUT MIB, or generic power devices MIB) is one of the things I've not had time to take care for years.<br><br>I'm also going to look at the IANA process to get an OID for NUT.<br>


this should probably be under "org" and not "enterprise", as for the generic "UPS MIB" (aka RFC-1628, located under mgmt.mib-2)<br><br></div></div></blockquote><div><br></div><div>I guess "enterprise" is not only for commercial companies. Even net-snmp uses it. It is a generic term like 3rd party.</div>

<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="gmail_quote"><div>that said, I'm not a fan of Ruby.<br></div></div></blockquote><div><br></div>

<div>No problem :-). But I must say it is pretty fast to develop.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="gmail_quote"><div>moreover, the general layout of the below MIB should be reworked a bit to match 1:1 NUT naming scheme (Ie the NUT data collections).<br>


more info below...<br><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div class="h5">
Regards,<br>
<br>
PS: Just for an example, the current output that I get from a snmpwalk<br>
is like this (for 6 devices):<br>
<br>
NUT-MIB::deviceIndex.1 = INTEGER: 1<br>
NUT-MIB::deviceIndex.2 = INTEGER: 2<br>
NUT-MIB::deviceIndex.3 = INTEGER: 3<br>
NUT-MIB::deviceIndex.4 = INTEGER: 4<br>
NUT-MIB::deviceIndex.5 = INTEGER: 5<br>
NUT-MIB::deviceIndex.6 = INTEGER: 6<br>
NUT-MIB::deviceName.1 = STRING: ups2<br>
NUT-MIB::deviceName.2 = STRING: xxx<br>
NUT-MIB::deviceName.3 = STRING: upsoutlet<br>
NUT-MIB::deviceName.4 = STRING: ups3p1<br>
NUT-MIB::deviceName.5 = STRING: ups3p2<br>
NUT-MIB::deviceName.6 = STRING: ups3<br>
NUT-MIB::deviceDesc.1 = STRING: UPS2 10 KVA Lacerda Titan Black tri-mono 10KVA (220v) Serial A08823221<br>
NUT-MIB::deviceDesc.2 = STRING: Fictious<br>
NUT-MIB::deviceDesc.3 = STRING: Example outlet<br>
NUT-MIB::deviceDesc.4 = STRING: phases1<br>
NUT-MIB::deviceDesc.5 = STRING: phases2<br>
NUT-MIB::deviceDesc.6 = STRING: test3<br>
NUT-MIB::deviceModel.1 = STRING: Titan Black tri-mono 10KVA<br>
NUT-MIB::deviceModel.2 = STRING: Titan Black tri-mono 10KVA<br>
NUT-MIB::deviceModel.6 = STRING: Ellipse MAX 1100<br>
NUT-MIB::deviceMfr.1 = STRING: Lacerda Sistemas de Energia<br>
NUT-MIB::deviceMfr.2 = STRING: Lacerda Sistemas de Energia<br>
NUT-MIB::deviceMfr.6 = STRING: EATON<br>
NUT-MIB::deviceSerial.1 = STRING: A08823221<br>
NUT-MIB::deviceSerial.2 = STRING: A08823221<br>
NUT-MIB::deviceSerial.6 = STRING: ADKK22008<br>
NUT-MIB::deviceType.1 = STRING: ups<br>
NUT-MIB::deviceType.2 = STRING: ups<br>
NUT-MIB::deviceType.6 = STRING: ups<br>
NUT-MIB::upsStatus.1 = STRING: OL<br>
NUT-MIB::upsStatus.2 = STRING: OL<br>
NUT-MIB::upsStatus.6 = STRING: OL CHRG<br>
NUT-MIB::upsModel.6 = STRING: Ellipse MAX 1100<br>
NUT-MIB::upsMfr.6 = STRING: EATON<br>
NUT-MIB::upsSerial.6 = STRING: ADKK22008<br>
NUT-MIB::upsVendorid.6 = STRING: 0463<br>
NUT-MIB::upsProductid.6 = STRING: ffff<br></div></div>
(...)<br><a href="http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/nut-upsdev" target="_blank"></a></blockquote></div><br>I would more see something like this (including the collection name in the path):<br>NUT-MIB::device.deviceIndex.1 = INTEGER: 1<br>


NUT-MIB::device.deviceName.1 = STRING: ups2<br>NUT-MIB::device.deviceDesc.1 = STRING: UPS2 ...<br>
NUT-MIB::device.deviceModel.1 = STRING: Titan Black tri-mono 10KVA<br>
NUT-MIB::device.deviceMfr.1 = STRING: Lacerda Sistemas de Energia<br>(...)<div class="im"><br>
<br>NUT-MIB::inputCurrentNominal.1 = INTEGER: 27.00<br></div>would give something like<br>NUT-MIB::input.l1.inputCurrent.nominal<br>(equivalent to NUT "input.L1.current.nominal:  27.0")<br><br></blockquote><div>

<br></div><div>According to my little SNMP knowledge (I'm really no expert), I guess this is not possible.</div><div>SNMP have two basic structures for data: scalars and tables. There is no complex data structure as</div>

<div>a "C struct" or json syntax, like upsc uses as output.</div><div><br></div><div>Table have fixed columns, which hold the data, and (multiple) index(es). There is no table in table or dynamic objects. The most complex</div>

<div>that you can have is a multiple index table that can reference the index of a foreign table. "input.l1.inputCurrent.nominal" is just not possible.</div><div>The closest would be to create a table for each domain/subdomain/context set like:</div>

<div><br></div><div>nutInputBypassL2-L3Table.nutInputBypassL2-L3Entry.nutCurrentNominal.x (where x is the device index)</div><div><br></div><div>Scalars are used for values that are unique in the snmp service like machine uptime, hostname and so on.</div>

<div>I used it for "nut server information". They use a fixed "index/instance" 0.</div><div><br></div><div>So, I created tables for device, ups, input, output, battery, all these that have only one value for device. They look like these:</div>

<div><br></div><div>(The output in the first email wasn't showing the full path. In this email, I listed the full path but removed the ".iso.org.dod.internet.private.enterprises.tresc.nutMIB.nutMIBObjects." that preceded each line)</div>

<div><br></div><div><div>nutDeviceTable.nutDeviceEntry.nutDeviceIndex.1 = INTEGER: 1</div><div>nutDeviceTable.nutDeviceEntry.nutDeviceIndex.2 = INTEGER: 2</div><div>nutDeviceTable.nutDeviceEntry.nutDeviceIndex.3 = INTEGER: 3</div>

<div>nutDeviceTable.nutDeviceEntry.nutDeviceIndex.4 = INTEGER: 4</div><div>nutDeviceTable.nutDeviceEntry.nutDeviceIndex.5 = INTEGER: 5</div><div>nutDeviceTable.nutDeviceEntry.nutDeviceIndex.6 = INTEGER: 6</div><div>nutDeviceTable.nutDeviceEntry.nutDeviceName.1 = STRING: ups2</div>

<div>nutDeviceTable.nutDeviceEntry.nutDeviceName.2 = STRING: xxx</div><div>nutDeviceTable.nutDeviceEntry.nutDeviceName.3 = STRING: upsoutlet</div><div>nutDeviceTable.nutDeviceEntry.nutDeviceName.4 = STRING: ups3p1</div><div>

nutDeviceTable.nutDeviceEntry.nutDeviceName.5 = STRING: ups3p2</div><div>nutDeviceTable.nutDeviceEntry.nutDeviceName.6 = STRING: ups3</div><div>nutDeviceTable.nutDeviceEntry.nutDeviceDesc.1 = STRING: UPS2 10 KVA Lacerda Titan Black tri-mono 10KVA (220v) Serial A08823221</div>

<div>nutDeviceTable.nutDeviceEntry.nutDeviceDesc.2 = STRING: Fictious</div><div>nutDeviceTable.nutDeviceEntry.nutDeviceDesc.3 = STRING: Example outlet</div><div>nutDeviceTable.nutDeviceEntry.nutDeviceDesc.4 = STRING: phases1</div>

<div>nutDeviceTable.nutDeviceEntry.nutDeviceDesc.5 = STRING: phases2</div><div>nutDeviceTable.nutDeviceEntry.nutDeviceDesc.6 = STRING: test3</div><div>nutDeviceTable.nutDeviceEntry.nutDeviceModel.1 = STRING: Titan Black tri-mono 10KVA</div>

<div>nutDeviceTable.nutDeviceEntry.nutDeviceModel.2 = STRING: Titan Black tri-mono 10KVA</div><div>nutDeviceTable.nutDeviceEntry.nutDeviceModel.6 = STRING: Ellipse MAX 1100</div></div><div>(...)</div><div><br></div><div>
and</div>
<div><br></div><div><div>nutOutputTable.nutOutputEntry.nutOutputVoltage.1 = INTEGER: 221.0</div><div>nutOutputTable.nutOutputEntry.nutOutputVoltage.2 = INTEGER: 221.0</div><div>nutOutputTable.nutOutputEntry.nutOutputVoltage.5 = INTEGER: 120.0</div>

<div>nutOutputTable.nutOutputEntry.nutOutputVoltage.6 = INTEGER: 230.0</div><div>nutOutputTable.nutOutputEntry.nutOutputVoltageNominal.6 = INTEGER: 230.0</div><div>nutOutputTable.nutOutputEntry.nutOutputFrequencyNominal.5 = INTEGER: 60.0</div>

<div>nutOutputTable.nutOutputEntry.nutOutputFrequencyNominal.6 = INTEGER: 50.0</div><div>nutOutputTable.nutOutputEntry.nutOutputCurrent.5 = INTEGER: 244.20</div><div>nutOutputTable.nutOutputEntry.nutOutputPhases.4 = INTEGER: 3</div>

<div>nutOutputTable.nutOutputEntry.nutOutputPhases.5 = INTEGER: 1</div></div><div><br></div><div>nut*Entry is mandatory for snmp structure.</div><div>Outlets have a relation of 1-to-N with devices. So, I created a table that uses as index deviceIndex and outletIndex. The result is like this:</div>

<div><br></div><div><div>nutOutletTable.nutOutletEntry.nutOutletIndex.3.0 = INTEGER: 0</div><div>nutOutletTable.nutOutletEntry.nutOutletIndex.3.1 = INTEGER: 1</div><div>nutOutletTable.nutOutletEntry.nutOutletIndex.3.2 = INTEGER: 2</div>

<div>nutOutletTable.nutOutletEntry.nutOutletIndex.6.0 = INTEGER: 0</div><div>nutOutletTable.nutOutletEntry.nutOutletIndex.6.1 = INTEGER: 1</div><div>nutOutletTable.nutOutletEntry.nutOutletId.3.0 = STRING: 0</div><div>nutOutletTable.nutOutletEntry.nutOutletId.3.1 = STRING: 1</div>

<div>nutOutletTable.nutOutletEntry.nutOutletId.3.2 = STRING: 2</div><div>nutOutletTable.nutOutletEntry.nutOutletId.6.0 = STRING: 1</div><div>nutOutletTable.nutOutletEntry.nutOutletId.6.1 = STRING: 2</div><div>nutOutletTable.nutOutletEntry.nutOutletDesc.3.0 = STRING: Main Outlet</div>

<div>nutOutletTable.nutOutletEntry.nutOutletDesc.3.1 = STRING: PowerShare Outlet 1</div><div>nutOutletTable.nutOutletEntry.nutOutletDesc.3.2 = STRING: PowerShare Outlet 2</div><div>nutOutletTable.nutOutletEntry.nutOutletDesc.6.0 = STRING: Main Outlet</div>

<div>nutOutletTable.nutOutletEntry.nutOutletDesc.6.1 = STRING: PowerShare Outlet 1</div><div>nutOutletTable.nutOutletEntry.nutOutletSwitch.3.1 = INTEGER: on(1)</div><div>nutOutletTable.nutOutletEntry.nutOutletSwitch.3.2 = INTEGER: on(1)</div>

<div>nutOutletTable.nutOutletEntry.nutOutletStatus.6.1 = INTEGER: on(1)</div><div>nutOutletTable.nutOutletEntry.nutOutletSwitchable.3.0 = INTEGER: yes(1)</div><div>nutOutletTable.nutOutletEntry.nutOutletSwitchable.3.1 = INTEGER: yes(1)</div>

<div>nutOutletTable.nutOutletEntry.nutOutletSwitchable.3.2 = INTEGER: yes(1)</div><div>nutOutletTable.nutOutletEntry.nutOutletSwitchable.6.0 = INTEGER: no(0)</div><div>nutOutletTable.nutOutletEntry.nutOutletSwitchable.6.1 = INTEGER: no(0)</div>

</div><div>(...)</div><div><br></div><div>For 3 phase devices, The number of columns in the table would be very big. So, I opted to</div><div>use 4-level index using: (deviceIndex, domain(input/ouptut), subdomain(load, bypass,...) and context (none, L1, L2, L1-L2).</div>

<div>The result is like this:</div><div><br></div><div><div>nutThreephaseTable.nutThreephaseEntry.nutThreephaseDomain.4.output.load.l1 = INTEGER: output(2)</div><div>nutThreephaseTable.nutThreephaseEntry.nutThreephaseDomain.5.output.load.none = INTEGER: output(2)</div>

<div>nutThreephaseTable.nutThreephaseEntry.nutThreephaseSubdomain.4.output.load.l1 = INTEGER: load(4)</div><div>nutThreephaseTable.nutThreephaseEntry.nutThreephaseSubdomain.5.output.load.none = INTEGER: load(4)</div><div>

nutThreephaseTable.nutThreephaseEntry.nutThreephaseContext.4.output.load.l1 = INTEGER: l1(2)</div><div>nutThreephaseTable.nutThreephaseEntry.nutThreephaseContext.5.output.load.none = INTEGER: none(0)</div><div>nutThreephaseTable.nutThreephaseEntry.nutThreephaseCurrent.4.input.mains.l1 = INTEGER: 133.00</div>

<div>nutThreephaseTable.nutThreephaseEntry.nutThreephaseCurrent.5.output.load.none = INTEGER: 244.20</div><div>nutThreephaseTable.nutThreephaseEntry.nutThreephaseVoltage.4.input.bypass.l1l2 = INTEGER: 398.3</div><div>nutThreephaseTable.nutThreephaseEntry.nutThreephaseVoltage.5.output.load.none = INTEGER: 120.0</div>

<div>nutThreephaseTable.nutThreephaseEntry.nutThreephasePower.4.output.load.l1 = INTEGER: 35700</div><div>nutThreephaseTable.nutThreephaseEntry.nutThreephasePowerfactor.4.output.load.none = INTEGER: .82</div><div>nutThreephaseTable.nutThreephaseEntry.nutThreephaseFrequency.4.input.mains.none = INTEGER: 50.0</div>

<div>nutThreephaseTable.nutThreephaseEntry.nutThreephaseFrequency.5.input.mains.none = INTEGER: 50.1</div><div>nutThreephaseTable.nutThreephaseEntry.nutThreephaseFrequencyNominal.5.output.load.none = INTEGER: 60.0</div></div>

<div><br></div><div>Where nutThreephaseTable.nutThreephaseEntry.nutThreephaseCurrent.5.output.load.none is equals to nutOutputTable.nutOutputEntry.nutOutputCurrent.5</div><div>I know that not every domain/context have all properties but it was just easier to use a single table for every combination and letting the agent answer the invalid</div>

<div>combination as absent.</div><div><br></div><div>Expect for nutThreephaseTable and nutOutletTable, I kept the same nut name but used upcase letters instead of dots.</div><div>For outlets, I moved the outlet index (outlet.3.xxx) to outletIndex. For 3-phase, I moved the domain,subdomain,context to the index.</div>

<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">a few notes:<br>- I'm still thinking about the added value of repeating the collection name for each leaf.<br>


Ie device.deviceIndex Vs device.Index<br>the first (your current approach) is probably more in phase with SNMP best practices,<br></blockquote><div><br></div><div><div>I guess I already answered this. Object names are global. Generally they are wrote in order to never conflict with the objects name declared in other MIBs.</div>

</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">- I'm still unsure on the right device index place.<br>you have used leaf indexes (Ie, indexes are located on the leaf), while NUT native approach would more be "root" indexes.<br>


that would give something like<br>NUT-MIB::[index].collection.data<br><br></blockquote><div><br></div><div>Sorry, again, snmp fixed rules. The only think that can change in the presence of an object (scalar or column) and the table index. Nothing more.</div>

<div>  </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">so, for the 1rst NUT device:<br>NUT-MIB::<a href="http://0.device.name" target="_blank">0.device.name</a><br>

NUT-MIB::0.device.model<br>
(...)<br><br>the root would also contain:<br>NUT-MIB::server.{info,version}<br>
and possibly a devices list, or at least a device count (Ie how many devices you can iterate on...)<br><br>- for the 1rst round, I'm more interested in stabilizing the MIB tree, to have a stable *numeric* set.<br>Exact string names have a lower priority.<br>

</blockquote><div><br></div><div>Sure. You're right.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>- the "MAYBE" on commands (and settings) is to be removed.<br>this is also part of the SNMP interface, though it should be used only in SNMP v3 mode (v1 is a security mess!).<br><br></blockquote><div><br></div>

<div>I didn't get it.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">- part of the requirements, I'd like the agent to be able to work in standalone or sub agent mode.<br>

</blockquote><div><br></div><div>After there is a defined mib, the agent could be written using net-snmp libs. It would allow the agent to be an agentx and integrate into the</div><div>existing snmp service. The use of pass_persist is very simple but maybe not the long-term way to go.</div>

<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>so, to conclude this first mail, you did a great work!<br>I've sadly not enough time to fully enter the loop with you.<br>but I'm willing to devote all the support and time I can to push and complete this effort (including IANA process).<br>


on your side, are you willing to continue (and maybe enter the NUT team for the long run) or just to contribute what you did so far?<br></blockquote><div><br></div><div>I'm willing to contribute for the SNMP agent. If it gets up and running, I might even remove the need of a NUT protocol or even the NUT client.</div>

<div>upsc could be rewritten into a snmp client. Commands could use the SNMP SET operation. Events could use the snmptrap to send thinks like "forced shutdown" to the clients (although</div><div>snmptrap are more unicast communication than broadcast one).  If this succeeds, the client of an NUT server could be any SNMP management software.</div>

<div>However, this is not my objective. </div><div><br></div><div>I'll try the dummy devices and I'll update the github repo sometime soon.</div><div><br></div><div>Cheers, </div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<br>cheers,<br clear="all">Arnaud<span class="HOEnZb"><font color="#888888"><br>-- <br>Linux / Unix / Opensource Engineering Expert - Eaton - <a href="http://opensource.eaton.com" target="_blank">http://opensource.eaton.com</a><br>


Network UPS Tools (NUT) Project Leader - <a href="http://www.networkupstools.org" target="_blank">http://www.networkupstools.org</a><br>Debian Developer - <a href="http://www.debian.org" target="_blank">http://www.debian.org</a><br>


Free Software Developer - <a href="http://arnaud.quette.free.fr" target="_blank">http://arnaud.quette.free.fr</a><br><br>
</font></span></blockquote></div><br clear="all">---<br>  Â Â  Luiz Angelo Daros de Luca, Me.<br>  Â  Â  Â  Â  Â  <a href="mailto:luizluca@gmail.com">luizluca@gmail.com</a><br><br></div>