Wo stellt man Fragen, wenn man ein Modul entwickeln möchte

Begonnen von ujaudio, 31 Dezember 2017, 06:14:31

Vorheriges Thema - Nächstes Thema

KernSani

Zu offtopic: Gute Diskussion, gute Vorschläge - aber offtopic - Neue Diskussion im Developerforum?

@ujaudio: Du kannst im Midul einen Timer definieren - das ist in der Doku beschrieben (oder du schaust wie existierende Module das machen)
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

herrmannj

Timer? Readings werden beim ersten verwenden automatisch angelegt.

KernSani

Timer war bezogen auf:

Zitat von: ujaudio am 31 Dezember 2017, 13:00:50
Lösen kann ich das mit einem "at", welches regelmäßig prüft ob der Oppo noch "on" ist oder "absent". Ich würde es aber gerne innerhalb des Moduls lösen.
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

herrmannj

Alles klar. Absolut richtig, Timer ist die korrekte Empfehlung  😀

CoolTux

Die selben Punkte hatte wir vor ein einhalb Jahren schon mal zur Diskussion.
Ich befürworte sie.
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.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Icinger

Zitat- Das Modul muss bei mindestens einem weiteren Benutzer über mehrere Tage funktionieren.

Täusche ich mich, oder steht dass nicht eh irgendwo in den Anforderungen für den SVN-Zugang.
Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho

CoolTux

Zitat von: KernSani am 31 Dezember 2017, 13:21:49
Zu offtopic: Gute Diskussion, gute Vorschläge - aber offtopic - Neue Diskussion im Developerforum?

@ujaudio: Du kannst im Midul einen Timer definieren - das ist in der Doku beschrieben (oder du schaust wie existierende Module das machen)

Das LGTV_WebOS Modul macht von Timern anständig gebrauch.
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.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

ujaudio

Hallo zusammen,

ich hoffe ihr hattet einen guten Rutsch in das Jahr 2018 und verbinde dies mit guten Wünschen an euch für dasselbe, vor allen Gesundheit und Frieden, sowie das notwendige Glück - alles Dinge, die man sich nicht kaufen oder erarbeiten kann.

Ich möchte hier nun 2 Fragen stellen. Die erste bezieht sich ganz allgemein auf "gutes Programmieren". Ich habe zwei Unterprogramme - jeweils übernommen und für meine Zwecke angepasst  ;) einmal gibt es am Ende ein
return undef;
ein andermal nicht. Was ist denn nun die bessere Programmierung? Die Funktion ist in beiden Fällen die gleiche, zumindest kann ich keine Unterschiede im Ablauf feststellen, wenn ich es mal so und mal anders mache.

Die 2. Frage: Wo finde ich eine gute, kompakte und übersichtliche Erklärung für Einsteiger, wie die Kommunikation (allgemein, bzw. mit perl) abläuft?

Hintergrund der Frage (nur für den Fall, dass es hilfreich ist, wo ich mich einlesen sollte): wenn ich mit FHEM ein Kommando an den Oppo sende und alles ist gut dann wird nach der WriteFn auch sofort eine ReadFn von FHEM aufgerufen. Ist die Verbindung aber unterbrochen, so folgt nach dem WriteFn erst einmal nichts. Erst wenn der Oppo wieder eingeschaltet ist, wird ReadFn aufgerufen, welches misslingt, nach dem Etablieren der Verbindung wird ein 2. Mal ReadFn erfolgreich aufgerufen. Klingt als Text unverständlich. Im Log sieht es wie nachfolgend aus:
#Gerät eingeschaltet:
2018.01.01 10:08:06 4: Oppo (oppo105) - WriteFn called
2018.01.01 10:08:06 4: Oppo (oppo105) - REMOTE NOP
2018.01.01 10:08:06 4: Oppo (oppo105) - ReadFn started
2018.01.01 10:08:06 3: Oppo (oppo105) - received data @NOP OK
# Gerät ausgeschaltet:
2018.01.01 10:08:59 4: Oppo (oppo105) - WriteFn called
2018.01.01 10:08:59 4: Oppo (oppo105) - REMOTE NOP
# Gerät wurde wieder eingeschaltet:
2018.01.01 10:20:06 4: Oppo (oppo105) - ReadFn started
2018.01.01 10:20:06 4: Oppo (oppo105) - Socket Disconnected #weil Fehler in ReadFn
# Neuaufbau der Verbindung:
2018.01.01 10:21:34 4: Oppo (oppo105) - Socket Connected # danach gleich ein syswrite, um die SW-Version des Oppo zu holen
2018.01.01 10:21:34 4: Oppo (oppo105) - ReadFn started
2018.01.01 10:21:34 3: Oppo (oppo105) - received data @QVR OK 10XEU-83-1226
# Jetzt kommt doch noch die Antwort:
2018.01.01 10:24:20 3: Oppo (oppo105) - received data @NOP OK

Einen lieben Gruß
Jürgen

rudolfkoenig

1. ohne explizites return ist das zuletzt ausgewertete Ausdruck der Rueckgabewert
2. diese Frage ist zu allgemein, Kommunikation ist mehrdeutig. In deinem speziellen Fall habe ich keine Frage gefunden, und ich rate: du erwartest, dass irgendetwas nach einer Zeit der Nicht-Reaktion der anderen Seite passiert. Dafuer gibt es die Timer: d.h. beim Write InternalTimer setzen, und im ReadFn loeschen.

CoolTux

Ich würde es hier anders machen. Das Write sollte nicht gehen wenn das Modul mitbekommt das die Verbindung beendet wurde. Eigentlich sollte der Socket bei einem normalen ausschalten über Power Off oder so vernünftig abgebaut werden.
Du kannst alternativ noch eine presence Funktion mittels Ping einbauen. Alles im LG Modul vorhanden.
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.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

ujaudio

Zitat von: rudolfkoenig am 01 Januar 2018, 12:22:49...
2. diese Frage ist zu allgemein, Kommunikation ist mehrdeutig. In deinem speziellen Fall habe ich keine Frage gefunden

Die Frage war:
ZitatWo finde ich eine gute, kompakte und übersichtliche Erklärung für Einsteiger, wie die Kommunikation (allgemein, bzw. mit perl) abläuft?

Ich möchte einfach mal etwas über die Kommunikation via Ethernet (TCP, UDP, etc.) lernen. Das kann ein Link, ggf. auch ein Buch sein. Ein wenig habe ich schon gefunden, aber noch zu wenig, um es wirklich zu verstehen. Ich erwarte nicht, nein ich will sogar nicht, dass man mir hier meine Herausforderungen löst, denn dann habe ich ja gar nichts gelernt.
Einen lieben Gruß
Jürgen

CoolTux

https://perldoc.perl.org/IO/Socket/INET.html

Damit arbeitest Du Momentan. Du kannst Dir die Beschreibung durchlesen oder Dir den Code in dem Modul anschauen. Denn nichts anderes ist es. Du bindest einfach nur ein weiteres Perl Modul ein und bediehnst Dich der bereitgestellten Funktionen.
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.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net