Hilfe bei Perlcode: on-for-timer implementieren

Begonnen von blueberry63, 22 April 2014, 14:04:07

Vorheriges Thema - Nächstes Thema

blueberry63

Hallo,

eigentlich geht es hier "nur" um eine Unterstützung bei der Perl-Programmierung, aber vielleicht interessiert ja auch jemand der Hintergrund:

Mein FHEM läuft auf einem Raspi und ich steuere von dort über einen Arduino+Ethernetshield+433Mhz-Modul (spez. Firmata-Version) Funksteckdosen von Pollin (3St. für 9.99 EUR). Als Device habe ich FS20-Dummies angelegt, über die ich die eigentlichen FRM-DEVICES triggere. FS20-Dummies habe ich genommen, weil ich dachte, "On-FOR-TIMER" würde damit funktionieren - geht aber nicht! Und deshalb wollte ich die Aufgabe folgendermassen lösen:

Zitat
STECKD_WERKR:on-for-timer.* {
set STECKD_WERKR on;
d1= value (STECKD_WERKR);  ### Bsp. "on-for-timer 4000"
d=<b<???Sekundenwert aus "on-for-timer xxx"  value ("STECK_WERKR" ???</b>;
dh = int($d / 3600);
dm = int($d / % 60);
ds = int($d) % 60;
df = {sprintf "%02d:%02d:502d", $dh, $dm, $ds};
define temp_timer_wr at +$df set STECKD_WERKR off;
}

Die Hilfe brauche ich bei Zeile 3. Wie bekomme ich den Sekunden-Wert extrahiert?

Gruß
Blueberry63



FHEM auf BBB mit Wheezy: 1x CUL_HM_HM_SCI_3_FM, 1x INSTAR CAM3010, 1x HM-LC-SW1-PL2, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-MDIR-O, Viessmann Heizung, Gaszähler via GPIO, Klingel via HM-LC-Bl1PBU-FM an FBox, Mailcheck, AVR, XBMC, NanoCUL 433+668 an Raspi per Ethernet, Funksteckdosen (Pollin, IT), Automower

justme1968

#1
der fs20 dummy ist genau nicht geeignet weil bei fs20 der eigentliche timer zum abschalten im physikalischen aktor steckt.

eventuell geht es wenn du noch follow-on-for-timer setzt. das ist sowieso in fast allen fällen sinnvoll.

schau dir mal readingsProxy an. das ist eine art dummy der in-for-timer über die setExtentions unterstützt.

ansonsten frag mal norbert ob er nicht die setExtentions direkt im firmata modul unterstützen will.

gruss
  andre

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

blueberry63

@Andre,

readingsProxy kannte ich noch nicht, ist aber genau das, was ich hier brauche. Da ich aber trotzdem noch ein "vergewaltigtes" FRM_SERV Modul ('tschuldigung an Wzut) triggern muß, komme ich um die o.g. Lösung nicht rum.

Gruß
Blueberry63
FHEM auf BBB mit Wheezy: 1x CUL_HM_HM_SCI_3_FM, 1x INSTAR CAM3010, 1x HM-LC-SW1-PL2, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-MDIR-O, Viessmann Heizung, Gaszähler via GPIO, Klingel via HM-LC-Bl1PBU-FM an FBox, Mailcheck, AVR, XBMC, NanoCUL 433+668 an Raspi per Ethernet, Funksteckdosen (Pollin, IT), Automower

justme1968

du kannst auch dazu readingsProxy verwenden.

du muss nur ein on und ein off commando für den readinsProxy implementieren in dem das FRM MODUL passend aufgerufen wird. das on-for-timer bekommst du umsonst dazu.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

blueberry63

@Andre
das habe ich leider nicht richtig kapiert. Könntest Du mir auf die Sprünge helfen?

Meine Konfig, um die Steckdosen AN und AUS zu schalten:
Zitat
define ARD433 FRM 3030 global
define STECKD_BAUHS FRM_SERVO 7
attr STECKD_BAUHS IODev ARD433

### STECKD Werkraum
define STECKD_WERKR FS20 55b2 00
attr STECKD_WERKR dummy 1
define n_steckd_werkrON notify STECKD_WERKR:on { fhem("set STECKD_BAUHS angle 3874") }
define n_steckd_werkrOFF notify STECKD_WERKR:off { fhem("set STECKD_BAUHS angle 3873") }

Wie würde dafür eine readingsProxy Definition aussehen? Welches Device nehme ich als Basis?

Gruß
Blueberry63
FHEM auf BBB mit Wheezy: 1x CUL_HM_HM_SCI_3_FM, 1x INSTAR CAM3010, 1x HM-LC-SW1-PL2, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-MDIR-O, Viessmann Heizung, Gaszähler via GPIO, Klingel via HM-LC-Bl1PBU-FM an FBox, Mailcheck, AVR, XBMC, NanoCUL 433+668 an Raspi per Ethernet, Funksteckdosen (Pollin, IT), Automower

justme1968

etwa so:define STECKD_WERKR readingsProxy STECKD_BAUHS  state
attr STECKD_WERKR setList on off
attr STECKD_WERKR setFn {($CMD eq "on")?"angle 3873":"angle 3874"}
attr STECKD_WERKR valueFn {($VALUE == 3873)?"on":"off"}


gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

blueberry63

@Andre

das ist ja genial. On-for-timer funktioniert auch automatisch.
  :)
Danke für den tollen Tip.

Hast Du eine Ahnung, warum die Werte für "State"  und "Reading" im Webinterface nicht aktualisiert werden? Im DBLog ist alles i.O.?!

Gruß
Blueberry

FHEM auf BBB mit Wheezy: 1x CUL_HM_HM_SCI_3_FM, 1x INSTAR CAM3010, 1x HM-LC-SW1-PL2, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-MDIR-O, Viessmann Heizung, Gaszähler via GPIO, Klingel via HM-LC-Bl1PBU-FM an FBox, Mailcheck, AVR, XBMC, NanoCUL 433+668 an Raspi per Ethernet, Funksteckdosen (Pollin, IT), Automower

justme1968

was genau hast du in state und STATE stehen?

eventuell passt die valueFn noch nicht genau. ich weiss nicht was dein FRM_SERVO in state stehen hat bzw. wo dort der aktuelle stand abzulesen ist.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

blueberry63

Hallo Andre,

ich habe mich doch etwas zu früh gefreut: da über das FRM-Device STECKD_BAUHS alle Steckdosen angesteuert werden, aber mit unterschiedlichen Werten für "Angel", enthält "Value" dieses Gerätes immer unterschiedliche Werte (jeweils für ON/OFF). Dadurch kann ich leider keine Regel für das Attribut "setFn" finden.

Trotzdem: nochmal vielen Dank für den Tip mit "readingProxy".

Gruß
Blueberry
FHEM auf BBB mit Wheezy: 1x CUL_HM_HM_SCI_3_FM, 1x INSTAR CAM3010, 1x HM-LC-SW1-PL2, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-MDIR-O, Viessmann Heizung, Gaszähler via GPIO, Klingel via HM-LC-Bl1PBU-FM an FBox, Mailcheck, AVR, XBMC, NanoCUL 433+668 an Raspi per Ethernet, Funksteckdosen (Pollin, IT), Automower

justme1968

#9
das ist kein problem.

du kannst in der setFn noch einreadingsSingleUpdate($defs{$name}, "state", $CMD, 1);einbauen und valueFn auf{undef}setzen.

dann wird state für das proxy device direkt aus dem set kommando gesetzt und valueFn macht gar nichts mehr.

gruss
  andre

ps: ich bin mir gerade nicht sicher ob $state geht oder ob du "STECKD_WERKR" hart eintragen musst.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

blueberry63

readingsSingleUpdate($defs{$name}, "state" $CMD, 1);:

sorry, ich stehe auf dem Schlauch. Sollte das SO funktionieren:


define STECKD_TEST readingsProxy STECKD_BAUHS  state
attr STECKD_TEST setFn {($CMD eq "on")?"angle 3874":"angle 3873"; readingsSingleUpdate($defs{$name}, "state" $CMD, 1);}
attr STECKD_TEST setList on off
attr STECKD_TEST valueFn {undef}


Gruß
Blueberyy63
FHEM auf BBB mit Wheezy: 1x CUL_HM_HM_SCI_3_FM, 1x INSTAR CAM3010, 1x HM-LC-SW1-PL2, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-MDIR-O, Viessmann Heizung, Gaszähler via GPIO, Klingel via HM-LC-Bl1PBU-FM an FBox, Mailcheck, AVR, XBMC, NanoCUL 433+668 an Raspi per Ethernet, Funksteckdosen (Pollin, IT), Automower

justme1968

#11
fast :). das readingSingleUpdate muss an den anfang der setFn vor das if. dann sollte es passen.

wie gesagt ich weiß gerade nicht ob $name geht oder du den namen des proxy device jeweils direkt hin schreiben musst.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

blueberry63

also noch ein Versuch  ;)

Wenn ich es so definiere:

define STECKD_TEST readingsProxy STECKD_BAUHS  state
attr STECKD_TEST setFn {readingsSingleUpdate($defs{STECK_BAUHS}, "state" $CMD, 1); ($CMD eq "on")?"angle 3874":"angle 3873";}
attr STECKD_TEST setList on off
attr STECKD_TEST valueFn {undef}


bekomme ich beim Neustart von FHEM folgende Fehlermeldung:

Zitat
Error messages while initializing FHEM:
configfile: Unknown command ($CMD, try help.
Unknown command }, try help.

Was mache ich jetzt falsch?
FHEM auf BBB mit Wheezy: 1x CUL_HM_HM_SCI_3_FM, 1x INSTAR CAM3010, 1x HM-LC-SW1-PL2, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-MDIR-O, Viessmann Heizung, Gaszähler via GPIO, Klingel via HM-LC-Bl1PBU-FM an FBox, Mailcheck, AVR, XBMC, NanoCUL 433+668 an Raspi per Ethernet, Funksteckdosen (Pollin, IT), Automower

justme1968

#13
es fehlt ein komma.

attr STECKD_TEST setFn {readingsSingleUpdate($defs{STECK_BAUHS}, "state", $CMD, 1); ($CMD eq "on")?"angle 3874":"angle 3873";}

mein fehler. war auch im original falsch. sorry.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

blueberry63

 >:(

ich habe die Zeile über cut&paste übernommen, aber es kommt dieselbe Fehlermeldung
FHEM auf BBB mit Wheezy: 1x CUL_HM_HM_SCI_3_FM, 1x INSTAR CAM3010, 1x HM-LC-SW1-PL2, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-MDIR-O, Viessmann Heizung, Gaszähler via GPIO, Klingel via HM-LC-Bl1PBU-FM an FBox, Mailcheck, AVR, XBMC, NanoCUL 433+668 an Raspi per Ethernet, Funksteckdosen (Pollin, IT), Automower