smartVISU visu.js uzsu mit Bedingung?

Begonnen von Hans Franz, 21 Februar 2015, 13:43:04

Vorheriges Thema - Nächstes Thema

bgewehr

FritzBox 7590, Synology DS216+II mit Docker
Docker: FHEM mit hmlan, Homebridge, node-red, mosquitto, ems-collector für Buderus EMS mit AVR Net-IO
Gartenwasser über MQTT auf R/Pi A+
Volkszaehler.org auf R/Pi 2B mit Pi_Erweiterung
Raspberrymatic auf R/Pi 4B mit RPI-RF-MOD u. CUL868

bgewehr

Der Perl-Zweig funktioniert noch nicht, ich habe Schwierigkeiten mit den Anführungszeichen, die werden escaped in fhem eingeliefert...

Wer steigt mit ein?
FritzBox 7590, Synology DS216+II mit Docker
Docker: FHEM mit hmlan, Homebridge, node-red, mosquitto, ems-collector für Buderus EMS mit AVR Net-IO
Gartenwasser über MQTT auf R/Pi A+
Volkszaehler.org auf R/Pi 2B mit Pi_Erweiterung
Raspberrymatic auf R/Pi 4B mit RPI-RF-MOD u. CUL868

dev0

Ich werde mir im Laufe des Tages fronthem/smartvisu in der Entwicklungsumgebung installieren, dann kann ich mitreinschaun.

dev0

#18
Es fehlt ein "} am Ende des JSON Strings, der an UZSU_execute($$) übergeben wird, sobald der Perl Zwei aktiv ist.

"condition":{"conditionActive":true,"conditionType":"Perl","conditionValue":"","conditionDevicePerl":"x


Wenn andere Conditions aktiv sind, dann sieht es so aus:

"condition":{"conditionType":"eq","conditionActive":true,"conditionValue":"0","conditionDevicePerl":"x"}



Edit: Es fehlt sogar mehr, wie man im direkten Vergleich sieht:

{"active":true,"list":[{"time":"10:40:30","rrule":"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU","value":"off","timeMax":"","timeCron":"10:40:30","event":"time","condition":{"conditionActive":true,"conditionType":"eq","conditionValue":"0","conditionDevicePerl":"x"},"timeOffset":"","timeMin":"","holiday":{"weekend":false,"work":false},"active":true}]}
{"active":true,"list":[{"time":"10:40:30","rrule":"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU","value":"off","timeMax":"","timeCron":"10:40:30","event":"time","condition":{"conditionActive":true,"conditionType":"Perl","conditionValue":"","conditionDevicePerl":"x


Kontaktierst Du Michael, wenn Du das so verifizieren kannst?

bgewehr

Was hast Du ins Device/Perl Feld geschrieben?
FritzBox 7590, Synology DS216+II mit Docker
Docker: FHEM mit hmlan, Homebridge, node-red, mosquitto, ems-collector für Buderus EMS mit AVR Net-IO
Gartenwasser über MQTT auf R/Pi A+
Volkszaehler.org auf R/Pi 2B mit Pi_Erweiterung
Raspberrymatic auf R/Pi 4B mit RPI-RF-MOD u. CUL868

dev0

Damit hatte ich es probiert: (x ist ein existierendes Device)

x eq "1"
x == 1
ReadingsVal("x","state","") eq "1"
{ReadingsVal('x','state','') eq '1'}
{ReadingsVal("x","state","") eq "1"}

bgewehr

Was war der letzte Wert, der zu diesem Ergebnis geführt hatte?
FritzBox 7590, Synology DS216+II mit Docker
Docker: FHEM mit hmlan, Homebridge, node-red, mosquitto, ems-collector für Buderus EMS mit AVR Net-IO
Gartenwasser über MQTT auf R/Pi A+
Volkszaehler.org auf R/Pi 2B mit Pi_Erweiterung
Raspberrymatic auf R/Pi 4B mit RPI-RF-MOD u. CUL868

dev0

Weiss nicht mehr genau. Wenn Du mir sagst welche Syntax richtig wäre, dann probiere ich es damit nochmal und zeige das Ergebnis.

dev0

#23
x eq "1":
{"list":[{"event":"time","timeOffset":"","rrule":"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU","value":"off","holiday":{"weekend":false,"work":false},"condition":{"conditionActive":true,"conditionDevicePerl":"x

x == 1
{"active":true,"list":[{"condition":{"conditionActive":true,"conditionDevicePerl":"x

{ReadingsVal('x','state','') eq '1'}
{"list":[{"timeOffset":"","event":"time","holiday":{"weekend":false,"work":false},"value":"off","rrule":"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU","condition":{"conditionDevicePerl":"{ReadingsVal('x','state','')

ReadingsVal('x','state','') eq '1'
{"list":[{"value":"off","holiday":{"work":false,"weekend":false},"rrule":"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR,SA,SU","timeOffset":"","event":"time","active":true,"time":"10:40:30","timeCron":"10:40:30","timeMin":"","timeMax":"","condition":{"conditionValue":"","conditionType":"Perl","conditionActive":true,"conditionDevicePerl":"ReadingsVal('x','state','')

Alle Versuche enden mit:
n_UZSU return value: unexpected end of string while parsing JSON string, at character offset XXX (before "(end of string)") at ./FHEM/99_fronthemUtils.pm line 37

99_fronthemUtils.pm line 37 ist bei mir -> $uzsu = decode_json($uzsu);

Edit: nach dem ersten Leerzeichen im Perl String ist schluss...
Edit2: wenn man den Perl String ohne Leerzeichen eingibt, dann wird die Condition richtig in den WDT eingetragen, wenn da nicht die Tüddelchen am Anfang und Ende des Strings wären. Ich glaube das war ursprünglich deine Frage. ;) Richtig?
Diese escapten "Tüddelchen" werden von USZU schon so geschickt... Könnte man simpel filtern, aber eigentlich gehören die ja erst gar nicht da hin. Auf die schnelle habe ich nichts im widget entdeckt, was das verursachen würde. Javascript ist aber auch nicht mein Ding.

dev0

#24
Interessanterweise konnte ich es heute morgen nur noch einmal reproduzieren, dass der PerlString in Tüddelchen eingefasst in UZSU_execute ankommt, seitdem nicht mehr, egal was ich eingebe. Diese Tüddelchen konnte ich auch in der Brownserkonsole mit console.log() sehen...
Davon abgesehen vermute ich mittlerweile, dass das Abschneiden des JSON Strings in Fronthem oder Fhem-Driver passiert, habe aber noch nicht angefangen das Logging von Fronthem aufzuboren. Wahrscheinlich komme ich auch heute nicht dazu.

/Uli
Edit:
Die Abgeschnittenen JSON Strings entstehen bei mir durch das UZSU Notify, dass in $EVTPART1 den abgeschnittenen String enthält.
Wenn ich den Umweg über das Notify nicht gehe, sondern direkt im UZSU Converter die USZU_execute() aufrufe, dann ist alles schön :)


sub UZSU(@)
{
  my ($param) = @_;
  my $cmd = $param->{cmd};
  my $gad = $param->{gad};
  my $gadval = $param->{gadval};
  my $device = $param->{device};
  my $reading = $param->{reading};
  my $event = $param->{event};
 
  my @args = @{$param->{args}};
  my $cache = $param->{cache};

  if ($param->{cmd} eq 'get')
  {
    $param->{cmd} = 'send';
  }
  if ($param->{cmd} eq 'send')
  {
    $param->{gad} = $gad;
$param->{gadval} = main::fronthem_decodejson(main::ReadingsVal($device, $reading, ''));
$param->{gads} = [];
    return undef;
  }
  elsif ($param->{cmd} eq 'rcv')
  {
$gadval = main::fronthem_encodejson($gadval);
  main::UZSU_execute($device,$gadval);
$gadval =~ s/;/;;/ig;
$param->{result} = main::fhem("setreading $device $reading $gadval");
$param->{results} = [];
    return 'done';
  }
  elsif ($param->{cmd} eq '?')
  {
    return 'usage: UZSU';
  }
  return undef;
}


bgewehr

FritzBox 7590, Synology DS216+II mit Docker
Docker: FHEM mit hmlan, Homebridge, node-red, mosquitto, ems-collector für Buderus EMS mit AVR Net-IO
Gartenwasser über MQTT auf R/Pi A+
Volkszaehler.org auf R/Pi 2B mit Pi_Erweiterung
Raspberrymatic auf R/Pi 4B mit RPI-RF-MOD u. CUL868

bgewehr

Wie ist es beim zweiten Aufruf der UZSU in SV? Ist dann der Perl String abgeschnitten?
FritzBox 7590, Synology DS216+II mit Docker
Docker: FHEM mit hmlan, Homebridge, node-red, mosquitto, ems-collector für Buderus EMS mit AVR Net-IO
Gartenwasser über MQTT auf R/Pi A+
Volkszaehler.org auf R/Pi 2B mit Pi_Erweiterung
Raspberrymatic auf R/Pi 4B mit RPI-RF-MOD u. CUL868

dev0

Ich konnte keine abgeschnittenen Perl Strings mehr feststellen, aber teste bitte selbst noch einmal.

Ich habe die UZSU Funktionen bei mir in eine eigene Datei ausgelagert. Das hat den Vorteil, dass man die Datei bei einem neuen Release einfach austauschen kann. Weiterhin habe ich das Logging, das Löschen und Anlegen der WDTs ein wenig angepasst. Wenn Du magst, dann kannst gerne das übernehmen, was Du für sinnvoll erachtest.

ToDo:
Wenn im Widget kein Wochentag angeklickert ist und man we oder !we benutzt, dann gibt es noch Warnungen. Die Zeilen beziehen sich auf die angehängte Datei.

we:

2016.03.19 09:48:15.026 1: PERL WARNING: substr outside of string at ./FHEM/99_fronthemUZSU.pm line 47.
2016.03.19 09:48:15.027 1: PERL WARNING: Use of uninitialized value $weekdays in string ne at ./FHEM/99_fronthemUZSU.pm line 51.


!we:

2016.03.19 09:51:55.197 1: PERL WARNING: substr outside of string at ./FHEM/99_fronthemUZSU.pm line 47.
2016.03.19 09:51:55.198 1: PERL WARNING: Use of uninitialized value $weekdays in string ne at ./FHEM/99_fronthemUZSU.pm line 57.

dev0

Einen hab ich noch...

Wenn man im UZSU Converter in der ReadingsVal Fn den Defaultwert auf {} setzt, dann muss man kein uzsu Reading mehr manuell anlegen. Und mein perfektionistisches ich würde das Reading sogar noch beim Löschen des WDts mit entfernen ;)

/Uli

bgewehr

FritzBox 7590, Synology DS216+II mit Docker
Docker: FHEM mit hmlan, Homebridge, node-red, mosquitto, ems-collector für Buderus EMS mit AVR Net-IO
Gartenwasser über MQTT auf R/Pi A+
Volkszaehler.org auf R/Pi 2B mit Pi_Erweiterung
Raspberrymatic auf R/Pi 4B mit RPI-RF-MOD u. CUL868