Blynk Server

A local blynk server is deployed (on foxtrot) to reduce latency and increase stability for the winewall controller node. Also, this allows for local data storage.

Here are the instructions for installing the blynk server:

https://github.com/blynkkk/blynk-server

  1. Create a new user (blynk) and directores to install the binaries on /opt/blynk and logfiles in /var/lib/blynk

  2. Check to see that a recent java 8 JDK is installed:

    [mbarrow@foxtrot ~]$ java -version openjdk version "1.8.0_191" OpenJDK Runtime Environment (build 1.8.0_191-b12) OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)

     

     

  3. Download the blynk server jar file

    [mbarrow@foxtrot blynk]$ sudo wget "https://github.com/blynkkk/blynk-server/releases/download/v0.41.12/server-0.41.12-java8.jar"

     

  4. Create /opt/blynk/server.properties #hardware mqtt port hardware.mqtt.port=8440 #http, plain web sockets and plain hardware port http.port=5509 #if this property is true csv download url will use port 80 and will ignore http.port force.port.80.for.csv=false #if this property is true redirect_command will use 80 port and will ignore http.port force.port.80.for.redirect=false #secured https, web sockets and app port https.port=9559 #address to bind to. by default bounded to all interfaces listen.address= #by default server uses embedded in jar cert to simplify local server installation. #WARNNING DO NOT USE THIS CERTIFICATES ON PRODUCTION OR IN WHERE ENVIRNOMENTS REAL SECURITY REQUIRED. #provide either full path to files either use '.' for specifying current directory. For instance "./myfile.crt" server.ssl.cert= server.ssl.key= server.ssl.key.pass= #by default System.getProperty("java.io.tmpdir")/blynk used data.folder=/var/lib/blynk #folder for logs. logs.folder=/var/lib/blynk/logs #log debug level. trace|debug|info|error. Defines how precise logging will be. log.level=debug #maximum number of devices allowed per account user.devices.limit=50 #maximum number of tags allowed per account user.tags.limit=100 #defines maximum allowed number of user dashboards. Needed to limit possible number of tokens. user.dashboard.max.limit=100 #defines maximum allowed widget size in KBs as json string. user.widget.max.size.limit=20 #user is limited with 100 messages per second. user.message.quota.limit=100 #maximum allowed number of notification queue. Queue responsible for processing email, pushes, twits sending. #Because of performance issue - those queue is processed in separate thread, this is required due #to blocking nature of all above operations. Usually limit shouldn't be reached. notifications.queue.limit=2000 #Number of threads for performing blocking operations - push, twits, emails, db queries. #Recommended to hold this value low unless you have to perform a lot of blocking operations. blocking.processor.thread.pool.limit=6 #this setting defines how often we can send mail/tweet/push or any other notification. Specified in seconds notifications.frequency.user.quota.limit=5 #this setting defines how often we can send webhooks. Specified in miliseconds webhooks.frequency.user.quota.limit=1000 #this setting defines how big could be response for webhook GET request. Specified in kbs webhooks.response.size.limit=96 #maximum size of user profile in kb's user.profile.max.size=256 #number of strings to store in terminal widget terminal.strings.pool.size=25 #number of strings to store in map widget map.strings.pool.size=25 #number of strings to store in lcd widget lcd.strings.pool.size=6 #maximum number of rows allowed table.rows.pool.size=100 #period in millis for saving all user DB to disk. profile.save.worker.period=60000 #period in millis for saving stats to disk. stats.print.worker.period=60000 #max size of web request in bytes, 256 kb (256x1024) is default web.request.max.size=524288 #maximum number of points that are fetched during CSV export #43200 == 60 * 24 * 30 - minutes points for 1 month csv.export.data.points.max=43200 #specifies maximum period of time when hardware socket could be idle. After which #socket will be closed due to non activity. In seconds. Default value 10 if not provided. #leave it empty for infinity timeout hard.socket.idle.timeout=10 #enable DB enable.db=false #enable raw data storage to DB enable.raw.db.data.store=false #size of async logger ring buffer. should be increased for loads >2-3k req/sec async.logger.ring.buffer.size=2048 #when true - allows reading worker to trigger hardware even app is offline allow.reading.widget.without.active.app=false #when enabled server will also store hardware and app IP allow.store.ip=true #initial amount of energy initial.energy=100000 #ADMINISTRATION SECTION admin.rootPath=/admin #used for reset password page and certificate generation. #by default current server IP is taken. could be replaced with more friendly hostname. #it is recommended to override this property with your server IP to avoid possible problems of host resolving #server.host=test.blynk.cc #used for fallback page for reset user password, in most cases it should be the same as server.host #IP is not allowed here, it should be blynk-cloud.com for Blynk app #or *.blynk.cc for private servers with own apps restore.host=blynk-cloud.com product.name=Blynk #email used for certificate registration, could be omitted in case you already specified it in mail.properties #contact.email= #network interface to determine server's current IP. #only the first characters of the interface's name are needed. #the default setting eth will use the first ethX interface found (i.e. eth0) net.interface=eth #comma separated list of administrator IPs. allow access to admin UI only for those IPs. #you may set it for 0.0.0.0/0 to allow access for all. #you may use CIDR notation. For instance, 192.168.0.53/24 allowed.administrator.ips=0.0.0.0/0,::/0 # default admin name and password. that will be created on initial server start admin.email=mtb@costaflores.com admin.pass=kiosko  
  5. Start the blynk server


     

  6. App and sketch changes

    Login to the Blynk app, specifying the custom server settings, defined in server.properties

     

     

    Change the sketch to reflect the new server:

    NOTE: The Blynk local server documentation recommends using IPAddress (192,168,0,67), but this does not seem to work (at least for the libraries used in the project), but placing the IP address directly as below works:


     

  7. Retrieve cloned project

    If you have previously created a project on the Blynk cloud server, you can "clone" that project from within the app. The cloning process creates a QR code. Save this QR code someplace else, and scan it with the new local blynk server project
     

  8. Database setup

     

  9.