• 0 Posts
  • 26 Comments
Joined 6 months ago
cake
Cake day: January 22nd, 2026

help-circle
  • I use KeePassXC + Strongbox (iOS) and sync it with Syncthing. I have a server always running so if I save a change on my computer, it will always be synced to the server. I use an iPhone 13 so I have to use möbius sync and it is not perfect, I have to manually open the app to make sure it syncs (something iOS background usage something). I also have an old Android phone that also syncs my kbdx file. You could have a RPI Zero (or any other kind computer) as a cheep backup solution just for Syncthing.






  • any use would mean a tag

    So when I write code, I regularly ask an LLM how to do things. A few examples from my history is how I could overlap rows when generating PDF files (have a library for this), how I could assign an empty Char and to create a singleton class. A LLM never changes any of my files, I use it as super-search-engine.

    Would that constitute an AI tag?









  • Sharing a workflow requires a paid plan but could should be able to paste this in the editor to get the same effect.

    I made two different sample flows, on that call the api and responds with directly with the response data (transformed). The other workflow is to same the data in a data table, and call the weather api on a schedule. You could even use ntfy and send notifications on a schedule if it will rain within an hour.

    Edit the nodes to suite your need (URL, content of response etc).

    n8n sample workflow (copy and paste in n8n's editor)
    {
      "nodes": [
        {
          "parameters": {
            "url": "https://opendata-download-metfcst.smhi.se/api/category/snow1g/version/1/geotype/point/lon/16.158/lat/58.5812/data.json",
            "options": {}
          },
          "type": "n8n-nodes-base.httpRequest",
          "typeVersion": 4.4,
          "position": [
            656,
            336
          ],
          "id": "d47a17c9-9bc7-448c-841a-f3b2d787b2cb",
          "name": "Sample weather JSON data"
        },
        {
          "parameters": {
            "jsCode": "let output = [];\n\nfor (const item of $input.first().json.timeSeries) {\n  output.push({\n    Time: item.time,\n    \"Current temperature\": item.data.air_temperature + ' °C'\n    // Add more as needed\n  });\n}\n\nreturn output;\n\n"
          },
          "type": "n8n-nodes-base.code",
          "typeVersion": 2,
          "position": [
            880,
            240
          ],
          "id": "cf4f11a6-0ecc-4e96-afcb-a7903113da19",
          "name": "Convert json to array"
        },
        {
          "parameters": {
            "mode": "raw",
            "jsonOutput": "={\n  \"Time\": {{ $json.timeSeries[0].time }},\n  \"Current temperature\": {{ $json.timeSeries[0].data.air_temperature }},\n}\n",
            "options": {}
          },
          "type": "n8n-nodes-base.set",
          "typeVersion": 3.4,
          "position": [
            880,
            432
          ],
          "id": "2f3765ba-6ee5-44b7-ac45-c5a407ed43e9",
          "name": "Manual mapping of one item",
          "disabled": true
        },
        {
          "parameters": {
            "options": {}
          },
          "type": "n8n-nodes-base.respondToWebhook",
          "typeVersion": 1.5,
          "position": [
            1104,
            240
          ],
          "id": "badd76a3-2920-4592-baa6-5202b4badba0",
          "name": "Respond to Webhook"
        },
        {
          "parameters": {
            "operation": "upsert",
            "dataTableId": {
              "__rl": true,
              "mode": "list",
              "value": ""
            },
            "columns": {
              "mappingMode": "defineBelow",
              "value": {},
              "matchingColumns": [],
              "schema": [],
              "attemptToConvertTypes": false,
              "convertFieldsToString": false
            },
            "options": {}
          },
          "type": "n8n-nodes-base.dataTable",
          "typeVersion": 1.1,
          "position": [
            1104,
            16
          ],
          "id": "c76d9dfa-9ec1-421f-a96b-d1a65efb0dd7",
          "name": "insert (or update if exists) table with data"
        },
        {
          "parameters": {
            "content": "Create the table first, then edit and select how to map the fields\n\n",
            "height": 224,
            "width": 320
          },
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            992,
            -48
          ],
          "typeVersion": 1,
          "id": "51347b11-fcb8-49db-bd17-405ec8719ec0",
          "name": "Sticky Note"
        },
        {
          "parameters": {
            "jsCode": "let output = [];\n\nfor (const item of $input.first().json.timeSeries) {\n  output.push({\n    Time: item.time,\n    \"Current temperature\": item.data.air_temperature + ' °C'\n    // Add more as needed\n  });\n}\n\nreturn output;\n\n"
          },
          "type": "n8n-nodes-base.code",
          "typeVersion": 2,
          "position": [
            880,
            16
          ],
          "id": "3967c4c5-5443-40d2-b1fe-830aa9327118",
          "name": "Convert json to array1"
        },
        {
          "parameters": {
            "url": "https://opendata-download-metfcst.smhi.se/api/category/snow1g/version/1/geotype/point/lon/16.158/lat/58.5812/data.json",
            "options": {}
          },
          "type": "n8n-nodes-base.httpRequest",
          "typeVersion": 4.4,
          "position": [
            656,
            16
          ],
          "id": "f0043f80-c940-43cf-a5ef-2f7fe6dcc6a7",
          "name": "Sample weather JSON data1"
        },
        {
          "parameters": {
            "path": "1572b231-edc5-4516-935c-f205b737c5d2",
            "responseMode": "responseNode",
            "options": {}
          },
          "type": "n8n-nodes-base.webhook",
          "typeVersion": 2.1,
          "position": [
            432,
            336
          ],
          "id": "30953c4e-7627-4646-8b8d-ca46cc06c841",
          "name": "Webhook - Respond after API call",
          "webhookId": "1572b231-edc5-4516-935c-f205b737c5d2"
        },
        {
          "parameters": {
            "rule": {
              "interval": [
                {
                  "field": "minutes"
                }
              ]
            }
          },
          "type": "n8n-nodes-base.scheduleTrigger",
          "typeVersion": 1.3,
          "position": [
            448,
            16
          ],
          "id": "e242dea7-dc3c-4c0a-9630-786bf2a39b8a",
          "name": "Schedule to get weather data"
        },
        {
          "parameters": {
            "path": "1572b231-edc5-4516-935c-f205b737c5d2",
            "responseMode": "responseNode",
            "options": {}
          },
          "type": "n8n-nodes-base.webhook",
          "typeVersion": 2.1,
          "position": [
            448,
            -240
          ],
          "id": "1c1ac8d1-5f64-4bab-a3ac-20f223b1411e",
          "name": "Webhook - respond with table data",
          "webhookId": "1572b231-edc5-4516-935c-f205b737c5d2"
        },
        {
          "parameters": {
            "operation": "get",
            "dataTableId": {
              "__rl": true,
              "mode": "list",
              "value": ""
            }
          },
          "type": "n8n-nodes-base.dataTable",
          "typeVersion": 1.1,
          "position": [
            656,
            -240
          ],
          "id": "7433815b-229c-4ad8-88ce-2bcff688ece5",
          "name": "Get row(s)"
        },
        {
          "parameters": {
            "options": {}
          },
          "type": "n8n-nodes-base.set",
          "typeVersion": 3.4,
          "position": [
            864,
            -240
          ],
          "id": "76cd6bfe-da95-41c0-a3ee-812956eab79f",
          "name": "Edit Fields"
        },
        {
          "parameters": {
            "options": {}
          },
          "type": "n8n-nodes-base.respondToWebhook",
          "typeVersion": 1.5,
          "position": [
            1072,
            -240
          ],
          "id": "3c83ebc3-2c09-4d80-8278-e325237ae0e2",
          "name": "Respond to Webhook1"
        },
        {
          "parameters": {
            "content": "No code behind these nodes, only a skeleton sample for the workflow could look like",
            "height": 208,
            "width": 944
          },
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            384,
            -304
          ],
          "typeVersion": 1,
          "id": "db35642a-04dd-427b-9a21-d4ad64dd5522",
          "name": "Sticky Note1"
        },
        {
          "parameters": {
            "content": "## Via data tabel\n",
            "height": 592,
            "width": 1088,
            "color": 3
          },
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            288,
            -384
          ],
          "typeVersion": 1,
          "id": "877a2308-c70f-4b9e-8ef7-5dea94a812b8",
          "name": "Sticky Note2"
        },
        {
          "parameters": {
            "content": "## Direct response from remote API",
            "height": 400,
            "width": 1088,
            "color": 5
          },
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            288,
            224
          ],
          "typeVersion": 1,
          "id": "d06d7c02-a8eb-494b-8d10-142fb2c04037",
          "name": "Sticky Note3"
        }
      ],
      "connections": {
        "Sample weather JSON data": {
          "main": [
            [
              {
                "node": "Convert json to array",
                "type": "main",
                "index": 0
              },
              {
                "node": "Manual mapping of one item",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Convert json to array": {
          "main": [
            [
              {
                "node": "Respond to Webhook",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Convert json to array1": {
          "main": [
            [
              {
                "node": "insert (or update if exists) table with data",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Sample weather JSON data1": {
          "main": [
            [
              {
                "node": "Convert json to array1",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Webhook - Respond after API call": {
          "main": [
            [
              {
                "node": "Sample weather JSON data",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Schedule to get weather data": {
          "main": [
            [
              {
                "node": "Sample weather JSON data1",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Webhook - respond with table data": {
          "main": [
            [
              {
                "node": "Get row(s)",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Get row(s)": {
          "main": [
            [
              {
                "node": "Edit Fields",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Edit Fields": {
          "main": [
            [
              {
                "node": "Respond to Webhook1",
                "type": "main",
                "index": 0
              }
            ]
          ]
        }
      },
      "pinData": {},
      "meta": {
        "instanceId": "139fc1c0283616d9fae3813879a161cf8e8e0992eea7a9e87dc980c7d4ed97ec"
      }
    }