RandomTimer - neues Modul

Begonnen von Dietmar63, 28 Juli 2013, 15:52:40

Vorheriges Thema - Nächstes Thema

peschmae

Guten Tag,

ich habe mich mit folgender Konfiguration versucht:

define RandomTimerLamp1.1      RandomTimer 15:00:00 Lamp1.1  23:30:00 10

attr RandomTimerLamp1.1 disableCond ( ReadingsVal("PresenceSimulation", "state", "off") eq "off" )

define PresenceSimulation dummy
set PresenceSimulation on
attr PresenceSimulation webCmd on:off


Das funktioniert soweit auch ganz gut, zumindest solange ich den PresenceSimulation dummy aktiviere, bevor die Startzeit für den RandomTimer erreicht ist. Nun möchte ich den Timer aber auch im Intervall zwischen 15:00 und 23:30 mit Hilfe des dummies aktivieren können.

Das scheint nicht zu klappen, da die disableCond() nur zum Startzeitpunkt ausgelesen wird (bzw. später auch noch, aber nur solange bis sie zum ersten mal "True" wird).

Wie kann ich diese Prüfung später auch noch mal manuell triggern? Also mit sowas wie (funktioniert natürlich nicht)

define RandomTimerLampNotify notify PresenceSimulation:on  { Random_timer_exec() }


Man könnte natürlich den Timer immer laufen lassen und dann einfach das onCmd() überschreiben, so dass es jeweils zuerst kurz in die dummy-Variable guckt...

MfG Peschmä

peschmae

Um mir selber zu antworten - habe gerade im Nachbarthread gelesen, dass das nicht unterstützt wird, und mir daher was gebastelt mit:


attr RandomTimerLamp1.1 onCmd  { if (ReadingsVal("PresenceSimulation", "state", "off") eq "on" ) { fhem("set @ on") } }
attr RandomTimerLamp1.1 offCmd { if (ReadingsVal("PresenceSimulation", "state", "off") eq "on" ) { fhem("set @ off") } }


Hässlich, aber funktioniert.

MfG Peschmä

Dietmar63

ich baue folgende  Funktion ein:

sub RandomTimer_Wakeup() {  # {RandomTimer_Wakeup()}

  foreach my $hc ( sort keys %{$modules{RandomTimer}{defptr}} ) {
     my $hash = $modules{RandomTimer}{defptr}{$hc};

     RandomTimer_ExecRepeater($hash);
     Log3 undef, 3, "RandomTimer_Wakeup() for $hash->{NAME} done!";
  }
  Log3 undef,  3, "RandomTimer_Wakeup() done!";
}

Dann musst du nur noch mit einem notify die dummy abhorchen und diese Fuktion aufrufen. Etwa so:
define RTautomatOn            notify dummy:.*                          {RandomTimer_Wakeup()}
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

Hoeness

Hallo,

Ich habe gestern verzweifelt an meinem Zufallsschalter eines Galerielichts gehangen.

Ich dachte ich hatte das mal hinbekommen, aber irgendwie passt du was nicht.

define ZufallsTimerGalerie RandomTimer *{sunset_abs("REAL")} FB1_03_SW_Gallerie Verreist 23:59 180 800/100

Kann mir jemand einen guten Tip geben.

Dietmar63

#49
Definition falsch - siehe reference


define ZufallsTimerGalerie RandomTimer *{sunset_abs("REAL")} FB1_03_SW_Gallerie Verreist 23:59 180 800/100

aber:
attr   ZufallsTimerGalerie      disableCond  (!isVerreist())
isVerreist() ist dann ene Funktion in 99_myUtils
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

Hoeness

Danke,

hat sich da was bei dem Modul geändert?

Dietmar63

ja, eine ganze Menge: reference oder konkrete Fragen
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

hank40

Hallo, ich versuche auch gerade, den RandomTimer für eine Anwesenheitssimulation zu nutzen. Ich habe die .pm-Datei gespeichert, per Update aktualisiert, den Code in die fhem.cfg eingefügt und auch den Code in die 99_Utils eingefügt.

fhem.cfg
# Anwesenheitssimulation Stehlampe Wohnzimmer
define Verreist               dummy
attr   Verreist               webCmd ja:nein
...
define ZufallsTimerStehlampeWZ RandomTimer *{sunset_abs()}eg_wz_Stehlampe  23:00:00 1800
attr ZufallsTimerStehlampeWZ disableCond (!isVerreist())


99_Utils
#
sub isUrlaub         () { return(YesNo("Urlaub"));  }
sub isVerreist       () { return(YesNo("Verreist"));}
sub isUebergangszeit () { return(YesNo("Uebergangszeit"));}
#
#
#
sub YesNo ($) {

  my ($dummy) = @_;
  my $state = ReadingsVal($dummy, "state", "nein");
  if ($state eq "nein") {
    return 0;
  }
  return 1;
}


Wenn ich aber die fhem.cfg speichern möchte, kommt die Fehlermeldung:
Unknown command ..., try help Cannot load module RandomTimer Please define ZufallsTimerStehlampeWZ first

Würde mich total freuen, wenn mir jemand meinen Fehler aufzeigen könnte, da ich nicht weiß, wo der Fehler liegt. Herzlichen Dank schon mal dafür!

Dietmar63

Neue Module müssen erst bekannt gemacht werden. Dies geschieht durch einen Neustart oder durch die Eingabe von

Reload xx-RandomTimer in der Oberfläche von Fhem.
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

hank40

Prima, danke für die sehr schnelle Information - das wusste ich nicht. Habe jetzt den RandomTimer mit Reload bekannt gemacht, aber dann erscheint folgende Fehlermeldung:
syntax error at ./FHEM/98_RandomTimer.pm line 375, near "Log3 undef"
syntax error at ./FHEM/98_RandomTimer.pm line 401, near "Log3 undef"
syntax error at ./FHEM/98_RandomTimer.pm line 403, near "Log3 undef"


Muss ich an diesen Stellen noch etwas anpassen?

Dietmar63

#55
Du bist scheinbar auf einer alten FHEM Version unterwegs - kann das sein?
Für diese Version von RT benötigst du fhem 5.5

Entweder neu aufsetzen, oder mit dem update-kommando aktualisieren. 

Mit Einführung von 5.5 wurde die Funktion Log3 eingeführt, die scheinst du nicht zu haben. Sie steckt normalerweise in fhem.pl.
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

hank40

Stimmt, ich hatte  noch 5.4. Nachdem ich jetzt mal die Firmware der Fritzbox auf den neuesten Stand gebracht habe (wo ja schon FHEM 5.5 dabei sein soll) kann ich aber nicht mehr die FHEM Seite http://fhem-host:8083/fhem aufrufen. Dann kommt immer: Diese Seite kann nicht angezeigt werden. Habe jetzt schon den ganzen Tag herumgesucht, aber dafür noch keine Lösung gefunden. Ich melde mich nochmal, wenn ich das Update auf 5.5. hinbekommen habe - aber schon mal jetzt herzlichen Dank für die bisherige Unterstützung!

Dietmar63

Vermutlich ist deine fhem.cfg durch das update überschrieben worden.

Wenn du sie nicht gesichert hast, must du folgendes in die fhem.cfg eingeben bzw. finden(per telnet anmelden und mit einem editor vi oder nano ansehen/editiern) - eigentlich müßte der Zugang standardmäßig verfügbar sein. Welche Fehlermeldung bekommst du? Ersetze mal fhem-host durch die IP deines fhem-Rechners.:

define WEB                    FHEMWEB 8083 global
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

hank40

Habe die Fritzbox nochmals neu gestartet und jetzt geht der Zugang auf die Seite wieder (habe laut fheminfo aber immer noch Version 5.4). Aber ich habe ein neues Problem: die CUL sendet nicht mehr. In der fhem.cfg steht define CUL_0 CUL /dev/ttyACM0@9600 1034, aber im Logfile steht dann 2014.01.26 19:38:10 1: usb create starting
2014.01.26 19:38:10 3: Opening CUL device /dev/ttyACM0
2014.01.26 19:38:11 3: Setting CUL baudrate to 9600
2014.01.26 19:38:11 3: CUL device opened
2014.01.26 19:38:11 1: define CUL_0 CUL /dev/ttyACM0@9600 1034
2014.01.26 19:38:11 1: reload: Error:Modul 00_CUL deactivated:
syntax error at ./FHEM/00_CUL.pm line 136, near "Log3 undef"

2014.01.26 19:38:11 0: syntax error at ./FHEM/00_CUL.pm line 136, near "Log3 undef"

2014.01.26 19:38:12 1: usb create end


Habe die CUL schon mehrmals von der Fritzbox abgezogen, wieder reingesteckt, Fritz box neu gestartet - aber ohne Erfolg. Kann man die CUL "zurücksetzen"?

hank40

#59
So, nach "Update Force" ist jetzt lt. "fheminfo" 5.5 geladen - puh, eine Baustelle weniger  :)  Den Stick habe ich jetzt neu geflasht (beim einstecken Knopf gedrückt gehalten, "usb scan" gemacht, dann "CULflash none CUL_V3" ausgeführt, dann kam die Fehlermeldung "dfu-programmer: failed to release interface 0.", die aber angeblich normal sei. Und siehe da, der CUL ist jetzt unter "Everything" als "Initialized" markiert.

Ich konnte jetzt auch alle nötigen Schritte für den RandomTimer ohne jegliche Fehlermeldungen durchführen, d.h. du hattest recht mit deiner Aussage, dass es an der alten FHEM-Version lag.

Jetzt habe ich nur noch ein Problem: Der CUL sendet keine Signale mehr, d.h. ich kann momentan nichts mehr so wie vorher schalten. Habe die Fritzbox ein- und ausgeschaltet, aber ohne Erfolg. Hättest du eine Idee, wie ich dieses letzte (aber wichtigste) Problem gelöst bekommen könnte?

Hab im Logfile was entdeckt: bei allen zu steuernden Empfängern steht "No I/O device found for..." - aber über die Suchfunktion (hier und bei Google) habe ich noch nichts gefunden, was weiterhilft.