Tips: Drifttidsmätare

Moderators: hekj, Telldus

Tips: Drifttidsmätare

Postby hekj » Sun Jan 15, 2017 10:37 am

Den som vill veta hur länge en viss device har varit påslagen kan fixa detta genom att först skapa en fil som innehåller de enheters deviceid som man vill hålla koll på, därefter skapar man tre scripts.

C:/apps/nexahome/minute_meter.txt
Code: Select all
3=0
5=0

start.bsh
Code: Select all
startTimer(minute_meter, 60);

minute_meter.bsh
Code: Select all
import java.text.SimpleDateFormat;

scriptName = getScriptName();
timeout = 60;
sumFile = "C:/apps/nexahome/minute_meter.txt";
comment = "Devices has been turned on for x minutes.";

day_script = "minute_meter_today.bsh";
day_file_prefix = "C:/apps/nexahome/minute_meter.";
day_file_date_format = "yyyy-MM-dd";
day_file_suffix = ".txt";

Properties prop = new Properties();
InputStream is = null;
OutputStream os = null;

updated = false;

try {

  is = new FileInputStream(sumFile);
  prop.load(is);

  keys = prop.keys();
  while (keys.hasMoreElements()) {
    String id = (String)keys.nextElement();
    String value = prop.getProperty(id);
    long minutes = Long.parseLong(value);
    if (deviceIsOn(id)) {
      updated = true;
      minutes = minutes + 1;
      SimpleDateFormat sdf = new SimpleDateFormat(day_file_date_format);
      date = sdf.format(Calendar.getInstance().getTime());
      execFile(day_script);
      execParam(day_file_prefix + date + day_file_suffix);
      execParam(id);
    }
    prop.setProperty(id, Long.toString(minutes));
  }

  if (updated) {
    os = new FileOutputStream(sumFile);
    prop.store(os, comment);
  }

  startTimer(scriptName, timeout);
  hideOutput();

} catch (IOException ioe) {
  echo(ioe.getMessage());
} finally {
  if (is != null) {
    try {
      is.close();
    } catch (IOException ioe) {
      echo(ioe.getMessage());
    }
  }
  if (os != null) {
    try {
      os.close();
    } catch (IOException ioe) {
      echo(ioe.getMessage());
    }
  }
}

minute_meter_today.bsh
Code: Select all
dayFile = "";
id = "";

comment = "Devices has been turned on for x minutes today.";
scriptName = getScriptName();

params = getParams(scriptName);
if (params != null) {
  var len = Integer.parseInt(params);
  if (len >= 2) {
    dayFile = getParam(scriptName, 1);  // first
    id = getParam(scriptName, 2); // second
  }
}

if (dayFile != null && dayFile.length() != 0 && id != null && id.length() != 0) {
  InputStream is = null;
  OutputStream os = null;

  try {

    updated = false;
    Properties prop = new Properties();

    File f = new File(dayFile);
    if (f.exists()) {
      is = new FileInputStream(f);
      prop.load(is);
    }

    String value = prop.getProperty(id);
    if (value == null) {
      value = "0";
    }
    long minutes = Long.parseLong(value);
    if (deviceIsOn(id)) {
        updated = true;
        minutes = minutes + 1;
    }
    prop.setProperty(id, Long.toString(minutes));

    if (updated) {
      os = new FileOutputStream(f);
      prop.store(os, comment);
    }
 
    hideOutput();

  } catch (IOException ioe) {
    echo(ioe.getMessage());
  } finally {
    if (is != null) {
      try {
        is.close();
      } catch (IOException ioe) {
        echo(ioe.getMessage());
      }
    }
    if (os != null) {
      try {
        os.close();
      } catch (IOException ioe) {
        echo(ioe.getMessage());
      }
    }
  }
}

Ovanstående script använder sig av metoderna getScriptName(), getParams() samt getParam() som finns i version 4.1.10 och senare.

Updaterad: 2017-02-21
hekj
 
Posts: 978
Joined: Mon Jan 05, 2009 10:34 am
Location: Stockholm

Re: Tips: Drifttidsmätare

Postby Leffe » Sun Jan 15, 2017 2:46 pm

Ja det är ju helt strålande !!!
Klockren funktion , som jag länge önskat
Tack igen för ett strålande program :D :D
Leffe
 
Posts: 73
Joined: Sun Jan 05, 2014 2:45 pm

Re: Tips: Drifttidsmätare

Postby Silversurfaren » Sat Jan 21, 2017 10:43 am

Trevlig funktion men lite synd att att en återstart av timern varje minut resulterar i ett entry i Console-loggen vilket gör att den snabbt känns 'översvämmad'. Jag upplever att i, åtminstone, detta fallet skulle det vara trevligt att kunna utesluta drifttidsmätningen...

Finns det något sätt att kanske kunna filtrera vad man vill ska gå in i Console-loggen?
Silversurfaren
 
Posts: 9
Joined: Fri Nov 13, 2015 6:12 am
Location: Linköping

Re: Tips: Drifttidsmätare

Postby hekj » Sat Jan 21, 2017 12:43 pm

Silversurfaren wrote:Trevlig funktion men lite synd att att en återstart av timern varje minut resulterar i ett entry i Console-loggen vilket gör att den snabbt känns 'översvämmad'. Jag upplever att i, åtminstone, detta fallet skulle det vara trevligt att kunna utesluta drifttidsmätningen...

Finns det något sätt att kanske kunna filtrera vad man vill ska gå in i Console-loggen?

Lägg in följande rad.
Code: Select all
hideOutput();
hekj
 
Posts: 978
Joined: Mon Jan 05, 2009 10:34 am
Location: Stockholm

Re: Tips: Drifttidsmätare

Postby Silversurfaren » Sat Jan 21, 2017 2:47 pm

Precis vad jag sökte, det var ju nästan för enkelt... :)

Tack!
Silversurfaren
 
Posts: 9
Joined: Fri Nov 13, 2015 6:12 am
Location: Linköping

Re: Tips: Drifttidsmätare

Postby Leffe » Tue Feb 07, 2017 11:22 am

Hej Igen
som jag sagt tidigare en fantastisk funktion , men skulle det på något sätt gå att få en fil för varje dygn ?? . det vore ju pricken över I :D :D
Leffe
 
Posts: 73
Joined: Sun Jan 05, 2014 2:45 pm

Re: Tips: Drifttidsmätare

Postby Silversurfaren » Wed Feb 15, 2017 6:20 am

Leffe wrote:Hej Igen
som jag sagt tidigare en fantastisk funktion , men skulle det på något sätt gå att få en fil för varje dygn ?? . det vore ju pricken över I :D :D


Går att lösa, jag ville också ha en fil/dygn och lät ett shell-script och crontab hantera det hela.
Silversurfaren
 
Posts: 9
Joined: Fri Nov 13, 2015 6:12 am
Location: Linköping

Re: Tips: Drifttidsmätare

Postby Leffe » Wed Feb 15, 2017 6:53 am

Silversurfaren wrote:
Leffe wrote:Hej Igen
som jag sagt tidigare en fantastisk funktion , men skulle det på något sätt gå att få en fil för varje dygn ?? . det vore ju pricken över I :D :D


Går att lösa, jag ville också ha en fil/dygn och lät ett shell-script och crontab hantera det hela.


Hej låter ju bra,är det något du vill dela med oss som inte är så kunniga att skapa script mm :D
Leffe
 
Posts: 73
Joined: Sun Jan 05, 2014 2:45 pm

Re: Tips: Drifttidsmätare

Postby Silversurfaren » Wed Feb 15, 2017 6:14 pm

Det finns många sätt att göra de på och min lösning är enkel och byter bara namn på min minuteMeter.txt och lägger datum (DATE) till filnamnet och kopierar sedan en tom fil där enheterna finns angivna (minuteMeter.base) till den fil som funktionen sedan forsatt skriver till (minuteMeter.txt).

scriptet ser ut så här:
#!/bin/bash

DATE=$(date +"%Y-%m-%d_%H:%M:%S")

# Move latest minuteMeter.txt and rename
sudo mv /home/pi/minuteMeter.txt /home/pi/minuteMeter-$DATE.txt

# New empty file
cp /home/pi/minuteMeter.base /home/pi/minuteMeter.txt

-----------------------------
Sedan anropar jag det här scriptet kl.12 varje dag med hjälp av crontab:

# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
00 12 * * * /home/pi/minuteMeterLog.sh
Silversurfaren
 
Posts: 9
Joined: Fri Nov 13, 2015 6:12 am
Location: Linköping

Re: Tips: Drifttidsmätare

Postby Leffe » Thu Feb 16, 2017 10:20 am

Silversurfaren wrote:Det finns många sätt att göra de på och min lösning är enkel och byter bara namn på min minuteMeter.txt och lägger datum (DATE) till filnamnet och kopierar sedan en tom fil där enheterna finns angivna (minuteMeter.base) till den fil som funktionen sedan forsatt skriver till (minuteMeter.txt).

scriptet ser ut så här:
#!/bin/bash

DATE=$(date +"%Y-%m-%d_%H:%M:%S")

# Move latest minuteMeter.txt and rename
sudo mv /home/pi/minuteMeter.txt /home/pi/minuteMeter-$DATE.txt

# New empty file
cp /home/pi/minuteMeter.base /home/pi/minuteMeter.txt
k
Hej och tack men jag ser nu att du kör på en RPI , så jag får fortsätta att hoppas på att "hekj " vill och orkar förbarma sej över en lösning :D :D :D :D
-----------------------------
Sedan anropar jag det här scriptet kl.12 varje dag med hjälp av crontab:

# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
00 12 * * * /home/pi/minuteMeterLog.sh
Leffe
 
Posts: 73
Joined: Sun Jan 05, 2014 2:45 pm

Re: Tips: Drifttidsmätare

Postby hekj » Tue Feb 21, 2017 4:08 pm

Har uppdaterat första inlägget!

Observera att en ny version av NexaHome måste användas.
hekj
 
Posts: 978
Joined: Mon Jan 05, 2009 10:34 am
Location: Stockholm

Re: Tips: Drifttidsmätare

Postby Pee » Sun Feb 26, 2017 11:15 am

Jag har provat den första 'utgåvan' utan problem men när jag provar den uppdaterade versionen men får felmeddelande i konsolen.

Code: Select all
2017-02-26 10:37:02 There was an error in evaluating the script (minute_meter.bsh): Parse error at line 41, column 3.  Encountered: if
2017-02-26 10:37:02   if (updated) {


Jag kör på en pi och har ändrat C:/apps/ till /home/pi/ på 2 ställen i minute_meter.bsh samt uppdaterat NexaHome till ver. 4.10.
Pee
 
Posts: 31
Joined: Mon Sep 08, 2014 5:56 pm

Re: Tips: Drifttidsmätare

Postby hekj » Sun Feb 26, 2017 2:20 pm

Pee wrote:Jag har provat den första 'utgåvan' utan problem men när jag provar den uppdaterade versionen men får felmeddelande i konsolen.
Code: Select all
2017-02-26 10:37:02 There was an error in evaluating the script (minute_meter.bsh): Parse error at line 41, column 3.  Encountered: if
2017-02-26 10:37:02   if (updated) {

Jag kör på en pi och har ändrat C:/apps/ till /home/pi/ på 2 ställen i minute_meter.bsh samt uppdaterat NexaHome till ver. 4.10.

Konstigt... jag har nu gjort som du skriver, dvs kopierat scriptet till min pi samt ändrat på två ställen och det funkar där!
hekj
 
Posts: 978
Joined: Mon Jan 05, 2009 10:34 am
Location: Stockholm

Re: Tips: Drifttidsmätare

Postby Pee » Sun Feb 26, 2017 6:12 pm

Jag gjorde om kopieringen och nu funkar det. :oops: Det var säkert nåt skräp som följde med. :?
Hur som helst, tack för svaret! :wave:

Hur kan man läsa ut värdena i filerna så att man kan t.ex. visa dem på en webbsida, eller lägga in dem i en sträng?
Pee
 
Posts: 31
Joined: Mon Sep 08, 2014 5:56 pm


Return to NexaHome

Who is online

Users browsing this forum: No registered users and 5 guests