NEWS
[gelöst]Überwachung einer Poolpumpe
-
Hallo zusammen,
habe folgendes Blockly erstellt, dass meine Poolpumpe überwachen soll. Überwacht wird eine HM Steckdose mit Leistungsmessung.
Funktioniert die Pumpe ordnungsgemäß, pendelt sie sich eingeschaltet bei ca 520 Watt ein. Zieht sie z.B. nicht genug Wasser, fällt die Leistung unter 500 Watt. Ist sie länger als 15 Sekunden unter 500 Watt, soll sich die Pumpe ausschalten, also die Steckdose soll sich ausschalten. Es soll dann eine Pushover Nachricht versendet werden.
Die Pumpe springt nicht sofort über 500 Watt wenn sie eingeschaltet wird. Das habe ich ebenfalls versucht einzubeziehen.
Ich glaube ich habe den Timer nicht richtig angewendet. Vielleicht hab ich auch woanders n Denkfehler. Kann mir jemand helfen?
Da Pushover grundsätzlich funktioniert, hab ich das eingeklappt.Danach würde ich gerne noch was anderes dort einbinden, aber das würde ich erst ansprechen wenn das jetzige richtig funktioniert.
-
@dominik-f sagte: Vielleicht hab ich auch woanders n Denkfehler.
Was funktioniert nicht?
-
Ich bekomme z.B. eine Pushover wenn ich die Pumpe manuell ausschalte. Dazu löst es glaube ich nicht zuverlässig aus bzw bekomme ich keine Pushover wenn die Pumpe durch das Skript ausgeschaltet wurde.
Ich lasse bis dieses Skript richtig funktioniert mein ursprüngliches daneben laufen was zuverlässig funktioniert. Glaube bei dem hast du mir auch geholfen. Ich möchte nur auf Blockly switschen da ich das einfacher finde und mich damit zukünftig auseinandersetzen möchte.
Hier ist das funktionierende:
const logging = true; const id_Power_Poolpumpe = 'alias.0.DR_Garage.Steckdose Poolpumpe.POWER'/*Poolpumpe POWER*/; const id_Poolpumpe = 'alias.0.DR_Garage.Steckdose Poolpumpe.STATE'/*Poolpumpe Switch state*/; var timer = null; var pumpe = getState(id_Poolpumpe).val; const prio_Poolpumpe = 0; //Variablen für Pushover const sendpush = true; //true = verschickt per Pushover Nachrchten // false = Pushover wird nicht benutzt const pushover_Instanz0 = 'pushover.0'; // Pushover instance für Prio = 0 const pushover_Instanz1 = 'pushover.1'; // Pushover instance für Prio = 1 const pushover_Instanz2 = 'pushover.2'; // Pushover instance für Prio = 2 const pushover_Instanz3 = 'pushover.3'; // Pushover instance für Prio = -1 oder -2 var prio = -2; //nicht verändern die höchste Prio nach Fehlertyp wird verwendet var titel; var message; //var device = 'Handy_Domi'; //Welches Gerät soll die Nachricht bekommen var device = 'All'; var tmp; //Ab hier eigentliches Script function send_pushover(device, message, titel, prio) { var pushover_Instanz; if (prio === 0) { pushover_Instanz = pushover_Instanz0; } else if (prio == 1) { pushover_Instanz = pushover_Instanz1; } else if (prio == 2) { pushover_Instanz = pushover_Instanz2; } else { pushover_Instanz = pushover_Instanz3; } sendTo(pushover_Instanz, { device: device, message: message, title: titel, priority: 0, }); } on(id_Power_Poolpumpe, function (dp) { if (dp.state.val < 500) { if (dp.oldState.val >= 500) { timer = setTimeout(function () { if (pumpe) { setState(id_Poolpumpe, false); tmp = 'Poolpumpe ausgeschaltet - Poolpumpe überprüfen'; if (logging) { log(tmp); } if (sendpush) { prio = prio_Poolpumpe; message = tmp; titel = 'Fehler Poolpumpe'; send_pushover(device, message, titel, prio); } } }, 10000); } } else if (timer) clearTimeout(timer); }); on(id_Poolpumpe, function (dp) { pumpe = dp.state.val; });
-
@dominik-f
Ich habe sowas ähnliches gebaut (Pumpe einer Balkonbewässerung)Ein Problem ist die mehrfach Triggerung durch " Pumpe Power wurde geändert"
Die Pumpem Power ist keine Konstante
Da muss eine Verriegelung eingebaut werden damit das Script nicht immer bei jeder kleinen Änderung der Pumpenleistung neu startet.
Siehe dir mal mein Blockly an.
Mit der Variablen Pumpe eingeschaltet auf wahr wird das Script gegen erneutes triggern gesichert.Am Ende muss natürlich auch ein "Pumpe eingeschaltet auf falsch" gesetzt werden
-
@dominik-f sagte: Hier ist das funktionierende:
Das ist nahezu identisch. Ich kann im Blockly keinen Fehler erkennen, vorausgesetzt
Wert
undvorheriger Wert
stammen aus den Trigger-Blöcken und sind keine selbst erstellten Variablen. -
Muss bei einer Überwachung der Leistung denn nicht jede Änderung der Leistung "überwacht" werden?
oder verstehe ich da was falsch?Ja, Wert und vorheriger Wert sind keine eigenen Variablen.
Habe ich denn das Timeout richtig gesetzt?
Ich habe noch einen Timer in einem anderen Skript verwendet, dort wurde erst Stop Timout ausgeführt und dann der Timer gestartet.
Kann es sein das ich das hier auch machen muss?Hier das Beispiel das ich meine:
In dem Skript wird nach Sonnenuntergang eine Lampe für eine bestimmte Zeit eingeschaltet, wenn ein Bewegungsmelder eine Bewegung erkennt. -
oder kann es sein, dass das Javascript Skript schneller ausgeführt wird und dadurch das Blockly nicht richtig funktioniert?
-
Du hast natürlich Recht, war mein Gedanken Fehler.
In meinem Blockly wollte ich die Laufzeit der Pumpe haben. -
@dominik-f sagte in Überwachung einer Poolpumpe:
Ich lasse bis dieses Skript richtig funktioniert mein ursprüngliches daneben laufen was zuverlässig funktioniert.
Laufen wirklich beide Scripte parallel oder schaltest du beim Test das JavaScript ab?
-
Ja, bisher laufen beide parallel
-
@dominik-f sagte: Habe ich denn das Timeout richtig gesetzt?
Ja.
@dominik-f sagte in Überwachung einer Poolpumpe:
dort wurde erst Stop Timout ausgeführt und dann der Timer gestartet.
Funktioniert genauso, ist nur etwas eleganter gelöst.
-
@dominik-f sagte in Überwachung einer Poolpumpe:
Ja, bisher laufen beide parallel
Dann stop mal das JavaScript, wenn du das Blockly testen möchtest. Ansonsten funkt dir das dazwischen, weil ja beide auf den selben Datenpunkt triggern.
Gruß Tom
-
Könntest du mir die elegantere Lösung eventuell zeigen?
Habe das andere Skript nun gestoppt und lasse die Power mit InfluxDB aufzeichnen. Heute ist das Skript angesprungen und hat die Pumpe ausgeschaltet, ich weiß nur nicht ob es so richtig war das die ausgeht, daher das aufzeichnen. Melde mich sobald ich weiß ob das Skript richtig funktioniert bzw. wann genau es probleme gibt.
-
@dominik-f sagte: Könntest du mir die elegantere Lösung eventuell zeigen?
falls Wert >= 500 mache stop timeout sonst falls vorheriger Wert >= 500 mache Ausführen timeout
-
So richtig?
Was ich feststellen konnte ist bisher, dass das Skript die Pumpe öfter ausschaltet, als das javascript. Die Frage ist nur, ob sich was an der Pumpe verändert hat oder welches der beiden Skripte richtig funktioniert. Ich logge erst mal die Leistung eine Zeit ohne Skript und schaue wie sich die Leistung so verhält.
-
@dominik-f sagte: So richtig?
Nein.
falls Wert >= 500
Anstelle des falls-Blockes unten, kann man "sonst falls" verwenden.
-
Ah, das hatte ich nicht gesehen^^
-
@dominik-f
Immer noch falsch: Die äußere falls-Klammer weg lassen! -
Du meinst das mit Wert <500?
-
@dominik-f sagte: Du meinst das mit Wert <500?
Ja, denn so wird der Timeout nie gestoppt, denn Wert kann nicht gleichzeitig < 500 und >= 500 sein.