<div dir="ltr">Pete,<div><br></div><div>Indeed there are many ways, each with its own advantages.  I now have a doorbell that super flexible.  </div><div><br></div><div>Is anybody interested in a tool to program the version 2 dash buttons?  Seems like the protocol is pretty straight forward, save for one call for a token.  Version 1 buttons have a web page you can program them on.</div><div><br></div><div>Mike</div><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Jul 24, 2016 at 2:58 PM, Pete Soper <span dir="ltr"><<a href="mailto:pete@soper.us" target="_blank">pete@soper.us</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
  
    
  
  <div bgcolor="#FFFFFF" text="#000000">
    Hi Mike,<br>
    <br>
    Cool. Many ways to skin this cat. Let's not forget to fret about
    it's bluetooth radiation. All .001 watts. :-)<br>
    <br>
    For our further amusement, here are FCC records for the Dash units I
    have:<br>
       <a href="https://apps.fcc.gov/oetcf/eas/reports/ViewExhibitReport.cfm?mode=Exhibits&RequestTimeout=500&calledFromFrame=N&application_id=dxg92UFnj11r21%2BxCAQtiQ%3D%3D&fcc_id=2AETK-1013" target="_blank">FCC
      exhibits for 2AETK-1013 (model JK29LP)</a><br>
       <a href="https://apps.fcc.gov/oetcf/eas/reports/ViewExhibitReport.cfm?mode=Exhibits&RequestTimeout=500&calledFromFrame=N&application_id=dxg92UFnj11r21%2BxCAQtiQ%3D%3D&fcc_id=2ACBE-0610" target="_blank">FCC
      exhibits for 2ACBE-0610 (model JK76PL)</a><br>
    <br>
    Both waver forms are dated January of this year. <br>
    <br>
    I have two of the JK29LPs and they weigh 30 grams. My other six are 
    the JK76PL and they weigh 26 grams. (playdoh are 29s, solidgold,
    gatorade, and chlorox are 76s). I took one of the heavier ones
    apart. Are these small torx screws! I'm missing my decent Dremel saw
    and kind of butchered the plastic with the next best thing. And the
    switch now requires a ball point pen to press. :-)<br>
    <br>
    I'll take a 76PL apart as soon as I avoid death by wife by finishing
    fixing her car. I'm interested in doing this now, as it appears some
    of these things have Atmel chips in them vs ST.<br>
    <br>
    -Pete<br>
    <br>
    <br>
    <br>
    <div>On 07/24/2016 11:56 AM, Michael
      Monaghan wrote:<br>
    </div>
    <blockquote type="cite">
      <div dir="ltr">My wifi router is doing all the work...
        <div><br>
        </div>
        <div>- Added new AP "dash"</div>
        <div>- Route "dash" AP to Internet</div>
        <div>- Setup Dash buttons. stopping at the product selection
          screen.  (Note this can be skipped if you manually configure
          the button)</div>
        <div>- Cut AP "dash" from Internet</div>
        <div>- Changed DHCP logging to include "Request" and ARP</div>
        <div>- Scan log from Python for new events</div>
        <div>- Do whatever I please.  Push Dash mounted as doorbell to
          send sounds to TV and music players plus send SMS that someone
          is at the door... turn on porch light and take a picture...
          electrify porch rails with the cattle tamer...</div>
        <div><br>
        </div>
        <div>Advantages:</div>
        <div><br>
        </div>
        <div>- The AP is always on and the Dash are connecting to it
          anyways</div>
        <div>- Separate SSID keeps them off my data SSIDs plus the
          entire AP configuration of the Dash is done in the open where
          anyone with a sniffer can capture it.  The Dash SSID is not
          routers and therefore goes nowhere if someone gets into it.</div>
        <div>- Script doesn't have to deal with all the usually network
          traffic</div>
        <div>- Dash buttons can't call home.</div>
        <div>- I can use them once to get my $5 credit.  The Energizer
          button paid me $0.17 to take a 16 pack of AAs off Amazon's
          hands after the cost of the AA and button.</div>
        <div>- It was so simple!</div>
        <div><br>
        </div>
        <div>Note that you can also telnet to talk with the button and
          configure it outside of the Amazon app.  V1 buttons have a
          configuration screen via HTML.  V2 buttons require special
          JSON requests (not complex) to pull the AP list and then set
          the base configuration.  Using this method you never have to
          talk to Amazon's servers.  The major advantage to this is you
          aren't sharing your SSID and Key with Amazon.</div>
        <div><br>
        </div>
        <div>Note if anyone is looking for a button to play with, I'll
          have a few at the next meeting.</div>
        <div><br>
        </div>
        <div>Mike</div>
        <div><br>
        </div>
        <div><br>
        </div>
        <div><br>
        </div>
        <div><br>
        </div>
      </div>
      <div class="gmail_extra"><br>
        <div class="gmail_quote">On Sat, Jul 23, 2016 at 11:58 PM, Pete
          Soper via TriEmbed <span dir="ltr"><<a href="mailto:triembed@triembed.org" target="_blank"></a><a href="mailto:triembed@triembed.org" target="_blank">triembed@triembed.org</a>></span>
          wrote:<br>
          <blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
            <div bgcolor="#FFFFFF" text="#000000"> To fill in a few
              blanks, the scapy-dependent Dash detector involving diaper
              logging that a ton of other implementations copy
              (including the one Rod pointed to) is <a href="https://medium.com/@edwardbenson/how-i-hacked-amazon-s-5-wifi-button-to-track-baby-data-794214b0bdd8#.1opwy0u3c" target="_blank">here</a>. For whatever reason (router
              seems the only suspect) that code does not work for me
              except for the very first time a Dash is used, at the
              point the router sees it's MAC address and gives it an IP
              via DHCP. <br>
              <br>
              Rather than figure out why it doesn't work for me or try a
              similar implementation like the one Rod pointed to,  I'm
              using <a href="http://arpalert.org" target="_blank">arpalert</a>,
              a relatively simple program that detects ARP traffic and
              executes an arbitrary, configured program with the MAC
              address as an argument (example shell script below). It
              has no dependencies beyond standard network libraries and
              is just exactly what I'm after, and maybe others would
              find it useful too. But it has to be built from source and
              there are a few wrinkles not covered by the English
              readme.  But for an expedient solution I contend the
              previous shell script I shared is as easy as an
              implementation is likely to get. :-)<br>
              <br>
              Here's an example program that arpalert can invoke when a
              Dash is pushed. The "button" variable assignment could be
              replaced by any arbitrary button-specific action, for
              instance Python code that does the whatsit transaction on
              the IFTTT Maker Channel, Raspberry Pi code to pull a GPIO
              line, etc. While I'm testing it the script just logs which
              Dash was pushed.<br>
              <pre>#!/bin/sh</pre>
              <pre>case $1 in</pre>
              <pre> (f0:27:2d:d8:26:ad) button='gatorade1';break;;</pre>
              <pre> (44:65:0d:14:1e:fb) button='playdoh2';break;;</pre>
              <pre> (f0:27:2d:bc:be:65) button='chlorox2';break;;</pre>
              <pre> (f0:27:2d:f9:36:d5) button='gatorade2';break;;</pre>
              <pre> (a0:02:dc:22:57:a7) button='chlorox1';break;;</pre>
              <pre> (f0:4f:7c:e8:ec:60) button='solidgold1';break;;</pre>
              <pre> (44:65:0d:21:d8:45) button='playdoh1';break;;</pre>
              <pre> (74:c2:46:9a:13:bc) button='solidgold2';break;;</pre>
              <pre>esac</pre>
              <pre>date >>/tmp/log</pre>
              <pre>echo $button >>/tmp/log</pre>
              <br>
              -Pete<br>
              <br>
              <br>
              <div>On 07/23/2016 04:53 PM, Pete Soper via TriEmbed
                wrote:<br>
              </div>
              <blockquote type="cite"> In the past couple days I've
                looked at a lot of different implementations. I'm not
                willing to spend the time to determine whether that one
                suffers the same issue that keeps the other
                scapy-dependent implementation from working here. IMO <a href="http://www.arpalert.org/arpalert.html" target="_blank">arpalert</a> is an excellent tool for
                this application.<br>
                <br>
                -Pete<br>
                <br>
                <div>On 07/23/2016 04:42 PM, Rodney Radford wrote:<br>
                </div>
                <blockquote type="cite">
                  <div dir="ltr">Pete, 
                    <div><br>
                    </div>
                    <div>Have you seen this method that simply relies on
                      the ARP requests by MAC address? Similar to where
                      you are heading, but this is already complete and
                      appears ready to us..<br>
                      <br>
                      <a href="https://familab.org/2016/02/hacking-the-amazon-dash-button-to-make-a-simple-cheap-iot-place-anywhere-networked-button-3/" target="_blank">https://familab.org/2016/02/hacking-the-amazon-dash-button-to-make-a-simple-cheap-iot-place-anywhere-networked-button-3/</a><br>
                    </div>
                    <div><br>
                    </div>
                  </div>
                  <div class="gmail_extra"><br>
                    <div class="gmail_quote">On Sat, Jul 23, 2016 at
                      4:02 PM, Pete Soper via TriEmbed <span dir="ltr"><<a href="mailto:triembed@triembed.org" target="_blank"></a><a href="mailto:triembed@triembed.org" target="_blank">triembed@triembed.org</a>></span>
                      wrote:<br>
                      <blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">OK, after wading through
                        some cosmically complex implementations of
                        "detect the button push" and finding the trivial
                        Python program of the seminal how-to involving
                        baby diaper use only works in my house for the
                        very first button press, I wondered if these
                        things would respond to pings while they're
                        winking and blinking. They do. Then I wondered
                        if they remember to request the same IP address
                        over and over. They do. So, in my house, where
                        the DHCP environment is very stable for the main
                        LAN, I can arrange for a completely reliable
                        mapping of button to IP address. So I can just
                        use the shell script below for a trivial means
                        of detecting a button. The script puts no
                        measurable load on the computer I tried it on.
                        I'm arranging a proper scheme that keys off MAC
                        addresses to be immune to DHCP behavior using
                        arpalert, but in the meantime I thought the
                        group might find this script amusing. (I'll
                        publish the arpalert-based scheme when I've
                        worked out some patches to that code to get a
                        few issues out of my face and some utilities to
                        automate the process a bit).<br>
                        <br>
                        To use this little script I I set up a button as
                        usual and either use the diaper-logger's Python
                        script or simply look at the router's admin
                        interface to see the IP address dispensed. I
                        then put that in my /etc/hosts file with a name
                        and use that in the script below. Making this
                        script general (e.g. taking the IP and
                        text/action as parameters) would of course be
                        the next step with this approach. Anyway, this
                        script might be of interest to folks that just
                        want to play vs installing scapy or a hundred
                        Javascript modules. I' about 99 3/4% sure this
                        would work on Windows using Cygwin.<br>
                        <br>
                        One interesting side effect of setting up a
                        bunch of buttons is that my phone is simply
                        filled with reminders about the fact that I
                        never selected a product for each button. So I
                        would add to the usual instructions out on the
                        net "after setting up the last button, uninstall
                        the Amazon app!"<br>
                        <br>
                        #!/bin/sh<br>
                        <br>
                        while [ /bin/true ] ; do<br>
                        <br>
                          ping -w 1 -c 1 gatorade1 >/dev/null
                        2>&1<br>
                        <br>
                          if [ $? -eq 0 ] ; then<br>
                        <br>
                            echo "You can get your own Gatorade" |
                        espeak --stdin<br>
                        <br>
                            # make sure we don't double trigger<br>
                        <br>
                            sleep 10<br>
                        <br>
                          fi<br>
                        <br>
                        done<br>
                        <br>
                        <br>
                        -Pete<br>
                        <br>
                        _______________________________________________<br>
                        Triangle, NC Embedded Computing mailing list<br>
                        <a href="mailto:TriEmbed@triembed.org" target="_blank">TriEmbed@triembed.org</a><br>
                        <a href="http://mail.triembed.org/mailman/listinfo/triembed_triembed.org" rel="noreferrer" target="_blank">http://mail.triembed.org/mailman/listinfo/triembed_triembed.org</a><br>
                        TriEmbed web site: <a href="http://TriEmbed.org" rel="noreferrer" target="_blank">http://TriEmbed.org</a><br>
                      </blockquote>
                    </div>
                    <br>
                  </div>
                </blockquote>
                <br>
                <br>
                <fieldset></fieldset>
                <br>
                <pre>_______________________________________________
Triangle, NC Embedded Computing mailing list
<a href="mailto:TriEmbed@triembed.org" target="_blank">TriEmbed@triembed.org</a>
<a href="http://mail.triembed.org/mailman/listinfo/triembed_triembed.org" target="_blank">http://mail.triembed.org/mailman/listinfo/triembed_triembed.org</a>
TriEmbed web site: <a href="http://TriEmbed.org" target="_blank">http://TriEmbed.org</a>
</pre>
              </blockquote>
              <br>
            </div>
            <br>
            _______________________________________________<br>
            Triangle, NC Embedded Computing mailing list<br>
            <a href="mailto:TriEmbed@triembed.org" target="_blank">TriEmbed@triembed.org</a><br>
            <a href="http://mail.triembed.org/mailman/listinfo/triembed_triembed.org" rel="noreferrer" target="_blank">http://mail.triembed.org/mailman/listinfo/triembed_triembed.org</a><br>
            TriEmbed web site: <a href="http://TriEmbed.org" rel="noreferrer" target="_blank">http://TriEmbed.org</a><br>
            <br>
          </blockquote>
        </div>
        <br>
      </div>
    </blockquote>
    <br>
  </div>

</blockquote></div><br></div></div>