This is an automated email from the ASF dual-hosted git repository. cdutz pushed a commit to branch pres/iot-magic-industrial-data-acquision in repository https://gitbox.apache.org/repos/asf/incubator-training.git
commit 24a0a738c9638272456609830815368b022c6262 Author: Christofer Dutz <[email protected]> AuthorDate: Mon Oct 28 10:34:44 2024 +0100 chore: Added my presentation material for the IoTDB, TSFile and PLC4X talk that I gave on 3 occasions in 2024 (CoC EU, CoC NA, Eclipse OCX) --- .../IoT/magic-industrial-data-acquisition/pom.xml | 60 +++ .../src/main/asciidoc/_settings.adoc} | 46 +- .../src/main/asciidoc/index.adoc | 366 +++++++++++++ .../main/resources/images/benchmark-benchant.png | Bin 0 -> 575542 bytes .../main/resources/images/benchmark-tpcx-iot.png | Bin 0 -> 1045106 bytes .../src/main/resources/images/christofer-dutz.jpg | Bin 0 -> 730219 bytes .../src/main/resources/images/denver.jpg | Bin 0 -> 13091723 bytes .../src/main/resources/images/linkedin.jpg | Bin 0 -> 26989 bytes .../src/main/resources/images/logo-apache.png | Bin 0 -> 16185 bytes .../src/main/resources/images/logo-iotdb.png | Bin 0 -> 54876 bytes .../src/main/resources/images/logo-plc4x.png | Bin 0 -> 96696 bytes .../src/main/resources/images/logo-timecho.png | Bin 0 -> 10629 bytes .../src/main/resources/images/logo-training.png | Bin 0 -> 58861 bytes .../src/main/resources/images/logo-tsfile.png | Bin 0 -> 26203 bytes .../main/resources/images/modbus-tcp-example.png | Bin 0 -> 119088 bytes .../src/main/resources/images/mqtt-example.png | Bin 0 -> 90486 bytes .../main/resources/images/mucho-problemo-iotdb.png | Bin 0 -> 126532 bytes .../main/resources/images/mucho-problemo-plc4x.png | Bin 0 -> 125750 bytes .../resources/images/mucho-problemo-tsfile.png | Bin 0 -> 125268 bytes .../src/main/resources/images/mucho-problemo.png | Bin 0 -> 124569 bytes .../src/main/resources/images/no-problemo.png | Bin 0 -> 77314 bytes .../src/main/resources/images/opc-ua-example.png | Bin 0 -> 134515 bytes .../src/main/resources/images/solution.png | Bin 0 -> 126341 bytes .../src/main/theme/apache.css | 577 +++++++++++++++++++++ content/IoT/pom.xml | 1 + site/pom.xml | 13 + site/src/site/site.xml | 5 + 27 files changed, 1043 insertions(+), 25 deletions(-) diff --git a/content/IoT/magic-industrial-data-acquisition/pom.xml b/content/IoT/magic-industrial-data-acquisition/pom.xml new file mode 100644 index 0000000..3c43af8 --- /dev/null +++ b/content/IoT/magic-industrial-data-acquisition/pom.xml @@ -0,0 +1,60 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +--> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <parent> + <groupId>org.apache.training</groupId> + <artifactId>content-parent-pom</artifactId> + <version>1.3.0</version> + <relativePath/> + </parent> + + <groupId>org.apache.training.content</groupId> + <artifactId>magic-industrial-data-acquisition-with-apache-plc4x-tsfile-and-iotdb</artifactId> + <version>1.0.0-SNAPSHOT</version> + <packaging>war</packaging> + + <!-- Make Snapshots of Apache projects available --> + <repositories> + <repository> + <id>apache-snapshots</id> + <url>https://repository.apache.org/content/repositories/snapshots</url> + <releases> + <enabled>false</enabled> + </releases> + <snapshots> + <enabled>true</enabled> + </snapshots> + </repository> + <!-- When we release stuff like the site skin or the build tools, syncing to Maven Central usually takes some time --> + <repository> + <id>apache-releases</id> + <url>https://repository.apache.org/content/repositories/releases</url> + <releases> + <enabled>true</enabled> + </releases> + <snapshots> + <enabled>false</enabled> + </snapshots> + </repository> + </repositories> + +</project> diff --git a/content/IoT/pom.xml b/content/IoT/magic-industrial-data-acquisition/src/main/asciidoc/_settings.adoc similarity index 51% copy from content/IoT/pom.xml copy to content/IoT/magic-industrial-data-acquisition/src/main/asciidoc/_settings.adoc index 509eacc..261a396 100644 --- a/content/IoT/pom.xml +++ b/content/IoT/magic-industrial-data-acquisition/src/main/asciidoc/_settings.adoc @@ -1,5 +1,4 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- +//// Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with @@ -8,7 +7,7 @@ (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - https://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, @@ -16,25 +15,22 @@ See the License for the specific language governing permissions and limitations under the License. ---> -<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - - <modelVersion>4.0.0</modelVersion> - - <parent> - <groupId>org.apache.training.content</groupId> - <artifactId>training-content</artifactId> - <version>0.4.0-SNAPSHOT</version> - </parent> - - <artifactId>training-content-iot</artifactId> - <packaging>pom</packaging> - - <name>Training: Content: IoT</name> - - <modules> - <module>IoTDeveloper</module> - </modules> - -</project> +//// + +:goto: +:menu: +:navigation: +:status: +:arrows: +:revealjs_theme: cc_black +:revealjs_progress: true +:revealjs_slidenumber: true +:pdf-page-size: A4 +:revealjs_center: false +:revealjs_history: true +:icons: font +:imagesdir: images +:sourcedir: ../java +:title-slide-background-image: background-dark-orig.jpg +:idprefix: +:idseparator: - diff --git a/content/IoT/magic-industrial-data-acquisition/src/main/asciidoc/index.adoc b/content/IoT/magic-industrial-data-acquisition/src/main/asciidoc/index.adoc new file mode 100644 index 0000000..4ab626e --- /dev/null +++ b/content/IoT/magic-industrial-data-acquisition/src/main/asciidoc/index.adoc @@ -0,0 +1,366 @@ +//// + + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +//// + +include::_settings.adoc[] +:presenter_name: Christofer Dutz +:presenter_company: Timecho Europe GmbH +:description: Using Apache IoTDB, Apache TsFile and Apache PLC4X for collecting industrial data. +:keywords: IIoT, IoT +:author: Christofer Dutz +:email: [email protected] +:position: Solution Consulting Expert + +// 35 minutes - 5 minutes Q&A = 1800 seconds +:revealjs_totalTime: 1800 + +== ! + +image::denver.jpg[canvas] + +[.talkTitle] +**** + +[.mainTitle] +Magic industrial data acquisition with Apache PLC4X, TsFile and IoTDB +[.subTitle] + + +[.speaker] +Christofer Dutz, Timecho +**** + +[.conferenceName] +Community over Code NA + +[.year] +09.10.2024 + +[.imageCredits] +(Image from Wikipedia under CC) + +[NOTE.speaker] +-- +-- + +== Remarks + +image::logo-training.png[float=right,width=300] + +* Slides made with: +* https://training.apache.org +* Incubating project +* Written in Asciidoctor +* For sharing training material +* Slides will be available there + +[NOTE.speaker] +-- +* Under the hood Maven+AsciiDoc+RevealJS +-- + +== Overview + +* Typical data acquisition szenarios +* Problems with these szenarios +* Solving problems with: +** Apache PLC4X +** Apache TsFile +** Apache IoTDB +* Putting it all together + +[NOTE.speaker] +-- +-- + +== Typical szenarios + +image::no-problemo.png[] + +[NOTE.speaker] +-- +* Quickly explain the scenarios +* Point out Eclipse SDV for the mobile data collection +* Don't go into the problems, that's on the next slides. +-- + +== Problems with these szenarios + +image::mucho-problemo.png[] + +[NOTE.speaker] +-- +* Line width == bandwidth +* Problems come on the other slide +** We'll go into all of them on the following slides +* This slide is just for setting the stage +-- + +== Accessibility Problems + +image::mucho-problemo-plc4x.png[] + +[NOTE.speaker] +-- +* Accessing data on the machinery +* Overloading PLCs and Network infrastructure +* Shop-floor networks usually overloaded +** Demonstrate network and device load by the thickness of lines +* Switches configured to prioritize packets +* Digitization efforts require more data -> increase traffic +-- + +== Apache PLC4X + +image::logo-plc4x.png[float=right,width=300] + +* Unified protocol adapter +* Native protocol communication +** About 19 protocols currently +* Shared API over all protocols +* Available in multiple languages +** Java, Go, C, C#, Python (Rust) + +[NOTE.speaker] +-- +* Now you know why I'm carrying around Toddy all the time ;-) +* Why not use MQTT or OPC-UA you ask? +* Especially given the Eclipse Milo and the SparkplugB Working-Group +-- + +== OPC-UA + +image::opc-ua-example.png[] + +[NOTE.speaker] +-- +* See the size of the payload? +* That's only reading one boolean value! +-- + +== MQTT + +image::mqtt-example.png[] + +[NOTE.speaker] +-- +* See the size of the payload? +* SparkplugB would add more payload +-- + +== Modbus-TCP + +image::modbus-tcp-example.png[] + +[NOTE.speaker] +-- +* See the size of the payload? +-- + +== Using native protocols + +* Using native protocols of PLCs reduces: +** Size of packets +** Load on the network +** Load on the Hardware (both sides) +** Costs, as no retrofit is required + +[NOTE.speaker] +-- +* OPC-UA and MQTT run as additional processes on hardware +* Native protocols cause less CPU and Memory usage +* In the IT & Production Magazine even an article on how the license costs of OPC-UA are slowing digitization progress +-- + +== Network Load/Availability + +image::mucho-problemo-tsfile.png[] + +[NOTE.speaker] +-- +* Cars more unconnected than connected in Germany +* Bandwidth too small +** Wireless connections +** Internet Uplink +** Also Shop-floor networks +-- + +== Apache TsFile + +image::logo-tsfile.png[float=right,width=300] + +* Storage format for IoT-data +* Aggregated data +* Highly compressed data +* Available in multiple languages +* Storage technology of Apache IoTDB + +[NOTE.speaker] +-- +* Compression to 10% of original size lossless +* Compression to 1% of original size lossy +** Lossy means: loose accuracy after several fractional digits (Not always important if its 21.45245435454°C or just 1.4524°C) +-- + +== How does Apache TsFile help? + +* Collecting data ON the devices +** Push instead of Pull +** Bonus: Cycle-Synchronous data +* Aggregating data on gateways +* Utilizing NB IoT bandwidth 100% +* Buffering if no connection + +[NOTE.speaker] +-- +* Libraries for common OT Engineering tools (needs to be created) +* Pull reads lots of redundant data +* Using full size of LoRaWan packet +-- + +== Data Volume and Granularity + +image::mucho-problemo-iotdb.png[] + +[NOTE.speaker] +-- +* Too many apps querying the hardware +* Data replicated 1-to-1 on all levels +* Internet Uplink becomes the bottleneck +* Cloud-Storage-Costs +* Different layers need different retention and granularity +-- + +== Solving problems with: Apache IoTDB + +image::logo-iotdb.png[float=right,width=300] + +* Acting as data-hub +** Unified Namespace +** Streaming queries +** Apps subscribe to DB +* Aggregation +* Compression +* Replication +* Different retention on every level/device + +[NOTE.speaker] +-- +* Uses compression of TsFile +* Replication with aggregation (Only forward what's needed) +* IoTDB benefits: +** IoTDB is built for tree structure such as Unified Namespace +* Example: +** Line-Level: ms granularity of all data-points with one day retention +** Department-Level: minute granularity of performance indicators (year retention) +** Factory-Level: hour granularity of the main KPIs (year retention) +** Cloud-Level: daily granularity of the main KPIs (eternal retention) +-- + +== Solving problems with: Apache IoTDB + +* Apache IoTDB / TimechoDB won first place in any dimension in any benchmark it competed in +** benchAnt +** TPCx-IoT + +[NOTE.speaker] +-- +* In contrast to most other TSDBs not built up on existing solution +* Built explicitly to target the scenarios causing issues with regular solutions +** Out-of-order data +** Bursts of data (Millions per Second) +** Aggregation queries +-- + +== ! + +image::benchmark-benchant.png[canvas] + +[NOTE.speaker] +-- +* Wins when sorting by all categories +* Would have only lost by name, if that was sortable +-- + +== ! + +image::benchmark-tpcx-iot.png[canvas] + +[NOTE.speaker] +-- +* TimechoDB +** Commercial offering of IoTDB by Timecho +** Apache IoTDB with additional bells and whistles aimed at enterprise customers +* Just look at the gap between 1 and 2 and third place +** Especially Performance and Price/kIoTps +-- + +== Putting it all together + +image::solution.png[] + +[NOTE.speaker] +-- +* See the thinner lines? +-- + +== Putting it all together + +* Using TsFile-Embedded on Hardware +** PLC libraries +** No Gateways needed +** Forward data via MQTT + +* Gateways using: +** TsFile to store aggregated & compressed data +** PLC4X to collect data using native protocols +** Forward data to IoTDB servers using Session-API or MQTT + +[NOTE.speaker] +-- +* Forward with MQTT because libs are already available +* OT admins know how to handle MQTT traffic +-- + +== Putting it all together + +* Servers based on Apache IoTDB: +** Acting as central data-hub for applications (Unified Namespace) +** Applications subscribe to changes (Push vs Pull) +** Automatically replicating to higher levels +** Automatic aggregation to higher levels + +[NOTE.speaker] +-- +* We're currently working on all of this +* Basic functionality in Open-Source projects +* Turnkey solutions most probably as commercial product by Timecho +-- + +== Thanks for listening + +image::linkedin.jpg[float=right,width=280] + +* Questions? +* Suggestions? +* Wanna join in on the fun? +** [email protected] +** [email protected] +** [email protected] +* Contact me on LinkedIn: +** linkedin.com/in/christofer-dutz/ diff --git a/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/benchmark-benchant.png b/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/benchmark-benchant.png new file mode 100644 index 0000000..f031bba Binary files /dev/null and b/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/benchmark-benchant.png differ diff --git a/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/benchmark-tpcx-iot.png b/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/benchmark-tpcx-iot.png new file mode 100644 index 0000000..92b32f4 Binary files /dev/null and b/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/benchmark-tpcx-iot.png differ diff --git a/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/christofer-dutz.jpg b/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/christofer-dutz.jpg new file mode 100755 index 0000000..96cd415 Binary files /dev/null and b/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/christofer-dutz.jpg differ diff --git a/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/denver.jpg b/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/denver.jpg new file mode 100644 index 0000000..b7001cc Binary files /dev/null and b/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/denver.jpg differ diff --git a/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/linkedin.jpg b/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/linkedin.jpg new file mode 100644 index 0000000..993ce56 Binary files /dev/null and b/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/linkedin.jpg differ diff --git a/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/logo-apache.png b/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/logo-apache.png new file mode 100644 index 0000000..44c337b Binary files /dev/null and b/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/logo-apache.png differ diff --git a/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/logo-iotdb.png b/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/logo-iotdb.png new file mode 100644 index 0000000..4fa9f56 Binary files /dev/null and b/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/logo-iotdb.png differ diff --git a/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/logo-plc4x.png b/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/logo-plc4x.png new file mode 100644 index 0000000..cda4f0d Binary files /dev/null and b/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/logo-plc4x.png differ diff --git a/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/logo-timecho.png b/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/logo-timecho.png new file mode 100644 index 0000000..8e79ba8 Binary files /dev/null and b/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/logo-timecho.png differ diff --git a/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/logo-training.png b/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/logo-training.png new file mode 100644 index 0000000..0a765b5 Binary files /dev/null and b/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/logo-training.png differ diff --git a/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/logo-tsfile.png b/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/logo-tsfile.png new file mode 100644 index 0000000..d6661bb Binary files /dev/null and b/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/logo-tsfile.png differ diff --git a/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/modbus-tcp-example.png b/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/modbus-tcp-example.png new file mode 100644 index 0000000..ff90156 Binary files /dev/null and b/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/modbus-tcp-example.png differ diff --git a/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/mqtt-example.png b/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/mqtt-example.png new file mode 100644 index 0000000..3433a33 Binary files /dev/null and b/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/mqtt-example.png differ diff --git a/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/mucho-problemo-iotdb.png b/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/mucho-problemo-iotdb.png new file mode 100644 index 0000000..2e1a78c Binary files /dev/null and b/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/mucho-problemo-iotdb.png differ diff --git a/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/mucho-problemo-plc4x.png b/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/mucho-problemo-plc4x.png new file mode 100644 index 0000000..89ea46d Binary files /dev/null and b/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/mucho-problemo-plc4x.png differ diff --git a/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/mucho-problemo-tsfile.png b/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/mucho-problemo-tsfile.png new file mode 100644 index 0000000..6ab3b58 Binary files /dev/null and b/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/mucho-problemo-tsfile.png differ diff --git a/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/mucho-problemo.png b/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/mucho-problemo.png new file mode 100644 index 0000000..d3a0e38 Binary files /dev/null and b/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/mucho-problemo.png differ diff --git a/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/no-problemo.png b/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/no-problemo.png new file mode 100644 index 0000000..81bb2da Binary files /dev/null and b/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/no-problemo.png differ diff --git a/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/opc-ua-example.png b/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/opc-ua-example.png new file mode 100644 index 0000000..05427fb Binary files /dev/null and b/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/opc-ua-example.png differ diff --git a/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/solution.png b/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/solution.png new file mode 100644 index 0000000..097f7ac Binary files /dev/null and b/content/IoT/magic-industrial-data-acquisition/src/main/resources/images/solution.png differ diff --git a/content/IoT/magic-industrial-data-acquisition/src/main/theme/apache.css b/content/IoT/magic-industrial-data-acquisition/src/main/theme/apache.css new file mode 100644 index 0000000..f7f6299 --- /dev/null +++ b/content/IoT/magic-industrial-data-acquisition/src/main/theme/apache.css @@ -0,0 +1,577 @@ +/* + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +*/ + +section.has-light-background, +section.has-light-background h1, +section.has-light-background h2, +section.has-light-background h3, +section.has-light-background h4, +section.has-light-background h5, +section.has-light-background h6 { + color: #FFF; +} + +/********************************************* + * GLOBAL STYLES + *********************************************/ +body { + background-size: cover; + background-color: #FFF; +} + +.reveal { + font-family: 'Montserrat', sans-serif; + font-size: 34px; + font-weight: normal; + color: #222; +} + +::selection { + color: #222; + background: #bee4fd; + text-shadow: none; +} + +.reveal .slides>section, +.reveal .slides>section>section { + line-height: 1.3; + font-weight: inherit; +} + +/********************************************* + * HEADERS + *********************************************/ +.reveal h1, +.reveal h2, +.reveal h3, +.reveal h4, +.reveal h5, +.reveal h6 { + margin: 0 0 20px 0; + color: #000; + font-family: Futura, "Trebuchet MS", Arial, sans-serif; + font-weight: 600; + line-height: 1.2; + letter-spacing: normal; + text-shadow: none; + word-wrap: break-word; +} + +.reveal h1 { + font-size: 2.5em; +} + +.reveal h2 { + font-size: 1.6em; +} + +.reveal h3 { + font-size: 1.3em; +} + +.reveal h4 { + font-size: 1em; +} + +.reveal h1 { + text-shadow: none; +} + +/********************************************* + * OTHER + *********************************************/ +.reveal p { + margin: 20px 0; + line-height: 1.3; +} + +/* Ensure certain elements are never larger than the slide itself */ +.reveal img, +.reveal video, +.reveal iframe { + max-width: 95%; + max-height: 95%; +} + +.reveal strong, +.reveal b { + font-weight: bold; +} + +.reveal em { + font-style: italic; +} + +.reveal ol, +.reveal dl, +.reveal ul { + display: inline-block; + text-align: left; + margin: 0 0 0 1em; +} + +.reveal ol { + list-style-type: decimal; +} + +.reveal ul { + list-style-type: disc; +} + +.reveal ul ul { + list-style-type: square; +} + +.reveal ul ul ul { + list-style-type: circle; +} + +.reveal ul ul, +.reveal ul ol, +.reveal ol ol, +.reveal ol ul { + display: block; + margin-left: 40px; +} + +.reveal dt { + font-weight: bold; +} + +.reveal dd { + margin-left: 40px; +} + +.reveal q, +.reveal blockquote { + quotes: none; +} + +.reveal blockquote { + display: block; + position: relative; + width: 70%; + margin: 20px auto; + padding: 5px; + font-style: italic; + background: rgba(0, 0, 0, 0.05); + box-shadow: 0 0 2px rgba(255, 255, 255, 0.2); +} + +.reveal blockquote p:first-child, +.reveal blockquote p:last-child { + display: inline-block; +} + +.reveal q { + font-style: italic; +} + +.reveal pre { + display: block; + position: relative; + width: 90%; + margin: 20px auto; + text-align: left; + font-size: 0.55em; + font-family: monospace; + line-height: 1.2em; + word-wrap: break-word; + box-shadow: 0 0 6px rgba(255, 255, 255, 0.3); +} + +.reveal code { + font-family: monospace; + color: darkred; + font-weight: bold; +} + +.reveal pre code { + display: block; + padding: 5px; + overflow: auto; + max-height: 400px; + word-wrap: normal; + background: #3F3F3F; + color: #DCDCDC; +} + +.reveal table { + margin: auto; + border-collapse: collapse; + border-spacing: 0; +} + +.reveal table th { + font-weight: bold; +} + +.reveal table th, +.reveal table td { + text-align: left; + padding: 0.2em 0.5em 0.2em 0.5em; + border-bottom: 1px solid; +} + +.reveal table th[align="center"], +.reveal table td[align="center"] { + text-align: center; +} + +.reveal table th[align="right"], +.reveal table td[align="right"] { + text-align: right; +} + +.reveal table tr:last-child td { + border-bottom: none; +} + +.reveal sup { + vertical-align: super; +} + +.reveal sub { + vertical-align: sub; +} + +.reveal small { + display: inline-block; + font-size: 0.6em; + line-height: 1.2em; + vertical-align: top; +} + +.reveal small * { + vertical-align: top; +} + +/********************************************* + * LINKS + *********************************************/ +.reveal a { + color: #42affa; + text-decoration: none; + -webkit-transition: color 0.15s ease; + -moz-transition: color 0.15s ease; + transition: color 0.15s ease; +} + +.reveal a:hover { + color: #8dcffc; + text-shadow: none; + border: none; +} + +.reveal .roll span:after { + color: #fff; + background: #068ee9; +} + +/********************************************* + * IMAGES + *********************************************/ +.reveal section img { + margin: 15px 0; +} + +.reveal a img { + -webkit-transition: all 0.15s linear; + -moz-transition: all 0.15s linear; + transition: all 0.15s linear; +} + +.reveal a:hover img { + background: rgba(0, 0, 0, 0.2); + border-color: #42affa; + box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); +} + +/********************************************* + * NAVIGATION CONTROLS + *********************************************/ +.reveal .controls div.navigate-left, +.reveal .controls div.navigate-left.enabled { + border-right-color: #42affa; +} + +.reveal .controls div.navigate-right, +.reveal .controls div.navigate-right.enabled { + border-left-color: #42affa; +} + +.reveal .controls div.navigate-up, +.reveal .controls div.navigate-up.enabled { + border-bottom-color: #42affa; +} + +.reveal .controls div.navigate-down, +.reveal .controls div.navigate-down.enabled { + border-top-color: #42affa; +} + +.reveal .controls div.navigate-left.enabled:hover { + border-right-color: #8dcffc; +} + +.reveal .controls div.navigate-right.enabled:hover { + border-left-color: #8dcffc; +} + +.reveal .controls div.navigate-up.enabled:hover { + border-bottom-color: #8dcffc; +} + +.reveal .controls div.navigate-down.enabled:hover { + border-top-color: #8dcffc; +} + +/********************************************* + * PROGRESS BAR + *********************************************/ +.reveal .progress { + background: rgba(255, 255, 255, 0.2); +} + +.reveal .progress span { + background: #42affa; + -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); + -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); + transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); +} + +/********************************************* + * SLIDE NUMBER + *********************************************/ +.reveal .slide-number { + color: #42affa; + background-color: rgba(255, 255, 255, 0); +} + +.reveal .red { + color: red; +} + +.reveal .deeppink { + color: deeppink; +} + +.reveal .green { + color: green; +} + +.reveal .blue { + color: blue; +} + +.reveal .aquamarine { + color: aquamarine; +} + +.reveal .orange { + color: orange; +} + +.reveal .white { + color: white; +} + +/********************************************* + * Footer and Header + *********************************************/ + +.header { + position:relative; +} +/*.header .left { + position:absolute; + top: 5px; + left: 5px; + width: 400px; + height: 78px; + background-image: url("../../../images/logo-bytefabrik.png"); +} +.header .right { + position:absolute; + top: 5px; + right: 5px; + width: 300px; + height: 132px; + background-image: url("../../../images/logo-codecentric.png"); +}*/ + +.footer { + position:relative; +} +.footer .left { + position:absolute; + bottom: 5px; + left: 5px; + width: 246px; + height: 100px; + background-image: url("../../../images/logo-apache.png"); +} +.footer .right { + position:absolute; + bottom: 5px; + right: 5px; + width: 400px; + height: 79px; + background-image: url("../../../images/logo-timecho.png"); +} + +/* custom styles */ +.big { + font-size: 150% +} +.small { + font-size: 75% +} + +.columns { + -webkit-column-count: 2; + -moz-column-count: 2; + column-count: 2; +} + +/* title slides */ +.fade { + position: fixed; + height: 100vh; + width: 75vw; + background: rgba(0, 0, 0, 0.28); +} + +.talkTitle { + position: absolute; + top: 0; + right: -220px; + background-color: darkcyan; +//background: rgba(255, 255, 255, 1); + color: rgba(0, 0, 0, 1.0); + text-align: left; + width: 50%; + padding: 0 0 0 1em; +} + +.mainTitle { + font-size: 100%; + font-weight: bold; +} + +.subTitle { + font-size: 80%; +} + +.speaker { + font-size: 50%; +} + +.box { + background-color: white; +} + +.conferenceName { + position: absolute; + left: 0; + bottom: 30px; + background: rgba(218, 112, 214, 0.9); + color: rgba(217, 217, 217, 1.0); + text-align: left; + font-size: 50%; + width: 50%; + padding: 0 0 0 2em; +} + +.year { + position: absolute; + left: 5em; + bottom: 0.2em; + color: rgba(217, 217, 217, 1.0); + font-size: 150%; +} + +.imageCredits { + position: absolute; + right: 1em; + bottom: 0.0em; + color: rgba(217, 217, 217, 1.0); + font-size: 50%; +} + +.centered { + position: fixed; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + background: rgba(0, 32, 96, 0.9); + color: rgba(230, 230, 230, 1.0); + padding: 20px; +} + +.leftlogo { + position: fixed; + left: -200px; + top: 40px; +} + +.righttitle { + position: fixed; + right: 0; + bottom: 200px; + color: darkred; + padding: 20px; + text-align: left; +} + +.title { + font-size: 200%; +} + +.present { + height: 100% +} + +.big { + font-size: 150% +} +.small { + font-size: 75% +} + +.twocolumns { + -webkit-column-count: 2; + -moz-column-count: 2; + column-count: 2; +} + +.sizeMatters{ + text-align: left; +} + +.reveal blockquote { + display: block; + position: relative; + width: 70%; + margin: 20px auto; + padding: 5px; + font-style: italic; + background: rgba(220, 160, 100, 1.05); + box-shadow: 0 0 2px rgba(0, 0, 0, 0.2); +} diff --git a/content/IoT/pom.xml b/content/IoT/pom.xml index 509eacc..b2ba060 100644 --- a/content/IoT/pom.xml +++ b/content/IoT/pom.xml @@ -35,6 +35,7 @@ <modules> <module>IoTDeveloper</module> + <module>magic-industrial-data-acquisition</module> </modules> </project> diff --git a/site/pom.xml b/site/pom.xml index fa160f4..7e771a6 100644 --- a/site/pom.xml +++ b/site/pom.xml @@ -368,6 +368,13 @@ <type>war</type> <outputDirectory>${project.build.directory}/site/microcourses/apacheway</outputDirectory> </artifactItem--> + <artifactItem> + <groupId>org.apache.training.content</groupId> + <artifactId>magic-industrial-data-acquisition-with-apache-plc4x-tsfile-and-iotdb</artifactId> + <version>1.0.0-SNAPSHOT</version> + <type>war</type> + <outputDirectory>${project.build.directory}/site/iot/magic-industrial-data-acquisition-with-apache-plc4x-tsfile-and-iotdb</outputDirectory> + </artifactItem> </artifactItems> </configuration> </execution> @@ -705,6 +712,12 @@ <version>1.0.0-SNAPSHOT</version> <type>war</type> </dependency--> + <dependency> + <groupId>org.apache.training.content</groupId> + <artifactId>magic-industrial-data-acquisition-with-apache-plc4x-tsfile-and-iotdb</artifactId> + <version>1.0.0-SNAPSHOT</version> + <type>war</type> + </dependency> </dependencies> <!-- Make Snapshots of Apache projects available --> diff --git a/site/src/site/site.xml b/site/src/site/site.xml index 335deb5..5bca643 100644 --- a/site/src/site/site.xml +++ b/site/src/site/site.xml @@ -136,6 +136,11 @@ <item name="Presentation" href="presentations/training/presentation/index_en.html" target="_blank"/> </item> <item name="Apache Zookeeper" href="presentations/zookeeper/index_en.html" target="_blank"/> + <item name="IoT"> + <item name="Magic Industrial Data Acquisition" href="iot/magic-industrial-data-acquisition-with-apache-plc4x-tsfile-and-iotdb/index.html" target="_blank"/> + <item name="Apache MyNewt" href="presentations/mynewt/index_en.html" target="_blank"/> + <item name="Revolutionizing IIoT with Apache PLC4X" href="presentations/plc4x/revolutionizing-iiot-with-plc4x/index.html" target="_blank"/> + </item> </menu> <!-- Users (Authors and presenters) -->
