from datetime import datetime
import os
import sys
[docs]def ipk2lgr(ipkfile):
today = datetime.today().strftime("%Y-%m-%d")
# handle the old and new filenames, abort if filename bad
filenameroot = ""
filename = filenameroot + ipkfile
lgrfilename = filename[:-3] + "lgr"
if os.path.isfile(filename) == False:
return "file doesn't exist"
if os.path.isfile(lgrfilename) == True: # replace existing lgr file
lgrfile = open(lgrfilename, "w+")
lgrfile.truncate()
else:
lgrfile = open(lgrfilename, "w+")
# read the ipk file into array, map included in comments below
ipkfile = open(filename, "r")
ipkline = []
for line in ipkfile:
try:
int(line)
ipkline.append(str(int(line)))
except:
ipkline.append(line[1:-2])
# assign smtp port if older IPK file
if len(ipkline) < 35:
smtpport = str(25)
else:
smtpport = str(ipkline[35])
# get iPack type
try:
ipacktype, apn = ipackinfo(ipkline[18])
except:
ipacktype, apn = ipackinfo_backup(ipkline[0])
# write the settings into a new lgr file
try:
writearray = []
writearray.append(
";Renewable NRG Systems SymphoniePRO & iPack Configuration File"
)
writearray.append(";Software Version: x.x.x.x (converted with Python)")
writearray.append(";Generated: " + today)
writearray.append("")
writearray.append("[FileHeader]")
writearray.append("FormatVersion=1")
writearray.append("")
writearray.append("[EmailSchedule]")
writearray.append("Frequency=" + callinterval(int(ipkline[17])))
writearray.append("Time(UTC)=" + calltime(int(ipkline[16])))
writearray.append("SmtpServer=" + ipkline[9])
writearray.append("SmtpPort=" + smtpport)
writearray.append("SmtpUserName=" + ipkline[28])
writearray.append("Password=" + ipkline[29])
writearray.append("SendersEmail=" + ipkline[12])
writearray.append("SendersName=")
writearray.append("RecipientsEmail=" + ipkline[10])
writearray.append("RecipientsName=" + ipkline[11])
writearray.append("CCEmail1=" + ipkline[25])
writearray.append("CCEmail2=" + ipkline[26])
writearray.append("Subject=" + ipkline[14])
writearray.append("")
writearray.append("[TimeService]")
writearray.append("SntpServer=" + ipkline[15])
writearray.append("UseSntp=On")
writearray.append("UseGps=On")
writearray.append("")
writearray.append("[iPackNetwork]")
writearray.append("iPackModel=" + ipacktype)
writearray.append("IspUserName=" + ipkline[4])
writearray.append("IspPassword=" + ipkline[5])
if apn == True:
writearray.append("GsmApn=" + ipkline[30])
writearray.append("Pin=") # +ipkline[19])
writearray.append("DialString=" + ipkline[0])
writearray.append("PrimaryDNS=" + ipkline[2])
writearray.append("SecondaryDNS=" + ipkline[3])
writearray.append("")
writearray.append("[LoggerInitiatedSchedule]")
writearray.append("Frequency=Disabled")
writearray.append("Time(UTC)=00:00")
writearray.append("PrimaryHost=")
writearray.append("PrimaryPort=30406")
writearray.append("SecondaryHost=")
writearray.append("SecondaryPort=30406")
writearray.append("Backup=On") # enable connections to listener server
writearray.append("")
writearray.append("[LoggerListeningSchedule]")
writearray.append("Frequency=" + callinterval(int(ipkline[17])))
writearray.append("Time(UTC)=12:00")
writearray.append("Duration=1 Hour")
# write array to file
print("\nWriting data to {0} ...\t\t".format(lgrfilename), end="", flush=True)
for row in writearray:
lgrfile.write("%s\n" % row)
lgrfile.close()
print("[DONE]")
except:
lgrfile.close()
print("Unable to convert file".format(ipkfile))
[docs]def callinterval(original):
if int(original) < 3600:
callint = str(original / 60) + " Minutes"
elif int(original) > 3600 and int(original) < 86400:
callint = str(original / 3600) + " Hours"
elif int(original) == 86400:
callint = "Daily"
elif int(original) > 86400 and int(original) < 520000:
callint = str(original / 86400) + " Days"
elif int(original) > 520000:
callint = "Weekly"
return callint
[docs]def calltime(original):
return datetime.utcfromtimestamp(int(original)).strftime("%H:%M")
[docs]def ipackinfo(typeint):
ipackdefs = (
["OTHER", "?", 0, False],
["CM900", "CM900", 1, False],
["GSM", "GSM", 2, True],
["CERMETEK", "Dial-up", 3, False],
["DOCOMO", "DoCoMo", 4, False],
["CDMA", "CDMA", 5, False],
["IRIDIUM", "Iridium", 6, False],
["GLOBALSTAR", "GlobalStar", 7, False],
["DIRECT", "iPackACCESS (7169)", 8, False],
["CDMA_C1", "iPackGPS CDMA (4621)", 9, False],
["GSM_G2_R1", "iPackGPS GSM (4622)", 10, True],
["GSM_3G", "iPackGPS 3G (7984)", 11, True],
["CDMA_C2", "iPackGPS CDMA (4621)", 12, False],
["2G_GSM_G3", "iPackGPS GSM (4622)", 13, True],
["LTE_TDD", "iPackGPS LTE-TDD (9388)", 14, True],
["LTE_VZW", "iPackGPS LTE-VZW (9390)", 15, True],
["LTE_ATT", "iPackGPS LTE-ATT (9389)", 16, True],
)
ipacktype = ipackdefs[typeint][1]
apn = ipackdefs[typeint][3]
return ipacktype, apn
[docs]def ipackinfo_backup(phonestr):
if phonestr[:3] == "*99":
ipacktype = "iPackGPS GSM (4622)"
apn = True
elif phonestr[:4] == "#777":
ipacktype = "iPackGPS CDMA (4621)"
apn = False
else:
ipacktype = "iPackACCESS (7169)"
apn = True
return ipacktype, apn
if __name__ == "__main__":
ipk2lgr(sys.argv[1])
# # # # # # #
# iPack file Line assignment (0 indexed)
#
# 0 = Primary ISP Phone Number
# 1 = Secondary ISP Phone Number (hidden)
# 2 = Primary DNS number
# 3 = Secondary DNS number
# 4 = ISP User name
# 5 = ISP Password
# 6 = POP Mailbox Name
# 7 = POP Mailbox Password
# 8 = POP3 server
# 9 = SMTP server
# 10 = Recipient's E-Mail Address
# 11 = Recipient's Name
# 12 = Sender's E-Mail Address
# 13 =
# 14 = E-Mail Subject Line
# 15 = Internet Time Server
# 16 = Next Call Time (seconds since 1970)
# 17 = Call Interval (seconds)
# 18 = iPack type:
# 0 = OTHER
# 1 = AMPS
# 2 = GSM/GPRS
# 3 = Dial-up
# 4 = DoCoMo
# 5 = CDMA
# 6 = Satellite ... etc...
# 19 = GSM pin
# 20 =
# 21 =
# 22 =
# 23 =
# 24 = Patch Password
# 25 = CC E-Mail Address
# 26 = CC E-Mail Address 2
# 27 = My SMTP Server requires authentication 1/0
# 28 = SMTP Login
# 29 = SMTP Password
# 30 = APN Name (GPRS Only)
# 31 = Download partial files 255/0
# 32 = Check POP mailbox 255/0
# 33 = Enable SMTP 255/0
# 34 = POP Port
# 35 = SMTP Port
# 36 = Enable Modbus? 1/0
# 37 = Modbus Slave Address (1-255)
# 38 = Modpus Port (1-65535)
# 39 = Enable DHCP? 1/0
# 40 = Static IP Address
# 41 = Subnet Mask
# 42 = Gateway IP Address
# 43 = Statistical Data Interval (seconds)
# 44 = Stale Data Timeout (seconds)
# 45 = Use Secure IP Address 1/0
# 46 - 55 = Allowed IP Address 1 - 10
# # # # # #
# LGR file comms line assignment
# 1 = ;Renewable NRG Systems SymphoniePRO & iPack Configuration File (comment)
# 2 = ;Software Version: 2.2.0.3 (build 27564 (modified) 2016-09-08) (comment)
# 3 = ;Generated: 2016-11-21 10:02:29 (comment)
# 4 =
# 5 = [FileHeader]
# 6 = FormatVersion=1
# 7 =
# 8 = [EmailSchedule]
# 9 = Frequency=Daily
# 10 = Time(UTC)=12:10
# 11 = SmtpServer=
# 12 = SmtpPort=
# 13 = SmtpUserName=
# 14 = Password=
# 15 = SendersEmail=
# 16 = SendersName=
# 17 = RecipientsEmail=
# 18 = CCEmail1=
# 19 = CCEmail2=
# 21 = Subject=
# 22 =
# 23 = [TimeService]
# 24 = SntpServer=ntp.ubuntu.com
# 25 = UseSntp=Off
# 26 = UseGps=On
# 27 =
# 28 = [iPackNetwork]
# 29 = iPackModel=iPackGPS CDMA (4621) OR
# iPackModel=iPackACCESS (7169)
# iPackModel=iPackGPS DoCoMo (4623) *USES APN & PIN
# iPackModel=iPackGPS 3G (7984) *USES APN & PIN
# iPackModel=iPackGPS GSM (4622) *USES APN & PIN
# 30 = IspUserName=web
# 31 = IspPassword=web
# 32 = GsmApn=
# 33 = Pin=
# 34 = DialString=#777 or *99***1#
# 35 = PrimaryDNS=0.0.0.0
# 36 = SecondaryDNS=0.0.0.0
# 37