Giter Site home page Giter Site logo

summon's Introduction

Summon

SummonThe browser for the Web of Things.
A platform for mobile devices that provides a convenient and scalable mechanism for IoT device interactivity, enabled by web-based interfaces and driven by the devices themselves.

Google Play Store iOS App Store

Video

Video

Peripherals

To quickly create a Bluetooth beacon device to test with, install the Eddystone-URL app on a separate Android device.

For Bluetooth peripherals to be listed in the Summon's scan, it must advertise the URI for its corresponding web interface according to the Bluetooth URI AD type specification (page 27), or the Eddystone-URL specification.

Local Wi-Fi peripherals can advertise the URL as an HTTP service over mDNS/ZeroConf/Bonjour.

Example implementations of peripherals can be found in peripherals/examples/.

Creating Interactive User Interfaces

In addition to opening regular websites, Summon can open app-like web UIs that can make use of native smartphone features. These UIs are still developed using standard web tools, but they are able to do things like interact directly over Bluetooth and perform native application functions with provided Javascript APIs. Once the UI is hosted online or served locally from the device, the peripheral can advertise a link to it, as with an ordinary website.

Further details are in the User Interfaces README. Example implementations of UIs can be found in user-interfaces/examples/.

summon's People

Contributors

adkinsjd avatar bradjc avatar brghena avatar ppannuto avatar tzachari avatar vielmetti avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

summon's Issues

External URL Links

I'm not sure how this works in cordova, but it might be nice to have links in summon apps to external pages (like the github repo for a project) open in the user's browser and not in the summon app. This way it will be preserved after the user navigates away in summon.

But, I don't know how feasible this is.

Clear cache button notification

Can I have a popup or any indication that the clear cache button did anything? As is, it is gray and doesn't seem to respond to touch. I can't tell if this is because it is disabled or not.

Device doesn't show up after hitting back button from device app

If I hit the back button after using the PolyPoint app, the tritag I had connected to doesn't show up in the list again. I think this is because summon is still connected to it, so the tritag is not advertising. It doesn't appear that onPause gets called, which is where I have a ble.disconnect call.

I'm not sure what the best way to handle this is. It seems like back should kill the app (or maybe after a delay) and onPause should get called so that it can clean up any state.

On the other hand, having the app go right back to where it was if it is re-selected would make for a better user experience.

We should delete the iOS version

I jokingly post this, but iOS's policy of hiding device identifiers makes Summon very difficult to use.

More seriously, what is the workflow supposed to be on iOS? Say I have 10 powerblades. I plug them in. I now want to associate each device with what I plugged into it. I cannot just scan and populate a list, because I have no idea which PowerBlade is which. Is the iOS app supposed to connect to each one and read a characteristic which presumably has been programmed into the device to contain the MAC address? What if my device doesn't (or can't) support connections? If we standardize this service and characteristic so that summon can use it, wouldn't iOS block that too? Taken to the logical end, the OS could block any attempt to subvert the ID hiding mechanism.

Is there some other way to commission devices? Do you have to plug them in one at a time?

Handle devices that change their advertisements

Devices like BLEES alternate between eddystone and data advertisements, and it seems summon groups by ID based on the first advertisement, and doesn't check for subsequent advertisements.

Summon device sorting

At Terraswarm we're likely to have several BLEES visible simultaneously. Summon should sort them by signal strength as a estimate of which one is closest.

Half Pictures in Device List

Weird Issue:

2015-10-08 02 49 22

Not sure if there is anything you can do about it. It seems to be moderately reproducible, but not consistent. Not terribly high priority.

Disable caching?

If possible, it would be awesome to have a debug feature where all caching is disabled.

Support for classes of devices

For powerblade, the dream would be for a single powerblade app to be shown in the initial summon menu which would then point to an app that has aggregated all the powerblades. I don't want to see 70 powerblades that all point to the same location.

Nodejs buffers in Summon apps

It would be a good idea to unify the javascript used in Summon apps with the nodejs we use to interact with BLE devices on desktop. The bluetooth.js script goes a long way towards providing that.

An additional bit that would help is if we could use nodejs-style buffers rather than Uint8Array types. https://github.com/feross/buffer supports nodejs-style buffers in the browser and seems like it would be a good choice to be included in Summon.

Idea: Use parse.js to automatically create Summon UIs

To use our generic gateway, devices create a parse.js file which translates BLE advertisements to JSON blobs. An idea I had is to use the parse.js file in Summon to create the JSON blob, then that could be passed to an application (removing the need to write the parsing code twice in some cases) which would then display it. That idea could be extended, however, to just display the JSON blob itself if the device does not have an application. The keys are intended to be humanly readable with units, so theoretically a UI could be autogenerated by parsing the JSON keys.

This could also be potentially further expanded to allow a device creator to define a simple file that would essentially be a list of macro substantiations. Something like:

 [
     {"display_type": "integer",
      "parsejs_key": "sensor_reading_1"},
    {"display_type": "time_series_graph",
     "parsejs_key": "temperature",
     "units": "celsius"}
 ]

Then Summon would generate a UI based on that.

I have been successful in getting parse.js to work in cordova: https://github.com/lab11/gateway/blob/master/smartphone/cordova/www/js/index.js

Thoughts?

Caching eddystone URL for devices

Does summon keep a map of {device id: eddystone URL} if caching is turned on? This way, once you've seen a device once, any device that alternates eddystone with other advertisements could be put in the top list when any packet is seen, rather than having to wait for the eddystone packet on each use of the summon app.

Kindle Fire support

I have a Kindle Fire that I have successfully run Cordova apps on. App distribution for that device is either via the Amazon store (not the Google Play store) or by downloading an APK.

If an APK bundle is available somehow I'd love to try it out.

Object.assign not supported with old versions of webview

Not sure if you care or if this is important, but this line: https://github.com/lab11/summon/blob/master/mobile-app/src/plugins/cordova-plugin-bluetooth/bluetooth.js#L137 breaks with older (perhaps really old) versions of android's webview. I get this error:

I/chromium(17261): [INFO:CONSOLE(145)] "Uncaught TypeError: Object.assign is not a function", source: file:///android_asset/www/plugins/cordova-plugin-bluetooth/bluetooth.js (145)

This probably doesn't matter, but good FYI if you are ever trying to support older devices.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.