<?php

/*
 * LibreNMS Calix E5-1xx Temperature Discovery module
 *
 * Copyright (c) 2016 Chris A. Evans <thecityofguanyu@outlook.com>
 *
 * This program is free software: you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by the
 * Free Software Foundation, either version 3 of the License, or (at your
 * option) any later version.  Please see LICENSE.txt at the top level of
 * the source code distribution for details.
 */

if (strstr((string) $device['sysObjectID'], '.1.3.6.1.4.1.6321.1.2.3')) { // E5-1xx Series
    echo 'Calix E5: ';

    if (str_contains((string) $device['sysObjectID'], '.1.3.6.1.4.1.6321.1.2.3.4')) { // E5-121
        $oids = snmp_walk($device, 'iesSysTempCurValue', '-Osqn', 'E5-121-IESCOMMON-MIB', 'calix');
        $oids = trim((string) $oids);
        $oids = str_replace('.1.3.6.1.4.1.6321.1.2.3.4.98.2.3.1.2.', '', $oids);
        foreach (explode("\n", $oids) as $data) {
            $data = trim($data);
            if ($data != '') {
                [$oid] = explode(' ', $data);
                $temperature_oid = ".1.3.6.1.4.1.6321.1.2.3.4.98.2.3.1.2.$oid";
                $descr_oid = ".1.3.6.1.4.1.6321.1.2.3.4.98.2.3.1.6.$oid";
                $descr = SnmpQuery::get($descr_oid)->value();
                $temperature = SnmpQuery::get($temperature_oid)->value();
                $descr = str_replace('"', '', $descr);
                $current = $temperature;

                discover_sensor(null, 'temperature', $device, $temperature_oid, $oid, 'calix', $descr, '1', '1', null, null, null, null, $current);
            }
        }
    }

    if (str_contains((string) $device['sysObjectID'], '.1.3.6.1.4.1.6321.1.2.3.3')) { // E5-120
        $oids = snmp_walk($device, 'iesSysTempCurValue', '-Osqn', 'E5-120-IESCOMMON-MIB', 'calix');
        $oids = trim((string) $oids);
        $oids = str_replace('.1.3.6.1.4.1.6321.1.2.3.3.98.2.3.1.2.', '', $oids);
        foreach (explode("\n", $oids) as $data) {
            $data = trim($data);
            if ($data != '') {
                [$oid] = explode(' ', $data);
                $temperature_oid = ".1.3.6.1.4.1.6321.1.2.3.3.98.2.3.1.2.$oid";
                $descr_oid = ".1.3.6.1.4.1.6321.1.2.3.3.98.2.3.1.6.$oid";
                $descr = SnmpQuery::get($descr_oid)->value();
                $temperature = SnmpQuery::get($temperature_oid)->value();
                $descr = str_replace('"', '', $descr);
                $current = $temperature;

                discover_sensor(null, 'temperature', $device, $temperature_oid, $oid, 'calix', $descr, '1', '1', null, null, null, null, $current);
            }
        }
    }

    if (str_contains((string) $device['sysObjectID'], '.1.3.6.1.4.1.6321.1.2.3.2')) { // E5-111
        $oids = snmp_walk($device, 'iesSysTempCurValue', '-Osqn', 'E5-111-IESCOMMON-MIB', 'calix');
        $oids = trim((string) $oids);
        $oids = str_replace('.1.3.6.1.4.1.6321.1.2.3.2.98.2.3.1.2.', '', $oids);
        foreach (explode("\n", $oids) as $data) {
            $data = trim($data);
            if ($data != '') {
                [$oid] = explode(' ', $data);
                $temperature_oid = ".1.3.6.1.4.1.6321.1.2.3.2.98.2.3.1.2.$oid";
                $descr_oid = ".1.3.6.1.4.1.6321.1.2.3.2.98.2.3.1.6.$oid";
                $descr = SnmpQuery::get($descr_oid)->value();
                $temperature = SnmpQuery::get($temperature_oid)->value();
                $descr = str_replace('"', '', $descr);
                $current = $temperature;

                discover_sensor(null, 'temperature', $device, $temperature_oid, $oid, 'calix', $descr, '1', '1', null, null, null, null, $current);
            }
        }
    }

    if (str_contains((string) $device['sysObjectID'], '.1.3.6.1.4.1.6321.1.2.3.1')) { // E5-110
        $oids = snmp_walk($device, 'iesSysTempCurValue', '-Osqn', 'E5-110-IESCOMMON-MIB', 'calix');
        $oids = trim((string) $oids);
        $oids = str_replace('.1.3.6.1.4.1.6321.1.2.3.1.98.2.3.1.2.', '', $oids);
        foreach (explode("\n", $oids) as $data) {
            $data = trim($data);
            if ($data != '') {
                [$oid] = explode(' ', $data);
                $temperature_oid = ".1.3.6.1.4.1.6321.1.2.3.1.98.2.3.1.2.$oid";
                $descr_oid = ".1.3.6.1.4.1.6321.1.2.3.1.98.2.3.1.6.$oid";
                $descr = SnmpQuery::get($descr_oid)->value();
                $temperature = SnmpQuery::get($temperature_oid)->value();
                $descr = str_replace('"', '', $descr);
                $current = $temperature;

                discover_sensor(null, 'temperature', $device, $temperature_oid, $oid, 'calix', $descr, '1', '1', null, null, null, null, $current);
            }
        }
    }
}
