NEWS
Script verbesserung
-
Hallo zusammen,
ich fange gerade mit Javascript an und hätte da mal was zum Drüberschauen.
Passt das so, oder wie kann man das Verbessern?
danke für Eure Tipps
/* Wenn der Automower seine Unterkunft (Station) verlassen hat, darf die Bewässerung nicht anspringen. Bei der Bewässerung ist ein Shelly1 zwischen Steuerung und Pumpe eingebaut. Via MQTT wird das Relais (GrundwasserPumpe) geschaltet. Version: 1.0 ist der Mäher zu hause, keine Bewässerung 1.1 Bewässerung wird mit den letzten 24h Niederschlag aus Wetterstation vernetzt */ const iDausloeser = 'alias.0.Rasenflaeche.Station'; const iDpumpe = 'alias.0.Rasenflaeche.GrundwasserPumpe'; var iDniederschlag24, iDniederschlag24_ts; iDniederschlag24 = getState('alias.0.Wetter.Doki.Niederschlag24h').val; iDniederschlag24_ts = getState('alias.0.Wetter.Doki.Niederschlag24h').ts; // triggert bei Mäher Aus- Einfahrt on({id: "alias.0.Rasenflaeche.Station", change: "any"}, function(dp) { iDniederschlag24 = getState('alias.0.Wetter.Doki.Niederschlag24h').val; if(iDniederschlag24 == 0){ /* Niederschlag die letzten 24h */ if(getState(iDausloeser).val) { setState(iDpumpe, true); } else { setState(iDpumpe, false); } } else { setState(iDpumpe, false); } console.log('Niederschlag --- Mäher --->>> ' + iDniederschlag24 + ' mm/24h'); }); // triggert ber Niederschlag die letzten 24h on({id: "alias.0.Wetter.Doki.Niederschlag24h", change: "any"}, function(dp) { iDniederschlag24 = getState('alias.0.Wetter.Doki.Niederschlag24h').val; console.log('Niederschlag --- 24h ---->>> ' + iDniederschlag24 + ' mm/24h'); if(iDniederschlag24==0) { setState(iDpumpe, true); console.log('Niederschlag ---> Pumpe an'); } else { setState(iDpumpe, false); console.log('Niederschlag ---> Pumpe aus'); } });
-
@australien sagte in Script verbesserung:
iDniederschlag24 = getState('alias.0.Wetter.Doki.Niederschlag24h').val;
Finde solche Variablennamen immer schwierig. Ich würde davon ausgehen, dass in der Variablen eine ID steht (also ein String). Und nicht ein spezifischer Wert. Liest sich komisch.
Ansonsten könnte man das Script noch deutlich kürzen.
-
@australien sagte: wie kann man das Verbessern?
Ohne die Überschrift:
const iDausloeser = 'alias.0.Rasenflaeche.Station'; const iDpumpe = 'alias.0.Rasenflaeche.GrundwasserPumpe'; const iDniederschlag24 = 'alias.0.Wetter.Doki.Niederschlag24h'; var niederschlag24 = getState(iDniederschlag24).val; // triggert bei Mäher Aus- Einfahrt on(iDausloeser, function(dp) { setState(iDpumpe, niederschlag24 == 0 && dp.state.val); log('Niederschlag --- Mäher --->>> ' + niederschlag24 + ' mm/24h'); }); // triggert ber Niederschlag die letzten 24h on(iDniederschlag24, function(dp) { niederschlag24 = dp.state.val; log('Niederschlag --- 24h ---->>> ' + niederschlag24 + ' mm/24h'); setState(iDpumpe, niederschlag24 == 0); log('Niederschlag ---> Pumpe ' + niederschlag24 ? 'aus' : 'an'); });
-
@paul53 danke dafür!
da kann ich mir schon wieder was mitnehmen. -
@haus-automatisierung stimmt, iD sollten Strings sein.
Wie gesagt, bin am Anfang. Habe selbst mit 1991 mit dem Programmieren (turbo Pascal und turbo C) aufgehört und will jetzt zu Hause wieder etwas machen. Der Kopf soll ja was zu tun haben -
@australien sagte: wieder was mitnehmen.
Wenn der "Niederschlag24h" auf 0 gehen kann, während gemäht wird, dann besser so:
const iDausloeser = 'alias.0.Rasenflaeche.Station'; const iDpumpe = 'alias.0.Rasenflaeche.GrundwasserPumpe'; const iDniederschlag24 = 'alias.0.Wetter.Doki.Niederschlag24h'; var niederschlag24 = getState(iDniederschlag24).val; var inStation = getState(iDausloeser).val; // triggert bei Mäher Aus- Einfahrt on(iDausloeser, function(dp) { inStation = dp.state.val; setState(iDpumpe, niederschlag24 == 0 && inStation); log('Niederschlag --- Mäher --->>> ' + niederschlag24 + ' mm/24h'); }); // triggert ber Niederschlag die letzten 24h on(iDniederschlag24, function(dp) { niederschlag24 = dp.state.val; log('Niederschlag --- 24h ---->>> ' + niederschlag24 + ' mm/24h'); setState(iDpumpe, niederschlag24 == 0 && inStation); log('Niederschlag ---> Pumpe ' + niederschlag24 ? 'aus' : 'an'); });
-
@paul53 ja, kann er.
-
@australien sagte: ja, kann er
Noch besser mit einer Funktion:
const iDausloeser = 'alias.0.Rasenflaeche.Station'; const iDpumpe = 'alias.0.Rasenflaeche.GrundwasserPumpe'; const iDniederschlag24 = 'alias.0.Wetter.Doki.Niederschlag24h'; var niederschlag24 = getState(iDniederschlag24).val; var inStation = getState(iDausloeser).val; function grundwasser() { let pumpe = niederschlag24 == 0 && inStation; if(pumpe != getState(iDpumpe).val) { setState(iDpumpe, pumpe); log('Pumpe ' + (pumpe ? 'an' : 'aus')); } } grundwasser(); // Skriptstart // triggert bei Mäher Aus- Einfahrt on(iDausloeser, function(dp) { inStation = dp.state.val; log('Mäher ' + (inStation ? 'in Station' : 'mäht')); grundwasser(); }); // triggert ber Niederschlag die letzten 24h on(iDniederschlag24, function(dp) { niederschlag24 = dp.state.val; log('Niederschlag --- 24h ---->>> ' + niederschlag24 + ' mm/24h'); grundwasser(); });
-
@paul53 sehr übersichtlich nun! danke!