Upload
hoangkhanh
View
220
Download
0
Embed Size (px)
Citation preview
My Minecraft Smart HomeInternet 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 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
Internet of (Important) Things
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)
Regular Users don’t Rule the Tech!
Today's Smart Home solutions are
not good enough for a mainstream
market. These solutions are well
suited to early adopters, but have so
far failed to attract mainstream
buyers. (see VisionMobile “The Smart
Home Landscape 2015”)
Progressive Thinkers Worriers
Antagonists
Image: Electrolux presents Screenfridge 1999, http://www.electroluxgroup.com/en/history-1990-1999-764/
Value Proposition!
Conversational User Experience
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
Uncanny Valley of Anticipation
Worlds of Wonder's Julie doll (1987), which children could train to respond to their voice.
Speech Recognition
Source: https://youtu.be/UkU9SbIictc
Minecraft 101
Good to know• See http://minecraft.gamepedia.com/
• Several Versions• Pocket Edition (PE, e.g. Android, HoloLens), Pi
Edition, Console Edition (e.g. Xbox, PlayStation), Education, etc.
• Samples and code in this presentation is based on Minecraft 1.8.9
• Gamemodes• Survival
• Creative (to ignore recipes)
• Inventory and Recipes
• Redstones
• …
Cheats via t-Key• /help
• /weather clear
• /weather rain
• /time set day
• /time set night
• /gamemode creative
• /gamerule doDaylightCycle false
• /tp Player x y z
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)
Start doing
a smatteringof REST with SSE
Minecraft Forge: Simple Modding
Bare minimum
Get the Minecraft Forge Mod Development Kit (MDK) from http://files.minecraftforge.net/
Java and Minecraft Forge: Setup and Lifecycle
@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
Minecraft Forge: Simple Command
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
Use SmartHome Plug-In via SSE and REST API
• List of Things via HTTP Get http://localhost:9998/rest/things
• Server Sent Events (SSE)http://localhost:9998/rest/events
• Helps to check what’s possible and what’s going on
• Player
• Switches
• Doors
• Sensor
• …
• Unique ID is always location
• Relevant data is separated into components (channels)
Minecraft Spigot: Simple Plug-in
Bare minimum
Get the Minecraft Spigot Server, API, and Build Tools from https://www.spigotmc.org/wiki/buildtools
Minecraft Spigot: SmartHome.java
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
Minecraft Spigot: Simple Command
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
BindingsDevice
BindingsDevice
Bindings
Internet of Things Platform
ESH
Core
Device
BindingsDevice
BindingsDevice
Bindings
Internet of Things Platform
ESH
Core
Device
BindingsDevice
BindingsDevice
Bindings
Developer
CommunityDevice Vendor
XY Company
Internet of Things Platform
ESH
Core
Device
BindingsDevice
BindingsDevice
Bindings
Eclipse SmartHome as open technology for Prosumers
Minecraft Bindingfor Eclipse SmartHome• Integrating Devices
into Eclipse SmartHome
1. Create OSGi skeleton
2. Edit identifiers and parameters
3. Add binding logic
4. Export and deploy
5. Test
create_binding_skeleton
Minecraft Bindingfor Eclipse SmartHome@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.
Minecraft Bindingfor Eclipse SmartHome
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!
Construction Kit
APIs, Services
Software-Architecture (e.g. MVVM)
Value Innovation
Practice and Exchange
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
MYTHS OF TYPICAL DEVELOPER / BORN TO CODE
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, etc. and produce something based on it.
Source: Developer Economics 2012, www.developereconomics.com
Some Consumers turn into Developers to solve their needs.
Video: youtube/Microsoft
Responsibility and DogfoodingHippocratic Oath and Eating your own Dogfood.
Teaching Responsibility and Enlightenmentversus Believe in Wonders (i.e. Politics and Regulation)
Image: Sascha Wolter, Hour of Code 2015, see also https://code.org/learn
Video: https://youtu.be/xgakdcEzVwgl
My Minecraft Smart HomeInternet of Uncanny Things
Sascha Wolter
@saschawolter
January 2017
more at http://wolter.biz
Software Developer (m/w) Connected Home Runtime
Senior Software Developer (m/w) Connected Home Frontend
Senior Software Developer (m/w) Connected Home Community
Senior Developer Evangelist Connected Home
Senior UX Designer
31.01.2017 38
WE ARE HIRING
Jobs
https://telekom.jobs/global-careers (Keyword Connected Home)