# Insegna Bar Manhattan

### Procedura di installazione step-by-step

Scaricare l'immagine "Raspbian Buster Lite" in versione .zip da questo link:

* [Raspbian Buster Lite](https://www.raspberrypi.org/downloads/raspbian/)

Installare sul proprio PC Balena Etcher:

* [Balena Etcher](https://www.balena.io/etcher/)

Con Balena Etcher salvare l'immagine di Raspbian Buster Lite in una microSD da almeno 8GB

Finita la scrittura dell'immagine estrarre e reinserire la microSD nel lettore per vederne il contenuto.

Salvare nella micro SD questo file:

* [SSH](./SSH)

Editare con un editor ASCII tipo Nodepad questo file inserendo il nome della WiFi e la password di 
accesso e memorizzarlo nella microSD

* [wpa_supplicant.conf](./wpa_supplicant.conf)

Smontare la MicroSD ed inserirla nella Raspberry Pi. Collegare alla Raspberry monitor e tastiera
e dare alimentazione.

Al Login digitare:

	raspberrypi login: pi
	Password: raspberry
	
Cambiare l'hostname, il timezone ed aventualmente la password di accesso con il programma:

	sudo raspi-config

### Installare il software richiesto

* apache2 (webserver)
* git (gestore versioni software)
* mosquitto (server mqtt)
* mosquitto-clients (utilities per mqtt)
* chromium-browser (versione home di Chrome)
* xorg (libreria grafica)

Con i seguenti comandi al prompt di linux: 

	sudo apt update
	sudo apt install -y apache2 git mosquitto mosquitto-clients chromium-browser xorg

Installare node-red:

	bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)

### Configurazione mosquitto

	sudo nano /etc/mosquitto/conf.d/ledwall.conf

Contenuto:

	listener 1883
	protocol mqtt
	listener 1884
	protocol websockets


Rilanciare mosquitto:

	sudo systemctl restart mosquitto
	
### Configurazione Node-Red

	sudo systemctl enable nodered.service
	sudo systemctl start nodered.service

### Configurazione Chromium

	sudo nano /lib/systemd/system/chromium.service
	
Contenuto	
	
	[Unit]
	Description=Launch Chromium
	After=systemd-user-sessions.service
	
	[Service]
	ExecStart=/usr/bin/xinit -bg black -fg black -geometry 132x36 -e "runuser pi -c 'chromium-browser  -kiosk --remote-debugging-port=9222 --incognito --disable-pinch --overscroll-history-navigation=0 --window-position=0,0 --window-size=768,256 http://localhost'" -- -nocursor -s 0 -dpms
	Restart=on-abort
	User=root
	WorkingDirectory=/home/pi
	
	[Install]
	WantedBy=multi-user.target

Rilanciare Chromium:	
	
	sudo systemctl daemon-reload
	sudo systemctl enable chromium
	sudo systemctl start chromium

Installare l'applicazione LedWall (serve Sergio):

	cd
	git clone https://github.com/AcmeSystems/Baraonda.git
	
Creare un link simbolico alla RootDirectory di Apache2:

	cd 
	mv Baraonda html
	sudo rm -Rf /var/www/html
	cd /var/www
	sudo ln -s /home/pi/html html
	cd

### Installazione Nodi e flussi Node-red

Accedere all'interfaccia di sviluppo Node-Red:

* <http://ip_raspberry:1880>

Dal menu in alto a destra (tre lineette) selezionare "Manage Pallette" e quindi il tab Install.
Cercare ed installare i seguenti nodi:

* node-red-dashboard
* node-red-contrib-fs-ops
* node-red-contrib-ip
* node-red-contrib-crypto-js-mod

Rilanciare Node-red:

	sudo systemctl restart nodered.service

Fare il resfresh della pagina:

* <http://ip_raspberry:1880>


## Link operativi

* <a href="http://led.tanzilli.com/Codiad" target="_blank">Editor pagine web (Codiad)</a>
* <a href="http://led.tanzilli.com:1880" target="_blank">Node-red di produzione</a>
* <a href="http://led.tanzilli.com:1880/ui" target="_blank">Webapp di produzione</a>

## Insegna Bar Manhattan

* __pi@manhattan.local__ password: (blr)

## Controllo di Chromium da remoto

Lanciare il Chromium da controllare con questi parametri:

	--remote-debugging-port=9222

Per cambiare pagina da un programma Python installare pychrome:

	sudo apt install -y python-pip
	sudo pip install pychrome
	
Quindi usare questo programma Python di esempio:

	import pychrome
	import sys
	
	# create a browser instance
	browser = pychrome.Browser(url="http://127.0.0.1:9222")
	
	# list all tabs (default has a blank tab)
	tabs = browser.list_tab()
	
	if not tabs:
	    tab = browser.new_tab()
	else:
	    tab = tabs[0]
	
	
	# register callback if you want
	def request_will_be_sent(**kwargs):
	    print("loading: %s" % kwargs.get('request').get('url'))
	
	tab.Network.requestWillBeSent = request_will_be_sent
	
	# start the tab 
	tab.start()
	
	# call method
	tab.Network.enable()
	# call method with timeout
	tab.Page.navigate(url=sys.argv[1], _timeout=5)
	
	# wait for loading
	#tab.wait(5)
	
	# stop the tab (stop handle events and stop recv message from chrome)
	#tab.stop()
	
	# close tab
	#browser.close_tab(tab)

Per controllare Chromium da un browser Chrome usare la seguente url. La connessione può essere
solo localhost per cui va usato un tunnel ssh:

	http://localhost:9222


## Links utili

* <https://github.com/fate0/pychrome/blob/master/examples/demo1.py>
* [List of Chromium Command Line Switches](https://peter.sh/experiments/chromium-command-line-switches/)