mSata LED konfigurace


#1

Nainstaloval jsem mSATA SSD do prvního slotu PCI3 podle instrukcí v oficiálním videu. Přesunul menší kartu wi-fi do posledního slotu PCI1.
Kontrolka PCI3 je zapnutá, chci aby odrážela aktivitu disku mSATA SSD. Nevím jak nastavit v uživatelské rozhraní Foris.

Na tomto forum jsem našel nějaké návody ale nic nefunguje, LED dioda PCI3 jen svítí.


#2

Podľa doc.turris.cz je PCI1 najbližšie k CPU a PCI3 najbližšie ku kraju, alebo sa mýlim?


#3

Bohužel, jádro nepodporuje mSATA trigger (taky mám mSATA a taky mi to nejde) - pouze můžete zvolit USB. :frowning:
Pokud by jse chtěl k něčemu použít tu LED z PCI3, musíte pravidlo “Auto-configuration for PCI3” smazat nebo přejmenovat na něco jiného - jinak by se LED znova automaticky překonfigurovala.


#4

Napísal som program v lua. Využil som led na ktorú mám pripojený mSATA radič (u mňa je to pci1). Ak by ste mali o program záujem napíšte? Beži ako service!


#5

U mě to je momentálně bezpřednětné, mám nainstalován OpenWrt 18.06 a ten nemá kmoduly pro LED - ale podělit se můžete.


#6

Keďže bol záujem publikujem program na použitie. Je napísaní pre Omniu ale prerobiť ho môžete ako chcete. Predpokladám znalosť spúšťania servisov a znalosť OS Linux.
Úvod.
Radič mSATA je umiestnený v niektorom PCI slote. Má piny pre led aktivitu diskov. Ale to je treba ťahať ledku z vnútra von, hoci omnia ma lediek dosť aj ta pre mSATA radič je nepoužitá!
Preto som sa rozhodol použiť ledku prináležiacu pozícii mSATA radiču.
Ako naprogramovať aktivitu diskov na ledke? Keďže mám dva disky v RAID1 (s btrfs) a jeden backup disk na USB porte budem ich aktivitu rozlišovať farbou R G a B. Aktivitu diskov získavam zo súboru /proc/diskstats.
Pre správnu činnosť programu je potrebne nastaviť aktivitu led PCI1 nasledovne:
/etc/config/system

config led
        option sysfs 'omnia-led:pci1'
        option name 'uSata PCI1'
        option trigger 'none'
        option default '1'

Súbor v /etc/init.d/omnia-disksled-color vyzerá nasledovne:

#!/bin/sh /etc/rc.common

START=100

USE_PROCD=1
NAME=omnia-disksled-color.lua
PROG=/root/tools/omnia-disksled-color/omnia-disksled-color.lua

start_service() {
	procd_open_instance
	procd_set_param command "$PROG"
	procd_close_instance

}

stop() {
	service_stop "$PROG"

}

reload() {
	service_reload "$PROG"
}

A nakoniec vlastný súbor je umiestnený v
/root/tools/omnia-disksled-color/omnia-disksled-color.lua

#!/usr/bin/lua

local io = require "io"
local socket = require("socket")

local wait = 0.75		--> cakanie medzi testami (zatazuje CPU)

-- posledne hodnoty rozdielu sum
local last0 = 0
local last1 = 0
local last2 = 0

-- posledny zapis barvy
local lastR = 0
local lastG = 0
local lastB = 0

function debug_print(s)
  -- uncomment this to print debug messages
  --print(s)
end

function sleep(sec)
    socket.sleep(sec)
end

function write_led(ledname, r, g, b)
  local fd = io.open("/sys/class/leds/omnia-led:"..ledname.."/color", "w")  --> mena vsetkych led (mena su ine ako v rainbow)
  fd:write(r .. " " .. g .. " " .. b)
  fd:close()
end

function gather_disks_status()
 local red = 0
 local green = 0
 local blue = 0

 local devfd = io.open("/proc/diskstats", "r")

  for line in devfd:lines() do
    local read_sectors, write_sectors, sum
--  print(line)
--                  -2      -1    0      1     2     3      4      5       6     7     8     9    10    11
    local pat = "%s+%d+%s+%d+%s+(%S+)%s+%d+%s+%d+%s+(%d+)%s+%d+%s+(%d+)%s+%d+%s+%d+%s+%d+%s+%d+%s+%d+%s+%d+"
    _, _, hdd, read_sectors, write_sectors = string.find(line, pat)

    if hdd == "sda" then
	sum = read_sectors + write_sectors
	if ( sum - last0 ) == 0 then
	    red = 0
	else
	    red = 255
	end
	last0 = sum
--	print(hdd, read_sectors, write_sectors)
--	print("+ if sda")
    elseif hdd == "sdb" then
	sum = read_sectors + write_sectors
	if ( sum - last1 ) == 0 then
	    green = 0
	else
	    green = 255
	end
	last1 = sum
--	print(hdd, read_sectors, write_sectors)
--	print("+ if sdb")
    elseif hdd == "sdc" then
	sum = read_sectors + write_sectors
	if ( sum - last2 ) == 0 then
	    blue = 0
	else
	    blue = 255
	end
	last2 = sum
--	print(hdd, read_sectors, write_sectors)
--	print("+ if sdc")
    end
  end
  -- uzavreme otvoreny file
  devfd:close()

  -- boli zmeny last a actual colors
  if ( (red ~= lastR) or (green ~= lastG) or (blue ~= lastB) ) then
	write_led("pci1", red, green, blue)				--> tu zmente pre svoju led
--	print(red, lastR, green, lastG, blue, lastB )
	lastR = red
	lastG = green
	lastB = blue
  end

end

io.popen("rainbow pci1 enable")						--> tiez zmenit pre svoju led

while true do
    gather_disks_status()
    sleep(wait)
end

mSATA radič v mojom prípade je najvzdialenejšom slote od CPU a ma ledku PCI1.

Samozrejme že sa dá program stále vylepšovať! Použitím napríklad luajit by mal byť program rýchlejší. Aktuálna verzia luajit je nepoužiteľná. Štruktúrovanie programu nebolo zachované! Škoda …
Pre @RomanHK otázka. Prosím ťa, co nechodí na Omnii s OpenWRT s 16.06.02? Ak budeš mať čas prosím napíš.
Edit1: použite [code] [/code ] pre lepšiu citatelnost. Samozrejme bez medzier vo vnútri hranatých zátvoriek.


#7

Pro @icingaj: Asi takhe - Turris OS4 vychází z OpenWrt 18.06 a bohužel jádro nemá plnou podporu Omnia základový desky, více se dočteš zde: Turris OS 4.0 alpha2 is out!
Jsou tam popsaný verze Turisů a co na nich nechodí a další diskuze.