Temperatur Sensor Alarm

Ich habe das wie oben beschrieben ausprobiert, und es Funktioniert.
Ich habe nach alarm1 gesucht und durch alarm2 ersetzt.
danach habe ich die Namen in den Nodes auf 2 angepasst.

Außerdem habe ich noch ein Icon für die InfoSeite angehängt.


Die unterschiedlichen größen bekommst duhin indem du hier die fa-1x auf 2 oder 3oder… änderst

wenn die Icon auf der Infoseite einfach wild eingestreut sind, dannkannst du das hier ändern

die kannst du einfach anklicken und hoch und runter schieben.
Hier stellst du übrigens ein auf welcher Seite das Icon erscheinen soll

jetzt bist du dran :wink:
Temperatur alarm2(1).json (76,9 KB)

Okay soweit läuft alles super. Den Lagesensor habe ich auch weg gekriegt :folded_hands::+1:t3:

Aber jetzt, … wenn ich einen neuen Warner, zu dem eben bestehenden hinzu fügen möchte, das klappt bei mir nicht (Linke Taste- Aktueller Flow). Er legt sofort wieder einen neuen Flow Temperatur Warner an. Ich kriege da einfach nichts rein, egal was ich mache. Warum dass denn?

Eigentlich sollte das funktionieren.
Hab ich eben genau so gemacht.
Wenn nicht, hast du 2 Möglichkeiten
Entweder du gehst auf die 2. Seite
Mit strg a alles markieren mit strg x alles ausschneiden, auf die 1. Seite wechseln mit strg v einfügen.
Mit einem doppelklick auf die registerkarte öffnest du die Einstellung, da kannst du die Seite dann löschen
Der neue flow hat ja schon 2 Alarme.
Am besten markierst du mal einen Alarm und exportiertst ihn.
Das hat den Vorteil das die altlasten von mir nicht wieder mit genommen werden
Dann kannst du es einfacher wie oben beschrieben ändern und importieren.

Sieht das in NodeRed dann bei Dir so aus?

Hab es jetzt mal mit Ausschneiden und einfügen probiert. Oh ja das geht 2 getrennte Temps da drin.

Und im Dashboard ist dafür nachher alles ineinander gewurstelt. :face_holding_back_tears::hugs:

Keine Ahnung was mit meinem NodeRed nicht stimmt. Pussy?

Das ist normal
Du musst jetzt im Dashboard sortieren. Geht leider nicht ander ::frowning:
Ein bisschen Arbeit ist das alles, aber wenn man das mal ne Weile gemacht hat geht es einem einfacher von der Hand.
Du müsstest den Flow auch noch umbenennen, da muss noch ein "userflow " hinter den Namen, sonst ist er nach einem online Update nicht mehr da

Okay danke Dir, soweit bin ich jetzt schon mal :slight_smile:

Jetzt muss ich mich dann mal noch darum kümmern, Flows zu importieren und in bestehende zu integrieren :wink: Und danach gehe ich dir Ruuvis mal an.

Das sieht doch schon mal ganz gut aus. :+1:
Bei Gas steht nur ein wati vor dem Max.
Kann das sein das du in der Auswertung ein Tippfehler hast???
Ich habe heute auch noch daran rumgebastelt, eigentlich wollte ich die Glocke verstecken wenn die Hysterese auf 0 ist, und der Alarm nicht aktiv.
Aber das habe ich nicht hinbekommen.
Aber was ich geschafft habe, ist wenn du auf die Glocke klickst springst du auf die Konfigurations Seite. Find ich schön, wenn ein Fehler da ist kannst du direkt nachschauen wie das Teil eingestellt ist. Wenn du das haben möchtest, mach ich dir einen Screenshot wie du das auf die schnelle ändern kannst.
Wenn du an die Ruuvis gehst, müssen wir sicher zusammen machen, weil die haben mit den Werten und dem Namen ein anderes Schema. Vermutlich muss man die Daten abfangen, und eigene Globale Variablen dafür setzen das sie ins Schema passen.
Du könntest mal in die globalen Variablen schauen und mir die Variablen für temp, hum, und den Namen geben. Dann kann ich vielleicht was vorbereiten.
Wenn du in die schalter Node gehst, und die Größe auf 3 einstellst, hättest du beide Glocken in einer Reihe
Size da steht jetzt Auto drin

1 Like

Also das mit dem Wait … hab da schon gesucht wo das herkommt. keine Ahnung :slight_smile:

das mit den Glocken Alarm hab ich so jetzt eingestellt, dass wenn der Min Alarm los geht, leuchtet Glocke blau :slight_smile:

Okay … dann werde ich mich mal nach schauen, bei den Ruuvis wegen den globVariablen :wink:

Ich sehe du beschäftigtst dich mit dem Programm :+1::+1:find ich super

1 Like

Moin Egon
Die Ruuvi Parameter habe ich mir aus der Seite für die APP rauskopiert.
In dem Flow sind nur 6 Nodes. Die müsstest du bei dir ändern.
In den ersten 2 setze ich die normalen Globalen Veriablen zusätzlich auf neue Variablen.
(Die der bisherigen Vorgehensweise, Value Bezeichnung klein, Name für Value Bezeichnung mit großem N davor gleicht(“temp1, Ntemp1”))
Die beiden musst du bie dier rein kopieren
Die Feuchte habe ich auch dazugenommen, fasls du Feuchte auch auf Alarm setzen möchtest.
Die anderen 4 musst du bei dir ersetzen, oder du änderst sie nach dem Vorbild,
Texte kopieren und bei dir einfügen.
Ich denke es funktioniert :wink:

[
    {
        "id": "5bbbd49b9595832b",
        "type": "function",
        "z": "da40f7655111191a",
        "name": "tausche Global",
        "func": "\n//if (global.get(\"ruuvitags\") === true) {   // wenn Ruuvitags vorhanden die // in Zeile 2 und 40 löschen, zum Testen ohne Ruuvis nicht löschen\n    let ruuvitag0_temp = (global.get(\"ruuvitag_0\") == undefined || global.get(\"ruuvitag_0\").temp == null || global.get(\"ruuvitag_0\").temp === \"\") ? \"0\" : global.get(\"ruuvitag_0\").temp;\n    let ruuvitag1_temp = (global.get(\"ruuvitag_1\") == undefined || global.get(\"ruuvitag_1\").temp == null || global.get(\"ruuvitag_1\").temp === \"\") ? \"0\" : global.get(\"ruuvitag_1\").temp;\n    let ruuvitag2_temp = (global.get(\"ruuvitag_2\") == undefined || global.get(\"ruuvitag_2\").temp == null || global.get(\"ruuvitag_2\").temp === \"\") ? \"0\" : global.get(\"ruuvitag_2\").temp;\n\n    let ruuvitag0_hum = (global.get(\"ruuvitag_0\") == undefined || global.get(\"ruuvitag_0\").hum == null || global.get(\"ruuvitag_0\").hum === \"\") ? \"0\" : global.get(\"ruuvitag_0\").hum;\n    let ruuvitag1_hum = (global.get(\"ruuvitag_1\") == undefined || global.get(\"ruuvitag_1\").hum == null || global.get(\"ruuvitag_1\").hum === \"\") ? \"0\" : global.get(\"ruuvitag_1\").hum;\n    let ruuvitag2_hum = (global.get(\"ruuvitag_2\") == undefined || global.get(\"ruuvitag_2\").hum == null || global.get(\"ruuvitag_2\").hum === \"\") ? \"0\" : global.get(\"ruuvitag_2\").hum;\n\n    let ruuvitag_0_name = global.get(\"ruuvitag_0_name\");\n    let ruuvitag_1_name = global.get(\"ruuvitag_1_name\");\n    let ruuvitag_2_name = global.get(\"ruuvitag_2_name\");\n\n    global.set(\"ruuvi0\",ruuvitag0_temp);\n    global.set(\"ruuvi1\",ruuvitag1_temp);\n    global.set(\"ruuvi2\",ruuvitag2_temp);\n    \n    global.set(\"ruuvi0H\",ruuvitag0_hum);\n    global.set(\"ruuvi1H\",ruuvitag1_hum);\n    global.set(\"ruuvi2H\",ruuvitag2_hum);\n    \n    global.set(\"Nruuvi0\",ruuvitag_0_name);\n    global.set(\"Nruuvi1\",ruuvitag_1_name);\n    global.set(\"Nruuvi2\",ruuvitag_2_name);\n    \n    global.set(\"Nruuvi0H\",ruuvitag_0_name);\n    global.set(\"Nruuvi1H\",ruuvitag_1_name);\n    global.set(\"Nruuvi2H\",ruuvitag_2_name);\n\n    \n//}  // wenn Ruuvitags vorhanden die // in Zeile 2 und 40 löschen, zum Testen ohne Ruuvis nicht löschen\n\n\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 420,
        "y": 120,
        "wires": [
            []
        ]
    },
    {
        "id": "a9559bcc37d2f3c8",
        "type": "inject",
        "z": "da40f7655111191a",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "10",
        "crontab": "",
        "once": true,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 230,
        "y": 120,
        "wires": [
            [
                "5bbbd49b9595832b"
            ]
        ]
    },
    {
        "id": "1f161e10843a2162",
        "type": "function",
        "z": "da40f7655111191a",
        "name": "Auswertung_Max",
        "func": "\nlet sensor = Number(flow.get(\"tempsensor_alarm1\"));\nlet alarm = Number(flow.get(\"Alarmtemperatur_max_alarm1\"));\nlet hys = Number(flow.get(\"Hysterese_max_alarm1\"));\nlet temp = 0;\n\nconst sensorMap = {\n    1: \"temp1\",\n    2: \"temp2\",\n    3: \"temp3\",\n    4: \"temp4\",\n    5: \"dimmytemp1\",\n    6: \"dimmytemp2\",\n    7: \"ruuvi0\",\n    8: \"ruuvi1\",\n    9: \"ruuvi2\",\n    10:\"ruuvi0H\",\n    11:\"ruuvi1H\",\n    12:\"ruuvi2H\"\n};\n\nlet variableName = sensorMap[sensor];\nmsg.label = (global.get(\"N\"+variableName));\n\nif (variableName) {\n    temp = Number(global.get(variableName));\n} else {\n    temp = null;\n}\n\nif (hys === 0) {\n    msg.payload = false;\n    return [msg, null]; \n}\n\nif (temp > alarm) {\n    msg.payload = true;\n    return [msg, null];\n} \nelse if (temp <= (alarm - hys)) {\n    msg.payload = false;\n    return [msg, null];\n} \nelse {\n    \n    return [null, null]; \n}\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 910,
        "y": 100,
        "wires": [
            []
        ]
    },
    {
        "id": "aa793c2bdb763c22",
        "type": "function",
        "z": "da40f7655111191a",
        "name": "Sensor Name + Temp",
        "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: \"ruuvi0\",\n    8: \"ruuvi1\",\n    9: \"ruuvi2\",\n    10:\"ruuvi0H\",\n    11:\"ruuvi1H\",\n    12:\"ruuvi2H\"\n};\n\nlet variableName = sensorMap[sensor];\n\nif (variableName) {\n   msg.label = (global.get(\"N\"+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": 920,
        "y": 160,
        "wires": [
            []
        ]
    },
    {
        "id": "7b832956647d4281",
        "type": "function",
        "z": "da40f7655111191a",
        "name": "Auswertung_Min",
        "func": "let sensor = Number(flow.get(\"tempsensor_alarm1\"));\nlet alarm = Number(flow.get(\"Alarmtemperatur_min_alarm1\"));\nlet temp = 0;\nlet hys = Number(flow.get(\"Hysterese_min_alarm1\"));\n\nconst sensorMap = {\n    1: \"temp1\",\n    2: \"temp2\",\n    3: \"temp3\",\n    4: \"temp4\",\n    5: \"dimmytemp1\",\n    6: \"dimmytemp2\",\n    7: \"ruuvi0\",\n    8: \"ruuvi1\",\n    9: \"ruuvi2\",\n    10:\"ruuvi0H\",\n    11:\"ruuvi1H\",\n    12:\"ruuvi2H\"\n};\n\nlet variableName = sensorMap[sensor];\nmsg.label = (global.get(\"N\"+variableName));\n\nif (variableName) {\n    temp = Number(global.get(variableName));\n} else {\n    temp = null;\n}\n   \n// Logik für Hysterese = 0 (Sofortiger Abbruch)\nif (hys === 0) {\n    msg.payload = false;\n    return [msg, null];\n}    \n\n// Logik für Minimal-Alarm\nif (temp < alarm) {\n    msg.payload = true; // Alarm auslösen, wenn zu kalt\n    return [msg, null];\n}\nelse if (temp >= (alarm + hys)) {\n    msg.payload = false; // Alarm zurücksetzen, wenn warm genug\n    return [msg, null];\n}\nelse {\n    // Temperatur liegt im Hysterese-Bereich -> Zustand halten (nichts senden)\n    return [null, null]; \n}\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 910,
        "y": 220,
        "wires": [
            []
        ]
    },
    {
        "id": "f6668bb4814c4510",
        "type": "comment",
        "z": "da40f7655111191a",
        "name": "Hier werden die Globalen Variablen angepasst",
        "info": "",
        "x": 330,
        "y": 80,
        "wires": []
    },
    {
        "id": "1db07fdb27685296",
        "type": "comment",
        "z": "da40f7655111191a",
        "name": "Hier ändert sich 7: 8: 9: + :10 :11 :12",
        "info": "",
        "x": 840,
        "y": 60,
        "wires": []
    },
    {
        "id": "d3e23e50fd38c1f5",
        "type": "ui_dropdown",
        "z": "da40f7655111191a",
        "name": "Sensor für Temperaturalarm1",
        "label": "",
        "tooltip": "Sensor für Temperaturalarm1",
        "place": "Sensor",
        "group": "35cee91dd885fdfd",
        "order": 1,
        "width": 6,
        "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"
            },
            {
                "label": "RuuviTag 1H",
                "value": "10",
                "type": "str"
            },
            {
                "label": "RuuviTag 2H",
                "value": "11",
                "type": "str"
            },
            {
                "label": "RuuviTag 3H",
                "value": "12",
                "type": "str"
            }
        ],
        "payload": "",
        "topic": "",
        "topicType": "str",
        "className": "",
        "x": 680,
        "y": 160,
        "wires": [
            []
        ]
    },
    {
        "id": "01846477207ef092",
        "type": "comment",
        "z": "da40f7655111191a",
        "name": "Hier ist  :10 :11 :12 dazugekommen",
        "info": "",
        "x": 660,
        "y": 120,
        "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
    }
]

Noch was geändert, wenn Ruuvi 1-3 Feuchte dann wird in der Anzeige % angezeigt sonst °C



[
    {
        "id": "aa793c2bdb763c22",
        "type": "function",
        "z": "da40f7655111191a",
        "name": "Sensor Name + Temp",
        "func": "let sensor = Number(flow.get(\"tempsensor_alarm1\"));\nlet check  = Number(flow.get(\"tempsensor_alarm1\"));\n\nif (sensor == 10 || sensor == 11 || sensor == 12){\n    msg.unit=\" %\"\n}\nelse {\n    msg.unit =\" °C\"\n}\n\nconst sensorMap = {\n    1: \"temp1\",\n    2: \"temp2\",\n    3: \"temp3\",\n    4: \"temp4\",\n    5: \"dimmytemp1\",\n    6: \"dimmytemp2\",\n    7: \"ruuvi0\",\n    8: \"ruuvi1\",\n    9: \"ruuvi2\",\n    10:\"ruuvi0H\",\n    11:\"ruuvi1H\",\n    12:\"ruuvi2H\"\n};\n\nlet variableName = sensorMap[sensor];\n\nif (variableName) {\n   msg.label = (global.get(\"N\"+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": 1200,
        "y": 140,
        "wires": [
            []
        ]
    },
    {
        "id": "16e94ab787bd43e8",
        "type": "ui_text",
        "z": "da40f7655111191a",
        "group": "35cee91dd885fdfd",
        "order": 2,
        "width": 0,
        "height": 0,
        "name": "Temperatur 1",
        "label": "{{msg.label}}",
        "format": "{{msg.payload}}{{msg.unit}}",
        "layout": "row-spread",
        "className": "",
        "x": 1410,
        "y": 140,
        "wires": []
    },
    {
        "id": "e09ff10227de6bce",
        "type": "comment",
        "z": "da40f7655111191a",
        "name": "msg.unit eingefügt",
        "info": "",
        "x": 1310,
        "y": 60,
        "wires": []
    },
    {
        "id": "378380672d29c6a9",
        "type": "comment",
        "z": "da40f7655111191a",
        "name": "°C für Temp, % für Feuchte ;-)",
        "info": "",
        "x": 1340,
        "y": 100,
        "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
    }
]