{"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:///./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","webpack:///./src/components/Advanced_User/Node-RED_and_MQTT/Projects/Live_Video/live-video-raz.jsx","webpack:///./src/pages/Advanced_User/openHABian_on_Raspberry_Pi/Projects/Live_Video/index.jsx"],"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","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","target","sourceKeys","length","indexOf","_objectWithoutPropertiesLoose","sourceSymbolKeys","propertyIsEnumerable","call","_classCallCheck","instance","Constructor","TypeError","_defineProperties","props","descriptor","configurable","writable","_possibleConstructorReturn","self","_assertThisInitialized","_getPrototypeOf","o","setPrototypeOf","getPrototypeOf","__proto__","ReferenceError","_setPrototypeOf","p","_defineProperty","_React$PureComponent","_getPrototypeOf2","_this","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","FTPServerFlow","state","valueserver","JSON","stringify","jsondataserver","copied","render","classes","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","rel","OpenHabSitemap","previousTitle","previousLink","nextTitle","nextLink"],"mappings":"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","file":"component---src-pages-advanced-user-open-ha-bian-on-raspberry-pi-projects-live-video-index-jsx-3e75b3908d61ff24b027.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\";","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});","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-raz.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-raz'\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 on a Raspberry Pi\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 \n
\n \n The screenshot below shows the final UI that we are going to build using Node-RED and the Node-RED Dashboard on a Raspberry Pi. 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);\n"],"sourceRoot":""}