2016-05-18 7 views
1

Я внедрил решение для домашней автоматизации, чтобы отслеживать работу моих детей, используя две кнопки Amazon Dash, малиновый пи и код на питоне, аналогичный тому, что было сделано here. Это решение работает уже несколько месяцев.Amazon Dash Button остановил ARPing?

Вчера кнопки, похоже, прекратили АРПИНГ. То есть я больше не могу обнаружить ARP от них, и я не могу обнаружить их MAC-адрес, обнюхивая его. Мне интересно, есть ли у кого-нибудь еще эта проблема? В дополнение к механизму python, использующему scapy, я также попробовал «ip-рс» безрезультатно. Пример сценария bash с использованием команды «ip neigh» - here. Я попытался обнаружить кнопки как от RaspberryPI, так и от Mac. Все машины успешно настроены на одну и ту же беспроводную сеть.

Дополнительная информация. Первоначально я заказал 3 кнопки, но 1 из них никогда не казался ARP, поэтому я отложил его. Я уточню, когда узнаю больше информации об этой проблеме.

EDIT Я несколько раз пытался решить эту проблему, используя андроид приложения Amazon, чтобы добавить новую кнопку тира и перенастроить их снова.

ответ

2

То, что я сделал, чтобы решить эта проблема заключалась в назначении фиксированных IP-адресов кнопкам на беспроводном маршрутизаторе, к которому они привязаны (потому что я мог видеть их MAC-адреса в таблице DHCP). Затем я переписал сценарий, чтобы просто обнаружить успешные пинги против ipAddress, которые были назначены кнопками. Я заметил, что кнопки остаются в сети ненадолго (может быть, 15-20 секунд), поэтому я добавил немного времени ожидания между обнаружениями (вроде фильтра debounce на физическом коммутаторе), чтобы гарантировать, что одна и та же кнопка нажата не обнаружено дважды. Это сделал трюк.

Сначала я нашел чистую реализацию питона ping (который я скопировал замок, запас, & ствола в сценарий питона), то я писал этот код:

#!/usr/bin/python 
from scapy.all import * 
import requests 
import time 
import os, sys 
import subprocess 
import re 
import platform 
import datetime 

BUTTON_A = "<assigned IP address to Button A>" 
BUTTON_B = "<assigned IP address to Button B>" 
last_button_push_A = datetime.datetime(2013,12,30,23,59,59) 
last_button_push_B = datetime.datetime(2005,12,30,1,1,1) 
waittime_sec = 20 
while (True): 
     try:  
      delta = (datetime.datetime.now() - last_button_push_A).seconds 
      print (delta > 20) 
      if (do_one(BUTTON_A, 1) is not None) and delta > waittime_sec: 
        last_button_push_A = datetime.datetime.now(); 
        logfile.write("<Child 1> Completed a Chore: "+time.strftime("%Y-%m-%d %H:%M")+"\n") 
        logfile.flush() 
        play_sound_child_1() 
      delta = (datetime.datetime.now() - last_button_push_B).seconds 
      if (do_one(BUTTON_B, 1) is not None) and delta > waittime_sec: 
        last_button_push_B = datetime.datetime.now() 
        logfile.write("<child 2> Completed a Chore: "+time.strftime("%Y-%m-%d %H:%M")+"\n") 
        logfile.flush() 
        play_sound_child_2() 
     except BaseException as e: 
      logfile.write("EXCEPTION: {}\n".format(e)) 
      logfile.write("Loop Rest at "+time.strftime("%Y-%m-%d %H:%M")+"\n") 
+0

Будет ли это считаться «Бронирование DHCP», как указано здесь? https://github.com/maddox/dasher#protips – mickdekkers

+0

Нет, на самом деле, но это может быть очень хорошо. Я отредактирую свой комментарий, чтобы опубликовать свой код. –

1

Возможно, вы отключили кнопку «Даша» со своей учетной записи Amazon? Я обнаружил, что если кнопка Dash была деактивирована (что больше не отображается в вашей учетной записи), в следующий раз, когда кнопка Dash выберет Mothership. Он сообщит Dash, что он больше не активирован. С этого момента нажатие кнопки Dash приведет к красному свету и не приведет к подключению Wi-Fi и, следовательно, к записи ARP. Также может случиться так, что Amazon деактивировала кнопку Dash с их конца, чтобы сэкономить аккумулятор (так как вы, видимо, ничего не заказывали для последних n прессов).

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

+0

Я повторил шаги, чтобы активировать тире несколько раз. Это было сделано через приложение Android Amazon. Я также пробовал это в двух разных сетях. Интересно, что я нашел оттуда Мэтью Пертоффа статьи Dash: https://mpetroff.net/2015/05/amazon-dash-button-teardown/, что, когда Dash находится в режиме конфигурации, он фактически создает свою собственную точка доступа Wi-Fi.Я также попытался настроить сеть через это. Еще не повезло. –

+0

Когда вы нажимаете кнопку, какой мигающий узор вы видите? –

+0

@someuser Я получаю пульсирующий белый цвет, затем он мигает красным три раза –

4

У меня была аналогичная проблема для вас на этой неделе. Я установил свои кнопки для управления и переключения ламп LIFX и ежедневно их использовал без проблем в течение последних нескольких месяцев. Внезапно он просто прекратил работать, поэтому я проверил сценарий детектора (используя Scapy на малине Pi), и кнопки не были обнаружены.

Я по-прежнему получал уведомления на своем телефоне, что мои кнопки были нажаты и нуждаются в настройке, поэтому я могу сказать, что они все еще подключались к сети, и проблема была в сценарии детекторов или в Pi.

Возможно, это была другая проблема, но смена сценария обнаружения на Pi на эту альтернативу (предложенную на исходном почтовом ящике для детей с отслеживанием на 5 долларов) исправила мои проблемы. https://gist.github.com/ibrahima/5e43439eb71066bf891f

Я бы также предположил, что ваш маршрутизатор может изменить диапазоны или канал на тот, который кнопка тире не может связываться (и поэтому не может подключаться к маршрутизатору). Это случилось со мной раньше с моими лампочками (маршрутизатор автоматически переключился на канал 13, но LIFX обменивался только 1-11/12). Мне также пришлось играть с настройками маршрутизатора, чтобы в первую очередь настроить кнопки для обнаружения моей сети (но если вы можете полностью обработать процесс настройки, это, вероятно, не так). Потенциальное обновление программного обеспечения маршрутизатора или изменение настроек безопасности привели к разрыву обнаружения?

+0

есть ли способ сделать эти выходные MAC-адреса? –

+0

@ KeatonBurleson Да. Добавьте 'else: print" Неизвестное устройство с MAC-адресом "+ source_mac" ниже нижнего оператора 'if'. – mickdekkers

+0

@Soullesswaffle да, я понял это сам. Однако AF_PACKET недоступен в OS X, поэтому я не смог проверить. Я все еще ищу решение. –

2

У меня есть две новые кнопки, вместо того, чтобы делать arp для 0.0.0.0, они выполняют запрос bootp для получения адреса dhcp, это вызывает общие скрипты, которые ищут arp 0.0.0.0, чтобы игнорировать их.

вы можете изменить сценарии, чтобы наблюдать за BOOTP, вместо того, чтобы наблюдать за АРП 0.0.0.0, или просто пропустить первый чек в скрипт, который проверяет для АРП для 0.0.0.0

2

я использовал WireShark сузить проблему , Это отличный инструмент для устранения каких-либо проблем, связанных с сетью.

Как и палеридер, моя кнопка, кажется, выполняет запрос DHCP каждый раз, когда он соединяется вместо стандартного ARP, с IP-адресом источника «0.0.0.0» (поскольку он не имеет одного). Я обновил приложение-слушатель, чтобы искать DHCP-запросы от исходного IP-адреса «0.0.0.0», и я смог узнать, какие MAC-адреса делали эти типы запросов (не так много), а затем обновили мое приложение, чтобы посмотреть конкретно на этот MAC-адрес после получения запроса DHCP от исходного IP-адреса «0.0.0.0».

3

Оказывается, что «новая» кнопка модели черточки (они, наконец, были выпущены в Великобритании, и я играю с одного на день выпуска) ведут себя по-разному при подключении к сети, чем предыдущие модели. Это нарушает много кода, который обнаруживает их, отслеживая запросы ARP с исходным хостом 0.0.0.0.

Эти новые кнопки вместо того, чтобы, кажется, выдать запрос DHCP из 0.0.0.0 первого, а затем ARP запрашивает для других сетевых устройств (например, шлюз) с использованием IP-адреса они были назначены.

Обнаружение этого нового поведения довольно просто. Например, dash-button node module может быть сделано, чтобы работать для обоих типов кнопки путем изменения libpcap фильтра спецификации в build/ArpProbes.js от:

const ARP_PROBE_FILTER = 'arp src host 0.0.0.0';

в

const ARP_PROBE_FILTER = '(arp or (udp and src port 68 and dst port 67)) and src host 0.0.0.0';

Я также подал это dash-button выпуск here.

+1

Спасибо за это, возможно, потратил час на трал в Интернете, задаваясь вопросом, почему я не видел никаких ARP-пакетов в Wireshark! Для записи похоже, что модуль узла теперь работает с любым типом запроса - мне не нужно было исправлять упоминание в этом комментарии - используя этот модуль только что сработал. – djhworld

+0

Прохладный, похоже, что мое исправление слилось :-) – Tom

 Смежные вопросы

  • Нет связанных вопросов^_^