LCDProc 0.5.4-dev
-
scratchi,
try to change the menu section of the lcdproc.conf file using the following data:# If you have a keypad you can assign keystrings to the keys. # See documentation for used terms and how to wire it. # For example to give directly connected key 4 the string “Enter”, use: # KeyDirect_4=Enter # For matrix keys use the X and Y coordinates of the key: # KeyMatrix_1_3=Enter KeyMatrix_4_1=Enter KeyMatrix_4_2=Up KeyMatrix_4_3=Down KeyMatrix_4_4=Escape
this is the only information I found on the nexcom.so driver. Unfortunately the nexcom driver is not in the official release of LCDProc, so it's hard to know what is its code and if it respects all the LCDProc directives…
Ciao,
Michele -
Truthfully, I'm not sure. The driver is for 0.5.2, and that's what I've used it with. I didn't seem to be able to get 0.5.4-dev working with it, but I don't know enough about the package to be able to get it working.
I would assume tho it would be better to call it the "Lanner LCM" driver/port since it's neither the HD44780 spec nor the LCM-162 spec (at least the comments on the patch make it seem that way.)
well, if the driver is for 0.5.2 I don't think it will work for 0.5.4. But if someone could compile it for 0.5.4 I could integrate with the name you just told…
Ciao,
Michelehi guys
are these good news for me and my allnet fw8888 ore not???
my eforts to intergrad these driver (lcmserver) stops very quicklythx max
-
I really hate to bring up a topic that has been asked before, but I am going to anyway. ::)
I have a portwell NAR 5060, that has the MTB134 (aka EZIO-100) lcd in it. Is there anyone that can get this thing to work with LCDPROC? I see Mikrotek RouterOS supports it, as well as Untangle. There has to be someone who can convert it over.
Pretty please!!! -
Here is a .pdf from portwell with all the data on the EZIO. Maybe someone could use it to make a lcdproc driver for it??????
-
That link doesn't offer much but this does:
http://lists.omnipotent.net/pipermail/lcdproc/2004-January/008494.html :)
Looks like it was never updated for 0.5X though and didn't meet the requirements to be included in lcdproc. Would be a good place to start for someone who knows what they're doing! ;)Steve
-
I already had the link you posted, but just found this. I thought the command functions, as well as the sample c style control program might offer some info.
-
I have a advantech appliance with an lcd on serial 2x16 but i do not know how to configure lcdproc
if someone can help me with this lcd
I posted an archive from their websitethanks
p.s: please delete extension .txt
-
Using the .txt extension causes the file to be corrupted, use .png instead.
Steve
-
ok ..
now it is ok -
The LCM-100 appears to be virtually identical to the early version EZIO/MTB-134. As such no driver exists for lcdproc 0.5X. Yet. :(
Steve
-
thanks….I will use it under linux
but i have another appliance fwa9106 with sample code in attach -
Perhaps I'm not searching for the right thing, but is there any way to keep the backlight on?
I'm using a firebox X-series and it works great with the new dev driver, but considering the rest of the rack never disables the backlights on the status lcd's I'd prefer to be able to read the traffic monitor at a glance, without waking it up. -
The backlight on the firebox LCD is deliberately always on a timer. This is because at least some of the boxes have an LCD with a limited backlight life and most of these boxes have already seen thousands of hours use. There are quite a few reports of failed backlights on the x-core thread.
I'm in favour of allowing users to take the risk as long as they have the facts. The current driver does not have the option though.Steve
-
gotcha- even a few minutes timeout would be a nice option instead of the hard-set one, but I understand :D
-
Any news / progress on the 4 Leds of the CFA635 ?
-
I have been trying to get the right setup to get my Pertelian x2040 to work
: dmesg | grep usb
usbus0: <ohci (generic)="" usb="" controller="">on ohci0
usbus0: 12Mbps Full Speed USB v1.0
ugen0.1: <(0x1166)> at usbus0
uhub0: <(0x1166) OHCI root HUB, class 9/0, rev 1.00/1.00, addr 1> on usbus0
Root mount waiting for: usbus0
ugen0.2: <ftdi>at usbus0
Root mount waiting for: usbus0
uftdi0: <ft245r usb="" fifo="">on usbus0
ugen0.2: <ftdi>at usbus0 (disconnected)
ugen0.2: <ftdi>at usbus0
uftdi0: <ft245r usb="" fifo="">on usbus0I am not sure where I go wrong. I tried alot of things and searched the web for an answer.. Nothing clear yet.
All I get is
"php: lcdproc: Start client procedure. Error counter: (0)"
"php: lcdproc: Failed to connect to LCDd process Operation timed out (60)"I would love to get this working. Any help would be so appreciated. Even a direction in way of how to setup the LCDd.conf file would help.
LCDd.conf.txt</ft245r></ftdi></ftdi></ft245r></ftdi></ohci>
-
I'm having trouble with my Matrix Orbital LK202-25 V1.12
It seems to be setting some pixels to all black. And also always the first and last proceeded by a K: Have a look at the attached image:
I also get this from systemlog:
Apr 12 12:59:01 php: lcdproc: Start client procedure. Error counter: (0)
Apr 12 12:59:00 LCDd: MtxOrb: unable to read device serial number
Apr 12 12:59:00 LCDd: MtxOrb: unable to read device firmware revision
Apr 12 12:59:00 LCDd: MtxOrb: unable to read device type
-
I would love to get this working. Any help would be so appreciated. Even a direction in way of how to setup the LCDd.conf file would help.
Are you using the package or just configuring LCDd.conf for testing purposes? Usually the package generates the lcdd.conf file automatically.
FTDI is a usb to serial interface. To get this working you probably want to direct LCDd to use the usb connected serial port not the USB port directly.
Look in /dev/ without the USB connected. Now connect the USB and look in /dev/ again. You should see some new serial devices have appeared. A 'U' in the name implies they are USB connected.
Use serial port and whatever device appeared in the conf.Steve
Edit: Actually there appears to be special support for that LCD in lcdproc 0.5. Set driver type to hd44780 and connection type to pertelian. Set the port to whatever new serial port you found. You will have to do this manually at the moment because the lcdproc-dev package only supports lcd2usb as a connection type currently. Also your setting will be overwritten at boot! :-\
-
Any news / progress on the 4 Leds of the CFA635 ?
I modified the lcdproc_client.php to work with the CFA635 (driver CFontzPacket) inclusive the 4 LEDs. I also changed the IPSec detection for the IPSec screen (it was not working in the current version).
Led 1 : CPU usage
Led 2 : Interface status
Led 3 : IPSec status
Led 4 : Gateway statusMaybe someone can include this into the package ?
/* $Id$ */ /* lcdproc_client.php Copyright (C) 2007 Seth Mos <seth.mos@xs4all.nl>Copyright (C) 2012 Michele Di Maria <michele@nt2.it>All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1\. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2\. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* trick interface into running this. we are only * calling from useland so this is not a security issue */ require_once("config.inc"); require_once("functions.inc"); require_once("interfaces.inc"); require_once("ipsec.inc"); require_once("/usr/local/pkg/lcdproc.inc"); function get_pfstate() { global $config; $matches = ""; if (isset($config['system']['maximumstates']) and $config['system']['maximumstates'] > 0) $maxstates="/{$config['system']['maximumstates']}"; else $maxstates="/". pfsense_default_state_size(); $curentries = `/sbin/pfctl -si |grep current`; if (preg_match("/([0-9]+)/", $curentries, $matches)) { $curentries = $matches[1]; } return $curentries . $maxstates; } function disk_usage() { $dfout = ""; exec("/bin/df -h | /usr/bin/grep -w '/' | /usr/bin/awk '{ print $5 }' | /usr/bin/cut -d '%' -f 1", $dfout); $diskusage = trim($dfout[0]); return $diskusage; } function mem_usage() { $memory = ""; exec("/sbin/sysctl -n vm.stats.vm.v_page_count vm.stats.vm.v_inactive_count " . "vm.stats.vm.v_cache_count vm.stats.vm.v_free_count", $memory); $totalMem = $memory[0]; $availMem = $memory[1] + $memory[2] + $memory[3]; $usedMem = $totalMem - $availMem; $memUsage = round(($usedMem * 100) / $totalMem, 0); return $memUsage; } /* Calculates non-idle CPU time and returns as a percentage */ function cpu_usage() { $duration = 250000; $diff = array('user', 'nice', 'sys', 'intr', 'idle'); $cpuTicks = array_combine($diff, explode(" ", `/sbin/sysctl -n kern.cp_time`)); usleep($duration); $cpuTicks2 = array_combine($diff, explode(" ", `/sbin/sysctl -n kern.cp_time`)); $totalStart = array_sum($cpuTicks); $totalEnd = array_sum($cpuTicks2); // Something wrapped ?!?! if ($totalEnd <= $totalStart) return 0; // Calculate total cycles used $totalUsed = ($totalEnd - $totalStart) - ($cpuTicks2['idle'] - $cpuTicks['idle']); // Calculate the percentage used $cpuUsage = floor(100 * ($totalUsed / ($totalEnd - $totalStart))); return $cpuUsage; } function get_uptime_stats() { exec("/usr/bin/uptime", $output, $ret); $temp = explode(",", $output[0]); if(stristr($output[0], "day")) { $status = "$temp[0] $temp[1]"; } else { $status = "$temp[0] "; } $status = trim(str_replace(" ", " ", $status)); $status = substr($status, strpos($status, "up ") + 3); return($status); } function get_loadavg_stats() { exec("/usr/bin/uptime", $output, $ret); if(stristr($output[0], "day")) { $temp = explode(" ", $output[0]); $status = "$temp[11] $temp[12] $temp[13]"; } else { $temp = explode(" ", $output[0]); $status = "$temp[10] $temp[11] $temp[12]"; } return($status); } function get_mbuf_stats() { exec("netstat -mb | grep \"mbufs in use\" | awk '{ print $1 }' | cut -d\"/\" -f1", $mbufs_inuse); exec("netstat -mb | grep \"mbufs in use\" | awk '{ print $1 }' | cut -d\"/\" -f3", $mbufs_total); $status = "$mbufs_inuse[0] \/ $mbufs_total[0]"; return($status); } function get_version() { global $g; $version = @file_get_contents("/etc/version"); $version = trim($version); return("{$g['product_name']} {$version}"); } function get_cpufrequency(){ $cpufreqs = ""; exec("/sbin/sysctl -n dev.cpu.0.freq_levels", $cpufreqs); $cpufreqs = explode(" ", trim($cpufreqs[0])); $maxfreq = explode("/", $cpufreqs[0]); $maxfreq = $maxfreq[0]; $curfreq = ""; exec("/sbin/sysctl -n dev.cpu.0.freq", $curfreq); $curfreq = trim($curfreq[0]); $status = "$curfreq\/$maxfreq Mhz"; return($status); } function get_cpufrequency_perc(){ $cpufreqs = ""; exec("/sbin/sysctl -n dev.cpu.0.freq_levels", $cpufreqs); $cpufreqs = explode(" ", trim($cpufreqs[0])); $maxfreq = explode("/", $cpufreqs[0]); $maxfreq = $maxfreq[0]; $curfreq = ""; exec("/sbin/sysctl -n dev.cpu.0.freq", $curfreq); $curfreq = trim($curfreq[0]); $status = $curfreq/$maxfreq * 100; return($status); } function get_interfaces_stats() { global $g; global $config; $ifstatus = array(); $i = 0; $ifdescrs = array('wan' => 'WAN', 'lan' => 'LAN'); for ($j = 1; isset($config['interfaces']['opt' . $j]); $j++) { $ifdescrs['opt' . $j] = $config['interfaces']['opt' . $j]['descr']; } foreach ($ifdescrs as $ifdescr => $ifname){ $ifinfo = get_interface_info($ifdescr); if($ifinfo['status'] == "up") { $online = "Up"; } else { $online = "Down"; } if(!empty($ifinfo['ipaddr'])) { $ip = htmlspecialchars($ifinfo['ipaddr']); } else { $ip = "-"; } $ifstatus[] = htmlspecialchars($ifname) ." [$online]"; } $status = " ". implode(", ", $ifstatus); return($status); } function get_slbd_stats() { global $g; global $config; if (!is_array($config['load_balancer']['lbpool'])) { $config['load_balancer']['lbpool'] = array(); } $a_pool = &$config['load_balancer']['lbpool']; $slbd_logfile = "{$g['varlog_path']}/slbd.log"; $nentries = $config['syslog']['nentries']; if (!$nentries) $nentries = 50; $now = time(); $year = date("Y"); $pstatus = ""; $i = 0; foreach ($a_pool as $vipent) { $pstatus[] = "{$vipent['name']}"; if ($vipent['type'] == "gateway") { $poolfile = "{$g['tmp_path']}/{$vipent['name']}.pool"; if(file_exists("$poolfile")) { $poolstatus = file_get_contents("$poolfile"); } else { continue; } foreach ((array) $vipent['servers'] as $server) { $lastchange = ""; $svr = split("\|", $server); $monitorip = $svr[1]; if(stristr($poolstatus, $monitorip)) { $online = "Up"; } else { $online = "Down"; } $pstatus[] = strtoupper($svr[0]) ." [{$online}]"; } } else { $pstatus[] = "{$vipent['monitor']}"; } } if(count($a_pool) == 0) { $pstatus[] = "Disabled"; } $status = implode(", ", $pstatus); return($status); } function get_carp_stats () { global $g; global $config; if(is_array($config['virtualip']['vip'])) { $carpint = 0; $initcount = 0; $mastercount = 0; $backupcount = 0; foreach($config['virtualip']['vip'] as $carp) { if ($carp['mode'] != "carp") { continue; } $ipaddress = $carp['subnet']; $password = $carp['password']; $netmask = $carp['subnet_bits']; $vhid = $carp['vhid']; $advskew = $carp['advskew']; $carp_int = find_carp_interface($ipaddress); $status = get_carp_interface_status($carp_int); switch($status) { case "MASTER": $mastercount++; break; case "BACKUP": $backupcount++; break; case "INIT": $initcount++; break; } } $status = "M/B/I {$mastercount}/{$backupcount}/{$initcount}"; } else { $status = "CARP Disabled"; } return($status); } function get_ipsec_tunnel_sad() { /* query SAD */ if(file_exists("/usr/local/sbin/setkey")) $fd = @popen("/usr/local/sbin/setkey -D", "r"); else $fd = @popen("/sbin/setkey -D", "r"); $sad = array(); if ($fd) { while (!feof($fd)) { $line = chop(fgets($fd)); if (!$line) continue; if ($line == "No SAD entries.") break; if ($line[0] != "\t") { if (is_array($cursa)) $sad[] = $cursa; $cursa = array(); list($cursa['src'],$cursa['dst']) = explode(" ", $line); $i = 0; } else { $linea = explode(" ", trim($line)); if ($i == 1) { $cursa['proto'] = $linea[0]; $cursa['spi'] = substr($linea[2], strpos($linea[2], "x")+1, -1); } else if ($i == 2) { $cursa['ealgo'] = $linea[1]; } else if ($i == 3) { $cursa['aalgo'] = $linea[1]; } } $i++; } if (is_array($cursa) && count($cursa)) $sad[] = $cursa; pclose($fd); } return($sad); } function get_ipsec_tunnel_src($tunnel) { global $g, $config, $sad; $if = "WAN"; if ($tunnel['interface']) { $if = $tunnel['interface']; $realinterface = convert_friendly_interface_to_real_interface_name($if); $interfaceip = find_interface_ip($realinterface); } return $interfaceip; } function output_ipsec_tunnel_status($tunnel) { global $g, $config, $sad; $if = "WAN"; $interfaceip = get_ipsec_tunnel_src($tunnel); $foundsrc = false; $founddst = false; if(!is_array($sad)) { /* we have no sad array, bail */ return(false); } foreach($sad as $sa) { if($sa['src'] == $interfaceip) $foundsrc = true; if($sa['dst'] == $tunnel['remote-gateway']) $founddst = true; } if($foundsrc && $founddst) { /* tunnel is up */ $iconfn = "pass"; return(true); } else { /* tunnel is down */ $iconfn = "reject"; return(false); } } function get_ipsec_stats_old() { global $g, $config, $sad; $sad = array(); $sad = get_ipsec_tunnel_sad(); $activecounter = 0; $inactivecounter = 0; if($config['ipsec']['tunnel']) { foreach ($config['ipsec']['tunnel'] as $tunnel){ $ipsecstatus = false; $tun_disabled = "false"; $foundsrc = false; $founddst = false; if (isset($tunnel['disabled'])) { $tun_disabled = "true"; continue; } if(output_ipsec_tunnel_status($tunnel)) { /* tunnel is up */ $iconfn = "true"; $activecounter++; } else { /* tunnel is down */ $iconfn = "false"; $inactivecounter++; } } } if (is_array($config['ipsec']['tunnel'])) { $status = "Up/Down $activecounter/$inactivecounter"; } else { $status = "Up/Down $activecounter/$inactivecounter";//"IPSEC Disabled"; } return($status); } function get_ipsec_stats() { global $config; if (isset($config['ipsec']['phase1'])){ $spd = ipsec_dump_spd(); $sad = ipsec_dump_sad(); $activecounter = 0; $inactivecounter = 0; foreach ($config['ipsec']['phase2'] as $ph2ent){ ipsec_lookup_phase1($ph2ent,$ph1ent); $ipsecstatus = false; $tun_disabled = "false"; $foundsrc = false; $founddst = false; if (isset($ph1ent['disabled']) || isset($ph2ent['disabled'])) { $tun_disabled = "true"; continue; } if(ipsec_phase2_status($spd,$sad,$ph1ent,$ph2ent)) { /* tunnel is up */ $iconfn = "true"; $activecounter++; } else { /* tunnel is down */ $iconfn = "false"; $inactivecounter++; } } } if (isset($config['ipsec']['phase1'])){ $status = "Up/Down $activecounter/$inactivecounter"; } else { $status = "IPSEC Disabled"; } return($status); } /* Define functions */ function send_lcd_commands($lcd, $lcd_cmds) { if(!is_array($lcd_cmds) || (empty($lcd_cmds))) { lcdproc_warn("Failed to interpret lcd commands"); return; } while (($cmd_output = fgets($lcd, 8000)) !== false) { if(preg_match("/^huh?/", $cmd_output)) { lcdproc_notice("LCDd output: \"$cmd_output\". Executed \"$lcd_cmd\""); } } foreach($lcd_cmds as $lcd_cmd) { if(! fwrite($lcd, "$lcd_cmd\n")) { lcdproc_warn("Connection to LCDd process lost $errstr ($errno)"); $lcdproc_connect_errors++; return false; } } return true; } function get_lcdpanel_width(){ global $config; $lcdproc_size_config = $config['installedpackages']['lcdproc']['config'][0]; if (is_null($lcdproc_size_config['size'])) { return "16"; } else { $dimensions = split("x", $lcdproc_size_config['size']); return $dimensions[0]; } } function get_lcdpanel_height(){ global $config; $lcdproc_size_config = $config['installedpackages']['lcdproc']['config'][0]; if (is_null($lcdproc_size_config['size'])) { return "2"; } else { $dimensions = split("x", $lcdproc_size_config['size']); return $dimensions[1]; } } function get_lcdpanel_refresh_frequency(){ global $config; $lcdproc_size_config = $config['installedpackages']['lcdproc']['config'][0]; $value = $lcdproc_size_config['refresh_frequency']; if (is_null($value)) { return "5"; } else { return $value; } } function outputled_enabled_CFontzPacket(){ global $config; $lcdproc_config = $config['installedpackages']['lcdproc']['config'][0]; $value = $lcdproc_config['outputleds']; if (is_null($value)) {return false;} else { if ($value && $lcdproc_config['driver'] == "CFontzPacket") {return true;} else {return false;} } } function outputled_enabled_CFontz633(){ global $config; $lcdproc_config = $config['installedpackages']['lcdproc']['config'][0]; $value = $lcdproc_config['outputleds']; if (is_null($value)) {return false;} else { if ($value && $lcdproc_config['driver'] == "CFontz633") {return true;} else {return false;} } } function outputled_carp () { /* Returns the status of CARP for the box. Assumes ALL CARP status are the same for all the intefaces. -1 = CARP Disabled 0 = CARP on Backup 1 = CARP on Master */ global $g; global $config; if(is_array($config['virtualip']['vip'])) { $carpint = 0; foreach($config['virtualip']['vip'] as $carp) { if ($carp['mode'] != "carp") { continue; } $carp_int = find_carp_interface($carp['subnet']); $status = get_carp_interface_status($carp_int); switch($status) { case "MASTER": return 1; break; case "BACKUP": return 0; break; } } } else { return -1; } } function outputled_ipsec () { /* Returns the status of CARP for the box. Assumes ALL CARP status are the same for all the intefaces. -1 = IPSec Disabled 0 = IPSecot least one Tunnel Error 1 = IPSec all Tunnes up */ global $g; global $config; global $config; if (isset($config['ipsec']['phase1'])){ $spd = ipsec_dump_spd(); $sad = ipsec_dump_sad(); $activecounter = 0; $inactivecounter = 0; foreach ($config['ipsec']['phase2'] as $ph2ent){ ipsec_lookup_phase1($ph2ent,$ph1ent); $ipsecstatus = false; $tun_disabled = "false"; $foundsrc = false; $founddst = false; if (isset($ph1ent['disabled']) || isset($ph2ent['disabled'])) { $tun_disabled = "true"; continue; } if(ipsec_phase2_status($spd,$sad,$ph1ent,$ph2ent)) { /* tunnel is up */ $iconfn = "true"; $activecounter++; } else { /* tunnel is down */ $iconfn = "false"; $inactivecounter++; } } } if (isset($config['ipsec']['phase1'])){ if ($inactivecounter == 0) { return 1; } else { return 0; } } else { return -1; } } function outputled_gateway() { /* Returns the status of the gateways. -1 = No gateway defined 0 = At least 1 gateway down or with issues 1 = All gateway up */ global $g; global $config; $gateways_status = array(); $gateways_status = return_gateways_status(true); foreach ($a_gateways as $gname => $gateway) { if ($gateways_status[$gname]['status'] != "none") { return 0; } } return 1; } function get_traffic_stats(&$in_data, &$out_data){ global $config; global $traffic_last_ugmt, $traffic_last_ifin, $traffic_last_ifout; $lcdproc_screen_config = $config['installedpackages']['lcdprocscreens']['config'][0]; /* read the configured interface */ $ifnum = $lcdproc_screen_config['scr_traffic_interface']; /* get the real interface name (code from ifstats.php)*/ $realif = get_real_interface($ifnum); if(!$realif) $realif = $ifnum; // Need for IPSec case interface. /* get the interface stats (code from ifstats.php)*/ $ifinfo = pfSense_get_interface_stats($realif); /* get the current time (code from ifstats.php)*/ $temp = gettimeofday(); $timing = (double)$temp["sec"] + (double)$temp["usec"] / 1000000.0; /* calculate the traffic stats */ $deltatime = $timing - $traffic_last_ugmt; $in_data = "IN: " . formatSpeedBits(((double)$ifinfo['inbytes']-$traffic_last_ifin)/$deltatime); $out_data = "OUT: " . formatSpeedBits(((double)$ifinfo['outbytes']-$traffic_last_ifout)/$deltatime); $traffic_last_ugmt = $timing; $traffic_last_ifin = (double)$ifinfo['inbytes']; $traffic_last_ifout = (double)$ifinfo['outbytes']; } function formatSpeedBits($speed) { /* format speed in bits/sec, input: bytes/sec Code from: graph.php ported to PHP*/ if ($speed < 125000) {return sprintf("%3d.1 Kbps", $speed / 125);} if ($speed < 125000000) {return sprintf("%3d.1 Mbps", $speed / 125000);} // else return sprintf("%3d.1 Gbps", $speed / 125000000); } function add_summary_declaration(&$lcd_cmds, $name) { $lcdpanel_height = get_lcdpanel_height(); $lcdpanel_width = get_lcdpanel_width(); if ($lcdpanel_height >= "4") { $lcd_cmds[] = "widget_add $name title_summary string"; $lcd_cmds[] = "widget_add $name text_summary string"; if ($lcdpanel_width > "16") {$lcd_cmds[] = "widget_set $name title_summary 1 3 \"CPU MEM STATES FREQ\"";} else {$lcd_cmds[] = "widget_set $name title_summary 1 3 \"CPU MEM STATES\"";} } } function add_summary_values(&$lcd_cmds, $name, $lcd_summary_data) { if ($lcd_summary_data != "") { $lcd_cmds[] = "widget_set $name text_summary 1 4 \"{$lcd_summary_data}\""; } } function build_interface($lcd) { global $g; global $config; $lcdproc_screens_config = $config['installedpackages']['lcdprocscreens']['config'][0]; $refresh_frequency = get_lcdpanel_refresh_frequency() * 8; $lcd_cmds = array(); $lcd_cmds[] = "hello"; $lcd_cmds[] = "client_set name pfSense"; /* process screens to display */ if(is_array($lcdproc_screens_config)) { foreach($lcdproc_screens_config as $name => $screen) { if($screen == "on") { switch($name) { case "scr_version": $lcd_cmds[] = "screen_add $name"; $lcd_cmds[] = "screen_set $name heartbeat off"; $lcd_cmds[] = "screen_set $name name $name"; $lcd_cmds[] = "screen_set $name duration $refresh_frequency"; $lcd_cmds[] = "widget_add $name title_wdgt string"; $lcd_cmds[] = "widget_add $name text_wdgt scroller"; $lcd_cmds[] = "widget_set $name title_wdgt 1 1 \"Welcome to\""; break; case "scr_time": $lcd_cmds[] = "screen_add $name"; $lcd_cmds[] = "screen_set $name heartbeat off"; $lcd_cmds[] = "screen_set $name name $name"; $lcd_cmds[] = "screen_set $name duration $refresh_frequency"; $lcd_cmds[] = "widget_add $name title_wdgt string"; $lcd_cmds[] = "widget_add $name text_wdgt scroller"; $lcd_cmds[] = "widget_set $name title_wdgt 1 1 \"+ System Time\""; break; case "scr_uptime": $lcd_cmds[] = "screen_add $name"; $lcd_cmds[] = "screen_set $name heartbeat off"; $lcd_cmds[] = "screen_set $name name $name"; $lcd_cmds[] = "screen_set $name duration $refresh_frequency"; $lcd_cmds[] = "widget_add $name title_wdgt string"; $lcd_cmds[] = "widget_add $name text_wdgt scroller"; $lcd_cmds[] = "widget_set $name title_wdgt 1 1 \"+ System Uptime\""; break; case "scr_hostname": $lcd_cmds[] = "screen_add $name"; $lcd_cmds[] = "screen_set $name heartbeat off"; $lcd_cmds[] = "screen_set $name name $name"; $lcd_cmds[] = "screen_set $name duration $refresh_frequency"; $lcd_cmds[] = "widget_add $name title_wdgt string"; $lcd_cmds[] = "widget_add $name text_wdgt scroller"; $lcd_cmds[] = "widget_set $name title_wdgt 1 1 \"+ System Name\""; break; case "scr_system": $lcd_cmds[] = "screen_add $name"; $lcd_cmds[] = "screen_set $name heartbeat off"; $lcd_cmds[] = "screen_set $name name $name"; $lcd_cmds[] = "screen_set $name duration $refresh_frequency"; $lcd_cmds[] = "widget_add $name title_wdgt string"; $lcd_cmds[] = "widget_add $name text_wdgt scroller"; $lcd_cmds[] = "widget_set $name title_wdgt 1 1 \"+ System Stats\""; break; case "scr_disk": $lcd_cmds[] = "screen_add $name"; $lcd_cmds[] = "screen_set $name heartbeat off"; $lcd_cmds[] = "screen_set $name name $name"; $lcd_cmds[] = "screen_set $name duration $refresh_frequency"; $lcd_cmds[] = "widget_add $name title_wdgt string"; $lcd_cmds[] = "widget_add $name text_wdgt scroller"; $lcd_cmds[] = "widget_set $name title_wdgt 1 1 \"+ Disk Use\""; break; case "scr_load": $lcd_cmds[] = "screen_add $name"; $lcd_cmds[] = "screen_set $name heartbeat off"; $lcd_cmds[] = "screen_set $name name $name"; $lcd_cmds[] = "screen_set $name duration $refresh_frequency"; $lcd_cmds[] = "widget_add $name title_wdgt string"; $lcd_cmds[] = "widget_add $name text_wdgt scroller"; $lcd_cmds[] = "widget_set $name title_wdgt 1 1 \"+ Load Averages\""; break; case "scr_states": $lcd_cmds[] = "screen_add $name"; $lcd_cmds[] = "screen_set $name heartbeat off"; $lcd_cmds[] = "screen_set $name name $name"; $lcd_cmds[] = "screen_set $name duration $refresh_frequency"; $lcd_cmds[] = "widget_add $name title_wdgt string"; $lcd_cmds[] = "widget_add $name text_wdgt scroller"; $lcd_cmds[] = "widget_set $name title_wdgt 1 1 \"+ Traffic States\""; break; case "scr_carp": $lcd_cmds[] = "screen_add $name"; $lcd_cmds[] = "screen_set $name heartbeat off"; $lcd_cmds[] = "screen_set $name name $name"; $lcd_cmds[] = "screen_set $name duration $refresh_frequency"; $lcd_cmds[] = "widget_add $name title_wdgt string"; $lcd_cmds[] = "widget_add $name text_wdgt scroller"; $lcd_cmds[] = "widget_set $name title_wdgt 1 1 \"+ CARP State\""; break; case "scr_ipsec": $lcd_cmds[] = "screen_add $name"; $lcd_cmds[] = "screen_set $name heartbeat off"; $lcd_cmds[] = "screen_set $name name $name"; $lcd_cmds[] = "screen_set $name duration $refresh_frequency"; $lcd_cmds[] = "widget_add $name title_wdgt string"; $lcd_cmds[] = "widget_add $name text_wdgt scroller"; $lcd_cmds[] = "widget_set $name title_wdgt 1 1 \"+ IPsec Tunnels\""; break; case "scr_slbd": $lcd_cmds[] = "screen_add $name"; $lcd_cmds[] = "screen_set $name heartbeat off"; $lcd_cmds[] = "screen_set $name name $name"; $lcd_cmds[] = "screen_set $name duration $refresh_frequency"; $lcd_cmds[] = "widget_add $name title_wdgt string"; $lcd_cmds[] = "widget_add $name text_wdgt scroller"; $lcd_cmds[] = "widget_set $name title_wdgt 1 1 \"+ Load Balancer\""; break; case "scr_interfaces": $lcd_cmds[] = "screen_add $name"; $lcd_cmds[] = "screen_set $name heartbeat off"; $lcd_cmds[] = "screen_set $name name $name"; $lcd_cmds[] = "screen_set $name duration $refresh_frequency"; $lcd_cmds[] = "widget_add $name title_wdgt string"; $lcd_cmds[] = "widget_add $name text_wdgt scroller"; $lcd_cmds[] = "widget_set $name title_wdgt 1 1 \"+ Interfaces\""; break; case "scr_mbuf": $lcd_cmds[] = "screen_add $name"; $lcd_cmds[] = "screen_set $name heartbeat off"; $lcd_cmds[] = "screen_set $name name $name"; $lcd_cmds[] = "screen_set $name duration $refresh_frequency"; $lcd_cmds[] = "widget_add $name title_wdgt string"; $lcd_cmds[] = "widget_add $name text_wdgt scroller"; $lcd_cmds[] = "widget_set $name title_wdgt 1 1 \"+ MBuf Usage\""; break; case "scr_cpufrequency": $lcd_cmds[] = "screen_add $name"; $lcd_cmds[] = "screen_set $name heartbeat off"; $lcd_cmds[] = "screen_set $name name $name"; $lcd_cmds[] = "screen_set $name duration $refresh_frequency"; $lcd_cmds[] = "widget_add $name title_wdgt string"; $lcd_cmds[] = "widget_add $name text_wdgt scroller"; $lcd_cmds[] = "widget_set $name title_wdgt 1 1 \"+ CPU Frequency\""; break; case "scr_traffic": $lcd_cmds[] = "screen_add $name"; $lcd_cmds[] = "screen_set $name heartbeat off"; $lcd_cmds[] = "screen_set $name name $name"; $lcd_cmds[] = "screen_set $name duration $refresh_frequency"; $lcd_cmds[] = "widget_add $name title_wdgt string"; $lcd_cmds[] = "widget_add $name text_wdgt string"; break; } add_summary_declaration($lcd_cmds, $name); } } } send_lcd_commands($lcd, $lcd_cmds); } function loop_status($lcd) { global $g; global $config; global $lcdproc_connect_errors; $lcdproc_screens_config = $config['installedpackages']['lcdprocscreens']['config'][0]; $lcdpanel_width = get_lcdpanel_width(); $lcdpanel_height = get_lcdpanel_height(); if(empty($g['product_name'])) { $g['product_name'] = "pfSense"; } $refresh_frequency = get_lcdpanel_refresh_frequency(); /* keep a counter to see how many times we can loop */ $i = 1; while($i) { /* prepare the summary data */ if ($lcdpanel_height >= "4") { $summary_states = split("/",get_pfstate()); $lcd_summary_data = sprintf("%02d%% %02d%% %6d", cpu_usage(), mem_usage(), $summary_states[0]); if ($lcdpanel_width > "16") { $lcd_summary_data = $lcd_summary_data . sprintf(" %3d%%", get_cpufrequency_perc()); } } else { $lcd_summary_data = "";} $lcd_cmds = array(); /* initializes the widget counter */ $widget_counter = 0; /* controls the output leds */ if (outputled_enabled_CFontz633() | outputled_enabled_CFontzPacket()) { $led_output_value = 0; /* LED 1: CPU Usage */ if (cpu_usage() > 50) {$led_output_value = $led_output_value + pow(2, 4);} else {$led_output_value = $led_output_value + pow(2, 0);} /* LED 2: Interface status */ if (substr_count(get_interfaces_stats(), "Down") > 0 ) {$led_output_value = $led_output_value + pow(2, 5);} else {$led_output_value = $led_output_value + pow(2, 1);} /* LED 3: IPSec status */ switch (outputled_ipsec ()) { case -1:/* IPSec disabled */ case 0: /* IPSec at least one Tunnel with error */ {$led_output_value = $led_output_value + pow(2, 6);} case 1: /* IPSec all Tunnel up */ {$led_output_value = $led_output_value + pow(2, 2);} } /* LED 4: Gateway status */ switch (outputled_gateway()) { case -1:/* Gateways not configured */ case 0: /* Gateway down or with issues */ {$led_output_value = $led_output_value + pow(2, 7);} case 1: /* All Gateways up */ {$led_output_value = $led_output_value + pow(2, 3);} } /* Sends the command to the panel */ $lcd_cmds[] = "output {$led_output_value}"; //$lcd_cmds[] = "output {1111 1111}"; } /* process screens to display */ foreach((array) $lcdproc_screens_config as $name => $screen) { if($screen != "on") { continue; } switch($name) { case "scr_version": $version = get_version(); $lcd_cmds[] = "widget_set $name text_wdgt 1 2 $lcdpanel_width 2 h 4 \"{$version}\""; break; case "scr_time": $time = date("n/j/Y H:i"); $lcd_cmds[] = "widget_set $name text_wdgt 1 2 $lcdpanel_width 2 h 4 \"{$time}\""; break; case "scr_uptime": $uptime = get_uptime_stats(); $lcd_cmds[] = "widget_set $name text_wdgt 1 2 $lcdpanel_width 2 h 4 \"{$uptime}\""; break; case "scr_hostname": exec("/bin/hostname", $output, $ret); $hostname = $output[0]; $lcd_cmds[] = "widget_set $name text_wdgt 1 2 $lcdpanel_width 2 h 4 \"{$hostname}\""; break; case "scr_system": $processor = cpu_usage(); $memory = mem_usage(); $lcd_cmds[] = "widget_set $name text_wdgt 1 2 $lcdpanel_width 2 h 4 \"CPU {$processor}%, Mem {$memory}%\""; break; case "scr_disk": $disk = disk_usage(); $lcd_cmds[] = "widget_set $name text_wdgt 1 2 $lcdpanel_width 2 h 4 \"Disk {$disk}%\""; break; case "scr_load": $loadavg = get_loadavg_stats(); $lcd_cmds[] = "widget_set $name text_wdgt 1 2 $lcdpanel_width 2 h 4 \"{$loadavg}\""; break; case "scr_states": $states = get_pfstate(); $lcd_cmds[] = "widget_set $name text_wdgt 1 2 $lcdpanel_width 2 h 4 \"Cur/Max {$states}\""; break; case "scr_carp": $carp = get_carp_stats(); $lcd_cmds[] = "widget_set $name text_wdgt 1 2 $lcdpanel_width 2 h 4 \"{$carp}\""; break; case "scr_ipsec": $ipsec = get_ipsec_stats(); $lcd_cmds[] = "widget_set $name text_wdgt 1 2 $lcdpanel_width 2 h 4 \"{$ipsec}\""; break; case "scr_slbd": $slbd = get_slbd_stats(); $lcd_cmds[] = "widget_set $name text_wdgt 1 2 $lcdpanel_width 2 h 4 \"{$slbd}\""; break; case "scr_interfaces": $interfaces = get_interfaces_stats(); $lcd_cmds[] = "widget_set $name text_wdgt 1 2 $lcdpanel_width 2 h 4 \"{$interfaces}\""; break; case "scr_mbuf": $mbufstats = get_mbuf_stats(); $lcd_cmds[] = "widget_set $name text_wdgt 1 2 $lcdpanel_width 2 h 4 \"{$mbufstats}\""; break; case "scr_cpufrequency": $cpufreq = get_cpufrequency(); $lcd_cmds[] = "widget_set $name text_wdgt 1 2 $lcdpanel_width 2 h 4 \"{$cpufreq}\""; break; case "scr_traffic": get_traffic_stats($in_data, $out_data); $lcd_cmds[] = "widget_set $name title_wdgt 1 1 \"{$in_data}\""; $lcd_cmds[] = "widget_set $name text_wdgt 1 2 \"{$out_data}\""; break; } if ($name != "scr_traffic_interface") { $widget_counter++; add_summary_values($lcd_cmds, $name, $lcd_summary_data); } } if (send_lcd_commands($lcd, $lcd_cmds)) { $lcdproc_connect_errors = 0; // Reset the error counter } else { //an error occurred return; } if (($refresh_frequency * $widget_counter) > 5) { sleep(5); } else { sleep($refresh_frequency * $widget_counter); } $i++; } } /* Initialize the wan traffic counters */ $traffic_last_ugmt = 0; $traffic_last_ifin = 0; $traffic_last_ifout = 0; /* Initialize the global error counter */ $lcdproc_connect_errors = 0; $lcdproc_max_connect_errors = 3; /* Connect to the LCDd port and interface with the LCD */ while ($lcdproc_connect_errors <= $lcdproc_max_connect_errors) { lcdproc_warn("Start client procedure. Error counter: ($lcdproc_connect_errors)"); sleep(1); $lcd = fsockopen(LCDPROC_HOST, LCDPROC_PORT, $errno, $errstr, 10); stream_set_timeout($lcd, 0 , 25000); // Sets the socket timeout as 25ms if (!$lcd) { lcdproc_warn("Failed to connect to LCDd process $errstr ($errno)"); $lcdproc_connect_errors++; } else { build_interface($lcd); loop_status($lcd); fclose($lcd); } } if ($lcdproc_connect_errors >= $lcdproc_max_connect_errors) { lcdproc_warn("Too many errors, the client ends."); } ?></michele@nt2.it></seth.mos@xs4all.nl>
-
Sorted out my display with thanks to Markus @ lcdproc.
If the following settings could be added to the config page when the "MtxOrb" driver is selected for lcdproc it would be great for Matrix Orbital users:
Type = { lcd | lkd | vfd | vkd }
hasAdjustableBacklight = { yes | no }