Neues Modul YAAHM - Yet Another Auto Home Module

Begonnen von Prof. Dr. Peter Henning, 09 August 2017, 08:01:55

Vorheriges Thema - Nächstes Thema

UweH


Prof. Dr. Peter Henning

Und warum steht dieser Wert nicht im Hash, sondern das Objekt ? Schleierhaft.

LG

pah

herrmannj


UweH


herrmannj

#154
Keine Ausreden ! ;)
Zitat
JSON::XS-compatible backend modules don't encode blessed objects by default (except for their boolean values, which are typically blessed JSON::PP::Boolean objects). If you need to encode a data structure that may contain objects, you usually need to look into the structure and replace objects with alternative non-blessed values, or enable convert_blessed and provide a TO_JSON method for each object's (base) class that may be found in the structure, in order to let the methods replace the objects with whatever scalar values the methods return.

fhem cmd line:
{JSON->new->backend()}

vg
joerg

aus RAMBO XII:
ZitatJSON is a silly beast!

UweH

OOOOOkaayyyy...

JSON::XS

Interpretieren kann ich das nicht. Ist das jetzt gut oder schlecht?
Wobei: Auf einer Maschine funktioniert's, auf der anderen nicht und beide haben die gleiche JSON-Version.

Gruß
Uwe

herrmannj

weder noch, das erklärt das Verhalten.

Ich kenne das modul (YAAHM) nicht, daher weiß ich nicht ob wie das object in den hash kommt. Wenn es "user code" ist müsst ihr aktiv werden, sonst pah.

Die Lösung ist es die Zeit als string reinzuschreiben, zb mit 'POSIX::strftime("%m/%d/%Y %H:%M:%S\n", localtime)'. Natürlich so formatiert das es beim lesen wieder stimmt.

herrmannj

#157
Zitat von: UweH am 16 Dezember 2017, 12:26:24
Wobei: Auf einer Maschine funktioniert's, auf der anderen nicht und beide haben die gleiche JSON-Version.

eben nicht. Das BACKEND wird sich unterscheiden, (PP vs XS vs Tiny und/oder Version). Die Lösung (post darüber) beseitigt die Abhängigkeit.

insider: oder 10sec Festplattentausch :D

UweH


Prof. Dr. Peter Henning

Der erste Knackpunkt ist hier: strftime ist auch betriebssystemabhängig, das will ich deshalb vermeiden.

Der zweite Knackpunkt: So wie das Modul geschrieben wurde, sollte dort nur ein String auftauchen. Leicht irre, dass dort offenbar das Objekt behalten wird.

Ich habe mal etwas ausprobiert, nämlich den Zeitstring vor der Eintragung in das Hash noch per sprintf explizit konvertiert.

Bitte mal austesten

sub YAAHM_save($) {
  my ($hash) = @_;
  $hash->{DATA}{"savedate"} = sprintf("%s",localtime(time));
  readingsSingleUpdate( $hash, "savedate", $hash->{DATA}{"savedate"}, 1 );
  my $json   = JSON->new->utf8;
  my $jhash0 = eval{ $json->encode( $hash->{DATA} ) };
  Log 1, "===========> hash data is ".Dumper($hash->{DATA});
  Log 1, "===========> JSON data is ".Dumper($jhash0);
  my $error  = FileWrite("YAAHMFILE",$jhash0);
  Log 1,"[YAAHM_save] error=$error";
  return;
}

UweH


LuBeDa

Klasse,
damit ist mein Problem (Post vom 9 November 2017, 10:01:36) auch behoben. Endlich kann ich das Modul auch nutzen.

Prof. Dr. Peter Henning

Ich verstehe es zwar immer noch nicht ganz, weil der Kontext von localtime immer ein String sein sollte. Aber gut. Habe das Ding jetzt mit dieser Korrektur eingecheckt.

LG

pah

wkarl

Hallo und ein Frohes Fest in die Runde,

nachdem ich mal wieder mir Zeit nehme an meinem fhem zu arbeiten, wollte ich mich in YAAHM einarbeiten. Ein Update heute morgen gezogen, Astro-device angelegt und parametrisiert (longitude, latidute, altidude). Aber jedes Mal, wenn ich ein 'define MyYAAHM YAAHM' durchführe stürzt fhem mit folgender Fehlermeldung im log ab:
2017.12.26 09:39:38.997 1: PERL WARNING: Subroutine YAAHM_restore redefined at ./FHEM/95_YAAHM.pm line 968.
2017.12.26 09:39:39.001 1: PERL WARNING: Subroutine YAAHM_sayWeeklyTime redefined at ./FHEM/95_YAAHM.pm line 1855.
2017.12.26 09:39:39.018 1: [YAAHM_Define] data hash restored from save file with date Tue Dec 26 09:39:39 2017
2017.12.26 09:39:39.018 1: [YAAHM] finds 1 Astro devices, module not loaded separately
Can't use an undefined value as an ARRAY reference at ./FHEM/95_YAAHM.pm line 934.


Versionen:

  • Astra 1.42
  • YAAHM 1.33

Habe den Thread schon mehrmals durchsucht ohne jedoch eine Idee zu bekommen, wie ich zu einer Lösung kommen kann.

Hat jemand auch dieses Problem? Vielleicht eine Idee von einer Lösung?

Ciao Walter
FHEM 5.7 & TabletUI 2.2 auf Fedora22 Server auf NUC5i5RYK
CUL 868 > FAST EnergyCam
HMLAN > HomeMatic TCs & VDs, Bewegungsmelder, Schalter, Taster, Steckdosen

ripper

Hallo,

ich habe eine Sub, die am Abend meine Rollos schließt. Den Aufruf der Sub hab ich jetzt von einem at umgestellt und in die Liste der Aktionen beim YAAHM Tagesprofil eingetragen. Soweit so gut, der Aufruf funktioniert und die Rollos werden geschlossen.
Zu meinem Problem: Die Sub erwartet als Parameter "$month", den ich natürlich beim Aufruf übergebe. Wenn ich dann auf "Start Daily Timer" klicke wird aus der Variable $month eine Zahl, nämlich die des aktuellen Monats und diese ändert sich leider beim Wechsel in den nächsten Monat auch nicht.
Gibt es eine Möglichkeit an dieser Stelle solche Variablen von FHEM an eine Sub zu übergeben?

Danke schon mal für die Aufklärung.
Viele Grüße
Flo