Hva har du automatisert i dag?

Burde være ganske rett frem. Les dokumentasjon og betydning av false/true på diverse sensorer osv på github.

Blir noenlunde slik vil jeg tro:

-home event (away)
IF (true)
Så alle sensorene på dører du mener skal være lukket og en false/true der og tror jeg (husker ikke, sjekke github)
Send push notification

Fruen har fått eget planterom - i den anledning er vekstlys under bordet styrt med develco zigbee plugg, ledstripene på 4000k er 24v, så kjøpte like godt en 30w ikea trådfri driver, og koblet dem på den, og google home er i hjørnet av bordet. Det som ikke er så synlig er et glasskap, med en 230V AC ledstripe limt rundt inni skapet, en vifte i bunn, og en USB luftfukter fra biltema. Disse forsynes av en forgrener, som er z-wave plugg på, slik at lys, fukter og vifte er på samtidig. Hun har også hengt opp to E27 vekstlys, som går på hver sin ikea plugg.

Alt dette er bunnet opp mot 2 scenebrytere, der den ene har 4 knapper. Den slår på lys under pulten, og resten i rommet hver for seg, og av såklart.
Videre står en scenebryter i stuen, som slår av/på alle lys utenom under pulten, OG 5stk ikea vekstlys på separate ikea plugger, i stuen :blush:

Taklyset er satt som eget rom, sammen med ovn/varmestyring slik at dette styres på bevegelse og temp mot et neo coolcam øye, uavhengig av resten.

9 Likes

Da har et av pappaperm prosjektene ferdigstilt :smiley: DIY Ambient Light til TV!
Styres av en RaspberryPi Zero og HDMI Capture “card”. RaspPi, strømplugg, hurtigkobling til LED stripe & USB hub er montert i egetdesignet boks som jeg 3D printet. Fornøyd med resultatet så langt, men litt småjusteringer gjenstår.
Satt opp kommunikasjon mellom software på RaspPi til Futurehome (virtual device) og Logitech Harmony via NodeRED.
D4107294-4A85-4CE1-BCBB-A0648DAD0E60 (1)





12 Likes

La oss få litt liv i denne tråden igjen :smiley:
Poster et “prosjekter” jeg har automatisert litt tilbake i tid, så blir ikke “idag” :sweat_smile:
forøvrig utvided jeg nylig med samme flow også for tørketrommel og oppvaskmaskin :slight_smile:

3 Likes

Custom notifications (egen app) som jeg også har testet ut;

Ser at det er mye opensource programmer som har integrert pushover, som gjør at man kan bruke den til flere andre prosjekter også - f.eks bruker jeg også pushover for notifikasjoner for 3D printeren :nerd_face:

3 Likes

Jeg har endelig fått lagt til mere Tibber data i FH.
Henter nå inn prisnivå og pris for hver time. Printer disse i timeline i appen og importerer pris for bruk i Grafana.

Har tenkt på muligheten å automatisere VVB og andre større strømkilder basert på dette, men syntes ikke kvaliteten på prisnivå dataen fra Tibber er god nok enda.


6 Likes

Nice. Vil du dele flowen hvor du får opp prisen fra tibber?

Her er den.
Den er nok ikke perfeksjonert, jeg er ikke voldsomt dreven i TP. Men den løser det jeg ønsker :slight_smile:

Du må erstatte “TIBBER_TOKEN” med din egen API key fra Tibber, du finner den ved å logge inn her: Tibber Developer

{
  "Id": "6CSKL7ssAXI3pOP",
  "ClassId": "hf1Ysemo50f5Fam",
  "Author": "",
  "Version": 0,
  "CreatedAt": "2021-08-23T22:02:03.755877004+02:00",
  "UpdatedAt": "2021-11-28T00:19:23.01432227+01:00",
  "Name": "Tibber: Hente prisinfo, hver time",
  "Group": "variables",
  "Description": "Kaller Tibber API og henter stømpris og prisnivå hver hele time.",
  "Nodes": [
    {
      "Id": "1",
      "Type": "time_trigger",
      "Label": "1min past each our",
      "SuccessTransition": "2",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "DefaultMsg": {
          "Value": "",
          "ValueType": ""
        },
        "Expressions": [
          {
            "Comment": "1 * * * *",
            "Comments": "",
            "Expression": "1 * * * *",
            "Name": ""
          }
        ],
        "GenerateAstroTimeEvents": false,
        "Latitude": 0,
        "Longitude": 0,
        "SunriseTimeOffset": 0,
        "SunsetTimeOffset": 0
      },
      "Ui": {
        "nodeType": "",
        "x": 43,
        "y": 226
      },
      "TypeAlias": "Time trigger"
    },
    {
      "Id": "2",
      "Type": "rest_action",
      "Label": "Get Energy Price Level from Tibber",
      "SuccessTransition": "25",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "Auth": {
          "ClientID": "",
          "ClientSecret": "",
          "Enabled": false,
          "GrantType": "password",
          "Password": "",
          "Scope": "",
          "Url": "http://",
          "Username": ""
        },
        "Headers": [
          {
            "Name": "Content-type",
            "Value": "application/json"
          },
          {
            "Name": "Authorization",
            "Value": "TIBBER_TOKEN"
          }
        ],
        "LogResponse": true,
        "Method": "POST",
        "RequestPayloadType": "json",
        "RequestTemplate": "{ \"query\": \"{viewer {homes {currentSubscription {priceInfo {current {total energy tax startsAt level}}}}}}\" }\n",
        "ResponseMapping": [
          {
            "IsVariableGlobal": true,
            "Name": "Level",
            "Path": "$.data.viewer.homes[0].currentSubscription.priceInfo.current.level",
            "PathType": "json",
            "TargetVariableName": "energy_level",
            "TargetVariableType": "string",
            "UpdateTriggerMessage": false
          }
        ],
        "Url": "https://api.tibber.com/v1-beta/gql"
      },
      "Ui": {
        "nodeType": "",
        "x": 109,
        "y": 417
      },
      "TypeAlias": "HTTP msg"
    },
    {
      "Id": "25",
      "Type": "transform",
      "Label": "transform tibber",
      "SuccessTransition": "26",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "Expression": "",
        "IsLVariableGlobal": true,
        "IsRVariableGlobal": false,
        "IsTargetVariableGlobal": false,
        "IsTargetVariableInMemory": true,
        "LVariableName": "energy_level",
        "RValue": {
          "Value": 0,
          "ValueType": "int"
        },
        "RVariableName": "",
        "Rtype": "var",
        "TargetVariableName": "energylevel_output",
        "TargetVariableType": "str_map",
        "Template": "    {\n      \"message_en\": \"Tibber pricelevel is now: {{ .Variable }}\",\n      \"message_no\": \"Tibber prisnivå er nå: {{ .Variable }}\",\n      \"sender\": \"flow\"\n    }",
        "TransformType": "template",
        "ValueMapping": [],
        "XPathMapping": []
      },
      "Ui": {
        "nodeType": "",
        "x": 214,
        "y": 599
      },
      "TypeAlias": "Transform"
    },
    {
      "Id": "26",
      "Type": "action",
      "Label": "Publish timeline",
      "SuccessTransition": "",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "pt:j1/mt:cmd/rt:app/rn:time_owl/ad:1",
      "Service": "time_owl",
      "ServiceInterface": "cmd.timeline.set",
      "Config": {
        "DefaultValue": {
          "Value": {
            "message_en": "--",
            "message_no": "--",
            "sender": "flow"
          },
          "ValueType": "str_map"
        },
        "IsVariableGlobal": false,
        "Props": {},
        "RegisterAsVirtualService": false,
        "VariableName": "energylevel_output",
        "VariableType": "str_map",
        "VirtualServiceGroup": "",
        "VirtualServiceProps": {}
      },
      "Ui": {
        "nodeType": "timeline_action",
        "x": 305,
        "y": 812
      },
      "TypeAlias": "Timeline"
    },
    {
      "Id": "27",
      "Type": "time_trigger",
      "Label": "2min past each our",
      "SuccessTransition": "28",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "DefaultMsg": {
          "Value": "",
          "ValueType": ""
        },
        "Expressions": [
          {
            "Comment": "2 * * * *",
            "Comments": "",
            "Expression": "4 * * * *",
            "Name": ""
          }
        ],
        "GenerateAstroTimeEvents": false,
        "Latitude": 0,
        "Longitude": 0,
        "SunriseTimeOffset": 0,
        "SunsetTimeOffset": 0
      },
      "Ui": {
        "nodeType": "",
        "x": 375,
        "y": 239
      },
      "TypeAlias": "Time trigger"
    },
    {
      "Id": "28",
      "Type": "rest_action",
      "Label": "Get Energy Price from Tibber",
      "SuccessTransition": "31",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "Auth": {
          "ClientID": "",
          "ClientSecret": "",
          "Enabled": false,
          "GrantType": "password",
          "Password": "",
          "Scope": "",
          "Url": "http://",
          "Username": ""
        },
        "Headers": [
          {
            "Name": "Content-type",
            "Value": "application/json"
          },
          {
            "Name": "Authorization",
            "Value": "TIBBER_TOKEN"
          }
        ],
        "LogResponse": true,
        "Method": "POST",
        "RequestPayloadType": "json",
        "RequestTemplate": "{ \"query\": \"{viewer {homes {currentSubscription {priceInfo {current {total energy tax startsAt level}}}}}}\" }\n",
        "ResponseMapping": [
          {
            "IsVariableGlobal": true,
            "Name": "price_level",
            "Path": "$.data.viewer.homes[0].currentSubscription.priceInfo.current.total",
            "PathType": "json",
            "TargetVariableName": "price_level",
            "TargetVariableType": "float"
          }
        ],
        "Url": "https://api.tibber.com/v1-beta/gql"
      },
      "Ui": {
        "nodeType": "",
        "x": 417,
        "y": 427
      },
      "TypeAlias": "HTTP msg"
    },
    {
      "Id": "30",
      "Type": "action",
      "Label": "Publish timeline",
      "SuccessTransition": "",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "pt:j1/mt:cmd/rt:app/rn:time_owl/ad:1",
      "Service": "time_owl",
      "ServiceInterface": "cmd.timeline.set",
      "Config": {
        "DefaultValue": {
          "Value": {
            "message_en": "--",
            "message_no": "--",
            "sender": "flow"
          },
          "ValueType": "str_map"
        },
        "IsVariableGlobal": false,
        "Props": {},
        "RegisterAsVirtualService": false,
        "VariableName": "energyprice_output",
        "VariableType": "string",
        "VirtualServiceGroup": "",
        "VirtualServiceProps": {}
      },
      "Ui": {
        "nodeType": "timeline_action",
        "x": 584,
        "y": 815
      },
      "TypeAlias": "Timeline"
    },
    {
      "Id": "31",
      "Type": "transform",
      "Label": "transform tibber price",
      "SuccessTransition": "30",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "Expression": "",
        "IsLVariableGlobal": true,
        "IsRVariableGlobal": false,
        "IsTargetVariableGlobal": false,
        "IsTargetVariableInMemory": true,
        "LVariableName": "price_level",
        "RValue": {
          "Value": 0,
          "ValueType": "int"
        },
        "RVariableName": "",
        "Rtype": "var",
        "TargetVariableName": "energyprice_output",
        "TargetVariableType": "str_map",
        "Template": "    {\n      \"message_en\": \"Tibber price is now: {{ .Variable }} NOK\",\n      \"message_no\": \"Tibber pris er nå: {{ .Variable }} NOK\",\n      \"sender\": \"flow\"\n    }",
        "TransformType": "template",
        "ValueMapping": [],
        "XPathMapping": []
      },
      "Ui": {
        "nodeType": "",
        "x": 486,
        "y": 601
      },
      "TypeAlias": "Transform"
    },
    {
      "Id": "34",
      "Type": "transform",
      "Label": "Write price request to Influx",
      "SuccessTransition": "35",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "Expression": "",
        "IsLVariableGlobal": true,
        "IsRVariableGlobal": false,
        "IsTargetVariableGlobal": false,
        "IsTargetVariableInMemory": true,
        "LVariableName": "price_level",
        "RValue": {
          "Value": 0,
          "ValueType": "int"
        },
        "RVariableName": "",
        "Rtype": "var",
        "TargetVariableName": "price_request_output",
        "TargetVariableType": "object",
        "Template": "{\n    \"proc_id\": 2,\n    \"bucket\": \"gen_default\",\n    \"dp\": [\n      {\n        \"name\": \"current_price\",\n        \"tags\": {},\n        \"fields\": {\n          \"val\": {{ .Variable }}\n        }\n      }\n    ]\n}",
        "TransformType": "template",
        "ValueMapping": [],
        "XPathMapping": []
      },
      "Ui": {
        "nodeType": "",
        "x": 758,
        "y": 511
      },
      "TypeAlias": "Transform"
    },
    {
      "Id": "35",
      "Type": "action",
      "Label": "Write price to Influx",
      "SuccessTransition": "",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "pt:j1/mt:cmd/rt:app/rn:ecollector/ad:1",
      "Service": "ecollector",
      "ServiceInterface": "cmd.tsdb.write_data_points",
      "Config": {
        "DefaultValue": {
          "Value": "",
          "ValueType": "object"
        },
        "IsVariableGlobal": false,
        "Props": {},
        "RegisterAsVirtualService": false,
        "ResponseToTopic": "",
        "VariableName": "price_request_output",
        "VariableType": "object",
        "VirtualServiceGroup": "",
        "VirtualServiceProps": {}
      },
      "Ui": {
        "nodeType": "",
        "x": 837,
        "y": 820
      },
      "TypeAlias": "Action"
    },
    {
      "Id": "36",
      "Type": "time_trigger",
      "Label": "Every 3 min past hour",
      "SuccessTransition": "34",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "DefaultMsg": {
          "Value": "",
          "ValueType": ""
        },
        "Expressions": [
          {
            "Comments": "",
            "Expression": "3 * * * *",
            "Name": ""
          }
        ],
        "GenerateAstroTimeEvents": false,
        "Latitude": 0,
        "Longitude": 0,
        "SunriseTimeOffset": 0,
        "SunsetTimeOffset": 0
      },
      "Ui": {
        "nodeType": "",
        "x": 660,
        "y": 237
      },
      "TypeAlias": "Time trigger"
    }
  ],
  "Settings": null,
  "IsDisabled": false,
  "IsDefault": false,
  "ParallelExecution": "parallel"
}
4 Likes

Ikke automatisert noe, men montert en galaxy tab i gangen med kalender, værvarsel og futurehome :slight_smile:
Trenger bare darkmode på futurehome nå


5 Likes

Kult!

Er det så enkelt som to apper side-by-side på en Android tablet, eller er det et grensesnitt du kan justere på og “bygge” som du vil?

Futurehome appen er åpnet i pop-up view også ligger kalender og værvarsel som widgets på start skjermen :slight_smile: Kan også kjøre splitscreen, men da får man bare to apper samtidig, og jeg fant ingen måte å få både Yr og Kalender i samme app :slight_smile:

3 Likes

Tøft. Hvor er strømtilførsel?

Kjøpte en holder med plass til lader (https://smarthomemount.com/)
Bak boksen har jeg en vanlig skjultboks med en usb strømtilførsel inni :slight_smile:

3 Likes

I did some heat control work on an Adax oven in order to automate a quite unpredictable situation. My daughter (20) follows no regular schedule - part time shift work, school, (almost) boyfriend, and general active social live made it so we were wasting a lot of heat, especially when she opened the window at night while the heat was on directly under the window.

I wanted to make it so she doesn’t have to think about heater control, but that normal actions control what happens.

Solution is:

Use Adax app to turn the heater off while in Adax’s away mode at 24:00, and then off again in Adax’s sleep mode at 03:00 (in case she overrides it or comes home very late). Back on at 21 degrees at 12:00. I do this because she opens her window to get it cold in the room at night.

If she opens the window, it reduces the temp to 5 degrees (not off due to FH app limitations), and it goes back to the set temperature when the window is closed.

I set up a virtual button based on the tobias sleep mode to show if Julia is home. If she’s “home” then it is set at 21 degrees until 22:00, when it reduces to 19 degrees. If she’s not home then, it reduces the temp to 18 degrees, waits 60 minutes, and then goes to 12 degrees. The temperatures selected match her habits - for example if she’s home at 2200, she’s usually under the covers with phone or TV. If she’s not home, 18 keeps it from getting too cold, but if she’s not home by 2300, then it’s practically off and she mostly just going to bed after work or “socializing.”

There’s a Philips dimmer switch that she can hit to turn the virtual “Julia Home” switch on or off, and it’s by her bed, so when she hits it it turns on the lights, sets the temp to 21 (regardless of time), and then off turns off the light and temp to 12 degrees.

and here’s the “Julia Home Mode” button and actions.

2 Likes

Får opp denne feilmeldingen i loggen når jeg prøver å importere den: «can’t unnmarshal imported flow 1. Err: unexpected end of JOSN input” Hva betyr det?

Lenge siden noe har vært postet i denne tråden.
Litt synd egentlig, for jeg tror det mange kule løsninger rundt omkring.
Jeg har lenge gått å irritert meg over manglende mulighet til å få varsel dersom det blir strømbrudd på f.eks kjøkkenet mens man er borte.
Kom dermed etter litt tenking, på en god ide.
Jeg hadde en dør/vindu sensor liggende i støvet. Fjernet magnetsensoren fra denne og loddet på et 5v relé, som er koblet til strøm via en mobillader.
Voila! Sensoren er lukket når den får strøm, og åpen dersom strømmen er borte.
Laget en enkel flow som sender push-varsel dersom strømbrudd :slight_smile:
Hadde vært ekstra kult å kunne velge ‘strømdetektor’ på sensoret og at denne hadde dukket opp under ‘sikkerhet’ i appen, men det blir vel vanskelig eller? @espen

Relé har jeg funnet her: 1-polet DIL-relé 5 V DC - Releer | Kjell.com
Boks her: Innbyggingsboks 82x51x32 mm - Elektronikkbokser | Kjell.com




2 Likes

Hei, @KetilH :smiley:
Skikkelig kult prosjekt og veldig gøy at du blåser liv i denne tråden igjen!
Oppfordrer alle kloke smarthoder der ute til å poste sine løsninger også. Dette kan være til stor inspirasjon for både brukere og oss i Futurehome.
Det hadde også vært gøy å se noen bilder av prosjektet ditt, Ketil.

Når det kommer til å velge egen enhetstype på denne så blir det dessverre litt vanskelig. Det krever at vi legger til ny type i kjerneprogramvaren, designer ikoner, legger inn en gitt funksjonalitet osv.

1 Like

Skal få tatt noen bilder :+1:
Har også forståelse for dette med enhetstype

1 Like

Jrg brukte astrofunksjonen jeg styrer utelysene med til å lagre global variabel til true når det er mørkt og false når det er lyst slik at jeg kan aktivere kveldscene når jeg trykker home forutsatt at det er mørkt ute. Sparer meg et ekstra trykk hvis jeg kommer hjem etter solnedgang

Har også laget en liten fiffig en på yale dørlås slik at den låses ved aktivering av sleep, gjør ingenting ved når huset står i hjemme, men ved away, sleep eller vacation vil døra låses automatisk når jeg lukker den. Nå mangler bare geofencing egentlig :blush:

4 Likes