[PYTHON] Home Hack pour acheter automatiquement quand il devient moins cher avec Amazon Dash Button et Raspberry Pi

Ce que j'ai fait

Amazon Dash Button a été publié et diverses personnes le piratent, mais le point faible de cet appareil est qu'il s'agit d'une simple interface utilisateur qui appuie sur un bouton, donc je ne connais pas le montant ...

Les prix d'Amazon changent fréquemment, vous voulez donc acheter le moins cher possible, non? J'ai donc essayé de pirater physiquement le bouton Amazon Dash et de créer un appareil qui achètera automatiquement lorsque le prix descendra au montant spécifié.

タイトルなし.gif

Matériel

Nom les pièces prix
Amazon Dash Button image ¥500
Raspberry Pi 3 image ¥4,800
Micro Servo SG92G ¥500
Arduino Uno image ¥3,240

Pour le moment, le servomoteur et le bouton Amazon Dash sont fixés avec une bande de liaison.

Exécutez le servomoteur avec Arduino

Je n'avais pas assez de pièces pour me connecter au GPIO de Raspberry Pi, donc c'est un peu gênant, mais j'ai décidé de faire fonctionner le servomoteur via Arduino. Arduino n'est pas nécessaire si vous êtes bien préparé.

Lorsque «A» est reçu par communication série, le servomoteur est légèrement déplacé et le bouton Amazon Dash est enfoncé.

#include <Servo.h> 
const int pin = 8;
Servo myservo;

void setup() {
  myservo.attach(pin);
  Serial.begin(9600);
}

void loop() {
  if (Serial.available() > 0) {
    byte res = Serial.read();
    if (res == 'A') {
      myservo.write(20);
      delay(500);
    }
  } else {
    int val = myservo.read();
    if (val != 0) {
      myservo.write(0);
    }
  }
}

Quand j'envoie réellement «A» depuis le moniteur série de l'IDE Arduino Le servomoteur fonctionne comme ça

タイトルなし.gif

Communication série avec Raspberry Pi et Arduino

C'est la procédure pour connecter le Raspberry Pi et Arduino avec un câble USB et faire fonctionner le servomoteur via une communication série.

Installez pyserial avec pip

Tout d'abord, installez les bibliothèques nécessaires côté Raspberry Pi.

$ sudo apt-get install python-pip
$ sudo pip install pyserial

Vérifiez le nom du périphérique Arduino avec dmesg

Connectez le Raspberry Pi et Arduino avec un câble USB et vérifiez la connexion. Lorsque vous tapez la commande, elle sera affichée sous forme de paille, mais vous pouvez confirmer qu'elle est connectée avec le nom de périphérique ttyACM0 autour de l'endroit où ʻArduino` est affiché.

$ dmesg
[ 3401.469507] usb 1-1.5: new full-speed USB device number 4 using dwc_otg
[ 3401.583400] usb 1-1.5: New USB device found, idVendor=2341, idProduct=0043
[ 3401.583420] usb 1-1.5: New USB device strings: Mfr=1, Product=2, SerialNumber=220
[ 3401.583433] usb 1-1.5: Manufacturer: Arduino (www.arduino.cc)
[ 3401.583446] usb 1-1.5: SerialNumber: 554313134383513061F0
[ 3401.601770] cdc_acm 1-1.5:1.0: ttyACM0: USB ACM device

Essayez la communication série

Pour serial.Serial, définissez le nom du périphérique obtenu précédemment et la valeur spécifiée dans Arduino.

dashpush.py


import serial
import time

ser = serial.Serial('/dev/ttyACM0', 9600)
time.sleep(3)
ser.write(b'A')
ser.close()

Essayez de bouger

$ sudo python dashpush.py

Si le servomoteur fonctionne avec tout ce qui est connecté, vous êtes prêt à partir

Déterminez si l'article est bon marché

Utilisez l 'API Amazon Product Advertising pour obtenir le prix du produit et S'il est moins cher que le montant fixé, nous le ferons pour que vous puissiez l'acheter en appuyant sur le bouton.

Obtenez ASIN

Obtient l'ASIN du produit défini dans le bouton Amazon Dash. Copiez-le car il se trouve dans les informations sur le produit sur la page

Cette eau naturelle Suntory image Dans le cas de, il devient «B0043TXMWM».

Installation de la bibliothèque

Installez bottlenose et BeautifulSoup avec pip

$ sudo pip install bottlenose
$ sudo pip install BeautifulSoup

Obtenez des informations sur les produits et achetez

Analyser le XML des informations produit Amazon obtenues avec «bottlenose» avec «Beautiful Soup» Si le prix de l'eau est inférieur à 1200 yens, je lancerai la communication série et l'achèterai.

dashpush.py


import serial
import time
from bottlenose import api
from BeautifulSoup import BeautifulStoneSoup

AMAZON_ACCESS_KEY_ID = "xxxxxxxxxx"
AMAZON_SECRET_KEY = "xxxxxxxxxx"
AMAZON_ASSOC_TAG = "corelar-22"
ASIN = "B0043TXMWM"
PURCHASE_PRICE = 1200

# get api
amazon = api.Amazon(AMAZON_ACCESS_KEY_ID, AMAZON_SECRET_KEY, AMAZON_ASSOC_TAG, Region="JP")
res = amazon.ItemLookup(ItemId=ASIN, ResponseGroup="Offers")

# xml parse
soup = BeautifulStoneSoup(res)
price = soup.find("item").find("offer").find("price").find("amount").text

# push button
if int(price) < PURCHASE_PRICE:
    ser = serial.Serial('/dev/ttyACM0', 9600)
    time.sleep(3)
    ser.write(b'A')
    ser.close()

J'ai pu l'acheter. IMG_1108.PNG

Contrôlez votre achat avec votre smartphone

À ce rythme, nous achèterons toujours indéfiniment quel que soit l'état du stock. Vous permet de modifier le seuil de quantité de biens achetés depuis votre smartphone.

Par exemple

Si vous créez une API sur AWS Lambda, mettez à jour ce montant à partir de l'application iOS et rendez-le lisible à partir de Raspberry Pi, vous n'aurez pas à vous soucier des achats continus. Lorsque vous appuyez sur le bouton, revenez simplement à 0 yen depuis Raspberry Pi.

Suivez les prix des produits un par un ** Achetez quand c'est le moins cher du mois dernier! Vous pouvez également faire quelque chose comme **

Configurer cron et exécuter régulièrement

Cette fois, j'ai vérifié une fois toutes les 30 minutes.

$ crontab -e

Dans le cas de raspbian, l'écran de sélection de l'éditeur est affiché au premier démarrage, Si vous appuyez sur Entrée sans lire, nano est sélectionné et il reste bloqué Vous pouvez resélectionner avec vim en appuyant sur la commande select-editor

crontab


*/30 * * * * sudo python dashpush.py > /dev/null 2>&1

Le reste est laissé ...

fin

Le calendrier de l'Avent était juste à temps ... Jusqu'à présent, il n'y avait pas d'API d'achat, mais je suis heureux de pouvoir enfin l'acheter.

C'était une application avant Tweaking Pokemon GO Plus, mais c'est devenu un appareil complètement négligé.

Amazon s'est concentré sur AWS Greengrass et AWS IoT Button. Et Enfin, Raspberry Pi Zero sera vendu au Japon l'année prochaine, Je veux que le Japon arrive à la version officielle dès que possible.

Recommended Posts

Home Hack pour acheter automatiquement quand il devient moins cher avec Amazon Dash Button et Raspberry Pi
Introduction facile au piratage domestique avec Raspberry Pi et discord.py
Utilisez python sur Raspberry Pi 3 pour éclairer la LED quand il fait noir!
IoT facile pour démarrer avec Raspeye et MESH
J'ai automatiquement collecté mes données de publication Qiita avec Raspberry Pi et je les ai régulièrement notifiées avec Slack
J'ai piraté le bouton Amazon Dash et je me suis inscrit à Salesforce
Mesurez et comparez les températures avec Raspberry Pi et générez automatiquement des graphiques
Mesurez la température, l'humidité, etc. avec SensorTag et envoyez-le à Ambient via Raspberry Pi 3 pour le représenter graphiquement Partie 2
Un mémorandum lors de l'acquisition automatique avec du sélénium
Créez un thermomètre avec Raspberry Pi et rendez-le visible sur le navigateur Partie 4
Lisez les données du lecteur NFC connecté à Raspberry Pi 3 avec Python et envoyez-les à openFrameworks avec OSC
Remarque: je souhaite faire de la domotique avec Home Assistant + Raspberry Pi + capteur # 1
Acquérir la valeur du capteur de Grove Pi + avec Raspberry Pi et la stocker dans Kintone
Surveillance des animaux avec Rekognition et Raspberry pi
Fabriquez un thermomètre avec Raspberry Pi et rendez-le visible sur le navigateur Partie 3
J'ai essayé de créer un bouton pour Slack avec Raspeye + Tact Switch