NEWS
[Help] Skript Wassersensor auswerten
-
@diamand2k22 said in [Help] Skript Wassersensor auswerten:
Hallo zusammen,
ich habe mir ein Skript gebastelt, welches den Status meiner Wassersensoren auswertet.
Wenn ein Sensor auslöst, wird mir eine Nachricht per WhatsApp aufs Handy geschickt.
Das funktioniert auch soweit ganz gut.n({id: Array.prototype.slice.apply($("state[id=*](functions=check_water)")), change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if (!getState(obj.id).val== false) { WhatsAppBot(0, String((obj.common ? obj.common.name : "")) + ' – meldet Wasseraustritt!<br>*Bitte überprüfen!!!!*'); } })
Nun schreibt er mir in der Nachricht "Wassersensor Enthärtung water - meldet Wasseraustritt!
Bitte überprüfen!"Meine Frage wäre, wie kann ich den Namen der Variable "water" aus dem Text filtern und ggf. noch den Raum mit ausgeben?
Danke für eure Antworten.
Grüße
Diamand
Hallo Paul,
danke für deine schnelle Antwort.
Ich hab es jetzt so wie im Codefenster gelöst.
So funktioniert es.Grüße
on({id: Array.prototype.slice.apply($("state[id=*](functions=check_water)")), change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if (!getState(obj.id).val== false) { WhatsAppBot(0, String ('*!!Achtung!!*<br>' + (obj.channelName ? obj.channelName :"")) + '<br>meldet Wasseraustritt!<br>*Bitte umgehend überprüfen!!!!*'); } })
-
@diamand2k22 sagte: Ich hab es jetzt so wie im Codefenster gelöst.
Weshalb zeigst Du den Javascript-Code, wenn es mittels Blockly erstellt wurde?
Außerdem doppelte Verneinung:nicht Wert vom Objekt ID = falsch
oder noch eleganter:
-
Hallo Paul,
ich habe das Script nicht mit Blockly erstellt, das ist alles im JavaScript verpackt.
Hab mir das zusammenkopiert und entsprechend abgeändert.
Jetzt lasse ich mir zusätzlich über den Alexa EchoDot noch eine Sprachnachricht ausgeben.
So sieht mein Code so aus:createState('waterAlert', false); createState('waterAlertRoom', false); on({id: Array.prototype.slice.apply($("state[id=*](functions=check_water)")), change: "gt"}, async function (obj,id) { var value = obj.state.val; var oldValue = obj.oldState.val; var room = getObject(id, 'rooms').enumNames[0]; setState('javascript.0.waterAlert', true); setState('javascript.0.waterAlertRoom', room); alarmOnAlexa(); nachrichtOnWhatsApp(); } ); function alarmOnAlexa(id){ if(getState('javascript.0.waterAlert').val) { var room = getObject(id, 'rooms').enumNames[0]; setState('alexa2.0.Echo-Devices.G090XG12149215R4.Commands.speak', 'Achtung! Im ' + room + ' wurde ein Wassereinbruch festgestellt!'); setTimeout(alarmOnAlexa, 5000); } } function nachrichtOnWhatsApp(obj){ if(getState('javascript.0.waterAlert').val) { WhatsAppBot(0, String ('*!!Achtung!!*<br>' + (obj.channelName ? obj.channelName :"")) + '<br>meldet Wasseraustritt!<br>*Bitte umgehend überprüfen!!!!*'); } }
Meine Fragen wären:
Die Abfrage aus welchem Raum der Alarm kommt funktioniert nicht.
Wie kann ich bei dem EchoDot die Lautstärke bei Alarm erhöhen und wenn der Alarm quittiert wurde wieder zurück stellen?Auszug aus dem Log:
javascript.0 705 2022-08-27 10:58:32.068 error at processImmediate (node:internal/timers:466:21) javascript.0 705 2022-08-27 10:58:32.068 error at Immediate.<anonymous> (/opt/iobroker/node_modules/@iobroker/js-controller-adapter/src/lib/adapter/adapter.js:5909:56) javascript.0 705 2022-08-27 10:58:32.067 error at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:596:29) javascript.0 705 2022-08-27 10:58:32.067 error at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1212:38) javascript.0 705 2022-08-27 10:58:32.066 error at Object.<anonymous> (script.js.common.Test.Test:7:36) javascript.0 705 2022-08-27 10:58:32.065 error script.js.common.Test.Test: TypeError: Cannot read properties of null (reading 'enumNames') javascript.0 705 2022-08-27 10:58:32.057 warn script.js.common.Test.Test: Object "undefined" does not exist
Danke und Grüße
-
@diamand2k22 sagte: Die Abfrage aus welchem Raum der Alarm kommt funktioniert nicht.
Vorschlag:
createState('waterAlert', false, {type: 'boolean', name: 'Wasseralarm'}); createState('waterAlertRoom', '', {type: 'string', name: 'Raum Wassereinbruch'}); var timer = null; var room = ''; function alarmOnAlexa() { setState('alexa2.0.Echo-Devices.G090XG12149215R4.Commands.speak', 'Achtung! Im ' + room + ' wurde ein Wassereinbruch festgestellt!'); timer = setTimeout(alarmOnAlexa, 5000); } function nachrichtOnWhatsApp(obj) { WhatsAppBot(0, '*!!Achtung!!*<br>' + obj.channelName + '<br>meldet Wasseraustritt!<br>*Bitte umgehend überprüfen!!!!*'); } on(Array.prototype.slice.apply($("*(functions=check_water)")), function(dp) { if(dp.state.val) { room = getObject(dp.id, 'rooms').enumNames[0]; setState('javascript.0.waterAlert', true, true); setState('javascript.0.waterAlertRoom', room, true); alarmOnAlexa(); nachrichtOnWhatsApp(dp); } else { clearTimeout(timer); setState('javascript.0.waterAlert', false, true); } });
Woher kommt die Funktion WhatsAppBot()?
-
Hallo Paul,
danke dir es funktioniert nun perfekt.
Das einzige wäre noch die Lautstärke von echo dot bei Alarm hochzustellen und danach wieder auf den vorherigen Wert.Grüße
-
@diamand2k22 sagte: Lautstärke von echo dot
Davon habe ich keine Ahnung.
-
ich hab das Problem dass die Abfrage in welchem Raum der Alarm auslöst als Wert dann [object Object], [object Object] zurück bekomme.
Hast du eine Idee was da falsch ist?Die Abfrage wird mit:
room = getObject(dp.id, 'rooms').enumNames.join(', ');
gemacht.
Die Variable room ist definiert mit:
var room = '';
Unter objects sind die Räume wie folgt definiert:
Gruß diamand
-
@diamand2k22 sagte: [object Object], [object Object] zurück bekomme.
Sind die Raumnamen mehrsprachig? Wenn ja:
room = getObject(dp.id, 'rooms').enumNames; for(let i = 0; i < room.length; i++) { if(typeof room[i] == 'object') room[i] = room[i].de; }; room = room.join(', ');
-
Es funktioniert perfekt, danke dir!!
-
Hallo Paul,
wie kann ich beim Starten des Skriptes einmalig prüfen, ob ein Rauchmelder ausgelöst hat.
Aktuell bekomme ich keine Meldung wenn ich das Skript nach dem der Rauchmelder ausgelöst hat, starte.Danke und Gruß
createState('0_userdata.0.Datenpunkte.Rauchmelder.smokeAlert'/*smokeAlert*/, false, {type: 'boolean', name: 'Feueralarm'}); createState('0_userdata.0.Datenpunkte.Rauchmelder.smokeAlertRoom'/*smokeAlertRoom*/, '', {type: 'string', name: 'Raum Feueralarm'}); var timer = null; var room = ''; var idEcho = "alexa2.0.Echo-Devices.G2A1A605204600ED"; var volume = getState(idEcho+".Player.volume"/*volume*/).val; function alarmOnAlexa() { setState(idEcho+".Commands.speak"/*speak*/,'Achtung! Im ' + room + ' wurde Rauch festgestellt!'); timer = setTimeout(alarmOnAlexa, 6000); } function alexa2controll(){ setState(idEcho+".Player.controlPause"/*pause*/,true,false); setState(idEcho+".Player.volume"/*volume*/,100); alarmOnAlexa(); } function nachrichtOnWhatsApp(obj){ if(getState('0_userdata.0.Datenpunkte.Rauchmelder.smokeAlert'/*smokeAlert*/).val) { WhatsAppBot(2, String ('*!!Achtung!!*<br>' + (obj.channelName ? obj.channelName :"")) + '<br>meldet Rauch/Feuer <br>im ' + room + '!<br>*Bitte sofort überprüfen!!!!*'); } } on(Array.prototype.slice.apply($("state[id=*](functions=check_smoke)")), function(dp) { if(dp.state.val) { room = getObject(dp.id, 'rooms').enumNames; for(let i = 0; i < room.length; i++) { if(typeof room[i] == 'object') room[i] = room[i].de; }; room = room.join(', '); setState('zigbee.0.0015bc0031015362.alarm'/*Manual Start of Siren - Esszimmer OG*/, true, true); setState('zigbee.0.0015bc0031014470.alarm'/*Manual Start of Siren - Treppenhaus OG*/, true, true); setState('zigbee.0.0015bc0031013f40.alarm'/*Manual Start of Siren - Arbeitszimmer EG*/, true, true); setState('zigbee.0.0015bc0031013dc7.alarm'/*Manual Start of Siren - Esszimmer EG*/, true, true); setState('zigbee.0.0015bc003101495b.alarm'/*Manual Start of Siren - Technikraum UG*/, true, true); setState('0_userdata.0.Datenpunkte.Rauchmelder.smokeAlert'/*smokeAlert*/, true, true); setState('0_userdata.0.Datenpunkte.Rauchmelder.smokeAlertRoom'/*smokeAlertRoom*/, room, true); alexa2controll(); nachrichtOnWhatsApp(dp); } else { clearTimeout(timer); setState('zigbee.0.0015bc0031015362.alarm'/*Manual Start of Siren - Esszimmer OG*/, false, true); setState('zigbee.0.0015bc0031014470.alarm'/*Manual Start of Siren - Treppenhaus OG*/, false, true); setState('zigbee.0.0015bc0031013f40.alarm'/*Manual Start of Siren - Arbeitszimmer EG*/, false, true); setState('zigbee.0.0015bc0031013dc7.alarm'/*Manual Start of Siren - Esszimmer EG*/, false, true); setState('zigbee.0.0015bc003101495b.alarm'/*Manual Start of Siren - Technikraum UG*/, false, true); setState('0_userdata.0.Datenpunkte.Rauchmelder.smokeAlert'/*smokeAlert*/, false, true); setState(idEcho+".Player.controlPause"/*pause*/,false,true); setState(idEcho+".Player.volume"/*volume*/,30); } });