Ola,
Having some issues with a program and the HTTPPut command. I'll paste the relevant part of the program below (edited for space). but basically I've got a datalogger with 5 tables that I need pushed (put) to an HTTPS address. I've been given an authentication code but keep getting a 401 error. Also the errors populate in the http_header variable not in the "http_Put_Response" variable.
'Declare Variables and Units Public BattV : Units BattV = volts Public PTemp_C : Units PTemp_C = °C Public PTemp_F : Units PTemp_F = °F Public CVData(14) Public SlrTF_MJ : Units SlrTF_MJ = MJ/m² Public CVMeta As String * 40 Public WSpdPrev : Units WSpdPrev = miles/hour Public WindDirPrev : Units WindDirPrev = degrees Public MaxWSpdPrev : Units MaxWSpdPrev = miles/hour Public Invalid_Wind As Long Public http_header As String * 200 Public http_put_response1 As String * 200 Public http_put_response2 As String * 200 Public http_put_response3 As String * 200 Public http_put_response4 As String * 200 Public http_put_response5 As String * 200 Public SERVER_PATH As String *250 Public http_put_tx1 Public http_put_tx2 Public http_put_tx3 Public http_put_tx4 Public http_put_tx5 Alias CVData(1) = SlrFD_W : Units SlrFD_W = W/m² Alias CVData(2) = Rain : Units Rain = inches Alias CVData(3) = Strikes : Units Strikes = count Alias CVData(4) = Distance : Units Distance = miles Alias CVData(5) = WindSpd : Units WindSpd = miles/hour Alias CVData(6) = WindDir : Units WindDir = ° Alias CVData(7) = MaxWindSpd : Units MaxWindSpd = miles/hour Alias CVData(8) = AirTemperature : Units AirTemperature = °F Alias CVData(9) = Vapor_Press : Units Vapor_Press = mbar Alias CVData(10) = Barometric_Press : Units Barometric_Press = mbar Alias CVData(11) = Relative_Humidity : Units Relative_Humidity = % Alias CVData(12) = Relative_Humidity_Temp : Units Relative_Humidity_Temp = °F Alias CVData(13) = TiltNS_deg : Units TiltNS_deg = ° Alias CVData(14) = TiltWE_deg : Units TiltWE_deg = ° Public CollectData(3) As Boolean Public Result_AC(3) As Long Public Accel_AC1(3) Alias Accel_AC1(1) = Accel_1x Alias Accel_AC1(2) = Accel_1y Alias Accel_AC1(3) = Accel_1z Public Accel_AC2(3) Alias Accel_AC2(1) = Accel_2x Alias Accel_AC2(2) = Accel_2y Alias Accel_AC2(3) = Accel_2z Public Accel_AC3(3) Alias Accel_AC3(1) = Accel_3x Alias Accel_AC3(2) = Accel_3y Alias Accel_AC3(3) = Accel_3z Dim i 'Define Data Tables DataTable(CT_Wx,True,-1) DataInterval(0,10,Min,10) Minimum(1,BattV,FP2,False,False) Sample(1,PTemp_C,FP2) Sample(1,SlrFD_W,IEEE4) Average(1,SlrFD_W,IEEE4,False) Minimum(1,SlrFD_W,IEEE4,False,True) Maximum(1,SlrFD_W,IEEE4,False,True) Totalize(1,Rain,IEEE4,False) Totalize(1,Strikes,FP2,False) Minimum(1,Distance,FP2,False,True) Maximum(1,Distance,FP2,False,False) Sample(1,WindSpd,FP2) Sample(1,WindDir,FP2) WindVector(1,WindSpd,WindDir,FP2,False,90,0,0) FieldNames("WS_ms_S_WVT,WindDir_D1_WVT,WindDir_SD1_WVT") Maximum(1,MaxWindSpd,FP2,False,False) Sample(1,AirTemperature,FP2) Average(1,AirTemperature,FP2,False) Minimum(1,AirTemperature,FP2,False,True) Maximum(1,AirTemperature,FP2,False,True) Sample(1,Vapor_Press,IEEE4) Sample(1,Barometric_Press,IEEE4) StdDev(1,Barometric_Press,IEEE4,False) Sample(1,Relative_Humidity,FP2) Sample(1,Relative_Humidity_Temp,FP2) StdDev(1,Relative_Humidity_Temp,FP2,False) Sample(1,TiltNS_deg,FP2) Sample(1,TiltWE_deg,FP2) Totalize(1,SlrTF_MJ,IEEE4,False) EndTable 'Accelerometer Data DataTable(CT_AC1,True,-1) Sample(3,Accel_AC1(),IEEE4) EndTable DataTable(CT_AC2,True,-1) Sample(3,Accel_AC2(),IEEE4) EndTable DataTable(CT_AC3,True,-1) Sample(3,Accel_AC3(),IEEE4) EndTable DataTable(Daily_Data,True,-1) DataInterval(86390,86400,Sec,10) Minimum(1,BattV,FP2,False,False) Minimum(1,PTemp_C,FP2,False,True) Maximum(1,PTemp_C,FP2,False,True) Maximum(1,SlrFD_W,FP2,False,True) Totalize(1,Rain,FP2,False) Minimum(1,Distance,FP2,False,True) Average(1,WindSpd,FP2,False) WindVector(1,WindSpd,WindDir,FP2,False,90,0,0) FieldNames("WindSpd_S_WVT,WindDir_D1_WVT,WindDir_SD1_WVT") Maximum(1,MaxWindSpd,FP2,False,True) Minimum(1,AirTemperature,FP2,False,True) Maximum(1,AirTemperature,FP2,False,True) Minimum(1,Vapor_Press,IEEE4,False,True) Maximum(1,Vapor_Press,IEEE4,False,True) Minimum(1,Barometric_Press,IEEE4,False,True) Maximum(1,Barometric_Press,IEEE4,False,True) Minimum(1,Relative_Humidity,FP2,False,True) Maximum(1,Relative_Humidity,FP2,False,True) Totalize(1,Invalid_Wind,FP2,False) Sample(1,CVMeta,String) EndTable 'Main Program BeginProg SetSetting("StationName", "CT_Wx") 'apply power to the ClimaVUE50 SW12 (SW12_1,1 ) http_header = "Internal file tag"&CHR(13)&CHR(10)&"internat logger tag" SERVER_PATH = "https://altitude.stantec.com/func/api/RunCampbellScientificFunction?code=Authorization code" 'If the datalogger program has just started running, delay program execution for ten seconds to allow the ClimaVUE50 time to warm up Delay(0,10,Sec) 'Main Scan Scan(10,Sec,1,0) 'Default CR6 Datalogger Battery Voltage measurement 'BattV' Battery(BattV) 'Default CR6 Datalogger Wiring Panel Temperature measurement 'PTemp_C' PanelTemp(PTemp_C,60) PTemp_F = PTemp_C * 1.8 + 32 'ClimaVUE50 Compact Digital Weather Sensor measurements 'SlrFD_W', 'Rain', 'Strikes', 'Distance', 'WindSpd', 'WindDir', 'MaxWindSpd', 'AirTemperature', 'Vapor_Press', Barometric_Press', 'Relative_Humidity', 'Relative_HumidityT_F', 'TiltNS_deg', and 'TiltWE_deg' 'Get data from ClimaVUE50 Compact Digital Weather Sensor SDI12Recorder(CVData(),C1,"0","R7!",1,0,-1) 'Convert fractional relative humidity into percent relative humidity Relative_Humidity = Relative_Humidity*100 'Calculate total solar flux in MJ/m² from flux density in W/m² 'The multiplier to calculate total flux was calculated by Short Cut 'and based on a program execution rate (scan rate) of 10 Seconds. 'If you change the program execution rate outside of Short Cut with the CRBasic Editor 'you will need to recalculate this multiplier. See the sensor manual for more details. SlrTF_MJ = SlrFD_W*1E-05 'Convert rain in mm to inch Rain = Rain * 0.03937 'Convert average strike distance in kilometers to miles Distance = Distance * 0.621371 'Convert wind speed in meters/second to miles/hour WindSpd = WindSpd * 2.23694 'Convert maximum wind speed in meters/second to miles/hour MaxWindSpd = MaxWindSpd * 2.23694 'Convert air temperature in °C to °F AirTemperature = AirTemperature * 1.8 + 32 'Convert vapor pressure in kPa to mbar Vapor_Press = Vapor_Press * 10 'Convert barometric pressure in kPa to mbar Barometric_Press = Barometric_Press * 10 'Convert relative humidity sensor temperature in °C to °F Relative_Humidity_Temp = Relative_Humidity_Temp * 1.8 + 32 'High winds with rain can temporarily interfere with sonic wind measurements causing the sensor to output -9999 or -9990. The following instructions set invalid wind measurements 'to the previous valid wind measurements. This will 'flat-line' the measurements until the sensor is able to make good readings again. The Invalid_Wind variable will be set to 1 when 'a wind measurement is invalid. For troubleshooting purposes, it is highly recommended that you totalize the Invalid_Wind variable in any output tables you define that include 'wind speed and/or direction data from the ClimaVUE50. If WindSpd < 0 Then WindSpd = WSpdPrev WindDir = WindDirPrev MaxWindSpd = MaxWSpdPrev Invalid_Wind = 1 Else WSpdPrev = WindSpd WindDirPrev = WindDir MaxWSpdPrev = MaxWindSpd Invalid_Wind = 0 EndIf 'Get ClimaVUE50 Compact Digital Weather Sensor metadata 'CVMeta' every day at midnight in case sensor is swapped or OS is updated If IfTime(0,1,Day) Then SDI12Recorder(CVMeta,C1,"0","I!",1,0) EndIf 'Call Data Tables and Store Data CallTable CT_Wx CallTable Daily_Data 'set remote stations clock to match base station If TimeIntoInterval (0,1430,Min) ClockReport (COMRF,0,1) ClockReport (COMRF,0,2) ClockReport (COMRF,0,3) EndIf NextScan SlowSequence Scan (1,Min,3,0) If IfTime (2,10,Min) Then For i = 1 To 3 CollectData(i) = True Next i EndIf If CollectData(1) Then GetDataRecord (Result_AC(1),COMRF,0,1,0,0.05,4,32769,CT_AC1,-1) If Result_AC(1) = 0 Then CollectData(1) = false EndIf If CollectData(2) Then GetDataRecord (Result_AC(2),COMRF,0,2,0,0.05,4,32769,CT_AC2,-1) If Result_AC(2) = 0 Then CollectData(2) = false EndIf If CollectData(3) Then GetDataRecord (Result_AC(3),COMRF,0,3,0,0.05,4,32769,CT_AC3,-1) If Result_AC(3) = 0 Then CollectData(3) = false EndIf If IfTime (5,10,min)Then http_put_tx1 = HTTPPut (SERVER_PATH,"CT_Wx",http_put_response1,http_header,0,10,min,-1008,7500) Delay (1,30,Sec) http_put_tx2 = HTTPPut (SERVER_PATH,"Daily_Data",http_put_response2,http_header,0,10,min,-1008,7500) Delay (1,30,Sec) http_put_tx3 = HTTPPut (SERVER_PATH,"CT_AC1",http_put_response3,http_header,0,10,min,-1008,7500) Delay (1,30,Sec) http_put_tx4 = HTTPPut (SERVER_PATH,"CT_AC2",http_put_response4,http_header,0,10,min,-1008,7500) Delay (1,30,Sec) http_put_tx5 = HTTPPut (SERVER_PATH,"CT_AC3",http_put_response5,http_header,0,10,min,-1008,7500) EndIf NextScan EndProg
Main thing is I need to know if I'm doing something wrong with the HTTPPut command?
Also, should I be putting the server_path and http_header in as constants? Actually I've already done that, but when I did I couldn't get any error codes to pop up in the http_put_response variables.
Also because i'm sending data from 5 tables should I (as I did) break it up into 5 seperate commands? or is there a way to do it all in one?
This post is under review.