https://github.com/cyphunk/shrine
project for frankenrobbert.com
https://github.com/cyphunk/shrine
Last synced: 13 days ago
JSON representation
project for frankenrobbert.com
- Host: GitHub
- URL: https://github.com/cyphunk/shrine
- Owner: cyphunk
- Created: 2019-10-29T22:05:10.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2021-05-03T00:10:39.000Z (about 5 years ago)
- Last Synced: 2025-01-13T11:50:49.329Z (over 1 year ago)
- Language: Python
- Size: 22.8 MB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README

# Shrine
A object for use by the artist duo http://www.frankenrobbert.com to be
integrated into other works
## Physical components
Tested with:
* Raspberry Pi 4 & 3 with Raspbian buster version from [2021-03-04](https://downloads.raspberrypi.org/raspios_armhf/images/raspios_armhf-2021-03-25/2021-03-04-raspios-buster-armhf.zip), previously tested with [2019-09-30](https://downloads.raspberrypi.org/raspbian/images/raspbian-2019-09-30/)
* Also tested with local PC (for USB printers)
* Adafruit ZJ-80 Serial thermal printers
* Cheaper USB thermal printers (e.g. [here](https://www.ebay.de/itm/Excelvan-USB-58mm-Thermal-Dot-Receipt-Printer-Kassendrucker-schwarz-5890K-EU/123901821203?ssPageName=STRK%3AMEBIDX%3AIT&_trksid=p2057872.m2749.l2649))
## Setup
Physically connect printer. For Adafruit or ZJ-80 printer:
- Printer `Black` wire = `GND` to Raspberry Pi pin `6`
- Printer `Yellow` wire = `TX` to Raspberry Pi pin `10`
- Printer `Green` wire = `RX` to Raspberry Pi pin `8`
- Printer `Vcc` Power pin to Raspberry Pi `3.3v` pin `1`
- (more detail at [pinout.xyz](https://pinout.xyz))
Enable serial uart with config menu (_or enable_uart=1 in /boot/config.txt_):
raspi-config
Install the ZJ-80 drivers from [Adafruit](https://github.com/adafruit/zj-58) (_or alternative [klirichek](https://github.com/klirichek/zj-58)_):
sudo apt-get update
sudo apt-get install -y git cups wiringpi build-essential libcups2-dev libcupsimage2-dev
git clone https://github.com/adafruit/zj-58
cd zj-58/ && make && sudo ./install
Test print on Raspberry Pi v4 with serial printer (on v3 change serial0 to ttyAMA0):
sudo /usr/sbin/lpadmin -p ZJ-58 -E -v serial:/dev/serial0?baud=19200 -P /usr/share/cups/model/zjiang/ZJ-58.ppd
## Start
Copy the config file and change the admin password therein:
cp server.ini.example server.ini
Install required python libraries `web.py` `pycups` `WSGIserver` `instaloader`:
sudo apt-get install -y python3-
sudo python3 -m pip install -r requirements.txt
Run start script:
sudo ./start.sh
Starting as normal user will start server on port 8080, when starting with root the web UI starts on port 80
Access UI:
* ``https://localhost:80/admin`` configure
* ``https://localhost:80/upload`` manually upoad image to print, if enabled
* ``https://localhost:80/`` see downloaded images

To start individual elements instead of using ``start.sh``:
* ``start_printer.sh`` will setup the printer. Setup persists so not required if already setup and configration has not changed. You can just test with: ``echo test | lp -d PRINTER``
* ``start_wifi.sh`` will setup wifi network. Setup persists. Check with ``./status.sh``
* ``sudo python3 server.py``
## Additional setup tips
* ZJ-80 driver options: [Adafruit](https://github.com/adafruit/zj-58) or alternative [klirichek](https://github.com/klirichek/zj-58)
* Test ZJ-80 driver on Linux PC with USB printer:
sudo systemctl start cups
sudo /usr/sbin/lpadmin -p ZJ-58 -E -v $URI -P /usr/share/cups/model/zjiang/ZJ-58.ppd
* ``start_printer.sh`` for other printer testing and various lp management commands

## Trouble shooting
* [Information about Instagram rate limiting](https://developers.facebook.com/docs/instagram-api/overview/#rate-limiting) -- see also headers server returns on requests. Not sure what the restrictions are for un-registered apps -- 200 requests per hour?
* pip install error `fatal error: cups/cups.h: No such file or directory` required installing `sudo apt-get install libcups2-dev`
## Direct interaction
can try various commands found with:
stty -F /dev/serial0 19200
# print test page works
echo -en '\x12T' > /dev/serial0
# Change font settings failed:
echo -en '\x1D!\x00' > /dev/serial0 # small
echo -en '\x1D!\x11' > /dev/serial0 # large
echo -en '\x1B-\x01' > /dev/serial0 # small underline
echo -en '\x1B@' > /dev/serial0 # reset
echo "test" | lp -d PRINTER
# above fails, below works:
echo -e "test\n\n" > /dev/serial0
# may have require first sending? '\x1b\x37\x07\xff\x02' which changes heat?
# Alternatively this also works:
echo -e "test\n\n\n\n" > /tmp/print && lp -d PRINTER -o raw /tmp/print
[More examples](https://github.com/adafruit/Adafruit_CircuitPython_Thermal_Printer/blob/master/adafruit_thermal_printer/thermal_printer.py)
### loss of internet
Added try/except and hope this will no longer crash the instagram thread:
```
connection: [Errno -3] Temporary failure in name resolution')) [retrying; skip with ^C]
JSON Query to explore/tags/goawaysorrowoftheworld/: HTTPSConnectionPool(host='www.instagram.com',port=443): Max retries exceeded with url: /explore/tags/goawaysorrowoftheworld/?__a=1 (Caused byNewConnectionError(': Failed toestablish a new connection: [Errno -3] Temporary failure in name resolution')) [retrying; skip with ^C]
192.168.0.132:50074 - - [29/Oct/2019 06:07:23] "HTTP/1.1 POST /admin" - 303 See Other
192.168.0.132:50074 - - [29/Oct/2019 06:07:23] "HTTP/1.1 GET /admin" - 200 OK
192.168.0.132:50074 - - [29/Oct/2019 06:07:29] "HTTP/1.1 GET /admin" - 200 OK
JSON Query to explore/tags/goawaysorrowoftheworld/: HTTP error code 500. [retrying; skip with ^C]
Exception in thread Thread-1:
Traceback (most recent call last):
File "/usr/lib/python3.7/threading.py", line 917, in _bootstrap_inner
self.run()
File "/home/pi/shrine_code/web/instagram.py", line 88, in run
self.get_latest_post()
File "/home/pi/shrine_code/web/instagram.py", line 48, in get_latest_post
for post in self._posts:
File "/usr/local/lib/python3.7/dist-packages/instaloader-4.2.9-py3.7.egg/instaloader/instaloader.py", line 833, in get_hashtag_posts
params)['graphql']['hashtag']['edge_hashtag_to_media']
File "/usr/local/lib/python3.7/dist-packages/instaloader-4.2.9-py3.7.egg/instaloader/instaloadercontext.py", line 372, in get_json
raise QueryReturnedNotFoundException("404 Not Found")
instaloader.exceptions.QueryReturnedNotFoundException: 404 Not Found
```