Vinnerliste
Populært innhold
Viser innholdet med mest poeng siden 14. feb. 2025 i alle områder
-
Jeg har laget min første Home Assistant-integrasjon - Google pollen! Jeg kan egentlig ikke Python, men kan programmere i andre språk. Så jeg klarer å lese og forstå Python, men ikke å «skrive det fra bunn». Ble ganske imponert over Github Copilot, som ganske kjapt og enkelt lagde en fungerende kode som jeg kunne bruke som utgangspunkt! Koden ligger her: https://github.com/svenove/home-assistant-google-pollen4 poeng
-
3 poeng
-
Her er kode for å hente inn pris for hver time i dag og i morgen. Den henter også inn pris for aktuell time, men det bruker jeg ikke til noe. Jeg er kun interessert i attributten "prices". Hvis du skal bruke aktuell pris i sensorens tilstand så ville jeg satt scan_interval til en mye høyere verdi, feks en gang i døgnet. Og heller trigget en oppdatering med en automasjon som kjører hver hele time med action: homeassistant.update_entity data: entity_id: - sensor.hvakosterstrommen_price_today command_line: - sensor: scan_interval: 1800 command: > echo "{\"prices\":" $( curl -s 'https://www.hvakosterstrommen.no/api/v1/prices/{{ now().strftime('%Y/%m-%d') }}_NO2.json' ) "}" name: "hvakosterstrommen_price_today" value_template: "{{ (value_json.prices | selectattr('time_start', 'match', now().strftime('%Y-%m-%dT%H:00')) | list | first)['NOK_per_kWh'] }}" unit_of_measurement: "NOK/kWh" json_attributes: - prices - sensor: scan_interval: 1800 command: > echo "{\"prices\":" $( curl -s 'https://www.hvakosterstrommen.no/api/v1/prices/{{ (now()+timedelta(days=1)).strftime('%Y/%m-%d') }}_NO2.json' ) "}" name: "hvakosterstrommen_price_tomorrow" value_template: "{{ (value_json.prices | selectattr('time_start', 'match', (now()+timedelta(days=1)).strftime('%Y-%m-%dT%H:00')) | list | first)['NOK_per_kWh'] }}" unit_of_measurement: "NOK/kWh" json_attributes: - prices2 poeng
-
@Venin Da har du kommet i kontakt med en som ikke viste bedre, jeg skal prate med gutta på support. Men vi jobber med home assistant integrasjon as we speak :)2 poeng
-
Her er den forenklede flowen jeg kom fram til, basert på den @SveinHa laget. Veldig enkel, den henter lista over stasjoner, filtrerer ut de jeg skal ha (hvis noen vil bruke den, kan de endre ID-en i Chosen Stations-switchen til det man trenger) og så skal jeg sende resultatet til Home Assistant som MQTT, til en MQTT-sensor for hver stasjon. Denne skal jeg så sette til å varsle meg i det øyeblikket en av stasjonene går under 19 kroner. Dermed kan jeg fylle de seks kannene til Mad Max når det er grei pris. 😀 [{"id":"15c0f11d3fc4b3f7","type":"tab","label":"Bensinpriser","disabled":false,"info":"","env":[]},{"id":"fb3c8172638a8fb7","type":"function","z":"15c0f11d3fc4b3f7","name":"List all stations & create flow.stations","func":"var brands = flow.get(\"brands\");\nvar statsRaw = flow.get(\"stationsRaw\");\n//flow.set(\"Stations\",msg.payload);\n//node.warn( \"pl.length: \" + statsRaw.length);\nvar arr = [];\nvar arr2 = [];\nvar obj2 = {}\nvar msg2 = {}\nvar i = 0;\nvar j = 0;\nfor (i = 0;i < statsRaw.length;i++){\n let obj = {}\n //if (i == 2150)i++;\n //if (i == 2302)i++;\n //if (i == 2305)i++;\n //if (i == 3512)i++;\n obj.id = statsRaw[i].id;\n obj.name = statsRaw[i].name || \"-\"\n // Find brand from brandId\n for (j = 0;j < brands.length;j++){\n if (Number(statsRaw[i].brandId) == Number(brands[j].id)){\n obj.brand = brands[j].name || \"-\"\n obj.logo = brands[j].pictureUrl || \"-\"\n //node.warn(i + \" \" + j + \" \" + brands[j].name);\n break;\n }\n }\n obj.location = statsRaw[i].location || \"-\"\n // Add prices, some stations miss prices, skip these\n //node.warn(\"Add prices\");\n var obj3 = {}\n //console.log(statsRaw[i].prices.length);\n if (statsRaw[i].hasOwnProperty(\"prices\")){ // skip no-price stations\n for (j = 0;j < statsRaw[i].prices.length;j++){\n //node.warn(\"Add prices: \" + i + \" \" + j);\n var ftid = statsRaw[i].prices[j].fuelTypeId;\n if (ftid == 1 && statsRaw[i].prices[j].price != 0){ \n obj3.D = {}\n obj3.D.price = statsRaw[i].prices[j].price;\n obj3.D.lastUpdated = statsRaw[i].prices[j].lastUpdated;\n obj3.D.type = \"D\";\n }\n if (ftid == 2 && statsRaw[i].prices[j].price != 0){ \n obj3.B95 = {}\n obj3.B95.price = statsRaw[i].prices[j].price;\n obj3.B95.lastUpdated = statsRaw[i].prices[j].lastUpdated;\n obj3.B95.type = \"B95\";\n } \n if (ftid == 3 && statsRaw[i].prices[j].price != 0){\n obj3.B98 = {}\n obj3.B98.price = statsRaw[i].prices[j].price;\n obj3.B98.lastUpdated = statsRaw[i].prices[j].lastUpdated;\n obj3.B98.type = \"B98\";\n }\n if (ftid == 4 && statsRaw[i].prices[j].price != 0){\n obj3.FD = {}\n obj3.FD.price = statsRaw[i].prices[j].price;\n obj3.FD.lastUpdated = statsRaw[i].prices[j].lastUpdated;\n obj3.FD.type = \"FD\";\n }\n }\n }//skip to here\n// console.log(obj3);\n obj.prices = obj3;\n\n \n arr.push(obj);\n}\nmsg2.payload = arr;\nflow.set(\"stationsPrepd\",arr);\nreturn msg2;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":450,"y":60,"wires":[["c2d1e13e56588a8a","c1c5aa4d46a165c5"]]},{"id":"c2d1e13e56588a8a","type":"debug","z":"15c0f11d3fc4b3f7","name":"debug 163","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":730,"y":60,"wires":[]},{"id":"3ca26b9597ee0d04","type":"http request","z":"15c0f11d3fc4b3f7","name":"API Request","method":"GET","ret":"txt","paytoqs":"ignore","url":"https://api.drivstoffappen.no/api/v1/brands?stationTypeId=1","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[{"keyType":"other","keyValue":"X-API-KEY","valueType":"msg","valueValue":"md5Hash"},{"keyType":"other","keyValue":"X-CLIENT-ID","valueType":"other","valueValue":"com.raskebiler.drivstoff.appen.ios"}],"x":170,"y":460,"wires":[["a9261673840aeca8"]]},{"id":"a9261673840aeca8","type":"json","z":"15c0f11d3fc4b3f7","name":"","property":"payload","action":"","pretty":false,"x":170,"y":500,"wires":[["25f7fa92bc718299"]]},{"id":"25f7fa92bc718299","type":"change","z":"15c0f11d3fc4b3f7","name":"set flow.brands","rules":[{"t":"set","p":"brands","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":180,"y":540,"wires":[[]]},{"id":"29b1a398cccaf5a6","type":"change","z":"15c0f11d3fc4b3f7","name":"set.flow.token2","rules":[{"t":"set","p":"token2","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":180,"y":420,"wires":[["3ca26b9597ee0d04"]]},{"id":"095efa33e8e7ca2a","type":"http request","z":"15c0f11d3fc4b3f7","name":"Get Token","method":"GET","ret":"txt","paytoqs":"ignore","url":"https://api.drivstoffappen.no/api/v1/authorization-sessions","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":170,"y":160,"wires":[["94baceb2b3417947"]]},{"id":"94baceb2b3417947","type":"function","z":"15c0f11d3fc4b3f7","name":"Process Token","func":"//console.log(\"Dieselpriser innhentes\");\nmsg.token = JSON.parse(msg.payload).token;\nmsg.tokenBytes = Buffer.from(msg.token);\nmsg.shiftedBytes = Buffer.concat([msg.tokenBytes.slice(1), msg.tokenBytes.slice(0, 1)]);\nmsg.shiftedToken = msg.shiftedBytes.toString();\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":180,"y":200,"wires":[["bd3b870b7b49c6c2"]]},{"id":"fb42916801687aaf","type":"json","z":"15c0f11d3fc4b3f7","name":"","property":"payload","action":"","pretty":false,"x":150,"y":320,"wires":[["03a73177837e15f9"]]},{"id":"3bc1810bb50310ce","type":"http request","z":"15c0f11d3fc4b3f7","name":"API Request","method":"GET","ret":"txt","paytoqs":"ignore","url":"https://api.drivstoffappen.no/api/v1/stations?stationTypeId=1","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[{"keyType":"other","keyValue":"X-API-KEY","valueType":"msg","valueValue":"md5Hash"},{"keyType":"other","keyValue":"X-CLIENT-ID","valueType":"other","valueValue":"com.raskebiler.drivstoff.appen.ios"}],"x":170,"y":280,"wires":[["fb42916801687aaf"]]},{"id":"03a73177837e15f9","type":"change","z":"15c0f11d3fc4b3f7","name":"set flow.stationsRaw","rules":[{"t":"set","p":"stationsRaw","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":200,"y":360,"wires":[["fb3c8172638a8fb7"]]},{"id":"caac60185af71f64","type":"delay","z":"15c0f11d3fc4b3f7","name":"","pauseType":"delay","timeout":"4","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":160,"y":120,"wires":[["095efa33e8e7ca2a"]]},{"id":"c1c5aa4d46a165c5","type":"split","z":"15c0f11d3fc4b3f7","name":"","splt":"\\n","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"","x":370,"y":180,"wires":[["58e35b7807c9b092"]]},{"id":"58e35b7807c9b092","type":"switch","z":"15c0f11d3fc4b3f7","name":"Chosen stations","property":"payload.id","propertyType":"msg","rules":[{"t":"eq","v":"2088","vt":"num"},{"t":"eq","v":"25148","vt":"num"},{"t":"eq","v":"156","vt":"num"},{"t":"eq","v":"167","vt":"num"},{"t":"eq","v":"235","vt":"num"},{"t":"eq","v":"946","vt":"num"},{"t":"eq","v":"815","vt":"num"},{"t":"eq","v":"2263","vt":"num"}],"checkall":"true","repair":false,"outputs":8,"x":540,"y":160,"wires":[["2268b0ed56350566"],["2268b0ed56350566"],["2268b0ed56350566"],["2268b0ed56350566"],["2268b0ed56350566"],["2268b0ed56350566"],["2268b0ed56350566"],["2268b0ed56350566"]]},{"id":"b56273e5ea99c3fc","type":"inject","z":"15c0f11d3fc4b3f7","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"*/10 6-20 * * *","once":true,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":150,"y":60,"wires":[["caac60185af71f64"]]},{"id":"c843fa224c3d90f9","type":"debug","z":"15c0f11d3fc4b3f7","name":"debug 170","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":730,"y":360,"wires":[]},{"id":"2268b0ed56350566","type":"function","z":"15c0f11d3fc4b3f7","name":"Convert to message","func":"msg.topic = \"Bensinstasjoner\";\nvar kjede = msg.payload.brand;\nvar navn = msg.payload.name;\nconst diff = new Date().getTime() - msg.payload.prices.B95.lastUpdated;\nvar timer = Math.floor(diff/1000/60/60);\nvar minutter = Math.floor((diff/1000/60/60 - timer )*60);\nmsg.payload['stasjon'] = kjede + ' ' + navn;\nmsg.payload['pris'] = msg.payload.prices.B95.price;\nmsg.payload['timer'] = timer;\nmsg.payload['minutter'] = minutter;\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":780,"y":160,"wires":[["ca552240d225b271"]]},{"id":"ca552240d225b271","type":"change","z":"15c0f11d3fc4b3f7","name":"Remove unnecessary fields from array","rules":[{"t":"delete","p":"payload.prices","pt":"msg"},{"t":"delete","p":"payload.id","pt":"msg"},{"t":"delete","p":"payload.logo","pt":"msg"},{"t":"delete","p":"payload.name","pt":"msg"},{"t":"delete","p":"payload.brand","pt":"msg"},{"t":"delete","p":"payload.location","pt":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":550,"y":280,"wires":[["c843fa224c3d90f9"]]},{"id":"bd3b870b7b49c6c2","type":"md5","z":"15c0f11d3fc4b3f7","name":"MD5","fieldToHash":"shiftedToken","fieldTypeToHash":"msg","hashField":"md5Hash","hashFieldType":"msg","x":150,"y":240,"wires":[["3bc1810bb50310ce","29b1a398cccaf5a6"]]},{"id":"7c6ba7685c1bbfb6","type":"comment","z":"15c0f11d3fc4b3f7","name":"Show chosen stations with price and update time","info":"","x":460,"y":20,"wires":[]}] @SveinHa Det stemmer at de har ladere på Esso i Mandalskrysset. Og så er det McDonald's der også, det er sikkert en ren tilfeldighet... 🤣 Ellers ser jeg at det nye oppsettet ditt gir ekstra felter i arrayen, men mente du å duplisere dem, eller skulle du egentlig ta bort de gamle feltene?2 poeng
-
Modbus skjema hvis noen vil forsøke den veien. EnSy modbus schematic layout.pdf2 poeng
-
Kan nevnte løsningen jeg gikk for, mtp at jeg misliker batterisensorer. Kjøpte en 8pack av disse på zigbee: https://www.aliexpress.com/item/1005007755890938.html Og tilhørende strømadaptere: https://www.aliexpress.com/item/1005006843406438.html Smalt rett inn i Z2M, har ikke kontrollmålt, men virker å oppdatere relativt frekvent. Bare testet 2stk til nå i en ukes tid, så vet ikke noe mtp stabilitet på lang sikt.2 poeng
-
Hei! Da er endelig FW på plass med korrekt rapportert FW versjon. Hvit: 4512750 Sort: 4512751 Forskjell på FW er kun at du får rapportert korrekt produkt nr. 4512750-Firmware.zip 4512751-Firmware.zip2 poeng
-
Ser ut til at jeg løste denne selv. Tydeligvis en enhet som er blitt rebrandet flere steder "Artig" å se at rødt lys betyr at man bruker den som sengelampe. Mye rart folk finner på å putte inn i elektroniske enheter. Link til manual (ikke helt lik siden det bl.a. er snakk om NFC og app, men jeg antar at iallefall programmene for de forskjellige fargene er korrekt) https://www.manualslib.com/manual/2063353/Vilmorin-Vilma.html?page=4#manual1 poeng
-
Snart 3 år er gått. 433MHz fungerer fortsatt som den skal. Z-wave tok kvelden for ett år siden. Mulig det er noe fukt som har kommet seg inn i enhet. Siden 1 av 2 fungerer så har jeg ikke orket å demontere. Skulle begge feile så tror jeg muligens jeg kommer til å begynne å kikke på noe slikt (Lorawan)1 poeng
-
Jeg fant en måte for å hente ut stasjons-ID, det var lett da jeg fattet det. Det blir for mye data for en debug-node, så da må det jo filtreres. Jeg la til en switch-node som slapp igjennom de som hadde et navn der msg.payload.name inneholdt det stasjonen heter. Jeg har også en som søker på adressen, da kan man dekke et større område. Her er flowen med switchnoden som søker opp stasjoner etter navn og adresse, satt opp med å søke på Mandal som sted og Åseral som navn (der det ligger en Tank-stasjon): [{"id":"15c0f11d3fc4b3f7","type":"tab","label":"Bensinpriser","disabled":false,"info":"","env":[]},{"id":"fb3c8172638a8fb7","type":"function","z":"15c0f11d3fc4b3f7","name":"List all stations & create flow.stations","func":"var brands = flow.get(\"brands\");\nvar statsRaw = flow.get(\"stationsRaw\");\n//flow.set(\"Stations\",msg.payload);\n//node.warn( \"pl.length: \" + statsRaw.length);\nvar arr = [];\nvar arr2 = [];\nvar obj2 = {}\nvar msg2 = {}\nvar i = 0;\nvar j = 0;\nfor (i = 0;i < statsRaw.length;i++){\n let obj = {}\n //if (i == 2150)i++;\n //if (i == 2302)i++;\n //if (i == 2305)i++;\n //if (i == 3512)i++;\n obj.id = statsRaw[i].id;\n obj.name = statsRaw[i].name || \"-\"\n // Find brand from brandId\n for (j = 0;j < brands.length;j++){\n if (Number(statsRaw[i].brandId) == Number(brands[j].id)){\n obj.brand = brands[j].name || \"-\"\n obj.logo = brands[j].pictureUrl || \"-\"\n //node.warn(i + \" \" + j + \" \" + brands[j].name);\n break;\n }\n }\n obj.location = statsRaw[i].location || \"-\"\n // Add prices, some stations miss prices, skip these\n //node.warn(\"Add prices\");\n var obj3 = {}\n //console.log(statsRaw[i].prices.length);\n if (statsRaw[i].hasOwnProperty(\"prices\")){ // skip no-price stations\n for (j = 0;j < statsRaw[i].prices.length;j++){\n //node.warn(\"Add prices: \" + i + \" \" + j);\n var ftid = statsRaw[i].prices[j].fuelTypeId;\n if (ftid == 1 && statsRaw[i].prices[j].price != 0){ \n obj3.D = {}\n obj3.D.price = statsRaw[i].prices[j].price;\n obj3.D.lastUpdated = statsRaw[i].prices[j].lastUpdated;\n obj3.D.type = \"D\";\n }\n if (ftid == 2 && statsRaw[i].prices[j].price != 0){ \n obj3.B95 = {}\n obj3.B95.price = statsRaw[i].prices[j].price;\n obj3.B95.lastUpdated = statsRaw[i].prices[j].lastUpdated;\n obj3.B95.type = \"B95\";\n } \n if (ftid == 3 && statsRaw[i].prices[j].price != 0){\n obj3.B98 = {}\n obj3.B98.price = statsRaw[i].prices[j].price;\n obj3.B98.lastUpdated = statsRaw[i].prices[j].lastUpdated;\n obj3.B98.type = \"B98\";\n }\n if (ftid == 4 && statsRaw[i].prices[j].price != 0){\n obj3.FD = {}\n obj3.FD.price = statsRaw[i].prices[j].price;\n obj3.FD.lastUpdated = statsRaw[i].prices[j].lastUpdated;\n obj3.FD.type = \"FD\";\n }\n }\n }//skip to here\n// console.log(obj3);\n obj.prices = obj3;\n\n \n arr.push(obj);\n}\nmsg2.payload = arr;\nflow.set(\"stationsPrepd\",arr);\nreturn msg2;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":450,"y":120,"wires":[["c1c5aa4d46a165c5"]]},{"id":"c2d1e13e56588a8a","type":"debug","z":"15c0f11d3fc4b3f7","name":"debug 163","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1070,"y":120,"wires":[]},{"id":"3ca26b9597ee0d04","type":"http request","z":"15c0f11d3fc4b3f7","name":"API Request","method":"GET","ret":"txt","paytoqs":"ignore","url":"https://api.drivstoffappen.no/api/v1/brands?stationTypeId=1","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[{"keyType":"other","keyValue":"X-API-KEY","valueType":"msg","valueValue":"md5Hash"},{"keyType":"other","keyValue":"X-CLIENT-ID","valueType":"other","valueValue":"com.raskebiler.drivstoff.appen.ios"}],"x":130,"y":520,"wires":[["a9261673840aeca8"]]},{"id":"a9261673840aeca8","type":"json","z":"15c0f11d3fc4b3f7","name":"","property":"payload","action":"","pretty":false,"x":130,"y":560,"wires":[["25f7fa92bc718299"]]},{"id":"25f7fa92bc718299","type":"change","z":"15c0f11d3fc4b3f7","name":"set flow.brands","rules":[{"t":"set","p":"brands","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":140,"y":600,"wires":[[]]},{"id":"29b1a398cccaf5a6","type":"change","z":"15c0f11d3fc4b3f7","name":"set.flow.token2","rules":[{"t":"set","p":"token2","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":140,"y":480,"wires":[["3ca26b9597ee0d04"]]},{"id":"095efa33e8e7ca2a","type":"http request","z":"15c0f11d3fc4b3f7","name":"Get Token","method":"GET","ret":"txt","paytoqs":"ignore","url":"https://api.drivstoffappen.no/api/v1/authorization-sessions","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":130,"y":220,"wires":[["94baceb2b3417947"]]},{"id":"94baceb2b3417947","type":"function","z":"15c0f11d3fc4b3f7","name":"Process Token","func":"//console.log(\"Dieselpriser innhentes\");\nmsg.token = JSON.parse(msg.payload).token;\nmsg.tokenBytes = Buffer.from(msg.token);\nmsg.shiftedBytes = Buffer.concat([msg.tokenBytes.slice(1), msg.tokenBytes.slice(0, 1)]);\nmsg.shiftedToken = msg.shiftedBytes.toString();\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":140,"y":260,"wires":[["bd3b870b7b49c6c2"]]},{"id":"fb42916801687aaf","type":"json","z":"15c0f11d3fc4b3f7","name":"","property":"payload","action":"","pretty":false,"x":110,"y":380,"wires":[["03a73177837e15f9"]]},{"id":"3bc1810bb50310ce","type":"http request","z":"15c0f11d3fc4b3f7","name":"API Request","method":"GET","ret":"txt","paytoqs":"ignore","url":"https://api.drivstoffappen.no/api/v1/stations?stationTypeId=1","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[{"keyType":"other","keyValue":"X-API-KEY","valueType":"msg","valueValue":"md5Hash"},{"keyType":"other","keyValue":"X-CLIENT-ID","valueType":"other","valueValue":"com.raskebiler.drivstoff.appen.ios"}],"x":130,"y":340,"wires":[["fb42916801687aaf"]]},{"id":"03a73177837e15f9","type":"change","z":"15c0f11d3fc4b3f7","name":"set flow.stationsRaw","rules":[{"t":"set","p":"stationsRaw","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":160,"y":420,"wires":[["fb3c8172638a8fb7"]]},{"id":"caac60185af71f64","type":"delay","z":"15c0f11d3fc4b3f7","name":"","pauseType":"delay","timeout":"4","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":120,"y":180,"wires":[["095efa33e8e7ca2a"]]},{"id":"c1c5aa4d46a165c5","type":"split","z":"15c0f11d3fc4b3f7","name":"","splt":"\\n","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"","x":630,"y":60,"wires":[["58e35b7807c9b092","dfc5843690a9476d"]]},{"id":"58e35b7807c9b092","type":"switch","z":"15c0f11d3fc4b3f7","name":"Chosen stations","property":"payload.id","propertyType":"msg","rules":[{"t":"eq","v":"2088","vt":"num"},{"t":"eq","v":"25148","vt":"num"},{"t":"eq","v":"156","vt":"num"},{"t":"eq","v":"167","vt":"num"},{"t":"eq","v":"235","vt":"num"},{"t":"eq","v":"946","vt":"num"},{"t":"eq","v":"815","vt":"num"},{"t":"eq","v":"2263","vt":"num"},{"t":"eq","v":"976","vt":"num"},{"t":"eq","v":"980","vt":"num"},{"t":"eq","v":"25185","vt":"num"}],"checkall":"true","repair":false,"outputs":11,"x":540,"y":280,"wires":[["2268b0ed56350566"],["2268b0ed56350566"],["2268b0ed56350566"],["2268b0ed56350566"],["2268b0ed56350566"],["2268b0ed56350566"],["2268b0ed56350566"],["2268b0ed56350566"],["f388aaacde3e75dc"],["f388aaacde3e75dc"],[]]},{"id":"b56273e5ea99c3fc","type":"inject","z":"15c0f11d3fc4b3f7","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"600","crontab":"","once":true,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":150,"y":120,"wires":[["caac60185af71f64"]]},{"id":"c843fa224c3d90f9","type":"debug","z":"15c0f11d3fc4b3f7","name":"debug 170","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":750,"y":380,"wires":[]},{"id":"2268b0ed56350566","type":"function","z":"15c0f11d3fc4b3f7","name":"Convert to message","func":"var kjede = msg.payload.brand;\nvar navn = msg.payload.name;\nconst diff = new Date().getTime() - msg.payload.prices.B95.lastUpdated;\nvar timer = Math.floor(diff/1000/60/60);\nvar minutter = Math.floor((diff/1000/60/60 - timer )*60);\nmsg.topic = kjede + ' ' + navn;\nmsg.payload['pris'] = msg.payload.prices.B95.price;\nmsg.payload['timer'] = timer;\nmsg.payload['minutter'] = minutter;\nmsg.payload['epoch'] = (msg.payload.prices.B95.lastUpdated / 1000);\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":780,"y":280,"wires":[["ca552240d225b271"]]},{"id":"ca552240d225b271","type":"change","z":"15c0f11d3fc4b3f7","name":"Remove unnecessary fields from array","rules":[{"t":"delete","p":"payload.prices","pt":"msg"},{"t":"delete","p":"payload.id","pt":"msg"},{"t":"delete","p":"payload.logo","pt":"msg"},{"t":"delete","p":"payload.name","pt":"msg"},{"t":"delete","p":"payload.brand","pt":"msg"},{"t":"delete","p":"payload.location","pt":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":490,"y":400,"wires":[["c843fa224c3d90f9","f61b2fc090523858"]]},{"id":"bd3b870b7b49c6c2","type":"md5","z":"15c0f11d3fc4b3f7","name":"MD5","fieldToHash":"shiftedToken","fieldTypeToHash":"msg","hashField":"md5Hash","hashFieldType":"msg","x":110,"y":300,"wires":[["3bc1810bb50310ce","29b1a398cccaf5a6"]]},{"id":"7c6ba7685c1bbfb6","type":"comment","z":"15c0f11d3fc4b3f7","name":"Show chosen stations with price and update time","info":"","x":260,"y":20,"wires":[]},{"id":"f61b2fc090523858","type":"mqtt out","z":"15c0f11d3fc4b3f7","name":"Send til Home Assistant","topic":"","qos":"","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"36159a16.2aa98e","x":790,"y":420,"wires":[]},{"id":"2daf93cf704c36b4","type":"mqtt in","z":"15c0f11d3fc4b3f7","name":"Oppdater bensinpriser ved oppstart av Home Assistant","topic":"Oppdater bensinpriser","qos":"2","datatype":"auto-detect","broker":"36159a16.2aa98e","nl":false,"rap":true,"rh":0,"inputs":0,"x":260,"y":60,"wires":[["caac60185af71f64"]]},{"id":"f388aaacde3e75dc","type":"debug","z":"15c0f11d3fc4b3f7","name":"debug 171","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":770,"y":340,"wires":[]},{"id":"7b6fe343aff9ceaa","type":"switch","z":"15c0f11d3fc4b3f7","name":"Finne stasjoner på navn","property":"payload.name","propertyType":"msg","rules":[{"t":"cont","v":"Åseral","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":830,"y":120,"wires":[["c2d1e13e56588a8a"]]},{"id":"cd85b29ad0d8b086","type":"switch","z":"15c0f11d3fc4b3f7","name":"Finne stasjoner på adresse","property":"payload.location","propertyType":"msg","rules":[{"t":"cont","v":"Mandal","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":840,"y":160,"wires":[["732f30ae5c2bfea3"]]},{"id":"dfc5843690a9476d","type":"switch","z":"15c0f11d3fc4b3f7","name":"Fjerne rene ladestasjoner","property":"payload.prices","propertyType":"msg","rules":[{"t":"nempty"}],"checkall":"true","repair":false,"outputs":1,"x":870,"y":60,"wires":[["7b6fe343aff9ceaa","cd85b29ad0d8b086"]]},{"id":"732f30ae5c2bfea3","type":"debug","z":"15c0f11d3fc4b3f7","name":"debug 172","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1070,"y":160,"wires":[]},{"id":"36159a16.2aa98e","type":"mqtt-broker","name":"Hytte-Pi","broker":"192.168.1.101","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closePayload":"","willTopic":"","willQos":"0","willPayload":""}] Og sånn ser det foreløpig ut i Home Assistant hos meg, jeg har gjort så det er den virkelige tiden siden oppdateringen som teller, at ikke tiden bare hopper framover hvert kvarter. I tillegg har jeg endret punktum til komma i kronebeløpet og laget en statistikkgraf. Jeg satte den i gang i dag morges, så det er ikke mye statistikk ennå, og ingen har endret seg. Til slutt la jeg inn en automasjon som reagerer når laveste bensinpris kommer under 19 kroner. Da får jeg en E-post til mobilen (som jeg alltid har med meg), og Aeotec Z-Wave-sirena i ganga lager skipsklokkelyd. Da er det på tide å kjøre kannene til stasjonen og fylle dem for båten! 😁1 poeng
-
1 poeng
-
Godt poeng, og takk for tipset dette vil gjøre løsningen min enda bedre! En PID-regulering med dynamisk effektstyring kan gi enda mer presis regulering, og siden jeg allerede har effektmåling kan jeg justere effekten gradvis i stedet for bare å slå av og på slik at temperaturen holder seg mer stabil uten at ovnen pendler unødvendig. Dette er absolutt verdt å teste ut og igjen takk for tipset 🙂1 poeng
-
Vet det ble en duplisering nå men tanken er å ta bort de gamle på litt sikt. Nå har jeg begge deler, både den gamle teite varianten og den nye riktigere...1 poeng
-
Bruk smartplugger som gir deg kontroll over strømeffekt og forbruk, også kjøper du den ovnen du vil ha uten å være begrenset av at den må være smart ;-)1 poeng
-
Gjort en quick and dirty fix... Legg inn denne: i stedet for den opprinnelige: [{"id":"c622a1c1b5d187fe","type":"function","z":"2447f70b5f1095ba","name":"List all stations & create flow.stations","func":"var brands = flow.get(\"brands\");\nvar statsRaw = flow.get(\"stationsRaw\");\n//flow.set(\"Stations\",msg.payload);\n//node.warn( \"pl.length: \" + statsRaw.length);\nvar arr = [];\nvar arr2 = [];\nvar obj2 = {}\nvar msg2 = {}\nvar i = 0;\nvar j = 0;\nfor (i = 0;i < statsRaw.length;i++){\n let obj = {}\n //if (i == 2150)i++;\n //if (i == 2302)i++;\n //if (i == 2305)i++;\n //if (i == 3512)i++;\n obj.id = statsRaw[i].id;\n obj.name = statsRaw[i].name || \"-\"\n // Find brand from brandId\n for (j = 0;j < brands.length;j++){\n if (Number(statsRaw[i].brandId) == Number(brands[j].id)){\n obj.brand = brands[j].name || \"-\"\n obj.logo = brands[j].pictureUrl || \"-\"\n //node.warn(i + \" \" + j + \" \" + brands[j].name);\n break;\n }\n }\n obj.location = statsRaw[i].location || \"-\"\n // Add prices, some stations miss prices, skip these\n var obj3 = {}\n let objFt = []\n let ftidStr = \"\";\n if (statsRaw[i].hasOwnProperty(\"prices\")){ // skip no-price stations\n for (j = 0;j < statsRaw[i].prices.length;j++){\n var ftid = statsRaw[i].prices[j].fuelTypeId;\n if (ftid == 1) ftidStr = \"D\";\n else if (ftid == 2) ftidStr = \"B95\";\n else if (ftid == 3) ftidStr = \"B98\";\n else if (ftid == 4) ftidStr = \"FD\";\n else ftidStr = \"-\";\n // New pricestructure 02.03.25\n objFt.push({\"fuelTypeID\":statsRaw[i].prices[j].fuelTypeId,\"type\":ftidStr,\"price\":statsRaw[i].prices[j].price,\"lastUpdated\":statsRaw[i].prices[j].lastUpdated});\n obj3.new = objFt;\n\n if (ftid == 1 && statsRaw[i].prices[j].price != 0){ \n obj3.D = {}\n obj3.D.price = statsRaw[i].prices[j].price;\n obj3.D.lastUpdated = statsRaw[i].prices[j].lastUpdated;\n obj3.D.type = \"D\";\n }\n if (ftid == 2 && statsRaw[i].prices[j].price != 0){ \n obj3.B95 = {}\n obj3.B95.price = statsRaw[i].prices[j].price;\n obj3.B95.lastUpdated = statsRaw[i].prices[j].lastUpdated;\n obj3.B95.type = \"B95\";\n } \n if (ftid == 3 && statsRaw[i].prices[j].price != 0){\n obj3.B98 = {}\n obj3.B98.price = statsRaw[i].prices[j].price;\n obj3.B98.lastUpdated = statsRaw[i].prices[j].lastUpdated;\n obj3.B98.type = \"B98\";\n }\n if (ftid == 4 && statsRaw[i].prices[j].price != 0){\n obj3.FD = {}\n obj3.FD.price = statsRaw[i].prices[j].price;\n obj3.FD.lastUpdated = statsRaw[i].prices[j].lastUpdated;\n obj3.FD.type = \"FD\";\n }\n }\n }//skip to here\n// console.log(obj3);\n obj.prices = obj3;\n\n \n arr.push(obj);\n}\nmsg2.payload = arr;\nflow.set(\"stationsPrepd\",arr);\nreturn msg2;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":280,"y":560,"wires":[["ee9831abc8e3a182"]]}] Dette gir noen nye felt i flow.stationsPrepd som du igjen kan hente ut med denne: [{"id":"eeb0ef3e1e4c1567","type":"inject","z":"2447f70b5f1095ba","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"[2088,25148,2263]","payloadType":"json","x":620,"y":1220,"wires":[["0d4e5a87fd3822c7"]]},{"id":"0d4e5a87fd3822c7","type":"function","z":"2447f70b5f1095ba","name":"List valgte stasjoner","func":"let selected = msg.payload;\nlet stats = flow.get(\"stationsPrepd\");\nlet arr = []\n\nfor (let i in selected){\n for (let j in stats){\n if (stats[j].id == selected[i]){\n for (let k in stats[j].prices.new){\n// node.warn(stats[j].name);\n// node.warn(stats[j].prices.new[k].type);\n// node.warn(stats[j].prices.new[k].price);\n// let dt = new Date(stats[j].prices.new[k].lastUpdated);\n// node.warn(dt.toLocaleString(\"nb-NO\"));\n }\n arr.push(stats[j]);\n }\n \n }\n}\n\nmsg.payload = arr;\nreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":860,"y":1220,"wires":[["88658fb3f9f8c6ae"]]},{"id":"88658fb3f9f8c6ae","type":"debug","z":"2447f70b5f1095ba","name":"debug 14","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1050,"y":1220,"wires":[]}] ...og hvis du fjerner kommentar (//) fra de 5 linjene i "List valgte stasjoner" så kommer resultatet direkte i loggen også... Edit#2: Da skal de være oppegående... Ser Esso Mandalskrysset har en del priser som ikke dukker opp i drivstoffappen, sannsynligvis strøm...1 poeng
-
Supert. Jeg ser der henger igjen noe litt hårete programmering fra gamle dager... Skal fikse litt opp i det om litt...1 poeng
-
Du har oppdaget remote home-assistant hvis du kjører en egen enhet på hytta? Sinnsykt praktisk å samle alt i en pålogging og skjerm.1 poeng
-
Nei, du må nok lage driveren. Ikke helt umulig, men litt risikabelt å fikle med siden det er udokumentert blind fikling inn i det aller helligste der minst en av funksjonene etter all sannsynlighet starter selvdestruksjonsekvensen. seriøst. Nyttige verktøy: Intels ASL+ kompilator. iasl. Inkludert i Debian-pakken acpica-tools https://github.com/mkottman/acpi_call. Pakket som acpi-call-dkms i Debian Eksempel på hvordan dekompilere DSDT for å se på hva som er tilgjengelig og kalle funksjoner der. Utøves med stor forsiktighet - firmware i en laptop gjør veldig mye rart og er vanligvis skrevet av idioter på crack: apt install acpi-call-dkms modprobe acpi-call cp /sys/firmware/acpi/tables/DSDT /tmp/ iasl -d /tmp/DSDT less /tmp/DSDT.dsl Her ser jeg f.eks denn blokken, som jeg er så heldig å allerede vite har noe med batteri/lading å gjøre Scope (\_SB.PCI0.LPC.EC.HKEY) { Method (PSSG, 1, NotSerialized) { Return (\PSIF (0x00, 0x00)) } Method (PSSS, 1, NotSerialized) { Return (\PSIF (0x01, Arg0)) } Method (PSBS, 1, NotSerialized) { Return (\PSIF (0x02, Arg0)) } Method (BICG, 1, NotSerialized) { Return (\PSIF (0x03, Arg0)) } Method (BICS, 1, NotSerialized) { Return (\PSIF (0x04, Arg0)) } Method (BCTG, 1, NotSerialized) { Return (\PSIF (0x05, Arg0)) } Method (BCCS, 1, NotSerialized) { Return (\PSIF (0x06, Arg0)) } Method (BCSG, 1, NotSerialized) { Return (\PSIF (0x07, Arg0)) } Method (BCSS, 1, NotSerialized) { Return (\PSIF (0x08, Arg0)) } Method (BDSG, 1, NotSerialized) { Return (\PSIF (0x09, Arg0)) } Method (BDSS, 1, NotSerialized) { Return (\PSIF (0x0A, Arg0)) } } Funksjonsnavnene er kryptiske, men det er et visst mønster. Slutter på G => get , Slutter på S => set. Interessant nok ser vi at alle samme kaller den samme funksjonen \PSIF med en id og et argument. Hvis vi av nysgjerrighet kikker litt lenger ned så ser vi hva den er Method (PSIF, 2, NotSerialized) { Return (SMI (0x14, 0x05, Arg0, Arg1, 0x00)) } SMI = System Management Interface. Så der har du magien. Men vi kan prøve et par av get-kallene ihvertfall. Må gjette argumentet, men her jeg så heldig at jeg vet at det er batteri 1 eller 2. Og jeg har bare 1. Så dermed (med echo "" for lesbarheten bare) root@miraculix:/home/bjorn# echo '\_SB.PCI0.LPC.EC.HKEY.BCTG 1' >/proc/acpi/call; cat /proc/acpi/call; echo "" 0x350 root@miraculix:/home/bjorn# echo '\_SB.PCI0.LPC.EC.HKEY.BCSG 1' >/proc/acpi/call; cat /proc/acpi/call; echo "" 0x35a Og så er jeg også så heldig at jeg vet at det bare er den laveste byten jeg er interessert i der, så dermed er svarene 0x50 og 0x5a. Eller 80 og 90 som var det jeg hadde som start og end threshold i prosent. Og jeg kan endre f.eks. stop til 85% med (ettersom alle disse fuksjonene bare tar ett argument så forsvinner magisk nok batterinummeret her): root@miraculix:/home/bjorn# echo '\_SB.PCI0.LPC.EC.HKEY.BCSS 0x55' >/proc/acpi/call; cat /proc/acpi/call; echo "" 0x0 Endringen kan jeg se igjen i driverens grensesnitt: root@miraculix:/home/bjorn# grep . /sys/class/power_supply/BAT0/charge_control_* /sys/class/power_supply/BAT0/charge_control_end_threshold:85 /sys/class/power_supply/BAT0/charge_control_start_threshold:80 Vel, der har du mer enn nok info til å skrive en ACPI-driver for Linux. Og vi har kanskje sporet av nok for i dag. Men håper det er underholdning i det minste1 poeng
-
Vet ikke hvordan på en HP, men den riktige måten er å lage en driver som snakker med ECen i laptopen og forteller den hva grensene skal være. Typisk har ECen ACPI og/eller WMI funksjoner for den slags. I Linux er det standardiserte og dokumenterte grensesnittet et par sysfs attributter. Dokumentasjon her: https://www.kernel.org/doc/html/latest/admin-guide/abi-testing.html#abi-sys-class-power-supply-supply-name-charge-control-end-threshold Dersom du har en driver som støtter dette så finner du dem under batteri-objektet i sysfs. Helt sikkert også i diverse GUI-verktøy på toppen, men det er jo mer krøkkete å forholde seg til. På min Stinkpad så har jeg: root@miraculix:/home/bjorn# ls -l /sys/class/power_supply/BAT0/charge_control_* -rw-r--r-- 1 root root 4096 Feb 10 18:14 /sys/class/power_supply/BAT0/charge_control_end_threshold -rw-r--r-- 1 root root 4096 Feb 10 18:14 /sys/class/power_supply/BAT0/charge_control_start_threshold root@miraculix:/home/bjorn# grep . /sys/class/power_supply/BAT0/charge_control_* /sys/class/power_supply/BAT0/charge_control_end_threshold:90 /sys/class/power_supply/BAT0/charge_control_start_threshold:80 Så dermed lader ECen batteriet til 90% og stopper der. Så kjører den maskinen på AC inntil batteriet har droppet til 80% før den begynner å lade igjen. Kan jo ta en del tid når den ikke bruker batteriet. Dette er grenser jeg har valgt og bare lagt inn i de filene der (vha sysfsutils, men det kunne jo like gjerne vært et par echo kommandoer i et boot script). Navnene på driverne som har implementert slikt forteller det meste om hvilke merker du kan forvente at det virker. Dessverre ikke HP ser det ut til: bjorn@miraculix:/usr/local/src/git/linux$ git grep -l charge_control_end_threshold drivers/ drivers/platform/x86/asus-wmi.c drivers/platform/x86/dell/dell-laptop.c drivers/platform/x86/fujitsu-laptop.c drivers/platform/x86/huawei-wmi.c drivers/platform/x86/lg-laptop.c drivers/platform/x86/msi-ec.c drivers/platform/x86/system76_acpi.c drivers/platform/x86/thinkpad_acpi.c drivers/platform/x86/toshiba_acpi.c Noe å tenke på neste gang du handler laptop... Evt er det jo sikkert mulig å implementere på HP også hvis man har tid og ork. Regner med at de har funksjonaliteten i WIndows, så det er jo "bare" å finne ut hva de magiske ACPI eller WMI besvergelsene er1 poeng
-
Jeg spurte noen som holder på med folie og fikk noen striper kuttet bredde av display 3M Scotchcal film series 40 Mulig noen er bedre egnet, og vet ikke hvordan det er å bytte ved slittasje, men har holdt i flere måneder nå( ble montert sensommeren) opprinnelig film sikkert fra produksjon av display som fulgte med ID lock var mer plastikkaktig men holdt lenge og var enkel å fjerne når jeg byttet andreas1 poeng
-
Er det noe slikt? https://www.hoiax.no/produkter/varmtvannsberedere/el-kassetter/heatex-elkassett-komplett Har noe lignende. 2 stk 3-fas varmeelementer på 6 kW. Termostat/koblingsboks Backer K11A. Disse varer 4-5 år, så brenner kontaktene i termostaten. Ny koster 3600 kr. Problemet er at termostaten kobler 100 ganger i døgnet, og det sliter på kontaktene som skal bryte 16A. Etter tredje gang bygde jeg en elektronisk kontaktor (SSR), termostaten bryter da bare 24V styrespenning. Har en Arduino for fjernstyring. Strømmåling gjør jeg med måletrafoer i sikringskapet.1 poeng
-
Det er ingen dumme spørsmål, det er alt for mange muligheter her til det. 🙂 Smart dimming av lys kan gjøres på to måter: A: Smarte lyspærer som styres av en smart knapp (jeg kaller det bevisst knapp og ikke bryter, da du ikke ønsker å koble fra strømmen til en smart pære, da er den ikke styrbar lenger). B: Smart dimmer som styrer "dumme" lamper/pærer. Hva som er beste løsning avhenger av hva du ønsker å gjøre, hvor mye penger du vil legge i dette i førte omgang, og dine egne meninger. Noen er sterke tilhengere av det ene, noen det andre. Dersom du ønsker å gjøre noe mer enn å skru av og på samt endre lysstyrken trenger du smarte pærer (selv om mange "dumme" LED pærer forandrer fargetemperatur når dimmes - kaldt lys på full effekt, varmere lys ved lavere effekt). Hvis du vil endre farge på lyset i rommet må du har smarte pærer. Smarte pærer styres av smarte knapper, f.eks. har IKEA flere smarte lys (f.eks. Trådfri serien) med tilhørende knapper som kan styre både lysstyrke og farge (og alle kan integreres direkte i Homey uten bruk av Ikeas egen HUB). Hvis du velger smarte pærer skal de IKKE kobles til en dimmer. De skal ha full spenning eller ingen spenning, ergo kobles til en bryter - eller kobles direkte uten bryter. Min anbefaling er å benytte en smart bryter som kan stilles inn til å operere i "detached mode". Dvs at bryteren ikke skrur av strømmen når du trykker på knappen, men heller sender et signal til den/de smarte pærene at de skal skru seg av/på. Jeg har så langt kun sett dette i form av "piller" (enheter elektrikeren kobler til inne i veggboksen og som kan styres både av smarthuset og av den vanlige lysbryteren de monteres bak), f.eks. Shelly og Sonoff. Aqara har nettopp lansert sin H2 lysbryter, som selv om den ikke direkte har denne modusen har en knapp som styrer releet av og på og en annen knapp som kan programmeres til hva du vil i smarthuset. Og siden den er smart kan du uansett skru på igjen strømmen fra smarthuset om noen har skrudd av lyset ved å trykke på knappen. Ang spm 2 så finnes det doble smarte brytere. Både Aqara (H2 finnes som 2-kanals bryter) og Namron fra Elektroimportøren. spm 3: To små laster kan normalt slå sammen og styres på en bryter, men hvorfor gjøre det når det finnes to-kanals smarte brytere? spm 4: Ja, to kanaler betyr at den kan styre to laster. Du velger selv hvilken løsning du ønsker basert på hva du vil oppnå. For min del har jeg etter hvert prioritert at alt skal kunne fungere også om smarthuset er ute av drift. Derfor bruker jeg primært smarte brytere og dimmere. Jeg har ikke selv sett behovet for styring av farge på lysene og er fornøyd med den endringen i varme i lyset som skjer når det dimmes. Og ikke glem at alt som skal ha fast tilkobling til elektrisk anlegg skal monteres av elektriker. Derfor bruker mange smarte pærer og batteridrevne knapper som de kan montere selv. Det kan være en enkel og rimelig måte å starte på, men ser du kostnader over tid er det dyrt med smarte pærer som må byttes etter få år sammenlignet med smarte dimmere/brytere som lever i 10+ år (regner jeg med, ingen av mine er eldre enn et par år så langt). Et lite tips hvis du vil begynne med smarte lyspærer er å montere impulsfjær under lokket i lysbryteren som styrer det aktuelle lyset og dermed bygge den om til en impulsbryter. Fjæren monteres slik at strømmen alltid er på der du har kobles til smarte pærer. Du har lov til å ta av deksler på fast installasjon, derfor er dette noe du har lov til å gjøre selv. Og familien vil raskt venne seg til at det ikke er mulig å skru av lyset lenger. Noen lamper. f.eks. Ikea sine, kan også konfigureres til å "Toggle" (endre status av/på) når strømmen skrus av og på. Dermed fungerer bryteren også til å skru lyset av og på om smarthuset ikke virker.1 poeng
-
Jeg har ikke merket slike problemer på mine ovner egentlig. Har til sammen 10 ovner på to ulike lokasjoner og de har stort sett fungert stabilt i flere år, bortsett en del rusk i noen perioder der Mill oppdaterte firmware og apper. Jeg styrer ovnene med lokalt REST API eller i noen tilfeller direkte på panelet. I starten hadde jeg en del tilfeller der noen av ovnene tilsynelatende på egen hånd justerte temperaturen helt umotivert, men stort sett alltid bare med 0.5 grader opp eller ned. Etter en stund gikk det opp for meg at dette bare skjedde hvis lokket over betjeningspanelet stod åpent. Min teori er at de lysende tallene på betjeningpanelet tiltrakk seg insekter i mørket, og disse trigget touch-knappene (de er ganske følsomme). Etter at jeg sørget for at alle lokk alltid var nede har det aldri skjedd igjen. Men det var aldri noen gang snakk om så store endringer som du det beskriver.1 poeng
-
Har klippet ut blank folie på 3 sorte låser jeg har og kjøpt nylig , det har funket optimalt. på tidligere låser som er skadet. jeg hadde opprinnelig folie fra fabrikken på i 1 år og når den ble slitt fjernet jeg denne. Iløpet av sommeren ble touchpanelet helt oppskraper. Fikk reklamert på varen og penger i retur.1 poeng
-
Jeg endret navn på den SSID som laget trøbbel men denne SSID var oppe og gikk likevel... Med appen "WiFi Analyzer" på telefonen fikk jeg opp MAC på aksesspunktet som laget trøbbel og selv om det etter signalstyrke kunne se ut til å være i gangen i hovedhuset fant jeg det på eldhusloftet: Et gammelt Ubiquiti aksesspunkt som ikke styres av UniFi... Litt pussig at jo nærmere Quislingen jeg var, jo dårligere ble signalstyrken... og da jeg gikk rundt og lette var jeg mindre enn 2 meter unna... Koblet ut dette og da forsvant denne SSID. Tilbakeførte SSIDnavn på opprinnelig nettverk og så langt ser det ut til at jeg er oppegående igjen... ...men jeg skjønner fremdeles ikke hvor 192.168.80.84 kommer fra... Antar det er det gamle aksesspunktet som har en "skjult" DHCP server... Noen ganger hjelper det bare å stille et spørsmål... 👍😁1 poeng
-
Jeg har tenkt rimelig likt og vurdert forskjellige multisensorer som passer i en elko ramme. Problemet blir at plasseringen ved lysbryteren sjelden er optimal for en bevegelse evt presence sensor. Derfor har jeg nylig kjøpt 3 stk Everything Presence Lite, etter at jeg så informasjon/reklame for den oppdaterte utgaven på youtube. Det finnes også en større versjon med flere sensorer, Everything Presence One. Begge med mulighet for flere sensorer. Det som gjorde at jeg bestilte nå var at de har fått ned kostnadene til forsendelse til andre land. Du skriver ikke Wifi, men jeg regner med at du mener ikke skybasert. Disse sensorene benytter ESPHome og dermed Wifi - men lokalt og med åpen kildekode har du full kontroll. Lite sensoren leveres standard med kun presence deteksjon (mm-bølge) og lyssensor. Den store sensoren har alt du ber om innebygget. Begge kan i tillegg utstyres med Co2 sensor. Siden du skal pusse opp kan du legge frem trekkerør og veggboks til optimal plassering av denne typen sensorer i de rommene du vil ha dem. Så må du velge hvor diskre du vil gjøre det, om du vil ha en USB strømforsyning inne i veggboksen med ledning ut, eller en mer tradisjonell USB strømforsyning med USB kontaktene på fronten. En siste mulighet, som jeg ikke har testet ut enda, er å ha felles strømforsyning for slike enheter og overføre 5v fra et sentralt punkt via egnede kabler i trekkerør til enhetene. Hvis huset er kompakt kan det fungere, men det blir for spenningsfall på mer enn den normale maks 5m avstanden på USB.1 poeng
-
Skal fornye litt og vurderer sterkt elko smartpir som kan bde dimmer manuelt og basert på sensor. sterkt https://elkosmart.elko.no/produkter/smartpir-med-multiwire-dimmer. Skulle jeg bygd nytt ville jeg nok også vurdert Heatit Z-Smoke som røykvarsler og sensor.1 poeng
-
Protokollen mellom styrepanelet og aggregatet(for K2/C2/UNI) er i realiteten Modbus som Sabesto seier. Flexit har implementer to nye modbus funksjonskoder, men det er det. CI66 er i realiteten kun ein Modbus server -> server, de har nok gjort det for å unngå problemer med to forskjellige modbus clienter på samme bus. Eg har startet å implementere dette for ESPHome, sjå https://github.com/MSkjel/esphome-flexit-modbus-server. Eg har til no kun implementert nokon få sensorer og settpunkt for modus og settpunkttemperatur. Eg trur det kan bli vanskeleg å bruke EW11 til å styre aggregatet. Det er selvfølgeleg mulig å lese ut dataen ved hjelp av EW11, om man vil.1 poeng
-
Hei igjen! Vedrørende Z2M støtte så jobber ikke Namron med dette, men vår underleverandør ser på muligheten (Her kan jeg ikke love noe og har ingen ETA) Mvh Pål - Namron0 poeng
Vinnerlisten er satt til Oslo/GMT+01:00