My Minecraft Smart Home
Internet of Uncanny Things
Sascha Wolter @saschawolter January 2017
Source: Mattel's Barbie Hello Dreamhouse, via https://youtu.be/lgax5y7hVpc
My Minecraft Smart Home Internet of Uncanny Things Sascha Wolter - - PowerPoint PPT Presentation
My Minecraft Smart Home Internet of Uncanny Things Sascha Wolter @saschawolter January 2017 Source: Mattel's Barbie Hello Dreamhouse, via https://youtu.be/lgax5y7hVpc Speed kills! In 1830 people thought, your brain stops working travelling
Internet of Uncanny Things
Sascha Wolter @saschawolter January 2017
Source: Mattel's Barbie Hello Dreamhouse, via https://youtu.be/lgax5y7hVpc
In 1830 people thought, your brain stops working travelling more than 20 mph. And anyone going at more than 30 mph would have all air sucked out of them and would suffocate to death.
Source:Tony Robinson's Weird World of Wonders! British
Image: https://en.wikipedia.org/wiki/File:RegVarneyATM.jpg, https://www.ucc.asn.au/services/drink.ucc
1967 1982
100 billion connections will be generated and 2 million new sensors will be deployed every hour by 2025 (Huawei)
Today's Smart Home solutions are not good enough for a mainstream
suited to early adopters, but have so far failed to attract mainstream
Home Landscape 2015”)
Progressive Thinkers Worriers Antagonists
Image: Electrolux presents Screenfridge 1999, http://www.electroluxgroup.com/en/history-1990-1999-764/
Image: New York, ca. 1900 (http://ethw.org/Archives:Edison_Electric_Light_Sign/Ad)
Image: Sascha Wolter
Amazon Echo: Alexa… Google Home: Okay Google… LingLong DingDong : DingDong DingDong …
Source: MGM Child's Play (The Lakeshore Strangler), Vivid My friend Cayla
Internet of Uncanny Things
Worlds of Wonder's Julie doll (1987), which children could train to respond to their voice.
Source: https://youtu.be/UkU9SbIictc
Source: Boris Adryan, 2015-10-20, http://iot.ghost.io/is-it-all-machine-learning/
Source: http://www.jre-water.com/Suica/index.html
Voice and Facial Recognition
a smattering
See also http://appinventor.mit.edu/
Good to know
Edition, Console Edition (e.g. Xbox, PlayStation), Education, etc.
based on Minecraft 1.8.9
Cheats via t-Key
Inventory via e-Key 1st-Person via Mouse and AWSD-Keys
see also Project Malmo (http://research.microsoft.com/en-US/groups/mip-ai/default.aspx)
a smattering
Bare minimum
Get the Minecraft Forge Mod Development Kit (MDK) from http://files.minecraftforge.net/
@Mod(modid = SmartHomeMod.MODID, version = SmartHomeMod.VERSION) public class SmartHomeMod { public static final String MODID = "smarthomemod"; public static final String VERSION = "0.1"; // Happens as #1 right before Minecraft loads. Used for most registration. @EventHandler public void preInit(FMLPreInitializationEvent event) {} // Happens as #2 when Minecraft loads. @EventHandler public void init(FMLInitializationEvent event) {} // Happens #3 when World generators and alike are loaded. @EventHandler public void postInit(FMLPostInitializationEvent event) {} // Happens #4 right before starting the server. @EventHandler public void registerCommands(FMLServerStartingEvent event) {} }
Event-Subscriber, Items, and Blocks Resources Commands
main Lifecycle
public class HelloCommand extends CommandBase { public static final String COMMAND_NAME = "hello"; @Override public String getCommandName() { return COMMAND_NAME; } @Override public String getCommandUsage(ICommandSender sender) { return String.format("/%s <name>", COMMAND_NAME); } @Override public void processCommand(ICommandSender sender, String[] args) throws CommandException { if (sender instanceof EntityPlayer) { ... } else { ... } } }
Command Name Command Help Command Code
http://localhost:9998/rest/things
http://localhost:9998/rest/events
what’s going on
components (channels)
Bare minimum
Get the Minecraft Spigot Server, API, and Build Tools from https://www.spigotmc.org/wiki/buildtools
public class SmartHome extends JavaPlugin { // Fired when plugin is first enabled @Override public void onEnable() { // Register event listener // Could handle PlayerJoinEvent, BlockRedstoneEvent, PlayerInteractEvent, BlockPlaceEvent... // ...using @EventHandler annotation Bukkit.getPluginManager().registerEvents(new BlockChangedListener(), this); // Register command (set an instance of command class as executor) this.getCommand("sendCommand").setExecutor(new SendCommand()); } // Fired when plugin is disabled @Override public void onDisable() { } }
main Lifecycle Commands Events
public class SendCommand implements CommandExecutor { @Override public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { Bukkit.broadcastMessage("onCommand " + args[0]); Bukkit.getLogger().info("onCommand " + args[0]); return false; } }
Command Code Loggin/Messages
ESH Core Device Bindings Device Bindings Device Bindings Internet of Things Platform ESH Core Device Bindings Device Bindings Device Bindings Internet of Things Platform ESH Core Device Bindings Device Bindings Device Bindings
Developer Community Device Vendor
XY Company Internet of Things Platform ESH Core Device Bindings Device Bindings Device Bindings
https://github.com/wolter
into Eclipse SmartHome
create_binding_skeleton
@Override public void handleCommand(ChannelUID channelUID, Command command) { switch (channelUID.getId()) { case CHANNEL_POWERED: if (command instanceof OnOffType) { MinecraftThingCommand minecraftCommand = new MinecraftThingCommand(); minecraftCommand.id = id; minecraftCommand.component = new MinecraftThingComponent(); minecraftCommand.component.type = MinecraftThingComponentType.POWERED; minecraftCommand.component.state = command.equals(OnOffType.ON) ? true : false; postState(minecraftCommand); } break; case CHANNEL_OPEN: ... } }
RESTful POST Handle Command
Or delegate to a Bridge.
Runnable runnable = new Runnable() { @Override public void run() { requestState(); } }; refreshJob = scheduler.scheduleAtFixedRate(runnable, 0, refreshInterval, TimeUnit.SECONDS); ... MinecraftThing minecraftThing = gson.fromJson(reader, MinecraftThing.class); MinecraftThingComponent component minecraftThing.getComponentByType(MinecraftThingComponentType.POWERED); OnOffType state = ((Boolean) component.state) ? OnOffType.ON : OnOffType.OFF; updateState(CHANNEL_POWERED, state);
RESTful GET Update Channel
Use SSE instead!
Source: https://mojang.com/2016/06/weve-sold-minecraft-many-many-times-look/
APIs, Services Software-Architecture (e.g. MVVM)
to find new opportunities.
Source: Siematic, Discovery Channel, BSH, Microsoft, ZDF
Businesses are coming to realize that attracting developers is the fastest route to innovation. Moreover, attracting developers means attracting external investment, which finances innovation and expansion.
Source: Benno Luthiger, Open-Source-Jahrbuch 2004
Innovation Prosumer: Consumer and Producer
Millions and millions of dollars are being spent to attract developers: The millions of dollars in developer marketing efforts serve one purpose: to persuade developers to use a specific platform, network, tool or API set to generate innovations and to reach more consumers. In short: Developers consume an Platform, API,
Source: Developer Economics 2012, www.developereconomics.com
Some Consumers turn into Developers to solve their needs.
Video: youtube/Microsoft
Hippocratic Oath and Eating your own Dogfood.
Image: Sascha Wolter, Hour of Code 2015, see also https://code.org/learn
Video: https://youtu.be/xgakdcEzVwgl
Internet of Uncanny Things Sascha Wolter @saschawolter January 2017 more at http://wolter.biz
31.01.2017 38
Jobs
https://telekom.jobs/global-careers (Keyword Connected Home)