Autor Thema: Newbie - Modulkommunikation | Match | JSON | diverse Zusammenhänge u. Fragen  (Gelesen 5618 mal)

Offline HomeAuto_User

  • Developer
  • Full Member
  • ****
  • Beiträge: 234
Hallo,
ich bin soeben dabei ein Modul zu schreiben.
Meine erste Fassung ist soweit, das sämtliche Readings aktualisiert werden.
Nun würde ich aus den Readings heraus im nächsten Schritt "Schalter" erstellen, weil es die Zustände von einem entfernten Gerät sind.
Da ich das Gerät fernsteuern möchte, so möchte ich den bisherigen Zustand verarbeiten. Da nun zum Bsp. value - off ausgelesen wird in das Reading, wo würde ich dies übernehmen in eine Schalterdefinition welche ich später zum steuern nehmen kann. In der Wiki las ich, das autocreate auf UNDEFINED "reagiert".
Es gelingt mir bisher nicht, meinen return Wert "UNDEFINED Schalter_01 Modulname Schalter_01" anzulegen.

Erbitte Hilfe.
mfG
« Letzte Änderung: 15 Februar 2018, 23:46:50 von HomeAuto_User »
- FHEM v5.8 | Rasberry PI 3
- radino CC1101 433Mhz (SIGNALduino)| - radino CC1101 868Mhz (CUL) | nano 433Mhz (SIGNALduino) als Vergleichsempfänger
- Sensoren: 3x FHT 80b | 5x FHT 80 TF-2 | 2x S300TH | 1x WS7000-20 | 5x "Hideki" | THR128

Offline Beta-User

  • Hero Member
  • *****
  • Beiträge: 3543
Antw:Newbie - autocreate für Readings ?
« Antwort #1 am: 19 Dezember 2017, 14:51:16 »
 :o Ist das eine Anfängerfrage?

Sollte eher in den Developer-Bereich verschoben werden, oder?

Im Wiki gibt es auch ein Intro in die Entwicklung von Modulen, würde jetzt mal darauf tippen, dass die readings-update-Funktionen das sind, nach was du suchst (da sollte auch stehen, wie die readings überhaupt angelegt werden).

Gruß, Beta-User
Server: HP-T5740 mit Debian stretch (i386) + aktuellem FHEM | ConfigDB | VCCU mit einiger HM-Hardware | MySensors seriell (2.3.0-alpha@RS485, div. konkrete Hardware, u.a. einige DS18B20) | Milight@ESP-GW | SIGNALduino | MapleCUN

Online CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15229
Antw:Newbie - autocreate für Readings ?
« Antwort #2 am: 19 Dezember 2017, 14:52:39 »
Ich würde das eher ins Developer Forum schreiben.

So wie Du es beschrieben hast klingt es eher nach Dispatcher. Du rufst also den Dispatcher auf und dieser ruft die entsprechende ParseFn des logischen Devices auf.
Das wäre also das Prinzip eines 2 Stufigen Modules. Ist es das was Du meinst? Alternativ schau Dir mal die 10_CUL_HM.pm an, dort wird ja auch mit Channels gearbeitet. Eventuell meinst Du eher sowas.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.me/MOldenburg
Mein GitHub: https://github.com/LeonGaultier
kein Support für cfg Editierer

Offline HomeAuto_User

  • Developer
  • Full Member
  • ****
  • Beiträge: 234
Antw:Newbie - autocreate für Readings ?
« Antwort #3 am: 19 Dezember 2017, 15:02:11 »
Hallo und danke für die schnelle Reaktion.
So wie Du es beschrieben hast klingt es eher nach Dispatcher. Du rufst also den Dispatcher auf und dieser ruft die entsprechende ParseFn des logischen Devices auf.
Genau richtig, sowas las ich auch schon. Nur lese ich heraus, das der Dispatcher auf einen Empfänger reagiert bzw. RAW Msg. Ich bekomme die Info aber von dem Modul welches die Readings automatisch aktualisiert.

Thema Verschieben? Hier kann man dies nur versenden  :)
Sollte dennoch ein Admin dies mitlesen, so kann dies ggf in Dev schieben.
- FHEM v5.8 | Rasberry PI 3
- radino CC1101 433Mhz (SIGNALduino)| - radino CC1101 868Mhz (CUL) | nano 433Mhz (SIGNALduino) als Vergleichsempfänger
- Sensoren: 3x FHT 80b | 5x FHT 80 TF-2 | 2x S300TH | 1x WS7000-20 | 5x "Hideki" | THR128

Online CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15229
Antw:Newbie - autocreate für Readings ?
« Antwort #4 am: 19 Dezember 2017, 15:06:47 »
Ganz unten ganz links solltest Du verschieben haben.


Da Du sicherlich alles aus einem Modul heraus machst, musst Du Dir etwas einfallen lassen. Wieso eigentlich aus Readings heraus? Beschreibe mal worum es genau geht und dann kann man auch effektive Vorschläge machen.
Im Moment denke ich an eine Bridge (IODev) welche Daten von unterschiedlichen Geräten empfängt die an der Bridge hängen und dann entsprechend Devices in FHEM von den Geräten anlegen soll. Also eigentlich die Aufgabe eines klassischen 2-stufigen Modules.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.me/MOldenburg
Mein GitHub: https://github.com/LeonGaultier
kein Support für cfg Editierer

Offline HomeAuto_User

  • Developer
  • Full Member
  • ****
  • Beiträge: 234
Antw:Newbie - autocreate für Readings ?
« Antwort #5 am: 19 Dezember 2017, 15:14:42 »
Es geht aktuell um diese Fortführung.
Das xs1 von EZcontrol ist ein Gerät was Sensoren und Aktoren empfangen bzw. Daten senden kann.
Da das ganze nicht mehr entwickelt wird, so dachte ich mir, verarbeite ich das ganze mal in ein Modul um dies mit FHEM nutzen zu können.

Ich lese die Zustände des Gerätes via http Abfrage aus und schreibe diese in Readings.
So kann ich das Gerät bsp. fernab von einem Empfänger hinstellen und habe via Netzwerkverbindung eine Bridge wo ich die Daten in FHEM darstellen kann.
Da man auch schalten kann, so Möchte ich die Zustände der aktoren (welche in Readings sind) nun in Aktoren schaltbar in FHEM umsetzen. Wenn Zustand aus, und man on drückt, so setze ich einen http Befehl ab um die XS1 - Aktor x zu steuern.

(Thema wurde parallel veschoben, hatte Tomaten auf den Augen  ;D)
- FHEM v5.8 | Rasberry PI 3
- radino CC1101 433Mhz (SIGNALduino)| - radino CC1101 868Mhz (CUL) | nano 433Mhz (SIGNALduino) als Vergleichsempfänger
- Sensoren: 3x FHT 80b | 5x FHT 80 TF-2 | 2x S300TH | 1x WS7000-20 | 5x "Hideki" | THR128

Online CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15229
Antw:Newbie - autocreate für Readings ?
« Antwort #6 am: 19 Dezember 2017, 15:26:44 »
Das xs1 von EZcontrol ist ein Gerät was Sensoren und Aktoren empfangen bzw. Daten senden kann.


Das ist das Entscheidende. Es ist eine Bridge welche Daten von anderen Geräten Empfängt. Also klassisches 2-stufiges Modul ist hier zu empfehlen.
Sofern noch nicht geschehen lese Dich ins Wiki ein und schaue Dir dort die Sektion dazu genauer an.
Es gibt diverse Module welches dieses Prinzip verwenden. Da Du sicherlich Fragen haben wirst gebe ich Dir meine Module auf den Weg mit.

73_GardenaSmartBridge.pm
74_GardenaSmartDevice.pm

73_AMADCommBridge.pm
74_AMADDevice.pm

21_HEOSPlayer.pm
21_HEOSMaster.pm
21_HEOSGroup.pm



Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.me/MOldenburg
Mein GitHub: https://github.com/LeonGaultier
kein Support für cfg Editierer

Offline HomeAuto_User

  • Developer
  • Full Member
  • ****
  • Beiträge: 234
Antw:Newbie - autocreate für Readings ?
« Antwort #7 am: 20 Dezember 2017, 19:47:52 »
Hallo CoolTux,

Das xs1 von EZcontrol ist ein Gerät was Sensoren und Aktoren empfangen bzw. Daten senden kann.


Das ist das Entscheidende. Es ist eine Bridge welche Daten von anderen Geräten Empfängt. Also klassisches 2-stufiges Modul ist hier zu empfehlen.
Sofern noch nicht geschehen lese Dich ins Wiki ein und schaue Dir dort die Sektion dazu genauer an.
Es gibt diverse Module welches dieses Prinzip verwenden. Da Du sicherlich Fragen haben wirst gebe ich Dir meine Module auf den Weg mit.

....

Grüße

Vielen Dank für deine Antwort und auch für den Hinweis deiner Module.
Ich konnte mich schon ein wenig mehr "hineinfuchsen". *daumenhoch*
Sollte ich denn noch Fragen haben, so melde ich zu Wort ;-)

MfG
- FHEM v5.8 | Rasberry PI 3
- radino CC1101 433Mhz (SIGNALduino)| - radino CC1101 868Mhz (CUL) | nano 433Mhz (SIGNALduino) als Vergleichsempfänger
- Sensoren: 3x FHT 80b | 5x FHT 80 TF-2 | 2x S300TH | 1x WS7000-20 | 5x "Hideki" | THR128

Online CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15229
Antw:Newbie - autocreate für Readings ?
« Antwort #8 am: 20 Dezember 2017, 19:58:56 »
Freut mich das ich helfen konnte. Schreib einfach wenn Du Fragen hast.


Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.me/MOldenburg
Mein GitHub: https://github.com/LeonGaultier
kein Support für cfg Editierer

Offline HomeAuto_User

  • Developer
  • Full Member
  • ****
  • Beiträge: 234
Antw:Newbie - autocreate für Readings ?
« Antwort #9 am: 20 Dezember 2017, 22:53:01 »
Hi

Freut mich das ich helfen konnte. Schreib einfach wenn Du Fragen hast.

Grüße

auf deine Aussage komme ich direkt mal zurück ;-)
Ich versuche gerade mein JSON zu decoden was mir in der "ersten Stufe soweit klappt". In der 2. Stufe komme ich noch nicht weiter.

actuator
"version": 16,
"type": "get_list_actuators",
"utc_offset": 60,
"dst": "off",
"actuator": [
{
"name": "UB_FB_1",
"id": 1,
"type": "switch",
"value": 0.0,
"newvalue": 0.0,
"utime": 0,
"unit": "%",
"function": [
{
"type": "on",
"dsc": "ON"
},
{
"type": "off",
"dsc": "OFF"
},
{
"type": "disabled",
"dsc": ""
},
{
"type": "disabled",
"dsc": ""
}
]
},
{
"name": "UB_FB_2",
"id": 2,
"type": "switch",
"value": 0.0,
"newvalue": 0.0,
"utime": 0,
"unit": "%",
"function": [
{
"type": "on",
"dsc": "ON"
},
{
"type": "off",
"dsc": "OFF"
},
{
"type": "disabled",
"dsc": ""
},
{
"type": "disabled",
"dsc": ""
}
]
},
}

Ich möchte an "function" herankommen.
Mit meiner Schleife
my @array = @{ $decoded->{"actuator"} };
foreach my $f ( @array ) {
if ($f->{"type"} ne "disabled") {
print $test["type"];
}
}
gelang es mir nur für die "erste Stufe" wie actuator.
- FHEM v5.8 | Rasberry PI 3
- radino CC1101 433Mhz (SIGNALduino)| - radino CC1101 868Mhz (CUL) | nano 433Mhz (SIGNALduino) als Vergleichsempfänger
- Sensoren: 3x FHT 80b | 5x FHT 80 TF-2 | 2x S300TH | 1x WS7000-20 | 5x "Hideki" | THR128

Offline herrmannj

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 4659
Antw:Newbie - autocreate für Readings | JSON
« Antwort #10 am: 20 Dezember 2017, 23:15:31 »
das ist schon mal kein valides JSON. Wenn es JSON wäre dann wäre das Wurzelelement ein Object oder ein array.

Nehmen wir mal voller Übermut an das Dein JSON unvollständig gepostet ist, und dass das Wurzelelement ein object ist (der einem hash in perl entspricht). Dann wäre der Weg dieser:
$decoded->{'actuator'}->{'actuator'}->[0]->{'function'}Das ergibt dann die referenz zu einem array von objecten die jeweils die keys 'type' und 'dsc' haben.

edit: wobei Du über das erste array auch loopen musst. Da wo ich nur index 0 geschrieben habe,
edit2: wer denkt sich so beknackte JSON aus ?? ;)
edit3: code angepasst (von $data auf $decoded)
« Letzte Änderung: 20 Dezember 2017, 23:20:20 von herrmannj »
smartVisu mit fronthem, einiges an HM, RFXTRX, Oregon, CUL, Homeeasy, ganz viele LED + Diverse

Online CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15229
Antw:Newbie - autocreate für Readings | JSON
« Antwort #11 am: 20 Dezember 2017, 23:25:42 »
Vielen Dank Jörg für Deine Hilfe.
Ich schließe mich da Jörg an. Unter der Voraussetzung das Du etwas unterschlagen hast kannst Du mit Jörgs Code das Element direkt ansprechen. Alternativ kannst du auch alle Arrays durchgehen.


Schau mal hier
https://raw.githubusercontent.com/LeonGaultier/fhem-SmartPi/master/46_SmartPi.pm

Du findest oben im Modul ein Beispielstring für das JSON und in der Readings Write Funktion siehst du das ich es über verschachtelte Schleifen gemacht habe.


Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.me/MOldenburg
Mein GitHub: https://github.com/LeonGaultier
kein Support für cfg Editierer

Offline HomeAuto_User

  • Developer
  • Full Member
  • ****
  • Beiträge: 234
Antw:Newbie - autocreate für Readings | JSON
« Antwort #12 am: 20 Dezember 2017, 23:26:12 »
Danke,
den Ansatz von dir habe ich genutzt und erhalte was als Ergebnis ;-) Da muss ich vorhin "blind" gewesen sein, da ich der Annahme war, das so schonmal probiert zu haben.

das ist schon mal kein valides JSON. Wenn es JSON wäre dann wäre das Wurzelelement ein Object oder ein array.

Nehmen wir mal voller Übermut an das Dein JSON unvollständig gepostet ist, und dass das Wurzelelement ein object ist (der einem hash in perl entspricht). Dann wäre der Weg dieser:
$decoded->{'actuator'}->{'actuator'}->[0]->{'function'}Das ergibt dann die referenz zu einem array von objecten die jeweils die keys 'type' und 'dsc' haben.

edit: wobei Du über das erste array auch loopen musst. Da wo ich nur index 0 geschrieben habe,
edit2: wer denkt sich so beknackte JSON aus ?? ;)
edit3: code angepasst (von $data auf $decoded)

zu edit2: ein Hersteller, welcher nun nicht mehr weiter produziert ;-)

Es sind Arbeiten zu dem diesem Modul .
- FHEM v5.8 | Rasberry PI 3
- radino CC1101 433Mhz (SIGNALduino)| - radino CC1101 868Mhz (CUL) | nano 433Mhz (SIGNALduino) als Vergleichsempfänger
- Sensoren: 3x FHT 80b | 5x FHT 80 TF-2 | 2x S300TH | 1x WS7000-20 | 5x "Hideki" | THR128

Offline HomeAuto_User

  • Developer
  • Full Member
  • ****
  • Beiträge: 234
Antw:Newbie - Modulkommunikation | JSON | diverse Zusammenhänge
« Antwort #13 am: 21 Dezember 2017, 20:56:49 »
Guten Abend,

mit der Hilfe von Euch kam ich schon ein sehr schönes Stück weiter!
Derzeit versuche ich durchzusehen wie die Kommunikation der beiden Module welche ich "verknüpfe" zustande kommt.
Laut Wiki spielt IOWrite() mit x_Write() zusammen und Dispatch() mit X_Parse().
Die "Kommunikation" von IOWrite() mit x_Write() ist mir gelungen das ich Zustände übertragen kann.
Mit Dispatch() zu X_Parse() habe ich noch meine Probleme. Derzeit erhalte ich vom Dispatch() unknow code ... und eine Weitergabe erfolgt nicht zur X_Parse().

Angefangen habe ich mit sub xs1Device_Parse($$)
{
my ( $io_hash, $decoded) = @_;
my $name = $io_hash->{NAME};
   
Log3 $name, 1, "xs1Device_Parse: io_hash:$io_hash Ausgabe:$decoded";
}
um einfach erstmal eine Reaktion zu sehen. Leider erhalte ich keine Logausgabe und stattdessen die MEldung unknow Code vom Dispatch (help me).
Ich vermute die Parse "springt" nicht an oder ich habe etwas undefiniert.  :o

Zitat
sub xxx ()
{
...
Dispatch($hash,$decoded,undef);
}
- FHEM v5.8 | Rasberry PI 3
- radino CC1101 433Mhz (SIGNALduino)| - radino CC1101 868Mhz (CUL) | nano 433Mhz (SIGNALduino) als Vergleichsempfänger
- Sensoren: 3x FHT 80b | 5x FHT 80 TF-2 | 2x S300TH | 1x WS7000-20 | 5x "Hideki" | THR128

Online CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15229
Antw:Newbie - Modulkommunikation | JSON | diverse Zusammenhänge
« Antwort #14 am: 21 Dezember 2017, 21:34:06 »
Hast Du denn die $hash->{Match} , $hash->{MatchList} und $hash->{Clients} entsprechend eingetragen?
Schau Dir die von mir gegeben Module noch mal an.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.me/MOldenburg
Mein GitHub: https://github.com/LeonGaultier
kein Support für cfg Editierer

 

decade-submarginal