NEWS
Test Adapter Gartenbewässerung v0.0.x
-
@jb_sullivan
Ich vermute das auch. Ich habe hier ein Script mit einer kleinen Variation. Das läuft auch im Sommer einwandfrei. Ich wohne auch nördlich von Bielefeld. Da gibt es im Sommer Probleme mit dem Datenpunkt "Nacht". Ich glaube, dass Script stammt von Paul.Hier der Code:
const sec = false; // Sekunden darstellen oder nicht const fC = true; // forceCreation ein/aus const pfad = "Astro"; // Pfad zum Objekt - Objektbaum-Hauptverzeichnis // ***************************************************************************** // TAGESZEITEN - T E I L // Tageszeiten nach eigenem Gusto (Shifts siehe schedules weiter unten) const tageszeiten = ["Nacht", "Morgendämmerung", "Sonnenaufgang", "Morgen", "Vormittag", "Mittag", "Nachmittag", "Abend", "Sonnenuntergang", "Abenddämmerung" ]; const idTageszeit = "javascript." + instance + "." + pfad + ".Tageszeit.current" /*Tageszeit*/, idTageszeitNext = "javascript." + instance + "." + pfad + ".Tageszeit.next"; createState(idTageszeit, "nächsten Wechsel abwarten", fC, { name: "Tageszeit", desc: "Name der Tageszeit", type: "string" }); createState(idTageszeitNext, "nächsten Wechsel abwarten", fC, { name: "nächste Tageszeit", desc: "Name der nächsten Tageszeit", type: "string" }); function neue_tageszeit(abschnitt) { var akt = tageszeiten[parseInt(abschnitt, 10)], // wenn aktuelles Element ist letztes, dann nächstes ist erstes :-D nxt = (abschnitt + 1 === tageszeiten.length) ? tageszeiten[0] : tageszeiten[parseInt(abschnitt + 1, 10)]; setState(idTageszeit, akt); setState(idTageszeitNext, nxt); log("neue Tagezeit: " + akt); log("nächte kommende Tagezeit: " + nxt); } // Nacht schedule({ astro: "nauticalDusk", shift: 45 }, function () { neue_tageszeit(0); }); // Morgengdämmerung schedule({ astro: "nauticalDawn", shift: -45 }, function () { neue_tageszeit(1); }); // Sonnenaufgang schedule({ astro: "sunrise" }, function() { neue_tageszeit(2); }); // Morgen schedule({ astro: "sunriseEnd" }, function () { neue_tageszeit(3); }); // Vormittag schedule({ astro: "goldenHourEnd", shift: 60 }, function () { neue_tageszeit(4); }); // Mittag schedule({ astro: "solarNoon", shift: -30 }, function () { neue_tageszeit(5); }); // Nachmittag schedule({ astro: "solarNoon", shift: 30 }, function () { neue_tageszeit(6); }); // Abend schedule({ astro: "goldenHour", shift: -60 }, function () { neue_tageszeit(7); }); // Sonnenuntergang schedule({ astro: "sunsetStart", }, function () { neue_tageszeit(8); }); // Abenddämmerung (nach Sonnenuntergang) schedule({ astro: "sunset" }, function () { neue_tageszeit(9); }); // ***************************************************************************** // A S T O - T E I L /* Objekt Astrotag Astrotag liegt zwischen Sonnauf- und untergang, Astronacht liegt zwischen Sonnenunter- und aufgang */ const idAstrotag = "javascript." + instance + "." + pfad + ".Astrotag"; // Objekt für Uhrzeiten der Astrozeiten const astrotime = { "elements" : [ // Astrotag beginnt { "fname" : "sunrise", // function name "de" : { "name" : "Sonnenaufgang", "nxt" : "nächster", "desc" : "" }, "en" : { "name" : "Sunrise", "desc" : "top edge of the sun appears on the horizon" }, "astroday" : true //during astroday }, { "fname" : "sunriseEnd", // function name "de" : { "name" : "Ende Sonnenaufgang", "nxt" : "nächstes", "desc" : "" }, "en" : { "name" : "End of sunrise", "desc" : "bottom edge of the sun touches the horizon" }, "astroday" : true //during astroday }, { "fname" : "goldenHourEnd", // function name "de" : { "name" : "Ende der goldenen Stunde am Morgen", "nxt" : "nächstes", "desc" : "" }, "en" : { "name" : "End of golden hour", "desc" : "morning golden hour (soft light, best time for photography) ends" }, "astroday" : true //during astroday }, { "fname" : "solarNoon", // function name "de" : { "name" : "Sonnenhöchststand", "nxt" : "nächster", "desc" : "" }, "en" : { "name" : "Solar noon", "desc" : "sun is in the highest position" }, "astroday" : true //during astroday }, { "fname" : "goldenHour", // function name "de" : { "name" : "Goldene Stunde (am Abend)", "nxt" : "nächste", "desc" : "" }, "en" : { "name" : "Golden hour", "desc" : "evening golden hour starts" }, "astroday" : true //during astroday }, { "fname" : "sunsetStart", // function name "de" : { "name" : "Beginn Sonnenuntergang", "nxt" : "nächster", "desc" : "" }, "en" : { "name" : "Sunset starts", "desc" : "bottom edge of the sun touches the horizon" }, "astroday" : true //during astroday }, // Astronacht beginnt { "fname" : "sunset", // function name "de" : { "name" : "Sonnenuntergang", "nxt" : "nächster", "desc" : "" }, "en" : { "name" : "Sunset", "desc" : "sun disappears below the horizon, evening civil twilight starts" }, "astroday" : false //during astronight }, { "fname" : "dusk", "de" : { "name" : "Abenddämmerung", "nxt" : "nächste", "desc" : "" }, "en" : { "name" : "Dusk", "desc" : "evening nautical twilight starts" }, "astroday" : false //during astronight }, { "fname" : "nauticalDusk", "de" : { "name" : "nautische Abenddämmerung", "nxt" : "nächste", "desc" : "" }, "en" : { "name" : "Nautical dusk", "desc" : "evening astronomical twilight starts" }, "astroday" : false //during astronight }, { "fname" : "nadir", "de" : { "name" : "Nadir", "nxt" : "nächster", "desc" : "Fußpunkt gegenüber dem Zenit" }, "en" : { "name" : "Nadir", "desc" : "darkest moment of the night, sun is in the lowest position" }, "astroday" : false //during astronight }, { "fname" : "nauticalDawn", "de" : { "name" : "nautische Morgendämmerung", "nxt" : "nächste", "desc" : "" }, "en" : { "name" : "Nautical dawn", "desc" : "morning nautical twilight starts" }, "astroday" : false //during astronight }, { "fname" : "dawn", "de" : { "name" : "Morgendämmerung", "nxt" : "nächste", "desc" : "" }, "en" : { "name" : "dawn", "desc" : "morning nautical twilight ends, morning civil twilight starts" }, "astroday" : false //during astronight } ] }; function writeAstroTimes(i) { // führende Nummer zur Sortierung in Admin/Objekte var nr = (i+1 < 10) ? "0" + (i+1) : (i+1); // Erstelle Objekt, falls nicht bereits vorhanden var idAstroObject = "javascript." + instance + "." + pfad + ".Zeiten." + nr + " - " + astrotime.elements[i].fname; createState(idAstroObject, " ", fC, { name: astrotime.elements[i].de.nxt + " " + astrotime.elements[i].de.name + " Uhrzeit", desc: astrotime.elements[i].en.desc, type: "string" }); setTimeout(function() { // kurz warten, damit Objekte ggf. erst angelgt werden können var astrotag = getState(idAstrotag).val, temp; var today = new Date(); var tomorrow = today.setDate(today.getDate()+1); var next_event; if (astrotag) { // Wenn Tag (Aufgang vorbei (erst wieder morgen, Untergang kommt noch heute) next_event = (astrotime.elements[i].astroday) ? tomorrow : today; // prüfen } else { // nach Nacht (Untergang vorbei (erst wieder morgen, Aufgang kommt heute oder morgen) next_event = (astrotime.elements[i].astroday) ? today : tomorrow; // prüfen } var fname = astrotime.elements[i].fname; temp = getAstroDate(fname, next_event); setState(idAstroObject, checkSec(temp.toLocaleTimeString()) ); }, 3 * 1000); } // Zeit mit oder ohne Sekunden anzeigen function checkSec (zeit) { if (!sec) { var newString_arr = zeit.split(":"); var newString = newString_arr[0] + ":" + newString_arr[1]; return (newString); } else return (zeit); } function getAstroday() { // Astrotag bestimmen (boolean) createState(idAstrotag, false, fC, { type: "boolean", name: "Astrologischer Tag", desc: "Liegt die aktuelle Zeit zwischen Sonnenauf- und untergang" }); setState(idAstrotag, isAstroDay()); } function iterateAstrotimes() { // Zeiten für jede Astrozeit schreiben for (var i = 0; i < astrotime.elements.length; i++) { writeAstroTimes(i); } } // Astrotag checken schedule("*/1 * * * *", function () { // jede Minute getAstroday(); iterateAstrotimes(); }); iterateAstrotimes(); getAstroday();
-
Gibt es denn nen Workaround dafür, dass bei jeder Änderung über die VIS der Adapter neustartet? Hat sich dort schon mal jemand was gebastelt? Ist ja schrecklich, wenn man viele Kreise besitzt
-
@snapergy Der Adapter ist leider nicht so aufgebaut dass das möglich ist.
-
@tombox
Ich wollte gerade von meiner Testinstallation auf die produktive einsteigen und fand den Adapter weder in Beta noch im stable Repository.Dann wollte ich fragen, ob dieser Adapter noch weiter entwickelt wird und hatte auf github nachgesehen. Dort sind letzten Monat noch Änderungen durchgeführt worden.
Daher wndertze ich mich., als ich auf der Suche nach dem Github link im ersten Post las:
@tombox sagte in Test Adapter Gartenbewässerung v0.0.x:
Die bessere alternative die auch weiterentwickelt wird ist:
https://github.com/Dirk-Peter-md/ioBroker.sprinklecontrol
https://forum.iobroker.net/topic/44493/test-adapter-sprinkle-control-0-1-4-latestDas ist leider für mich keine Alternative, da dieser Adapter ausschließlich auf Vorhersagen und Verdunstungsberechnungen basiert.
Ich arbeite mit Feuchtesensoren (so ungenau sie auch sein mögen) und werde mir dann wohl doch eigene Scripte basteln müssen
Oder ist diese Info inzwischen hoffentlich wieder überholt?
-
@homoran Er wird nicht weiter entwickelt habe nur die sachen für js controller 3.3 gefixt. Ich denke aber das sprinkecontrol einbaut wenn du die anfrage stellst
-
@tombox Danke für die schnelle und ehrliche Antwort.
Aber ehrlich ist dein Adapter für mich besser, Sprinkle control hatte ich mir mal angesehen, da sind für mich zu viele Funktionen/Berechnungsgrundlagen, die ich nicht benötige, und solche Antworten wie:
Es tut mir leid, aber diese Änderung steht nicht im Einklang mit den Grundprinzipien des Adapters. Ich werde sie daher nicht umsetzen.
Erledige diese individuellen Aufgaben doch mit JS oder Blockly.motivieren nicht gerade.
-
@tombox hat bestimmt mit dem VW Wallbox Adapter genug zu tun, zumal der VAG Konzern die e-Autos z.Zt. raushaut wie geschnitten Brot und sich somit auch alle Nase lang etwas an den WB Einstellungen ändern dürfte.
Von daher habe ich dafür schon ein gewisses Verständnis. Aber mir geht es wie dir - der Gartenbewässerungsadapter von tombox ist einfach nur geil und leistet mir dieses, wie auch letztes Jahr hervorragende Dienste.
Hauptsache er bleibt noch lange lauffähig.
-
@jb_sullivan sagte in Test Adapter Gartenbewässerung v0.0.x:
Von daher habe ich dafür schon ein gewisses Verständnis.
das hab ich doch auch!
Aber ich brauche den Schnickschnack von sprinkle nicht
Sitze mit meinem bescheidenen Wissen gerade am Blockly -
@homoran sagte in Test Adapter Gartenbewässerung v0.0.x:
@jb_sullivan sagte in Test Adapter Gartenbewässerung v0.0.x:
Von daher habe ich dafür schon ein gewisses Verständnis.
das hab ich doch auch!
Aber ich brauche den Schnickschnack von sprinkle nicht
Sitze mit meinem bescheidenen Wissen gerade am BlocklySo sehe ich das auch....Sprinkler C. ist zu verworren.
Der hier hat alles was man braucht und ist stabil.
Mit einem Blockly lässt sich das zwar lösen aber ich bin da kein Freund davon.Finde es mega schade das der Adapter atirbt
-
@bob-der-1 sagte in Test Adapter Gartenbewässerung v0.0.x:
Sprinkler C. ist zu verworren.
naja, sagen wir mal der ist akademisch.
Wenn man alleine auf Regenmenge, Luftfeuchte, Windstärke und Helligkeit (als Sonneneinstrahlung!!) die theoretische Bodenfeuchte berechnet, werden alleine z.B. verschiedene Bödendurchlässigkeiten, und Pflanzgegebenheiten nicht berücksichtigt.
So habe ich zwei Pflanzmauern (1x 25cm breit, 1x 60cm breit) sowie eine Rasenfläche und unterschiedlich wind- und sonnengeschützte Areale in meinem Garten (mit unterschiedlicher Bodenqualität)
in jedem spezifischen Areal steht ein Bodenfeuchtesensor und jedes dieser Areale soll je nach Bedarf getrennt bewässert werden (im Moment noch Mischbewässerung).
Dieses kann IMHO der Sprinkle-Adapter nicht abbilden.Ich hatte ihn gerade trotzdem noch mal installiert, finde aber keine einfache Möglichkeit eine Herangehensweise wie mit dem Gartenbewässerungs-Adapter dort abzubilden.
Dazu sind die beiden Ansätze zu unterschiedlich -
Könnte man den Adaper nicht in die Community aufnehmen, damit er uns erhalten bleibt und Erweiterungen möglich sind?
Wenn @tombox nichts dagegen hat? -
@sigi234
Dafür müsste er wahrscheinlich erstmal die "bürokratischen" Hürden der ioBroker Oberen überwinden, denn bis heute ist er weder im latest noch im stable zu finden.Entweder hat sich tombox gar nicht um eine Aufnahme bemüht, oder er müsste den Adapter in großen Teilen umschreiben, damit er überhaupt aufgenommen werden kann. Vielleicht liegt da die Kruxx mit der Weiterentwicklung - wer weiß das schon.
Ich kenne noch einen anderen Adapter der Super ist (BYDHVS) und der seit Wochen darauf wartet überhaupt aufgenommen zu werden. Der Entwickler hat seinen Teil wohl erledigt und nun wartet und wartet er.
Offensichtlich sind die "Master of Adapter Freigaben" im Moment mehr mit Admin 5.x und js-controller 3.3.x beschäftigt - nicht böse gemeint
-
@jb_sullivan sagte in Test Adapter Gartenbewässerung v0.0.x:
Dafür müsste er wahrscheinlich erstmal die "bürokratischen" Hürden der ioBroker Oberen überwinden
ich denke. das hat er ja gerade gemacht.
@jb_sullivan sagte in Test Adapter Gartenbewässerung v0.0.x:
Entweder hat sich tombox gar nicht um eine Aufnahme bemüht,
bei einer Versionsnummer von 0.0.7 wäre das auch gar nicht verwunderlich.
Aber sie läuft ja im Prinzip problemlos.
Da könnte IMHO die Version deutlich hochgesetzt werden, da (mir) der Funktionsumfang so vollkommen in Ordnung erscheint@jb_sullivan sagte in Test Adapter Gartenbewässerung v0.0.x:
Ich kenne noch einen anderen Adapter der Super ist (BYDHVS) und der seit Wochen darauf wartet überhaupt aufgenommen zu werden. Der Entwickler hat seinen Teil wohl erledigt und nun wartet und wartet er.
Das ist ein anderes Thema
@jb_sullivan sagte in Test Adapter Gartenbewässerung v0.0.x:
Offensichtlich sind die "Master of Adapter Freigaben" im Moment mehr mit Admin 5.x und js-controller 3.3.x beschäftigt
Das hat nichts miteinander zu tun, da müsste erst einmal der "Antrag gestellt werden".
-
@jb_sullivan Ich habe ihn nie in latest hinzugefügt weil er minimum dynamisch anzahl von ventile unterstützen müsste dafür. Dann kam der sprinkecontroler der ein guten Funktionsumfang hat und deswegen war für mich kein notwendigkeit ihn weiterzuentwickeln damit er beta/latest wird. Aber ich habe kein Problem damit ihn zu warten damit er funktionsfähig bleibt.
-
@tombox sagte in Test Adapter Gartenbewässerung v0.0.x:
Aber ich habe kein Problem damit ihn zu warten damit er funktionsfähig bleibt.
Danke!
trotzdem will ich es jetzt mal mit einem Blockly selbst versuchen -
Kann es sein, das unter Umständen noch ein kleiner Fehler im Adapter bzgl. der Restlaufzeit drin ist? Ich bin mir ziemlich sicher, das letzten Sommer die Restlaufzeit Werte dort angezeigt wurden. Ist das evtl. auch eine Nachwirkung von js-controller 3.3.x?
Ich bekomme bei der Restlaufzeit im VIS das hier angezeigt:
In dem Datenpunkt wird die Laufzeit aber scheinbar korrekt eingetragen
Hier die RAW Daten dazu.
{ "type": "state", "common": { "name": "restzeit", "role": "indicator", "type": "string", "write": false, "read": true, "unit": "min" }, "native": {}, "from": "system.adapter.gartenbewaesserung.0", "user": "system.user.admin", "ts": 1622049718696, "_id": "gartenbewaesserung.0.status.ventil4.restzeit", "acl": { "object": 1636, "state": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" } }
Im VIS habe ich ein basic-time value mit dieser Einstellung gewählt. Gibt es vielleicht eine Idee dazu? Gibt es hier noch jemanden bei dem die Restlaufzeit nicht angezeigt wird? Adapter Version ist 0.08. DP`s wurden auch gelöscht und mit der 0.0.8 neu angelegt.
.... und diese Meldungen bekomme ich immer noch im LOG
gartenbewaesserung.0 2021-06-18 06:35:50.029 info (15320) State value to set for "gartenbewaesserung.0.status.restzeit" has to be type "number" but received type "string" gartenbewaesserung.0 2021-06-18 06:35:40.023 info (15320) State value to set for "gartenbewaesserung.0.status.restzeit" has to be type "number" but received type "string" gartenbewaesserung.0 2021-06-18 06:35:30.022 info (15320) State value to set for "gartenbewaesserung.0.status.restzeit" has to be type "number" but received type "string" gartenbewaesserung.0 2021-06-18 06:35:20.025 info (15320) State value to set for "gartenbewaesserung.0.status.restzeit" has to be type "number" but received type "string" gartenbewaesserung.0 2021-06-18 06:35:10.020 info (15320) State value to set for "gartenbewaesserung.0.status.restzeit" has to be type "number" but received type "string" gartenbewaesserung.0 2021-06-18 06:35:00.021 info (15320) State value to set for "gartenbewaesserung.0.status.restzeit" has to be type "number" but received type "string" gartenbewaesserung.0 2021-06-18 06:34:50.022 info (15320) State value to set for "gartenbewaesserung.0.status.restzeit" has to be type "number" but received type "string"
-
@jb_sullivan Es ist ein normaler String/Text und kein time value mehr
-
Kann man mit dem Adapter eigentlich mehrere Kreis gleichzeitig laufen lassen? Ich Frage, weil ich eine neue Pumpe montiert habe, welche nun genug Leistung hat, um auch mehrere Kreise gleichzeitig voll zu versorgen.
Irgendwie stehe ich gerade auf dem Schlauch wie man das im Adapter realisieren kann. Händisch einschalten funktioniert, aber automatisch wird immer ein Kreis nach dem anderen abgearbeitet.
-
@jb_sullivan Mach dir einen eigenen Datenpunkt. Diesen schaltest Du mit dem Adapter.
Und dann ein kleines Script was auf den Datenpunkt reagiert und die eigentlichen 2 oder 3 oder 4 Kreise schaltet. -
@tombox OK, Danke für den Hinweis, funktioniert wieder. Hattest du nicht diese "Störmeldungen" die durch den js-controller 3.3.x verusacht wurden, in der Version 0.0.8 eleminiert?
Bei mir sind sie leider immer noch vorhanden. Auch wenn ich den Datenpunkt Typ in RAW Daten von "string" auf "number" ändere, poppen die Meldungen auf.
gartenbewaesserung.0 2021-06-19 06:58:38.661 info (3996) State value to set for "gartenbewaesserung.0.status.restzeit" has to be type "number" but received type "string" gartenbewaesserung.0 2021-06-19 06:58:28.694 info (3996) State value to set for "gartenbewaesserung.0.status.restzeit" has to be type "number" but received type "string" gartenbewaesserung.0 2021-06-19 06:58:18.656 info (3996) State value to set for "gartenbewaesserung.0.status.restzeit" has to be type "number" but received type "string" gartenbewaesserung.0 2021-06-19 06:58:15.481 info (3996) State value to set for "gartenbewaesserung.0.status.restzeit" has to be type "number" but received type "string" gartenbewaesserung.0 2021-06-19 06:58:15.475 warn (3996) Read-only state "gartenbewaesserung.0.status.ventil1.endeTimestamp" has been written without ack-flag with value "1624080495" gartenbewaesserung.0 2021-06-19 06:58:15.474 warn (3996) Read-only state "gartenbewaesserung.0.status.ventil1.ende" has been written without ack-flag with value "Sat Jun 19 2021 07:28:15 GMT+0200" gartenbewaesserung.0 2021-06-19 06:58:15.473 info (3996) State value to set for "gartenbewaesserung.0.status.restzeit" has to be type "number" but received type "string" gartenbewaesserung.0 2021-06-19 06:58:15.457 info (3996) Start ventil1 gartenbewaesserung.0 2021-06-19 06:58:15.439 info (3996) Stop ventil4 in 6330sek gartenbewaesserung.0 2021-06-19 06:58:15.439 info (3996) Start ventil4 in 4830sek gartenbewaesserung.0 2021-06-19 06:58:15.438 info (3996) Stop ventil3 in 4820sek gartenbewaesserung.0 2021-06-19 06:58:15.438 info (3996) Start ventil3 in 3620sek gartenbewaesserung.0 2021-06-19 06:58:15.438 info (3996) Stop ventil2 in 3610sek gartenbewaesserung.0 2021-06-19 06:58:15.437 info (3996) Start ventil2 in 1810sek gartenbewaesserung.0 2021-06-19 06:58:15.436 info (3996) Stop ventil1 in 1800sek gartenbewaesserung.0 2021-06-19 06:58:15.436 info (3996) Start ventil1 in 0sek gartenbewaesserung.0 2021-06-19 06:58:15.404 info (3996) Start pumpe gartenbewaesserung.0 2021-06-19 06:58:15.403 info (3996) Start Bewaesserung