Newbie - Modulkommunikation | Match | JSON | diverse Zusammenhänge u. Fragen

Begonnen von HomeAuto_User, 19 Dezember 2017, 14:45:29

Vorheriges Thema - Nächstes Thema

betateilchen

Zitat von: HomeAuto_User am 24 Dezember 2017, 15:56:59
Ich probiere mich soeben an dem RegEx für das JSON

Wieso um alles in der Welt will man JSON per regexp auswerten?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

HomeAuto_User

Zitat von: betateilchen am 26 Januar 2018, 22:31:06
Wieso um alles in der Welt will man JSON per regexp auswerten?

Das verstehst du ggf. falsch.
Es ging darum, sich mit dem Regexp zu beschäftigen zwecks Übergabe an das andere Modul bzw. um allgemein das komplete Thema diesbezüglich.
Das JSON wird nicht via Regexp ausgewertet, es wird decoded.
"Developer" heißt nicht, das man alles wissen kann!
- FHEM v5.9 | Rasberry PI 3
- radino CC1101 433Mhz (SIGNALduino)| - radino CC1101 868Mhz (CUL) | nano 433Mhz (SIGNALduino) - Sensoren: purer Dschungel querbeet

Markus Bloch

Zitat von: HomeAuto_User am 26 Januar 2018, 21:14:29
EDIT: desweiteren, wie bekomme ich Autocreate dazu, das ein Sensor nicht mit den "Tasten" on/off versehen wird.

Definiere "Tasten". Was genau meinst Du konkret?

Gruß
Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

HomeAuto_User

Hallo,

ZitatDefiniere "Tasten". Was genau meinst Du konkret?
Sobald ein Sensor angelgt wird sieht es im WEB ja wie folgt aus

--------------------------------------------------
Name Sensor                  | T: 13.6 H: 53
-------------------------------------------------

bei mir sieht es so wie bei einem Schalter aus

--------------------------------------------------------------
Name Sensor                  | T: 13.6 H: 53 | on | off |
--------------------------------------------------------------

MfG
"Developer" heißt nicht, das man alles wissen kann!
- FHEM v5.9 | Rasberry PI 3
- radino CC1101 433Mhz (SIGNALduino)| - radino CC1101 868Mhz (CUL) | nano 433Mhz (SIGNALduino) - Sensoren: purer Dschungel querbeet

Markus Bloch

So sieht es nur aus, wenn du auch ein on/off als Set-Befehl anbietest. Was kommt denn, wenn du folgenden FHEM-Befehl ausführst?

set <Name Sensor> ?

Gruß
Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

HomeAuto_User

#50
Hallo Markus,

danke für den Hinweis.
Ich denke zu wissen was du meinst und wo ich ansetzen muss. In der Tat, "Name Sensor" hat Befehle wie on off.
Da muss ich nun eine Unterscheidung herbeiführen und dies dann testen.

Schade das man da schwierig oder nichts in der Wiki findet.  :o

MfG Marco

EDIT: Wie könnte ich es am einfachsten gestalten wenn ich es einmal mit und ohne cmdlist haben möchte?
Ich habe nun den Fall, entweder ich habe on off oder ich habe garnichts  ;D Eine Unterscheidung in der SET sollte die Lösung herbeiführen. Einfach IF Abfrage dort positioniert löst das problem nicht.
"Developer" heißt nicht, das man alles wissen kann!
- FHEM v5.9 | Rasberry PI 3
- radino CC1101 433Mhz (SIGNALduino)| - radino CC1101 868Mhz (CUL) | nano 433Mhz (SIGNALduino) - Sensoren: purer Dschungel querbeet

Markus Bloch

Hallo Marco,

das liegt daran, dass es das Standardverhalten von FHEMWEB (Front-End-Modul) ist. Der Nutzer kann das ja über das Attribut webCmd verändern. FHEMWEB prüft dabei die zur Verfügung stehenden Set-Befehle für die jeweilige Definition. Sollte der User das Attribut webCmd nicht gesetzt haben, so gibt es folgende Reihenfolge:

1. falls es "desired-temp" gibt => webCmd = "desired-temp"
2. falls es "desiredTemp" gibt => webCmd = "desiredTemp"
3. falls es on/off gibt => webCmd = "on:off"

Hier obliegt es deinem Modul zu entscheiden, welche Set-Befehle für die aktuelle Definition zur Verfügung stehen sollten.

Viele Grüße

Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

Markus Bloch

Zitat von: HomeAuto_User am 28 Januar 2018, 21:14:39
Wie könnte ich es am einfachsten gestalten wenn ich es einmal mit und ohne cmdlist haben möchte?

Du musst in deiner SetFn entscheiden ob on/off verfügbar sein soll oder nicht. Beispielsweise so (Auszug aus FB_CALLMONITOR):



    my @sets = ();
   
    push @sets, "rereadPhonebook" if(defined($hash->{helper}{PHONEBOOK}) or AttrVal($name, "reverse-search" , "") =~ /(all|phonebook|internal)/);
    push @sets, "rereadCache" if(defined(AttrVal($name, "reverse-search-cache-file" , undef)));
    push @sets, "rereadTextfile" if(defined(AttrVal($name, "reverse-search-text-file" , undef)));
    push @sets, "password" if($hash->{helper}{PWD_NEEDED});
    push @sets, "reopen" if($hash->{FD});

    ....

    return "Unknown argument $cmd, choose one of ".join(" ", @sets);

Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

HomeAuto_User

Hi,

ich habe das Ganze nun so vorerst gelöst
Zitatmy $usage;
   my @sets = ();
   
    push @sets, "on" if($xs1_typ eq "switch");
   push @sets, "off" if($xs1_typ eq "switch");
   push @sets, "blink" if($xs1_typ eq "switch");
    push @sets, "" if($xs1_typ eq "temperature");
   push @sets, "" if($xs1_typ eq "hygrometer");
   
   $usage = "Unknown argument ".$cmd.", choose one of ".join(" ", @sets) if(scalar @sets > 0);
   
   if($cmd eq "on")
    {
        Log3 $name, 3, "$name: Set | cmd=$cmd";
      readingsSingleUpdate($hash, "state", $cmd, 1);
      return undef;
    }
    elsif($cmd eq "off")
    {
      Log3 $name, 3, "$name: Set | cmd=$cmd";
      readingsSingleUpdate($hash, "state", $cmd, 1);
        return undef;
    }
   else
    {
      return $usage;
    }

Nun resultiert daraus meine nächste Frage.

Wenn ich EIN set-Kommando absetze und es wird im Hauptlogfile von FHEM nur einmal registriert weil ich dies als Bestätigung dort verankere, so bekommt das Logfile vom Schalter Mehrfach Einträge bis zu 60 Stück  :-[ :-[ zur selbigen Zeit und jeweils das LETZE ist der Zustand der gesetzt wurde.

Zitat
2018-01-28_23:18:26 xs1Dev_Aktor_03 off
.... bis zu 60x das selbige
2018-01-28_23:18:26 xs1Dev_Aktor_03 off
2018-01-28_23:18:26 xs1Dev_Aktor_03 on
"Developer" heißt nicht, das man alles wissen kann!
- FHEM v5.9 | Rasberry PI 3
- radino CC1101 433Mhz (SIGNALduino)| - radino CC1101 868Mhz (CUL) | nano 433Mhz (SIGNALduino) - Sensoren: purer Dschungel querbeet

herrmannj

ich habe das jetzt 3 mal gelesen ... und nicht verstanden.

Strukturiert bitte!

Ich vermute das Du mit "Hauptlog registriert" meinst das Du in Deinem modul eine Zeile (Log3 ... ) eingebaut hast um zu sehen ob "set" mehrfach aufgerufen wird. Richtig ?
Liege ich ebenfalls richtig wenn ich annehme das mit den 60 Logeinträgen ein filelog gemeint ist ?

Was steht im eventmonitor wenn die 60 Einträge im log landen und wie ist das log definiert ?


Markus Bloch

#55
Bitte poste mal das gesamte Modul als Datei. Nur mit diesen kleinen Code-Häppchen ist das reine Wahrsagerei.

Zitat von: HomeAuto_User am 28 Januar 2018, 23:27:56
Wenn ich EIN set-Kommando absetze und es wird im Hauptlogfile von FHEM nur einmal registriert weil ich dies als Bestätigung dort verankere, so bekommt das Logfile vom Schalter Mehrfach Einträge bis zu 60 Stück  :-[ :-[ zur selbigen Zeit und jeweils das LETZE ist der Zustand der gesetzt wurde.

Das ist kein Feature von FHEM. Da läuft irgendwas in deinem Modul schief.
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

HomeAuto_User

#56
Hallo, ich brächte mal bitte eure Hilfe.

Zitat von: Markus Bloch am 29 Januar 2018, 10:42:08
Das ist kein Feature von FHEM. Da läuft irgendwas in deinem Modul schief.
Ja das war mein Fehler und ich habe dies gefunden.


Nun habe ich sporadisch diese Meldung, woran ich schon knobel aber bisher kein Erfolg sah.
PERL WARNING: Use of uninitialized value in pattern match (m//) at ./FHEM/88_xs1Bridge.pm line 298.

Zeile dazu vom Code:
($json) = get( $adress ) =~ /[^(]*[}]/g; ## cut cname( + ) am Ende von Ausgabe -> ARRAY Struktur als Antwort

Tritt dies nun auf wenn der RegEx nicht zutrifft? $adress ist vorher fest definiert.
Besten Dank im Vorraus.
"Developer" heißt nicht, das man alles wissen kann!
- FHEM v5.9 | Rasberry PI 3
- radino CC1101 433Mhz (SIGNALduino)| - radino CC1101 868Mhz (CUL) | nano 433Mhz (SIGNALduino) - Sensoren: purer Dschungel querbeet

Phill

$adress ist vielleicht definiert, aber get($adress) scheint undef zurück zugeben.
Homebrew 1-Wire / HomeMatic Mix - Cubietruck mit FHEM als Server - Raspberry PI 3 als Informationsanzeige im MagicMirror Stil - Raspberry Pi 1 als Klingelanlage - VDR

Mein Modul: Talk2Fhem - Mein Tipp: https://forum.fhem.de/index.php/topic,82442.0.html

Markus Bloch

Dieser Fall tritt nur auf, wenn get($address) undef zurückliefert. Das bedeutet, der Aufruf der URL in $address ist fehlgeschlagen. Ich nehme mal an get() stammt aus LWP::Simple.

Du solltest vorher immer prüfen, ob ein HTTP-Request erfolgreich war und Daten zurückliefert, bevor Du diese blind weiterverarbeitest.

Gruß
Markus

PS: Für HTTP-Anfragen solltest du bei der Modulprogrammierung generell https://wiki.fhem.de/wiki/HttpUtils#HttpUtils_NonblockingGet verwenden
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

herrmannj