mirror of
https://github.com/oliexdev/openScale.git
synced 2025-08-22 08:13:43 +02:00
add internal basic support for multiple users.
This commit is contained in:
@@ -61,11 +61,12 @@ public class OpenScale {
|
||||
return scaleDBEntries;
|
||||
}
|
||||
|
||||
public void addScaleData(String date_time, float weight, float fat,
|
||||
public void addScaleData(int user_id, String date_time, float weight, float fat,
|
||||
float water, float muscle) {
|
||||
ScaleData scaleData = new ScaleData();
|
||||
|
||||
try {
|
||||
scaleData.user_id = user_id;
|
||||
scaleData.date_time = dateTimeFormat.parse(date_time);
|
||||
scaleData.weight = weight;
|
||||
scaleData.fat = fat;
|
||||
@@ -103,11 +104,12 @@ public class OpenScale {
|
||||
|
||||
ScaleData newScaleData = new ScaleData();
|
||||
|
||||
newScaleData.date_time = dateTimeFormat.parse(csvField[0]);
|
||||
newScaleData.weight = Float.parseFloat(csvField[1]);
|
||||
newScaleData.fat = Float.parseFloat(csvField[2]);
|
||||
newScaleData.water = Float.parseFloat(csvField[3]);
|
||||
newScaleData.muscle = Float.parseFloat(csvField[4]);
|
||||
newScaleData.user_id = Integer.parseInt(csvField[0]);
|
||||
newScaleData.date_time = dateTimeFormat.parse(csvField[1]);
|
||||
newScaleData.weight = Float.parseFloat(csvField[2]);
|
||||
newScaleData.fat = Float.parseFloat(csvField[3]);
|
||||
newScaleData.water = Float.parseFloat(csvField[4]);
|
||||
newScaleData.muscle = Float.parseFloat(csvField[5]);
|
||||
|
||||
scaleDB.insertEntry(newScaleData);
|
||||
|
||||
@@ -133,6 +135,7 @@ public class OpenScale {
|
||||
OutputStreamWriter csvWriter = new OutputStreamWriter(outputStream);
|
||||
|
||||
for (ScaleData scaleData : scaleDBEntries) {
|
||||
csvWriter.append(Integer.toString(scaleData.user_id) + ",");
|
||||
csvWriter.append(dateTimeFormat.format(scaleData.date_time) + ",");
|
||||
csvWriter.append(Float.toString(scaleData.weight) + ",");
|
||||
csvWriter.append(Float.toString(scaleData.fat) + ",");
|
||||
@@ -237,6 +240,7 @@ public class OpenScale {
|
||||
try {
|
||||
int checksum = 0;
|
||||
|
||||
checksum ^= Integer.parseInt(csvField[0]);
|
||||
checksum ^= Integer.parseInt(csvField[1]);
|
||||
checksum ^= Integer.parseInt(csvField[2]);
|
||||
checksum ^= Integer.parseInt(csvField[3]);
|
||||
@@ -250,7 +254,8 @@ public class OpenScale {
|
||||
int btChecksum = Integer.parseInt(csvField[10]);
|
||||
|
||||
if (checksum == btChecksum) {
|
||||
scaleBtData.id = Long.parseLong(csvField[0]);
|
||||
scaleBtData.id = -1;
|
||||
scaleBtData.user_id = Integer.parseInt(csvField[0]);
|
||||
String date_string = csvField[1] + "/" + csvField[2] + "/" + csvField[3] + "/" + csvField[4] + "/" + csvField[5];
|
||||
scaleBtData.date_time = new SimpleDateFormat("yyyy/MM/dd/HH/mm").parse(date_string);
|
||||
|
||||
|
@@ -20,6 +20,7 @@ import java.util.Date;
|
||||
|
||||
public class ScaleData {
|
||||
public long id;
|
||||
public int user_id;
|
||||
public Date date_time;
|
||||
public float weight;
|
||||
public float fat;
|
||||
@@ -29,6 +30,6 @@ public class ScaleData {
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return "ID : " + id + " DATE_TIME: " + date_time.toString() + " WEIGHT: " + weight + " FAT: " + fat + " WATER: " + water + " MUSCLE: " + muscle;
|
||||
return "ID : " + id + " USER_ID: " + user_id + " DATE_TIME: " + date_time.toString() + " WEIGHT: " + weight + " FAT: " + fat + " WATER: " + water + " MUSCLE: " + muscle;
|
||||
}
|
||||
}
|
||||
|
@@ -36,6 +36,7 @@ public class ScaleDatabase extends SQLiteOpenHelper {
|
||||
|
||||
private static final String TABLE_NAME = "scaledata";
|
||||
private static final String COLUMN_NAME_ID = "id";
|
||||
private static final String COLUMN_NAME_USER_ID = "user_id";
|
||||
private static final String COLUMN_NAME_DATE_TIME = "date_time";
|
||||
private static final String COLUMN_NAME_WEIGHT = "weight";
|
||||
private static final String COLUMN_NAME_FAT = "fat";
|
||||
@@ -45,6 +46,7 @@ public class ScaleDatabase extends SQLiteOpenHelper {
|
||||
private static final String SQL_CREATE_ENTRIES =
|
||||
"CREATE TABLE " + TABLE_NAME + " (" +
|
||||
COLUMN_NAME_ID + " INTEGER PRIMARY KEY," +
|
||||
COLUMN_NAME_USER_ID + " INTEGER," +
|
||||
COLUMN_NAME_DATE_TIME + " TEXT UNIQUE," +
|
||||
COLUMN_NAME_WEIGHT + " REAL," +
|
||||
COLUMN_NAME_FAT + " REAL," +
|
||||
@@ -89,6 +91,7 @@ public class ScaleDatabase extends SQLiteOpenHelper {
|
||||
return false;
|
||||
} else {
|
||||
ContentValues values = new ContentValues();
|
||||
values.put(COLUMN_NAME_USER_ID, scaleData.user_id);
|
||||
values.put(COLUMN_NAME_DATE_TIME, formatDateTime.format(scaleData.date_time));
|
||||
values.put(COLUMN_NAME_WEIGHT, scaleData.weight);
|
||||
values.put(COLUMN_NAME_FAT, scaleData.fat);
|
||||
@@ -195,6 +198,7 @@ public class ScaleDatabase extends SQLiteOpenHelper {
|
||||
|
||||
String[] projection = {
|
||||
COLUMN_NAME_ID,
|
||||
COLUMN_NAME_USER_ID,
|
||||
COLUMN_NAME_DATE_TIME,
|
||||
COLUMN_NAME_WEIGHT,
|
||||
COLUMN_NAME_FAT,
|
||||
@@ -228,6 +232,7 @@ public class ScaleDatabase extends SQLiteOpenHelper {
|
||||
ScaleData dataEntry = new ScaleData();
|
||||
|
||||
dataEntry.id = cursorScaleDB.getLong(cursorScaleDB.getColumnIndexOrThrow(COLUMN_NAME_ID));
|
||||
dataEntry.user_id = cursorScaleDB.getInt(cursorScaleDB.getColumnIndexOrThrow(COLUMN_NAME_USER_ID));
|
||||
String date_time = cursorScaleDB.getString(cursorScaleDB.getColumnIndexOrThrow(COLUMN_NAME_DATE_TIME));
|
||||
dataEntry.weight = cursorScaleDB.getFloat(cursorScaleDB.getColumnIndexOrThrow(COLUMN_NAME_WEIGHT));
|
||||
dataEntry.fat = cursorScaleDB.getFloat(cursorScaleDB.getColumnIndexOrThrow(COLUMN_NAME_FAT));
|
||||
@@ -256,6 +261,7 @@ public class ScaleDatabase extends SQLiteOpenHelper {
|
||||
|
||||
String[] projection = {
|
||||
COLUMN_NAME_ID,
|
||||
COLUMN_NAME_USER_ID,
|
||||
COLUMN_NAME_DATE_TIME,
|
||||
COLUMN_NAME_WEIGHT,
|
||||
COLUMN_NAME_FAT,
|
||||
@@ -282,6 +288,7 @@ public class ScaleDatabase extends SQLiteOpenHelper {
|
||||
ScaleData dataEntry = new ScaleData();
|
||||
|
||||
dataEntry.id = cursorScaleDB.getLong(cursorScaleDB.getColumnIndexOrThrow(COLUMN_NAME_ID));
|
||||
dataEntry.user_id = cursorScaleDB.getInt(cursorScaleDB.getColumnIndexOrThrow(COLUMN_NAME_USER_ID));
|
||||
String date_time = cursorScaleDB.getString(cursorScaleDB.getColumnIndexOrThrow(COLUMN_NAME_DATE_TIME));
|
||||
dataEntry.weight = cursorScaleDB.getFloat(cursorScaleDB.getColumnIndexOrThrow(COLUMN_NAME_WEIGHT));
|
||||
dataEntry.fat = cursorScaleDB.getFloat(cursorScaleDB.getColumnIndexOrThrow(COLUMN_NAME_FAT));
|
||||
@@ -291,7 +298,6 @@ public class ScaleDatabase extends SQLiteOpenHelper {
|
||||
dataEntry.date_time = formatDateTime.parse(date_time);
|
||||
|
||||
scaleDBEntries.add(dataEntry);
|
||||
//Log.d("ScaleDatabase", dataEntry.toString());
|
||||
|
||||
cursorScaleDB.moveToNext();
|
||||
}
|
||||
|
@@ -160,7 +160,8 @@ public class NewEntryActivity extends Activity {
|
||||
if (validateInput())
|
||||
{
|
||||
OpenScale openScale = OpenScale.getInstance(context);
|
||||
|
||||
|
||||
int user_id = 0;
|
||||
float weight = Float.valueOf(txtWeight.getText().toString());
|
||||
float fat = Float.valueOf(txtFat.getText().toString());
|
||||
float water = Float.valueOf(txtWater.getText().toString());
|
||||
@@ -169,7 +170,7 @@ public class NewEntryActivity extends Activity {
|
||||
String date = txtDate.getText().toString();
|
||||
String time = txtTime.getText().toString();
|
||||
|
||||
openScale.addScaleData(date + " " + time, weight, fat, water, muscle);
|
||||
openScale.addScaleData(user_id, date + " " + time, weight, fat, water, muscle);
|
||||
|
||||
finish();
|
||||
}
|
||||
|
@@ -73,12 +73,14 @@ int no_activity_cycles = 0;
|
||||
|
||||
volatile boolean sleep_state = true;
|
||||
|
||||
int measured_user_id = -1;
|
||||
int measured_weight = -1;
|
||||
int measured_fat = -1;
|
||||
int measured_water = -1;
|
||||
int measured_muscle = -1;
|
||||
|
||||
typedef struct scale_data{
|
||||
byte user_id;
|
||||
int year;
|
||||
byte month;
|
||||
byte day;
|
||||
@@ -217,8 +219,8 @@ void before_sleep_event()
|
||||
{
|
||||
Serial.println("$I$ going to sleep in 3 seconds!");
|
||||
|
||||
if (measured_weight != -1 && measured_fat != -1 && measured_water != -1 && measured_muscle != -1) {
|
||||
write_scale_data(measured_weight, measured_fat, measured_water, measured_muscle);
|
||||
if (measured_user_id != -1 && measured_weight != -1 && measured_fat != -1 && measured_water != -1 && measured_muscle != -1) {
|
||||
write_scale_data(measured_user_id, measured_weight, measured_fat, measured_water, measured_muscle);
|
||||
delay(100);
|
||||
}
|
||||
|
||||
@@ -233,6 +235,7 @@ void after_sleep_event()
|
||||
{
|
||||
digitalWrite(EXT_SWITCH_PIN, HIGH);
|
||||
|
||||
measured_user_id = -1;
|
||||
measured_weight = -1;
|
||||
measured_fat = -1;
|
||||
measured_water = -1;
|
||||
@@ -299,6 +302,7 @@ int calc_checksum(struct scale_data* wdata)
|
||||
{
|
||||
int checksum = 0;
|
||||
|
||||
checksum ^= wdata->user_id;
|
||||
checksum ^= wdata->year;
|
||||
checksum ^= wdata->month;
|
||||
checksum ^= wdata->day;
|
||||
@@ -312,13 +316,14 @@ int calc_checksum(struct scale_data* wdata)
|
||||
return checksum;
|
||||
}
|
||||
|
||||
void write_scale_data(int weight, int fat, int water, int muscle)
|
||||
void write_scale_data(int user_id, int weight, int fat, int water, int muscle)
|
||||
{
|
||||
int data_size = 0;
|
||||
struct scale_data wdata;
|
||||
|
||||
eeprom.readBlock(0, (uint8_t*)&data_size, sizeof(data_size));
|
||||
|
||||
wdata.user_id = user_id;
|
||||
wdata.year = year();
|
||||
wdata.month = month();
|
||||
wdata.day = day();
|
||||
@@ -363,7 +368,7 @@ void send_scale_data()
|
||||
}
|
||||
|
||||
Serial.print("$D$");
|
||||
Serial.print(i);
|
||||
Serial.print(wdata.user_id);
|
||||
Serial.print(',');
|
||||
Serial.print(wdata.year);
|
||||
Serial.print(',');
|
||||
@@ -471,6 +476,10 @@ void loop()
|
||||
if (seg_value_4 == 'M') {
|
||||
measured_muscle = char_to_int(seg_value_1) + char_to_int(seg_value_2)*10 + char_to_int(seg_value_3)*100;
|
||||
}
|
||||
|
||||
if (seg_value_4 == 'P') {
|
||||
measured_user_id = char_to_int(seg_value_1) - 1; // user id starts by 0
|
||||
}
|
||||
|
||||
sample_count = 0;
|
||||
}
|
||||
@@ -509,7 +518,7 @@ int char_to_int(char c)
|
||||
|
||||
void print_debug_output()
|
||||
{
|
||||
Serial.print("Debug Ausgabe\n");
|
||||
Serial.print("Debug output\n");
|
||||
Serial.print("-----------------------------------\n");
|
||||
Serial.print("\nSeg 1\n");
|
||||
for (int i=0; i<4; i++)
|
||||
|
Reference in New Issue
Block a user