at command und SIGNALduino

Begonnen von berniie, 01 November 2021, 14:28:55

Vorheriges Thema - Nächstes Thema

berniie

Hallo,
kann mir jemand sagen warum das nicht funktioniert?
Ich benutze das 00_SIGNALduino.pm Modul von Ralf9.


define a_get_ccconf at +*00:00:10 {\
    my $ccconf = fhem("get maplesduino ccconf");;\
    Log(3,"Debug: ccconf: $ccconf")\
}


Im log sieht das so aus


2021.11.01 14:25:40.254 5: maplesduino: command for gets: C0DnF
2021.11.01 14:25:40.254 5: AddSendQueue: maplesduino: C0DnF (1)
2021.11.01 14:25:40.254 1: PERL WARNING: Use of uninitialized value $ccconf in concatenation (.) or string at (eval 718) line 3.
2021.11.01 14:25:40.255 3: eval: {
        my $ccconf = fhem("get maplesduino ccconf");
    Log(3,"Debug: ccconf: $ccconf")
}
2021.11.01 14:25:40.255 3: Debug: ccconf:
2021.11.01 14:25:40.355 5: maplesduino SW: C0DnF
2021.11.01 14:25:40.365 4: maplesduino/msg READ: C0Dn11=21656A57C43023B900070018146C070091
2021.11.01 14:25:40.365 5: maplesduino/noMsg Parse: C0Dn11=21656A57C43023B900070018146C070091
2021.11.01 14:25:40.365 4: maplesduino/msg READ: regexp=C0Dn11.* cmd=ccconf msg=C0Dn11=21656A57C43023B900070018146C070091
2021.11.01 14:25:40.666 4: maplesduino/HandleWriteQueue: nothing to send, stopping timer


Grüße,
Jörg


rudolfkoenig

Vmtl. weil get bei diesem Modul nicht blockiert, und das ist gut so :)
Das Resultat wird dem Benutzer "spaeter" per asyncOutput mitgeteilt, telnet und FHEMWEB stellen fuer asyncOutput entsprechende Wege bereit.

berniie

Danke für den Tip. Ich will eigentlich alle paar Minuten von der einen Bank auf die andere wechseln. Dazu will ich abfragen, welche Bank gerade aktiv ist.

rudolfkoenig

Falls get ein Event ausloest (das sollte es mAn): get anstossen, und per notify darauf reagieren.

Ralf9

Momentan wird bei den get Befehlen die Rückmeldung in readings geschrieben, falls die Rückmeldung nicht zu lang ist.

Ich hab mal in meine lokale 00_SIGNALduino.pm mal eingebaut, daß beim reading auch ein event erzeugt wird 
my $reading;
($rmsg, $reading) = SIGNALduino_parseResponse($hash,$getcmd,$rmsg);
if (length($reading) > 0) {
if (length($reading) > SDUINO_parseRespMaxReading) {
$reading = substr($reading, 0, SDUINO_parseRespMaxReading);
}
readingsSingleUpdate($hash, $getcmd, $reading, 1);
}
if (defined($hash->{getcmd}->{asyncOut})) {
#Log3 $name, 4, "$name/msg READ: asyncOutput";
my $ao = asyncOutput( $hash->{getcmd}->{asyncOut}, $getcmd.": " . $rmsg );
}
delete($hash->{getcmd});


Dabei ist mir aufgefallen, daß evtl im fhemweb noch ein bug ist.
Bei den get Befehlen mit einem Eingabefeld stehen nach dem abschicken im Eingabefeld die Zeichen die ins reading geschrieben wurden! (siehe Anlage)
Wenn kein event erzeugt wird, dann bleibt das Get Eingabefeld leer.

Gruß Ralf
FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module HBW_IO_SW
Maple-SIGNALduino, WH3080,  Hideki, Id 7

Ralf9

Beim Cul hab ich den gleichen Effekt.
Wenn ich ein "get raw C12" abschicke, dann wird die Rückmeldung "C12 = 30 / 48" zusätzlich zum reading auch noch ins Eingabefeld von get geschrieben! (siehe Anlage).

@rudolfkoenig
Soll ich dafür ein neues Thema in "Frontends - FHEMWEB" aufmachen?
FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module HBW_IO_SW
Maple-SIGNALduino, WH3080,  Hideki, Id 7

rudolfkoenig

ZitatSoll ich dafür ein neues Thema in "Frontends - FHEMWEB" aufmachen?
Bin noch unsicher ob ich das als Fehler betrachten soll :)

Ralf9

#7
Ich hab mal anstatt
readingsSingleUpdate($hash, $getcmd, $reading, 1);
dies geschrieben
readingsSingleUpdate($hash, $getcmd, $reading, 0);
my $ev = $getcmd . ': ' . $reading;
DoTrigger($name, $ev, 0);


dabei ist mir ein seltsamer Effekt aufgefallen.
Der Event wird nur ins Eingabefeld von Get geschrieben, wenn der Trenner zwischen $getcmd und $reading ": " ist.
Verwende ich einen anderen Trenner, dann wird das Eingabefeld nicht überschrieben.

Als Workarround kann ich dann als Trenner z.B. ":: " verwenden.
Hat dieser Workarround irgendwelche Nachteile?
my $ev = $getcmd . ':: ' . $reading;

Gruß Ralf
FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module HBW_IO_SW
Maple-SIGNALduino, WH3080,  Hideki, Id 7