Mäta last på 1wire

OWFS - One Wire File System är en Linuxmjukvara som stödjer de flesta kommersiellt tillgängliga 1wire-enheterna. OWFS saknar helt möjligheter att presentera data - detta måste göras med tex RRDTool
Kategoriregler
Vill du visa bilder i ditt inlägg? Använd funktionen "Ladda upp bilaga" nedanför textrutan!
Pen
Wannabe
Inlägg: 5
Blev medlem: 28 maj 2016, 12:20
Ort: Södertälje

Mäta last på 1wire

Inlägg av Pen »

Jag undrar hur man ska tolka parametrarna i "bus.0/interface/statistics" för att förstå hur hårt 1wire bussen är belastad. Jag har nu:

bus_time 1.86675
elapsed_time 705

Ska jag tolka det som att lasten är 1.87/705 = 0.26% ? Det vill säga mäter båda sekunder och från samma noll-tillfälle?

CPU lasten på min Raspberry av owfs är 4.5% vilket isåfall skulle betyda att det är owfs och inte 1wire som är flaskhalsen. Jag kör I2C mastern och pollar för närvarande bara 2 st DS2408 2 ggr i sekunden (för närvarande på ett väldigt slösaktigt vis och utan att använda alarm funktionen).

Bra att veta var man har sina flaskhalsar. Jag ska upp i 15 talet DS2408 innan jag är klar. Dock kommer jag att använda alarmfunktionen då.

Pen
Användarvisningsbild
motoz
Tar hemautomation på allvar
Inlägg: 100
Blev medlem: 02 feb 2015, 15:05
Ort: ostrobothnia

Re: Mäta last på 1wire

Inlägg av motoz »

Det ser det ut så ja: http://owfs.sourceforge.net/statistics.html
BUS utilization
echo "scale=2 ; 100*`cat statistics/bus/bus_time`/`cat statistics/bus/elapsed_time`" | bc
Läser du från uncached? Annars får du väl läsa hur ofta du vill och bussen belastas ändå inte mer.
Open source pellet logger: https://github.com/motoz/PellMon
Pen
Wannabe
Inlägg: 5
Blev medlem: 28 maj 2016, 12:20
Ort: Södertälje

Re: Mäta last på 1wire

Inlägg av Pen »

Ah, den sidan hade jag missat. Tackar.

Ja, jag läser direkt på toppnivån. Eftersom det är en massa I/O pinnar som jag skannar på DS2408 så måste jag läsa utan cach. Jag vill fånga tillståndsändringar minst varje minut [edit: sekund ska det vara]. Men jag kan som sagt reducera lasten rätt kraftigt genom att konfigurera alarm för pinnarna som det gäller och sedan bara polla för alarm med sökfunktionen.

Är det möjligen snabbare att läsa via owserver än via owfs? Spontant känns det inte så. En stack vs ett filsystem.

Pen
Senast redigerad av Pen den 28 maj 2016, 21:40, redigerad totalt 1 gånger.
Användarvisningsbild
motoz
Tar hemautomation på allvar
Inlägg: 100
Blev medlem: 02 feb 2015, 15:05
Ort: ostrobothnia

Re: Mäta last på 1wire

Inlägg av motoz »

Direkt på toppnivån? Betyder det inte att du läser cachade data? Jag använder inte filsystemet owfs, men via owhttpd till owservern så har jag givarna cachade i toppnivån, och en 'uncached' länk där jag kan läsa dem direkt från bussen. Antar att det ser lika ut i owfs-fuse. Jag har inte ändrat inställningarna på cachen och jag har 15 sekunder på settings/timeout/volatile så det är nog standardvärdet. Om jag inte läser via uncached så får jag alltså nytt data från bussen som mest var 15:e sekund.

Owfs eller owserver är ingen skillnad, det är ju samma kod som läser av bussen.
Open source pellet logger: https://github.com/motoz/PellMon
Pen
Wannabe
Inlägg: 5
Blev medlem: 28 maj 2016, 12:20
Ort: Södertälje

Re: Mäta last på 1wire

Inlägg av Pen »

Aha, så du menar att toppnivån har cachade värden. Verkar ju rimligt då jag inte har sett någon mapp som heter "cached". Då är det ju "uncached" som jag borde läsa. Ja, jag är nybörjare...

Det märkliga är att det ändå fungerar. Jag skannar tryckknappar varje sekund och jag kan till och med skilja på en kort (< 1s) respektive lång (> 1s) tryckning på knappen. Det borde inte gå att göra om det vore cachat för då skulle knappen alltid detekteras som nedtryckt i 15 s (om det är default time out). Kan tänkas att owfs är så intelligent att den vet för varje krets vad som kan cachas eller inte och att den då aldrig cachar ren I/O.
Användarvisningsbild
motoz
Tar hemautomation på allvar
Inlägg: 100
Blev medlem: 02 feb 2015, 15:05
Ort: ostrobothnia

Re: Mäta last på 1wire

Inlägg av motoz »

Jag är definitivt ingen expert på OWFS jag heller, och nu gör du mig förvirrad... Du har helt rätt att du inte kan detektera korta knapptryckningar om du läser cachade värden, så det gör du alltså inte. Jag kan tänka mig några förklaringar till att toppnivån är ocachad. Det går att stänga av cachefunktionen helt då man kompilerar (configure --disable-cache), ifall du har kompilerat själv, eller så kan man sätta timeout till 0 i inställningarna (settings/timeout/volatile). Owfs gör skillnad på två sorters värden, 'volatile' och 'stable'. Volatile har 15s timeout som standard och 'stable' har 300s. Jag har inte hittat nåt om att vissa värden skulle vara helt ocachade utan att läsa via 'uncached' men det kan ju vara möjligt. Själv har jag bara några ds1820 och en ds2406, och ds2406 läser jag via uncached för att få ingången direkt från bussen. Men huvudsaken är ju att det fungerar...

Tyckte bara att du har väldigt låg belastning på bussen för att läsa 2 gånger i sekunden. Har faktiskt aldrig kollat det förr, men det ser ut som att jag har 16% belastning med fyra st ds1820 som läses av från cachen och en ds2406 som läses från uncached med nån sekunds mellanrum.
Open source pellet logger: https://github.com/motoz/PellMon
Pen
Wannabe
Inlägg: 5
Blev medlem: 28 maj 2016, 12:20
Ort: Södertälje

Re: Mäta last på 1wire

Inlägg av Pen »

Nu har jag listat ut varför jag får så låg last med statistiken. Jag kör både owfs och owhttp direkt mot 1wire utan mellanliggande owserver. Mitt skannerprogram använder owfs medan jag läser statistiken med owhttp. Så här är det:

elapsed_time: Mäter absolut tid.
bus_time: Mäter tiden som owhttp har belastat bussen! Vilket i praktiken inte är något mer än statistikavläsningarna själva.

För att få ut den korrekta statistiken måste jag även läsa statistiken via filsystemet och inte via http. Alternativt starta owserver och ansluta owfs och owhttp mot owserver - men det är ju inte säkert att det fungerar ändå - det beror på var i koden pseudoräknarna för statistiken ligger. Korrekt statistik ger då 16% busslast.

Vad jag dessutom upptäckte var att jag fick en massa läsfel från owhttp vilket förvånade mig då jag inte har ett enda fel i mitt script som kör owfs. Uppenbarligen jobbar owhttp och owfs oberoende (utan lås) av varandra och när båda accessar bussen så blir det konflikt. Stänger jag av scriptet så blir det inga läsfel från owhttp. Så, ska man köra båda så måste man mellanlanda på owserver. Inte så konstigt egentligen.
Användarvisningsbild
motoz
Tar hemautomation på allvar
Inlägg: 100
Blev medlem: 02 feb 2015, 15:05
Ort: ostrobothnia

Re: Mäta last på 1wire

Inlägg av motoz »

Exakt, owservern ska hantera bussen och de andra sköter om varsit användargränssnitt, annars skriver de på varann. Möjligheten att köra direkt på bussen utan owservern är nog bara en kvarlämnad rest från tiden då owfs var det enda som fanns. Du kommer helt säkert att få rätt statistik om du låter owservern sköta bussen. De andra har då inget med onewirebussen att göra, de bara begär ut data från owservern via ett enkelt protokoll http://owfs.org/index.php?page=owserver-protocol . Ifall du använder python så kan jag rekommendera pyownet för att prata med owservern. https://pypi.python.org/pypi/pyownet , egentligen enklare än att läsa från filsystemet men det är kanske en smaksak.
Open source pellet logger: https://github.com/motoz/PellMon
Skriv svar