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

SveinHa

Medlemmer
  • Innlegg

    1 504
  • Ble med

  • Besøkte siden sist

  • Dager vunnet

    71

Alt skrevet av SveinHa

  1. Kan du dele til flowen til oss som ikke er på Fakebook?
  2. 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.
  3. 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\", \"x@x.x\");\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}]
  4. 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?
  5. 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...
  6. 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.
  7. 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).
  8. 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.
  9. 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.
  10. Jeg tror @Christoffer er inne på det riktige her. Prøv dette eksempelet (med dine devicer):
  11. 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...
  12. 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...
  13. 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.
  14. 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...
  15. 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...
  16. Jeg ligger vel også på et år og vel så det...
  17. Nei. Har hatt HS4 oppe og gå KUN for Doorman (styrt fra NodeRed) men nå har HS4/Verisure gitt seg og...
  18. Takk for info. Jeg har ikke merket den og nodene fungerer for meg.
  19. Også hendig å lagre Dashboard chart i tilfelle restart med Persist in/out nodene, spesielt de trendene som går over lang tid: Brukes slik:
  20. 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/
  21. Det var slik jeg trodde det skulle være også men litt merkelig at ny DNS løste problemet...
  22. De siste dagene har jeg slitt mer og mer med hjemmenettet, dårlig respons, enkelte maskiner faller helt ut og kan ikke pinges til/fra. Det har utviklet seg over tid men toppet seg i forgårs. Har ikke gjort noe med konfigurering av nettet på evigheter hen kikket gjennom oppsettet uten å finne noe stort. Netter består av: Altibox i bromodus 5 stk Deco nooder, de fleste kablet, en enhet i Rutermodus kablet til Altibox De fleste enheter som kan kables er kablet men der er vel et par titalls WiFi enheter. Jeg hadde en IP-ping-jobb gående mellom 2 lokale maskiner og den hadde både 20 og 30 ganger for lang responstid men i det øyeblikket jeg restartet Deco-nettet ble ping-responsen helt normal i de få sekundene før WiFi falt helt ut for så å bli dårlig igjen når nettet kom opp igjen. Det fikk meg til å tenke DNS problem selv om ping mellom IP adresser ikke burde ha behov for DNS. Jeg har hatt flere forskjellige DNS servere i Deco, både Google og andre uten at jeg har merket noen forskjell på de. Uansett, jeg gjorde et forsøk med å sette opp Pi-Hole på en virtuell Ubuntu maskin og sette den som DNS server i DHCP oppsettet i Deco og plutselig var der full respons i nettet mitt igjen... De fleste enhetene fant den nye DNS serveren av seg selv men noen få måtte restartes. Nå er der jo også flere i min omgangskrets som har erfart lignende de siste dagene og jeg tenker litt på at vi nå offisielt har 100% overvåking av nettverkstrafikk i Norge (vi har vel hatt det lenge men nå er det blitt offisielt). Ekstra overvåking gir ekstra trafikk... https://steigan.no/2023/03/total-overvaking-av-nordmenn-i-lopet-av-2023/
  23. (forbruk time 0 * strømpris) + (forbruk time 1 * strømpris) osv Eller fortløpende (kjøres 1 gang når timen skifter): kWh += ((totalforbruk nå - totalforbruk forrige time) * strømpris) totalforbruk forrige time = totalforbruk nå Eksempel i NodeRed, ikke testet men bør ikke være så langt unna... Forutsetninger: kWh teller kommer inn som msg.payload.energy Strømprisen nå finnes i flow variabel "Strompris". Strømprisen kan jo gjerne være inkl nettleie men strømstøtten blir litt vanskeligere med dagens modell... Jeg lagrer råprisen i en tabell og legger på nettleie og strømstøtte når jeg henter ut data igjen men da baller det jo litt på seg... Funksjonsblokk: var kWhTeller = Number(msg.payload.energy); var pris = flow.get("Strompris")||1 var kWhForrige = context.get("kWhForrige")||0 var KrTotal = context.get("KrTotal") || 0 var KrNaa = (kWhTeller - kWhForrige) * pris; KrTotal += KrNaa; context.set("kWhForrigeTime", kWhTeller); context.set("kWhForrigeTime", kWhTeller); context.set("KrTotal", KrTotal); msg.payload = KrTotal; return msg; Totalpris lagres i context og sendes ut som msg.payload
×
×
  • 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.