Jump to content

Recommended Posts

Posted (edited)
Hello,
i want to switch Output from shelly with SW-Input between 8 and 20 o Clock.
I can see SW-Input in shelly App (green light).
 
I now need a function or script like

If (Time > 8  and Time < 20 ) { 
    if (Shelly-SW-Voltage> 200) { Shelly-Output = On; } 
    else { Shelly-Output = Off; } 


Does anybody has an idea?

Best regard and a nice week,


Sebastian

 


 

Edited by nebuto
Posted (edited)
3 hours ago, tvbshelly said:

You could create a schedule and use an action to switch on/off

I dont get, how to set a interval/range in a schedule, so i tried to create a action with a time interval from 8 to 20 o clock.

When the input on SW is on, the Output switches to on.
When the input on SW is off, the Output switches to off.
So far so good.

But the time interval does not work at all. So the Output is on, whenever SW is on. But it should not happen from 20 to 8 o Clock in the night. When i test it out of the time interval it still goes on.

Here are my settings (in german).

image.png.9056e48127f13d703cf233a1b083975b.png

image.png.1989220e1fef8eb00062cde086b0ae80.png

image.png.d95d40209fa94d92cbafcba2bf265078.png

 

 

 

 

Edited by nebuto
Posted (edited)
1 hour ago, tvbshelly said:

Möglicherweise funktioniert es, wenn du den SW / Button auf den Modus "Detached" einstellst.

Ich habe mal den Button auf Detached gestellt. Dann ist bei Standardeinstellungen Einschalten allerdings die unterste Option ausgegraut. "... entsprechend dem Zustand der Schalters oder der Taste ..."

image.thumb.png.4848ba82c947dc883d48bbc6f63c4010.png

Jetzt meckert er, dass der Hook meiner Action nicht zum Komponentenmodus passt.

image.png.5966741472b2d3bfc209c54c213df4cb.png

Zu meinem Problem:

Ich habe einen Pool und möchte unter anderem die PH-Minus-Pumpe automatisieren. Hierfür habe ich einen W2839 als Sensorgerät. Der W2839 ermitteln den PH-Wert und den Redox-Wert (sowas wie der Chlor-Wert). Er verfügt auch noch über zwei "Steckdosen" - eine für PH und eine für Redox. Man kann Softwaremäßig Alarmwerte für PH und Redox einstellen. Werden die Werte überschritten, wird die entsprechende Steckdose mit Strom versorgt. Werden die Were wieder unterschritten, gehen die Steckdosen wieder aus.

Anfangs hatte ich dann einfach meine Peristaltikpumpe für PH-Minus in die "Steckdose" de W2839 für PH gesteckt, was auch gut funktioniert hat. Die PH-Dosierung darf aber nur zwischen 8 und 20 Uhr laufen wenn die Poolpumpe läuft, weil es sonst zu einer Überdosierung kommen könnte und das ganze PH-Minus auf einmal im Pool landen könnte. Jetzt könnte ich einfach den W2839 mit einer Schaltzeituhr versehen und das Problem wäre erledigt. Leider spinnt der Redox-Wert, den ich für meine Chlor-Dosierung benötige, wenn ich den W2839 nicht die Nacht durchlaufen lasse. Das Ganze ist ein wenig eine günstige Bastellösung 😉

Daher dachte ich, ich könnte das ja ganz einfach mit einem Shelly realisieren. Von der PH-"Steckdose" des W2839 habe ich mir eine Leitung zum SW meines Shellys gelegt. Ich kann in der Shelly App jetzt sehen, ob der entsprechende Alarmwert überschritten wurde (grünes Licht) oder nicht (rote Licht).

image.png

 

Leider verstehe ich die Shelly-Logik noch nicht so ganz. Das Problem scheint ja eigentlich nicht unmöglich zu sein, oder? Hier ist meine Skizze. Ich habe jetzt mal PE wegen der Übersicht weggelassen.

image.thumb.png.5a8baf153af84e12233ec33e81024cdb.png

 

 

Edited by nebuto
Posted (edited)

Dein Signal am SW Eingang ist doch eigentlich ein Schalter und kein Taster 😉

und wenn du (wie im Anschlussschema von Dir) diesen verwendest muss er doch nicht auf detached?

 

und verwende mal bitte direkt die WebUi vom Shelly für diese Aktion (IP im Browser öffnen) und nicht als weite Fehlerquelle die App 🧐

Edited by Dreckfresse
Posted (edited)
2 hours ago, Dreckfresse said:

Dein Signal am SW Eingang ist doch eigentlich ein Schalter und kein Taster 😉

und wenn du (wie im Anschlussschema von Dir) diesen verwendest muss er doch nicht auf detached?

Hab es jetzt auf Schalter gestellt - "Toggle - Act as a flip input with one state for ON and one state for OFF"
und bei "Action on power on for Output (0)" hab ich "Current state of the switch".
Habe jetzt zwei Actions erstellt.
1. Action geht von 8 - 20 Uhr und schaltet den Output auf On, sobald der SW "On" getogglet wird.

2. Action  geht von 20 bis 8 Uhr und schaltet den Output Off, wenn SW "On" getogglet wird.

Das kappt so ganz gut. Wenn ich zwischen 8 und 20 Uhr Strom an SW bekomme, geht die Steckdose an. Wenn ich zwischen 20 und 8 Uhr strom bekomme, bleibt sie aus.

Wenn jetzt der Strom während der Zeit von 20 bis 8 Uhr aus irgendeinem Grund angeschaltet würde, würde er aber nicht automatisch ausgehen. Er prüft die Action ja immer nur beim Event "Input Toggle".  Bei den Actions habe ich da keinen Weg gefunden. Da kann man immer nur Toggle on/off als Bedingung angeben.

Ich habe mir jetzt eine Schedules geschrieben, die von 20 bis 7 uhr, jede Stunde, jede 5 Minuten die Steckdose ausstellt. Das sollte hoffentlich dafür sorgen, dass die Pumpe nachts niemals länger als 5 Minuten laufen sollte.
image.thumb.png.8d6552bb66c4e4f90d6db1803ea5ea60.png

Schon einmal vielen Dank für die Tipps. Sieht noch jemand Schwachstellen im System? Es wäre halt sehr mies, wenn die ganzen 25 Liter PH-Minus auf einmal in den Pool-Kreislauf kommen würden ^^

Edited by nebuto
Posted (edited)
20 hours ago, nebuto said:

Ich habe mal den Button auf Detached gestellt. Dann ist bei Standardeinstellungen Einschalten allerdings die unterste Option ausgegraut. "... entsprechend dem Zustand der Schalters oder der Taste ..."

Die Idee mit dem Detached war eine andere - ich versuche das mal zu beschreiben:

Wenn man SW auf Detached setzt, dann bewirkt die Betätigung des Schalters erstmal keine Aktion des Relais mehr, aber man kann trotzdem eine Aktion / Webhook / etc. auf den Schalter legen. Oft nutzt man das, um entweder damit einen anderen Shelly zu schalten oder man zweckentfremdet den SW als Rückmelde-Eingang für das, was man mit dem Shelly schaltet - schalten geht dann nur via App oder Webhook.

Ich wollte die Aktion / Webhook des Schalter nutzen, um damit auf dem gleichen Shelly was zu triggern, dabei aber zuerst die Bedingung prüfen und dann das Relais nur schalten, wenn deine Bedingung zutrifft. Ggf. muss man mit dem Webhook (als Reaktion auf den Schalter) ein Skript auf dem Shelly aufrufen, was die Prüfung macht, wenn man das nicht mit einer Szene oder Aktion hinbekommt.

Ich hoffe, du bekommst eine Vorstellung von meiner Idee. Leider habe ich grad keinen Plus 1 zu Hand, um es selbst auszuprobieren; daher ist es nicht so einfach, das zu beschreiben.

Edited by tvbshelly
Posted (edited)

Ich bekomme eine Idee was du meinst.

Ich glaube ich habe das bei meinem anderen Problem-Thread auch schon einmal versucht.
Hier möchte ich, dass der Shelly nicht sofort einschaltet, sondern erst mit einer Zeitverzögerung von 30 Minuten. Hier habe ich den Schalter auf Detached gesetzt und versuche das Problem der Zeitverzögerung mit Webhooks wie

http://localhost/relay/0?turn=on&timer=ttt

zu lösen.

Das gleiche klappt anscheinend auch mit den Actioin Befehlen "Output State off" und "Flip value"

image.thumb.png.2571fbf06c612203b79da04602548014.png

Leider funktioniert das bei mir nicht so recht. Wenn der Switch auf detached steht passiert beim Toggle überhaupt nichts. Wenn er nicht auf detached steht, geht die Steckdose nach dem "Switch toggle on" für ein paar Millisekunden an und dann direkt wieder aus.

Hast du vielleicht eine Idee woran das liegen kann? In dem Thread habe ich den ganzen Aufbau detaillierter beschrieben. 😉

Edited by nebuto
Posted
12 minutes ago, thgoebel said:

Wenn man einen Shelly verzögert EINSCHALTEN möchte, muß der Webhook so aussehen:

http://192.168.1.63/relay/0?turn=off&timer=6

In diesem Beispiel wird der Shelly nach 6 Sekunden dauerhaft EINGESCHALTET.

Genau so habe ich es ja versucht. Switch ist auf detached und dann bei "switch toggle on" den Webhook von dir. Leider passiert weder nach 6 Sekunden noch nach 60 Sekunden irgendwas.
Auch der Webhook zum ausmachen bei "switch toggle off" klappt nicht. Es verändert den Zustand von Output nicht.

http://192.168.1.63/relay/0?turn=off

Statt der IP-Adresse nutze ich localhost, weil es ja auf sich selbst geht.
Vielleicht hab ich irgendwas "dummes" übersehen 😮

Posted (edited)

Danke nochmal!

Jetzt klappt es. Ich hatte keine Input-Action gewählt.

 

image.thumb.png.4f2faf23f10a45a34c674493ae175500.png

Ich versuche es morgen mal, wenn die Pumpe wieder läuft, aber der Testlauf gerade hat funktioniert.
Die Steckdose (also Output vom Shelly) geht nur an, wenn SW lange genug "feuert". Genau so woltle ich es. Das Problem mit der Hysterese ist damit gelöst.

 

Vielen lieben Dank! Den anderen Thread kann man dann schließen/löschen.

 

 

 

Edited by nebuto
  • Members
Posted (edited)

Nebuto wrote:

Genau so habe ich es ja versucht. Switch ist auf detached und dann bei "switch toggle on" den Webhook von dir. Leider passiert weder nach 6 Sekunden noch nach 60 Sekunden irgendwas.“

Habe mich darauf bezogen:

3 hours ago, nebuto said:

Hier habe ich den Schalter auf Detached gesetzt und versuche das Problem der Zeitverzögerung mit Webhooks wie

http://localhost/relay/0?turn=on&timer=ttt

zu lösen.

Und da lese ich „turn=on“ und nicht „turn=off“.

Edited by thgoebel
Posted

noch eine Frage.

Ich habe jetzt zwei Steckdose, die haben actions, wenn es einen Wechsel an SW gibt. Wenn sich tagsüber was verändert klappt alles.

Wenn es jetzt aber zum Beispiel nachts einen Wechsel an SW gibt, dann geht am nächsten Tag ja erstmal nichts an, weil ich ja in der Zeit von 20 bis 8 uhr keine Änderungen wahrnehme.

Kann man irgendwie am morgen einmal checken, ob an SW ein Signal anliegt und dann den Output anmachen?

Posted (edited)

Du kannst im WebUI eine Schedule für täglich 8 Uhr anlegen und mit einer Aktion verknüpfen.

Alternativ kann man eine kleine Skript-Funktion schreiben, die diese Prüfung macht und den Output schaltet und diese via Schedule aufrufen:

function swcheck() {
  print("Check ...");
}

function createSchedule() {
  Shelly.call(
    "Schedule.Create",
    {
      enable: true,
      timespec: "0 0 8 * * *",
      calls: [
        {
          method: "Script.Eval",
          params: {
            id: Shelly.getCurrentScriptId(),
            code: "swcheck()",
          },
        },
      ],
    }
  );
}

createSchedule();

0 0 8 * * * = um 08:00:00 jeden Tag aufrufen

 

Edited by tvbshelly
Posted
6 hours ago, tvbshelly said:

Du kannst im WebUI eine Schedule für täglich 8 Uhr anlegen und mit einer Aktion verknüpfen.

Aber wenn ich das richtig sehe, kann ich als Action nur den Output anmachen oder ausmachen.

Ich müsste aber eigentlich so was wie ein "wenn" haben um 9 uhr.

if (sw is on) { 
	output = on;
} else {
	output = off;
}

Mit dem Skripting muss ich mal schauen. Ich dachte, es geht vielleicht auch ohne. Ansonsten muss ich mir das mal anschauen.
Vielen Dank für das Skript!

Posted

Also ich lese mich gerade in die Documentation von Shelly ein. Ich finde die mehr als ungeeignet für einen schnellen Einstieg in das Scripting von Shelly. Die beschreiben viele Konzepte, geben aber kaum Beispiele.

Bei Google kommt man auch immer nur wieder auf das Tutorial der Seite oder auf die fertigen Skripte auf Github. Wo gibts denn mal so Basisskripte?

Mein "Hello Welt"-Skript läuft, aber wie kann ich denn jetzt zum Beispiel testen, ob an SW eine Spannung anliegt? Wie kann ich dann einfach den Output anschalten?

Gibt es irgendwo ein besseres Tutorial was ich übersehen habe?

Posted (edited)

Ich habe vergessen, wie gut die KIs teilweise sind.
ChatGPT hat mir in 4 Sekunden eine Lösung angeboten, die auf den ersten Blick zu funktionieren scheint. Auch wenn der Timer das Skript jetzt jede Sekunde startet. Aber das lässt sich ja anpassen 🙂

Meine Anfrage bei chatGPT:

Quote

schreibe mir ein shelly skript für meine Shelly plus 1 pm. Das Skript soll überprüfen, ob eine Strom an SW anliegt. Wenn Strom anliegt soll er den Output anschalten. Wenn kein Strom anliegt soll er den Output ausschalten.

Die Antwort:

// Shelly-Skript für Shelly Plus 1 PM
// Überprüft, ob Strom an SW anliegt, und steuert den Output entsprechend

// Funktion zum Überprüfen des SW-Eingangs
function checkSW() {
  // SW-Status abfragen
  let sw_status = Shelly.getComponentStatus("input:0").state;
  
  if (sw_status) {
    // Wenn Strom an SW anliegt (SW ist HIGH), schalte den Output ein
    Shelly.call("Switch.Set", { id: 0, on: true });
    print("Strom an SW erkannt. Output eingeschaltet.");
  } else {
    // Wenn kein Strom an SW anliegt (SW ist LOW), schalte den Output aus
    Shelly.call("Switch.Set", { id: 0, on: false });
    print("Kein Strom an SW. Output ausgeschaltet.");
  }
}

// Überprüfung alle 1 Sekunde durchführen
Timer.set(1000, true, function() {
  checkSW();
});

Falls trotzdem jemand noch ein gutes Tutorial kennt, wie man den Einstieg in die Shelly-Welt schafft, würde ich mich über einen Link freuen. Java Script kann ich einigermaßen.

VG

Update:
Das gesamte Skript mit tvbshellys Skript kombiniert funktioniert auch, wird einmal um 8:01 Uhr gestartet und sieht dann so aus:

// Shelly-Skript für Shelly Plus 1 PM
// Überprüft täglich um 8 Uhr morgens, ob Strom an SW anliegt, und steuert den Output entsprechend

// Funktion zum Überprüfen des SW-Eingangs
function checkSW() {
  // SW-Status abfragen
  let sw_status = Shelly.getComponentStatus("input:0").state;
  
  if (sw_status) {
    // Wenn Strom an SW anliegt (SW ist HIGH), schalte den Output ein
    Shelly.call("Switch.Set", { id: 0, on: true });
    print("Strom an SW erkannt. Output eingeschaltet.");
  } else {
    // Wenn kein Strom an SW anliegt (SW ist LOW), schalte den Output aus
    Shelly.call("Switch.Set", { id: 0, on: false });
    print("Kein Strom an SW. Output ausgeschaltet.");
  }
}

function createSchedule() {
  Shelly.call(
    "Schedule.Create",
    {
      enable: true,
      timespec: "0 1 8 * * *",
      calls: [
        {
          method: "Script.Eval",
          params: {
            id: Shelly.getCurrentScriptId(),
            code: "checkSW()",
          },
        },
      ],
    }
  );
}

createSchedule();

Danke nochmal 🙂

Edited by nebuto

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Erstelle neue...