{"version":3,"sources":["webpack:///./node_modules/copy-to-clipboard/index.js","webpack:///./src/assets/images/Advanced_User/Node-RED_OpenHAB_Projects_Live_Video_03.png","webpack:///./src/assets/images/Advanced_User/Node-RED_OpenHAB_Projects_Live_Video_02.png","webpack:///./src/components/Advanced_User/Node-RED_and_MQTT/Projects/Live_Video/live-video.jsx","webpack:///./src/pages/Advanced_User/Node-RED_and_MQTT/Projects/Live_Video/index.jsx","webpack:///./node_modules/toggle-selection/index.js","webpack:///./src/assets/images/Advanced_User/Node-RED_OpenHAB_Projects_Live_Video_01.png","webpack:///./node_modules/react-copy-to-clipboard/lib/index.js","webpack:///./node_modules/react-copy-to-clipboard/lib/Component.js"],"names":["deselectCurrent","clipboardToIE11Formatting","module","exports","text","options","debug","message","reselectPrevious","range","selection","mark","success","document","createRange","getSelection","createElement","textContent","style","all","position","top","clip","whiteSpace","webkitUserSelect","MozUserSelect","msUserSelect","userSelect","addEventListener","e","stopPropagation","format","preventDefault","clipboardData","console","warn","window","clearData","setData","onCopy","body","appendChild","selectNodeContents","addRange","execCommand","Error","err","error","copyKey","test","navigator","userAgent","replace","prompt","removeRange","removeAllRanges","removeChild","FTPServerFlow","state","valueserver","JSON","stringify","jsondataserver","copied","render","classes","this","props","Fragment","className","root","Paper","alt","src","LiveVideo","imgcard","setState","Button","variant","color","marginLeft","React","Component","withStyles","flexGrow","marginBottom","seodata","imgStyle","SEOHelmet","title","description","image","location","pathname","Typography","id","pills","pill","link","to","href","aria-hidden","height","version","viewBox","width","fillRule","d","UIOverview","target","rel","OpenHabSitemap","previousTitle","previousLink","nextTitle","nextLink","rangeCount","active","activeElement","ranges","i","push","getRangeAt","tagName","toUpperCase","blur","type","forEach","focus","CopyToClipboard","Object","defineProperty","value","_react","_interopRequireDefault","_copyToClipboard","obj","__esModule","_typeof","Symbol","iterator","constructor","prototype","ownKeys","object","enumerableOnly","keys","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","apply","_objectWithoutProperties","source","excluded","key","sourceKeys","length","indexOf","_objectWithoutPropertiesLoose","sourceSymbolKeys","propertyIsEnumerable","call","_classCallCheck","instance","Constructor","TypeError","_defineProperties","descriptor","configurable","writable","_possibleConstructorReturn","self","_assertThisInitialized","_getPrototypeOf","o","setPrototypeOf","getPrototypeOf","__proto__","ReferenceError","_setPrototypeOf","p","_defineProperty","_React$PureComponent","_getPrototypeOf2","_this","_len","arguments","args","Array","_key","concat","event","_this$props","children","elem","Children","only","result","onClick","protoProps","staticProps","subClass","superClass","create","_inherits","_this$props2","cloneElement","getOwnPropertyDescriptors","defineProperties","_objectSpread","PureComponent","undefined"],"mappings":"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","file":"component---src-pages-advanced-user-node-red-and-mqtt-projects-live-video-index-jsx-cd18ce8623afe1c584bf.js","sourcesContent":["\"use strict\";\n\nvar deselectCurrent = require(\"toggle-selection\");\n\nvar clipboardToIE11Formatting = {\n \"text/plain\": \"Text\",\n \"text/html\": \"Url\",\n \"default\": \"Text\"\n};\nvar defaultMessage = \"Copy to clipboard: #{key}, Enter\";\n\nfunction format(message) {\n var copyKey = (/mac os x/i.test(navigator.userAgent) ? \"⌘\" : \"Ctrl\") + \"+C\";\n return message.replace(/#{\\s*key\\s*}/g, copyKey);\n}\n\nfunction copy(text, options) {\n var debug,\n message,\n reselectPrevious,\n range,\n selection,\n mark,\n success = false;\n\n if (!options) {\n options = {};\n }\n\n debug = options.debug || false;\n\n try {\n reselectPrevious = deselectCurrent();\n range = document.createRange();\n selection = document.getSelection();\n mark = document.createElement(\"span\");\n mark.textContent = text; // reset user styles for span element\n\n mark.style.all = \"unset\"; // prevents scrolling to the end of the page\n\n mark.style.position = \"fixed\";\n mark.style.top = 0;\n mark.style.clip = \"rect(0, 0, 0, 0)\"; // used to preserve spaces and line breaks\n\n mark.style.whiteSpace = \"pre\"; // do not inherit user-select (it may be `none`)\n\n mark.style.webkitUserSelect = \"text\";\n mark.style.MozUserSelect = \"text\";\n mark.style.msUserSelect = \"text\";\n mark.style.userSelect = \"text\";\n mark.addEventListener(\"copy\", function (e) {\n e.stopPropagation();\n\n if (options.format) {\n e.preventDefault();\n\n if (typeof e.clipboardData === \"undefined\") {\n // IE 11\n debug && console.warn(\"unable to use e.clipboardData\");\n debug && console.warn(\"trying IE specific stuff\");\n window.clipboardData.clearData();\n var format = clipboardToIE11Formatting[options.format] || clipboardToIE11Formatting[\"default\"];\n window.clipboardData.setData(format, text);\n } else {\n // all other browsers\n e.clipboardData.clearData();\n e.clipboardData.setData(options.format, text);\n }\n }\n\n if (options.onCopy) {\n e.preventDefault();\n options.onCopy(e.clipboardData);\n }\n });\n document.body.appendChild(mark);\n range.selectNodeContents(mark);\n selection.addRange(range);\n var successful = document.execCommand(\"copy\");\n\n if (!successful) {\n throw new Error(\"copy command was unsuccessful\");\n }\n\n success = true;\n } catch (err) {\n debug && console.error(\"unable to copy using execCommand: \", err);\n debug && console.warn(\"trying IE specific stuff\");\n\n try {\n window.clipboardData.setData(options.format || \"text\", text);\n options.onCopy && options.onCopy(window.clipboardData);\n success = true;\n } catch (err) {\n debug && console.error(\"unable to copy using clipboardData: \", err);\n debug && console.error(\"falling back to prompt\");\n message = format(\"message\" in options ? options.message : defaultMessage);\n window.prompt(message, text);\n }\n } finally {\n if (selection) {\n if (typeof selection.removeRange == \"function\") {\n selection.removeRange(range);\n } else {\n selection.removeAllRanges();\n }\n }\n\n if (mark) {\n document.body.removeChild(mark);\n }\n\n reselectPrevious();\n }\n\n return success;\n}\n\nmodule.exports = copy;","module.exports = __webpack_public_path__ + \"static/Node-RED_OpenHAB_Projects_Live_Video_03-17972bf73a673eec9d6b9e7d35eccf6b.png\";","module.exports = __webpack_public_path__ + \"static/Node-RED_OpenHAB_Projects_Live_Video_02-19481b8d664ab2127355f56a4dff84c7.png\";","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport { withStyles } from '@material-ui/core/styles'\nimport Button from '@material-ui/core/Button'\nimport Paper from '@material-ui/core/Paper'\n\nimport { CopyToClipboard } from 'react-copy-to-clipboard'\nimport jsondataserver from './node-red-flow-live-video.json'\n\nimport LiveVideo from '../../../../../assets/images/Advanced_User/Node-RED_OpenHAB_Projects_Live_Video_02.png'\n\nconst styles = ({\n root: {\n flexGrow: 1,\n },\n imgcard: {\n marginBottom: '-0.4rem',\n }\n})\n\nclass FTPServerFlow extends React.Component {\n state = {\n valueserver: JSON.stringify(jsondataserver),\n copied: false,\n };\n\n render() {\n const { classes } = this.props;\n return (\n \n
\n \n \"Node-RED\n \n
\n
\n this.setState({ copied: true })}>\n \n \n {this.state.copied ? Copied : null} \n

\n
\n );\n }\n}\n\n\nFTPServerFlow.propTypes = {\n classes: PropTypes.object.isRequired,\n}\n\nexport default withStyles(styles)(FTPServerFlow)\n","import React from 'react'\nimport {Link} from 'gatsby'\n\nimport Paper from '@material-ui/core/Paper'\nimport Typography from '@material-ui/core/Typography'\n\nimport { OutboundLink } from 'gatsby-plugin-google-analytics'\n\nimport SEOHelmet from '../../../../../components/Layout/SEOHelmet'\nimport Footer from \"../../../../../components/Layout/footer\"\nimport BreadCrumbs from '../../../../../components/Layout/breadcrumbs/breadcrumbs'\nimport LiveVideoFlow from '../../../../../components/Advanced_User/Node-RED_and_MQTT/Projects/Live_Video/live-video'\n\nimport UIOverview from '../../../../../assets/images/Advanced_User/Node-RED_OpenHAB_Projects_Live_Video_01.png'\nimport OpenHabSitemap from '../../../../../assets/images/Advanced_User/Node-RED_OpenHAB_Projects_Live_Video_03.png'\n\nconst seodata = {\n title: 'Home Automation :: Display your Camera\\'s Live Video Stream using Node-RED',\n description: 'We want to be able to display a JPG Stream of Images from the live video in the Node-RED dashboard.',\n image: '/images/Search/AU_SearchThumb_Node-RED.png'\n}\n\nconst imgStyle = {\n marginBottom: '-0.4rem',\n};\n\nexport default (props) => (\n \n \n \n Home Automation with Node-RED and OpenHAB\n \n
\n\n\n \n \n
    \n
  • Home Automation with Node-RED and OpenHAB
  • \n
      \n
    • Live Video Stream
    • \n
    • Bonus :: OpenHAB Integration
    • \n
    \n
\n
\n \n \n Live Video Stream\n \n
\n \n The screenshot below shows the final UI that we are going to build using Node-RED and the Node-RED Dashboard. We want to be able to display a JPG Stream of Images from the live video in the Node-RED dashboard.\n \n
\n \n \"OpenHAB2\"\n \n
\n
\n \n We are going to use the node-red-contrib-mjpgcamera plugin that can be installed from Manage Palette menu in our Node-RED dashboard. The plugin is grabbing single frames from one of the 3 MJPEG Streams that our camera offers and saves them to the public directory we created earlier. We then use a Watch Node to load the image every time it was updated, add a timestamp to its name - this is to trick your browser, that would refuse to reload the image, when the image name stays the same, thinking it was already loaded - and load it into our Node-RED dashboard.\n \n
\n \n
\n \n \n Bonus :: OpenHAB Integration\n \n
\n \n Adding to the OpenHAB tutorial we are now going to consume the Node-RED flow in our OpenHAB 2 Basic UI.\n \n
\n \n \"OpenHAB2\"\n \n
\n
\n \n {`Image url=\"http://localhost:1880/352snap.jpg\" label=\"Camera Video Snapshot\" refresh=30000`}\n \n
\n \n The refresh rate (in Milliseconds) can be adjusted to your needs. We have adjusted the MJEPG plugin in our Node-RED flow to grab a new frame from the 352p stream every 20s that will be displayed in the Node-RED Dashboard. The refresh value in the line above will update the image in the OpenHAB UI every 30s.\n \n
\n
\n \n
\n);","module.exports = function () {\n var selection = document.getSelection();\n\n if (!selection.rangeCount) {\n return function () {};\n }\n\n var active = document.activeElement;\n var ranges = [];\n\n for (var i = 0; i < selection.rangeCount; i++) {\n ranges.push(selection.getRangeAt(i));\n }\n\n switch (active.tagName.toUpperCase()) {\n // .toUpperCase handles XHTML\n case 'INPUT':\n case 'TEXTAREA':\n active.blur();\n break;\n\n default:\n active = null;\n break;\n }\n\n selection.removeAllRanges();\n return function () {\n selection.type === 'Caret' && selection.removeAllRanges();\n\n if (!selection.rangeCount) {\n ranges.forEach(function (range) {\n selection.addRange(range);\n });\n }\n\n active && active.focus();\n };\n};","module.exports = __webpack_public_path__ + \"static/Node-RED_OpenHAB_Projects_Live_Video_01-00e664fcbf1ccf1e6f41aed82199d880.png\";","\"use strict\";\n\nvar _require = require('./Component'),\n CopyToClipboard = _require.CopyToClipboard;\n\nCopyToClipboard.CopyToClipboard = CopyToClipboard;\nmodule.exports = CopyToClipboard;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.CopyToClipboard = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _copyToClipboard = _interopRequireDefault(require(\"copy-to-clipboard\"));\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\n\nfunction _typeof(obj) {\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(source, true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(source).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nvar CopyToClipboard = /*#__PURE__*/function (_React$PureComponent) {\n _inherits(CopyToClipboard, _React$PureComponent);\n\n function CopyToClipboard() {\n var _getPrototypeOf2;\n\n var _this;\n\n _classCallCheck(this, CopyToClipboard);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(CopyToClipboard)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n _defineProperty(_assertThisInitialized(_this), \"onClick\", function (event) {\n var _this$props = _this.props,\n text = _this$props.text,\n onCopy = _this$props.onCopy,\n children = _this$props.children,\n options = _this$props.options;\n\n var elem = _react[\"default\"].Children.only(children);\n\n var result = (0, _copyToClipboard[\"default\"])(text, options);\n\n if (onCopy) {\n onCopy(text, result);\n } // Bypass onClick if it was present\n\n\n if (elem && elem.props && typeof elem.props.onClick === 'function') {\n elem.props.onClick(event);\n }\n });\n\n return _this;\n }\n\n _createClass(CopyToClipboard, [{\n key: \"render\",\n value: function render() {\n var _this$props2 = this.props,\n _text = _this$props2.text,\n _onCopy = _this$props2.onCopy,\n _options = _this$props2.options,\n children = _this$props2.children,\n props = _objectWithoutProperties(_this$props2, [\"text\", \"onCopy\", \"options\", \"children\"]);\n\n var elem = _react[\"default\"].Children.only(children);\n\n return _react[\"default\"].cloneElement(elem, _objectSpread({}, props, {\n onClick: this.onClick\n }));\n }\n }]);\n\n return CopyToClipboard;\n}(_react[\"default\"].PureComponent);\n\nexports.CopyToClipboard = CopyToClipboard;\n\n_defineProperty(CopyToClipboard, \"defaultProps\", {\n onCopy: undefined,\n options: undefined\n});"],"sourceRoot":""}