NEWS
Alarmmeldung wenn Raumtemperatur unter einen bestimmten Wert fällt
-
hier mit node-red. Schickt jetzt ein email - kannst aber natürlich auch andere Sachen machen (telegram zB).
Vorteil: ohne javascript, sensoren leicht hinzuzufügen````
[{"id":"27ba5893.2c68a8","type":"tab","label":"Alarm Message"},{"id":"6c52f0ab.fa037","type":"template","z":"27ba5893.2c68a8","name":"prepare message","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"Achtung! Sensor '{{topic}}' mißt {{payload}}°C!","x":1031,"y":299,"wires":[["cbd6609a.60fc1"]]},{"id":"8f3e6a0.1339b98","type":"ioBroker in","z":"27ba5893.2c68a8","name":"","topic":"admin.0.ws333.Temp3","payloadType":"value","onlyack":"","func":"all","gap":"","x":134,"y":94,"wires":[["e5b37419.c12288"]]},{"id":"117f222c.98f5ee","type":"change","z":"27ba5893.2c68a8","name":"prepare data","rules":[{"t":"change","p":"topic","pt":"msg","from":"/","fromt":"str","to":".","tot":"str"},{"t":"set","p":"payload","pt":"msg","to":"payload[1].payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":833,"y":255,"wires":[["6c52f0ab.fa037"]]},{"id":"e5b37419.c12288","type":"function","z":"27ba5893.2c68a8","name":"Queue","func":"//how many items in queue?\nvar countmsg = 2;\n\nvar inmsg = msg;\nvar outmsg = { topic: inmsg.topic , payload: ""};\nvar ctx = this.context;\nvar msgs = ctx.get("aggmsgs")||[];\nvar topics = msgs[inmsg.topic]||[];\n\n\nif (topics.length > 0) {\n if (topics[topics.length-1].payload == inmsg.payload)\n return null;\n} \nif (topics.length == countmsg){\n topics.shift()\n}\n\ntopics.push(inmsg);\noutmsg.payload = topics;\n\nmsgs[inmsg.topic] = topics;\nctx.set("aggmsgs",msgs);\n\nif (topics.length == countmsg)\n return outmsg;\nelse\n return null;","outputs":1,"noerr":0,"x":329,"y":134,"wires":[["39bc3b4b.cfa814"]]},{"id":"39bc3b4b.cfa814","type":"switch","z":"27ba5893.2c68a8","name":"check left limit","property":"payload[1].payload","propertyType":"msg","rules":[{"t":"lte","v":"-3","vt":"num"}],"checkall":"true","outputs":1,"x":506,"y":144,"wires":[["55ca16d1.7d2098"]]},{"id":"55ca16d1.7d2098","type":"switch","z":"27ba5893.2c68a8","name":"check right limit","property":"payload[0].payload","propertyType":"msg","rules":[{"t":"gt","v":"-3","vt":"num"}],"checkall":"true","outputs":1,"x":666,"y":197,"wires":[["117f222c.98f5ee"]]},{"id":"ceb09b12.933508","type":"ioBroker in","z":"27ba5893.2c68a8","name":"","topic":"admin.0.ws333.Temp2","payloadType":"value","onlyack":"","func":"all","gap":"","x":136,"y":191,"wires":[["e5b37419.c12288"]]},{"id":"cbd6609a.60fc1","type":"e-mail","z":"27ba5893.2c68a8","server":"smtp.gmail.com","port":"465","name":"","dname":"","x":1219,"y":349,"wires":[]}]Edit sagt: Alarm jetzt nur einmalig bei Über- Unterschreiten des Limits (20 Zeilen für queue :o )
-
Moebius: danke…...mit der langen Zeile kann ich nichts anfangen.
Ich wüsste nicht wo ich was ändern muss um es an meine Thermostate anzupassen.
-
lobomau: ja, komplett installiert denke ich, da.ich sonst den Schlüssel nicht erhalten hätte und telegram sonst auch nicht grün leuchten würde…...gehe ich jedenfalls davon aus.
-
Moebius: danke…...mit der langen Zeile kann ich nichts anfangen.
Ich wüsste nicht wo ich was ändern muss um es an meine Thermostate anzupassen. `
Das ist ein node-red Flow.Den Code komplett in die Zwischenablage kopieren, node-red Reiter öffnen, wenn der Adapter node-Red installiert ist und hier den Code einfügen!
Doku lesen –> http://www.iobroker.net/docu/?page_id=4 ... _von_Flows
SO sieht der Code expandiert aus:
! ````
[
{
"id": "27ba5893.2c68a8",
"type": "tab",
"label": "Flow 4"
},
{
"id": "cadb8796.b7e2d8",
"type": "switch",
"z": "27ba5893.2c68a8",
"name": "",
"property": "payload",
"propertyType": "msg",
"rules": [
{
"t": "lt",
"v": "-3",
"vt": "num"
}
],
"checkall": "true",
"outputs": 1,
"x": 558,
"y": 87,
"wires": [
[
"24087720.583658"
]
]
},
{
"id": "509b48b0.9d7ed8",
"type": "ioBroker get",
"z": "27ba5893.2c68a8",
"name": "",
"topic": "",
"attrname": "payload",
"payloadType": "value",
"x": 350,
"y": 89,
"wires": [
[
"cadb8796.b7e2d8"
]
]
},
{
"id": "5fe9f5aa.ad95ac",
"type": "e-mail",
"z": "27ba5893.2c68a8",
"server": "smtp.gmail.com",
"port": "465",
"name": "",
"dname": "",
"x": 1221,
"y": 89,
"wires": []
},
{
"id": "99d18002.47aff",
"type": "template",
"z": "27ba5893.2c68a8",
"name": "prepare message",
"field": "payload",
"fieldType": "msg",
"format": "handlebars",
"syntax": "mustache",
"template": "Achtung! Sensor '{{topic}}' mißt {{payload}}°C!",
"x": 1017,
"y": 89,
"wires": [
[
"5fe9f5aa.ad95ac"
]
]
},
{
"id": "605b30d.8b436d",
"type": "ioBroker in",
"z": "27ba5893.2c68a8",
"name": "",
"topic": "admin.0.ws333.Temp3",
"payloadType": "value",
"onlyack": "",
"func": "all",
"gap": "",
"x": 121,
"y": 54,
"wires": [
[
"509b48b0.9d7ed8"
]
]
},
{
"id": "bb5319dd.ef2e48",
"type": "ioBroker in",
"z": "27ba5893.2c68a8",
"name": "",
"topic": "admin.0.ws333.Temp2",
"payloadType": "value",
"onlyack": "",
"func": "all",
"gap": "",
"x": 119,
"y": 135,
"wires": [
[
"509b48b0.9d7ed8"
]
]
},
{
"id": "24087720.583658",
"type": "change",
"z": "27ba5893.2c68a8",
"name": "",
"rules": [
{
"t": "change",
"p": "topic",
"pt": "msg",
"from": "/",
"fromt": "str",
"to": "-",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 774,
"y": 88,
"wires": [
[
"99d18002.47aff"
]
]
}
]Wenn der Flow importiert ist, dann kann man die nodes (die "Steine" oder "Knoten") ändern. Gruß Pix
-
Ich habe das Script von MistyReblaus genommen
on({
id: /hm-rpc.*.TEMPERATURE/,
ack : true,
change: "lt",
valLt: 18,
oldValGe: 18
}, function(obj)
{
sendTo('telegram.0', {
text: "Temperatur ist zu niedrig.",
disable_notification: true
}
)
}
);
Ist es korrekt, dass ich für das Sternchen "*" die Id für die aktuelle ist Temperatur einfüge?
Muss ich für jedes Thermostat ein extra Script nehmen?
Oder einfach für das weitere Thermostat ergänzen?
Was.würde dann über telegram bei 18 Grad gemedet werden….also
außer " Temperatur ist zu niedrig " ?
Wird auch angezeigt welches Zimmer?
-
Also das Script läuft nicht.
In der 2, 3 und 4 Zeile scheint was falsch zu sein.
-
Ich habe nun das Script von
Paul53
probiert. Hier wird kein Fehler angezeigt aber wenn die Temperatur abgefallen ist
auf den.bzw. unter den vorgegebenen Grenzwert, erhalte ich keine Mail per "Telegram"
was mache ich falsch?
-
Hi Blackangel,
probiere doch mal das Ganze mit Blocky zu realisieren. Da musst du keine Javascript-Kenntnisse haben. Einfach Drag-and-Drop und schon hast du ein Script zusammengeklickt. Um Blocky zu nutzen, musst du einfach den Enginetyp auf Blocky lassen. (siehe Bild)
Grüße,
ldittmar
-
Hi,
bin auch Anfänger was Javascript und Blockly betrifft und habe das mal zusammen geklickt und exportiert.
Du nimmst das alles und kopierst es.
<block xmlns="http://www.w3.org/1999/xhtml" type="on_ext" id="~r*U+2!|t6x/`nu/{:r1" x="-462" y="-287"><mutation items="1"></mutation> <field name="CONDITION">ne</field> <value name="OID0"><shadow type="field_oid" id="4N:=AI~{G+rNDI]w95{4"><field name="oid">hm-rpc.0.LEQ0003791.1.TEMPERATURE</field></shadow></value> <statement name="STATEMENT"><block type="controls_if" id="NVE^VjGif,Ox5OqBuR?*"><value name="IF0"><block type="logic_compare" id="IT(q{Xg/IIRuMYKJbhCG"><field name="OP">LT</field> <value name="A"><block type="get_value" id="|scHE*ak9k(o*AgretdA"><field name="ATTR">val</field> <field name="OID">hm-rpc.0.LEQ0003791.1.TEMPERATURE</field></block></value> <value name="B"><block type="math_number" id="p/S69eq]C{D2^9WkVI#`"><field name="NUM">18</field></block></value></block></value> <statement name="DO0"><block type="telegram" id="HlVUG3@nFAR5P%}Gu5_V"><field name="INSTANCE">.0</field> <field name="LOG">log</field> <value name="MESSAGE"><shadow type="text" id="6n=_OEeWW6DbD(Vrq/;A"><field name="TEXT">Temperatur Wohnzimmer unter 18 Grad</field></shadow></value></block></statement></block></statement></block>
Dann im Javascript Adapter ein neues Script öffnen siehe Bild und dann auf den markierten Button drücken und das hier kopierte einfügen.
Danach sollte das dann so aussehen:
Jetzt musst du eigentlich nur noch bei den beiden "Object ID" deinen Temperatur Sensor auswählen und die Meldung die gesendet werden soll anpassen.
So sieht das dann als Javascript aus wenn man sich den Code anzeigen lässt:
on({id: 'hm-rpc.0.LEQ0003791.1.TEMPERATURE', change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if (getState("hm-rpc.0.LEQ0003791.1.TEMPERATURE").val < 18) { sendTo("telegram.0", "send", { text: 'Temperatur Wohnzimmer unter 18 Grad' }); console.log("telegram: " + 'Temperatur Wohnzimmer unter 18 Grad'); } });
Viel Erfolg
-
So sieht das dann als Javascript aus wenn man sich den Code anzeigen lässt: `
Die Bedingung sollte dann noch optimiert werden, wenn nicht bei jeder Temperaturänderung unterhalb 18°C immer wieder gesendet werden soll:if (value < 18 && oldValue >= 18) {
EDIT: Das geht natürlich auch mit Blockly:
-
Danke für den Hinweis.
Gesendet von iPhone mit Tapatalk Pro
-
Super, werde mich mal dran versuchen.
Vielen Dank für die Hilfe.
-
Ich habe den Code von
Wenedy 2702
eingefügt, hat funktioniert…...ausprobiert ob tatsächlich eine Mail über telegram
ausgelöst wird, habe ich noch nicht probiert.
Wie kann ich den Code von Paul53 jetzt dort hinzufügen ?
Lässt sich nicht zusätzlich importieren.
-
Habe es ausprobiert….leider kommt keine Mitteilung über telegram.
Als ID hatte ich die actual_temperature.....value temperature genommen.
Der token it bei telegram eingetragen und der Adapter leuchtet grün.
Scribt leuchtet auch grün aber eine mail ist nicht gekommen. Wlan ist natürlich an.
-
Ist die ID falsch?
Habe sie automatisch einfügen lassen
Muss ich was bei der ID weglassen?
Im Beispiel steht nur …..Temperature
Wenn ich die ID einfüge steht bei mir aber Actual_Temperature
Habe die ID genommen wo daneben die aktuelle "ist" Temperatur angezeigt wird.
-
Ist die ID falsch?
Habe sie automatisch einfügen lassen
Muss ich was bei der ID weglassen?
Im Beispiel steht nur …..Temperature
Wenn ich die ID einfüge steht bei mir aber Actual_Temperature
Habe die ID genommen wo daneben die aktuelle "ist" Temperatur angezeigt wird. `
Habe es mal nach gebastelt:
Blockly:
<xml xmlns="http://www.w3.org/1999/xhtml"><block type="on_ext" id="~r*U+2!|t6x/`nu/{:r1" x="-462" y="-287"><mutation items="1"></mutation> <field name="CONDITION">ne</field> <value name="OID0"><shadow type="field_oid" id="4N:=AI~{G+rNDI]w95{4"><field name="oid">hm-rpc.0.LEQ0003791.1.TEMPERATURE</field></shadow></value> <statement name="STATEMENT"><block type="controls_if" id="NVE^VjGif,Ox5OqBuR?*"><value name="IF0"><block type="logic_operation" id="VCF};1)~{*PRl0d|BD6d"><field name="OP">AND</field> <value name="A"><block type="logic_compare" id="IT(q{Xg/IIRuMYKJbhCG"><field name="OP">LT</field> <value name="A"><block type="on_source" id="v*=yjm=7wz-4;IT[rwux"><field name="ATTR">state.val</field></block></value> <value name="B"><block type="math_number" id="p/S69eq]C{D2^9WkVI#`"><field name="NUM">18</field></block></value></block></value> <value name="B"><block type="logic_compare" id=",XU`6Ml5#Vss}map0k({"><field name="OP">GTE</field> <value name="A"><block type="on_source" id="^d;ofku-X`|u2mo5Wl!."><field name="ATTR">oldState.val</field></block></value> <value name="B"><block type="math_number" id=")X5nzfJ)]x#(%7jbo{Lt"><field name="NUM">18</field></block></value></block></value></block></value> <statement name="DO0"><block type="telegram" id="HlVUG3@nFAR5P%}Gu5_V"><field name="INSTANCE">.0</field> <field name="LOG">log</field> <value name="MESSAGE"><shadow type="text" id="6n=_OEeWW6DbD(Vrq/;A"><field name="TEXT">Temperatur Badezimmer unter 18 Grad</field></shadow></value></block></statement></block></statement></block></xml>
Javascript:
on({id: 'hm-rpc.0.LEQ0003791.1.TEMPERATURE', change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if ((obj.state ? obj.state.val : "") < 18 && (obj.oldState ? obj.oldState.val : "") >= 18) { sendTo("telegram.0", "send", { text: 'Temperatur Badezimmer unter 18 Grad' }); console.log("telegram: " + 'Temperatur Badezimmer unter 18 Grad'); } });
Dann nach dem Import nur bei dem Rot umrandeten klicken und den Temperatursensor auswählen den du verwenden willst:
Zu Telegram, kannst du mal hier einen Text eingeben und einfach danach enter/return drücken und schauen ob etwas auf deinem Handy ankommt:
-
Also ich habe alles so gemacht wie im Video aber es scheint sich über telegram nichts zu verbinden.
Testnachricht siehe Foto kommt nicht an.
auch aus der APP heraus schreiben, kommt bei iobroker nicht an.
1570_unbenannt.png -
Wegen dem Temperatursensor…..
Ich verweise bei der ID auf die des Heizungsthermostates mit der gerade aktuellen
gemessenen Temperatur oder?
Also ich meine damit, es muss kein Wand-Thermostat sein oder?
-
Ne, muss kein Wandthermostat sein.
Ist dein Connection Status bei Telegram in den Objekten den "true" ? Wie in meinem Bild ?
Gesendet von iPhone mit Tapatalk Pro
-
Ja, da steht true. Ich denke es muss nichts extra in der Fritzbox freigegeben werden oder ?
Der Test erfolgte ja aus dem Wlan.
Gibt es keine Möglichkeit die gemessene Temperatur vom Thermostat zu verwenden?
Wäre ja echt blöd für 5 Räume extra Wand-Thermostate aufzuhängen oder Fenster-Offen-Sensoren
zu montieren. Mal vom Kostenfaktor abgesehen.
Geht es über Umwege mit dem Scenen-Adapter? Wenn ja wie?