ImportCumulusFile: Difference between revisions

From Cumulus Wiki
Jump to navigationJump to search
m
→‎Monthly table (2.0): Minor clarification
m (→‎Monthly table (2.0): Minor clarification)
 
(25 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=0401 May 2020September2020|version=4.03}}
 
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 4.0+=
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.
 
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''.
=IMPORTANT NOTE FOR VERSION 2.0+=
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
 
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 new table formats use a combined date/time field instead of separate, this makes constructing queries much simpler, it is worth making the change.
 
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.
Of course if you do change, then any existing queries you are using will also have to be rewritten - take this into account. It may be possible to create VIEWs of the new tables that mimic the old table format, and for you to use those views with your existing queries, that is an exercise for you!
 
=IMPORTANT NOTE FOR VERSION 4.0+=
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.
 
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 =
'HighUV', 'decimal(3,1)'
'THighUV', 'varchar(5)'
'HWindGBearSym', 'varchar(3)'
'DomWindDirSym', 'varchar(3)'
'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 */
'FeelsLikeMaxHumidex', 'decimal(45,1)' /* New in 4v4.02 */
'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'
'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)'
'FeelsLike', 'decimal(4,1)' /* New in 4.0 */
</pre>
 
</pre>
 
 
= IMPORTANT NOTE FOR VERSION 2.0+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
 
The new table formats use a combined date/time field instead of separate, this makes constructing queries much simpler, it is worth making the change.
 
Of course if you do change, then any existing queries you are using will also have to be rewritten - take this into account. It may be possible to create VIEWs of the new tables that mimic the old table format, and for you to use those views with your existing queries, that is an exercise for you!
 
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 versions 2.0 to 3.0 =
 
== Dayfile table (old) ==
 
The database table that mirrors dayfile.txt (as at version 1.9.4) has the following schema (column names and their format):
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:
<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.
 
== Monthly table ==
<pre>
'LogDateTime', 'DATETIME NOT NULL'
</pre>
 
== Realtime table (old) ==
<pre>
'LogDateTime', 'DATETIME NOT NULL'
=Installation=
 
*Download the PHP script ... [https://cumuluswiki.org/files/ImportCumulusFile_v4-0.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.0 - 4 May 2020 [[https://cumuluswiki.org/files/ImportCumulusFile_v4-0.txt 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.02 - 418 MayAugust 2020 [[https://cumuluswiki.org/files/ImportCumulusFile_v4-02.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]]
**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