Vinnerliste
Populært innhold
Viser innholdet med mest poeng fra 29. april 2023 i alle områder
-
Etter at det dukket opp en ny utfordring vedr ett nytt drivhus som driftes i lag med naboen, så tenkte jeg at jeg måtte få et script som regnet ut prisen for strømmen. Tenkte jeg skulle teste ChatGPT. Spurte om dette: Svaret jeg fikk: Var ikke 100% copy/paste for at det funket, men var såpass små justeringer at jeg klarte å feilsøke det selv. Så da sparte jeg mange dumme spørsmål i diverse forum. 😃4 poeng
-
Første post nå oppdatert. Utvidet scriptet ditt litt, @ZoRaC , for jeg syntes det er greit å få med de neste dagene også... 🙂2 poeng
-
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}]1 poeng
-
Jeg gikk gjennom koden og så at det manglet litt.. Ikke rart den ikke kjørte! Funker som bare juling når man først kopierer all koden 😂 Takk for oppfølging!1 poeng
-
Krever ikke firmanavn eller noe annet. Jeg oppgav kun navn, epost og telefon, og det gikk gjennom.1 poeng
-
Oops…? 😛 https://direkte.vg.no/nyhetsdognet/news/postens-nettsider-er-nede.sJV4Zqk5e Neida, var nok ikke vi som ødela siden deres, men morsom tilfeldighet! 😛1 poeng
-
Her er fikset versjon. 🙂 Krever MyBring-konto. Man må legge inn rett postnummer, e-postadresse og API-key på rett sted i koden. Sub Main(ByVal params As Object) Dim devRef As Integer = 6560 Dim url As String = "https://api.bring.com/address/api/no/postal-codes/POSTNUMMER/mailbox-delivery-dates" Dim source As String = "" Try Using client As New System.Net.WebClient client.Headers.Add("x-mybring-api-uid", "EPOST-ADRESSE") client.Headers.Add("x-mybring-api-key", "API KEY") client.BaseAddress = url source = client.DownloadString(url) End Using Dim json As Object = Newtonsoft.Json.JsonConvert.DeserializeObject(Of Object)(source) hs.writelog("Posten", json.tostring) Dim output As String = json.item("delivery_dates").item(0).tostring hs.writelog("Posten", output) Dim ci = New System.Globalization.CultureInfo("nb-NO") Dim nestePostdag As Date = DateTime.Parse((output), ci) Dim dagerTilPost As Integer = nestePostdag.Date.Subtract(Now.Date).Days If dagerTilPost = 0 Then output = "I dag" Else If dagerTilPost = 1 Then output = "I morgen" Else output = nestePostdag.ToString("ddd d. MMM", ci) End If hs.SetDeviceValueByRef(devRef, dagerTilPost, True) hs.SetDeviceString(devRef, output, False) Catch ex As Exception hs.SetDeviceValueByRef(devRef, -1, True) hs.SetDeviceString(devRef, "Feil: " & ex.Message, False) End Try End Sub1 poeng
-
Det virket tydelig vis å tildele høyttalerne statiske IP-adresser. Høyttalergruppene får samme IP-adresse som en av høyttalerne, men annen port. Kan ikke si jeg heeeelt skjønner hvorfor det funker, men nå funker det!1 poeng
-
Med GDPR kan man, som petersv skriver, kreve å få dataen utlevert og slettet. Siden kommunen definerer det som persondata som går under GDPR-lovgivningen vil det si at de heller ikke har lov til å samle inn mer data enn nødvendig. Så hvis de f.eks. fakturerer kvartalsvis på vannmåleren, har de ikke lov til å lagre mer enn 4 målinger per år. https://www.junglemap.no/innsikter/ikke-samle-inn-mer-data-enn-nodvendig1 poeng
-
Du kan jo med GPRD i hånd kreve å få utlevert dataene (iom at kommunene selv definerer det som persondata). Du kan automatisere det med å be om data hver eneste dag via e-post, og så får vi se om pipa har en annen lyd etter ei uke.1 poeng
-
sorry er ikke så aktiv her lengre. Godt poeng, skal se om jeg kan få kastet det ut på git en dag :)1 poeng
-
Sånn ble det 🙂 Jeg håper jo egentlig ikke å ha behov for dette, men det blir spennende å se om det slår til. Lurer på om problemet ble større med Homeseer v4.2.18 - oppdaterte til siste (4.2.18.3) i kveld, kanskje det ordner det også, for "før" var det aldri et tema at en mista forbindelsen til broker (selv om jeg ikke helt klarer å se hva selve Homeseer har med det å gjøre..)1 poeng
-
1 poeng
-
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.1 poeng
-
Kom over denne tråden, og jeg jobbet et par år med vannmåling for Smartliv og Asker (og Lier) kommune. Jobbet en del med dekryptering av målerne. Det er korrekt som du påpekte tidligere her at målerne deler krypteringsnøkkel. Dette gjelder dog kun for Axioma sine og ikke Kamstrup sine, så hvis du har en Kamstrupmåler, bør du kunne få en nøkkel. Men tviler dessverre på at de som jobber med dette i Asker har kompetanse til det. Det som kommer ut av nettien har med CRC-koder, mens noen moduler skreller bort CRC, så der har du rett. Du finner en del dokumentasjon på WMBus-protokollen her: https://oms-group.org/fileadmin/files/download4all/specification/Vol2/4.3.3/OMS-Spec_Vol2_Primary_v433.pdf Når det gjelder payloaden du postet, så er den ca slik: 2a442d2c625484761b168d2a0114b76522cbaa96817c787f3183f757807e0a2fecf5a6ac0c35e3cd19d027 2A = lengde på meldingen 44 = C-field (kontrollfelt) 2D 2C = Manfacturer (Med en formel, så blir det stringen "KAM" 62 54 84 76 = A-field (Unikt nummer på måleren). Leses byte-vis baklengs: 76 84 54 62 1B = Versjonsnummer/Modellnummer. 16 = Device-type (0x16 = Cold Water) Kamstrup sender C1-mode, så husker ikke resten av bytene i hodet. Husker T1-mode litt bedre. 😄 Kamstrupen sender også Compact og Full Frame-meldinger, hvor den ene meldingen inneholder mye mer data. Når det gjelder Axioma / Qualcosonic-målerne så har den alarmer i en av header-bytene. Kamstrup har dem i den krypterte payloaden. Om du er interessert, kan jeg grave frem noe info der. Den har bl.a. disse alarmene: Leakage, Burst, Dry, Freeze, Tamper, Low Battery, Backflow. Er også en parameter som sier om alarmen er temporær eller permanent. Lekkasjealgoritmen er litt så som så. Det som ligger i selve payloaden er litt forskjellig etter modell og konfigurasjon. Her finner man selvfølgelig forbruk, men man kan også finne: flow-rate, positive volume, negative volume, temperature, low battery, error free time, error message.1 poeng
Vinnerlisten er satt til Oslo/GMT+01:00