This flow was submitted before accounts existed, so nobody owns it yet. If you submitted it, open the edit link you were given — it still works — and you can attach the flow to an account from there. There is no deadline, and attaching it retires the link for good.
Bitcoin tracker
This Bitcoin tracker powered by Kraken is customizable to display the current Bitcoin price in 6+ digits or use (Samson Mow) Excellion's Million Notation. It changes color of the Bitcoin price (green for pumps & red for dumps) as well as the opening & cl
| System | Node-RED |
|---|---|
| Firmware | AWTRIX 3 |
| Topic | Smarthome |
| Built by | icegeist |
| File | XRKWoR68orP4.json · 8.1 KB |
| Icons | 1 |
| Published | 26 Nov 2024 · updated 26 Nov 2024 |
| Downloads | 40 |
This Bitcoin tracker powered by Kraken is customizable to display the current Bitcoin price in 6+ digits or use (Samson Mow) Excellion's Million Notation. It changes color of the Bitcoin price (green for pumps & red for dumps) as well as the opening & closing market trends with color.
Installation Tip:
Once Node-Red is running, Right Burger Menu -> Manage Palette -> install: node-red-contrib-throttle
Without installing throttle you will get an error.
Double click on the "http request" block & point the URL to your static IP Ulanzi awtriz clock
Customization Tip:
You can change between running using (Samson Mow) Excellion's Million Notation or digit pricing by changing on line in the "Bitcoin APP" in flow. Look for "let btc_m_notation = false" if you want 6 digit prices or true if you want million notation.
XRKWoR68orP4.json
[
{
"id": "928e76fe90e4b0b2",
"type": "group",
"z": "5952ac5e35d08c18",
"style": {
"stroke": "#2b2b2b",
"stroke-opacity": "1",
"fill": "#181818",
"fill-opacity": "0.5",
"label": true,
"label-position": "nw",
"color": "#cccccc"
},
"nodes": [
"30d18f9c2bdedc24",
"52a47dabab5920f8",
"899e05b3fdb39f52",
"0f3adbee2be59c5b",
"74243b903398cd5a",
"675ec78be173b19b",
"093cb114e4edfdf7",
"7a5a94f521f1a7d9",
"d60c52eb6ea6ed25",
"30122ee8832c8781"
],
"x": 54,
"y": 251.5,
"w": 1012,
"h": 249.5
},
{
"id": "30d18f9c2bdedc24",
"type": "websocket out",
"z": "5952ac5e35d08c18",
"g": "928e76fe90e4b0b2",
"name": "",
"server": "",
"client": "5767230c7420f162",
"x": 340,
"y": 340,
"wires": []
},
{
"id": "52a47dabab5920f8",
"type": "websocket in",
"z": "5952ac5e35d08c18",
"g": "928e76fe90e4b0b2",
"name": "",
"server": "",
"client": "5767230c7420f162",
"x": 200,
"y": 300,
"wires": [
[
"0f3adbee2be59c5b"
]
]
},
{
"id": "899e05b3fdb39f52",
"type": "inject",
"z": "5952ac5e35d08c18",
"g": "928e76fe90e4b0b2",
"name": "",
"props": [
{
"p": "payload"
}
],
"repeat": "3600",
"crontab": "",
"once": true,
"onceDelay": "2",
"topic": "",
"payload": "{\"method\":\"subscribe\",\"params\":{\"channel\":\"ticker\",\"symbol\":[\"BTC/USD\"]}}",
"payloadType": "json",
"x": 150,
"y": 340,
"wires": [
[
"30d18f9c2bdedc24"
]
]
},
{
"id": "0f3adbee2be59c5b",
"type": "json",
"z": "5952ac5e35d08c18",
"g": "928e76fe90e4b0b2",
"name": "",
"property": "payload",
"action": "obj",
"pretty": false,
"x": 390,
"y": 300,
"wires": [
[
"74243b903398cd5a"
]
]
},
{
"id": "74243b903398cd5a",
"type": "switch",
"z": "5952ac5e35d08c18",
"g": "928e76fe90e4b0b2",
"name": "",
"property": "payload.channel",
"propertyType": "msg",
"rules": [
{
"t": "eq",
"v": "heartbeat",
"vt": "str"
},
{
"t": "eq",
"v": "ticker",
"vt": "str"
},
{
"t": "else"
}
],
"checkall": "true",
"repair": false,
"outputs": 3,
"x": 530,
"y": 300,
"wires": [
[],
[
"675ec78be173b19b"
],
[]
]
},
{
"id": "675ec78be173b19b",
"type": "change",
"z": "5952ac5e35d08c18",
"g": "928e76fe90e4b0b2",
"name": "",
"rules": [
{
"t": "set",
"p": "high",
"pt": "msg",
"to": "payload.data[0].high",
"tot": "msg"
},
{
"t": "set",
"p": "low",
"pt": "msg",
"to": "payload.data[0].low",
"tot": "msg"
},
{
"t": "set",
"p": "avg",
"pt": "msg",
"to": "payload.data[0].vwap",
"tot": "msg"
},
{
"t": "set",
"p": "payload",
"pt": "msg",
"to": "payload.data[0].last",
"tot": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 700,
"y": 300,
"wires": [
[
"093cb114e4edfdf7",
"d60c52eb6ea6ed25"
]
]
},
{
"id": "093cb114e4edfdf7",
"type": "debug",
"z": "5952ac5e35d08c18",
"g": "928e76fe90e4b0b2",
"name": "current price",
"active": true,
"tosidebar": false,
"console": false,
"tostatus": true,
"complete": "payload",
"targetType": "msg",
"statusVal": "payload",
"statusType": "auto",
"x": 950,
"y": 300,
"wires": []
},
{
"id": "7a5a94f521f1a7d9",
"type": "function",
"z": "5952ac5e35d08c18",
"g": "928e76fe90e4b0b2",
"name": "Bitcoin App",
"func": "\n// Config\nlet btc_m_notation = true\nlet btc_lowhigh = true\n\n// Init\nlet btc_color = \"#000000\";\nlet btc_icon = \"8267\";\n\nmsg.btcusd_avg = parseFloat(msg.avg);\nmsg.btcusd_current = parseFloat(msg.payload);\n\nmsg.name = \"bitcoin\"; // HTTP API Appname\n\nif (msg.btcusd_current > msg.btcusd_avg) {\n // green = price above daily average\n btc_color = \"#80ff82\";\n btc_icon = \"bitcoin\";\n} else {\n // red = price below daily average\n btc_color = \"#ff7373\";\n btc_icon = \"8267\"; // 1097\n}\n\nlet btc_value = \"\";\nif (btc_m_notation) {\n btc_value = String(Number(msg.payload) / 1000000).substring(0, 4) + \"M\";\n} else {\n btc_value = String(Math.round(Number(msg.payload)));\n}\n\nlet awtrix_data = {\n text: btc_value,\n icon: btc_icon,\n color: btc_color,\n lifetime: \"30\",\n lifetimeMode: \"1\",\n\n}\n\nif (btc_lowhigh) {\n let pct = ((msg.payload - msg.low) / (msg.high - msg.low));\n let bar_start = 10;\n let bar_width = 20;\n let bar_pct_width = bar_width * pct;\n awtrix_data[\"draw\"] = [\n { \"dl\": [bar_start, 7, Math.round(bar_start+bar_width), 7, \"#ff7373\"] },\n { \"dl\": [bar_start, 7, Math.round(bar_start+bar_pct_width), 7, \"#80ff82\"] },\n { \"dp\": [bar_start+bar_pct_width+1, 7, \"#ffffff\"] }\n\n ]\n}\n\nmsg.payload = JSON.stringify(awtrix_data);\n\nreturn msg;",
"outputs": 1,
"timeout": 0,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 330,
"y": 460,
"wires": [
[
"30122ee8832c8781"
]
]
},
{
"id": "d60c52eb6ea6ed25",
"type": "throttle",
"z": "5952ac5e35d08c18",
"g": "928e76fe90e4b0b2",
"name": "",
"throttleType": "time",
"timeLimit": "1",
"timeLimitType": "seconds",
"countLimit": 0,
"blockSize": 0,
"locked": false,
"x": 170,
"y": 460,
"wires": [
[
"7a5a94f521f1a7d9"
]
]
},
{
"id": "30122ee8832c8781",
"type": "http request",
"z": "5952ac5e35d08c18",
"g": "928e76fe90e4b0b2",
"name": "",
"method": "POST",
"ret": "txt",
"paytoqs": "ignore",
"url": "http://10.1.5.184/api/custom",
"tls": "",
"persist": false,
"proxy": "",
"insecureHTTPParser": false,
"authType": "",
"senderr": false,
"headers": [],
"x": 510,
"y": 460,
"wires": [
[]
]
},
{
"id": "5767230c7420f162",
"type": "websocket-client",
"path": "wss://ws.kraken.com/v2",
"tls": "",
"wholemsg": "false",
"hb": "30",
"subprotocol": "",
"headers": []
}
]
These icons belong on the device, in /ICONS. Each one is at
most 32×8
pixels — shown here magnified, at their real proportions.
8×8 px