#Region Project Attributes
#ApplicationLabel: B4A Example
#VersionCode: 1
#VersionName:
'SupportedOrientations possible values: unspecified, landscape or portrait.
#SupportedOrientations: unspecified
#CanInstallToExternalStorage: False
#BridgeLogger: true
#End Region
#Region Activity Attributes
#FullScreen: False
#IncludeTitle: True
#End Region
Sub Process_Globals
Public SQL1 As SQL
Public DBFolder As String
Public DBFileName = "octopus.db" As String
Public rp As RuntimePermissions
Public DBTableName As String : DBTableName = "octopus"
Public RatesChk As Map
End Sub
Sub Globals
Public SV As ScrollView
Public Header As Panel
Public Table As Panel
Public NumberOfColumns, RowHeight, ColumnWidth As Int
Public HeaderColor, TableColor, FontColor, HeaderFontColor As Int
Public FontSize As Float
Public Alignment As Int
Public SelectedRow As Int
Public SelectedRowColor As Int
'Table settings
HeaderColor = Colors.Gray
NumberOfColumns = 5
RowHeight = 30dip
TableColor = Colors.White
FontColor = Colors.Black
HeaderFontColor = Colors.White
FontSize = 14
Alignment = Gravity.CENTER 'change to Gravity.LEFT or Gravity.RIGHT for other alignments.
SelectedRowColor = Colors.Blue
Private XUI As XUI
Private Dialog As B4XDialog
Private DateTemplate As B4XDateTemplate
Public SV As ScrollView
Private btn As Button
Public APItxt As String
Public EMPRN As String
Public ESerial As String
Public basicAuth As String
Public from(100) As String
Public tim0(100) As String
Public tim1(100) As String
Public cons(100) As Double
Public FromChk As String
Public tim0Chk As String
Public tim1Chk As String
Public exvChk As String
Public invChk As String
Public txtTim As String
Public txtCons As String
Public IntTime(100) As String
Public ConSumption(100) As Double
Private BarChart1 As xChart
Private lblDate As Label
Private lblPeriods As Label
Public ChgPeriods As String
End Sub
Sub Activity_Create(FirstTime As Boolean)
SV.Initialize(0)
Table = SV.Panel
Table.Color = TableColor
Activity.AddView(SV, 0%x, 30%y, 100%x, 65%y)
ColumnWidth = SV.Width / NumberOfColumns
' SelectedRow = -1
Activity.LoadLayout("electric")
DBFolder = rp.GetSafeDirDefaultExternal("")
If File.Exists(DBFolder, DBFileName) = False Then
File.Copy(File.DirAssets, DBFileName, DBFolder, DBFileName)
SQL1.Initialize(DBFolder, DBFileName, False)
Else
SQL1.Initialize(DBFolder, DBFileName, False)
End If
SetHeader(Array As String("From","To","Tariff","Useage","Amount"))
Dialog.Initialize (Activity)
Dialog.Title = "Select a date"
DateTemplate.Initialize
DateTemplate.MinYear = 2016
DateTemplate.MaxYear = 2030
SV.Initialize(0)
SetStartDate
GetSettings
btn_Click
End Sub
Sub GetSettings
Private ResultSet1 As ResultSet
Private Query As String
SQL1.Initialize(DBFolder, DBFileName, True)
Query = "SELECT Name, API_Key, Electric_MPAN, Electric_Serial FROM Octopus"
ResultSet1 = SQL1.ExecQuery(Query)
ResultSet1.Position = 0
APItxt = ResultSet1.GetString("API_Key")
EMPRN = ResultSet1.GetString("Electric_MPAN")
ESerial = ResultSet1.GetString("Electric_Serial")
End Sub
Sub btn_Click
RatesChk.Initialize
Wait For (Dialog.ShowTemplate(DateTemplate, "", "", "CANCEL")) Complete (Result As Int)
If Result = XUI.DialogResponse_Positive Then
lblDate.Text = DateTime.Date(DateTemplate.Date)
'get Rates and put into RatesChk Map
Log("Doing doRatesChk")
doRatesChk
Log("Back from doRatesChk")
'
Dim tariff As String
tariff = RatesChk.Get("00:30") ' this one is null
Log(tariff)
Log("Above should be 5.292 as shown when it's in doRatesChk")
End If
End Sub
Sub doRatesChk
ChgLblPeriod
Dim tariff As String
Dim job2 As HttpJob
job2.Initialize("", Me)
Dim httpText2 As String
httpText2 = "https://api.octopus.energy/v1/products/AGILE-18-02-21/electricity-tariffs/E-1R-AGILE-18-02-21-E/standard-unit-rates/" & ChgPeriods
job2.Download(httpText2)
Wait For (job2) JobDone(job2 As HttpJob)
If job2.Success = True Then
Dim parser As JSONParser
parser.Initialize(job2.GetString)
Dim root As Map = parser.NextObject
Dim Count As String = root.Get("count")
'ClearAll
Dim results As List = root.Get("results")
For i = 0 To Count - 1
Dim str As Map = results.Get(i)
Dim strVar As String = str.Get("valid_from")
'FromChk= strVar.SubString2(0,10)
invChk = str.Get("value_inc_vat")
If invChk = "" Then invChk="0.00"
tim0Chk = str.Get("valid_from")
tim0Chk = tim0Chk.SubString2(11,16)
RatesChk.Put(tim0Chk, invChk)
Next
Else
Log(job2.ErrorMessage)
End If
tariff = RatesChk.Get("00:30")
Log("Tariff is")
Log(tariff)
'so it works here but not when it returns back to
job2.Release
'Return
End Sub
Sub ChgLblPeriod
Dim Periods, dow As String
Dim splt4, splt6 As Double
Periods = lblPeriods.Text
Dim Split1, Split2, Split3, Split4, Split5, Split6, Split7 As String
Split1 = Periods.SubString2(0,24)
Split2 = "01"
Split3 = Periods.SubString2(26,48)
Split4 = Periods.SubString2(49,50) ' to mm
Split5 = "-" '- between to mm and dd
Split6 = Periods.SubString2(51,53) ' to dd
Split7 = "T01:00:00"
splt4 = Split4
splt6 = Split6
splt6 = splt6 + 1
Split4 = NumberFormat2(splt4, 2, 2, 0, True)
Split6 = NumberFormat2(splt6, 2, 2, 0, True)
ChgPeriods = Split1 & Split2 & Split3 & Split4 & Split5 & Split6 & Split7
End Sub
Sub SetStartDate
DateTime.Date(DateTime.Now)
DateTime.DateFormat = "yyyy-MM-dd"
lblDate.Text = DateTime.Date(DateTemplate.Date)
lblPeriods.Text="?period_from=" & lblDate.Text & "T00:00:00&period_to=" & lblDate.Text & "T23:30:00"
End Sub
Sub ClearAll
For i = Table.NumberOfViews -1 To 0 Step -1
Table.RemoveViewAt(i)
Next
Table.Height = 0
SelectedRow = -1
End Sub
'Set the headers values
Sub SetHeader(Values() As String)
If Header.IsInitialized Then Return 'should only be called once
Header.Initialize("")
For i = 0 To NumberOfColumns - 1
Dim l As Label
l.Initialize("header")
l.Text = Values(i)
l.Gravity = Gravity.CENTER
l.TextSize = FontSize
l.Color = HeaderColor
l.TextColor = HeaderFontColor
l.Tag = i
Header.AddView(l, ColumnWidth * i, 0, ColumnWidth, RowHeight)
Next
Activity.AddView(Header, SV.Left, SV.Top - RowHeight, SV.Width, RowHeight)
End Sub
Sub NumberOfRows As Int
Return Table.NumberOfViews / NumberOfColumns
End Sub
Sub Activity_Resume
End Sub