Hallo zusammen,
ich würde gerne mich miteinbringen und habe ein Modul erstellt für die Gartenbewässerung von Hunter Hydrawise.
Ich habe ein paar Mal mit Rudolf Kontakt gehabt. Er sagte mir, dass es gewisse Voraussetzung benötigt für eine Veröffentlichung in FHEM.
Demnach sollte u.a. ein erfahrener Programmierer mal über das Modul schauen um so die gröbsten Fehler anzumerken. Das halte ich auch für sinnvoll und würde gerne jmd. Erfahrenes bitten, sich das Modul anzuschauen:
https://forum.fhem.de/index.php?topic=88589.0 (Antwort 21)
Besten Dank und viele Grüße,
Alex
Mal so das Gröbste durch
$ perlcritic 70_HYDRAWISE.pm
70_HYDRAWISE.pm source OK
Man kann natürlich noch ein wenig weitermachen falls Interesse da ist.
Hallo Alex,
Ich habe Dein Modul gerade bei mir installiert. Habe keinen Zugang oder so aber ein einfaches Define klappt.
Da wir gerade eine kleine Diskussion haben in welche Richtung zukünftig Module bezüglich DeveloperGuid entwickelt werden sollen würde ich da kurz noch mal Rudi fragen wie weit ich da gehen darf.
Ansonsten fehlt Dir natürlich noch die Doku im Modul. Also Commandref.
Den Token würde ich nicht in der Define mit ablegen sondern gesondert als set Befehl ins keyFile ablegen.
https://wiki.fhem.de/wiki/DevelopmentModuleAPI#setKeyValue
https://wiki.fhem.de/wiki/DevelopmentModuleAPI#getKeyValue
Grüße
Richard hat da ja nun schon ganz schön was gemacht.
Dazu etwas zu den Hintergründen. Einige Entwickler möchten versuchen etwas Perlkonformer zu entwickeln. So versuchen diese Entwickler sich an "Perl Best Practices" zu halten (Buch) und mit Tools zu schauen wie sauber der Code ist.
So zum Beispiel Perlcritic. Für eine saubere Formatierung kann man noch perltidy verwenden.
Desweiteren versuchen wir alle Module auf packages zu bringen (A package is a collection of code which lives in its own namespace).
Grüße
Zitat von: CoolTux am 06 April 2020, 13:27:20
Richard hat da ja nun schon ganz schön was gemacht.
Ich würde noch magische Variablennamen entfernen (@a), nicht Variablennamen verwenden, die gleich lauten wie builtins ($return)
und ich glaube, man kann mit Heredocs den Code auch visuell sehr beruhigen:
use strict;
use warnings;
print anleitung();
print "\n";
print bessere_anleitung();
sub anleitung {
return "
-----------------------------------------------------------------------------------------------------\n
|renewcontext | refresh readings customerdetail |\n
-----------------------------------------------------------------------------------------------------\n
|renewRelays | refresh readings statusdetails |\n
-----------------------------------------------------------------------------------------------------\n
|run | Run zone for a period of time. 2 Parameters: \"relay_id\" \"time_in_seconds\" |\n
-----------------------------------------------------------------------------------------------------\n
|runall | Run all zones for a period of time. 1 Parameters: \"time_in_seconds\" |\n
-----------------------------------------------------------------------------------------------------\n
|stop | Stop zone. 1 Parameters: \"relay_id\" |\n
-----------------------------------------------------------------------------------------------------\n
|stopall | Stop all currently running zones. |\n
-----------------------------------------------------------------------------------------------------\n
|suspend | Suspend zone for a period of time. 3 Parameters: \"relay_id\" \"DD.MM.YYYY\" \"HH24:MI\" |\n
-----------------------------------------------------------------------------------------------------\n
|suspendall | Suspend all zones for a period of time. 2 Parameters: \"DD.MM.YYYY\" \"HH24:MI\" |\n
-----------------------------------------------------------------------------------------------------\n
";
}
sub bessere_anleitung {
return << 'EOT';
-----------------------------------------------------------------------------------------------------
|renewcontext | refresh readings customerdetail |
-----------------------------------------------------------------------------------------------------
|renewRelays | refresh readings statusdetails |
-----------------------------------------------------------------------------------------------------
|run | Run zone for a period of time. 2 Parameters: "relay_id" "time_in_seconds" |
-----------------------------------------------------------------------------------------------------
|runall | Run all zones for a period of time. 1 Parameters: "time_in_seconds" |
-----------------------------------------------------------------------------------------------------
|stop | Stop zone. 1 Parameters: "relay_id" |
-----------------------------------------------------------------------------------------------------
|stopall | Stop all currently running zones. |
-----------------------------------------------------------------------------------------------------
|suspend | Suspend zone for a period of time. 3 Parameters: "relay_id" "DD.MM.YYYY" "HH24:MI" |
-----------------------------------------------------------------------------------------------------
|suspendall | Suspend all zones for a period of time. 2 Parameters: "DD.MM.YYYY" "HH24:MI" |
-----------------------------------------------------------------------------------------------------
EOT
}
Richard bitte nicht ganz so schnell. Denk bitte daran die meisten hier sind keine Profis in Perl.
Wenn Du Vorschläge machst dann bitte mit etwas Erklärung dazu oder Verweise auf Literatur. ;)
@Alex
Um es noch mal ganz klar zu sagen. Bis auf die Commandref ist alles andere ein Vorschlag, keine Verpflichtung. Es zwingt Dich also niemand mehr Energie rein zu stecken.
Im Zuge einer sauberen FHEM Umgebung wäre es natürlich schön wenn Du Dir die Vorschläge anschauen könntest.
Grüße
Hallo zusammen,
vielen Dank für die Hinweise. Ja, ich brauch da vielleicht etwas länger und bin bemüht, das auch richtig zu machen. Das mit der Anleitung gefällt mir ganz gut. Die CommandRef ergänze ich noch. Dann will ich mich gerne weiterentwickeln. Ich stell diese Änderungen noch ein, dann kannst du gerne noch ein Blick draufwerfen.
Viele Dank auf jeden Fall,
Gruß,
Alex
Hallo zusammen,
ich habe jetzt die Anleitung von Richard übernommen und habe das Commdref von dir CoolTux eingebaut.
Vielleicht hast du nochmals Zeit, dir das anzuschauen?
Besten Dank und viele Grüße,
Alex
Ich konnte es jetzt nicht funktional testen, aber vom Code her sieht das passabel aus.
$ perlcritic -4 70_HYDRAWISE.pm
70_HYDRAWISE.pm source OK
Habe 2-3 Schönheitsfehler behoben - muss sich jetzt nicht verstecken der Code.
Zitat von: xasher am 06 April 2020, 17:22:23
Hallo zusammen,
ich habe jetzt die Anleitung von Richard übernommen und habe das Commdref von dir CoolTux eingebaut.
Vielleicht hast du nochmals Zeit, dir das anzuschauen?
Besten Dank und viele Grüße,
Alex
Zitat*** EN FHEM/70_HYDRAWISE.pm: No a-tag with name="HYDRAWISE"
*** EN FHEM/70_HYDRAWISE.pm: Unbalanced ul (1, last line ok: 805)
*** EN FHEM/70_HYDRAWISE.pm: Unbalanced tr (1, last line ok: 859)
*** DE FHEM/70_HYDRAWISE.pm: Unbalanced ul (1, last line ok: 915)
*** DE FHEM/70_HYDRAWISE.pm: Unbalanced tr (1, last line ok: 968)
Das müsstest Du bitte noch in Ordnung bringen.
Testen kannst Du mit
cd /opt/fhem
/usr/bin/perl contrib/commandref_join.pl
Da sollten dann zu Deinem Modul keine Meldungen kommen.
Oder falls man weniger geduldig ist:
contrib/commandref_join.pl FHEM/mymodule.pm
Danke euch. Ich kümmere mich morgen gleich drum.
Heute Abend hat die Frau Vorrang.
Ich denke, es liegt an den Umlauten vielleicht. Ich dachte, das funktioniert mit UTF8.
Vielleicht ist es auch was anderes - wir werden sehen.
Viele Grüße,
Alle
Zitat von: xasher am 06 April 2020, 19:40:16
Danke euch. Ich kümmere mich morgen gleich drum.
Heute Abend hat die Frau Vorrang.
Ich denke, es liegt an den Umlauten vielleicht. Ich dachte, das funktioniert mit UTF8.
Vielleicht ist es auch was anderes - wir werden sehen.
Viele Grüße,
Alle
Die Umlaute sind es nicht. Du hast zu viel ul und tr offen. Also sie nicht mehr geschlossen.
<ul>
<ul>
</ul>
Sowas zum Beispiel
Ah ja. Danke. Das ist einfach :)
Schönen Abend allen
Alex
Hallo zusammen,
ich bin das html durchgegangen und habe 3 Fehler noch korrigiert pro Hilfeseite.
Das kommt nun bei mir
pi@raspberrypi:/opt/fhem $ /usr/bin/perl contrib/commandref_join.pl ./FHEM/70_HYDRAWISE.pm
pi@raspberrypi:/opt/fhem $
Ich bitte nochmals um eine kurze Bestätigung. Dann würde ich nochmals auf Rudolf zugehen.
Besten Dank,
Alex
Sieht soweit gut aus. Kommentiere bitte noch "use Data::Dumper;" aus. Das muss beim User ja nicht unbedingt geladen werden.
Was genau wolltest Du Rudi da noch fragen? Eventuell kann ich Dir da auch helfen?
Grüße
Hallo CoolTux,
bestimmt kannst du mir sogar helfen. Ich hatte nur über die Vorgehensweise berits mit ihm Kontakt.
Was mich jetzt interessieren würde:
Was muss ich jetzt machen, um das Modul einzuchecken. Ich habe bereits einen Public Key generiert und an die entsprechende Mailadresse geschickt.
Dann weiß ich aber aktuell nicht weiter.
Anbei das Modul mit der Auskommentierung.
Grüße,
Alex
Du müsstest dann Bescheid bekommen wenn Dein Zugang eingerichtet ist.
Dann clonst Du ertsmal das svn und richtest alles ein.
Hallo zusammen,
ok, etwas peinlich - ich arbeite zum ersten Mal mit subversion. Ich habe auch die Schritte von svn.fhem.de durchgeführt.
Ich habe also ein clone hier lokal:
pi@raspberrypi:~ $ svn co svn+ssh://svn.fhem.de/trunk/fhem /fhem_svn/
Enter passphrase for key '/home/pi/.ssh/xasher.ppk': --> <pw_eingegeben_dann_lädt_er_dateien>
...
Ausgecheckt, Revision 21615.
Prima, das sieht nicht schlecht aus. Dann habe ich verstanden, dass ich die MAINTAINER.txt und ggf. CHANGED anpassen bzw. ergänzen darf.
Dann aber: Wie kommt mein Modul rein? (ok, ich könnte es nach /fhem_svn/FHEM kopieren)
und wie wird das dann eingecheckt?
Vielleicht kann mir jmd Starthilfe geben.
Danke euch,
Alex
Du kopiert tatsächlich Dein Modul ins SVN Verzeichnis unter /FHEM
Dann sagst Du svn das es dazu kommt.
svn add
Hier mal eine ältere Anleitung
http://svnbook.red-bean.com/de/1.7/index.html
Schau Dir auch noch das Thema id an.
https://wiki.fhem.de/wiki/SVN_Nutzungsregeln#SVN_.24Id.24_Platzhalter
Nutzungsregeln zu svn in Verbindung mit FHEM findest Du hier
https://wiki.fhem.de/wiki/SVN_Nutzungsregeln
Hallo CoolTux,
danke, die Seiten kenne ich - bis auf das Gesamtwerk von subversion vielleicht.
svn add
svn status
A 70_HYDRAWISE.pm
svn propset svn:keywords Id 70_HYDRAWISE.pm
svn diff
Property changes on: 70_HYDRAWISE.pm
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Id
\ No newline at end of property
svn commit 70_HYDRAWISE.pm:controlling Hydraswise irrigation
svn: E200009: Übertragen schlug fehl (Details folgen):
svn: E200009: »/fhem_svn/FHEM/70_HYDRAWISE.pm:controlling« ist nicht unter Versionskontrolle
Ich verstehe es nicht, warum es nicht in der Versionskontrolle ist, wenn es doch den Stauts "A" hat.
Sorry,
alex
svn add FHEM/70_HYDRAWISE.pm
Mach mal bitte noch mal
Generell solltest Du bitte versuchen dem svn Befehl immer nur die Files mit zugeben welche Du geändert hast.
Also nicht
svn add
sondern
svn add FHEM/MeinModul.pm
auch so beim commit
svn commit -m "54_MeinModul: Neue Version" CHANGED FHEM/54_MeinModul.pm
Grüße
Sorry, bin gerade unterwegs
Hier mal das Ergebnis mit dem Handy
svn: Warnung: W150002: »/fhem_svn/FHEM/70_HYDRAWISE.pm« befindet sich bereits unter Versionskontrolle
svn: E200009: Konnte nicht alle Ziele hinzufügen, da einige Ziele schon versioniert sind
svn: E200009: Ungültiges Ziel für die angeforderte Operation
pi@raspberrypi:/fhem_svn $
Alex
Sieht doch gut aus.
Sollte eigentlich nun gehen mit einem Commit.
ABER!!!!
Bitte tue Dir und auch Rudi einen Gefallen und mache das ganze in Ruhe am PC. Nicht über Handy oder Tablet. Da sieht man seine "Fehler" vielleicht nicht und schwups ist das SVN versaut. Ich spreche da aus leidlicher Erfahrung ;D
Grüße
juhu, erfolg - mein erstes Modul :)
Enter passphrase for key '/home/pi/.ssh/xasher.ppk':
Sende CHANGED
Füge hinzu FHEM/70_HYDRAWISE.pm
Übertrage Daten ..erledigt
Übertrage Transaktion...
Vielen Dank - ohne Eure Geduld hätte ich das nicht geschafft.
Grüße,
Alex
PS: Ja, Handy ist in der Tat nicht gut. Mit ist das Mäusekino zum arbeiten auch nicht so recht...
Wenn Du noch Interesse an packages (Klassen) hast dann einfach Bescheid geben.
Hi,
Klar hab ich Interesse.
Hast du Informationen davon?
Grüße,
Alex
Schau Dir mal das Modul an
https://git-tuxnet.ddns.net/FHEM/mod-TeslaPowerwall2AC
Ich bilde mir ein es ist Übersichtlich um das Prinzip zu verstehen.
Im Grunde deklarierst Du einen eigenen Namensraum in dem Deine Funktionen und alles Gültig sind.
Funktionen und Variablen aus der main musst Du importieren.
Wenn Du Fragen hast einfach fragen.
Grüße