Temperatur Sensor Alarm

Hallo zusammen. Idee :hugs::face_with_hand_over_mouth:

Frage: Gibt es eine Möglichkeit, den DS Sensoren einen Alarm zu setzen?

Beispiel: Ich habe im Gaskasten einen DS Sensor verbaut, damit ich die Info habe, wie warm es da drinnen wird. Super wäre, wenn ich da einen Alarm auswählen kann, das wenn der Wagen ungünstig zur Sonne steht und sagen wir mal der Alarm auf 40Grad eingestellt ist, da ein kleines optisches Signal (roter Punkt / Warndreieck / beim entsprechenden Sensor) in der Pekaway App und/ oder auch im Dashboard sichtbar wird? Damit man weiss, bevor man die Temperaturen anschaut: Ah okay, da gibt es ein Temp. Problem.

Vielleicht sogar ins OS dazu nimmt, und man diese Funktion bei den Temp. Sensoren anwählen kann, wenn man sie brauchen würde.

Das habe ich im System so noch nicht gesehen, da müsste man was bauen.

1 Like

Beispiel zum Verständnis:

Hier einen Aus/ Ein Schalter bei diesen Sensoren drauf. Mit dem unten beschriebenen Temperaturbereich

Wo dann in der Pekaway App oder auf dem Pekaway Display so eine Warnung (Roter Punkt, Roter Rahmen, etc.) sichtbar wird, und man weiss, man sollte da mal schnell nachgehen, wo der kritische Temperaturwert erreicht wird.

Inwiefern man das auch für Ruuvi Sensoren anlegen kann, wäre sicher unter Umständen auch von Vorteil. Einfach mal so als Idee. :hugs::face_with_hand_over_mouth:

Weder das eine noch das andere ist möglich, wir haben weder Zugriff auf die App noch aufs Display. En der App wäre das über user daten möglich, an die kommst du, wenn du auf dem Homescreen unten auf Betriebszeit klickst.
Oder du schickst dir Nachrichten via Telegram, WhatsApp und Mail soll wohl auch gehen. Warnmeldung auf dem nodered Dashboard sollte auch funktionieren

@ahtdf Okay Danke :folded_hands: War nur so ein Gedanke oder Furz von mir :face_with_hand_over_mouth:.

Aber vielleicht mal in ein OS und App Update dazu geben vielleicht. @Karl ?

Danke allen.

Also nur ein Punkt, fände ich jetzt nicht so wichtig, ich mag langfristig einen Summer piepser verbauen, den ich aktivieren wenn z.b. an meiner Wasserversorgung Wasser austritt, ich hab da einen Zigbee Bodenlecksensor den ich im Wasserversorgungbereich (wasserpumpe/Boiler und unter der Dusche hinlegen möchte… über verschiedene lange/Anzahl Töne kann man dann schonmal vorab erahnen was es ist, z.b Wasseraustritt, Kühlschrank zu warm, Akkus zu leer usw.

Zusätzlich noch eine Meldung per WhatsApp oder besser wie bei mir Telegramm…

1 Like

Ich hab da mal was vorbereitet :wink:
Ist jetzt nur für einen Alarm, aber das ist ja einfach zu kopieren und für einen 2. oder 3. Alarm zu erweitern. erst mal ganz ohne Schick Schnack wie Hysterese oder ähnliches. und es ist als Max nund nicht als Min Alarm ausgelegt. Da ich an dem System keine fühler habe habe ich die Temperatur mit den injekt Nodes geschrieben. am Link Out kommt true oder false zum weiterverarbeiten.

[
    {
        "id": "da40f7655111191a",
        "type": "tab",
        "label": "Temperaturalarm userflow",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "d1c5dcb5d483adf8",
        "type": "ui_ui_control",
        "z": "da40f7655111191a",
        "name": "",
        "events": "change",
        "x": 140,
        "y": 200,
        "wires": [
            [
                "5291520995c21c03"
            ]
        ]
    },
    {
        "id": "5291520995c21c03",
        "type": "function",
        "z": "da40f7655111191a",
        "name": "check tab",
        "func": "if (msg.payload == \"change\" && msg.name == \"Meine Konfig\") {\n    msg.topic = \"changeTab\"\n    return msg;\n}",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 280,
        "y": 200,
        "wires": [
            [
                "5ee590d9c43fc575",
                "80d7b2dcdd8f781c"
            ]
        ]
    },
    {
        "id": "5ee590d9c43fc575",
        "type": "file in",
        "z": "da40f7655111191a",
        "name": "",
        "filename": "pekaway/tempsensor_alarm1",
        "filenameType": "str",
        "format": "utf8",
        "chunk": false,
        "sendError": false,
        "encoding": "none",
        "allProps": false,
        "x": 520,
        "y": 200,
        "wires": [
            [
                "80208a5d09ac3d04"
            ]
        ]
    },
    {
        "id": "80208a5d09ac3d04",
        "type": "ui_dropdown",
        "z": "da40f7655111191a",
        "name": "Tempsensor Al1",
        "label": "",
        "tooltip": "Sensor für Temperaturalarm1",
        "place": "Sensor",
        "group": "35cee91dd885fdfd",
        "order": 20,
        "width": "3",
        "height": 1,
        "passthru": true,
        "multiple": false,
        "options": [
            {
                "label": "Temp Sensor 1",
                "value": "1",
                "type": "str"
            },
            {
                "label": "Temp Sensor 2",
                "value": "2",
                "type": "str"
            },
            {
                "label": "Temp Sensor 3",
                "value": "3",
                "type": "str"
            },
            {
                "label": "Temp Sensor 4",
                "value": "4",
                "type": "str"
            },
            {
                "label": "Dimmy Temp 1",
                "value": "5",
                "type": "str"
            },
            {
                "label": "Dimmy Temp 2",
                "value": "6",
                "type": "str"
            },
            {
                "label": "RuuviTag 1",
                "value": "7",
                "type": "str"
            },
            {
                "label": "RuuviTag 2",
                "value": "8",
                "type": "str"
            },
            {
                "label": "RuuviTag 3",
                "value": "9",
                "type": "str"
            }
        ],
        "payload": "",
        "topic": "",
        "topicType": "str",
        "className": "",
        "x": 780,
        "y": 200,
        "wires": [
            [
                "3fba2ec657f186d3",
                "6b6289fc3164dc94"
            ]
        ]
    },
    {
        "id": "3fba2ec657f186d3",
        "type": "file",
        "z": "da40f7655111191a",
        "name": "",
        "filename": "pekaway/tempsensor_alarm1",
        "filenameType": "str",
        "appendNewline": false,
        "createDir": true,
        "overwriteFile": "true",
        "encoding": "none",
        "x": 1100,
        "y": 200,
        "wires": [
            []
        ]
    },
    {
        "id": "6b6289fc3164dc94",
        "type": "function",
        "z": "da40f7655111191a",
        "name": "updated",
        "func": "\nlet alarm = msg.payload\nmsg.payload =\"tempsensor_alarm1 updated to \" + msg.payload\ndelete msg.topic\nflow.set (\"tempsensor_alarm1\",alarm)\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 1040,
        "y": 160,
        "wires": [
            [
                "e5f3611dfa01a5d2"
            ]
        ]
    },
    {
        "id": "e5f3611dfa01a5d2",
        "type": "ui_toast",
        "z": "da40f7655111191a",
        "position": "top right",
        "displayTime": "3",
        "highlight": "",
        "sendall": false,
        "outputs": 0,
        "ok": "OK",
        "cancel": "",
        "raw": false,
        "className": "",
        "topic": "",
        "name": "",
        "x": 1360,
        "y": 140,
        "wires": []
    },
    {
        "id": "7d6ae885c66b3544",
        "type": "inject",
        "z": "da40f7655111191a",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": true,
        "onceDelay": "2",
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 170,
        "y": 160,
        "wires": [
            [
                "5ee590d9c43fc575",
                "80d7b2dcdd8f781c"
            ]
        ]
    },
    {
        "id": "27f309eba97a2607",
        "type": "ui_slider",
        "z": "da40f7655111191a",
        "name": "Alarmtemperatur 1",
        "label": "Alarmtemperatur 1",
        "tooltip": "",
        "group": "35cee91dd885fdfd",
        "order": 2,
        "width": 0,
        "height": 0,
        "passthru": true,
        "outs": "end",
        "topic": "topic",
        "topicType": "msg",
        "min": "-10",
        "max": "50",
        "step": 1,
        "className": "",
        "x": 830,
        "y": 280,
        "wires": [
            [
                "e1aff98aa7644b9c",
                "3c9a77d9abc2a43c"
            ]
        ]
    },
    {
        "id": "80d7b2dcdd8f781c",
        "type": "file in",
        "z": "da40f7655111191a",
        "name": "",
        "filename": "pekaway/Alarmtemperatur_alarm1",
        "filenameType": "str",
        "format": "utf8",
        "chunk": false,
        "sendError": false,
        "encoding": "none",
        "allProps": false,
        "x": 540,
        "y": 280,
        "wires": [
            [
                "27f309eba97a2607"
            ]
        ]
    },
    {
        "id": "e1aff98aa7644b9c",
        "type": "file",
        "z": "da40f7655111191a",
        "name": "",
        "filename": "pekaway/Alarmtemperatur_alarm1",
        "filenameType": "str",
        "appendNewline": false,
        "createDir": true,
        "overwriteFile": "true",
        "encoding": "none",
        "x": 1120,
        "y": 280,
        "wires": [
            []
        ]
    },
    {
        "id": "3c9a77d9abc2a43c",
        "type": "function",
        "z": "da40f7655111191a",
        "name": "updated",
        "func": "\nlet alarm = msg.payload\nmsg.payload =\"Alarmtemperaturr_alarm1 updated to \" + msg.payload\ndelete msg.topic\nflow.set (\"Alarmtemperatur_alarm1\",alarm)\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 1040,
        "y": 240,
        "wires": [
            [
                "5ea5829fe05f5b42"
            ]
        ]
    },
    {
        "id": "47da05f58ee0f6f8",
        "type": "inject",
        "z": "da40f7655111191a",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "10",
        "crontab": "",
        "once": true,
        "onceDelay": "2",
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 430,
        "y": 400,
        "wires": [
            [
                "d2d9e64af1fc11c0",
                "7f9b9c9f6e543d85"
            ]
        ]
    },
    {
        "id": "5ea5829fe05f5b42",
        "type": "delay",
        "z": "da40f7655111191a",
        "name": "",
        "pauseType": "delay",
        "timeout": "2",
        "timeoutUnits": "seconds",
        "rate": "1",
        "nbRateUnits": "1",
        "rateUnits": "second",
        "randomFirst": "1",
        "randomLast": "5",
        "randomUnits": "seconds",
        "drop": false,
        "allowrate": false,
        "outputs": 1,
        "x": 1200,
        "y": 240,
        "wires": [
            [
                "e5f3611dfa01a5d2"
            ]
        ]
    },
    {
        "id": "d2d9e64af1fc11c0",
        "type": "function",
        "z": "da40f7655111191a",
        "name": "Auswertung",
        "func": "let sensor = Number(flow.get(\"tempsensor_alarm1\"));\nlet alarm = Number(flow.get(\"Alarmtemperatur_alarm1\"));\nlet temp = 0;\nconst sensorMap = {\n    1: \"temp1\",\n    2: \"temp2\",\n    3: \"temp3\",\n    4: \"temp4\",\n    5: \"dimmytemp1\",\n    6: \"dimmytemp2\",\n    7: \"ruuvitag_0\",\n    8: \"ruuvitag_1\",\n    9: \"ruuvitag_2\"\n};\n\nlet variableName = sensorMap[sensor];\n\nif (variableName) {\n    temp = Number(global.get(variableName))\n   \n}\nelse {\n    temp = null\n   }\n\nif (temp > alarm){\n    msg.payload = true\n}\nelse {\n    msg.payload = false\n}\n\nreturn msg;\n\n\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 630,
        "y": 400,
        "wires": [
            [
                "cda88016e565a640",
                "59597a03adfe10d9"
            ]
        ]
    },
    {
        "id": "7f9b9c9f6e543d85",
        "type": "function",
        "z": "da40f7655111191a",
        "name": "Temperatur",
        "func": "let sensor = Number(flow.get(\"tempsensor_alarm1\"));\n\nconst sensorMap = {\n    1: \"temp1\",\n    2: \"temp2\",\n    3: \"temp3\",\n    4: \"temp4\",\n    5: \"dimmytemp1\",\n    6: \"dimmytemp2\",\n    7: \"ruuvitag_0\",\n    8: \"ruuvitag_1\",\n    9: \"ruuvitag_2\"\n};\n\nlet variableName = sensorMap[sensor];\n\nif (variableName) {\n    msg.payload = Number(global.get(variableName));\n} else {\n    msg.payload = null;\n}\n\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 630,
        "y": 440,
        "wires": [
            [
                "3dec2258ee5b5d7d"
            ]
        ]
    },
    {
        "id": "cda88016e565a640",
        "type": "debug",
        "z": "da40f7655111191a",
        "name": "debug 824",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": true,
        "complete": "true",
        "targetType": "full",
        "statusVal": "payload",
        "statusType": "auto",
        "x": 850,
        "y": 400,
        "wires": []
    },
    {
        "id": "3dec2258ee5b5d7d",
        "type": "debug",
        "z": "da40f7655111191a",
        "name": "debug 825",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": true,
        "complete": "true",
        "targetType": "full",
        "statusVal": "payload",
        "statusType": "auto",
        "x": 850,
        "y": 460,
        "wires": []
    },
    {
        "id": "a8e995925237f906",
        "type": "inject",
        "z": "da40f7655111191a",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "22",
        "payloadType": "num",
        "x": 350,
        "y": 680,
        "wires": [
            [
                "847118f62382a656"
            ]
        ]
    },
    {
        "id": "99c85f5558197777",
        "type": "inject",
        "z": "da40f7655111191a",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "24",
        "payloadType": "num",
        "x": 350,
        "y": 740,
        "wires": [
            [
                "847118f62382a656"
            ]
        ]
    },
    {
        "id": "24880fc76ee104c4",
        "type": "inject",
        "z": "da40f7655111191a",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "20",
        "payloadType": "num",
        "x": 350,
        "y": 620,
        "wires": [
            [
                "847118f62382a656"
            ]
        ]
    },
    {
        "id": "847118f62382a656",
        "type": "function",
        "z": "da40f7655111191a",
        "name": "function 101",
        "func": "global.set(\"temp2\",msg.payload)\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 590,
        "y": 680,
        "wires": [
            [
                "b0eb6d27bae7276e"
            ]
        ]
    },
    {
        "id": "b0eb6d27bae7276e",
        "type": "debug",
        "z": "da40f7655111191a",
        "name": "debug 826",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": true,
        "complete": "true",
        "targetType": "full",
        "statusVal": "payload",
        "statusType": "auto",
        "x": 830,
        "y": 680,
        "wires": []
    },
    {
        "id": "59597a03adfe10d9",
        "type": "link out",
        "z": "da40f7655111191a",
        "name": "Temperaturalarm1",
        "mode": "link",
        "links": [],
        "x": 815,
        "y": 360,
        "wires": []
    },
    {
        "id": "35cee91dd885fdfd",
        "type": "ui_group",
        "name": "Temperaturalarm",
        "tab": "0f6a7ae7e0eefe7d",
        "order": 9,
        "disp": true,
        "width": "6",
        "collapse": false,
        "className": ""
    },
    {
        "id": "0f6a7ae7e0eefe7d",
        "type": "ui_tab",
        "name": "Meine Konfig",
        "icon": "fa-spinner",
        "order": 37,
        "disabled": false,
        "hidden": false
    }
]

Die globale Variablen für die ruuvitag_
Sind mit Sicherheit falsch, die müssten noch geändert werden.
Werden aber erst angezeigt wenn Ruuvitag angeschlossen sind. Glaube ich wenigsten :wink:

1 Like

@ahtdf oh wow. Da hast Du Dir ne Menge Arbeit angetan​:folded_hands:

Ich aber, als NodeRed Anfänger (Kenntnis nur in OPL/OPL+ = C+|++), aber fasziniert vom Aufbau/Struktur dieses NR-Systems). Wäre es eine gute Gelegenheit, mich da eines besseren Verständnisses an zu eignen.

Also Frage:

Was da im Bild 2 zu sehen ist, wo muss das hin?

  • Neuer Flow anlegen?
  • Oder neu anlegen in Init-Flow?
  • Oder im Flow der DS Sensoren?

Danke :folded_hands::hugs:

Hallo Egon,

Ich hab mir auch schon öfters überlegt ob der Arno nix anderes zu tun hat :face_with_hand_over_mouth:

Jedesmal wenn ich ihm erzähle was ich irgendwie cool finden würde hat er mir kurze Zeit später einen Flow gesendet :star_struck:

Ich denke du kannst den einfach importieren und es müsste sich ein neuer Flowtab anlegen mit dem du spielen kannst…

Am Ende kommt aktuell eine Bolsche Ausgabe mit der man dann entscheiden kann was man machen möchte z. B. Sirene, Telegramm oder so…

Achja, ich habe mit Node Red auch nur selbsterforschte Grundkenntnisse, ich nutze dafür viel KI, die kann gut unterstützen, besonders bei der Fehlersuche.

1 Like

Eigentlich sollte sich eine neue Seite anlegen, das ist ein Dropdown Menü in dem du die Temperatur Sensoren auswählen kannst.
Ich bin aber noch am weiter basteln.
Einen Minalarm Einen Maxalarm gibt’s jetzt, also überschreiten und unterschreiten der Temperatur.
Hab noch ne Hysterese für min und max eingebaut, ist die hysterese auf 0 gibt es keinen Alarm. Ohne Hysterese macht ja keinen Sinn, schaltet ja nur hin und her, also kann man die 0 nutzen zu abschalten. Jetzt bin ich noch mit roter und grüner Glocke am basteln. Stelle ich morgen eventuell rein.

2 Likes

:see_no_evil_monkey:

:heart_eyes::+1::heart_hands::folded_hands:

Danke,

soviel Bier oder Wein kannst garnicht trinken was ich dir schon schuldig bin!

Gruß

Roland

1 Like

Ihr seid echt der Wahnsinn :trophy:

Die Arbeit von @ahtdf in der kurzen Zeit, absolut Top. Echt wahr.

Und Dank Euch beiden @ahtdf & @rolbra70 habe ich erst verstanden, wie man solche Programmscripts überhaupt „installiert".

Hat zwar jetzt ein bisschen gedauert, bis ich alles gefunden habe, mit rum tappen und schnüffeln in NodeRed. :folded_hands::four_leaf_clover:

Ist größer geworden als gedacht :rofl:


Der untere Teil der auf dem Bild nicht sichtbar ist kann nach dem Testen gelöscht werden.

Temperatur Sensor im Dropdown Menü auswählen.
Ausgewählte Temperatur wird angezeigt (Abfrage alle 10 sec.)
Max und Min Temperatur mit Slider oder im Eingabe Feld eingeben
Max unnd Min Hysterese im Eingabe Feld eingeben
(Bei 0 kein Alarm. In die Eingabefelder können auch Komma Werte eingegeben werden)
Mit ein bischen Umbau Arbeit könnte damit auch der Tank oder SOC überwacht werden.
Im Prinzip alle Analogen Werte die als Globale Variable abgelegt sind.
Wenn einer testet, bitte Rückmeldung,
Edit:
Es hatte sich noch ein Fehlerteufel eingeschlichen.
daher neue Datei
Temperatur alarm1(1).json (40,2 KB)

dann wird in der Anzeige der Sensorname mit angezeigt.

1 Like

Das sieht ja richtig gut aus!

Danke

Testen kann ich aktuell nicht, hab einen Ausfall heute gehabt, zum Glück habe ich ihn remote wieder zum laufen bekommen, das Auto ist gerade in Schweden :roll_eyes:

Meine Partnerin war nicht begeistert, als nichts mehr ging heute …

Mein MQTT-Bridge (die spiegelt einen RPI3 mit VenusOS) hat nach und nach das System voll ausgelastet und Node Red lief dann auf 100% CPU Last, aber zum Glück nur Singlecore…

Und mein toller Backupskript hat zu guter letzt fleißig mal da fast 60gb mobile daten verbraucht im EU Ausland.

Ich habeden Upload etwas umterschätzt, ich mache erstmalnnur noch USB Backups…

Jetzt muss sie schell eine andere SIM holen, dass sie wieder Datenvolumen bekommt.

Okay Test gemacht. Alle Temperaturen mal durch gespielt. Alarme gesetzt und auch die Hysterese ausprobiert … Hammer funktioniert genial . Auch die Warnglocken (Rot blinkt, Grün bleibt ):trophy::folded_hands::+1:t3:

  1. Frage: Ich habe daneben (links) . Den Config Lagesensor (der aber nichts kann). Was macht der da drin? :face_with_hand_over_mouth::hugs:
  2. Frage: Wenn ich jetzt einen 2.ten Tempwarner möchte, was und wie muss ich dann verdoppeln?

Zu1
Ok, das sollet nicht drinne sein, weiß auch nicht wie das da rein kommt.
Du musst dafür in Node-RED, rechts in der Spalte kannst du Dashboard auswählen, da findest du Meine Konfig.
In diesem Ordner sollte dieser Lagesensor sein. Doppel klick auf den Lagesensor dann müsstest du ihn löschen können.
Zu 2
Am besten öffnest du die json Datei mit einem text Editor (ich nutze Nodepad++)
Und durch suchen ersetzen sichst du nach alarm1 und ersetzt durch alarm2,3,4…
Beim importieren klickst du auf" auf diese Seite einfügen "
Dann müstest du die ganzen Nodes in dene eine 1 im Namen steht, die 1 ersetzen.
Das sollte es gewesen sein, denke ich.
Zur Sicherheit kannst du in alle Funktion Nodes reinschauen ob da noch irgendwo ne falsche 1 ist.
Oder du probierst es aus und reagierst wenn es nicht funktioniert :wink:

1 Like

Einige von euch werden sich eventuell über dieses Bild hier freuen :smiley:

Sollte mein Telegram überflüssig werden??? :wink:

Interesannt,

ist dsnn die Frage, ob das dan nur im Lan geht oder über ein Messenger

Vermutlich geht das direkt über die Pekaway Connect App, mit pushup Nachrichten. Und ist damit immer verfügbar. Netz vorausgesetzt.
Und mit Sicherheit weniger Aufwand als mit irgendeinem Bot Father, oder anderen Diensten