# Return html / fa icon code in a function

**URL:** <https://discourse.nodered.org/t/return-html-fa-icon-code-in-a-function/37074>\
**Category:** Dashboard\
**Created:** [6 December 2020 09:57 UTC](https://discourse.nodered.org/t/return-html-fa-icon-code-in-a-function/37074 "2020-12-06T09:57:25Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![thomasvjohansen](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/thomasvjohansen/32/32779_2.png) [@thomasvjohansen](https://discourse.nodered.org/u/thomasvjohansen)\
**Post date:** [6 December 2020 09:57 UTC](https://discourse.nodered.org/t/return-html-fa-icon-code-in-a-function/37074/1 "2020-12-06T09:57:25Z")

</div>

I want to show the wind direction from openweathermap by a fa-icon but the function outputs degrees.

I have a function which outputs "90" degrees.

I want to convert this to a fa-icon + rotation and save it in a datacell which is later picked up by a template.  
but since this datacell have multiple data I cant do the format in template.

so can the fa icon be inserted in the function?

tried this but not working

```auto
  	data05: {
       cell01: msg.payload.hourly[1].wind_cardinal = '<div class="fa fa-location-arrow fa-rotate' + {degreesToCardinal(msg.payload.hourly[1].wind_deg)} + '>',
       cell02: msg.payload.hourly[3].wind_cardinal = degreesToCardinal(msg.payload.hourly[3].wind_deg),
       cell03: msg.payload.hourly[5].wind_cardinal = degreesToCardinal(msg.payload.hourly[5].wind_deg),
       cell04: msg.payload.hourly[7].wind_cardinal = degreesToCardinal(msg.payload.hourly[7].wind_deg),
       cell05: msg.payload.hourly[9].wind_cardinal = degreesToCardinal(msg.payload.hourly[9].wind_deg),
       cell06: msg.payload.hourly[11].wind_cardinal = degreesToCardinal(msg.payload.hourly[11].wind_deg),
  	}

```

---

<div class="post-metadata">

**Author:** ![hotNipi](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/hotnipi/32/383_2.png) [@hotNipi](https://discourse.nodered.org/u/hotNipi)\
**Post date:** [6 December 2020 10:14 UTC](https://discourse.nodered.org/t/return-html-fa-icon-code-in-a-function/37074/2 "2020-12-06T10:14:53Z")

</div>

Maybe you can find some useful tips from this thread [Help with icon in `text` node](https://discourse.nodered.org/t/help-with-icon-in-text-node/34801)

---

<div class="post-metadata">

**Author:** ![thomasvjohansen](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/thomasvjohansen/32/32779_2.png) [@thomasvjohansen](https://discourse.nodered.org/u/thomasvjohansen)\
**Post date:** [6 December 2020 10:19 UTC](https://discourse.nodered.org/t/return-html-fa-icon-code-in-a-function/37074/3 "2020-12-06T10:19:49Z")

</div>

My problem is not about the weather icons, its about passing on html code within a function to be used in a template.

---

<div class="post-metadata">

**Author:** ![hotNipi](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/hotnipi/32/383_2.png) [@hotNipi](https://discourse.nodered.org/u/hotNipi)\
**Post date:** [6 December 2020 10:33 UTC](https://discourse.nodered.org/t/return-html-fa-icon-code-in-a-function/37074/4 "2020-12-06T10:33:13Z")

</div>

> [@thomasvjohansen](#):
>
> I want to show the wind direction from openweathermap

I just wanted to say that there is more and easy ways to do this.  
But to understand what is not working in your case, it takes more than that object you have shared.  
Make a simple flow with some data injected and the template where the result should be used.

---

<div class="post-metadata">

**Author:** ![thomasvjohansen](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/thomasvjohansen/32/32779_2.png) [@thomasvjohansen](https://discourse.nodered.org/u/thomasvjohansen)\
**Post date:** [6 December 2020 11:00 UTC](https://discourse.nodered.org/t/return-html-fa-icon-code-in-a-function/37074/5 "2020-12-06T11:00:29Z")

</div>

Im modifying a weather flow, which pulls data from openweathermap.

the flow collects data and formats data into table cells, in this case "cell01".  
Then a template node picks up everything in data.cell01, but it contains multiple values so it cant be formated in the template.  
Though I can see that the cloud icons are generated in the template but cant figure out how to extend that to convert directions to icons.

The icon that could be used is "fa-location-arrow fa-rotate-90".

this is the complete flow but had to remove my openweathermap api key.

It is the function "format forecast data" and template "forecast 6 hours"

 ![Udklip4](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/1/c/1ca13ac506c830dcc3fd913dc6c6aac854b8314a.png)

```auto
[{"id":"5f633a28.607134","type":"tab","label":"OWM Landscape","disabled":false,"info":""},{"id":"180a101a.9cd43","type":"ui_button","z":"5f633a28.607134","name":"IconRefresh","group":"70fb931.dfc146c","order":1,"width":3,"height":2,"passthru":false,"label":"","tooltip":"Refresh","color":"","bgcolor":"#17334d","icon":"fa-refresh fa-8x","payload":"true","payloadType":"bool","topic":"","x":990,"y":300,"wires":[["c5efdf55.db32f"]]},{"id":"9c052db7.3c434","type":"ui_text","z":"5f633a28.607134","group":"70fb931.dfc146c","order":3,"width":3,"height":1,"name":"Description","label":"","format":"<font size=4>{{msg.payload.current.weather[0].description}}","layout":"row-center","x":990,"y":60,"wires":[]},{"id":"ec4eb2d0.974c","type":"ui_text","z":"5f633a28.607134","group":"70fb931.dfc146c","order":5,"width":4,"height":1,"name":"Wind","label":"","format":"{{msg.payload.current.wind_speed}}&nbsp;&nbsp;<i class=\"wi wi-darksky-wind\"></i>&nbsp;&nbsp;{{msg.payload.current.wind_cardinal}}","layout":"row-right","x":970,"y":140,"wires":[]},{"id":"40f44662.3ecde8","type":"ui_text","z":"5f633a28.607134","group":"70fb931.dfc146c","order":7,"width":3,"height":1,"name":"SunriseTime","label":"","format":"<i class=\"wi wi-owm-01d\"></i>&nbsp;<i class=\"fa fa-arrow-up\"></i>&nbsp;&nbsp;{{msg.payload.current.sunrise}}","layout":"row-center","x":990,"y":180,"wires":[]},{"id":"5b97953.01fdd6c","type":"ui_text","z":"5f633a28.607134","group":"70fb931.dfc146c","order":6,"width":3,"height":1,"name":"SunsetTime","label":"","format":"<i class=\"wi wi-wu-sunny\"></i>&nbsp;<i class=\"fa fa-arrow-down\"></i>&nbsp;&nbsp;{{msg.payload.current.sunset}}","layout":"row-center","x":990,"y":220,"wires":[]},{"id":"d284ed2f.c15c8","type":"comment","z":"5f633a28.607134","name":"OpenWeatherMap One Call API for Weather and Forecast","info":"","x":270,"y":40,"wires":[]},{"id":"9dbf3c95.67c74","type":"ui_template","z":"5f633a28.607134","group":"70fb931.dfc146c","name":"Forecast 6 hours","order":8,"width":6,"height":4,"format":"<div style=\"height: 100%; justify-content: center; align-items: center;\">\n <div layout=\"rowicons\" layout-align=\"space-around start\" ng-repeat=\"data in msg.payload.rowicons\" style=\"font-size:150%;padding-top: 5px;padding-bottom: 5px\">\n <span flex style=\"color: white;text-align: center\"><i class=\"wi wi-owm-{{data.cell01}}\"></i></span>\n <span flex style=\"color: white;text-align: center\"><i class=\"wi wi-owm-{{data.cell02}}\"></i></span>\n <span flex style=\"color: white;text-align: center\"><i class=\"wi wi-owm-{{data.cell03}}\"></i></span>\n <span flex style=\"color: white;text-align: center\"><i class=\"wi wi-owm-{{data.cell04}}\"></i></span>\n <span flex style=\"color: white;text-align: center\"><i class=\"wi wi-owm-{{data.cell05}}\"></i></span>\n </div>\n <div layout=\"rowtext\" layout-align=\"space-around start\" ng-repeat=\"data in msg.payload.rowtext\" style=\"line-height: 150%\">\n <span flex style=\"color: white;text-align: center;\">{{data.cell01}}</span>\n <span flex style=\"color: white;text-align: center\">{{data.cell02}}</span>\n <span flex style=\"color: white;text-align: center\">{{data.cell03}}</span>\n <span flex style=\"color: white;text-align: center\">{{data.cell04}}</span>\n <span flex style=\"color: white;text-align: center\">{{data.cell05}}</span>\n </div>\n</div>","storeOutMessages":true,"fwdInMessages":true,"resendOnRefresh":false,"templateScope":"local","x":990,"y":360,"wires":[[]]},{"id":"7adde26c.514aec","type":"function","z":"5f633a28.607134","name":"Format forecast data","func":"var fcdata = {};\nvar units=flow.get('units');\nvar degreesToCardinal = function(deg){\nif (deg>11.25 && deg<=33.75){\nreturn \"NNE\";\n }else if (deg>33.75 && deg<56.25){\nreturn \"NE\";\n }else if (deg>56.25 && deg<78.75){\nreturn \"ENE\";\n }else if (deg>78.75 && deg<101.25){\nreturn 'E';\n }else if (deg>101.25 && deg<123.75){\nreturn \"ESE\";\n }else if (deg>123.75 && deg<146.25){\nreturn \"SE\";\n }else if (deg>146.25 && deg<168.75){\nreturn \"SSE\";\n }else if (deg>168.75 && deg<191.25){\nreturn \"S\";\n }else if (deg>191.25 && deg<213.75){\nreturn \"SSW\";\n }else if (deg>213.75 && deg<236.25){\nreturn \"SW\";\n }else if (deg>236.25 && deg<258.75){\nreturn \"WSW\";\n }else if (deg>258.75 && deg<281.25){\nreturn \"W\";\n }else if (deg>281.25 && deg<303.75){\nreturn \"WNW\";\n }else if (deg>303.75 && deg<326.25){\nreturn \"NW\";\n }else if (deg>326.25 && deg<348.75){\nreturn \"NNW\";\n }else{\nreturn \"N\"; \n }\n}\nif (units===undefined)\n{\n units=\"imperial\";\n}\nfunction formatTemp(high, low){\n if (units == \"imperial\") {\n if (low){\n temp = parseFloat(high).toFixed() + '|' + parseFloat(low).toFixed()\n }\n else {\n temp = parseFloat(high).toFixed() + '°F'\n }\n }\n else { // metric\n// temp = parseFloat(temp).toFixed(1) + '°'\n if (low){\n temp = parseFloat(high).toFixed() + '°|' + parseFloat(low).toFixed()+'°'\n }\n else {\n temp = parseFloat(high).toFixed() + '°'\n }\n }\n return temp;\n}\nfunction dayName(unixTime){\n var d = new Date(unixTime * 1000);\n var weekday = new Array(7);\n weekday[0] = \"Søn\";\n weekday[1] = \"Man\";\n weekday[2] = \"Tirs\";\n weekday[3] = \"Ons\";\n weekday[4] = \"Tors\";\n weekday[5] = \"Fre\";\n weekday[6] = \"Lør\";\n\n return weekday[d.getDay()]\n}\nfunction timeConvert(UNIX_timestamp){\n var a = new Date(UNIX_timestamp * 1000);\n var hour = a.getHours();\n //var suffix = \" am\";\n //if (hour >= 12) {\n // hour = hour - 12;\n // suffix = \" pm\";\n // }\n //if (hour === 0) {\n // hour = 12;\n // }\n var min = a.getMinutes();\n if (min < 10) {min = \"0\" + min;}\n return hour + ':' + min; //+ suffix;\n return hour;\n}\n// prepare forecast data for CSS based ui widget\n\nfcdata.payload = {\n rowtext: {\n \tdata01: {\n cell01: timeConvert(msg.payload.hourly[1].dt),\n cell02: timeConvert(msg.payload.hourly[3].dt),\n cell03: timeConvert(msg.payload.hourly[5].dt),\n cell04: timeConvert(msg.payload.hourly[7].dt),\n cell05: timeConvert(msg.payload.hourly[9].dt),\n cell06: timeConvert(msg.payload.hourly[11].dt),\n cell07: dayName(msg.payload.daily[1].dt),\n cell08: dayName(msg.payload.daily[2].dt),\n cell09: dayName(msg.payload.daily[3].dt),\n cell10: dayName(msg.payload.daily[4].dt),\n cell11: dayName(msg.payload.daily[5].dt),\n \t},\n \tdata02: {\n cell01: formatTemp(msg.payload.hourly[1].temp),\n cell02: formatTemp(msg.payload.hourly[3].temp),\n cell03: formatTemp(msg.payload.hourly[5].temp),\n cell04: formatTemp(msg.payload.hourly[7].temp),\n cell05: formatTemp(msg.payload.hourly[9].temp),\n cell06: formatTemp(msg.payload.hourly[11].temp),\n cell07: formatTemp(msg.payload.daily[1].temp.max, msg.payload.daily[0].temp.min),\n cell08: formatTemp(msg.payload.daily[2].temp.max, msg.payload.daily[1].temp.min),\n cell09: formatTemp(msg.payload.daily[3].temp.max, msg.payload.daily[2].temp.min),\n cell10: formatTemp(msg.payload.daily[4].temp.max, msg.payload.daily[3].temp.min),\n cell11: formatTemp(msg.payload.daily[5].temp.max, msg.payload.daily[4].temp.min),\n \t},\n \tdata03: {\n cell01: msg.payload.hourly[1].humidity + '%',\n cell02: msg.payload.hourly[3].humidity + '%',\n cell03: msg.payload.hourly[5].humidity + '%',\n cell04: msg.payload.hourly[7].humidity + '%',\n cell05: msg.payload.hourly[9].humidity + '%',\n cell06: msg.payload.hourly[11].humidity + '%',\n \t},\n \tdata04: {\n cell01: msg.payload.hourly[1].wind_speed.toFixed(0) + ' m/s',\n cell02: msg.payload.hourly[3].wind_speed.toFixed(0) + ' m/s',\n cell03: msg.payload.hourly[5].wind_speed.toFixed(0) + ' m/s',\n cell04: msg.payload.hourly[7].wind_speed.toFixed(0) + ' m/s',\n cell05: msg.payload.hourly[9].wind_speed.toFixed(0) + ' m/s',\n cell06: msg.payload.hourly[11].wind_speed.toFixed(0) + ' m/s',\n \t},\n \tdata05: {\n //cell01: msg.payload.hourly[1].wind_cardinal = '\\<div class\\=\"fa fa-location-arrow fa-rotate' + {degreesToCardinal(msg.payload.hourly[1].wind_deg)} + '\\>',\n cell01: msg.payload.hourly[1].wind_cardinal = degreesToCardinal(msg.payload.hourly[1].wind_deg),\n cell02: msg.payload.hourly[3].wind_cardinal = degreesToCardinal(msg.payload.hourly[3].wind_deg),\n cell03: msg.payload.hourly[5].wind_cardinal = degreesToCardinal(msg.payload.hourly[5].wind_deg),\n cell04: msg.payload.hourly[7].wind_cardinal = degreesToCardinal(msg.payload.hourly[7].wind_deg),\n cell05: msg.payload.hourly[9].wind_cardinal = degreesToCardinal(msg.payload.hourly[9].wind_deg),\n cell06: msg.payload.hourly[11].wind_cardinal = degreesToCardinal(msg.payload.hourly[11].wind_deg),\n \t}\n },\n rowicons: {\n \tdata01: {\n \t\tcell01: msg.payload.hourly[1].weather[0].icon,\n \t\tcell02: msg.payload.hourly[3].weather[0].icon,\n \t\tcell03: msg.payload.hourly[5].weather[0].icon,\n \t\tcell04: msg.payload.hourly[7].weather[0].icon,\n \t\tcell05: msg.payload.hourly[9].weather[0].icon,\n \t\tcell06: msg.payload.hourly[11].weather[0].icon,\n \t\tcell07: msg.payload.daily[1].weather[0].icon,\n \t\tcell08: msg.payload.daily[2].weather[0].icon,\n \t\tcell09: msg.payload.daily[3].weather[0].icon,\n \t\tcell10: msg.payload.daily[4].weather[0].icon,\n \t\tcell11: msg.payload.daily[5].weather[0].icon,\n \t}\n \t\n }\n}\n\nreturn fcdata;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":740,"y":360,"wires":[["9dbf3c95.67c74","fd418185.620748"]]},{"id":"d8c5527f.7739","type":"ui_text","z":"5f633a28.607134","group":"70fb931.dfc146c","order":2,"width":3,"height":1,"name":"Temperature","label":"","format":"<font size=6>{{msg.payload.current.temp}}","layout":"col-center","x":990,"y":100,"wires":[]},{"id":"681b2b94.9f7a44","type":"http request","z":"5f633a28.607134","name":"Get OWM data","method":"GET","ret":"obj","paytoqs":true,"url":"https://api.openweathermap.org/data/2.5/onecall","tls":"","persist":false,"proxy":"","authType":"","x":480,"y":160,"wires":[["67075190.fc6f3","7adde26c.514aec","30342c8c.30450c"]]},{"id":"c72d96f0.204148","type":"inject","z":"5f633a28.607134","name":"Trigger","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"600","crontab":"","once":true,"onceDelay":0.1,"topic":"","payload":"true","payloadType":"bool","x":120,"y":100,"wires":[["79276db2.a2ce14"]]},{"id":"67075190.fc6f3","type":"function","z":"5f633a28.607134","name":"Format current data","func":"var icon = {};\n\nvar units=flow.get('units');\nif (units===undefined)\n{\n units=\"imperial\";\n}\n\nfunction timeConvert(UNIX_timestamp){\n var a = new Date(UNIX_timestamp * 1000);\n var hour = a.getHours();\n //var suffix = \" am\";\n //if (hour >= 12) {\n // hour = hour - 12;\n // suffix = \" pm\";\n // }\n //if (hour === 0) {\n // hour = 12;\n // }\n var min = a.getMinutes();\n if (min < 10) {min = \"0\" + min;}\n return hour + ':' + min; //+ suffix;\n \n}\n\nvar degreesToCardinal = function(deg){\nif (deg>11.25 && deg<=33.75){\nreturn \"NNE\";\n }else if (deg>33.75 && deg<56.25){\nreturn \"NE\";\n }else if (deg>56.25 && deg<78.75){\nreturn \"ENE\";\n }else if (deg>78.75 && deg<101.25){\nreturn \"E\";\n }else if (deg>101.25 && deg<123.75){\nreturn \"ESE\";\n }else if (deg>123.75 && deg<146.25){\nreturn \"SE\";\n }else if (deg>146.25 && deg<168.75){\nreturn \"SSE\";\n }else if (deg>168.75 && deg<191.25){\nreturn \"S\";\n }else if (deg>191.25 && deg<213.75){\nreturn \"SSW\";\n }else if (deg>213.75 && deg<236.25){\nreturn \"SW\";\n }else if (deg>236.25 && deg<258.75){\nreturn \"WSW\";\n }else if (deg>258.75 && deg<281.25){\nreturn \"W\";\n }else if (deg>281.25 && deg<303.75){\nreturn \"WNW\";\n }else if (deg>303.75 && deg<326.25){\nreturn \"NW\";\n }else if (deg>326.25 && deg<348.75){\nreturn \"NNW\";\n }else{\nreturn \"N\"; \n }\n}\n\nif (units == \"imperial\")\n{\n msg.payload.current.temp = msg.payload.current.temp.toFixed() + ' °F';\n msg.payload.current.wind_speed = msg.payload.current.wind_speed.toFixed() + ' mph';\n}\nelse // metric units\n{\n msg.payload.current.temp = msg.payload.current.temp.toFixed(1) + ' °C';\n msg.payload.current.wind_speed = msg.payload.current.wind_speed.toFixed(1) + ' m/s';\n}\n\nmsg.payload.current.wind_cardinal = degreesToCardinal(msg.payload.current.wind_deg);\nmsg.payload.current.sunrise = timeConvert(msg.payload.current.sunrise);\nmsg.payload.current.sunset = timeConvert(msg.payload.current.sunset);\nmsg.payload.current.humidity = msg.payload.current.humidity + ' %';\n\n\nvar iconString = 'wi-owm-' + msg.payload.current.weather[0].icon + ' wi-4x';\nicon = {\n ui_control: {\n icon: iconString\n }\n}; \n\nreturn [msg, icon];","outputs":2,"noerr":0,"initialize":"","finalize":"","x":720,"y":160,"wires":[["d8c5527f.7739","ec4eb2d0.974c","9c052db7.3c434","40f44662.3ecde8","5b97953.01fdd6c","8d7cf800.2eb93"],["180a101a.9cd43"]]},{"id":"79276db2.a2ce14","type":"change","z":"5f633a28.607134","name":"Set location, appid, units","rules":[{"t":"delete","p":"payload","pt":"msg"},{"t":"set","p":"payload.lat","pt":"msg","to":"55.5","tot":"str"},{"t":"set","p":"payload.lon","pt":"msg","to":"12.1619","tot":"str"},{"t":"set","p":"payload.appid","pt":"msg","to":"","tot":"str"},{"t":"set","p":"payload.units","pt":"msg","to":"metric","tot":"str"},{"t":"set","p":"units","pt":"flow","to":"payload.units","tot":"msg"},{"t":"set","p":"payload.lang","pt":"msg","to":"da","tot":"str"},{"t":"set","p":"lang","pt":"flow","to":"payload.lang","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":350,"y":100,"wires":[["681b2b94.9f7a44"]]},{"id":"16181411.5a365c","type":"ui_ui_control","z":"5f633a28.607134","name":"Update tab","events":"all","x":110,"y":200,"wires":[["3f3d5ab9.82b3a6"]]},{"id":"c5efdf55.db32f","type":"link out","z":"5f633a28.607134","name":"Refresh","links":["a6b24cea.e52a7"],"x":1105,"y":300,"wires":[]},{"id":"a6b24cea.e52a7","type":"link in","z":"5f633a28.607134","name":"","links":["c5efdf55.db32f"],"x":155,"y":140,"wires":[["79276db2.a2ce14"]]},{"id":"3f3d5ab9.82b3a6","type":"switch","z":"5f633a28.607134","name":"tab focus","property":"tab","propertyType":"msg","rules":[{"t":"eq","v":"1","vt":"num"}],"checkall":"true","repair":false,"outputs":1,"x":280,"y":200,"wires":[["79276db2.a2ce14"]]},{"id":"fd418185.620748","type":"ui_template","z":"5f633a28.607134","group":"70fb931.dfc146c","name":"Forecast 5 days","order":9,"width":6,"height":3,"format":"<div style=\"height: 100%; justify-content: center; align-items: center;\">\n <div layout=\"rowicons\" layout-align=\"space-around start\" ng-repeat=\"data in msg.payload.rowicons\" style=\"font-size:150%;padding-top: 5px;padding-bottom: 5px\">\n \n <span flex style=\"color: #097479;text-align: center\"><i class=\"wi wi-owm-{{data.cell07}}\"></i></span>\n <span flex style=\"color: #097479;text-align: center\"><i class=\"wi wi-owm-{{data.cell08}}\"></i></span>\n <span flex style=\"color: #097479;text-align: center\"><i class=\"wi wi-owm-{{data.cell09}}\"></i></span>\n <span flex style=\"color: #097479;text-align: center\"><i class=\"wi wi-owm-{{data.cell10}}\"></i></span>\n <span flex style=\"color: #097479;text-align: center\"><i class=\"wi wi-owm-{{data.cell11}}\"></i></span>\n </div>\n <div layout=\"rowtext\" layout-align=\"space-around start\" ng-repeat=\"data in msg.payload.rowtext\" style=\"line-height: 150%\">\n \n <span flex style=\"color: #097479;text-align: center\">{{data.cell07}}</span>\n <span flex style=\"color: #097479;text-align: center\">{{data.cell08}}</span>\n <span flex style=\"color: #097479;text-align: center\">{{data.cell09}}</span>\n <span flex style=\"color: #097479;text-align: center\">{{data.cell10}}</span>\n <span flex style=\"color: #097479;text-align: center\">{{data.cell11}}</span>\n </div>\n</div>","storeOutMessages":true,"fwdInMessages":true,"resendOnRefresh":false,"templateScope":"local","x":980,"y":430,"wires":[[]]},{"id":"30342c8c.30450c","type":"debug","z":"5f633a28.607134","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":770,"y":560,"wires":[]},{"id":"8d7cf800.2eb93","type":"ui_text","z":"5f633a28.607134","group":"70fb931.dfc146c","order":4,"width":2,"height":1,"name":"Humidity","label":"","format":"{{msg.payload.current.humidity}}","layout":"col-center","x":980,"y":260,"wires":[]},{"id":"70fb931.dfc146c","type":"ui_group","name":"MainGroup","tab":"4bb34f67.69a87","order":1,"disp":false,"width":6,"collapse":false},{"id":"4bb34f67.69a87","type":"ui_tab","name":"Weather","icon":"wi-wu-partlycloudy","order":2,"disabled":false,"hidden":false}]

```

---

<div class="post-metadata">

**Author:** ![hotNipi](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/hotnipi/32/383_2.png) [@hotNipi](https://discourse.nodered.org/u/hotNipi)\
**Post date:** [6 December 2020 11:48 UTC](https://discourse.nodered.org/t/return-html-fa-icon-code-in-a-function/37074/6 "2020-12-06T11:48:01Z")

</div>

Couldn't do much without the data but just by reading the code I think you should do following:  
In that template you'll need to make that text row to include the icon tag

 ![image](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/f/8/f8d80ace6e99b9d9673042a96f9f51ce43e7cc4a.png)

And from function feed the degree

---

<div class="post-metadata">

**Author:** ![thomasvjohansen](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/thomasvjohansen/32/32779_2.png) [@thomasvjohansen](https://discourse.nodered.org/u/thomasvjohansen)\
**Post date:** [6 December 2020 13:28 UTC](https://discourse.nodered.org/t/return-html-fa-icon-code-in-a-function/37074/7 "2020-12-06T13:28:40Z")

</div>

thx your example pushed me the right way to do it, though realized afterwards that the icons only can be rotated in 4 directions, 0/90/180/270....

I need atleast 8 directions, so now im looking for a solution to that.

---

<div class="post-metadata">

**Author:** ![dceejay](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/dceejay/32/38_2.png) [@dceejay](https://discourse.nodered.org/u/dceejay)\
**Post date:** [6 December 2020 13:55 UTC](https://discourse.nodered.org/t/return-html-fa-icon-code-in-a-function/37074/8 "2020-12-06T13:55:54Z")

</div>

Sounds like a job for @Paul-Reed 🙂

---

<div class="post-metadata">

**Author:** ![hotNipi](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/hotnipi/32/383_2.png) [@hotNipi](https://discourse.nodered.org/u/hotNipi)\
**Post date:** [6 December 2020 13:57 UTC](https://discourse.nodered.org/t/return-html-fa-icon-code-in-a-function/37074/9 "2020-12-06T13:57:02Z")

</div>

The thread I suggested leads to weather-icons-wind from where you can actually get directional icons for full 360 degrees. Or for cardinals if you want. And you can choose the pointer direction even for wind blowing towards or from.

> **[Weather Icons - 222 font icons inspired by Font Awesome and designed for...](https://erikflowers.github.io/weather-icons/)**

  

> **[cdnjs - The #1 free and open source CDN built to make life easier for developers](https://cdnjs.com/libraries/weather-icons)**
>
> Simple. Fast. Reliable. Content delivery at its finest. cdnjs is a free and open-source CDN service trusted by over 10% of websites, powered by Cloudflare. We make it faster and easier to load library files on your websites.

---

<div class="post-metadata">

**Author:** ![thomasvjohansen](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/thomasvjohansen/32/32779_2.png) [@thomasvjohansen](https://discourse.nodered.org/u/thomasvjohansen)\
**Post date:** [6 December 2020 14:33 UTC](https://discourse.nodered.org/t/return-html-fa-icon-code-in-a-function/37074/10 "2020-12-06T14:33:23Z")

</div>

thx

now it works.

rewrote the degree section to eight names with correct degrees.  
the eight names fits material design icon names.

```auto
if (deg>22.50 && deg<=67.50){
return "north_east";
  }else if (deg>67.51 && deg<112.50){
return "east";
  }else if (deg>112.51 && deg<157.50){
return "south_east";
  }else if (deg>157.51 && deg<202.50){
return "south";
  }else if (deg>202.51 && deg<247.50){
return "south_west";
  }else if (deg>247.51 && deg<292.50){
return "west";
  }else if (deg>292.51 && deg<337.50){
return "north_west";
  }else{
return "north"; 
  }

```

and then added the material icons in the template

```auto

<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">

</div>
  <div layout="rowtext" layout-align="space-around start" ng-repeat="data in msg.payload.rowwind" style="line-height: 150%">
  <span flex style="color: white;text-align: center"><span class="material-icons">{{data.cell21}}</span></span>
  <span flex style="color: white;text-align: center"><span class="material-icons">{{data.cell22}}</span></span>
  <span flex style="color: white;text-align: center"><span class="material-icons">{{data.cell23}}</span></span>
  <span flex style="color: white;text-align: center"><span class="material-icons">{{data.cell24}}</span></span>
  <span flex style="color: white;text-align: center"><span class="material-icons">{{data.cell25}}</span></span>
 </div>

```

 ![Udklip4](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/d/c/dc8ec6d35eae4f568e7514d1feb9862071d4822b.png)

here is the flow

```auto
[{"id":"5f633a28.607134","type":"tab","label":"OWM Landscape","disabled":false,"info":""},{"id":"180a101a.9cd43","type":"ui_button","z":"5f633a28.607134","name":"IconRefresh","group":"70fb931.dfc146c","order":1,"width":3,"height":2,"passthru":false,"label":"","tooltip":"Refresh","color":"","bgcolor":"#17334d","icon":"fa-refresh fa-8x","payload":"true","payloadType":"bool","topic":"","x":990,"y":300,"wires":[["c5efdf55.db32f"]]},{"id":"9c052db7.3c434","type":"ui_text","z":"5f633a28.607134","group":"70fb931.dfc146c","order":3,"width":3,"height":1,"name":"Description","label":"","format":"<font size=4>{{msg.payload.current.weather[0].description}}","layout":"row-center","x":990,"y":60,"wires":[]},{"id":"ec4eb2d0.974c","type":"ui_text","z":"5f633a28.607134","group":"70fb931.dfc146c","order":5,"width":4,"height":1,"name":"Wind","label":"","format":"{{msg.payload.current.wind_speed}}&nbsp;&nbsp;<i class=\"wi wi-darksky-wind\"></i>&nbsp;&nbsp;{{msg.payload.current.wind_cardinal}}","layout":"row-right","x":970,"y":140,"wires":[]},{"id":"40f44662.3ecde8","type":"ui_text","z":"5f633a28.607134","group":"70fb931.dfc146c","order":7,"width":3,"height":1,"name":"SunriseTime","label":"","format":"<i class=\"wi wi-owm-01d\"></i>&nbsp;<i class=\"fa fa-arrow-up\"></i>&nbsp;&nbsp;{{msg.payload.current.sunrise}}","layout":"row-center","x":990,"y":180,"wires":[]},{"id":"5b97953.01fdd6c","type":"ui_text","z":"5f633a28.607134","group":"70fb931.dfc146c","order":6,"width":3,"height":1,"name":"SunsetTime","label":"","format":"<i class=\"wi wi-wu-sunny\"></i>&nbsp;<i class=\"fa fa-arrow-down\"></i>&nbsp;&nbsp;{{msg.payload.current.sunset}}","layout":"row-center","x":990,"y":220,"wires":[]},{"id":"d284ed2f.c15c8","type":"comment","z":"5f633a28.607134","name":"OpenWeatherMap One Call API for Weather and Forecast","info":"","x":270,"y":40,"wires":[]},{"id":"9dbf3c95.67c74","type":"ui_template","z":"5f633a28.607134","group":"70fb931.dfc146c","name":"Forecast 6 hours","order":8,"width":6,"height":4,"format":"<link href=\"https://fonts.googleapis.com/icon?family=Material+Icons\" rel=\"stylesheet\">\n<div style=\"height: 100%; justify-content: center; align-items: center;\">\n <div layout=\"rowicons\" layout-align=\"space-around start\" ng-repeat=\"data in msg.payload.rowicons\" style=\"font-size:150%;padding-top: 5px;padding-bottom: 5px\">\n <span flex style=\"color: white;text-align: center\"><i class=\"wi wi-owm-{{data.cell01}}\"></i></span>\n <span flex style=\"color: white;text-align: center\"><i class=\"wi wi-owm-{{data.cell02}}\"></i></span>\n <span flex style=\"color: white;text-align: center\"><i class=\"wi wi-owm-{{data.cell03}}\"></i></span>\n <span flex style=\"color: white;text-align: center\"><i class=\"wi wi-owm-{{data.cell04}}\"></i></span>\n <span flex style=\"color: white;text-align: center\"><i class=\"wi wi-owm-{{data.cell05}}\"></i></span>\n </div>\n <div layout=\"rowtext\" layout-align=\"space-around start\" ng-repeat=\"data in msg.payload.rowtext\" style=\"line-height: 150%\">\n <span flex style=\"color: white;text-align: center\">{{data.cell01}}</span>\n <span flex style=\"color: white;text-align: center\">{{data.cell02}}</span>\n <span flex style=\"color: white;text-align: center\">{{data.cell03}}</span>\n <span flex style=\"color: white;text-align: center\">{{data.cell04}}</span>\n <span flex style=\"color: white;text-align: center\">{{data.cell05}}</span>\n </div>\n </div>\n <div layout=\"rowtext\" layout-align=\"space-around start\" ng-repeat=\"data in msg.payload.rowwind\" style=\"line-height: 150%\">\n <span flex style=\"color: white;text-align: center\"><span class=\"material-icons\">{{data.cell21}}</span></span>\n <span flex style=\"color: white;text-align: center\"><span class=\"material-icons\">{{data.cell22}}</span></span>\n <span flex style=\"color: white;text-align: center\"><span class=\"material-icons\">{{data.cell23}}</span></span>\n <span flex style=\"color: white;text-align: center\"><span class=\"material-icons\">{{data.cell24}}</span></span>\n <span flex style=\"color: white;text-align: center\"><span class=\"material-icons\">{{data.cell25}}</span></span>\n </div>\n</div>","storeOutMessages":true,"fwdInMessages":false,"resendOnRefresh":false,"templateScope":"local","x":990,"y":360,"wires":[[]]},{"id":"7adde26c.514aec","type":"function","z":"5f633a28.607134","name":"Format forecast data","func":"var fcdata = {};\nvar units=flow.get('units');\nvar degreesToCardinal = function(deg){\nif (deg>22.50 && deg<=67.50){\nreturn \"north_east\";\n }else if (deg>67.51 && deg<112.50){\nreturn \"east\";\n }else if (deg>112.51 && deg<157.50){\nreturn \"south_east\";\n }else if (deg>157.51 && deg<202.50){\nreturn \"south\";\n }else if (deg>202.51 && deg<247.50){\nreturn \"south_west\";\n }else if (deg>247.51 && deg<292.50){\nreturn \"west\";\n }else if (deg>292.51 && deg<337.50){\nreturn \"north_west\";\n }else{\nreturn \"north\"; \n }\n}\nif (units===undefined)\n{\n units=\"imperial\";\n}\nfunction formatTemp(high, low){\n if (units == \"imperial\") {\n if (low){\n temp = parseFloat(high).toFixed() + '|' + parseFloat(low).toFixed()\n }\n else {\n temp = parseFloat(high).toFixed() + '°F'\n }\n }\n else { // metric\n// temp = parseFloat(temp).toFixed(1) + '°'\n if (low){\n temp = parseFloat(high).toFixed() + '°|' + parseFloat(low).toFixed()+'°'\n }\n else {\n temp = parseFloat(high).toFixed() + '°'\n }\n }\n return temp;\n}\nfunction dayName(unixTime){\n var d = new Date(unixTime * 1000);\n var weekday = new Array(7);\n weekday[0] = \"Søn\";\n weekday[1] = \"Man\";\n weekday[2] = \"Tirs\";\n weekday[3] = \"Ons\";\n weekday[4] = \"Tors\";\n weekday[5] = \"Fre\";\n weekday[6] = \"Lør\";\n\n return weekday[d.getDay()]\n}\nfunction timeConvert(UNIX_timestamp){\n var a = new Date(UNIX_timestamp * 1000);\n var hour = a.getHours();\n //var suffix = \" am\";\n //if (hour >= 12) {\n // hour = hour - 12;\n // suffix = \" pm\";\n // }\n //if (hour === 0) {\n // hour = 12;\n // }\n var min = a.getMinutes();\n if (min < 10) {min = \"0\" + min;}\n return hour + ':' + min; //+ suffix;\n return hour;\n}\n// prepare forecast data for CSS based ui widget\n\nfcdata.payload = {\n rowtext: {\n \tdata01: {\n cell01: timeConvert(msg.payload.hourly[1].dt),\n cell02: timeConvert(msg.payload.hourly[3].dt),\n cell03: timeConvert(msg.payload.hourly[5].dt),\n cell04: timeConvert(msg.payload.hourly[7].dt),\n cell05: timeConvert(msg.payload.hourly[9].dt),\n cell06: timeConvert(msg.payload.hourly[11].dt),\n cell07: dayName(msg.payload.daily[1].dt),\n cell08: dayName(msg.payload.daily[2].dt),\n cell09: dayName(msg.payload.daily[3].dt),\n cell10: dayName(msg.payload.daily[4].dt),\n cell11: dayName(msg.payload.daily[5].dt),\n \t},\n \tdata02: {\n cell01: formatTemp(msg.payload.hourly[1].temp),\n cell02: formatTemp(msg.payload.hourly[3].temp),\n cell03: formatTemp(msg.payload.hourly[5].temp),\n cell04: formatTemp(msg.payload.hourly[7].temp),\n cell05: formatTemp(msg.payload.hourly[9].temp),\n cell06: formatTemp(msg.payload.hourly[11].temp),\n cell07: formatTemp(msg.payload.daily[1].temp.max, msg.payload.daily[0].temp.min),\n cell08: formatTemp(msg.payload.daily[2].temp.max, msg.payload.daily[1].temp.min),\n cell09: formatTemp(msg.payload.daily[3].temp.max, msg.payload.daily[2].temp.min),\n cell10: formatTemp(msg.payload.daily[4].temp.max, msg.payload.daily[3].temp.min),\n cell11: formatTemp(msg.payload.daily[5].temp.max, msg.payload.daily[4].temp.min),\n \t},\n \tdata03: {\n cell01: msg.payload.hourly[1].humidity + '%',\n cell02: msg.payload.hourly[3].humidity + '%',\n cell03: msg.payload.hourly[5].humidity + '%',\n cell04: msg.payload.hourly[7].humidity + '%',\n cell05: msg.payload.hourly[9].humidity + '%',\n cell06: msg.payload.hourly[11].humidity + '%',\n \t},\n \tdata04: {\n cell01: msg.payload.hourly[1].wind_speed.toFixed(0) + ' m/s',\n cell02: msg.payload.hourly[3].wind_speed.toFixed(0) + ' m/s',\n cell03: msg.payload.hourly[5].wind_speed.toFixed(0) + ' m/s',\n cell04: msg.payload.hourly[7].wind_speed.toFixed(0) + ' m/s',\n cell05: msg.payload.hourly[9].wind_speed.toFixed(0) + ' m/s',\n cell06: msg.payload.hourly[11].wind_speed.toFixed(0) + ' m/s',\n \t}\n },\n rowicons: {\n \tdata01: {\n \t\tcell01: msg.payload.hourly[1].weather[0].icon,\n \t\tcell02: msg.payload.hourly[3].weather[0].icon,\n \t\tcell03: msg.payload.hourly[5].weather[0].icon,\n \t\tcell04: msg.payload.hourly[7].weather[0].icon,\n \t\tcell05: msg.payload.hourly[9].weather[0].icon,\n \t\tcell06: msg.payload.hourly[11].weather[0].icon,\n \t\tcell07: msg.payload.daily[1].weather[0].icon,\n \t\tcell08: msg.payload.daily[2].weather[0].icon,\n \t\tcell09: msg.payload.daily[3].weather[0].icon,\n \t\tcell10: msg.payload.daily[4].weather[0].icon,\n \t\tcell11: msg.payload.daily[5].weather[0].icon,\n \t}\n \t\n },\n rowwind: {\n \tdata05: {\n cell21: msg.payload.hourly[1].wind_cardinal = degreesToCardinal(msg.payload.hourly[1].wind_deg),\n cell22: msg.payload.hourly[3].wind_cardinal = degreesToCardinal(msg.payload.hourly[3].wind_deg),\n cell23: msg.payload.hourly[5].wind_cardinal = degreesToCardinal(msg.payload.hourly[5].wind_deg),\n cell24: msg.payload.hourly[7].wind_cardinal = degreesToCardinal(msg.payload.hourly[7].wind_deg),\n cell25: msg.payload.hourly[9].wind_cardinal = degreesToCardinal(msg.payload.hourly[9].wind_deg),\n cell26: msg.payload.hourly[11].wind_cardinal = degreesToCardinal(msg.payload.hourly[11].wind_deg),\n \t}\n }\n}\n\nreturn fcdata;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":740,"y":360,"wires":[["9dbf3c95.67c74","fd418185.620748"]]},{"id":"d8c5527f.7739","type":"ui_text","z":"5f633a28.607134","group":"70fb931.dfc146c","order":2,"width":3,"height":1,"name":"Temperature","label":"","format":"<font size=6>{{msg.payload.current.temp}}","layout":"col-center","x":990,"y":100,"wires":[]},{"id":"681b2b94.9f7a44","type":"http request","z":"5f633a28.607134","name":"Get OWM data","method":"GET","ret":"obj","paytoqs":true,"url":"https://api.openweathermap.org/data/2.5/onecall","tls":"","persist":false,"proxy":"","authType":"","x":480,"y":160,"wires":[["67075190.fc6f3","7adde26c.514aec","30342c8c.30450c"]]},{"id":"c72d96f0.204148","type":"inject","z":"5f633a28.607134","name":"Trigger","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"600","crontab":"","once":true,"onceDelay":0.1,"topic":"","payload":"true","payloadType":"bool","x":120,"y":100,"wires":[["79276db2.a2ce14"]]},{"id":"67075190.fc6f3","type":"function","z":"5f633a28.607134","name":"Format current data","func":"var icon = {};\n\nvar units=flow.get('units');\nif (units===undefined)\n{\n units=\"imperial\";\n}\n\nfunction timeConvert(UNIX_timestamp){\n var a = new Date(UNIX_timestamp * 1000);\n var hour = a.getHours();\n //var suffix = \" am\";\n //if (hour >= 12) {\n // hour = hour - 12;\n // suffix = \" pm\";\n // }\n //if (hour === 0) {\n // hour = 12;\n // }\n var min = a.getMinutes();\n if (min < 10) {min = \"0\" + min;}\n return hour + ':' + min; //+ suffix;\n \n}\n\nvar degreesToCardinal = function(deg){\nif (deg>11.25 && deg<=33.75){\nreturn \"NNE\";\n }else if (deg>33.75 && deg<56.25){\nreturn \"NE\";\n }else if (deg>56.25 && deg<78.75){\nreturn \"ENE\";\n }else if (deg>78.75 && deg<101.25){\nreturn \"E\";\n }else if (deg>101.25 && deg<123.75){\nreturn \"ESE\";\n }else if (deg>123.75 && deg<146.25){\nreturn \"SE\";\n }else if (deg>146.25 && deg<168.75){\nreturn \"SSE\";\n }else if (deg>168.75 && deg<191.25){\nreturn \"S\";\n }else if (deg>191.25 && deg<213.75){\nreturn \"SSW\";\n }else if (deg>213.75 && deg<236.25){\nreturn \"SW\";\n }else if (deg>236.25 && deg<258.75){\nreturn \"WSW\";\n }else if (deg>258.75 && deg<281.25){\nreturn \"W\";\n }else if (deg>281.25 && deg<303.75){\nreturn \"WNW\";\n }else if (deg>303.75 && deg<326.25){\nreturn \"NW\";\n }else if (deg>326.25 && deg<348.75){\nreturn \"NNW\";\n }else{\nreturn \"N\"; \n }\n}\n\nif (units == \"imperial\")\n{\n msg.payload.current.temp = msg.payload.current.temp.toFixed() + ' °F';\n msg.payload.current.wind_speed = msg.payload.current.wind_speed.toFixed() + ' mph';\n}\nelse // metric units\n{\n msg.payload.current.temp = msg.payload.current.temp.toFixed(1) + ' °C';\n msg.payload.current.wind_speed = msg.payload.current.wind_speed.toFixed(1) + ' m/s';\n}\n\nmsg.payload.current.wind_cardinal = degreesToCardinal(msg.payload.current.wind_deg);\nmsg.payload.current.sunrise = timeConvert(msg.payload.current.sunrise);\nmsg.payload.current.sunset = timeConvert(msg.payload.current.sunset);\nmsg.payload.current.humidity = msg.payload.current.humidity + ' %';\n\n\nvar iconString = 'wi-owm-' + msg.payload.current.weather[0].icon + ' wi-4x';\nicon = {\n ui_control: {\n icon: iconString\n }\n}; \n\nreturn [msg, icon];","outputs":2,"noerr":0,"initialize":"","finalize":"","x":720,"y":160,"wires":[["d8c5527f.7739","ec4eb2d0.974c","9c052db7.3c434","40f44662.3ecde8","5b97953.01fdd6c","8d7cf800.2eb93"],["180a101a.9cd43"]]},{"id":"79276db2.a2ce14","type":"change","z":"5f633a28.607134","name":"Set location, appid, units","rules":[{"t":"delete","p":"payload","pt":"msg"},{"t":"set","p":"payload.lat","pt":"msg","to":"55.5","tot":"str"},{"t":"set","p":"payload.lon","pt":"msg","to":"12.1619","tot":"str"},{"t":"set","p":"payload.appid","pt":"msg","to":"","tot":"str"},{"t":"set","p":"payload.units","pt":"msg","to":"metric","tot":"str"},{"t":"set","p":"units","pt":"flow","to":"payload.units","tot":"msg"},{"t":"set","p":"payload.lang","pt":"msg","to":"da","tot":"str"},{"t":"set","p":"lang","pt":"flow","to":"payload.lang","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":350,"y":100,"wires":[["681b2b94.9f7a44"]]},{"id":"16181411.5a365c","type":"ui_ui_control","z":"5f633a28.607134","name":"Update tab","events":"all","x":110,"y":200,"wires":[["3f3d5ab9.82b3a6"]]},{"id":"c5efdf55.db32f","type":"link out","z":"5f633a28.607134","name":"Refresh","links":["a6b24cea.e52a7"],"x":1105,"y":300,"wires":[]},{"id":"a6b24cea.e52a7","type":"link in","z":"5f633a28.607134","name":"","links":["c5efdf55.db32f"],"x":155,"y":140,"wires":[["79276db2.a2ce14"]]},{"id":"3f3d5ab9.82b3a6","type":"switch","z":"5f633a28.607134","name":"tab focus","property":"tab","propertyType":"msg","rules":[{"t":"eq","v":"1","vt":"num"}],"checkall":"true","repair":false,"outputs":1,"x":280,"y":200,"wires":[["79276db2.a2ce14"]]},{"id":"fd418185.620748","type":"ui_template","z":"5f633a28.607134","group":"70fb931.dfc146c","name":"Forecast 5 days","order":9,"width":6,"height":3,"format":"<div style=\"height: 100%; justify-content: center; align-items: center;\">\n <div layout=\"rowicons\" layout-align=\"space-around start\" ng-repeat=\"data in msg.payload.rowicons\" style=\"font-size:150%;padding-top: 5px;padding-bottom: 5px\">\n \n <span flex style=\"color: #097479;text-align: center\"><i class=\"wi wi-owm-{{data.cell07}}\"></i></span>\n <span flex style=\"color: #097479;text-align: center\"><i class=\"wi wi-owm-{{data.cell08}}\"></i></span>\n <span flex style=\"color: #097479;text-align: center\"><i class=\"wi wi-owm-{{data.cell09}}\"></i></span>\n <span flex style=\"color: #097479;text-align: center\"><i class=\"wi wi-owm-{{data.cell10}}\"></i></span>\n <span flex style=\"color: #097479;text-align: center\"><i class=\"wi wi-owm-{{data.cell11}}\"></i></span>\n </div>\n <div layout=\"rowtext\" layout-align=\"space-around start\" ng-repeat=\"data in msg.payload.rowtext\" style=\"line-height: 150%\">\n \n <span flex style=\"color: #097479;text-align: center\">{{data.cell07}}</span>\n <span flex style=\"color: #097479;text-align: center\">{{data.cell08}}</span>\n <span flex style=\"color: #097479;text-align: center\">{{data.cell09}}</span>\n <span flex style=\"color: #097479;text-align: center\">{{data.cell10}}</span>\n <span flex style=\"color: #097479;text-align: center\">{{data.cell11}}</span>\n </div>\n</div>","storeOutMessages":true,"fwdInMessages":true,"resendOnRefresh":false,"templateScope":"local","x":980,"y":400,"wires":[[]]},{"id":"30342c8c.30450c","type":"debug","z":"5f633a28.607134","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":770,"y":560,"wires":[]},{"id":"8d7cf800.2eb93","type":"ui_text","z":"5f633a28.607134","group":"70fb931.dfc146c","order":4,"width":2,"height":1,"name":"Humidity","label":"","format":"{{msg.payload.current.humidity}}","layout":"col-center","x":980,"y":260,"wires":[]},{"id":"70fb931.dfc146c","type":"ui_group","name":"MainGroup","tab":"4bb34f67.69a87","order":1,"disp":false,"width":6,"collapse":false},{"id":"4bb34f67.69a87","type":"ui_tab","name":"Weather","icon":"wi-wu-partlycloudy","order":2,"disabled":false,"hidden":false}]

```

the flow is a modification of this made by [KanyonKris](https://flows.nodered.org/user/KanyonKris):

> **[OpenWeatherMap Weather Dashboard with Icons - Landscape (flow) - Node-RED](https://flows.nodered.org/flow/d7af9f5d6f6923324466c58ea4f0655f/in/EK1nymdLJ3n0)**

---

<div class="post-metadata">

**Author:** ![Paul-Reed](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/paul-reed/32/66906_2.png) [@Paul-Reed](https://discourse.nodered.org/u/Paul-Reed)\
**Post date:** [6 December 2020 20:28 UTC](https://discourse.nodered.org/t/return-html-fa-icon-code-in-a-function/37074/11 "2020-12-06T20:28:47Z")

</div>

> [@dceejay](#):
>
> Sounds like a job for @Paul-Reed 🙂

OP was using Font Awsome icons, and of course we have no direct control over FA's css files to add rotation values other than the default 90/180/270 degrees, as it is part of your dashboard build.

But there is no reason why we cant use `font-awsome` icons, and `weather-icons-lite` css like this;  
`<i class="fa fa-location-arrow wi-rotate-90 wi-4x"></i>`  
So instead of duplicating the icon in weather-icons-lite, I could just [add a few additional lines of css](https://github.com/Paul-Reed/weather-icons-lite/commit/74ef8d0b0dbe36395107ac45ef1b27a5072653b3) to include **45** /90/ **135** /180/ **225** /270/ **315** degrees, and then that would be also available to the full set of font-awsome icons, allowing any icon to be rotated in 45 deg increments.

Thoughts?

---

<div class="post-metadata">

**Author:** ![hotNipi](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/hotnipi/32/383_2.png) [@hotNipi](https://discourse.nodered.org/u/hotNipi)\
**Post date:** [6 December 2020 20:58 UTC](https://discourse.nodered.org/t/return-html-fa-icon-code-in-a-function/37074/12 "2020-12-06T20:58:21Z")

</div>

Even if it looks a bit hacky, if it works it doesn't hurt.

---

<div class="post-metadata">

**Author:** ![dceejay](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/dceejay/32/38_2.png) [@dceejay](https://discourse.nodered.org/u/dceejay)\
**Post date:** [6 December 2020 21:14 UTC](https://discourse.nodered.org/t/return-html-fa-icon-code-in-a-function/37074/13 "2020-12-06T21:14:36Z")

</div>

Make it so ! (Or feel free to also add your wind arrow to the lite set). And/or should there also be aliases. wi-rotate-NE. Etc to make it easy to create from ordinals.

---

<div class="post-metadata">

**Author:** ![thomasvjohansen](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/thomasvjohansen/32/32779_2.png) [@thomasvjohansen](https://discourse.nodered.org/u/thomasvjohansen)\
**Post date:** [6 December 2020 21:41 UTC](https://discourse.nodered.org/t/return-html-fa-icon-code-in-a-function/37074/14 "2020-12-06T21:41:16Z")

</div>

If a few lines can add that feature, then I think its worth it.  
properly usable in other scenarios.

---

<div class="post-metadata">

**Author:** ![Paul-Reed](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/paul-reed/32/66906_2.png) [@Paul-Reed](https://discourse.nodered.org/u/Paul-Reed)\
**Post date:** [6 December 2020 22:16 UTC](https://discourse.nodered.org/t/return-html-fa-icon-code-in-a-function/37074/15 "2020-12-06T22:16:41Z")

</div>

> [@dceejay](#):
>
> Make it so !

Done.  
v1.4.0 is now on npm with the 45 deg changes.

> [@dceejay](#):
>
> And/or should there also be aliases. wi-rotate-NE. Etc to make it easy to create from ordinals.

Aah, sorry, I didn't know that you had edited your post until now..  
I can add that, but for example, the FA icon mentioned above is positioned by default at 45deg.

![arrow](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/e/3/e3722e4da55868426f5e183dad3a76b14a80f081.jpeg)

so adding `wi-rotate-S` would result in;

![arrow2](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/c/3/c30a9be738f6e5b9a8306e3fb1059213f85731df.jpeg)

---

<div class="post-metadata">

**Author:** ![dceejay](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/dceejay/32/38_2.png) [@dceejay](https://discourse.nodered.org/u/dceejay)\
**Post date:** [6 December 2020 22:51 UTC](https://discourse.nodered.org/t/return-html-fa-icon-code-in-a-function/37074/16 "2020-12-06T22:51:36Z")

</div>

errr - well yes - but if you pick fa-arrow-down then it works ok... and/or if you did add your own arrow it could be made to work without any fa interaction 🙂

---

<div class="post-metadata">

**Author:** ![Paul-Reed](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/paul-reed/32/66906_2.png) [@Paul-Reed](https://discourse.nodered.org/u/Paul-Reed)\
**Post date:** [6 December 2020 22:55 UTC](https://discourse.nodered.org/t/return-html-fa-icon-code-in-a-function/37074/17 "2020-12-06T22:55:00Z")

</div>

> [@dceejay](#):
>
> but if you pick fa-arrow-down then it works ok.

Yep, I'll add them in as well, and let you know when done 👍

---

<div class="post-metadata">

**Author:** ![Paul-Reed](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/paul-reed/32/66906_2.png) [@Paul-Reed](https://discourse.nodered.org/u/Paul-Reed)\
**Post date:** [6 December 2020 23:04 UTC](https://discourse.nodered.org/t/return-html-fa-icon-code-in-a-function/37074/18 "2020-12-06T23:04:25Z")

</div>

> [@dceejay](#):
>
> but if you pick fa-arrow-down then it works ok

Just to be clear...

Should we assume that the icon's default orientation is 0 deg, and therefore applying `wi-rotate-NE` should rotate the icon 45 deg?  
Just wondered when you mentioned `fa-arrow-down` ?

---

<div class="post-metadata">

**Author:** ![dceejay](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/dceejay/32/38_2.png) [@dceejay](https://discourse.nodered.org/u/dceejay)\
**Post date:** [6 December 2020 23:08 UTC](https://discourse.nodered.org/t/return-html-fa-icon-code-in-a-function/37074/19 "2020-12-06T23:08:52Z")

</div>

the arrow points the way the wind is coming from... so a north wind is a downwards arrow = 0 degrees.... so yes NE wind is rotate clockwise 45 and the tip of the arrow points to SW...

---

<div class="post-metadata">

**Author:** ![dceejay](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/dceejay/32/38_2.png) [@dceejay](https://discourse.nodered.org/u/dceejay)\
**Post date:** [7 December 2020 23:21 UTC](https://discourse.nodered.org/t/return-html-fa-icon-code-in-a-function/37074/20 "2020-12-07T23:21:52Z")

</div>

So thanks to Paul we will have wi-rotate-0, 45, 90 etc and wi-rotate-N, NE, .. which all work with fa-arrow-down as they assume 0 degrees is a north wind...

I also forgot we can of course just apply css styles dynamically as well - eg

```auto
[{"id":"c6e0b0d4.efd7b","type":"ui_template","z":"ab9333b5.f44f6","group":"61ae4ef4.28011","name":"","order":10,"width":"1","height":"1","format":"<div ng-bind-html=\"msg.payload | trusted\"></div>","storeOutMessages":true,"fwdInMessages":true,"resendOnRefresh":true,"templateScope":"local","x":580,"y":520,"wires":[[]]},{"id":"97f4ec25.ab953","type":"template","z":"ab9333b5.f44f6","name":"","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"<i style=\"transform:rotate({{payload}}deg);\" class=\"fa fa-fw fa-2x fa-arrow-down\"></i>","output":"str","x":420,"y":520,"wires":[["c6e0b0d4.efd7b"]]},{"id":"3bd7a6.e387c85a","type":"ui_slider","z":"ab9333b5.f44f6","name":"","label":"slider","tooltip":"","group":"61ae4ef4.28011","order":10,"width":"5","height":"1","passthru":true,"outs":"all","topic":"","min":0,"max":"359","step":1,"x":270,"y":520,"wires":[["97f4ec25.ab953"]]},{"id":"61ae4ef4.28011","type":"ui_group","name":"Group 1","tab":"5c9690fd.741cc","order":1,"disp":true,"width":"6","collapse":false},{"id":"5c9690fd.741cc","type":"ui_tab","name":"Home","icon":"dashboard","order":1,"disabled":false,"hidden":false}]

```

![mJlsW5dSgI](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/7/b/7b598aa83ef7d197acb917cfb27af0b9caecf293.gif)

[Next page](https://discourse.nodered.org/t/return-html-fa-icon-code-in-a-function/37074.md?page=2)
