Hauptmenü

DOIF mit [ im fhem Befehl

Begonnen von eisenhauer1987, 15 Juni 2020, 06:46:43

Vorheriges Thema - Nächstes Thema

eisenhauer1987

Hi,

ich habe ein MQTT2_DEVICE bei welchem ich eine setlist habe:

setmowtimes:textField { my $payload = $EVENT;$payload =~ s/$EVTPART0 //g; qq(PRM100/98D86318D372/commandIn {"sc":{"d":[$payload]}})}

Diese setlist funktioniert, in manuelles:

set Garten.LandroidM setmowtimes ["00:00",0,0],["10:00",180,0],["10:00",180,1],["10:00",180,0],["10:00",180,1],["10:00",180,0],["10:00",120,1]

führt zum gewünschten Ergebnis. Allerdings funktioniert es nicht in einem DOIF (Perl). Ich denke es hat mit den [] zu tun. Ideen?


{if ( [09:30|AT SA] or ["test:on"])
  {
     fhem("set Garten.LandroidM setmowtimes ["00:00",0,0],["10:00",180,0],["10:00",180,1],["10:00",180,0],["10:00",180,1],["10:00",180,0],["10:00",120,1]");
  }
}


Ein fhem_set funktiniert ebenfalls nicht Doppelte "(" habe ich auch schon probiert, Fehler werden nicht angezeigt. Laut Eventmonitor wird der Befehlt leer ausgeführt (set Garten.LandroidM setmowtimes )

Grüße

xenos1984

Ich denke, hier sind eher die Anführungszeichen das Problem, weil die als Ende der Zeichenkette interpretiert werden, was dann Murks ergibt. Ich würde es so probieren:
{if ( [09:30|AT SA] or ["test:on"])
  {
     fhem('set Garten.LandroidM setmowtimes ["00:00",0,0],["10:00",180,0],["10:00",180,1],["10:00",180,0],["10:00",180,1],["10:00",180,0],["10:00",120,1]');
  }
}

Da nun einfache ' statt doppelter " Anführungszeichen die Zeichenkette begrenzen, gelten die doppelten darin nicht mehr als Ende. Allerdings werden jetzt auch keine Variablen mehr expandiert, d.h. wenn man noch Variablen einbauen möchte, müsste man dies mittels
'Erster Teil' . $variable . 'Zweiter Teil'
tun.

eisenhauer1987

Hi einfache ' funktionieren leider auch nicht:

2020-06-15 08:15:01 DOIF DOIF.Haus.Maehen.Wetter warning: condition c02: (Missing operator before '),::EventDoIf('?)
2020-06-15 08:15:01 DOIF DOIF.Haus.Maehen.Wetter block_02: condition c02: syntax error at (eval 1726191) line 6, near "'set Garten.LandroidM setmowtimes ::EventDoIf('00" Illegal octal digit '9' at (eval 1726191) line 6, at end of line Illegal octal digit '9' at (eval 1726191) line 6, at end of line Illegal octal digit '9' at (eval 1726191) line 6, at end of line Illegal octal digit '9' at (eval 1726191) line 6, at end of line Illegal octal digit '9' at (eval 1726191) line 6, at end of line Illegal octal digit '9' at (eval 1726191) line 6, at end of line syntax error at (eval 1726191) line 10, near "'set Garten.LandroidM setmowtimes ::EventDoIf('00" Illegal octal digit '9' at (eval 1726191) line 10, at end of line Illegal octal digit '9' at (eval 1726191) line 10, at end of line (eval 1726191) has too many errors.


fhem('set Garten.LandroidM setmowtimes ["00:00",0,0],["09:30",180,0],["09:30",180,1],["09:30",180,0],["09:30",180,1],["09:30",180,0],["09:30",120,1]');

Damian

Was soll denn ["00:00",0,0] darstellen?  Diese Syntax mit zwei Kommazeichen ist mir unbekannt. Ereignistrigger (wegen der Anführungszeichen) im Ausführungsteil machen auch nicht viel Sinn.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

eisenhauer1987

Hi,

das ist teil eines json welches mit mqtt verschickt wird. Das ist das komplette:

{
  "cfg":{"id":0,
    "lg":"it",
    "tm":"08:56:42",
    "dt":"11/06/2020",
    "sc":{"m":1,"p":0,"d":[
      ["00:00",0,0],
      ["00:00",0,1],
      ["00:00",0,0],
      ["09:00",60,1],
      ["00:00",0,1],
      ["00:00",0,0],
      ["00:00",0,0]]},
    "cmd":0,
    "mz":[0,0,0,0],
    "mzv":[0,0,0,0,0,0,0,0,0,0],
    "rd":0,
    "sn":"20193019840123456789"},
  "dat":{
    "mac":"980123456789",
    "fw":3.08,
    "bt":{"t":15.2,"v":20.09,"p":98,"nr":151,"c":1,"m":1},
    "dmp":[-11.2,-1.1,11.6],
    "st":{"b":10412,"d":172552,"wt":11014,"bl":69},
    "ls":1,
    "le":0,
    "lz":0,
    "rsi":-91,
    "lk":1,"act":1,"tr":0,"conn":"wifi"}
}


Ziel ist es die Fahrzeiten zu ändern. Dazu verwende ich die setlist:

setmowtimes:textField { my $payload = $EVENT;$payload =~ s/$EVTPART0 //g; qq(PRM100/98D86318D372/commandIn {"sc":{"d":[$payload]}})}

Diese hat einen Teil des Syntax schon im Bauch {"sc":{"d":[$payload]}})}

Der payload sind jetzt die einzelnen Wochentage mit Startuhrzeit, Dauer, Kantenschnitt

Damian

#5
Dann musst du die Angabe von [...] im Ausführungsteil vermeiden.

mit ASCI-Code müsste es mit Hexangaben  0x... statt eckiger Klammern klappen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF