NEWS
[gelöst] Bei Regen eine Nachricht per Telegram
-
Mein Regensensor wird bei Regen ausgeschaltet, damit er sich nicht so schnell auflöst. Dazu wird er sofort bei Regen ausgeschaltet und alle 10 min wieder an und schaut nach, ob es noch regnet. Wenn es noch regnet, schaltet er sich sofort wieder aus. Wenn es nicht mehr regnet, bleibt der Sonsor eingeschaltet. Soweit was ich habe. Jetzt möchte ich, dass Telegram mir eine Nachricht schickt, wenn es regnet und wenn der Regenwert wieder >900 ist, möchte ich eine Nachricht bekommen, dass es nicht mehr regnet. So wie ich es jetzt gemacht habe, bekomme ich alle paar Sek. eine Nachricht, dass es regnet.
Nicht im Sinne des ErfindersKann mir bitte jemand helfen?
const idSwitch = 'sonoff.0.Radar.POWER1'; // Schalter ein und aus vom Regensensor const idAnalog = 'sonoff.0.Radar.ANALOG_A0'; // Regensensor var anlauf = null; schedule('*/10 * * * *', function() { // alle 10 Minuten läuft das Script und schaut nach Sensordaten if(!getState(idSwitch).val) { // Abfragen on Schalter vom Regensensor ein oder aus ist setState(idSwitch, true); // Regensensor einschalten anlauf = setTimeout(function() { anlauf = null; }, 30000); // Wartezeit bis Sensor (A0) Daten liefert 30 s } }); on(idAnalog, function(dp) { if(!anlauf && dp.state.val <= 900) { // Sensordaten: Kleiner als 900 = Regen und sofort wieder aus setState(idSwitch, false); // Wenn Regen wird Sensor hier ausgeschaltet sendTo("telegram", "send", { // Nachricht per Telegram text: 'Es regnet' // Inhalt "Es regnet" }); } });
Ich möchte betonen, dass ich absoluter Anfänger mit js bin, habt bitte Nachsicht mit mir.
-
@hagst sagte: Nicht im Sinne des Erfinders
Versuch es mal so:
const idSwitch = 'sonoff.0.Radar.POWER1'; // Schalter ein und aus vom Regensensor const idAnalog = 'sonoff.0.Radar.ANALOG_A0'; // Regensensor var freigabe = false; schedule('*/10 * * * *', function() { // alle 10 Minuten läuft das Script und schaut nach Sensordaten if(!getState(idSwitch).val) { // Abfragen on Schalter vom Regensensor ein oder aus ist setState(idSwitch, true); // Regensensor einschalten setTimeout(function() { freigabe = true; }, 30000); // Wartezeit bis Sensor (A0) Daten liefert 30 s } }); on(idAnalog, function(dp) { if(freigabe && dp.state.val <= 900) { // Sensordaten: Kleiner als 900 = Regen und sofort wieder aus freigabe = false; setState(idSwitch, false); // Wenn Regen wird Sensor hier ausgeschaltet sendTo("telegram", "send", { // Nachricht per Telegram text: 'Es regnet' // Inhalt "Es regnet" }); } });
-
@paul53 sagte in Bei Regen eine Nachricht per Telegram:
Versuch es mal so:
Vielen Dank (mal wieder) für Deine Hilfe. ̶l̶̶e̶̶i̶̶d̶̶e̶̶r̶̶ ̶̶s̶̶c̶̶h̶̶a̶̶l̶̶t̶̶e̶̶t̶̶ ̶̶j̶̶e̶̶t̶̶z̶̶t̶̶ ̶̶d̶̶e̶̶r̶̶ ̶̶s̶̶e̶̶n̶̶s̶̶o̶̶r̶̶ ̶̶b̶̶e̶̶i̶̶ ̶̶r̶̶e̶̶g̶̶e̶̶n̶̶ ̶̶n̶̶i̶̶c̶̶h̶̶t̶̶ ̶̶a̶̶u̶̶s̶̶ ̶̶u̶̶n̶̶d̶̶ ̶̶v̶̶e̶̶r̶̶s̶̶c̶̶h̶̶i̶̶c̶̶k̶̶t̶̶ ̶̶a̶̶u̶̶c̶̶h̶̶ ̶̶k̶̶e̶̶i̶̶n̶̶e̶̶ ̶̶n̶̶a̶̶c̶̶h̶̶r̶̶i̶̶c̶̶h̶̶t̶̶ ̶̶p̶̶e̶̶r̶̶ ̶̶t̶̶e̶̶l̶̶e̶̶g̶̶r̶̶a̶̶m̶̶.̶̶ ̶̶d̶̶e̶̶r̶̶ ̶̶s̶̶e̶̶n̶̶s̶̶o̶̶r̶̶ ̶̶l̶̶i̶̶e̶̶f̶̶e̶̶r̶̶t̶̶ ̶̶w̶̶e̶̶r̶̶t̶̶e̶̶,̶̶ ̶̶d̶̶i̶̶e̶̶ ̶̶u̶̶n̶̶t̶̶e̶̶r̶̶ ̶̶6̶̶0̶̶0̶̶ ̶̶l̶̶i̶̶e̶̶g̶̶e̶̶n̶̶,̶̶ ̶̶a̶̶b̶̶e̶̶r̶̶ ̶̶e̶̶r̶̶ ̶̶b̶̶l̶̶e̶̶i̶̶b̶̶t̶̶ ̶̶w̶̶e̶̶i̶̶t̶̶e̶̶r̶̶ ̶̶e̶̶i̶̶n̶̶g̶̶e̶̶s̶̶c̶̶h̶̶a̶̶l̶̶t̶̶e̶̶t̶̶.̶̶ ̶̶w̶̶a̶̶s̶̶ ̶̶d̶̶a̶̶s̶̶ ̶̶s̶̶c̶̶r̶̶i̶̶p̶̶t̶̶ ̶̶m̶̶a̶̶c̶̶h̶̶t̶̶,̶̶ ̶̶i̶̶s̶̶t̶̶ ̶̶d̶̶e̶̶n̶̶ ̶̶s̶̶o̶̶n̶̶s̶̶o̶̶r̶̶ ̶̶w̶̶i̶̶e̶̶d̶̶e̶̶r̶̶ ̶̶e̶̶i̶̶n̶̶s̶̶c̶̶h̶̶a̶̶l̶̶t̶̶e̶̶n̶̶,̶̶ ̶̶w̶̶e̶̶n̶̶n̶̶ ̶̶d̶̶e̶̶r̶̶ ̶̶r̶̶e̶̶g̶̶e̶̶n̶̶s̶̶e̶̶n̶̶s̶̶o̶̶r̶̶ ̶̶d̶̶a̶̶t̶̶e̶̶n̶̶ ̶̶ü̶̶b̶̶e̶̶r̶̶ ̶̶9̶̶0̶̶0̶̶ ̶̶l̶̶i̶̶e̶̶f̶̶e̶̶r̶̶t̶̶ ̶(̶z̶̶u̶̶m̶̶ ̶̶t̶̶e̶̶s̶̶t̶̶e̶̶n̶̶ ̶̶h̶̶a̶̶t̶̶t̶̶e̶̶ ̶̶i̶̶c̶̶h̶̶ ̶̶d̶̶e̶̶n̶̶ ̶̶s̶̶e̶̶n̶̶s̶̶o̶̶r̶̶ ̶̶d̶̶u̶̶r̶̶c̶̶h̶̶ ̶̶d̶̶a̶̶s̶̶ ̶̶o̶̶r̶̶i̶̶g̶̶i̶̶n̶̶a̶̶l̶̶ ̶̶s̶̶c̶̶r̶̶i̶̶p̶̶t̶̶ ̶̶a̶̶u̶̶s̶̶s̶̶c̶̶h̶̶a̶̶l̶̶t̶̶e̶̶n̶̶ ̶̶l̶̶a̶̶s̶̶s̶̶e̶̶n̶)̶.̶
Ich muss nochmal was testen, melde mich danach. Sorry für den "überflüssigen" Beitrag hier.
-
@paul53 sagte in Bei Regen eine Nachricht per Telegram:
Versuch es mal so:
So, ich habe es nochmal getestet und die 10 Minuten auf 2 Minuten runter gesetzt.
Folgendes passiert, wenn Regen erkannt wird, bekomme ich eine Nachricht "Es regnet" und der Sensor wird ausgeschaltet. 2 Minuten später schaltet der Sensor sich wieder ein, stellt fest, dass es noch immer regnet, schickt mir wieder eine Nachricht "Es regnet" und schaltet dann den Sensor wieder aus. Wenn der Wert vom Regensensor über 900 liegt, bleibt der Sensor eingeschaltet und ich bekomme keine weitere Nachricht, wie es sein sollte).
-
@hagst
Ist dies nicht die gewünschte Funktion? -
@paul53 sagte in Bei Regen eine Nachricht per Telegram:
Ist dies nicht die gewünschte Funktion?
Nein, ich hätte ganz gerne nur einmalig eine Nachricht, wenn es regnet und eine weitere, wenn es nicht mehr regnet, mit dem Inhalt, dass es nicht mehr regnet. Wenn alle paar Minuten Telegram hier bimmelt, werde ich wahnsinnig.
Genauso wahnsinnig werde ich, weil ich alle paar Minuten rausrenne um den Regensensor nass zu machen -
@hagst sagte: nur einmalig eine Nachricht, wenn es regnet und eine weitere, wenn es nicht mehr regnet
Dann ändere den unteren Teil:
var lastMsg = ''; on(idAnalog, function(dp) { if(freigabe) { freigabe = false; let msg = 'Es regnet nicht mehr'; if(dp.state.val <= 900) { // Sensordaten: Kleiner als 900 = Regen und sofort wieder aus setState(idSwitch, false); // Wenn Regen wird Sensor hier ausgeschaltet msg = 'Es regnet'; } if(msg != lastMsg) { lastMsg = msg; sendTo("telegram", "send", { // Nachricht per Telegram text: msg }); } } });
-
@paul53 sagte in Bei Regen eine Nachricht per Telegram:
Dann ändere den unteren Teil:
const idSwitch = 'sonoff.0.Radar.POWER1'; // Schalter ein und aus vom Regensensor const idAnalog = 'sonoff.0.Radar.ANALOG_A0'; // Regensensor var freigabe = false; schedule('*/2 * * * *', function() { // alle 10 Minuten läuft das Script und schaut nach Sensordaten if(!getState(idSwitch).val) { // Abfragen on Schalter vom Regensensor ein oder aus ist setState(idSwitch, true); // Regensensor einschalten setTimeout(function() { freigabe = true; }, 30000); // Wartezeit bis Sensor (A0) Daten liefert 30 s } }); var lastMsg = ''; on(idAnalog, function(dp) { if(freigabe) { freigabe = false; let msg = 'Es regnet nicht mehr'; if(dp.state.val <= 900) { // Sensordaten: Kleiner als 900 = Regen und sofort wieder aus setState(idSwitch, false); // Wenn Regen wird Sensor hier ausgeschaltet msg = 'Es regnet'; } if(msg != lastMsg) { lastMsg = msg; sendTo("telegram", "send", { // Nachricht per Telegram text: msg }); } } });
So sieht es jetzt komplett aus, allerdings schaltet weder der Sensor bei Regen aus, noch bekomme ich eine Nachricht per Telegram
-
@hagst sagte in Bei Regen eine Nachricht per Telegram:
@paul53 sagte in Bei Regen eine Nachricht per Telegram:
Ist dies nicht die gewünschte Funktion?
Nein, ich hätte ganz gerne nur einmalig eine Nachricht, wenn es regnet und eine weitere, wenn es nicht mehr regnet, mit dem Inhalt, dass es nicht mehr regnet. Wenn alle paar Minuten Telegram hier bimmelt, werde ich wahnsinnig.
Genauso wahnsinnig werde ich, weil ich alle paar Minuten rausrenne um den Regensensor nass zu machenFormuliere doch bitte erst einmal für dich was du wirklich willst.
Dabei nicht irgendetwas als bekannt voraussetzen.Dann hinterfragst du das, ob es wirklich ist was du erwartest.
was ich nicht verstehe ist warum du den Sensor überhaupt abschalten musst. Ein Regensensor, der keinen Regen aushält?
-
@homoran sagte in Bei Regen eine Nachricht per Telegram:
Formuliere doch bitte erst einmal für dich was du wirklich willst.
Dabei nicht irgendetwas als bekannt voraussetzen.Ich schrieb: "Jetzt möchte ich, dass Telegram mir eine Nachricht schickt, wenn es regnet und wenn der Regenwert wieder >900 ist, möchte ich eine Nachricht bekommen, dass es nicht mehr regnet."
Der Regenwert ist in dem Code meines OP, damit man sieht was ich meine.Ein Regensensor, der keinen Regen aushält?
Jepp genau so sieht es aus. Der Sensor verträgt auf Dauer kein Wasser und durch das Ausschalten verlängert sich die Lebenszeit des Sensors.
-
@hagst sagte: schaltet weder der Sensor bei Regen aus, noch bekomme ich eine Nachricht per Telegram
Bau mal Log-Ausgaben ein, um zu sehen, was wann passiert.
EDIT: Ergänze in Zeile 12:
} else freigabe = true;
-
@paul53 sagte in Bei Regen eine Nachricht per Telegram:
Bau mal Log-Ausgaben ein, um zu sehen, was wann passiert.
Meinst du sowas? Ich habe (mal wieder) Wasser auf den Sensor geschüttet, danach kam diese Ausgabe.
javascript.0 (452693) Start javascript script.js.Regensensor_bei_Regen_aus-_und_einschalten.Regensensor_bei_Regen_ausschalten 12:57:51.233 info javascript.0 (452693) script.js.Regensensor_bei_Regen_aus-_und_einschalten.Regensensor_bei_Regen_ausschalten: schedule(cron=*/2 * * * *) 12:57:51.233 info javascript.0 (452693) script.js.Regensensor_bei_Regen_aus-_und_einschalten.Regensensor_bei_Regen_ausschalten: subscribe: {"pattern":{"id":"sonoff.0.Radar.ANALOG_A0","change":"ne","q":0},"name":"script.js.Regensensor_bei_Regen_aus-_und_einschalten.Regensensor_bei_Regen_ausschalten"} 12:57:51.233 info javascript.0 (452693) script.js.Regensensor_bei_Regen_aus-_und_einschalten.Regensensor_bei_Regen_ausschalten: registered 1 subscription and 1 schedule 12:58:00.004 info javascript.0 (452693) script.js.Regensensor_bei_Regen_aus-_und_einschalten.Regensensor_bei_Regen_ausschalten: getState(id=sonoff.0.Radar.POWER1, timerId=undefined) => {"val":true,"ack":true,"ts":1660820274432,"q":0,"from":"system.adapter.sonoff.0","user":"system.user.admin","lc":1660813920006} 13:00:00.012 info javascript.0 (452693) script.js.Regensensor_bei_Regen_aus-_und_einschalten.Regensensor_bei_Regen_ausschalten: getState(id=sonoff.0.Radar.POWER1, timerId=undefined) => {"val":true,"ack":true,"ts":1660820394450,"q":0,"from":"system.adapter.sonoff.0","user":"system.user.admin","lc":1660813920006}
-
@hagst
Ändere Zeile 12:const idSwitch = 'sonoff.0.Radar.POWER1'; // Schalter ein und aus vom Regensensor const idAnalog = 'sonoff.0.Radar.ANALOG_A0'; // Regensensor var freigabe = false; schedule('*/2 * * * *', function() { // alle 10 Minuten läuft das Script und schaut nach Sensordaten if(!getState(idSwitch).val) { // Abfragen on Schalter vom Regensensor ein oder aus ist setState(idSwitch, true); // Regensensor einschalten setTimeout(function() { freigabe = true; }, 30000); // Wartezeit bis Sensor (A0) Daten liefert 30 s } else freigabe = true; }); var lastMsg = ''; on(idAnalog, function(dp) { if(freigabe) { freigabe = false; let msg = 'Es regnet nicht mehr'; if(dp.state.val <= 900) { // Sensordaten: Kleiner als 900 = Regen und sofort wieder aus setState(idSwitch, false); // Wenn Regen wird Sensor hier ausgeschaltet msg = 'Es regnet'; } if(msg != lastMsg) { lastMsg = msg; sendTo("telegram", "send", { // Nachricht per Telegram text: msg }); } } });
-
@paul53 sagte in Bei Regen eine Nachricht per Telegram:
Ändere Zeile 12:
Du bist der Hammer Paul, es klappt wie gewünscht! Genau so wollte ich es haben! Einfach klasse, vielen vielen Dank Paul!
Wenn es jetzt regnet und der Regensensor einen Wert von < 900 ausgibt, wird er ausgeschaltet und ich bekomme eine Nachricht bei Telegram mit dem Hinweis, dass es regnet.
Wenn es aufgehört hat zu regnen, schaltet sich der Regensensor wieder dauerhaft ein und ich bekomme eine Nachricht, dass es nicht mehr regnet. -
@hagst sagte: es klappt wie gewünscht!
Dann markiere bitte das Thema in der Überschrift des ersten Beitrags als [gelöst].