Rename all tables to opendtu_*
This commit is contained in:
parent
dbf80fa305
commit
01adb82cf2
1 changed files with 51 additions and 54 deletions
105
main.go
105
main.go
|
@ -220,7 +220,7 @@ func handleMessage(message []byte, db *sql.DB) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
// Insert events data into the events table
|
// Insert events data into the opendtu_events table
|
||||||
insertEvents(db, inverter.Serial, events)
|
insertEvents(db, inverter.Serial, events)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -238,19 +238,16 @@ func createTables(db *sql.DB) {
|
||||||
// An additional advantage is that it makes plotting in Grafana easier.
|
// An additional advantage is that it makes plotting in Grafana easier.
|
||||||
// TODO: Foreign keys commented out as TimescaleDB hypertables don't support them.
|
// TODO: Foreign keys commented out as TimescaleDB hypertables don't support them.
|
||||||
createTableSQL := `
|
createTableSQL := `
|
||||||
CREATE TABLE IF NOT EXISTS dtu_log (
|
CREATE TABLE IF NOT EXISTS opendtu_log (
|
||||||
-- id SERIAL PRIMARY KEY,
|
|
||||||
timestamp TIMESTAMPTZ UNIQUE DEFAULT CURRENT_TIMESTAMP,
|
timestamp TIMESTAMPTZ UNIQUE DEFAULT CURRENT_TIMESTAMP,
|
||||||
-- timestamp TIMESTAMPTZ,
|
|
||||||
power NUMERIC,
|
power NUMERIC,
|
||||||
yieldday NUMERIC,
|
yieldday NUMERIC,
|
||||||
yieldtotal NUMERIC
|
yieldtotal NUMERIC
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS inverters (
|
CREATE TABLE IF NOT EXISTS opendtu_inverters (
|
||||||
-- id SERIAL PRIMARY KEY,
|
|
||||||
timestamp TIMESTAMPTZ,
|
timestamp TIMESTAMPTZ,
|
||||||
-- FOREIGN KEY (timestamp) REFERENCES dtu_log(timestamp),
|
-- FOREIGN KEY (timestamp) REFERENCES opendtu_log(timestamp),
|
||||||
inverter_serial TEXT,
|
inverter_serial TEXT,
|
||||||
name TEXT,
|
name TEXT,
|
||||||
producing BOOL,
|
producing BOOL,
|
||||||
|
@ -258,10 +255,9 @@ func createTables(db *sql.DB) {
|
||||||
limit_absolute NUMERIC
|
limit_absolute NUMERIC
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS inverters_ac (
|
CREATE TABLE IF NOT EXISTS opendtu_inverters_ac (
|
||||||
-- id SERIAL PRIMARY KEY,
|
|
||||||
timestamp TIMESTAMPTZ,
|
timestamp TIMESTAMPTZ,
|
||||||
-- FOREIGN KEY (timestamp) REFERENCES dtu_log(timestamp),
|
-- FOREIGN KEY (timestamp) REFERENCES opendtu_log(timestamp),
|
||||||
inverter_serial TEXT,
|
inverter_serial TEXT,
|
||||||
ac_number INT,
|
ac_number INT,
|
||||||
power NUMERIC,
|
power NUMERIC,
|
||||||
|
@ -272,10 +268,10 @@ func createTables(db *sql.DB) {
|
||||||
reactivepower NUMERIC
|
reactivepower NUMERIC
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS inverters_dc (
|
CREATE TABLE IF NOT EXISTS opendtu_inverters_dc (
|
||||||
-- id SERIAL PRIMARY KEY,
|
-- id SERIAL PRIMARY KEY,
|
||||||
timestamp TIMESTAMPTZ,
|
timestamp TIMESTAMPTZ,
|
||||||
-- FOREIGN KEY (timestamp) REFERENCES dtu_log(timestamp),
|
-- FOREIGN KEY (timestamp) REFERENCES opendtu_log(timestamp),
|
||||||
inverter_serial TEXT,
|
inverter_serial TEXT,
|
||||||
dc_number INT,
|
dc_number INT,
|
||||||
name TEXT,
|
name TEXT,
|
||||||
|
@ -287,10 +283,10 @@ func createTables(db *sql.DB) {
|
||||||
irradiation NUMERIC
|
irradiation NUMERIC
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS inverters_inv (
|
CREATE TABLE IF NOT EXISTS opendtu_inverters_inv (
|
||||||
-- id SERIAL PRIMARY KEY,
|
-- id SERIAL PRIMARY KEY,
|
||||||
timestamp TIMESTAMPTZ,
|
timestamp TIMESTAMPTZ,
|
||||||
-- FOREIGN KEY (timestamp) REFERENCES dtu_log(timestamp),
|
-- FOREIGN KEY (timestamp) REFERENCES opendtu_log(timestamp),
|
||||||
inverter_serial TEXT,
|
inverter_serial TEXT,
|
||||||
temperature NUMERIC,
|
temperature NUMERIC,
|
||||||
power_dc NUMERIC,
|
power_dc NUMERIC,
|
||||||
|
@ -299,7 +295,7 @@ func createTables(db *sql.DB) {
|
||||||
efficiency NUMERIC
|
efficiency NUMERIC
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS events (
|
CREATE TABLE IF NOT EXISTS opendtu_events (
|
||||||
-- id SERIAL PRIMARY KEY,
|
-- id SERIAL PRIMARY KEY,
|
||||||
timestamp TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
|
timestamp TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
|
||||||
inverter_serial TEXT,
|
inverter_serial TEXT,
|
||||||
|
@ -309,23 +305,22 @@ func createTables(db *sql.DB) {
|
||||||
end_time INT
|
end_time INT
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS dtu_hints (
|
CREATE TABLE IF NOT EXISTS opendtu_hints (
|
||||||
-- id SERIAL PRIMARY KEY,
|
-- id SERIAL PRIMARY KEY,
|
||||||
timestamp TIMESTAMPTZ,
|
timestamp TIMESTAMPTZ,
|
||||||
-- FOREIGN KEY (timestamp) REFERENCES dtu_log(timestamp),
|
-- FOREIGN KEY (timestamp) REFERENCES opendtu_log(timestamp),
|
||||||
time_sync BOOL,
|
time_sync BOOL,
|
||||||
radio_problem BOOL,
|
radio_problem BOOL,
|
||||||
default_password BOOL
|
default_password BOOL
|
||||||
);
|
);
|
||||||
|
|
||||||
-- UNIQUE here doesn't work, as e.g. one timestamp may be valid for multiple string data.
|
CREATE INDEX IF NOT EXISTS opendtu_log_timestamp_idx ON opendtu_log (timestamp);
|
||||||
CREATE INDEX IF NOT EXISTS dtu_log_timestamp_idx ON dtu_log (timestamp);
|
CREATE INDEX IF NOT EXISTS opendtu_inverters_timestamp_idx ON opendtu_inverters (timestamp);
|
||||||
CREATE INDEX IF NOT EXISTS inverters_timestamp_idx ON inverters (timestamp);
|
CREATE INDEX IF NOT EXISTS opendtu_inverters_ac_timestamp_idx ON opendtu_inverters_ac (timestamp);
|
||||||
CREATE INDEX IF NOT EXISTS inverters_ac_timestamp_idx ON inverters_ac (timestamp);
|
CREATE INDEX IF NOT EXISTS opendtu_inverters_dc_timestamp_idx ON opendtu_inverters_dc (timestamp);
|
||||||
CREATE INDEX IF NOT EXISTS inverters_dc_timestamp_idx ON inverters_dc (timestamp);
|
CREATE INDEX IF NOT EXISTS opendtu_inverters_inv_timestamp_idx ON opendtu_inverters_inv (timestamp);
|
||||||
CREATE INDEX IF NOT EXISTS inverters_inv_timestamp_idx ON inverters_inv (timestamp);
|
CREATE INDEX IF NOT EXISTS opendtu_events_timestamp_idx ON opendtu_events (timestamp);
|
||||||
CREATE INDEX IF NOT EXISTS events_timestamp_idx ON events (timestamp);
|
CREATE INDEX IF NOT EXISTS opendtu_hints_timestamp_idx ON opendtu_hints (timestamp);
|
||||||
CREATE INDEX IF NOT EXISTS dtu_hints_timestamp_idx ON dtu_hints (timestamp);
|
|
||||||
|
|
||||||
`
|
`
|
||||||
|
|
||||||
|
@ -337,13 +332,13 @@ func createTables(db *sql.DB) {
|
||||||
|
|
||||||
enableTimescaleDB := `
|
enableTimescaleDB := `
|
||||||
-- CREATE EXTENSION IF NOT EXISTS timescaledb;
|
-- CREATE EXTENSION IF NOT EXISTS timescaledb;
|
||||||
SELECT create_hypertable('dtu_log', 'timestamp', if_not_exists => TRUE, migrate_data => TRUE);
|
SELECT create_hypertable('opendtu_log', 'timestamp', if_not_exists => TRUE, migrate_data => TRUE);
|
||||||
SELECT create_hypertable('inverters', 'timestamp', if_not_exists => TRUE, migrate_data => TRUE);
|
SELECT create_hypertable('opendtu_inverters', 'timestamp', if_not_exists => TRUE, migrate_data => TRUE);
|
||||||
SELECT create_hypertable('inverters_ac', 'timestamp', if_not_exists => TRUE, migrate_data => TRUE);
|
SELECT create_hypertable('opendtu_inverters_ac', 'timestamp', if_not_exists => TRUE, migrate_data => TRUE);
|
||||||
SELECT create_hypertable('inverters_dc', 'timestamp', if_not_exists => TRUE, migrate_data => TRUE);
|
SELECT create_hypertable('opendtu_inverters_dc', 'timestamp', if_not_exists => TRUE, migrate_data => TRUE);
|
||||||
SELECT create_hypertable('inverters_inv', 'timestamp', if_not_exists => TRUE, migrate_data => TRUE);
|
SELECT create_hypertable('opendtu_inverters_inv', 'timestamp', if_not_exists => TRUE, migrate_data => TRUE);
|
||||||
SELECT create_hypertable('events', 'timestamp', if_not_exists => TRUE, migrate_data => TRUE);
|
SELECT create_hypertable('opendtu_events', 'timestamp', if_not_exists => TRUE, migrate_data => TRUE);
|
||||||
SELECT create_hypertable('dtu_hints', 'timestamp', if_not_exists => TRUE, migrate_data => TRUE);
|
SELECT create_hypertable('opendtu_hints', 'timestamp', if_not_exists => TRUE, migrate_data => TRUE);
|
||||||
`
|
`
|
||||||
if timescaleEnabled == "true" {
|
if timescaleEnabled == "true" {
|
||||||
_, err := db.Exec(enableTimescaleDB)
|
_, err := db.Exec(enableTimescaleDB)
|
||||||
|
@ -360,7 +355,7 @@ func insertLiveData(db *sql.DB, inverter Inverter, total Total, hints Hints) {
|
||||||
|
|
||||||
// Insert data into log table
|
// Insert data into log table
|
||||||
_, err := db.Exec(`
|
_, err := db.Exec(`
|
||||||
INSERT INTO dtu_log (timestamp, power, yieldday, yieldtotal)
|
INSERT INTO opendtu_log (timestamp, power, yieldday, yieldtotal)
|
||||||
VALUES ($1, $2, $3, $4);
|
VALUES ($1, $2, $3, $4);
|
||||||
`, timestamp, total.Power.V, total.YieldDay.V, total.YieldTotal.V)
|
`, timestamp, total.Power.V, total.YieldDay.V, total.YieldTotal.V)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -371,57 +366,57 @@ func insertLiveData(db *sql.DB, inverter Inverter, total Total, hints Hints) {
|
||||||
// Get the log ID of the inserted record
|
// Get the log ID of the inserted record
|
||||||
// NOT IN USE: TimescaleDB doesn't support it.
|
// NOT IN USE: TimescaleDB doesn't support it.
|
||||||
// var logID int
|
// var logID int
|
||||||
// err = db.QueryRow("SELECT id FROM dtu_log WHERE timestamp = $1", timestamp).Scan(&logID)
|
// err = db.QueryRow("SELECT id FROM opendtu_log WHERE timestamp = $1", timestamp).Scan(&logID)
|
||||||
// if err != nil {
|
// if err != nil {
|
||||||
// logger.Error("Error getting dtu_log ID", "error", err)
|
// logger.Error("Error getting opendtu_log ID", "error", err)
|
||||||
// return
|
// return
|
||||||
// }
|
// }
|
||||||
|
|
||||||
// Insert data into inverters table
|
// Insert data into opendtu_inverters table
|
||||||
_, err = db.Exec(`
|
_, err = db.Exec(`
|
||||||
INSERT INTO inverters (timestamp, inverter_serial, name, producing, limit_relative, limit_absolute)
|
INSERT INTO opendtu_inverters (timestamp, inverter_serial, name, producing, limit_relative, limit_absolute)
|
||||||
VALUES ($1, $2, $3, $4, $5, $6);
|
VALUES ($1, $2, $3, $4, $5, $6);
|
||||||
`, timestamp, inverter.Serial, inverter.Name, inverter.Producing, inverter.LimitRelative, inverter.LimitAbsolute)
|
`, timestamp, inverter.Serial, inverter.Name, inverter.Producing, inverter.LimitRelative, inverter.LimitAbsolute)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Error inserting into inverters table", "error", err)
|
logger.Error("Error inserting into opendtu_inverters table", "error", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Insert data into inverters_ac table
|
// Insert data into opendtu_inverters_ac table
|
||||||
for acNumber, acData := range inverter.AC {
|
for acNumber, acData := range inverter.AC {
|
||||||
_, err := db.Exec(`
|
_, err := db.Exec(`
|
||||||
INSERT INTO inverters_ac (timestamp, inverter_serial, ac_number, power, voltage, current, frequency, powerfactor, reactivepower)
|
INSERT INTO opendtu_inverters_ac (timestamp, inverter_serial, ac_number, power, voltage, current, frequency, powerfactor, reactivepower)
|
||||||
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9);
|
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9);
|
||||||
`, timestamp, inverter.Serial, acNumber, acData.Power.V, acData.Voltage.V, acData.Current.V, acData.Frequency.V, acData.PowerFactor.V, acData.ReactivePower.V)
|
`, timestamp, inverter.Serial, acNumber, acData.Power.V, acData.Voltage.V, acData.Current.V, acData.Frequency.V, acData.PowerFactor.V, acData.ReactivePower.V)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Error inserting into inverters_ac table for AC", "error", "acNumber", acNumber, err)
|
logger.Error("Error inserting into opendtu_inverters_ac table for AC", "error", "acNumber", acNumber, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Insert data into inverters_dc table
|
// Insert data into opendtu_inverters_dc table
|
||||||
for dcNumber, dcData := range inverter.DC {
|
for dcNumber, dcData := range inverter.DC {
|
||||||
_, err := db.Exec(`
|
_, err := db.Exec(`
|
||||||
INSERT INTO inverters_dc (timestamp, inverter_serial, dc_number, name, power, voltage, current, yieldday, yieldtotal, irradiation)
|
INSERT INTO opendtu_inverters_dc (timestamp, inverter_serial, dc_number, name, power, voltage, current, yieldday, yieldtotal, irradiation)
|
||||||
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10);
|
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10);
|
||||||
`, timestamp, inverter.Serial, dcNumber, dcData.Name.U, dcData.Power.V, dcData.Voltage.V, dcData.Current.V, dcData.YieldDay.V, dcData.YieldTotal.V, dcData.Irradiation.V)
|
`, timestamp, inverter.Serial, dcNumber, dcData.Name.U, dcData.Power.V, dcData.Voltage.V, dcData.Current.V, dcData.YieldDay.V, dcData.YieldTotal.V, dcData.Irradiation.V)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("Error inserting into inverters_dc table for DC %s: %v\n", dcNumber, err)
|
log.Printf("Error inserting into opendtu_inverters_dc table for DC %s: %v\n", dcNumber, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Insert data into inverters_inv table
|
// Insert data into opendtu_inverters_inv table
|
||||||
for invNumber, invData := range inverter.INV {
|
for invNumber, invData := range inverter.INV {
|
||||||
_, err := db.Exec(`
|
_, err := db.Exec(`
|
||||||
INSERT INTO inverters_inv (timestamp, inverter_serial, temperature, efficiency, power_dc, yieldday, yieldtotal)
|
INSERT INTO opendtu_inverters_inv (timestamp, inverter_serial, temperature, efficiency, power_dc, yieldday, yieldtotal)
|
||||||
VALUES ($1, $2, $3, $4, $5, $6, $7);
|
VALUES ($1, $2, $3, $4, $5, $6, $7);
|
||||||
`, timestamp, inverter.Serial, invData.Temperature.V, invData.Efficiency.V, invData.PowerDC.V, invData.YieldDay.V, invData.YieldTotal.V)
|
`, timestamp, inverter.Serial, invData.Temperature.V, invData.Efficiency.V, invData.PowerDC.V, invData.YieldDay.V, invData.YieldTotal.V)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("Error inserting into inverters_inv table for INV %s: %v\n", invNumber, err)
|
log.Printf("Error inserting into opendtu_inverters_inv table for INV %s: %v\n", invNumber, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Insert data into hints table
|
// Insert data into hints table
|
||||||
_, err = db.Exec(`
|
_, err = db.Exec(`
|
||||||
INSERT INTO dtu_hints (timestamp, time_sync, radio_problem, default_password)
|
INSERT INTO opendtu_hints (timestamp, time_sync, radio_problem, default_password)
|
||||||
VALUES ($1, $2, $3, $4);
|
VALUES ($1, $2, $3, $4);
|
||||||
`, timestamp, hints.TimeSync, hints.RadioProblem, hints.DefaultPassword)
|
`, timestamp, hints.TimeSync, hints.RadioProblem, hints.DefaultPassword)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -449,9 +444,11 @@ func queryEventsEndpoint(inverterSerial string) (*EventsResponse, error) {
|
||||||
return &eventsResponse, nil
|
return &eventsResponse, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: This function should probably be altered to only select from current day.
|
||||||
|
// CHECK.
|
||||||
func getPreviousEventsCount(db *sql.DB, inverterSerial string) int {
|
func getPreviousEventsCount(db *sql.DB, inverterSerial string) int {
|
||||||
var count int
|
var count int
|
||||||
err := db.QueryRow("SELECT COUNT(*) FROM events WHERE inverter_serial = $1", inverterSerial).Scan(&count)
|
err := db.QueryRow("SELECT COUNT(*) FROM opendtu_events WHERE inverter_serial = $1", inverterSerial).Scan(&count)
|
||||||
if err != nil && err != sql.ErrNoRows {
|
if err != nil && err != sql.ErrNoRows {
|
||||||
logger.Error("Error querying previous events count", "error", err)
|
logger.Error("Error querying previous events count", "error", err)
|
||||||
}
|
}
|
||||||
|
@ -464,11 +461,11 @@ func insertEvents(db *sql.DB, inverterSerial string, events *EventsResponse) {
|
||||||
for _, event := range events.Events {
|
for _, event := range events.Events {
|
||||||
// Insert events data into the events table
|
// Insert events data into the events table
|
||||||
_, err := db.Exec(`
|
_, err := db.Exec(`
|
||||||
INSERT INTO events (timestamp, inverter_serial, message_id, message, start_time, end_time)
|
INSERT INTO opendtu_events (timestamp, inverter_serial, message_id, message, start_time, end_time)
|
||||||
VALUES ($1, $2, $3, $4, $5, $6);
|
VALUES ($1, $2, $3, $4, $5, $6);
|
||||||
`, timestamp, inverterSerial, event.MessageID, event.Message, event.StartTime, event.EndTime)
|
`, timestamp, inverterSerial, event.MessageID, event.Message, event.StartTime, event.EndTime)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Error inserting into events table", "error", err)
|
logger.Error("Error inserting into opendtu_events table", "error", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -492,12 +489,12 @@ func insertEvents(db *sql.DB, inverterSerial string, events *EventsResponse) {
|
||||||
|
|
||||||
func updateEvents(db *sql.DB, inverterSerial string, events *EventsResponse) {
|
func updateEvents(db *sql.DB, inverterSerial string, events *EventsResponse) {
|
||||||
for _, event := range events.Events {
|
for _, event := range events.Events {
|
||||||
// Update events data in the events table
|
// Update events data in the opendtu_events table
|
||||||
_, err := db.Exec(`
|
_, err := db.Exec(`
|
||||||
UPDATE events SET end_time = $1 WHERE inverter_serial = $2 AND start_time = $3 AND end_time = 0;
|
UPDATE opendtu_events SET end_time = $1 WHERE inverter_serial = $2 AND start_time = $3 AND end_time = 0;
|
||||||
`, event.EndTime, inverterSerial, event.StartTime)
|
`, event.EndTime, inverterSerial, event.StartTime)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Error updating events table", "error", err)
|
logger.Error("Error updating opendtu_events table", "error", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue