All streams
Search
Write a publication
Pull to refresh
65
0
Евгений Донцов @dontsov

инженер-программист

Send message

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

В dashboard variables:

email (тип query)
source (influxDB)
SHOW TAG VALUES FROM waterius WITH KEY=email where email=${__user.email:sqlstring}

Отобразит только электронную почту залогиненого в Grafana пользователя.

Вторая переменная token прежняя:
SHOW TAG VALUES FROM waterius WITH KEY=token WHERE "email" =~ /^email/

Создаем пользователя. Пусть его почта demo@demo.ru
При авторизации в дашборде будет показываться только demo@demo.ru.

К сожалению, данный способ нельзя публиковать, т.к. от браузера идут сырые запросы к БД и любой пользователь сможет запросить данные чужого.

Если знаете, как можно дать доступ к Grafana так, чтобы пользователь мог запрашивать из БД только свои данные, напишите.

Спасибо! Ох уж эти размерности =).

Офигенно! Жду продолжения!

p.s. То чувство, когда родной Политехнический музей настолько музей, что даже шкафы для экспонатов стали экспонатами =)

Да, уже померили, спасибо. До ассемблера не дошли. Но перешли на analogread для совместимости с намуром. Следущей оптимизацией может быть запоминание типа счетчика, чтобы если он геркон, то digitalread, если намур — analogread делать. Правда, не факт, что в 4кб уложимся.
analogread в tinycore оптимальный, digitalread нет, поэтому там битами поработал.
Да, спасибо, знаем. С учетом wi-fi такая минимизация потребления не совсем оправдана. А вот если делать другие версии, то да.
Простите, я правильно понял, что вуз размещает на официальном сайте литературу по учебе, просмотр бесплатный, а скачивание платное?! о_0
А сколько рублей, если не секрет, за методичку по предмету?
Вот так я считаю комиссию Алиэкспресса и комиссию партнерской программы:

Цикл по каждому товару в заказе:
for dto in data['child_order_list']['global_aeop_tp_child_order_dto']:
    g = Good()
    g.name = self.parse_name_from_attr(dto)

    g.sum = float(dto['init_order_amt']['amount'])
    g.quantity = int(dto['product_count'])
    g.price = float(dto['product_price']['amount'])

    if 'afflicate_fee_rate' in dto:
        # партнерская комиссия, рублей
        g.affiliate_commission = g.price * g.quantity * float(dto['afflicate_fee_rate'])

    if 'escrow_fee_rate' in dto:
        # комиссия Алиэкспресса
        g.ali_commission = g.price * g.quantity * float(dto['escrow_fee_rate'])

    if 'refund_info' in dto and dto['refund_info']:
        amt = dto['refund_info']['refund_cash_amt']
        # если был возврат товара
        g.refund = 1.0 * amt['cent'] / amt['cent_factor']


p.s. да, я знаю, что лучше в копейках считать

А вот здесь парсинг цвета товара:
    def parse_name_from_attr(self, dto):
        attr = json.loads(dto['product_attributes'])
        if 'sku' in attr:  # для тестов
            for a in attr['sku']:
                if 'selfDefineValue' in a:
                    return a['selfDefineValue']
                #if attr['pName'] == 'Color':
                #   if attr['pValue'] == 'White':
                #   elif attr['pValue'] == 'Blue':
                #   elif attr['pValue'] == 'YELLOW':

            for a in attr['sku']:
                if 'pName' in a and a['pName'] == 'Color':
                    if a['pValue'] == 'Black':
                        return 'Ватериус'
Кажется у меня что-то работает «не так», раз я не обновляю сессионный ключ уже полгода…
Я описал его получение у себя в ЖЖ:
sessionkey — Ключ, который мы должны получить после авторизации. Есть 2 пути его получения: авторизация через OAuth 2.0 или «браузер». Т.к. пока есть цель написать локальный Питон скрипт без сервера, выберем 2й вариант.
Откроем в браузере oauth.aliexpress.com/authorize?response_type=token&client_id=111111111&state=1212&view=web&sp=ae, где 111111111 — ваш appKey
Соглашаемся с Соглашением и видим access_token. Его и пишем в sessionkey.


Китайский SDK еще с 3м Питоном не работал, я переписал ядро.
По ссылке скрипт для получения заказов.

Вот так, например, я записываю трек номера Почты России в заказы на Алиэкспресс:

def send_track_id(order_id, track_id):
    """
    Отправка номера отправления в заказ на Алиэкспресс
    :param order_id: номер заказа
    :param track_id: номер отправления
    :return:
    """
    req = api.AliexpressSolutionOrderFulfillRequest(url, port)
    req.set_app_info(appinfo(ALIEXPRESS_APPKEY, ALIEXPRESS_SECRET))

    #req.description = 'Почта России в регионы'
    req.service_name = 'RUSSIAN_POST_RU_PROVINCE_RUB'  #'Почта России в регионы'
    req.tracking_website = 'https://www.pochta.ru/tracking'
    req.out_ref = str(order_id)
    req.send_type = 'all'
    req.logistics_no = str(track_id)

    try:
        resp = req.getResponse(ALIEXPRESS_SESSION_KEY)
        if resp['aliexpress_solution_order_fulfill_response']['result']['result_success']:
            return True
    except TopException as err:
        if err.errorcode == 15:
            if '该交易订单已填写发货通知' in err.submsg:
                raise Exception('Трек номер уже заполнен')
        raise err
А какой компании «умные счетчики»?
Не соглашусь. Плохой контакт в Герконе не будет заметен извне, а rs485 просто не будет работать или будут ошибки — вы это заметите.
Всё так.
Добавлю: НАМУР — это 2-х проводный интерфейс. Там параллельно и последовательно стоит по резистору. 4 провода производители счётчиков сделали, чтобы было оба интерфейса сразу.

Спасибо! Буду благодарен за репост в соцсетях :)

Вместо батареек запихните: Модуль DC-DC преобразователя AMS1117 (с 6–12 V в 5 V)

Когда я ковырял С2000-ПП, то кажется не все регистры отзывались на функции единичного/множественного чтения…

Год назад видел датчик газа… — Этих российских датчиков с проприетарными протоколами столько, что пора делать фестивали протоколов и присуждать премии по номинациям =/.
Откуда у вас столько злости/зависти?
Код обещают открыть после официальных поставок устройства.
Это просто прекрасно. Спасибо за сайт, Андрей.
Спасибо, Алексей, за проект!
Спасибо вам за статью! Ушел считать бюджет, чтобы стать вашим клиентом.

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Registered
Activity