Gå til innhold
  • Bli medlem
Støtt hjemmeautomasjon.no!

SveinHa

Medlemmer
  • Innlegg

    1 507
  • Ble med

  • Besøkte siden sist

  • Dager vunnet

    72

Alt skrevet av SveinHa

  1. Inspirert av denne tråden hoppet jeg på å få litt drivstoffpriser inn i Node Red. Har på en måte ikke bruk for det siden jeg har appen på telefonen men det var nå litt gøy å lage. Det ble 2 varianter, den første er nok den som vil bli brukt for det meste: Redigert: Stasjonsnavnet får farge etter alder på prisoppdatering og prisen markeres ur fra over/under gjenomsnittspris. Variant 2 er langt mer fleksibel: Første tabellen inneholder > 2000 bensinstasjoner så der har jeg laget et søkefelt (case sensitive) for å begrense utvalget. Søker på alle felt. Klikk på en stasjon i venstre tabell flytter den over til favoritt tabellen i midten. Klikk på en stasjon i favoritt tabellen fjerner den. Alle stasjonene som befinner seg i favoritter vises i høyre tabell med alle drivstofftyper de har, pris og alder på prisdata. Hele greiene ser slik ut i Node Red: [{"id":"9103052baf82e5d0","type":"inject","z":"2447f70b5f1095ba","name":"Hvert 10 min","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"600","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":360,"y":130,"wires":[["d4dc462af536e73f"]]},{"id":"18ec6499f1fefde8","type":"function","z":"2447f70b5f1095ba","name":"Esso Avaldsnes","func":"var station = 'Esso Avaldsnes';\nvar msg2 = {}\nmsg.payload = msg.payload.filter((/** @type {{ discountInfo: string; }} */ e) => e.discountInfo == station);\nmsg.payload[0].stationDetails = msg.payload[0].stationDetails.filter(e => e.type == 'D');\nvar price = msg.payload[0].stationDetails[0].price;\nvar now = Number(new Date());\nvar age = (now - msg.payload[0].stationDetails[0].lastUpdated) / 3600 / 1000; //age in hours\nflow.set(\"EssoAval\", price);\n\nvar s1 = flow.get(\"EssoAval\") || 0\nvar s2 = flow.get(\"RevhStor\") || 0\nvar s3 = flow.get(\"ShelAval\") || 0\nvar s4 = flow.get(\"TankFlyp\") || 0\nvar s5 = flow.get(\"UnoXAval\") || 0\nvar s6 = flow.get(\"YX7ENorh\") || 0\nvar snitt = (s1 + s2 + s3 + s4 + s5 + s6) / 6;\nif (price < snitt) msg2.color = \"LIME\"; else msg2.color = \"RED\";\n\nmsg2.topic = station;\nmsg2.age = age.toFixed(1);\nif (age < 1) {\n msg2.stationcolor = \"LIME\";\n}\nelse if (age < 6) {\n msg2.stationcolor = \"YELLOW\";\n}\nelse if (age <= 12) {\n msg2.stationcolor = \"ORANGE\";\n}\nelse if (age > 12) {\n msg2.stationcolor = \"RED\";\n}\nmsg2.topic = station;\nmsg2.payload = price;\nreturn [msg, msg2];","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":770,"y":130,"wires":[["0e5b02362818c9c1"],["835b0df2bd3edcbb","7014c2032a87fc3b"]]},{"id":"e7e0a907d77667f2","type":"function","z":"2447f70b5f1095ba","name":"Uno-X Avaldsnes","func":"var station = 'Uno-X Avaldsnes';\nvar msg2 = {}\nmsg.payload = msg.payload.filter((/** @type {{ discountInfo: string; }} */ e) => e.discountInfo == station);\nmsg.payload[0].stationDetails = msg.payload[0].stationDetails.filter(e => e.type == 'D');\nvar price = msg.payload[0].stationDetails[0].price;\nvar now = Number(new Date());\nvar age = (now - msg.payload[0].stationDetails[0].lastUpdated) / 3600 / 1000; //age in hours\nflow.set(\"UnoXAval\", price);\n\nvar s1 = flow.get(\"EssoAval\") || 0\nvar s2 = flow.get(\"RevhStor\") || 0\nvar s3 = flow.get(\"ShelAval\") || 0\nvar s4 = flow.get(\"TankFlyp\") || 0\nvar s5 = flow.get(\"UnoXAval\") || 0\nvar s6 = flow.get(\"YX7ENorh\") || 0\nvar snitt = (s1 + s2 + s3 + s4 + s5 + s6) / 6;\nif (price < snitt) msg2.color = \"LIME\"; else msg2.color = \"RED\";\n\nmsg2.topic = station;\nmsg2.age = age.toFixed(1);\nif (age < 1) {\n msg2.stationcolor = \"LIME\";\n}\nelse if (age < 6) {\n msg2.stationcolor = \"YELLOW\";\n}\nelse if (age <= 12) {\n msg2.stationcolor = \"ORANGE\";\n}\nelse if (age > 12) {\n msg2.stationcolor = \"RED\";\n}\nmsg2.topic = station;\nmsg2.payload = price;\nreturn [msg, msg2];","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":780,"y":160,"wires":[["0e5b02362818c9c1"],["835b0df2bd3edcbb","671050bdedc0c3cb"]]},{"id":"283d51c6efeddbb7","type":"function","z":"2447f70b5f1095ba","name":"YX 7-Eleven Norheim","func":"var station = 'YX 7-Eleven Norheim';\nvar msg2 = {}\nmsg.payload = msg.payload.filter((/** @type {{ discountInfo: string; }} */ e) => e.discountInfo == station);\nmsg.payload[0].stationDetails = msg.payload[0].stationDetails.filter(e => e.type == 'D');\nvar price = msg.payload[0].stationDetails[0].price;\nvar now = Number(new Date());\nvar age = (now - msg.payload[0].stationDetails[0].lastUpdated) / 3600 / 1000; //age in hours\nflow.set(\"YX7ENorh\", price);\n\nvar s1 = flow.get(\"EssoAval\") || 0\nvar s2 = flow.get(\"RevhStor\") || 0\nvar s3 = flow.get(\"ShelAval\") || 0\nvar s4 = flow.get(\"TankFlyp\") || 0\nvar s5 = flow.get(\"UnoXAval\") || 0\nvar s6 = flow.get(\"YX7ENorh\") || 0\nvar snitt = (s1 + s2 + s3 + s4 + s5 + s6) / 6;\nif (price < snitt) msg2.color = \"LIME\"; else msg2.color = \"RED\";\n\nmsg2.topic = station;\nmsg2.age = age.toFixed(1);\nif (age < 1) {\n msg2.stationcolor = \"LIME\";\n}\nelse if (age < 6) {\n msg2.stationcolor = \"YELLOW\";\n}\nelse if (age <= 12) {\n msg2.stationcolor = \"ORANGE\";\n}\nelse if (age > 12) {\n msg2.stationcolor = \"RED\";\n}\nmsg2.topic = station;\nmsg2.payload = price;\nreturn [msg, msg2];","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":790,"y":190,"wires":[["0e5b02362818c9c1"],["835b0df2bd3edcbb","8e502b90702d3857"]]},{"id":"85dd9827b7d9a90c","type":"function","z":"2447f70b5f1095ba","name":"Tanken Helganes - Flyplassvegen","func":"var station = 'Tanken Helganes - Flyplassvegen';\nvar msg2 = {}\nmsg.payload = msg.payload.filter((/** @type {{ discountInfo: string; }} */ e) => e.discountInfo == station);\nmsg.payload[0].stationDetails = msg.payload[0].stationDetails.filter(e => e.type == 'D');\nvar price = msg.payload[0].stationDetails[0].price;\nvar now = Number(new Date());\nvar age = (now - msg.payload[0].stationDetails[0].lastUpdated) / 3600 / 1000; //age in hours\nflow.set(\"TankFlyp\", price);\n\nvar s1 = flow.get(\"EssoAval\") || 0\nvar s2 = flow.get(\"RevhStor\") || 0\nvar s3 = flow.get(\"ShelAval\") || 0\nvar s4 = flow.get(\"TankFlyp\") || 0\nvar s5 = flow.get(\"UnoXAval\") || 0\nvar s6 = flow.get(\"YX7ENorh\") || 0\nvar snitt = (s1 + s2 + s3 + s4 + s5 + s6) / 6;\nif (price < snitt) msg2.color = \"LIME\"; else msg2.color = \"RED\";\n\nmsg2.topic = station;\nmsg2.age = age.toFixed(1);\nif (age < 1) {\n msg2.stationcolor = \"LIME\";\n}\nelse if (age < 6) {\n msg2.stationcolor = \"YELLOW\";\n}\nelse if (age <= 12) {\n msg2.stationcolor = \"ORANGE\";\n}\nelse if (age > 12) {\n msg2.stationcolor = \"RED\";\n}\nmsg2.topic = station;\nmsg2.payload = price;\nreturn [msg, msg2];","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":830,"y":220,"wires":[["0e5b02362818c9c1"],["835b0df2bd3edcbb","b1eaf76d80b124b2"]]},{"id":"e577f959c4c3e385","type":"function","z":"2447f70b5f1095ba","name":"Shell Avaldsnes","func":"var station = 'Shell Avaldsnes';\nvar msg2 = {}\nmsg.payload = msg.payload.filter((/** @type {{ discountInfo: string; }} */ e) => e.discountInfo == station);\nmsg.payload[0].stationDetails = msg.payload[0].stationDetails.filter(e => e.type == 'D');\nvar price = msg.payload[0].stationDetails[0].price;\nvar now = Number(new Date());\nvar age = (now - msg.payload[0].stationDetails[0].lastUpdated) / 3600 / 1000; //age in hours\nflow.set(\"ShelAval\", price);\n\nvar s1 = flow.get(\"EssoAval\") || 0\nvar s2 = flow.get(\"RevhStor\") || 0\nvar s3 = flow.get(\"ShelAval\") || 0\nvar s4 = flow.get(\"TankFlyp\") || 0\nvar s5 = flow.get(\"UnoXAval\") || 0\nvar s6 = flow.get(\"YX7ENorh\") || 0\nvar snitt = (s1 + s2 + s3 + s4 + s5 + s6) / 6;\nif (price < snitt) msg2.color = \"LIME\"; else msg2.color = \"RED\";\n\nmsg2.topic = station;\nmsg2.age = age.toFixed(1);\nif (age < 1) {\n msg2.stationcolor = \"LIME\";\n}\nelse if (age < 6) {\n msg2.stationcolor = \"YELLOW\";\n}\nelse if (age <= 12) {\n msg2.stationcolor = \"ORANGE\";\n}\nelse if (age > 12) {\n msg2.stationcolor = \"RED\";\n}\nmsg2.topic = station;\nmsg2.payload = price;\nreturn [msg, msg2];","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":770,"y":250,"wires":[["0e5b02362818c9c1"],["835b0df2bd3edcbb","13527989f83e29d2"]]},{"id":"0e5b02362818c9c1","type":"debug","z":"2447f70b5f1095ba","name":"debug 88","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1000,"y":350,"wires":[]},{"id":"835b0df2bd3edcbb","type":"ui_chart","z":"2447f70b5f1095ba","name":"","group":"c5147f5beba7be52","order":1,"width":"23","height":"8","label":"Dieselpris (7d)","chartType":"line","legend":"true","xformat":"DD/MM HH","interpolate":"step","nodata":"","dot":false,"ymin":"","ymax":"","removeOlder":"7","removeOlderPoints":"","removeOlderUnit":"86400","cutout":0,"useOneColor":false,"useUTC":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"outputs":1,"useDifferentColor":false,"className":"","x":1150,"y":130,"wires":[["dc20c0baebcded39"]]},{"id":"dc20c0baebcded39","type":"persist in","z":"2447f70b5f1095ba","name":"Dieselpriser","storageNode":"8a6654beead70801","x":1250,"y":80,"wires":[]},{"id":"52943a1fc077d28f","type":"persist out","z":"2447f70b5f1095ba","name":"Dieselpriser","storageNode":"8a6654beead70801","x":1070,"y":80,"wires":[["835b0df2bd3edcbb"]]},{"id":"7014c2032a87fc3b","type":"ui_text","z":"2447f70b5f1095ba","group":"c5147f5beba7be52","order":2,"width":"8","height":"1","name":"","label":"<font color=\"{{msg.stationcolor}}\">{{msg.topic}} ({{msg.age}}h)","format":"<font color=\"{{msg.color}}\">Kr.{{msg.payload}}","layout":"row-spread","className":"","x":1120,"y":160,"wires":[]},{"id":"671050bdedc0c3cb","type":"ui_text","z":"2447f70b5f1095ba","group":"c5147f5beba7be52","order":3,"width":"8","height":"1","name":"","label":"<font color=\"{{msg.stationcolor}}\">{{msg.topic}} ({{msg.age}}h)","format":"<font color=\"{{msg.color}}\">Kr.{{msg.payload}}","layout":"row-spread","className":"","x":1120,"y":190,"wires":[]},{"id":"8e502b90702d3857","type":"ui_text","z":"2447f70b5f1095ba","group":"c5147f5beba7be52","order":4,"width":"8","height":"1","name":"","label":"<font color=\"{{msg.stationcolor}}\">{{msg.topic}} ({{msg.age}}h)","format":"<font color=\"{{msg.color}}\">Kr.{{msg.payload}}","layout":"row-spread","className":"","x":1120,"y":220,"wires":[]},{"id":"b1eaf76d80b124b2","type":"ui_text","z":"2447f70b5f1095ba","group":"c5147f5beba7be52","order":5,"width":"8","height":"1","name":"","label":"<font color=\"{{msg.stationcolor}}\">{{msg.topic}} ({{msg.age}}h)","format":"<font color=\"{{msg.color}}\">Kr.{{msg.payload}}","layout":"row-spread","className":"","x":1120,"y":250,"wires":[]},{"id":"13527989f83e29d2","type":"ui_text","z":"2447f70b5f1095ba","group":"c5147f5beba7be52","order":6,"width":"8","height":"1","name":"","label":"<font color=\"{{msg.stationcolor}}\">{{msg.topic}} ({{msg.age}}h)","format":"<font color=\"{{msg.color}}\">Kr.{{msg.payload}}","layout":"row-spread","className":"","x":1120,"y":280,"wires":[]},{"id":"80fadd7556b173c2","type":"ui_text","z":"2447f70b5f1095ba","group":"c5147f5beba7be52","order":8,"width":"8","height":"1","name":"Legend","label":"<font color=\"LIME\"><1h <font color=\"YELLOW\"><6h <font color=\"ORANGE\"><=12h <font color=\"RED\">>12h<font color=#43464B> . . . . . . . . . . . . <font color=\"LIME\"> < <font color=\"WHITE\">avg<font color=\"RED\"><","format":"","layout":"row-spread","className":"","x":1130,"y":380,"wires":[]},{"id":"c622a1c1b5d187fe","type":"function","z":"2447f70b5f1095ba","name":"List all stations","func":"flow.set(\"Stations\",msg.payload);\nvar arr = [];\nvar msg2 = {}\nfor (var i = 0;i < msg.payload.length;i++){\n let obj = {}\n obj.id = msg.payload[i].id;\n obj.name = msg.payload[i].name || \"-\"\n obj.brand = msg.payload[i].brand || \"-\"\n obj.discountInfo = msg.payload[i].discountInfo || \"-\"\n arr.push(obj);\n}\nmsg2.payload = arr;\nreturn msg2; ","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":330,"y":440,"wires":[["6ffebf4f1340a92e","f193882be2dc7762"]]},{"id":"32b13b757f4465ec","type":"function","z":"2447f70b5f1095ba","name":"Revheim Storbilvask","func":"var station = 'Revheim Storbilvask';\nvar msg2 = {}\nmsg.payload = msg.payload.filter((/** @type {{ discountInfo: string; }} */ e) => e.discountInfo == station);\nmsg.payload[0].stationDetails = msg.payload[0].stationDetails.filter(e => e.type == 'D');\nvar price = msg.payload[0].stationDetails[0].price;\nvar now = Number(new Date());\nvar age = (now - msg.payload[0].stationDetails[0].lastUpdated) / 3600 / 1000; //age in hours\nflow.set(\"RevhStor\",price);\n\nvar s1 = flow.get(\"EssoAval\") || 0\nvar s2 = flow.get(\"RevhStor\") || 0\nvar s3 = flow.get(\"ShelAval\") || 0\nvar s4 = flow.get(\"TankFlyp\") || 0\nvar s5 = flow.get(\"UnoXAval\") || 0\nvar s6 = flow.get(\"YX7ENorh\") || 0\nvar snitt = (s1 + s2 + s3 + s4 + s5 + s6) / 6;\nif (price < snitt) msg2.color = \"LIME\"; else msg2.color = \"RED\";\n\nmsg2.topic = station;\nmsg2.age = age.toFixed(1);\nif (age < 1) {\n msg2.stationcolor = \"LIME\";\n}\nelse if (age < 6) {\n msg2.stationcolor = \"YELLOW\";\n}\nelse if (age <= 12) {\n msg2.stationcolor = \"ORANGE\";\n}\nelse if (age > 12) {\n msg2.stationcolor = \"RED\";\n}\nmsg2.topic = station;\nmsg2.payload = price;\nreturn [msg, msg2];","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":790,"y":280,"wires":[["0e5b02362818c9c1"],["a789bc33845b6aae","835b0df2bd3edcbb"]]},{"id":"a789bc33845b6aae","type":"ui_text","z":"2447f70b5f1095ba","group":"c5147f5beba7be52","order":7,"width":"8","height":"1","name":"","label":"<font color=\"{{msg.stationcolor}}\">{{msg.topic}} ({{msg.age}}h)","format":"<font color=\"{{msg.color}}\">Kr.{{msg.payload}}","layout":"row-spread","className":"","x":1120,"y":310,"wires":[]},{"id":"28fe85a134fe0971","type":"debug","z":"2447f70b5f1095ba","name":"debug 89","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":750,"y":340,"wires":[]},{"id":"6ffebf4f1340a92e","type":"ui_table","z":"2447f70b5f1095ba","group":"0d788a3660f620b1","name":"All stations","order":4,"width":"10","height":"15","columns":[{"field":"name","title":"","width":"30%","align":"left","formatter":"plaintext","formatterParams":{"target":"_blank"}},{"field":"brand","title":"","width":"27%","align":"left","formatter":"plaintext","formatterParams":{"target":"_blank"}},{"field":"discountInfo","title":"","width":"40%","align":"left","formatter":"plaintext","formatterParams":{"target":"_blank"}}],"outputs":1,"cts":true,"x":760,"y":440,"wires":[["fc1b2554d6e80f6b"]]},{"id":"fc1b2554d6e80f6b","type":"function","z":"2447f70b5f1095ba","name":"add to favs","func":"var favs = flow.get(\"Favs\") || []\nvar pl = msg.payload;\nvar arr = [];\nvar exists = false;\narr = favs;\n\nfor (var i = 0;i < favs.length;i++){\n if (favs[i].id == pl.id) exists = true;\n}\nif (exists == false) arr.push(pl);\n\nflow.set(\"Favs\", arr);\nreturn msg; ","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":320,"y":480,"wires":[["6bfcbbe7c43dcc84"]]},{"id":"5fd3c4e366a636d6","type":"ui_table","z":"2447f70b5f1095ba","group":"0d788a3660f620b1","name":"Selected stations","order":5,"width":"10","height":"16","columns":[{"field":"name","title":"","width":"30%","align":"left","formatter":"plaintext","formatterParams":{"target":"_blank"}},{"field":"brand","title":"","width":"30%","align":"left","formatter":"plaintext","formatterParams":{"target":"_blank"}},{"field":"discountInfo","title":"","width":"40%","align":"left","formatter":"plaintext","formatterParams":{"target":"_blank"}}],"outputs":1,"cts":true,"x":780,"y":480,"wires":[["03dc6f5b94c49e02"]]},{"id":"6bfcbbe7c43dcc84","type":"function","z":"2447f70b5f1095ba","name":"List fav stations","func":"var favs = flow.get(\"Favs\") || []\nvar arr = []\nvar msg2 = {}\nfor (var i = 0;i < favs.length;i++){\n let obj = {}\n obj.id = favs[i].id;\n obj.name = favs[i].name;\n obj.brand = favs[i].brand;\n obj.discountInfo = favs[i].discountInfo;\n arr.push(obj);\n}\nmsg2.payload = arr;\nreturn msg2; ","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":550,"y":480,"wires":[["5fd3c4e366a636d6","f193882be2dc7762"]]},{"id":"03dc6f5b94c49e02","type":"function","z":"2447f70b5f1095ba","name":"Remove station from fav","func":"var i,j = 0;\nvar favs = flow.get(\"Favs\") || []\nvar favs2 = []\nvar remove = msg.payload;\nvar arr = []\nvar msg2 = {}\nfor (i = 0;i < favs.length;i++){\n if (favs[i].id != remove.id){\n favs2[j] = favs[i];\n j++;\n }\n}\nflow.set(\"Favs\", favs2)\nreturn msg; ","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":650,"y":550,"wires":[["6bfcbbe7c43dcc84"]]},{"id":"4d95ecb3e17e80a4","type":"ui_table","z":"2447f70b5f1095ba","group":"0d788a3660f620b1","name":"Drivstoffpriser","order":6,"width":"10","height":"16","columns":[{"field":"discountInfo","title":"","width":"55%","align":"left","formatter":"plaintext","formatterParams":{"target":"_blank"}},{"field":"type","title":"","width":"15%","align":"right","formatter":"plaintext","formatterParams":{"target":"_blank"}},{"field":"price","title":"Kr","width":"15%","align":"right","formatter":"plaintext","formatterParams":{"target":"_blank"}},{"field":"age","title":"hrs.","width":"15%","align":"right","formatter":"plaintext","formatterParams":{"target":"_blank"}}],"outputs":1,"cts":true,"x":770,"y":600,"wires":[[]]},{"id":"bf43e528a5851b0d","type":"function","z":"2447f70b5f1095ba","name":"List priser for favs","func":"var favs = flow.get(\"Favs\") || []\nvar stats = flow.get(\"Stations\") || []\nvar arr = []\nvar msg2 = {}\nvar now = Number(new Date());\nvar age = 0;\n\nfor (var i = 0;i < stats.length;i++){ //bla gjennom alle stasjoner\n for (var j = 0;j < favs.length;j++){ // bla gjennom favoritter\n if (stats[i].id == favs[j].id){ //er gjeldende stasjon i favoritter?\n for (var k = 0; k < stats[i].stationDetails.length; k++){ // bla gjennom drivstofftyper\n let obj = {}\n obj.name = stats[i].name;\n obj.brand = stats[i].brand;\n obj.discountInfo = stats[i].discountInfo;\n // fix dårlig benevning\n if (obj.brand == obj.discountInfo) obj.discountInfo = obj.discountInfo + \" \" + obj.name;\n obj.type = stats[i].stationDetails[k].type;\n obj.price = stats[i].stationDetails[k].price;\n obj.age = ((now - stats[i].stationDetails[k].lastUpdated) / 3600 / 1000).toFixed(1);// + \"h\"; //age in hours\n arr.push(obj);\n }\n }\n }\n}\nmsg2.payload = arr;\nreturn msg2;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":560,"y":600,"wires":[["4d95ecb3e17e80a4"]]},{"id":"f193882be2dc7762","type":"delay","z":"2447f70b5f1095ba","name":"","pauseType":"delay","timeout":"500","timeoutUnits":"milliseconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":310,"y":600,"wires":[["bf43e528a5851b0d"]]},{"id":"d9d0882ba114f2ae","type":"ui_text_input","z":"2447f70b5f1095ba","name":"","label":"Søk...","tooltip":"","group":"0d788a3660f620b1","order":7,"width":"10","height":"1","passthru":true,"mode":"text","delay":300,"topic":"topic","sendOnBlur":true,"className":"","topicType":"msg","x":300,"y":410,"wires":[["dd937fc64214f72d"]]},{"id":"dd937fc64214f72d","type":"function","z":"2447f70b5f1095ba","name":"List selected stations","func":"var stats = flow.get(\"Stations\") || []\nvar searchText = msg.payload;\nvar arr = [];\nvar msg2 = {}\nfor (var i = 0;i < stats.length;i++){\n let obj = {}\n obj.id = stats[i].id;\n obj.name = stats[i].name || \"-\"\n obj.brand = stats[i].brand || \"-\"\n obj.discountInfo = stats[i].discountInfo || \"-\"\n // plukk ut bare stasjoner som inneholder søkebegrepet\n if (obj.name.includes(searchText) || obj.brand.includes(searchText) || obj.discountInfo.includes(searchText)){\n arr.push(obj);\n }\n}\nmsg2.payload = arr;\nreturn msg2;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":530,"y":410,"wires":[["6ffebf4f1340a92e"]]},{"id":"13d4a47fe1d5ae74","type":"ui_text","z":"2447f70b5f1095ba","group":"0d788a3660f620b1","order":1,"width":"10","height":"1","name":"","label":"Alle stasjoner","format":"{{msg.payload}}","layout":"row-spread","className":"","x":1150,"y":430,"wires":[]},{"id":"65cdb903a6486baf","type":"ui_text","z":"2447f70b5f1095ba","group":"0d788a3660f620b1","order":2,"width":"10","height":"1","name":"","label":"Favoritter","format":"{{msg.payload}}","layout":"row-spread","className":"","x":1130,"y":460,"wires":[]},{"id":"6e102042f9d3270e","type":"ui_text","z":"2447f70b5f1095ba","group":"0d788a3660f620b1","order":3,"width":"10","height":"1","name":"","label":"Priser","format":"{{msg.payload}}","layout":"row-spread","className":"","x":1120,"y":490,"wires":[]},{"id":"d4dc462af536e73f","type":"http request","z":"2447f70b5f1095ba","name":"","method":"GET","ret":"obj","paytoqs":"ignore","url":"https://api.drivstoffappen.no/api/stations?stationType=0&countryCode=NO","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[{"keyType":"other","keyValue":"Content-Type","valueType":"other","valueValue":"application/json"},{"keyType":"other","keyValue":"X-API-KEY","valueType":"other","valueValue":"2CD114509703F6E0A976C32FCB79C4F62966EEC6"},{"keyType":"other","keyValue":"User-Agent","valueType":"other","valueValue":"Drivstoffappen/1.3.8 (com.raskebiler.drivstoff.appen; build:130; iOS 15.2.1) Alamofire/5.4.4"}],"x":540,"y":130,"wires":[["c622a1c1b5d187fe","18ec6499f1fefde8","e7e0a907d77667f2","283d51c6efeddbb7","85dd9827b7d9a90c","e577f959c4c3e385","32b13b757f4465ec","28fe85a134fe0971"]]},{"id":"c5147f5beba7be52","type":"ui_group","name":"Wide","tab":"8b4128994ad0c3a1","order":2,"disp":false,"width":"31","collapse":false,"className":""},{"id":"8a6654beead70801","type":"persist-store","filename":"diesel.json","interval":"600"},{"id":"0d788a3660f620b1","type":"ui_group","name":"Drivstoffpriser","tab":"1083c01bcc75e66c","order":1,"disp":true,"width":"31","collapse":false,"className":""},{"id":"8b4128994ad0c3a1","type":"ui_tab","name":"Sol + vær","icon":"wb_sunny","order":4,"disabled":false,"hidden":false},{"id":"1083c01bcc75e66c","type":"ui_tab","name":"Drivstoff","icon":"local_gas_station","order":22,"disabled":false,"hidden":false}]
  2. Er dette et åpent API til fri avbenyttelse, abonnementstjeneste eller annet? Fant ikke info på drivstoffappen.no
  3. Takker og bukker @VikingOy Mye bedre å dele NodeRed flows som compact JSON tagget som "Kode" slik som dette: [{"id":"9103052baf82e5d0","type":"inject","z":"2447f70b5f1095ba","name":"Hvert 10 min","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"600","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":360,"y":130,"wires":[["687284b792794184"]]},{"id":"687284b792794184","type":"http request","z":"2447f70b5f1095ba","name":"","method":"GET","ret":"obj","paytoqs":"ignore","url":"https://api.drivstoffappen.no/api/stations?stationType=0&countryCode=NO","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[{"keyType":"other","keyValue":"Content-Type","valueType":"other","valueValue":"application/json"},{"keyType":"other","keyValue":"X-API-KEY","valueType":"other","valueValue":"2CD114509703F6E0A976C32FCB79C4F62966EEC6"},{"keyType":"other","keyValue":"User-Agent","valueType":"other","valueValue":"Drivstoffappen/1.3.8 (com.raskebiler.drivstoff.appen; build:130; iOS 15.2.1) Alamofire/5.4.4"}],"x":550,"y":130,"wires":[["18ec6499f1fefde8","e7e0a907d77667f2","283d51c6efeddbb7","85dd9827b7d9a90c"]]},{"id":"18ec6499f1fefde8","type":"function","z":"2447f70b5f1095ba","name":"Esso Avaldsnes","func":"msg.payload = msg.payload.filter((/** @type {{ discountInfo: string; }} */ e) => e.discountInfo == 'Esso Avaldsnes');\nmsg.payload[0].stationDetails = msg.payload[0].stationDetails.filter(e => e.type == '95' || e.type == 'D' )\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":770,"y":130,"wires":[["0e5b02362818c9c1"]]},{"id":"e7e0a907d77667f2","type":"function","z":"2447f70b5f1095ba","name":"Uno-X Avaldsnes","func":"msg.payload = msg.payload.filter(e => e.discountInfo == 'Uno-X Avaldsnes');\nmsg.payload[0].stationDetails = msg.payload[0].stationDetails.filter(e => e.type == '95' || e.type == 'D' )\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":780,"y":190,"wires":[["0e5b02362818c9c1"]]},{"id":"283d51c6efeddbb7","type":"function","z":"2447f70b5f1095ba","name":"YX 7-Eleven Norheim","func":"msg.payload = msg.payload.filter(e => e.discountInfo == 'YX 7-Eleven Norheim');\nmsg.payload[0].stationDetails = msg.payload[0].stationDetails.filter(e => e.type == '95' || e.type == 'D' )\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":790,"y":250,"wires":[["0e5b02362818c9c1"]]},{"id":"85dd9827b7d9a90c","type":"function","z":"2447f70b5f1095ba","name":"Tanken Helganes - Flyplassvegen","func":"msg.payload = msg.payload.filter(e => e.discountInfo == 'Tanken Helganes - Flyplassvegen');\nmsg.payload[0].stationDetails = msg.payload[0].stationDetails.filter(e => e.type == '95' || e.type == 'D' )\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":830,"y":310,"wires":[["0e5b02362818c9c1"]]},{"id":"0e5b02362818c9c1","type":"debug","z":"2447f70b5f1095ba","name":"debug 88","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1090,"y":130,"wires":[]}]
  4. Kan du dele til flowen til oss som ikke er på Fakebook?
  5. Det forklarer jo litt... Dengang jeg brukte Telldus for 5-6 år siden var supporten svært så oppegående og jeg følte at jeg fikk personlig support.
  6. Har lett litt etter en ferdig løsning for å få litt status fra "Robert" inn i NodeRed og endte opp med å ta en Gardena-løsning og modifisere litt. Legger bare ut det mest grunleggende her så kan en selv bygge videre om en vil... Du trenger brukernavn/passord (samme som i appen) og api_key og api_secret (som en finner på https://developer.husqvarnagroup.cloud/applications/) Resultatet ser slik ut: [{"id":"ec4f37957f88a213","type":"inject","z":"8603c38cd8dca9a1","name":"InitialToken","props":[],"repeat":"300","crontab":"","once":true,"onceDelay":0.1,"topic":"","x":220,"y":100,"wires":[["5a76f5f24753307f"]]},{"id":"ef52311e418fa6cd","type":"http request","z":"8603c38cd8dca9a1","name":"http request","method":"GET","ret":"obj","paytoqs":"ignore","url":"","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":610,"y":160,"wires":[["1c85b2910f1c6f49","d89c283dd29ecf4e","1c19f3206acd6d3f","9a8a81a102fe4394"]]},{"id":"6b818ceca37c4778","type":"function","z":"8603c38cd8dca9a1","name":"Get Mowers","func":"flow.set(\"access_token\", msg.oauth2Response.access_token);\nflow.set(\"refresh_token\", msg.oauth2Response.refresh_token);\nflow.set(\"user_id\", msg.oauth2Response.user_id)\n\nvar mytoken = flow.get(\"access_token\"); \nvar myapi = flow.get(\"api_key\"); \nvar url = \"https://api.amc.husqvarna.dev/v1/mowers\";\n\nmsg.headers = {\n\t'Authorization': 'Bearer '+mytoken,\n\t'Authorization-Provider': 'husqvarna',\n\t'X-Api-Key': myapi,\n\t'Content-Type': 'application/vnd.api+json',\n};\n\nmsg.url = url;\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":440,"y":160,"wires":[["ef52311e418fa6cd"]]},{"id":"1c85b2910f1c6f49","type":"debug","z":"8603c38cd8dca9a1","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1030,"y":160,"wires":[]},{"id":"5a76f5f24753307f","type":"function","z":"8603c38cd8dca9a1","name":"Credentials","func":"flow.set(\"gard_login\", \"[email protected]\");\nflow.set(\"gard_pass\", \"xxxxxx\");\nflow.set(\"api_key\", \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\");\nflow.set(\"api_secret\", \"zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz\");\n\n\nvar mylogin = flow.get(\"gard_login\");\nvar mypass = flow.get(\"gard_pass\"); \nvar myrefresh = flow.get(\"refresh_token\"); \nvar myapi = flow.get(\"api_key\"); \nvar mysecret = flow.get(\"api_secret\"); \n\nmsg.oauth2Request = { \n\"access_token_url\": \"https://api.authentication.husqvarnagroup.dev/v1/oauth2/token\", \n\"credentials\": {\n \"grant_type\": \"password\",\n \"username\": mylogin,\n \"password\": mypass,\n \"client_id\": myapi,\n \"client_secret\": mysecret,\n \"scope\": \"openid\"\n }\n};\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":440,"y":100,"wires":[["88e8d4ddd3a7e099"]]},{"id":"498b21e243819b76","type":"debug","z":"8603c38cd8dca9a1","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"oauth2Response","targetType":"msg","statusVal":"","statusType":"auto","x":1060,"y":100,"wires":[]},{"id":"88e8d4ddd3a7e099","type":"oauth2","z":"8603c38cd8dca9a1","name":"","container":"oauth2Response","grant_type":"set_by_credentials","access_token_url":"","authorization_endpoint":"","open_authentication":"","username":"","password":"","client_id":"","client_secret":"","scope":"","proxy":"","senderr":false,"client_credentials_in_body":true,"rejectUnauthorized":true,"headers":{},"x":660,"y":100,"wires":[["6b818ceca37c4778","498b21e243819b76"]]},{"id":"d89c283dd29ecf4e","type":"change","z":"8603c38cd8dca9a1","name":"Extract Mower activity","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload[\"data\"][0][\"attributes\"][\"mower\"].activity","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":560,"y":240,"wires":[["55ea77bc8dc2844a"]]},{"id":"0d70166c691efcee","type":"ui_text","z":"8603c38cd8dca9a1","group":"a7f439d7b1e0bbd4","order":1,"width":0,"height":0,"name":"","label":"Act:","format":"{{msg.payload}}","layout":"row-left","className":"","x":1010,"y":240,"wires":[]},{"id":"55ea77bc8dc2844a","type":"show-value","z":"8603c38cd8dca9a1","name":"","path":"","x":820,"y":240,"wires":[["0d70166c691efcee"]]},{"id":"1c19f3206acd6d3f","type":"change","z":"8603c38cd8dca9a1","name":"Extract Mower state","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload[\"data\"][0][\"attributes\"][\"mower\"].state","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":560,"y":280,"wires":[["12a6948a8805bccf"]]},{"id":"0ec1d3574e80d05f","type":"ui_text","z":"8603c38cd8dca9a1","group":"a7f439d7b1e0bbd4","order":1,"width":0,"height":0,"name":"","label":"State:","format":"{{msg.payload}}","layout":"row-left","className":"","x":1010,"y":280,"wires":[]},{"id":"12a6948a8805bccf","type":"show-value","z":"8603c38cd8dca9a1","name":"","path":"","x":820,"y":280,"wires":[["0ec1d3574e80d05f"]]},{"id":"80c2164fda5b93c9","type":"ui_table","z":"8603c38cd8dca9a1","group":"a7f439d7b1e0bbd4","name":"","order":2,"width":"8","height":"11","columns":[],"outputs":0,"cts":false,"x":1010,"y":200,"wires":[]},{"id":"9a8a81a102fe4394","type":"function","z":"8603c38cd8dca9a1","name":"2array.of.obj","func":"var newObj = {}\nlet arr = []\nvar lastDate = 0;\nvar options = { year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit' };\nvar lastDateFormatted = 0;\nvar system = [msg.payload.data[0].attributes.system]\nvar mower = [msg.payload.data[0].attributes.mower]\nvar battery = [msg.payload.data[0].attributes.battery]\nvar metadata = [msg.payload.data[0].attributes.metadata]\nvar planner = [msg.payload.data[0].attributes.planner]\nvar calendar = [msg.payload.data[0].attributes.calendar.tasks[0]]\n\nnewObj = { Status: \"Name: \" + system[0].name }\narr.push(newObj)\nnewObj = { Status: \"Model: \" + system[0].model }\narr.push(newObj)\nnewObj = { Status: \"Serial: \" + system[0].serialNumber }\narr.push(newObj)\n\nnewObj = { Status: \"Override: \" + planner[0].override.action }\narr.push(newObj)\n\n//Calendar\nvar cald = \"\";\nif (calendar[0].monday == true) cald = \"M\"; else cald = \"_\";\nif (calendar[0].tuesday == true) cald += \"T\"; else cald += \"_\";\nif (calendar[0].wednesday == true) cald += \"W\"; else cald += \"_\";\nif (calendar[0].thursday == true) cald += \"T\"; else cald += \"_\";\nif (calendar[0].friday == true) cald += \"F\"; else cald += \"_\";\nif (calendar[0].saturday == true) cald += \"S\"; else cald += \"_\";\nif (calendar[0].sunday == true) cald += \"S\"; else cald += \"_\";\nnewObj = { Status: \"Calendar: \" + cald }\narr.push(newObj)\n\nnewObj = { Status: \"Connected: \" + metadata[0].connected }\narr.push(newObj)\n\nlastDate = new Date(metadata[0].statusTimestamp);\nlastDateFormatted = lastDate.toLocaleDateString('nb-NO', options);\nnewObj = { Status: \"StatusTS: \" + lastDateFormatted}\narr.push(newObj)\n\nnewObj = {Status: \"Mode: \" + mower[0].mode}\narr.push(newObj)\nnewObj = { Status: \"Activity: \" + mower[0].activity}\narr.push(newObj)\nnewObj = { Status: \"State: \" + mower[0].state }\narr.push(newObj)\nnewObj = { Status: \"ErrorCode: \" + mower[0].errorCode }\narr.push(newObj)\nlastDate = new Date(mower[0].errorCodeTimestamp);\nlastDateFormatted = lastDate.toLocaleDateString('nb-NO', options);\nnewObj = { Status: \"ErrorCodeTS: \" + lastDateFormatted}\narr.push(newObj)\nnewObj = { Status: \"Battery: \" + battery[0].batteryPercent }\narr.push(newObj)\n\nnode.warn(arr)\nmsg.payload = arr\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":820,"y":200,"wires":[["80c2164fda5b93c9","1c85b2910f1c6f49"]]},{"id":"afa6c1e45f377316","type":"comment","z":"8603c38cd8dca9a1","name":"Input your credentials","info":"","x":470,"y":70,"wires":[]},{"id":"a7f439d7b1e0bbd4","type":"ui_group","name":"Status","tab":"55b4bf40cf1e815d","order":1,"disp":true,"width":"8","collapse":false,"className":""},{"id":"55b4bf40cf1e815d","type":"ui_tab","name":"Robert","icon":"android","order":21,"disabled":false,"hidden":false}]
  7. Har sett litt på Windy og den ser ikke bedre ut enn Storm/Yr. Windy sier 99% skyer sammenhengende fra kl 10 til kl 21 i dag mens Yr indikerer en del sol på ettermiddagen. Der ble såpass sol på ettermiddagen at jeg fikk drøyt 13 kWh fra solcellene med max på ca 7 kW av 8.1 kWp. Dette er resultatet av værvarsel for I DAG og når det bommer såpass er det neppe mer brukende for i morgen og det er det jeg trenger... Noen som har noe som er mer pålitelig?
  8. Har ikke det. Sammenlignet nå med Yr/Storm og den gir et annet bilde noen dager fram i alle fall. Det jeg har sett av Yr/Storm til nå gir lite inspirasjon til å snekre noen automatikk...
  9. Jeg sitte daglig og gjør manuelle innnstillinger på solcelle/batterianlegget mitt slik at jeg skal få maksimalt ut av solen samtidig som jeg planlegger batterilading de billigste timene når solen ikke er tilstrekkelig. Jeg vet jo der finnes ulike APIer der ute men så langt har jeg brukt manuelt de norske storm.no og yr.no. Erfaringen så langt tilsier at det ikke er aktuelt å lage noen automatikk basert på disse tjenestene fordi de stemmer katastrofalt dårlig med gjeldende vær, til og med neste time bommes det kraftig på, ikke alltid selvsagt men litt for ofte. Det blir litt for ofte jeg dropper lading de billigste timene om natten fordi der er meldt sol neste dag men opplever overskyet i stedet, og motsatt. Da jeg drev med seiling så jeg at yr.no var totalt katastrofalt på vind mens grib.us var svært pålitelig. Nå er jo ikke vind aktuelt i denne sammenhengen men er der noen som vet om en sol og/eller skytjeneste som i praksis kan stoles på? Jeg teker at en skyprosent vil bli tilnærmet omvendt proporsjonal med solstyrken.
  10. Lurer også på noen motoriserte rullegardiner for solskjerming. Har sett meg ut Jysk YNGEN gardin og Aquara E1 motor. Halv pris av f.eks. Ikea Fyrtur og litt mer hjemmemekkaktig utseende (som jeg liker).
  11. Ting som skygger for panelene? Jeg mista 1 kW da jeg satte opp flaggstangen i går... så den flytta jeg... Jeg har heller ikke så storeproduksjonen i dag, 3.5kW max fra 8.1kWp anlegget (som på gode dager gir opptil 9.6kW). Litt mer info om anlegget gjør det lettere å gi råd.
  12. Slike rør på loftet er vel gjerne bare isolert med 3 cm eller noe slikt? Og der er vel en del meter av de... Men det var jo en heftig temp.forskjell... Har du tilgang på IR-kamera så kan det gi noen svar.
  13. Jeg tror @Christoffer er inne på det riktige her. Prøv dette eksempelet (med dine devicer):
  14. Under Events vil der dukke opp en gruppe kalt "Delayed actions" så lenge der er noen delayed actions på gang og så forsvinner den. Du må gjerne refreshe siden for å se den...
  15. Ta en kikk i "Events/Delayed actions" (eller hva det nå heter, har ikke HS oppe og gå for tiden) om du virkelig har fått slettet tidligere delays...
  16. Tror jeg fant det virkelige problemet i dag. Har flere Ubiquiti EdgeSwitch og for å løse en akutt portkrise ved TVen satte jeg inn en 5-port TP-Link switch. Etter et år eller så med diverse utstyr som har kommet og gått har jeg klart å plugge begge ender av en og samme kabel inn i denne switchen. Etter jeg fikk i gang EdgeRouteren begynte begge LEDene i en av de 2 portene å blinke med 1 Hz, det har jeg aldri sett tidligere og jeg ser lysene på denne switchen der jeg alltid sitter i stuen. En feil jeg har gjort for en tid siden men som Deco ikke skjønte men EdgeRouter oppdaget tenker jeg... Nå vet ikke jeg hvor STP algoritmene ligger men der er tydeligvis en forskjell i Deco og EdgeRouter.
  17. Som sagt så klarte jeg ikke å finne ut hva som virkelig skjedde. Brukte en del dager og flere verktøy men endte opp med en slags eliminasjonsmetode... Spanning tree kan høres ut som en sannsynlig årsak men hva som har fått dette til å bli et stort problem akkurat nå er også et spørsmål. Har hatt Decoene i drift i 3-4 år... Må vel også si at jeg ikke "kan" nettverk men det har vært en bi-del av jobben min helt siden den tiden Banyan Vines og 10Mbit coax ethernet var det helt store...
  18. Løste var vel å dra det litt langt... Nettet bedret seg en liten stund med annen DNS-server men det ballet på seg igjen etter noen timer. I går ble det virkelig ille og jeg klarte ikke å lokalisere problemet. Hadde liggende noen gamle UniFi aksesspunkt som jeg fyrte i gang og så en god bedring. I dag stakk jeg innom Kjell&co og hentet en Ubiquiti EdgeRouter X. Et kjapt basisoppsett og Decoene ble skrudd av og da kviknet nettet dramatisk til. Etter å ha fått satt statiske IP adresser på nøkkelenhetene i DHCP serveren ser det hele ut til å være back-in-business igjen. Et eller annet ser ut til å ha skjedd med Decoene. Statuslyset gikk i rødt med kortere eller lengre intervall. Har hatt 5 Decoer i drift men prøvde å erstatte hoved-Deco med den ene jeg hadde i reserve men ingen forskjell... Håper det varer denne gang...
  19. Jeg ligger vel også på et år og vel så det...
  20. Nei. Har hatt HS4 oppe og gå KUN for Doorman (styrt fra NodeRed) men nå har HS4/Verisure gitt seg og...
  21. Takk for info. Jeg har ikke merket den og nodene fungerer for meg.
  22. Også hendig å lagre Dashboard chart i tilfelle restart med Persist in/out nodene, spesielt de trendene som går over lang tid: Brukes slik:
  23. Du må sette contextStorage til localfilesystem i stedet for memory, står litt om det f.eks. her: https://notenoughtech.com/home-automation/preserving-variables-in-nodered/
  24. Det var slik jeg trodde det skulle være også men litt merkelig at ny DNS løste problemet...
×
×
  • Opprett ny...

Viktig informasjon

Vi har plassert informasjonskapsler/cookies på din enhet for å gjøre denne siden bedre. Du kan justere dine innstillinger for informasjonskapsler, ellers vil vi anta at dette er ok for deg.