Wattbezogene abschaltung

Hallo zusammen,
ich experimentiere schon eine Ewigkeit mit dieser einfachen Szene rum und komme nicht weiter.
Meine Teichpumpe (skimmer) soll dreimal am Tag für 120 minuten angehen. Das sollte so auch im script funktionieren.
zusätzlich soll der Wattverbrauch gemessen werden. Wenn die pumpe leer läuft sinkt der stromverbrauch und ich möchte, dass die pumpe abgeschaltet wird und ich eine Push Nachricht bekomme. Am besten wäre, wenn das ganze script abgebrochen wird, damit die pumpe nicht beim nächsten termin wieder anspringt.
Das gleiche soll auch passieren wenn der Wattverbrauch steigt.
Kann mir da jemand helfen?

–[[
%% properties
%% autostart
%% globals
–]]

fibaro:debug(‘Erstmalig gestartet’)

local sourceTrigger = fibaro:getSourceTrigger();
local version = ‘1.1’;

fibaro:debug(‘Skimmer (Ver.’ … version … ‘)’);

function varTime()

local morgens = {08, 00};
local mittags = {12, 00};
local abends = {18, 00};
local midnight = {23, 59};
local dauer = 120 – Laufzeit des Skimmers in Minuten

local morgens = os.date("%H:%M", -3600+ morgens[1]6060 + morgens[2]*60);
local mittags = os.date("%H:%M", -3600+ mittags[1]6060 + mittags[2]*60);
local abends = os.date("%H:%M", -3600+ abends[1]6060 + abends[2]*60);
local midnight = os.date("%H:%M", -3600+ midnight[1]6060 + midnight[2]*60);
local ostime = os.date("%H:%M", os.time());

local verbrauch1 = tonumber(fibaro:getValue( 80,“power”)); – Skimmer
local verbrauch2 = tonumber(fibaro:getValue( 1,“power”)); – Filter

local skimmer = {80 }; --Skimmer
local filter = {79}; --Filter

-------------------Push Nachricht----------------------------------------
local phoneID = {114, 104, 14} --christoph
local title = ‘Skimmer läuft leer!’
local message = ‘Soll der skimmer ausgeschaltet werden?’
local category = ‘YES_NO’ – or ‘YES_NO’ or RUN_CANCEL
local sceneID = 0

fibaro:debug(‘Funktion gestartet’)

if fibaro:countScenes() > 1 then
fibaro:debug(“stop scene”);
fibaro:abort();
end

fibaro:debug(‘Funktion gestartet’)

---------------------------morgens-------------------------------------------
--------------------------Skimmer an -----------------------------------------
if ostime == morgens
then
fibaro:call(80, “turnOn”)
fibaro:debug(“Skimmer an”);
fibaro:debug(‘Aktueller Verbrauch: ‘… verbrauch1 …’ Watt.’);
fibaro:sleep(dauer601000) – Minuten Verzögerung
fibaro:call(80, “turnOff”)
fibaro:debug(“Skimmer aus”);

---------------------------------Mittags-------------------------------------------
--------------------------Skimmer an----------------------------------------------
elseif ostime == mittags
then
fibaro:call(80, “turnOn”)
fibaro:debug(“Skimmer an”);
fibaro:debug(‘Aktueller Verbrauch: ‘… verbrauch1 …’ Watt.’);
fibaro:sleep(dauer601000) – Minuten Verzögerung
fibaro:call(80, “turnOff”)
fibaro:debug(“Skimmer aus”);


---------------------------Abends--------------------------------------------
--------------------------Skimmer an -----------------------------------------
elseif ostime == abends
then
fibaro:call(80, “turnOn”)
fibaro:debug(“Skimmer an”);
fibaro:debug(‘Aktueller Verbrauch: ‘… verbrauch1 …’ Watt.’);
fibaro:sleep(dauer601000) – Minuten Verzögerung
fibaro:call(80, “turnOff”)
fibaro:debug(“Skimmer aus”);


---------------------Überlastschutz----------------------------------------
if ostime > morgens and ostime < midnight
or (verbrauch1 > 50)
then
fibaro:debug(‘Aktueller Verbrauch: ‘… verbrauch1 …’ Watt.’);
fibaro:call(80, “turnOff”)
fibaro:debug(“überlast, Skimmer aus”);
end

else
fibaro:debug("No action");
end


setTimeout(varTime, 60*1000)
end

if (sourceTrigger["type"] == "autostart") 
then varTime()

end

Hmm, der Code nicht ganz einfach zu lesen (vielleicht ist mir im Moment auch einfach zu warm), aber ich würde da in etwa so rangehen: aus den jeweiligen langen Sleep-Anweisungen würde ich wohl while-Schleifen machen, die einen Timer im Sekundentakt runterzählen. Hat den Vorteil, dass du währenddessen den Stromverbrauch abfragen und die Push-Mitteilungen umsetzen kannst.

Viele Grüße
Schnuckman

Danke für die Antwort.

Wie kann ich hier was posten, so dass der code farbig und geordnet angezeigt wird?
Ich bekomme die while schleife nicht hin.
Der Skimmer wird ausgeschaltet, aber ich bekomme jede sekunde ne push nachricht.
hier der code:

if ostime == morgens
then
fibaro:call(117, “turnOn”)
fibaro:debug(“Skimmer an”);
fibaro:debug(‘Aktueller Verbrauch: ‘… verbrauch1 …’ Watt.’);
while a <= laufzeit do

  		if (verbrauch1 &gt; 100) 
    	then 	fibaro:debug('Aktueller Verbrauch: '.. verbrauch1 ..' Watt.');
				fibaro:call(117, "turnOff");
				fibaro:call(104, "sendPush", "Skimmer ist voll");
				fibaro:debug('skimmer ausgeschaltet')
    	else 
		a = a + 1
    	end
			fibaro:sleep(1000)
  	end
Wie kann ich hier was posten, so dass der code farbig und geordnet angezeigt wird?

Oberhalb des Editor Fensters siehst Du eine Reihe mit Buttons. Auf ‚code‘ klicken, dann Deinen Code einfügen und nochmal auf ‚code‘ klicken.
Nach dem Absenden siehst Du das Ergebnis.

deine While-Schleife sieht grundsätzlich gut aus. Aber sobald dein Skimmer wegen Überlast ausgeschaltet wird, zählt dein Timer “a” nicht weiter, die while-Schleife läuft dann unbegrenzt weiter. Setz doch in dem Moment a = laufzeit+1, dann beendet sich die Schleife. Oder nimm eine weitere Variable (zB “Ueberlast” oder so), die bei Auslösung der Überlast gesetzt wird, dann kannst du das im weiteren Tagesverlauf in alle while-Schleifen zusätzlich abfragen (while a<=laufzeit and Ueberlast = 0…).

Viele Grüße
Schnuckman

Fortsetzung der Diskussion von Wattbezogene abschaltung:

Hallo Leute,
ich nochmal. Ich habs bis heute nicht hinbekommen. Vielleicht hat ja einer von euch interesse mein Skript zu beenden:
Hier nochmal die Fakten:
In meinem Teich habe ich einen skimmer, der das Laub absaugt.

  1. Jedesmal wenn der Skimmer anspringt hat er einen anderen Watt Verbrauch
  2. Kurz nachdem er angelaufen ist (ca. 5 sekunden) pendelt er sich auf einen Watt Verbrauch ein.
  3. Ab dann soll überwacht werden ob der skimmer voll sitzt, dann verändert sich die Wattzahl nämlich um ca. 5 Watt.
  4. Tritt dies ein soll das gerät ausgeschaltet werden, Push nachricht senden und scene ausschalten.

Hier meine Scene:

–[[
%% properties
117 value
%% autostart
%% globals
–]]

fibaro:debug(‚Erstmalig gestartet‘)

local sourceTrigger = fibaro:getSourceTrigger();
local version = ‚1.2‘;
local skimmer = 117

local verbrauchalt = fibaro:getGlobalValue(‚Verbrauch1‘)
local verbrauchaktuell = tonumber(fibaro:getValue( skimmer,„power“));

local Handychristoph = tonumber(fibaro:getGlobalValue(„HandyIDChris“))


fibaro:debug(‚Skimmer (Ver.‘ … version … ‚)‘);
fibaro:debug(‚alter Verbrauch ’ …verbrauchalt… ’ Watt .‘);
fibaro:debug(‚Funktion gestartet‘)

if fibaro:countScenes() > 1 then
  	fibaro:debug("stop scene");
  	fibaro:abort();
end