ImportCumulusFile: Difference between revisions

From Cumulus Wiki
Jump to navigationJump to search
m
→‎Monthly table (2.0): Minor clarification
(→‎Schema: new)
m (→‎Monthly table (2.0): Minor clarification)
 
(29 intermediate revisions by 2 users not shown)
{{AddOnBanner|name=ImportCumulusFile|type=PHP|author=David A Jamieson / Mark Crossley|contact='DAJ' / 'mcrossley' via the forum|updated=1101 September 2018September2020|version=4.3.2}}
 
This is a PHP script designed to run on your webserverweb server and will import Cumulus log files into a MySQL database table on your server.
 
= Applicability to Cumulus 1 and MX =
This script was originally written for Cumulus 1, and all versions (except 4.x and later) will work with Cumulus 1. Please only use the latest version (currently 4.x) of the script with Cumulus MX.
 
Please be aware that '''for Cumulus MX the daily and monthly tables in the database can also be updated with rows for past dates by using ExportMySQL.exe'''. For information on how Cumulus MX updates the database tables using that instead of ''the script on this page'' please see [[MX_Administrative_Interface#MySQL_settings|the admin interface article]].
 
=Requirements=
 
The web server must have..
*PHP
*a Cumulus Log already uploaded
 
'''This script will create a table if no table exists for the selected log file'''.
=IMPORTANT NOTE FOR VERSION 2.0+=
 
Be aware that as the schema varies for different script versions, ''if a table already exists it '''must''' already have the number of columns in the table to '''match the number''' of columns populated in the version of the script you choose to use''.
 
It does not matter if the table has more column than the number of fields in the Cumulus log file, because from version 1.3(b) of the script all schemas only prohibit nulls in the columns that are present in log file for all cumulus versions. Columns for fields only present in newer Cumulus versions permit nulls, so any columns where no filed is available will be populated with a null.
 
The requirements state that you must use MySQL, because the syntax used to specify the required type for each column in the CREATE syntax is specific to that database. If all you are doing is updating an existing table, then the code will work for other database types as well because the INSERT syntax works with most databases accepting SQL instructions.
 
=IMPORTANT NOTE FOR VERSION 4.0+=
 
Designed for MX.
 
Version 4.0 changes the SQL table structures from version 2 & 3. If you are currently using version 2 or 3 and wish to upgrade, then you should DROP the existing tables and let the version 4 script recreate them, or alter the table structures to add the new columns.
 
= Schema for version 4.0 and later =
 
== Dayfile table ==
The database table that mirrors dayfile.txt (as at version 3.6.0) has the following schema (column names and their format):
<pre>
'LogDate', 'date NOT NULL'
'HighWindGust', 'decimal(4,1) NOT NULL'
'HWindGBear', 'smallint(3) unsigned zerofill NOT NULL'
'THWindG', 'varchar(5) NOT NULL'
'MinTemp', 'decimal(5,1) NOT NULL'
'TMinTemp', 'varchar(5) NOT NULL'
'MaxTemp', 'decimal(5,1) NOT NULL'
'TMaxTemp', 'varchar(5) NOT NULL'
'MinPress', 'decimal(6,2) NOT NULL'), // 8
'TMinPress', 'varchar(5) NOT NULL'
'MaxPress', 'decimal(6,2) NOT NULL'
'TMaxPress', 'varchar(5) NOT NULL'
'MaxRainRate', "decimal(4,$rainDec) NOT NULL" /* Note the number of decimal places is a variable, set to what suits you */
'TMaxRR', 'varchar(5) NOT NULL'
'TotRainFall', "decimal(6,$rainDec) NOT NULL" /* Note the number of decimal places is a variable, set to what suits you */
'AvgTemp', 'decimal(4,2) NOT NULL'
'TotWindRun', 'decimal(5,1) NOT NULL'
'HighAvgWSpeed', 'decimal(3,1)'
'THAvgWSpeed', 'varchar(5)'
'LowHum', 'decimal(4,1)'
'TLowHum', 'varchar(5)'
'HighHum', 'decimal(4,1)'
'THighHum', 'varchar(5)'
'TotalEvap', "decimal(5,$rainDec)" /* Note the number of decimal places is a variable, set to what suits you */
'HoursSun', 'decimal(3,1)'
'HighHeatInd', 'decimal(4,1)'
'THighHeatInd', 'varchar(5)'
'HighAppTemp', 'decimal(4,1)'
'THighAppTemp', 'varchar(5)'
'LowAppTemp', 'decimal(4,1)'
'TLowAppTemp', 'varchar(5)'
'HighHourRain', "decimal(4,$rainDec)" /* Note the number of decimal places is a variable, set to what suits you */
'THighHourRain', 'varchar(5)'
'LowWindChill', 'decimal(4,1)'
'TLowWindChill', 'varchar(5)'
'HighDewPoint', 'decimal(4,1)'
'THighDewPoint', 'varchar(5)'
'LowDewPoint', 'decimal(4,1)'
'TLowDewPoint', 'varchar(5)'
'DomWindDir', 'smallint(3) unsigned zerofill'
'HeatDegDays', 'decimal(4,1)'
'CoolDegDays', 'decimal(4,1)'
'HighSolarRad', 'decimal(5,1)'
'THighSolarRad', 'varchar(5)'
'HighUV', 'decimal(3,1)'
'THighUV', 'varchar(5)'
'MaxFeelsLike', 'decimal(4,1)' /* New in v4.0 */
'TMaxFeelsLike', 'varchar(5)' /* New in v4.0 */
'MinFeelsLike', 'decimal(4,1)' /* New in v4.0 */
'TMinFeelsLike', 'varchar(5)' /* New in v4.0 */
'MaxHumidex', 'decimal(5,1)' /* New in v4.2 */
'TMaxHumidex', 'varchar(5)' /* New in v4.2 */
'HWindGBearSym', 'varchar(3)'
'DomWindDirSym', 'varchar(3)'
</pre>
 
== Monthly table ==
 
It has been pointed out by "water01" in the support forum, that the specifier for the RG-11 field should match the other rainfall fields, and allow 2 decimal places for those using inches as their unit for rainfall, but this script (checked at version 4.1) restricts that field to just one decimal place.
 
<pre>
'LogDateTime', 'DATETIME NOT NULL'
'Temp', 'decimal(4,1) NOT NULL'
'Humidity', 'decimal(4,1) NOT NULL'
'Dewpoint', 'decimal(4,1) NOT NULL'
'Windspeed', 'decimal(4,1) NOT NULL'
'Windgust', 'decimal(4,1) NOT NULL'
'Windbearing' 'smallint(3) unsigned zerofill NOT NULL'
'RainRate', 'decimal(4,$rainDec) NOT NULL'
'TodayRainSoFar', 'decimal(4,$rainDec) NOT NULL'
'Pressure', 'decimal(6,2) NOT NULL'
'Raincounter', 'decimal(6,2) NOT NULL'
'InsideTemp', 'decimal(4,1) NOT NULL'
'InsideHumidity', 'decimal(4,1) NOT NULL'
'LatestWindGust', 'decimal(5,1) NOT NULL'
'WindChill', 'decimal(4,1) NOT NULL'
'HeatIndex', 'decimal(4,1) NOT NULL'
'UVindex', 'decimal(4,1)'
'SolarRad', 'decimal(5,1)'
'Evapotrans', 'decimal(4,1)'
'AnnualEvapTran', 'decimal(5,1)'
'ApparentTemp', 'decimal(4,1)'
'MaxSolarRad', 'decimal(5,1)'
'HrsSunShine', 'decimal(3,1)'
'CurrWindBearing', 'varchar(3)'
'RG11rain', 'decimal(4,1)'
'RainSinceMidnight', 'decimal(4,1)'
'FeelsLike', 'decimal(4,1)' /* New in 4.0 */
'Humidex', 'decimal(4,1)' /* New in 4.2 */
'WindbearingSym', 'varchar(3)'
'CurrWindBearingSym', 'varchar(3)'
</pre>
 
== Realtime table ==
<pre>
'LogDateTime', 'DATETIME NOT NULL'
'temp', 'decimal(4,1) NOT NULL'
'hum', 'decimal(4,1) NOT NULL'
'dew', 'decimal(4,1) NOT NULL'
'wspeed', 'decimal(4,1) NOT NULL'
'wlatest', 'decimal(4,1) NOT NULL'
'bearing', 'smallint(3) zerofill unsigned NOT NULL'
'rrate', 'decimal(4,$rainDec) NOT NULL'
'rfall', 'decimal(4,$rainDec) NOT NULL'
'press', 'decimal(6,2) NOT NULL'
'currentwdir', 'varchar(3) NOT NULL'
'beaufortnumber', 'varchar(2) NOT NULL'
'windunit', 'varchar(4) NOT NULL'
'tempunitnodeg', 'varchar(1) NOT NULL'
'pressunit', 'varchar(3) NOT NULL'
'rainunit', 'varchar(2) NOT NULL'
'windrun', 'decimal(4,1) NOT NULL'
'presstrendval', 'varchar(6) NOT NULL'
'rmonth', 'decimal(4,$rainDec) NOT NULL'
'ryear', 'decimal(4,$rainDec) NOT NULL'
'rfallY', 'decimal(4,$rainDec) NOT NULL'
'intemp', 'decimal(4,1) NOT NULL'
'inhum', 'decimal(4,1) NOT NULL'
'wchill', 'decimal(4,1) NOT NULL'
'temptrend', 'varchar(5) NOT NULL'
'tempTH', 'decimal(4,1) NOT NULL'
'TtempTH', 'varchar(5) NOT NULL'
'tempTL', 'decimal(4,1) NOT NULL'
'TtempTL', 'varchar(5) NOT NULL'
'windTM', 'decimal(4,1) NOT NULL'
'TwindTM', 'varchar(5) NOT NULL'
'wgustTM', 'decimal(4,1) NOT NULL'
'TwgustTM', 'varchar(5) NOT NULL'
'pressTH', 'decimal(6,2) NOT NULL'
'TpressTH', 'varchar(5) NOT NULL'
'pressTL', 'decimal(6,2) NOT NULL'
'TpressTL', 'varchar(5) NOT NULL'
'version', 'varchar(8) NOT NULL'
'build', 'varchar(5) NOT NULL'
'wgust', 'decimal(4,1) NOT NULL'
'heatindex', 'decimal(4,1) NOT NULL'
'humidex', 'decimal(4,1) NOT NULL'
'UV', 'decimal(3,1) NOT NULL'
'ET', 'decimal(4,$rainDec) NOT NULL'
'SolarRad', 'decimal(5,1) NOT NULL'
'avgbearing', 'smallint(3) zerofill unsigned NOT NULL'
'rhour', 'decimal(4,$rainDec) NOT NULL'
'forecastnumber', 'tinyint(2) unsigned NOT NULL'
'isdaylight', 'tinyint(1) unsigned NOT NULL'
'SensorContactLost', 'tinyint(1) unsigned NOT NULL'
'wdir', 'varchar(3) NOT NULL'
'cloudbasevalue', 'int NOT NULL'
'cloudbaseunit', 'varchar(2) NOT NULL'
'apptemp', 'decimal(4,1) NOT NULL'
'SunshineHours', 'decimal(3,1) NOT NULL'
'CurrentSolarMax', 'decimal(5,1) NOT NULL'
'IsSunny', 'tinyint(1) unsigned NOT NULL'
'FeelsLike', 'decimal(4,1)' /* New in 4.0 */
</pre>
 
 
= IMPORTANT NOTE FOR VERSION 2.x and 3.x =
 
Designed for Cumulus 1.
 
Version 2.0 changes the SQL table structures from version 1.x. If you are currently using version 1.x and wish to upgrade, then you should DROP the existing tables and let the version 2 script recreate them. If this is unacceptable DO NOT UPGRADE, stay with version 1.x
 
You could of course run 1.x and 2.x in parallel whilst you made the switch over gradually. Just alter the table names in v2 of the script slightly to avoid name collisions.
 
= Schema for versionversions 32.0 andto higher3.0 =
 
== Dayfile table (old) ==
 
The database table that mirrors dayfile.txt (with its fields as at Cumulus version 1.9.4) has the following schema at version 1.3 to 3.2 inclusive (column names and their format), for earlier Cumulus 1 versions with fewer fields, the schema will also work because all columns after 'TotWindRun' can default to null values:
== dayfile table ==
The database table that mirrors dayfile.txt (as at version 1.9.4) has the following schema (column names and their format):
<pre>
'LogDate', 'date NOT NULL'
'MaxTemp', 'decimal(5,1) NOT NULL'
'TMaxTemp', 'varchar(5) NOT NULL'
'MinPress', 'decimal(6,2) NOT NULL'), // 8
'TMinPress', 'varchar(5) NOT NULL'
'MaxPress', 'decimal(6,2) NOT NULL'
</pre>
 
== Monthly table (2.0 version) ==
For versions below 2.0, the first combined column as shown with both date and time did not exist, instead there was one column for date and one column for time.
 
As pointed out by Water01 in the support forum, the RG-11 field in the code and in the schema below is wrong, it should have 2 decimal places for those using inches like the other rainfall fields.
 
<pre>
'LogDateTime', 'DATETIME NOT NULL'
'Temp', 'decimal(4,1) NOT NULL'
'Humidity', 'decimal(4,1) NOT NULL'
'Dewpoint', 'decimal(4,1) NOT NULL'
'Windspeed', 'decimal(4,1) NOT NULL'
'Windgust', 'decimal(4,1) NOT NULL'
'Windbearing' 'smallint(3) unsigned zerofill NOT NULL'
'RainRate', 'decimal(4,$rainDec) NOT NULL'
'TodayRainSoFar', 'decimal(4,$rainDec) NOT NULL'
'Pressure', 'decimal(6,2) NOT NULL'
'Raincounter', 'decimal(6,2) NOT NULL'
'InsideTemp', 'decimal(4,1) NOT NULL'
'InsideHumidity', 'decimal(4,1) NOT NULL'
'LatestWindGust', 'decimal(5,1) NOT NULL'
'WindChill', 'decimal(4,1) NOT NULL'
'HeatIndex', 'decimal(4,1) NOT NULL'
'UVindex', 'decimal(4,1)'
'SolarRad', 'decimal(5,1)'
'Evapotrans', 'decimal(4,1)'
'AnnualEvapTran', 'decimal(5,1)'
'ApparentTemp', 'decimal(4,1)'
'MaxSolarRad', 'decimal(5,1)'
'HrsSunShine', 'decimal(3,1)'
'CurrWindBearing', 'varchar(3)'
'RG11rain', 'decimal(4,1)'
'RainSinceMidnight', 'decimal(4,1)'
'WindbearingSym', 'varchar(3)'
'CurrWindBearingSym', 'varchar(3)'
</pre>
 
== Realtime table (old) ==
<pre>
'LogDateTime', 'DATETIME NOT NULL'
'temp', 'decimal(4,1) NOT NULL'
'hum', 'decimal(4,1) NOT NULL'
'dew', 'decimal(4,1) NOT NULL'
'wspeed', 'decimal(4,1) NOT NULL'
'wlatest', 'decimal(4,1) NOT NULL'
'bearing', 'smallint(3) zerofill unsigned NOT NULL'
'rrate', 'decimal(4,$rainDec) NOT NULL'
'rfall', 'decimal(4,$rainDec) NOT NULL'
'press', 'decimal(6,2) NOT NULL'
'currentwdir', 'varchar(3) NOT NULL'
'beaufortnumber', 'varchar(2) NOT NULL'
'windunit', 'varchar(4) NOT NULL'
'tempunitnodeg', 'varchar(1) NOT NULL'
'pressunit', 'varchar(3) NOT NULL'
'rainunit', 'varchar(2) NOT NULL'
'windrun', 'decimal(4,1) NOT NULL'
'presstrendval', 'varchar(6) NOT NULL'
'rmonth', 'decimal(4,$rainDec) NOT NULL'
'ryear', 'decimal(4,$rainDec) NOT NULL'
'rfallY', 'decimal(4,$rainDec) NOT NULL'
'intemp', 'decimal(4,1) NOT NULL'
'inhum', 'decimal(4,1) NOT NULL'
'wchill', 'decimal(4,1) NOT NULL'
'temptrend', 'varchar(5) NOT NULL'
'tempTH', 'decimal(4,1) NOT NULL'
'TtempTH', 'varchar(5) NOT NULL'
'tempTL', 'decimal(4,1) NOT NULL'
'TtempTL', 'varchar(5) NOT NULL'
'windTM', 'decimal(4,1) NOT NULL'
'TwindTM', 'varchar(5) NOT NULL'
'wgustTM', 'decimal(4,1) NOT NULL'
'TwgustTM', 'varchar(5) NOT NULL'
'pressTH', 'decimal(6,2) NOT NULL'
'TpressTH', 'varchar(5) NOT NULL'
'pressTL', 'decimal(6,2) NOT NULL'
'TpressTL', 'varchar(5) NOT NULL'
'version', 'varchar(8) NOT NULL'
'build', 'varchar(5) NOT NULL'
'wgust', 'decimal(4,1) NOT NULL'
'heatindex', 'decimal(4,1) NOT NULL'
'humidex', 'decimal(4,1) NOT NULL'
'UV', 'decimal(3,1) NOT NULL'
'ET', 'decimal(4,$rainDec) NOT NULL'
'SolarRad', 'decimal(5,1) NOT NULL'
'avgbearing', 'smallint(3) zerofill unsigned NOT NULL'
'rhour', 'decimal(4,$rainDec) NOT NULL'
'forecastnumber', 'tinyint(2) unsigned NOT NULL'
'isdaylight', 'tinyint(1) unsigned NOT NULL'
'SensorContactLost', 'tinyint(1) unsigned NOT NULL'
'wdir', 'varchar(3) NOT NULL'
'cloudbasevalue', 'int NOT NULL'
'cloudbaseunit', 'varchar(2) NOT NULL'
'apptemp', 'decimal(4,1) NOT NULL'
'SunshineHours', 'decimal(3,1) NOT NULL'
'CurrentSolarMax', 'decimal(5,1) NOT NULL'
'IsSunny', 'tinyint(1) unsigned NOT NULL'
</pre>
 
=Installation=
 
*Download the PHP script ... [https://cumuluswiki.org/files/ImportCumulusFile_v3-2.txtthere (rightare click,download Savelinks as)]beside andeach thenversion renamein the .txtversion tohistory below.php
*SaveEdit the downloaded file and edit it using a text editor -- there are five entries to be edited
:servername, username, password, database and security key
:these are documented in the file at the top.
:if your decimal separator is a comma this also needs to be changed in the file using the $decimal_separator variable
 
*save the file as ImportCumulusFile.<b>php</b> (or whatever name you prefer) and upload it to your webserverweb server which is where it should be run.
*you will also need to upload any files it reads to your web server.
 
=Using the script=
php importcumulusfilev2-0.php file=realtime.txt type=realtime key=secretKey retainVal=7 retainUnit=day
This allows you to run the script as cron job on a Linux server, or as a scheduled task on a Windows server.
 
Version 4.3 of the script allows you to automate the generation of the monthly log file name rather than passing it as a variable.
You need to edit the following entries to enable this feature...
$auto_month = false; // True: generate from date, false: read from params
$month_file_dir= './data/'; // Directory where monthly log file is stored
 
= Version Control =
Latest MX download:
*4.3 - 1 September 2020 [https://cumuluswiki.org/files/ImportCumulusFile_v4-3.txt Download]
** Steinar Utne: If monthly and $auto_month=true then construct filename from date (i.e. <dir>MonYYlog.txt) rather than read from parameters
 
Earlier MX Downloads:
*4.2 - 18 August 2020 [https://cumuluswiki.org/files/ImportCumulusFile_v4-2.txt Download]
** Steinar Utne: Added Humidex in dayfile and monthly
*4.1 - 5 May 2020 [https://cumuluswiki.org/files/ImportCumulusFile_v4-1.txt (Download, right click, Save as)]
**Fix for files that do not have the required number of fields
*4.0 - 4 May 2020 Download removed
**Updated for CMX 3.6.0 addition of Feels Like
*3.2 - 11 September 2018 [[https://cumuluswiki.org/files/ImportCumulusFile_v3-2.txt Download]]
**Fixed inserting of WindbearingSym and CurrWindBearingSym
**SQL injection protection improved - requires the table names to be defined in this script
*2.8 - 27 April 2015 [[https://cumuluswiki.org/files/ImportCumulusFile_v2-8.txt Download]]
**Added addtionaladditional configuration parameter $rainUnit, default is 'mm'
**Added 'rain since midnight' to the monthly log file table
**This version is REQUIRED to support CumulusMX direct inserts
**To updated existing monthly tables use the following SQL command [if you use 'mm' for rain change (4,2) to (4,1)]:
***ALTER TABLE <<YOUR_MONTHLY_TABLENAME>> ADD COLUMN RainSinceMidnight DECIMAL(4,2) NULL AFTER RG11rain;
 
Legacy Cumulus 1 downloads:
*2.7 - 23 February 2015 [[https://cumuluswiki.org/files/ImportCumulusFile_v2-7.txt Download]]
**Fixed realtimereal-time/monthly/day tables creates, to make rainfall 2dp to allow for inches
**Fixed monthly table create, to make evapotrans 2 dp as it uses same units as rainfall
**Converted from depreciated mysql to mysqli
*2.6 - 02 April 2014, Mark Crossley [[https://cumuluswiki.org/files/ImportCumulusFile_v2-6.txt Download]]
***To alter an existing table...
***ALTER TABLE `dayfile` CHANGE `HighSolarRad` `HighSolarRad` DECIMAL(5,1) NULL DEFAULT NULL
*2.4 - 23 October 2013, Mark crossleyCrossley [[https://cumuluswiki.org/files/ImportCumulusFile_v2-4.txt Download]]
**Changed day file humidity fields from varchar(3) to decimal(4,1)
*2.3 - 05 June 2013, Mark Crossley [[https://cumuluswiki.org/files/ImportCumulusFile_v2-3.txt Download]]
*2.0 - 13 March 2013, Mark Crossley [[https://cumuluswiki.org/files/ImportCumulusFile_v2-0.txt Download]]
**Change monthly and realtime tables to use combined date/time columns rather than separate
**Added optional retention time for realtime table. Records older than the specified age will be deleted. The query-string parameters are '''retainVal=NNN retainUnit=XXXX'''
**Added checking to allow running of the script from a command line as well as via http
**Added 'extra' columns to record wind directions as compass points where they are only provided as bearings:
*1.3 - 27 Nov 2012, Mark Crossley, updated for Cumulus b1050 [[https://cumuluswiki.org/files/ImportCumulusFile_v1-3.txt Download]]
*1.2 - 6 May 2011, Mark Crossley, updated for Cumulus 1.9.1
*1.1c - 11 Mar 2010,David A Jamieson, Small modification to code to handle date delimiter with a dot [[http://wiki.sandsoft.com/files/ImportCumulusFile_v1-1c.txt Download]]
*1.1b - 04 Feb 2010, David A Jamieson, Added a variable to consider decimal separator
*1.1a - David A Jamieson, Added date delimiter
*1.1 - David A Jamieson, Added the facility to identify the delimiter used on the import file
*1.0 - David A Jamieson, First Release, see top of page for details
 
[[Category:WebTools]] [[Category:User Contributions]]
5,838

edits

Navigation menu