Preparations for adding event timestamps.
This commit is contained in:
		
							parent
							
								
									6c810b4e2b
								
							
						
					
					
						commit
						1dbea69f52
					
				
					 1 changed files with 32 additions and 6 deletions
				
			
		
							
								
								
									
										38
									
								
								main.go
									
										
									
									
									
								
							
							
						
						
									
										38
									
								
								main.go
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -103,10 +103,12 @@ type LiveData struct {
 | 
			
		|||
 | 
			
		||||
// Events struct
 | 
			
		||||
type Event struct {
 | 
			
		||||
	MessageID int    `json:"message_id"`
 | 
			
		||||
	Message   string `json:"message"`
 | 
			
		||||
	StartTime int    `json:"start_time"`
 | 
			
		||||
	EndTime   int    `json:"end_time"`
 | 
			
		||||
	MessageID      int    `json:"message_id"`
 | 
			
		||||
	Message        string `json:"message"`
 | 
			
		||||
	StartTime      int    `json:"start_time"`
 | 
			
		||||
	EndTime        int    `json:"end_time"`
 | 
			
		||||
	StartTimestamp time.Time
 | 
			
		||||
	EndTimestamp   time.Time
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type EventsResponse struct {
 | 
			
		||||
| 
						 | 
				
			
			@ -305,6 +307,27 @@ func createTables(db *sql.DB) {
 | 
			
		|||
		end_time INT
 | 
			
		||||
	);
 | 
			
		||||
 | 
			
		||||
	DO $$
 | 
			
		||||
	BEGIN
 | 
			
		||||
		-- Check if start_timestamp column exists
 | 
			
		||||
		IF NOT EXISTS (SELECT 1 FROM information_schema.columns 
 | 
			
		||||
					WHERE table_name='opendtu_events' 
 | 
			
		||||
					AND column_name='start_timestamp') THEN
 | 
			
		||||
			-- Add start_timestamp column
 | 
			
		||||
			ALTER TABLE opendtu_events 
 | 
			
		||||
			ADD COLUMN start_timestamp TIMESTAMPTZ;
 | 
			
		||||
		END IF;
 | 
			
		||||
 | 
			
		||||
		-- Check if end_timestamp column exists
 | 
			
		||||
		IF NOT EXISTS (SELECT 1 FROM information_schema.columns 
 | 
			
		||||
					WHERE table_name='opendtu_events' 
 | 
			
		||||
					AND column_name='end_timestamp') THEN
 | 
			
		||||
			-- Add end_timestamp column
 | 
			
		||||
			ALTER TABLE opendtu_events 
 | 
			
		||||
			ADD COLUMN end_timestamp TIMESTAMPTZ;
 | 
			
		||||
		END IF;
 | 
			
		||||
	END $$;
 | 
			
		||||
 | 
			
		||||
	CREATE TABLE IF NOT EXISTS opendtu_hints (
 | 
			
		||||
		-- id SERIAL PRIMARY KEY,
 | 
			
		||||
		timestamp TIMESTAMPTZ,
 | 
			
		||||
| 
						 | 
				
			
			@ -445,6 +468,9 @@ func queryEventsEndpoint(inverterSerial string) (*EventsResponse, error) {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
// The events counter reported by OpenDTU resets every day.
 | 
			
		||||
// However, this assumes that the inverters from which the events are pulled are reset every day, during the night.
 | 
			
		||||
// Additionally, this function requires OpenDTU to be set to "Clear Eventlog at midnight" for each inverter.
 | 
			
		||||
// "Clear Eventlog at midnight" should be set to ON in "Inverter settings" -> "pencil" -> "Advanced".
 | 
			
		||||
// To account for possible time drifts, the first and last 10 minutes of the day are excluded.
 | 
			
		||||
// Longest day NL: sun up 4:16, sun down 22:50
 | 
			
		||||
// Shortest day NL: sun up 8:44, sun down 16:25
 | 
			
		||||
| 
						 | 
				
			
			@ -478,10 +504,10 @@ func insertEvents(db *sql.DB, inverterSerial string, events *EventsResponse) {
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	if len(events.Events) > 0 && events.Events[0].EndTime == 0 {
 | 
			
		||||
		// If end_time is 0, schedule a job to update the corresponding message row every 30 minutes
 | 
			
		||||
		// If end_time is 0, schedule a job to update the corresponding message row every 10 minutes
 | 
			
		||||
		go func() {
 | 
			
		||||
			for {
 | 
			
		||||
				time.Sleep(30 * time.Minute)
 | 
			
		||||
				time.Sleep(10 * time.Minute)
 | 
			
		||||
				updatedEvents, err := queryEventsEndpoint(inverterSerial)
 | 
			
		||||
				if err != nil {
 | 
			
		||||
					logger.Error("Error querying events endpoint for updates", "error", err)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue