FHEM (Perl) kann nicht mehr Rechnen

Begonnen von Stromschiene, 24 Oktober 2016, 20:03:04

Vorheriges Thema - Nächstes Thema

Stromschiene

Hallo rundherum, ich habe die Panik:

Ich habe nun meine Rollladensteuerung von Rasp 1 auf Rasp 2 übersiedelt.
Dabei habe ich natürlich Linux und FHEM neu aufgesetzt und auf neuesten Stand gebracht.
Die cfg Files habe ich übersiedelt und der Rest der notwendig ist.
Das funktioniert auch alles soweit.
ABER, FHEM kann scheinbar nicht mehr rechnen.

Meine 10 Rollläden werden jeder mit 2 Relais geschalten, eines für Spannung EIN/AUS, das Andere für AUF/AB,
wobei wegen Funkenbildung IMMER zuerst auf AUS gestellt werden muss.

Das habe ich wie folgt gelöst:

set R_zu_K 12 (irgendwo weiter vorne im Code, aber bewiesen richtig)

define West_re_ab notify West_re:AB   {my $t = Value('R_zu_k') + 2 ;;fhem("set R_OG_West_re_AB on-for-timer $t")};;{fhem("set R_OG_West_re_EIN on-for-timer $value{R_zu_k}")}

Wenn AB, dann  R_OG_West_re_AB (das Relais) 12+2 Sekunden AB (EIN)
und R_OG_West_re_EIN 12 Sekunden EIN

Dadurch läuft da eine Relais um 2 Sekunden länger.
Hat ja am langsamen Rasp auch funktiioniert.

Seit der Übersiedelung passiert folgendes:

R_OG_West_re_AB  : liefert einen "Rechenfehler"
R_OG_West_re_EIN : bleibt danach immer auf EIN, die Zeit läuft nie ab.

Im Log sieht das so aus:

2016.10.24 18:57:07 3: FS20 set R_OG_West_re_AB on-for-timer 14

2016.10.24 18:57:08 1: PERL WARNING: Use of uninitialized value $value{"R_zu_k"} in concatenation (.) or string at (eval 19912) line 1.

2016.10.24 18:57:08 3: eval: my $EVTPART0='AB';my $TYPE='dummy';my $SELF='West_re_ab';my $EVENT='AB';my $NAME='West_re';{my $t = Value('R_zu_k') + 2 ;fhem("set R_OG_West_re_AB on-for-timer $t")};{fhem("set R_OG_West_re_EIN on-for-timer $value{R_zu_k}")}

2016.10.24 18:57:08 3: FS20 set R_OG_West_re_EIN on-for-timer


Erschwerend kommt noch dazu, dass ich mich in Perl nicht auskenne, also bitte langsam und deutlich schreiben (:=))

Wo sind die Gurus???

mfg
Stefan

DeeSPe

Zitatdefine West_re_ab notify West_re:AB   {my $t = Value('R_zu_k') + 2 ;;fhem("set R_OG_West_re_AB on-for-timer $t")};;{fhem("set R_OG_West_re_EIN on-for-timer $value{R_zu_k}")}

Das soll doch eher so aussehen:
define West_re_ab notify West_re:AB   {my $t = Value('R_zu_k') + 2;;fhem "set R_OG_West_re_AB on-for-timer $t";; fhem "set R_OG_West_re_EIN on-for-timer $t")}

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

DeeSPe

Zitat von: DeeSPe am 24 Oktober 2016, 20:04:47
Das soll doch eher so aussehen:
define West_re_ab notify West_re:AB   {my $t = Value('R_zu_k') + 2;;fhem "set R_OG_West_re_AB on-for-timer $t";; fhem "set R_OG_West_re_EIN on-for-timer $t")}

Gruß
Dan

Oder noch einfacher:
define West_re_ab notify West_re:AB   {my $t = Value('R_zu_k') + 2;;fhem "set R_OG_West_re_AB,R_OG_West_re_EIN on-for-timer $t")}

Gruß
Dan

EDIT: Oder wolltest Du unterschiedliche on-for-timer setzen?
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Stromschiene

Hallo Dan:

Ja, einmal mit R_zu_K, das Andere mit R_zu_k +2

Der Fehler scheint im Ausdruck: ..... {fhem("set R_OG_West_re_EIN on-for-timer $value{R_zu_k}")}
zu liegen. Er kann da keine Zahl extrahieren.

Habe ich etwas etwas vergessen zu installieren?

Kann man das Problem auch ohne Perl lösen?
Also 2 Relais gleichzeit einschalten, aber nacheinander mit 2 Sekunden Verzögerung ausschalten?

mfg

DeeSPe

Zitat von: Stromschiene am 25 Oktober 2016, 11:43:57
Hallo Dan:

Ja, einmal mit R_zu_K, das Andere mit R_zu_k +2

Der Fehler scheint im Ausdruck: ..... {fhem("set R_OG_West_re_EIN on-for-timer $value{R_zu_k}")}
zu liegen. Er kann da keine Zahl extrahieren.

Habe ich etwas etwas vergessen zu installieren?

Kann man das Problem auch ohne Perl lösen?
Also 2 Relais gleichzeit einschalten, aber nacheinander mit 2 Sekunden Verzögerung ausschalten?

mfg

Nein!
Die Schreibweise ist falsch!

So:
{fhem "set R_OG_West_re_EIN on-for-timer ".Value("R_zu_k")}

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Stromschiene

Hallo Dan:

Many THX!!! Ich habe das jetzt bei allen 10 Rollläden eingefügt und jetzt funktioniert es wieder!
Da muss sich doch zwischenzeitlich etwas in der SW gehändert haben.

Kann man das Problem auch rein in FHEM lösen?
Das wäre mir sympatischer aus in einen Code auszuweichen den ich überhaupt nicht lesen kann.

Lg
Stefan

DeeSPe

Zitat von: Stromschiene am 25 Oktober 2016, 14:14:52
Da muss sich doch zwischenzeitlich etwas in der SW gehändert haben.

Das kann ich Dir nicht sagen!
Ich kann Dir aber sagen dass in einem String (also zwischen "") ein "$value{R_zu_k}" nicht geht und auch nie ging weil es schlicht weg falsch ist.
Den Wert von state bekommst Du nur mit Value("R_zu_K") oder mit ReadingsVal("R_zu_K","state","").

Zitat von: Stromschiene am 25 Oktober 2016, 14:14:52
Kann man das Problem auch rein in FHEM lösen?

Das ist doch mit reinen FHEM Bordmitteln gemacht:
Ein notify welches Perl Code ausführt...

Wenn Du weiterhin mit FHEM arbeiten willst dann wirst Du nicht darum herumkommen die Basics von Perl zu lernen!

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe