Seite 1 von 1

Rule mit Timer deaktivieren, wenn Item ON

Verfasst: 5. Aug 2018 13:05
von Ordnas
Hallo Zusammen

ich habe mir eine Rule erstellt, wenn in der Druckerwarteschlange Dokuemnte zu ausdrucken liegen, soll er den Drucker einschalten. Danach sobald der Spooler leer ist nach 5 Minuten wieder ausschalten:

Code: Alles auswählen

var Timer Drucker01Timer = null
 
rule "Drucker01_Jobs"
when
  Item EG_Buero_Drucker01_JobsSpooler changed or
  Item Homematic_EG_Buero_Drucker01_Scanner_Dose_Status changed or
  Item EG_Buero_Drucker01_Status changed
then
 
  // Kontrollieren ob Druckjobs vorhanden sind
  if (EG_Buero_Drucker01_JobsSpooler.state != 0) {
    // Ja, es sind Druckjobs vorhanden
    logInfo("Drucker01_Jobs", EG_Buero_Drucker01_JobsSpooler.state+" queued job(s) found")
 
    // Abschalttimer reseten
    if (Drucker01Timer!==null) {
      logInfo("Drucker01", "Abschalttimer reseten")
      Drucker01Timer.cancel
      Drucker01Timer=null
    }
 
    // Drucker einschalten falls ausgeschaltet
    if (Homematic_EG_Buero_Drucker01_Dose_Status.state!=ON) {
      logInfo("Drucker01", "Drucker01 ein")
      sendCommand(Homematic_EG_Buero_Drucker01_Dose_Status,ON)
    } else {
      logInfo("Drucker01", "Drucker01 aus")
    }
  } else {
    // Keine Druckjobs vorhanden
    logInfo("Drucker01_Jobs", "Keine Druckjobs mehr vorhanden")
 
    // Drucker im Energiesparmodus?
    if (EG_Buero_Drucker01_Status.state==1) {
      logInfo("Drucker01", "Drucker01 ist im Energiesparmodus, ausschalten in 5 Minuten")
      // Drucker01 ausschalten in 5 minuten
      // Bei drucken wöhrend Timer läuft, Timer reset
      Drucker01Timer = createTimer(now.plusMinutes(5)) [|
        sendCommand(Homematic_EG_Buero_Drucker01_Dose_Status,OFF)
      ]
    } else {
      logInfo("Drucker01", "Drucker01 ist nicht mehr im ENergiesparmodus ("+EG_Buero_Drucker01_Status.state+"), warten auf Energiesparmodus")
 
      // Reset Timer wenn Druckjob oder Status ändert
        if (Drucker01Timer!==null) {
        logInfo("Drucker01", "Reset laufender Timer zum ausschalten")
        Drucker01Timer.cancel
        Drucker01Timer=null
      }
    }
  }
end
Das funktionert ziemlich gut und ist stabil.

Nun zu meinem Problem. Der betroffene Drucker, ist ein Kompi Gerät. Nun, wenn ich etwas einscannen möchte, und den Drucker einschalte, wird er nach 5 Minuten, wie in meiner Regel wieder ausgeschaltet, da ja keine Druckaufträge vorhanden sind.

Nun möchte ich ein Switch Item erstellen: Scannen. Welches eigentlich den Drucker einschaltet und den Timer bzw. die Rule aussschaltet. Bis ich den Scanner Switch wieder auf Off stelle.

Hat jemand eine Idee, wie ich das realisieren könnte? Am besten iergendwie, wenn Switch ON, Timer ausschalten. Das selbe Problem werde ich auch mit meinen Garagentore später haben. Denn da möchte ich auch einen Timer setzten, falls ich aber mal in der Garage eine längere Zeit arbeite, würde ich auch da gerne den TImer ausschalten können.

Vielen Dank für eurer Hilfe.

Gruss Sandro

Re: Rule mit Timer deaktivieren, wenn Item ON

Verfasst: 5. Aug 2018 16:29
von udo1toni
Naja, Du musst halt den Scanner-Switch noch zusätzlich als Bedingung einbauen:

Code: Alles auswählen

if(EG_Buero_Drucker01_JobsSpooler.state != 0 || EG_Buero_Drucker01_Scannen.state ==ON)
Bedeutet: Falls mindestens ein Job anliegt ODER der Schalter für Scannen ON ist.

Dabei kann das Item EG_Buero_Drucker01_Scannen auch ohne Binding sein, also z.B. nur ein Schalter in der UI

Re: Rule mit Timer deaktivieren, wenn Item ON

Verfasst: 5. Aug 2018 22:51
von Ordnas
Super

vielen Dank. Funktioniert.

Manchmal überlegt man einfach zu weit.