NEWS
[Vorlage] Gartenbewässerung mit 6 Ventilen
-
@sigi234 danke, habe den fehler gerade gefunden
-
@dslraser der nächste versuch ^^:
sendTo("telegram", "send", { text: vars_notify_telegram_text, user: vars_notify_telegram_user, parse_mode: "html", });
-
@Kuddel
erstmal kannst Du die Funktion ja mal umbenennen (das _Fenster kann ja weg)Der normale Telegram Block sieht so aus:
Das ist die JS Ansicht von dem Block
also das was hinter text: blabla
ist die Nachricht.
(den Block stelle ich Dir gleich rein, ich bin am Handy)wenn Du keinen Empfänger angibst bekommen es alle die am BOT angemeldet sind, sonst nur der /die Empfänger
also so z.B.
JS
Das Gleiche kann/macht die Funktion
Das ist noch der Parsmode
-
@dslraser alles klar, dann habe ich es jetzt glaube ich begriffen
sendTo("telegram", "send", { text: vars_notify_telegram_text, user: vars_notify_telegram_user, parse_mode: "html", });
-
@Kuddel
Kann ich schon testen?
V 2.6.8 aktuell? -
-
@Kuddel Hui, hier ging heut ja richtig was Ich schaus mir morgen an - morgen frueh hab ich mal 2h keine Termine
-
@Kuddel sagte in [Vorlage] Gartenbewässerung mit 6 Ventilen:
@sigi234 klaro
bewaesserung_v2.6.8.
Test:
Anzahl Ventile habe ich auf 6 erhöht, Im DP steht noch immer 5
Fehler ist jetzt weg: State "javascript.0.bewaesserung.letzte_startzeit" not found
Beim aktivieren von Ventil 2 ist die Restzeit Falsch bzw, wird nicht gestartet.
-
zum Test von @sigi234
Test:
Anzahl Ventile habe ich auf 6 erhöht, Im DP steht noch immer 5
Dazu müßte man in der Funktion Datenpunkte_erstellen was verändern.
Ich habe Dir hier mal ein Beispiel eingebaut. Schau Dir einfach mal die Funktion Datenpunkte_erstellen an.
Dort habe ich die Anzahl der Ventile "ausgegliedert" und auf true gestellt, so wird der DP beim Neustart vom Blockly neu geschrieben. Das könntest Du auch mit den DP machen, die die Namen für die Kreise beinhalten. (ich weiß nur nicht ob der DP auch in den Objekten beschreibbar sein soll, oder nur zur Anzeige dient ? Wenn der auch von dort aus die Einstellungen verändern soll, dann muß das noch etwas anders gemacht werden. Wenn es nur eine "Anzeige" ist, wieviele Ventile da sind, dann würde ich den read only machen)
Unten in der Funktion habe ich Dir mal ein Beispiel (für die 6 Ventile) eingebaut, wie Du nicht benötigte DP wieder löschen kannst. Wird also im Blockly in den Haupteinstellungen die Anzahl der Ventile z.B. auf 4 eingestellt, dann werden Ventil 5 und 6 in den Objekten wieder gelöscht. Ich weiß nur nicht, ob Du noch einen anderen Bezug auf die Ventile im Blockly hast ?Datei ist nur für @Kuddel , da vieles deaktiviert ist.
bewaesserung_v2.6.8-test.txt.zipEDIT: übrigens....
(3984) You are assigning a number to the state "0_userdata.0.Bewaesserung.zeitplan.abends_verzoegerung_sonnenuntergang" which expects a string. Please fix your code to use a string or change the stat (3984) You are assigning a number to the state "0_userdata.0.Bewaesserung.zeitplan.morgens_verzoegerung_sonnenaufgang" which expects a string. Please fix your code to use a string or change the state
-
@sigi234 vielen Dank für den Test. Bei mir startet Ventil 2 ohne Problem.
@dslraser die beiden von dir angemerkte DPs habe ich korrigiert
ich habe deine Anpassung für die Ventil-Anzahl übernommen
//Diese DPs sollen bei jedem Speichern überschrieben werden let vars_writable = [ [basic_vars_pfad+'.ventile.anzahl_ventile', {'name':'anzahl_ventile','type':'number','read':true,'write':true,'role':'number','def':basic_vars_anzahl_ventile,'min':0, 'max':6} ], ] createUserStates(basic_vars_speicherort, true, vars_writable);
Die Namen wollte ich noch den Block integrieren, aber ich glaube nicht, dass das so funzt
//Diese DPs sollen bei jedem Speichern überschrieben werden let vars_writable = [ [basic_vars_pfad+'.ventile.anzahl_ventile', {'name':'anzahl_ventile','type':'number','read':true,'write':true,'role':'number','def':basic_vars_anzahl_ventile,'min':0, 'max':6} ], if(basic_vars_anzahl_ventile > 1) {[basic_vars_pfad+'.ventile.ventil_1.ventil_1_name', {'name':'ventil_1_name','type':'string','read':true,'write':true,'role':'string','def':basic_vars_kreis1_name}],} ] createUserStates(basic_vars_speicherort, true, vars_writable);
-
@Kuddel sagte in [Vorlage] Gartenbewässerung mit 6 Ventilen:
Die Namen wollte ich noch den Block integrieren, aber ich glaube nicht, dass das so funzt
ich schau mal und melde mich.
-
@Kuddel sagte in [Vorlage] Gartenbewässerung mit 6 Ventilen:
ich habe deine Anpassung für die Ventil-Anzahl übernommen
//Diese DPs sollen bei jedem Speichern überschrieben werden let vars_writable = [ [basic_vars_pfad+'.ventile.anzahl_ventile', {'name':'anzahl_ventile','type':'number','read':true,'write':true,'role':'number','def':basic_vars_anzahl_ventile,'min':0, 'max':6} ], ] createUserStates(basic_vars_speicherort, true, vars_writable);
Soll/muss der wirklich in den Objekten/VIS bedienbar sein, oder ist es "nur" eine Anzeige ?
sonst mach
'write':false
und dafür
'max':6
könntest Du auch Deine Variablebasic_vars_anzahl_ventile
anstelle der 6 nehmen, dann wird die max Anzahl im DP übernommen. (also auch im RAW)sonst Vorschlag
//Diese DPs sollen bei jedem Speichern überschrieben werden let vars_writable = [ [basic_vars_pfad+'.ventile.anzahl_ventile', {'name':'anzahl_ventile','type':'number','read':true,'write':false,'role':'number','def':basic_vars_anzahl_ventile,'min':0, 'max':basic_vars_anzahl_ventile} ], ] createUserStates(basic_vars_speicherort, true, vars_writable);
Der RAW sieht dann bei z.B. 4 Ventilen so aus
{ "from": "system.adapter.javascript.0", "user": "system.user.admin", "ts": 1595411381243, "common": { "name": "anzahl_ventile", "type": "number", "role": "number", "def": 4, "min": 0, "max": 4, "read": true, "false": true }, "native": {}, "acl": { "object": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator", "state": 1636 }, "_id": "0_userdata.0.Bewaesserung.ventile.anzahl_ventile", "type": "state" }
-
Hallo liebe Community,
ich lese diesen Thread seit einiger Zeit mit. Nun ist meine Frage, kann ich denn das Skript ohne "größeren" Aufwand umbauen. Ich steuere zur Zeit
meine Bewässerung mit einen Wemos d1(ESPeasy) und dort ist eine 4 Ch. Relais angeschlossen, angesteuert habe ich es immer mit einem HTTP Request.
Ihr steuert da ganze mit einem Pulse an? Dann müsste ich in der Config fuer den Esp einen Switch als Push-Button-Device anlegen? Hat jemand zufällig das selbe gemacht? Was müsste ich denn noch ändern?Gruß Andi
-
@Andreas-K hallo Andi, wenn du deine einzelnen Kanäle mit einem State schaltest, dann kannst du das Skript jetzt auch schon verwenden, da das laufende Ventil vorm aktivieren des nächsten Ventils ausgeschaltet wird.
Die Pulsetime ist nur als Backup gedacht, falls während der Bewässerung der ioBroker abstürzt.
-
Hallo @Kuddel, achso dann kann ich also den Pulse Befehl auch weglassen?
Und einfach mit cmd gpio,12,0 usw... steuern?
Dann werde ich das gleich mal testen. Das einzige was mich noch irritiert ist,
dass mit dem HM im Skript? Was müsste ich denn alles Konkret ändern?
Außer die HTTP-Request Sachen. -
@Andreas-K am einfachsten ist es, wenn du pro Kanal einen neuen DPsvom Typ Boolean (true / false) in einer extra Struktur anlegegst.
Diese DPs hintelrgest du dann in meinem Skript und baust dir einen extra Block mit den neuen DPs als Trigger.Beispiel:
Neuer-DP-1 = javascript.0.MeineDPs.Bewaesserung_Ventil_1
Neues Skript
WENN javascript.0.MeineDPs.Bewaesserung_Ventil_1 = TRUE
DANN führe deinen gewohnten http request aus.
-
@Kuddel
Ich habe jetzt die States der Ventile in einem Ordner angelegt. Leider ist es mir nicht möglich diesen ale true oder false angezeigt zu bekommen. Sondern nur 0 und 1. Wie schaut denn zb. so ein Block aus wo ich sagen kann:
Beispiel:Neuer-DP-1 = javascript.0.MeineDPs.Bewaesserung_Ventil_1
muss ich an deinem Skript sonst nichts ändern und wo füge ich am besten den Block ein:
Neues SkriptWENN javascript.0.MeineDPs.Bewaesserung_Ventil_1 = TRUE
DANN führe deinen gewohnten http request aus.
Tut mir leid, ich bin momentan noch am Anfang mit IoBroker und Java..
Gruß Andi
-
@Andreas-K du kannst das neue Skript irgendwo in meinem einfügen.
Es ist aber sinnvoller, dass in einem eigenen Skript zu machen, da bei jeder neuen Version von mir, deine Erweiterung fehlt.
Kannst du mal einen Screenshot posten ? Ich verstehe nicht genau was du mit 0 und 1 meinst
-
@Kuddel
Hallo Kuddel,
erstmal danke für deine Hilfbereitsschaft! Ich bin leider ein absoluter Anfänger
was das "programmieren" betrifft. Ich habe jetzt ein Skript erstellt, wenn
meine Datenpunkte von true/falls geändert werden, schalten diese meine
Ventile per Http request. Nun sollte ich dies in deinem Skript einbinden.
Welcher Datenpunkt muss dort getriggert werden? Da steige ich noch nicht so ganz durch,... falls ich mein externe Skript anders oder einfacher gestalten kann, dann bin ich froh um jeden Tipp.
Gruss Andi -
@Andreas-K ich würde dein Skript etwas anders bauen:
Export vom Blockly
Oben im roten Trigger musst du jetzt deine vier selbst erstellten Datenpunkte eintragen
Bei "ID auswählen" müssen ebenfalls die DPs rein.
Die DPs musst du in meinem Skript an folgender Stelle eintragen:
Bitte den kompletten Pfad verwenden