hej,
hur kan jag visa värden från en fil som temperatur ?
jag vill i första hand bara visa innetemperatur på nexahomes inbyggda sida , inte styra något.
min termometer skriver decimalt till en fil, värden är 0 - 127 för plusgrader (och noll) och 128 - 256 för minusgrader. och så har jag ett bashscript som översätter det till en humanläsbar form på STDOUT. ~/temp1.sh
kör linux.
Visa temperaturvärde
Re: Visa temperaturvärde
har börjat utforska möjligheten att skriva mina egna sensorevents på ipc socketen /tmp/TelldusEvents
det går lite sådär men hoppas få till det inom kort
det går lite sådär men hoppas få till det inom kort
Re: Visa temperaturvärde
Börja med att:
1) lägga till en ny sensor (klicka på Device/Group/Sensor 'Add' knappen), skriv in ett namn och markera att det är en SENSOR
2) välj sedan "sensor" i 'Function' kolumnen
3) skriv "/home/pi/nexahome/1-wire.bsh" i 'Sensor Path' kolumnen
4) skriv in ett unikt id i 'Parameters' kolumnen, exempelvis "id:1-wire;model:temp"
5) starta om NexaHome
6) lägg till ett event kopplat till den nya sensorn, klicka på 'Add' (event) och se till att rätt device är vald samt HH=00, MM=0 och att 'Default' är markerad.
7) starta om NexaHome
Eventet läggs in för att starta exekvering av bsh filen och det kommer att repeteras var 5:e minut.
1-wire.bsh
1-wire.csv
1) lägga till en ny sensor (klicka på Device/Group/Sensor 'Add' knappen), skriv in ett namn och markera att det är en SENSOR
2) välj sedan "sensor" i 'Function' kolumnen
3) skriv "/home/pi/nexahome/1-wire.bsh" i 'Sensor Path' kolumnen
4) skriv in ett unikt id i 'Parameters' kolumnen, exempelvis "id:1-wire;model:temp"
5) starta om NexaHome
6) lägg till ett event kopplat till den nya sensorn, klicka på 'Add' (event) och se till att rätt device är vald samt HH=00, MM=0 och att 'Default' är markerad.
7) starta om NexaHome
Eventet läggs in för att starta exekvering av bsh filen och det kommer att repeteras var 5:e minut.
1-wire.bsh
Code: Select all
String csvFile = "/home/pi/nexahome/1-wire.csv";
String findRow = "510008014D026D10";
int findColumn = 2;
String delimiter = ",;\t ";
int currentColumn = 1;
boolean found = false;
try {
BufferedReader in;
in = new BufferedReader(new FileReader(csvFile));
String line = null;
do {
line = in.readLine();
if (line != null && line.indexOf(findRow) != -1) {
StringTokenizer st = new StringTokenizer(line, delimiter);
if (st.countTokens() >= findColumn) {
while (currentColumn < findColumn) {
st.nextToken();
currentColumn++;
}
outAppend(st.nextToken());
found = true;
} else {
line = null;
}
}
} while(line != null && !found);
if (line == null) {
errAppend("Unable to find value!");
}
in.close();
} catch(Exception e) {
errAppend(e.getMessage());
}
Code: Select all
"ROMId","Value","dd.mm.yyyy","hh:nn:ss",
"510008014D026D10",-8.82,26.01.2011,18:51:44,
"F60008014CF2B010",5.25,26.01.2011,18:51:41,
"FD0008014D2C1F10",2.75,26.01.2011,18:51:47,
"A000080192AAA610",15.75,26.01.2011,18:51:42,
"3C000801847A7710",-1.00,26.01.2011,18:51:46,
"5E00080192D3DD10",7.38,26.01.2011,18:51:45,
"8A000001112E6226-T",-2.47,26.01.2011,18:51:47,
"8A000001112E6226-DP",-4.76,26.01.2011,18:51:48,
"8A000001112E6226-H",85.01,26.01.2011,18:51:48,
Henrik | http://easyhomeauto.se
Re: Visa temperaturvärde
Tackar, mycket bra förklarat !
går det att ändra intervallet på när eventen körs ? Hos mig körs de varje minut, var 10:e minut skulle räcka. Vi ska inte stressa våra datorer.
t.v. går jag runt det exempelvis så?:
går det att ändra intervallet på när eventen körs ? Hos mig körs de varje minut, var 10:e minut skulle räcka. Vi ska inte stressa våra datorer.
t.v. går jag runt det exempelvis så?:
Code: Select all
import java.util.date;
Date datum = new Date();
if ( datum.getMinutes() % 10 = 0 ) {
// gör mina relaterade saker här ...
}
Re: Visa temperaturvärde
Hämta den senaste versionen av EasyHome och testa därefter med följande filer.
start.bsh
1-wire-test.bsh
1-wire-sensor.bsh
start.bsh
Code: Select all
startTimer("1-wire-test", 2 * 60); // 2 minutes
Code: Select all
execFile("1-wire-sensor.bsh");
execParam("5E00080192D3DD10");
execParam("114");
startTimer("1-wire-test", 10 * 60); // 10 minutes
Code: Select all
String csvFile = "/home/pi/nexahome/1-wire.csv";
String findRow = "510008014D026D10";
String device = "114";
bsh_file = "1-wire-sensor";
params = getData(bsh_file + ".params_");
if (params != null) {
var len = Integer.parseInt(params);
if (len >= 2) {
findRow = getData(bsh_file + ".param1_");
device = getData(bsh_file + ".param2_");
setData(bsh_file + ".params_", 0); // mark all params read
}
}
int findColumn = 2;
String delimiter = ",;\t ";
int currentColumn = 1;
boolean found = false;
try {
BufferedReader in;
in = new BufferedReader(new FileReader(csvFile));
String line = null;
do {
line = in.readLine();
if (line != null && line.indexOf(findRow) != -1) {
StringTokenizer st = new StringTokenizer(line, delimiter);
if (st.countTokens() >= findColumn) {
while (currentColumn < findColumn) {
st.nextToken();
currentColumn++;
}
setSensorValue(device, st.nextToken());
found = true;
} else {
line = null;
}
}
} while(line != null && !found);
if (line == null) {
echo("Unable to find value!");
}
in.close();
} catch(Exception e) {
echo(e.getMessage());
}
Henrik | http://easyhomeauto.se
Re: Visa temperaturvärde
så då uppdateras filen i exemplet av 1-wire-test - timern , var 10:e minut och läses av sensor-eventet ( 1-wire.bsh) varje minut ?
jag provade lite smått med en weather_msn som skriver temperaturen till en fil och det funkar ju där i alla fall.
jag provade lite smått med en weather_msn som skriver temperaturen till en fil och det funkar ju där i alla fall.