@golemio/microclimate 1.0.5-dev.746965867 → 1.1.0-dev.762755367

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,53 @@
1
+ 'use strict';
2
+
3
+ var dbm;
4
+ var type;
5
+ var seed;
6
+ var fs = require('fs');
7
+ var path = require('path');
8
+ var Promise;
9
+
10
+ /**
11
+ * We receive the dbmigrate dependency from dbmigrate initially.
12
+ * This enables us to not have to rely on NODE_PATH.
13
+ */
14
+ exports.setup = function(options, seedLink) {
15
+ dbm = options.dbmigrate;
16
+ type = dbm.dataType;
17
+ seed = seedLink;
18
+ Promise = options.Promise;
19
+ };
20
+
21
+ exports.up = function(db) {
22
+ var filePath = path.join(__dirname, 'sqls', '20230131102732-fix_compass-up.sql');
23
+ return new Promise( function( resolve, reject ) {
24
+ fs.readFile(filePath, {encoding: 'utf-8'}, function(err,data){
25
+ if (err) return reject(err);
26
+ console.log('received data: ' + data);
27
+
28
+ resolve(data);
29
+ });
30
+ })
31
+ .then(function(data) {
32
+ return db.runSql(data);
33
+ });
34
+ };
35
+
36
+ exports.down = function(db) {
37
+ var filePath = path.join(__dirname, 'sqls', '20230131102732-fix_compass-down.sql');
38
+ return new Promise( function( resolve, reject ) {
39
+ fs.readFile(filePath, {encoding: 'utf-8'}, function(err,data){
40
+ if (err) return reject(err);
41
+ console.log('received data: ' + data);
42
+
43
+ resolve(data);
44
+ });
45
+ })
46
+ .then(function(data) {
47
+ return db.runSql(data);
48
+ });
49
+ };
50
+
51
+ exports._meta = {
52
+ "version": 1
53
+ };
@@ -0,0 +1,141 @@
1
+ -- analytic.v_microclimate_measurements_daily source
2
+
3
+ CREATE OR REPLACE VIEW analytic.v_microclimate_measurements_daily
4
+ AS WITH calendar AS (
5
+ SELECT calendar_1.date,
6
+ sensors_1.sensor_id
7
+ FROM ( SELECT generate_series('2022-08-02 00:00:00+02'::timestamp with time zone, CURRENT_DATE::timestamp with time zone, '1 day'::interval)::date AS date) calendar_1
8
+ CROSS JOIN ( SELECT DISTINCT sensor_devices_import.sensor_id
9
+ FROM microclimate.sensor_devices_import) sensors_1
10
+ ), first_measurement_per_hour AS (
11
+ SELECT DISTINCT ON (m.sensor_id, (timezone('CET'::text, m.measured_at)::date), (date_part('hour'::text, timezone('CET'::text, m.measured_at)))) m.sensor_id,
12
+ timezone('CET'::text, m.measured_at) AS measured_at,
13
+ timezone('CET'::text, m.measured_at)::date AS date,
14
+ date_part('hour'::text, timezone('CET'::text, m.measured_at)) AS hour,
15
+ m.air_temp,
16
+ m.air_hum,
17
+ m.pressure,
18
+ m.wind_speed,
19
+ m.water_pot,
20
+ m.soil_temp
21
+ FROM microclimate.measurements m
22
+ WHERE date_part('hour'::text, timezone('CET'::text, m.measured_at)) = ANY (ARRAY[7::double precision, 14::double precision, 21::double precision])
23
+ ORDER BY m.sensor_id, (timezone('CET'::text, m.measured_at)::date), (date_part('hour'::text, timezone('CET'::text, m.measured_at))), m.measured_at
24
+ ), seven AS (
25
+ SELECT first_measurement_per_hour.sensor_id,
26
+ first_measurement_per_hour.measured_at,
27
+ first_measurement_per_hour.date,
28
+ first_measurement_per_hour.hour,
29
+ first_measurement_per_hour.air_temp,
30
+ first_measurement_per_hour.air_hum,
31
+ first_measurement_per_hour.pressure,
32
+ first_measurement_per_hour.wind_speed,
33
+ first_measurement_per_hour.water_pot,
34
+ first_measurement_per_hour.soil_temp
35
+ FROM first_measurement_per_hour
36
+ WHERE first_measurement_per_hour.hour = 7::double precision
37
+ ), two AS (
38
+ SELECT first_measurement_per_hour.sensor_id,
39
+ first_measurement_per_hour.measured_at,
40
+ first_measurement_per_hour.date,
41
+ first_measurement_per_hour.hour,
42
+ first_measurement_per_hour.air_temp,
43
+ first_measurement_per_hour.air_hum,
44
+ first_measurement_per_hour.pressure,
45
+ first_measurement_per_hour.wind_speed,
46
+ first_measurement_per_hour.water_pot,
47
+ first_measurement_per_hour.soil_temp
48
+ FROM first_measurement_per_hour
49
+ WHERE first_measurement_per_hour.hour = 14::double precision
50
+ ), nine AS (
51
+ SELECT first_measurement_per_hour.sensor_id,
52
+ first_measurement_per_hour.measured_at,
53
+ first_measurement_per_hour.date,
54
+ first_measurement_per_hour.hour,
55
+ first_measurement_per_hour.air_temp,
56
+ first_measurement_per_hour.air_hum,
57
+ first_measurement_per_hour.pressure,
58
+ first_measurement_per_hour.wind_speed,
59
+ first_measurement_per_hour.water_pot,
60
+ first_measurement_per_hour.soil_temp
61
+ FROM first_measurement_per_hour
62
+ WHERE first_measurement_per_hour.hour = 21::double precision
63
+ ), wind AS (
64
+ SELECT DISTINCT ON (m.sensor_id, (timezone('CET'::text, m.measured_at)::date)) m.sensor_id,
65
+ timezone('CET'::text, m.measured_at)::date AS date,
66
+ m.wind_speed AS max_wind_speed,
67
+ CASE
68
+ WHEN m.wind_dir::text = 'N'::text THEN 0
69
+ WHEN m.wind_dir::text = 'S'::text THEN 180
70
+ WHEN m.wind_dir::text = 'E'::text THEN 90
71
+ WHEN m.wind_dir::text = 'W'::text THEN 270
72
+ WHEN m.wind_dir::text = 'SW'::text THEN 200
73
+ WHEN m.wind_dir::text = 'NW'::text THEN 320
74
+ WHEN m.wind_dir::text = 'NE'::text THEN 45
75
+ ELSE NULL::integer
76
+ END AS wind_dir_at_max_speed
77
+ FROM microclimate.measurements m
78
+ ORDER BY m.sensor_id, (timezone('CET'::text, m.measured_at)::date), m.wind_speed DESC
79
+ ), min_max_daily_temp AS (
80
+ SELECT m.sensor_id,
81
+ timezone('-04'::text, m.measured_at)::date AS date,
82
+ max(m.air_temp) AS max_temperature,
83
+ min(m.air_temp) AS min_temperature
84
+ FROM microclimate.measurements m
85
+ GROUP BY m.sensor_id, (timezone('-04'::text, m.measured_at)::date)
86
+ ORDER BY m.sensor_id, (timezone('-04'::text, m.measured_at)::date)
87
+ ), precip AS (
88
+ SELECT m.sensor_id,
89
+ timezone('+06'::text, m.measured_at)::date AS date,
90
+ sum(m.precip) AS sum_precip
91
+ FROM microclimate.measurements m
92
+ GROUP BY m.sensor_id, (timezone('+06'::text, m.measured_at)::date)
93
+ ORDER BY m.sensor_id, (timezone('+06'::text, m.measured_at)::date)
94
+ ), calc AS (
95
+ SELECT sensors.address,
96
+ sensors.sensor_position_detail,
97
+ sensors.point_id,
98
+ sensors.air_temp,
99
+ sensors.air_hum,
100
+ sensors.pressure,
101
+ sensors.precip,
102
+ sensors.wind_dir,
103
+ sensors.wind_impact,
104
+ sensors.wind_speed,
105
+ sensors.sun_irr,
106
+ sensors.soil_temp,
107
+ sensors.water_pot,
108
+ sensors.dendro_circ,
109
+ sensors.dendro_gain,
110
+ calendar.date,
111
+ calendar.sensor_id,
112
+ (seven.air_temp + two.air_temp + 2::double precision * nine.air_temp) / 4::double precision AS avg_temperature,
113
+ (seven.air_hum + two.air_hum + nine.air_hum) / 3::double precision AS avg_air_hum,
114
+ (seven.pressure + two.pressure + nine.pressure) / 3 / 100 AS avg_pressure,
115
+ (seven.wind_speed + two.wind_speed + nine.wind_speed) / 3::double precision AS avg_wind_speed,
116
+ (seven.water_pot + two.water_pot + nine.water_pot) / 3::double precision AS avg_water_pot,
117
+ (seven.soil_temp + two.soil_temp + nine.soil_temp) / 3::double precision AS avg_soil_temp,
118
+ wind.max_wind_speed,
119
+ wind.wind_dir_at_max_speed,
120
+ min_max_daily_temp.max_temperature,
121
+ min_max_daily_temp.min_temperature,
122
+ precip.sum_precip
123
+ FROM calendar
124
+ LEFT JOIN seven ON calendar.sensor_id::text = seven.sensor_id::text AND calendar.date = seven.date
125
+ LEFT JOIN two ON calendar.sensor_id::text = two.sensor_id::text AND calendar.date = two.date
126
+ LEFT JOIN nine ON calendar.sensor_id::text = nine.sensor_id::text AND calendar.date = nine.date
127
+ LEFT JOIN wind ON calendar.sensor_id::text = wind.sensor_id::text AND calendar.date = wind.date
128
+ LEFT JOIN min_max_daily_temp ON calendar.sensor_id::text = min_max_daily_temp.sensor_id::text AND calendar.date = min_max_daily_temp.date
129
+ LEFT JOIN precip ON calendar.sensor_id::text = precip.sensor_id::text AND calendar.date = precip.date
130
+ LEFT JOIN microclimate.sensor_devices_import sensors ON calendar.sensor_id::text = sensors.sensor_id::text
131
+ )
132
+ SELECT calc.address,
133
+ calc.sensor_position_detail,
134
+ calc.date,
135
+ calc.sensor_id,
136
+ calc.point_id,
137
+ unpivot.metrika,
138
+ unpivot.value
139
+ FROM calc,
140
+ LATERAL ( VALUES ('avg_temperature'::text,calc.avg_temperature), ('avg_air_hum'::text,calc.avg_air_hum), ('avg_pressure'::text,calc.avg_pressure), ('avg_wind_speed'::text,calc.avg_wind_speed), ('avg_water_pot'::text,calc.avg_water_pot), ('avg_soil_temp'::text,calc.avg_soil_temp), ('max_wind_speed'::text,calc.max_wind_speed), ('max_temperature'::text,calc.max_temperature), ('min_temperature'::text,calc.min_temperature), ('sum_precip'::text,calc.sum_precip), ('wind_dir_at_max_speed'::text,calc.wind_dir_at_max_speed)) unpivot(metrika, value)
141
+ WHERE unpivot.value IS NOT NULL;
@@ -0,0 +1,141 @@
1
+ -- analytic.v_microclimate_measurements_daily source
2
+
3
+ CREATE OR REPLACE VIEW analytic.v_microclimate_measurements_daily
4
+ AS WITH calendar AS (
5
+ SELECT calendar_1.date,
6
+ sensors_1.sensor_id
7
+ FROM ( SELECT generate_series('2022-08-02 00:00:00+02'::timestamp with time zone, CURRENT_DATE::timestamp with time zone, '1 day'::interval)::date AS date) calendar_1
8
+ CROSS JOIN ( SELECT DISTINCT sensor_devices_import.sensor_id
9
+ FROM microclimate.sensor_devices_import) sensors_1
10
+ ), first_measurement_per_hour AS (
11
+ SELECT DISTINCT ON (m.sensor_id, (timezone('CET'::text, m.measured_at)::date), (date_part('hour'::text, timezone('CET'::text, m.measured_at)))) m.sensor_id,
12
+ timezone('CET'::text, m.measured_at) AS measured_at,
13
+ timezone('CET'::text, m.measured_at)::date AS date,
14
+ date_part('hour'::text, timezone('CET'::text, m.measured_at)) AS hour,
15
+ m.air_temp,
16
+ m.air_hum,
17
+ m.pressure,
18
+ m.wind_speed,
19
+ m.water_pot,
20
+ m.soil_temp
21
+ FROM microclimate.measurements m
22
+ WHERE date_part('hour'::text, timezone('CET'::text, m.measured_at)) = ANY (ARRAY[7::double precision, 14::double precision, 21::double precision])
23
+ ORDER BY m.sensor_id, (timezone('CET'::text, m.measured_at)::date), (date_part('hour'::text, timezone('CET'::text, m.measured_at))), m.measured_at
24
+ ), seven AS (
25
+ SELECT first_measurement_per_hour.sensor_id,
26
+ first_measurement_per_hour.measured_at,
27
+ first_measurement_per_hour.date,
28
+ first_measurement_per_hour.hour,
29
+ first_measurement_per_hour.air_temp,
30
+ first_measurement_per_hour.air_hum,
31
+ first_measurement_per_hour.pressure,
32
+ first_measurement_per_hour.wind_speed,
33
+ first_measurement_per_hour.water_pot,
34
+ first_measurement_per_hour.soil_temp
35
+ FROM first_measurement_per_hour
36
+ WHERE first_measurement_per_hour.hour = 7::double precision
37
+ ), two AS (
38
+ SELECT first_measurement_per_hour.sensor_id,
39
+ first_measurement_per_hour.measured_at,
40
+ first_measurement_per_hour.date,
41
+ first_measurement_per_hour.hour,
42
+ first_measurement_per_hour.air_temp,
43
+ first_measurement_per_hour.air_hum,
44
+ first_measurement_per_hour.pressure,
45
+ first_measurement_per_hour.wind_speed,
46
+ first_measurement_per_hour.water_pot,
47
+ first_measurement_per_hour.soil_temp
48
+ FROM first_measurement_per_hour
49
+ WHERE first_measurement_per_hour.hour = 14::double precision
50
+ ), nine AS (
51
+ SELECT first_measurement_per_hour.sensor_id,
52
+ first_measurement_per_hour.measured_at,
53
+ first_measurement_per_hour.date,
54
+ first_measurement_per_hour.hour,
55
+ first_measurement_per_hour.air_temp,
56
+ first_measurement_per_hour.air_hum,
57
+ first_measurement_per_hour.pressure,
58
+ first_measurement_per_hour.wind_speed,
59
+ first_measurement_per_hour.water_pot,
60
+ first_measurement_per_hour.soil_temp
61
+ FROM first_measurement_per_hour
62
+ WHERE first_measurement_per_hour.hour = 21::double precision
63
+ ), wind AS (
64
+ SELECT DISTINCT ON (m.sensor_id, (timezone('CET'::text, m.measured_at)::date)) m.sensor_id,
65
+ timezone('CET'::text, m.measured_at)::date AS date,
66
+ m.wind_speed AS max_wind_speed,
67
+ CASE
68
+ WHEN m.wind_dir = 'N' THEN 0
69
+ WHEN m.wind_dir = 'NE' THEN 45
70
+ WHEN m.wind_dir = 'E' THEN 90
71
+ WHEN m.wind_dir = 'SE' THEN 135
72
+ WHEN m.wind_dir = 'S' THEN 180
73
+ WHEN m.wind_dir = 'SW' THEN 225
74
+ WHEN m.wind_dir = 'W' THEN 270
75
+ WHEN m.wind_dir = 'NW' THEN 315
76
+ ELSE NULL END AS wind_dir_at_max_speed
77
+ FROM microclimate.measurements m
78
+ ORDER BY m.sensor_id, (timezone('CET'::text, m.measured_at)::date), m.wind_speed DESC
79
+ ), min_max_daily_temp AS (
80
+ SELECT m.sensor_id,
81
+ timezone('-04'::text, m.measured_at)::date AS date,
82
+ max(m.air_temp) AS max_temperature,
83
+ min(m.air_temp) AS min_temperature
84
+ FROM microclimate.measurements m
85
+ GROUP BY m.sensor_id, (timezone('-04'::text, m.measured_at)::date)
86
+ ORDER BY m.sensor_id, (timezone('-04'::text, m.measured_at)::date)
87
+ ), precip AS (
88
+ SELECT m.sensor_id,
89
+ timezone('+06'::text, m.measured_at)::date AS date,
90
+ sum(m.precip) AS sum_precip
91
+ FROM microclimate.measurements m
92
+ GROUP BY m.sensor_id, (timezone('+06'::text, m.measured_at)::date)
93
+ ORDER BY m.sensor_id, (timezone('+06'::text, m.measured_at)::date)
94
+ ), calc AS (
95
+ SELECT sensors.address,
96
+ sensors.sensor_position_detail,
97
+ sensors.point_id,
98
+ sensors.air_temp,
99
+ sensors.air_hum,
100
+ sensors.pressure,
101
+ sensors.precip,
102
+ sensors.wind_dir,
103
+ sensors.wind_impact,
104
+ sensors.wind_speed,
105
+ sensors.sun_irr,
106
+ sensors.soil_temp,
107
+ sensors.water_pot,
108
+ sensors.dendro_circ,
109
+ sensors.dendro_gain,
110
+ calendar.date,
111
+ calendar.sensor_id,
112
+ (seven.air_temp + two.air_temp + 2::double precision * nine.air_temp) / 4::double precision AS avg_temperature,
113
+ (seven.air_hum + two.air_hum + nine.air_hum) / 3::double precision AS avg_air_hum,
114
+ (seven.pressure + two.pressure + nine.pressure) / 3 / 100 AS avg_pressure,
115
+ (seven.wind_speed + two.wind_speed + nine.wind_speed) / 3::double precision AS avg_wind_speed,
116
+ (seven.water_pot + two.water_pot + nine.water_pot) / 3::double precision AS avg_water_pot,
117
+ (seven.soil_temp + two.soil_temp + nine.soil_temp) / 3::double precision AS avg_soil_temp,
118
+ wind.max_wind_speed,
119
+ wind.wind_dir_at_max_speed,
120
+ min_max_daily_temp.max_temperature,
121
+ min_max_daily_temp.min_temperature,
122
+ precip.sum_precip
123
+ FROM calendar
124
+ LEFT JOIN seven ON calendar.sensor_id::text = seven.sensor_id::text AND calendar.date = seven.date
125
+ LEFT JOIN two ON calendar.sensor_id::text = two.sensor_id::text AND calendar.date = two.date
126
+ LEFT JOIN nine ON calendar.sensor_id::text = nine.sensor_id::text AND calendar.date = nine.date
127
+ LEFT JOIN wind ON calendar.sensor_id::text = wind.sensor_id::text AND calendar.date = wind.date
128
+ LEFT JOIN min_max_daily_temp ON calendar.sensor_id::text = min_max_daily_temp.sensor_id::text AND calendar.date = min_max_daily_temp.date
129
+ LEFT JOIN precip ON calendar.sensor_id::text = precip.sensor_id::text AND calendar.date = precip.date
130
+ LEFT JOIN microclimate.sensor_devices_import sensors ON calendar.sensor_id::text = sensors.sensor_id::text
131
+ )
132
+ SELECT calc.address,
133
+ calc.sensor_position_detail,
134
+ calc.date,
135
+ calc.sensor_id,
136
+ calc.point_id,
137
+ unpivot.metrika,
138
+ unpivot.value
139
+ FROM calc,
140
+ LATERAL ( VALUES ('avg_temperature'::text,calc.avg_temperature), ('avg_air_hum'::text,calc.avg_air_hum), ('avg_pressure'::text,calc.avg_pressure), ('avg_wind_speed'::text,calc.avg_wind_speed), ('avg_water_pot'::text,calc.avg_water_pot), ('avg_soil_temp'::text,calc.avg_soil_temp), ('max_wind_speed'::text,calc.max_wind_speed), ('max_temperature'::text,calc.max_temperature), ('min_temperature'::text,calc.min_temperature), ('sum_precip'::text,calc.sum_precip), ('wind_dir_at_max_speed'::text,calc.wind_dir_at_max_speed)) unpivot(metrika, value)
141
+ WHERE unpivot.value IS NOT NULL;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@golemio/microclimate",
3
- "version": "1.0.5-dev.746965867",
3
+ "version": "1.1.0-dev.762755367",
4
4
  "description": "Golemio Microclimate Module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",