Перейти к содержанию

    

скрипты Python Telit

Доброго времени суток!

Писал скрипт для GL868 на Python Алгоритм следующий Основной скрипт настраивает модуль запускает монитор событий и переводит его в режим малого энергопотребления. Когда приходит входящий звонок монитор событий должен запустить следующий скрипт. Монитор событий срабатывает а скрипт не запускается. Может кто поможет Привожу код где в нем ошибка?

 

import MOD
import MDM
import SER
import sys

SER.set_speed('115200','8N1')

class SerWriter:
    def __init__(self):
        SER.set_speed('115200','8N1')

    def write(self,s):
        SER.send(s+'\r')

sys.stdout = sys.stderr = SerWriter()

def checkNetwork():
    MOD.sleep(20)
    REC_TIME = 200
    for _ in range(10):
        MDM.send('AT+CREG?\r',0)
        res = MDM.receive(REC_TIME)
        if (res.find('0,1')!=-1): return 1
        else: MOD.sleep(50)
    return 0


print "Start"
MDM.send('AT+CLIP=1\r',0)


MDM.send('AT#ENAEVMONI=0\r',0) # clear all evants
MDM.send('AT#ENAEVMONICFG=3,1,2\r',0) #
MDM.send('AT#EVMONI="RING",0,1,1\r',0) #Ring 1-th timeout 2 minute
a = MDM.send('AT#EVMONI="RING",0,0,"AT#ESCRIPT="runRING.pyo";AT#EXECSCR"\r',0) # Запуск скрипта по обработке входящего звонка
print "runRING.py Ok " + str(a)
MDM.send('AT#EVMONI="RING",1\r',0)
MDM.send('AT#ENAEVMONI=1\r',0) # set all evants
#MDM.send('AT&W\r',0)
print "MONI = Ok " + str(a)

 

runRING.pyo

 
import MOD
import MDM
import sys


MDM.send('AT\r',5) #

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я поступал проще:

# запускаем пользовательское приложение
try:
    import user
except: pass

где user - это пользовательский скрипт user.pyo

На try-exсept не обращайте внимания - это просто защита от глюков в пользовательском приложении

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо за совет

Я обнаружил что в строке

a = MDM.send('AT#EVMONI="RING",0,0,"AT#ESCRIPT="runRING.pyo";AT#EXECSCR"\r',0) # Запуск скрипта по обработке входящего звонка

указано две команды "AT#ESCRIPT="runRING.pyo";AT#EXECSCR", которые должны выполнятся по срабатыванию монитора событий Однако наличие скобок "runRING.pyo" нарушает конструкцию В документации вместо скобок советуют использовать символ \22 Но и это не помогает

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Появилась необходимость сохранять данные в файле на SIM карте или в памяти модуля GSM. Позволяет скриптовый язык Python сохранять и и считывать файлы данных?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

для примера работа с SIM:

# КЛАСС РАБОТЫ С НАСТРОЙКАМИ В SIM карте
class CCfg:
    def __init__ (self):
        try:
            # установили хранилище для телефонной книги на SIM карту
            CMD('AT+CPBS="SM"\r', 10)
            # ожидаем готовность SIM карты (фейковое чтение)
            while 1:
                res = CMD('AT+CPBR=50\r', 10)
                if (res[len(res) - 1] != 'ERROR'):
                    break
                else:
                    MOD.sleep(1)
        except:
            pass
    # функция чтения переменной из SIM карты
    def getvar (self, index):
        data = ''
        try:
            res = CMD('AT+CPBR=' + str(50 + index) + '\r', 10)
            if (res[0].find('+CPBR: ' + str(50 + index)) != -1):
                data = res[0].split('"')[1]
        except:
            pass
        return data
    # функция записи переменной на SIM карту
    def setvar (self, index, data):
        return CMD('AT+CPBW=' + str(50 + index) + ',' + str(data) + '\r', 10)

 

и пример с файлами:

# ЧТЕНИЕ ИЗ ФАЙЛА КОНФИГУРАЦИИ ПАРАМЕТРОВ GPRS И FTP
def GET_CFG ():
    apn = ext = ftp = ''
    try:
        # открываем файл конфигурации программы обновления
        cfg = open('boot.cfg', "r")
        apn = cfg.readline().replace('\r\n', '')
        ext = cfg.readline().replace('\r\n', '')
        ftp = cfg.readline().replace('\r\n', '')
        cfg.close()
    except: pass
    # возвращаем параметры программы обновления
    return apn, ext, ftp

Тут только чтение, как записывать думаю понятно будет

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Доброго времени суток!

Писал скрипт для GL868 на Python Алгоритм следующий Основной скрипт настраивает модуль запускает монитор событий и переводит его в режим малого энергопотребления. Когда приходит входящий звонок монитор событий должен запустить следующий скрипт. Монитор событий срабатывает а скрипт не запускается. Может кто поможет Привожу код где в нем ошибка?

 

import MOD
import MDM
import SER
import sys

SER.set_speed('115200','8N1')

class SerWriter:
    def __init__(self):
        SER.set_speed('115200','8N1')

    def write(self,s):
        SER.send(s+'\r')

sys.stdout = sys.stderr = SerWriter()

def checkNetwork():
    MOD.sleep(20)
    REC_TIME = 200
    for _ in range(10):
        MDM.send('AT+CREG?\r',0)
        res = MDM.receive(REC_TIME)
        if (res.find('0,1')!=-1): return 1
        else: MOD.sleep(50)
    return 0


print "Start"
MDM.send('AT+CLIP=1\r',0)


MDM.send('AT#ENAEVMONI=0\r',0) # clear all evants
MDM.send('AT#ENAEVMONICFG=3,1,2\r',0) #
MDM.send('AT#EVMONI="RING",0,1,1\r',0) #Ring 1-th timeout 2 minute
a = MDM.send('AT#EVMONI="RING",0,0,"AT#ESCRIPT="runRING.pyo";AT#EXECSCR"\r',0) # Запуск скрипта по обработке входящего звонка
print "runRING.py Ok " + str(a)
MDM.send('AT#EVMONI="RING",1\r',0)
MDM.send('AT#ENAEVMONI=1\r',0) # set all evants
#MDM.send('AT&W\r',0)
print "MONI = Ok " + str(a)

 

runRING.pyo

 
import MOD
import MDM
import sys


MDM.send('AT\r',5) #

 

 

Требуется помощь в коррекции скрипта для Telit GL868. Работу оплачу

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ув коллеги в процессе отлаживания скрипта под GL868-DUAL V3 (AT+CGMR 16.01.181) обнаружил, что не работает команда

MDM.send('AT+CPBW=50,' + str(abonent) + ',145,smsNum\r', 15)

 

Согласно документации переменные str(abonent) и smsNum должны находиться в кавычках (") Пробовал всячески прописать кавычки но пока безрезультатно

 

При вожу функцию в которой сбоит эта команда Может не в команде дело а в задержках

    def findCall(self):
       out = 0
       while (1==1):
           res = MDM.receive(10)
           if (res.find('+CLIP:') != -1):
               abonent = res.split('"')[1]
               MDM.send('AT+CPBF=' + str(abonent) + '\r', 0)
               res = MDM.receive(1)
               if (res.find('ERROR') == -1):
                   MDM.send('ata\r', 1)
                   SER.send('Connenct ' + str(abonent) + '\r\n')
                   #MDM.send('AT+CPBW=50,' + str(abonent) + ',145,smsNum\r', 15)
                   res = MDM.receive(30)
                   SER.send(str(res))
                   out = 1
               else:
                   MDM.send('ath0\r', 2)
                   SER.send('Disconnect\r\n')
                   out = -1
               break
       return out

Изменено пользователем csm7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Ув коллеги в процессе отлаживания скрипта под GL868-DUAL V3 (AT+CGMR 16.01.181) обнаружил, что не работает команда

MDM.send('AT+CPBW=50,' + str(abonent) + ',145,smsNum\r', 15)

 

Согласно документации переменные str(abonent) и smsNum должны находиться в кавычках (") Пробовал всячески прописать кавычки но пока безрезультатно

 

При вожу функцию в которой сбоит эта команда Может не в команде дело а в задержках

    def findCall(self):
       out = 0
       while (1==1):
           res = MDM.receive(10)
           if (res.find('+CLIP:') != -1):
               abonent = res.split('"')[1]
               MDM.send('AT+CPBF=' + str(abonent) + '\r', 0)
               res = MDM.receive(1)
               if (res.find('ERROR') == -1):
                   MDM.send('ata\r', 1)
                   SER.send('Connenct ' + str(abonent) + '\r\n')
                   #MDM.send('AT+CPBW=50,' + str(abonent) + ',145,smsNum\r', 15)
                   res = MDM.receive(30)
                   SER.send(str(res))
                   out = 1
               else:
                   MDM.send('ath0\r', 2)
                   SER.send('Disconnect\r\n')
                   out = -1
               break
       return out

+CPBF ищет не номер (который вы получаете из +CLIP), а имя из телефонной книги, соответственно вы никогда не попадете в ветку с +CPBW

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Send: at+cpbf=+38067*******<cr><lf>
at+cpbf=+38067******

+CPBF: 51,"+38067*******",145,"+38067*******"

OK

 

По алгоритму все работает нормально. Проблема оказалась в том что когда трубка поднята нет возможности записывать номер в телефонную книгу

 

 

Доброго времени суток Появился другой вопрос Как отослать СМС записанному в телефонной книге абоненту. Номер ячейки известен. а также известно ник этого номера в телефонной книге. Определять мобильный номер нет желания, где-то видел команду - отсылает СМС по номеру ячейки или по нику записанного в телефонной книге абонента

Изменено пользователем csm7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Доброго времени суток!

 

В модуле GL868 работает скрипт. Вопрос . Запустится ли при этом другой скрипт если придет СМС с кодом запуска скрипта типа

AT#ESCRIPT="user.pyo";#execscr;\r

 

И еще по ходу один вопрос.

Работает скрипт - в какой-то момент он запускает другой скрипт. Возможно ли запускаемому скрипту передать параметры с работающего скрипта

Изменено пользователем csm7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация