Script waschmaschine

Ich bekomme erst eine Nachricht, wenn wir die Waschmaschine ausschalten. Aber sie sollte doch 1 Minute nachdem der Verbrauch unter 4 Watt ist eine Nachricht versenden.

--[[
%% properties
566 power
%% globals
--]]
 
local power_socket = 566 -- wallplug
local powerlive = fibaro:getValue(power_socket, "power")
fibaro:debug("Verbrauch = "..powerlive.." Watt")
 
if (fibaro:countScenes()>1)
  then
 fibaro:abort();
  end
 
local run = 0
local currentDate = os.date("*t");
local power = fibaro:getValue(power_socket, "power")
local counter = 0
 
if ( tonumber(fibaro:getValue(power_socket, "power")) > 35 ) and run == 0 then
  local start = (os.time())
  fibaro:debug("Waschmaschine läuft...")
  fibaro:debug("Verbrauch = "..power.." Watt")
  run = 1
end
 
while run == 1 do
 
if (tonumber(fibaro:getValue(power_socket, "power")) < 4) then
     counter = counter + 1
    local power2 = fibaro:getValue(power_socket, "power")
        fibaro:debug('counter = ' ..counter.. " : "..power2.."Watt")
    end
      if (tonumber(fibaro:getValue(power_socket, "power")) > 5 ) then
      	 counter = 0
      end
       if (tonumber(fibaro:getValue(power_socket, "power")) < 1.0) and counter > 60 then
          fibaro:debug("Waschmaschine ist fertig.")
          local power3 =  fibaro:getValue(power_socket, "power")
          fibaro:debug("Verbrauch (3) = "..power3.." Watt")
          fibaro:debug("Send Push")
    	  fibaro:call(646, "sendPush", "Waschmaschine ist fertig", "Waschmaschine");
    	  fibaro:call(632, "sendPush", "Waschmaschine ist fertig", "Waschmaschine");
		  run = 0
       end 
  fibaro:sleep(1*1000)
end

Dann musst du den Wert in Zeile 38 auch auf 4 anpassen :wink:

Gruß

Hi,

habe das Script heute auch erfolgreich mit Push und Sonos Benachrichtigung eingerichtet. Wirklich eine feine Sache!

Würde das Script auch gerne laufen lassen um den Ladevorgang von meinem Auto zu beobachten. Allerdings mit der Einschränkung das die Mitteilungen (Push und Sonos) nur zwischen 0700 und 2000 erfolgen. Alles davor oder danach würde unter Umständen die Nachtruhe und den Familienfrieden gefährden :wink:

Und als Sahnehäubchen sollte er auch noch erkennen wenn nur 10 Minuten lang Last auf der Dose ist, das soll dann als Klimatisierung gemeldet werden. Evtl. anhand der Außentemperatur unterscheiden ob der Wagen gerade vorwärmt oder vorkühlt.

Könnte man das mit diesem Script umsetzen?

Gruß Robert

Kennt noch jemand bei seiner Waschmaschine das Phänomen, dass diese sporadisch, ohne das sie an ist, wenige sekunden lang einen Verbrauch hat?
Falls ja, wie fangt ihr dies im Script ab?

1.png

Hallo zusammen,

das mit dem kurzzeitigen hohen Verbrauch haben wir auch. Für ca. 1 Minute (vielleicht auch weniger) steigt der Verbrauch auf ca. 120 Watt.
Danach ist das Script der Meinung Waschmaschine läuft und meldet brav auch “Waschmaschine fertig”. Könnte man solche Spitzen die nicht zum Betrieb der Waschmaschine gehören ausblenden - ähnlich der Abfrage ob die Maschine seit 1 Minute unter 1 Watt hat?

Danke für einen Tipp
Gruß
Hubertus

Hi,

ich habe das gleiche Problem (bei meiner Spülmaschine).

Ich habe versucht einen zweiten Zähler in das Skript zu integrieren, leider funktioniert es aber leider nicht.
Es handelt sich um die Zeilen 23-36 in diesem Code:

--[[
%% properties
387 power
%% globals
--]]
 
local power_socket = 387 -- wallplug
local powerlive = fibaro:getValue(power_socket, "power")
fibaro:debug("Verbrauch = "..powerlive.." Watt")

if (fibaro:countScenes()>1)
  then
 fibaro:abort();
  end
 
local run = 0
local currentDate = os.date("*t");
local power = fibaro:getValue(power_socket, "power")
local counter = 0
local counter2 = 0
local run2 = 0

while run2 == 0 do
  
if ( tonumber(fibaro:getValue(power_socket, "power")) > 35 ) then
   counter2 = counter2 + 1
      local power3 = fibaro:getValue(power_socket, "power")
      fibaro:debug('counter2 :' ..counter2.. " : " ..power3.. "Watt")
end
    
if (tonumber(fibaro:getValue(power_socket, "power")) < 1.0 ) then
   counter2 = 0
   fibaro:debug("Counter2 genullt 1")
   run2 = 1
 end

 if ( tonumber(fibaro:getValue(power_socket, "power")) > 35 ) and counter2 > 60 and run == 0 then
  local start = (os.time())
  fibaro:debug("Spülmaschine läuft...")
  fibaro:setGlobal("Spuelmaschine", "Läuft");
  fibaro:debug("Verbrauch = "..power.." Watt")
  run = 1
  run2 = 0
  counter2 = 0
  fibaro:debug("Counter2 genullt 2")  
end
 
while run == 1 do
 
if (tonumber(fibaro:getValue(power_socket, "power")) < 1) then
     counter = counter + 1
    local power2 = fibaro:getValue(power_socket, "power")
        fibaro:debug('counter = ' ..counter.. " : "..power2.."Watt")
    end
      if (tonumber(fibaro:getValue(power_socket, "power")) > 2 ) then
      	 counter = 0
      end
       if (tonumber(fibaro:getValue(power_socket, "power")) < 1.0) and counter > 60 then
          fibaro:debug("Spülmaschine ist fertig.")
          local power3 =  fibaro:getValue(power_socket, "power")
          fibaro:debug("Verbrauch (3) = "..power3.." Watt")
          fibaro:debug("Send Push")
    	  fibaro:call(11, "sendPush", "Spülmaschine ist fertig", "Spülmaschine");
    	  fibaro:call(331, "sendPush", "Spülmaschine ist fertig", "Spülmaschine");
    	  fibaro:setGlobal("Spuelmaschine", "Aus");
    
           run = 0
   		if ( fibaro:getGlobalValue("SleepState") == "Awake"  and  fibaro:getGlobalValue("PresentState") == "Home" ) then 
     			 fibaro:call(360, "pressButton", "13");
     			 fibaro:debug("Sprachfeedback wird gesendet");
     		else
     			 fibaro:debug("Kein Sprachfeedback, da Bedingungen nicht erfüllt.");
			end
       end 
  fibaro:sleep(1*1000)
end
end

Leider zählt der “counter2” bis 60 innerhalb von einer Sekunde.
Weiter unten im Skript “counter” bis 60 und benötigt dafür auch 60 Sekunden. Der Code ist für mich gleich.
Kann mir jemand sagen, was ich falsch mache?

Die Debugs der jeweiligen counter habe ich mal angehangen.

Vielen Dank und viele Grüße

Tom

Bildschirmfoto-2018-08-10-um-09.11.24.png

Bildschirmfoto-2018-08-10-um-09.11.41.png

Hi TomAC,

vermute mal das fibaro:sleep(1*1000) - siehe auch Zeile 75 - vergessen?

Gruß
Hubertus

Hi,

vielen Dank, das war die Lösung!

Manchmal sieht man den Wald vor lauter Bäumen nicht :slight_smile:

Gruß Tom

Hallo Tom, freut mich … kannst Du deinen Script noch mal posten?
Dann könnte ich den bestimmt so auch bei mir nutzen :wink: Danke Dir.

Gruß
Hubertus

Hi,

ja gerne.

So läuft es bei mir und verhindert seitdem die “Fehlbenachrichtigungen” bei kurzfristiger Leistungsaufnahme.

--[[
%% properties
387 power
%% globals
--]]
 
local power_socket = 387 -- wallplug
local powerlive = fibaro:getValue(power_socket, "power")
fibaro:debug("Verbrauch = "..powerlive.." Watt")

if (fibaro:countScenes()>1)
  then
 fibaro:abort();
  end
 
local run = 0
local currentDate = os.date("*t");
local power = fibaro:getValue(power_socket, "power")
local counter = 0
local counter2 = 0
local run2 = 0

while run2 == 0 do
  
if ( tonumber(fibaro:getValue(power_socket, "power")) > 35 ) then
   counter2 = counter2 + 1
      local power3 = fibaro:getValue(power_socket, "power")
      fibaro:debug('counter2 :' ..counter2.. " : " ..power3.. "Watt")
end
    
  if (tonumber(fibaro:getValue(power_socket, "power")) < 1.0 ) then
   counter2 = 0
   fibaro:debug("Counter2 genullt")
   run2 = 0
    break
    fibaro:debug("Break Befehl ausgeführt")
  end

 	if ( tonumber(fibaro:getValue(power_socket, "power")) > 35 ) and counter2 > 60 and run == 0 then
 		local start = (os.time())
 		fibaro:debug("Spülmaschine läuft...")
 		fibaro:setGlobal("Spuelmaschine", "Läuft");
  		fibaro:debug("Verbrauch = "..power.." Watt")
  		run = 1
  		run2 = 1
  		counter2 = 0
  		fibaro:debug("Counter2 genullt 2")  
	end
  fibaro:sleep(1*1000)
end
 
while run == 1 do
 
if (tonumber(fibaro:getValue(power_socket, "power")) < 1) then
     counter = counter + 1
    local power2 = fibaro:getValue(power_socket, "power")
        fibaro:debug('counter = ' ..counter.. " : "..power2.."Watt")
end
    
      if (tonumber(fibaro:getValue(power_socket, "power")) > 2 ) then
      	 counter = 0
      end
    
       if (tonumber(fibaro:getValue(power_socket, "power")) < 1.0) and counter > 60 then
          fibaro:debug("Spülmaschine ist fertig.")
          local power3 =  fibaro:getValue(power_socket, "power")
          fibaro:debug("Verbrauch (3) = "..power3.." Watt")
          fibaro:debug("Send Push")
    	  fibaro:call(11, "sendPush", "Spülmaschine ist fertig", "Spülmaschine");
    	  fibaro:call(331, "sendPush", "Spülmaschine ist fertig", "Spülmaschine");
    	  fibaro:setGlobal("Spuelmaschine", "Aus");
    
           run = 0
      
   				if ( fibaro:getGlobalValue("SleepState") == "Awake"  and  fibaro:getGlobalValue("PresentState") == "Home" ) then 
     			 fibaro:call(360, "pressButton", "13");
     			 fibaro:debug("Sprachfeedback wird gesendet");
     			else
     			 fibaro:debug("Kein Sprachfeedback, da Bedingungen nicht erfüllt.");
				end
       end 
  fibaro:sleep(1*1000)
end