Merkwürdige Zeilen in der fhem.cfg

Begonnen von Cluni, 22 Juni 2017, 15:20:47

Vorheriges Thema - Nächstes Thema

Cluni

Ach so - bevor die Nachfrage kommt, warum in dem list nur ein elsif und vorher in dem Beispiel zwei elsif sind: Der Rollladen im List hat keinen Drehgriffkontakt und das Beispiel aus der Perl war für ein Fenster mit Drehgriffkontakt.  ;)

CoolTux

Also wenn es erstellt ist sieht es gut aus. Zu mindest was die \ an geht. Eventuell zu viele } oder {
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Cluni

Wüsste nicht, wo man da noch was weglassen könnte. Hab mal einen Screenshot vom Inline-Editor im def gemacht:

CoolTux

Du kannst die runden Klammern zwischen den and Abfragen weglassen. Aber das hat nichts mit dem Fehler zu tun.

Gib mir mal bitte ein list von diesem Notify. Die Meldung wird beim ausführen des Notify kommen denke ich.

Ich habe Dich doch richtig verstanden das Du ein notiy hast welches dann für jedes Rollo ein at anlegt?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Benni

#19
Zitat von: Cluni am 23 Juni 2017, 13:43:24
Hab mal einen Screenshot vom Inline-Editor im def gemacht:

statt einfach nur den Text zu kopieren und hier in Code-Tags einzufügen  ::)

Ich würde so was, doch schon relativ komplexes (auch wenn ich den Sinn noch nicht ganz verstanden habe; muß ich auch nicht), in eine sub in der 99_myUtils auslagern:


sub autoRollBad() {
    return undef if(ReadingsVal("Rollladen.Automatik.abends","state","nv") ne "on" );
    return undef if(AttrVal("Rol.Bad","Auto_Modus_runter","aus") eq "aus");

    fhem ("setreading Rol.Bad Automatik_automatische_Fahrt 1;setreading Rol.Bad Automatik_Pos_vor_Lueften 0;set Rol.Bad 40") 
        if(ReadingsVal("Sensor.Bad","state","") eq "open");

    fhem ("setreading Rol.Bad Automatik_automatische_Fahrt 1;set Rol.Bad off");
   
}


Da kann man manches eleganter lösen und übersichtlicher ist es allemal.

Cluni

Zitat von: CoolTux am 23 Juni 2017, 13:53:25
Du kannst die runden Klammern zwischen den and Abfragen weglassen. Aber das hat nichts mit dem Fehler zu tun.

Stimmt - ich finde das geklammert aber übersichtlicher - da sieht man schneller, was Sache ist

Zitat von: CoolTux am 23 Juni 2017, 13:53:25
Gib mir mal bitte ein list von diesem Notify. Die Meldung wird beim ausführen des Notify kommen denke ich.

Es gibt kein Notify - das ist nur ein at, welches zu einer bestimmten Zeit ausgeführt wird. Das List ist das obige in Post #14

Zitat von: CoolTux am 23 Juni 2017, 13:53:25
Ich habe Dich doch richtig verstanden das Du ein notiy hast welches dann für jedes Rollo ein at anlegt?

Nein, ich habe ein at, welches täglich um 3:05Uhr nachts (damit das auch nach einer Zeitumstellung funktioniert) ausgeführt wird. Hier das List:

Internals:
   COMMAND    {Auto_Rol_group_at("Rol")}
   DEF        *03:05:00 {Auto_Rol_group_at("Rol")}
   NAME       TimerErzeuger_Rol
   NR         293
   PERIODIC   yes
   RELATIVE   no
   REP        -1
   STATE      Next: 03:05:00
   TIMESPEC   03:05:00
   TRIGGERTIME 1498266300
   TRIGGERTIME_FMT 2017-06-24 03:05:00
   TYPE       at
   Readings:
     2017-06-23 03:05:14   state           Next: 03:05:00
Attributes:
   icon       clock@blue
   room       Timer
   webCmd     execNow


Die aufgerufene Perl-Routine "Auto_Rol_group_at" erzeugt dann für jeden Rollladen zwei ats - einen für morgens und einen für abends (wenn der Rollladen in den User-Attributen nicht deaktiviert ist).

Für den Fall (warum auch immer), dass das System neu gestartet wird, triggere ich beim Systemstart ein Notify, welches diesen Timer manuell anstößt (wobei mir gerade auffällt, dass ich dort auch direkt die Perl-Routine anschmeißen könnte - immer gut, wenn man darüber spricht  ::) ). Dieses Notify sieht so aus:

Internals:
   DEF        global:INITIALIZED {fhem("set TimerErzeuger_Rol execNow")}
   NAME       TimerSystemStart.ntfy
   NOTIFYDEV  global
   NR         258
   NTFY_ORDER 50-TimerSystemStart.ntfy
   REGEXP     global:INITIALIZED
   STATE      2017-06-22 16:28:24
   TYPE       notify
   Readings:
     2017-06-22 16:28:23   state           active
Attributes:
   icon       system_fhem_reboot@orange
   room       Timer





Zitat von: Benni am 23 Juni 2017, 13:57:09
statt einfach nur den Text zu kopieren und hier in Code-Tags einzufügen  ::)

Siehe den Code in Post #14 - dies ist das List dieses ats. Ich fand halt nur, dass es besser zu sehen ist in dem Screenshot. Habe ich aber auch geschrieben, dass das davon ist.

Zitat von: Benni am 23 Juni 2017, 13:57:09
Ich würde so was, doch schon relativ komplexes (auch wenn ich den Sinn noch nicht ganz verstanden habe; muß ich auch nicht), in eine sub in der 99_myUtils auslagern:


sub autoRollBad() {
....
);
}


Da kann man manches eleganter lösen und übersichtlicher ist es allemal.

Es tut mir Leid, aber ich muss dich nochmals auf frühere Posts hier verweisen
Post #14 (letzer Absatz):
ZitatDie ganzen if/elsif und else fliegen eh in Kürze raus auf dem at und dann ist nur noch ein Routinenaufruf mit Übergabe des Rollladennamens da.

Post #12 (letzter Absatz):
ZitatDa ich das alles momentan aber umbaue (es kommt nur noch der Aufruf einer Perl-Routine mit Übergabe des Rollladennamens in das at und der Rest wird dann in der Perl-Routine abgefragt und behandelt), wird sich das Problem in Kürze selber erledigen.



Beta-User

Hi Cluni,

schön zu sehen, wie das vorangeht mit dem code, bin leider mit der "Modularisierung" immer noch nicht vorangekommen.

@Cooltux und Benni:
Es geht um den code aus diesem Post hier.
Vielleicht habt Ihr Lust und Muse, Hinweise zu geben, ob und wie man am besten ein Modul bastelt aus diesem umfangreichen Code, den Cluni und Frini (und evtl. Hugomckinnley) da entwickelt haben.

Eigentlich wären da interne timer usw. die elegantere Lösung...

Gruß, Beta-User
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Cluni

Ich würde noch gerne eine Woche oder so warten. Der Code in dem Thread ist wegen dem momentanen Umbau nicht mehr ganz aktuell - deshalb habe ich hier auch nicht auf den thread verwiesen. Wir sind aber denke ich bald soweit, dass wir eine aktualisierte Version posten können. Die ganzen Notifies für die Fenster- open/tilted/closed Geschichte gibt es schon nicht mehr. Das macht mittlerweile nur noch ein Notify. Darüber wird auch abgefangen, wenn der Rollladen manuell betrieben wird, um eine Sperrzeit vor der nächsten automatischen Aktion zu setzen. Ist mittlerweile schon viel aufgeräumter. Aber damit es noch aufgeräumter und übersichtlicher wird, möchte ich vorher noch die Timergeschichten sauberer machen, damit der auszuführende Teil immer gleich ist. Denke, dass das dann auch in einem Modul sauberer zu implementieren ist.

Aber wir werden hier offtopic... ;)