Hey,
Ich habe mich an mein erstes Modul gewagt und zwar für Blaulichtsms.
Blaulichtsms ist ein Alarmierungsdienst für Rettungsdienste über Internet mehr Informationen hier: https://blaulichtsms.net/ (https://blaulichtsms.net/)
Das Modul basiert auf der Dashboard API von Blaulichtsms. Man braucht natürlich die Login Daten des Blaulichtsms Accounts und Die Organisation muss natürlich auch darüber Alarmieren.
Das Modul läuft bei mir jetzt schon einige Wochen stabil, heißt aber nicht das sich nicht noch Fehler eingeschleust haben. Für Verbesserungsvorschläge bin ich natürlich immer offen. Ich weiß auch, dass ich wenn überhaupt einen sehr kleinen Benutzerkreis damit anspreche aber eventuell finden sich ja ein paar Leute die das Modul mal Testen und gebrauchen können.
Das Modul kann hier heruntergeladen werden:
https://github.com/fhem/bsms
Das Modul wird wie folgt definiert:
define <name> bsms <customerID> <username> <password>
attr <name> Alarmdauer <value> ##in sekunden default 3600
attr <name> Intervall <value> ##in sekunden default 10
Grüße
Julien
Bitte überarbeite das Modul doch noch einmal.
Du arbeitest nicht mit packages, somit wird Dein Code im Main Kontext aufgerufen. Dennoch verwendest Du keine ein eindeutigen Funktionesnamen. Eine Funktion heißt sogar main. Ich kann mir beim besten Willen nicht vorstellen wie das sauber laufen kann.
sub is_alarm($){
my ($hash) = @_;
my $name = $hash->{NAME};
my $duration = 3600;
if($hash->{alarmdauer} > 0 ) {
$duration = $hash->{alarmdauer};
}
my $alarms = get_alarms($hash);
my $dt = DateTime->now;
my $tslocal = $dt->epoch;
my $obj = our $alarms->{"alarms"}[0]{"alarmDate"};
my $txt = our $alarms->{"alarms"}[0]{"alarmText"};
my $time_lastalarm = convert_time($obj) ;
my $timelastoffset = $time_lastalarm + $duration;
my $dtt = DateTime->from_epoch( epoch => $time_lastalarm );
$dtt->set_time_zone( "Europe/Berlin" );
my $ymd = $dtt->ymd('.'); # 1974.11.30 - also 'date'
my $y = $dtt->year;
my $m = $dtt->month; # 1-12 - you can also use '$dt->mon'
my $d = $dtt->day; # 1-31 - also 'day_of_month', 'mday'
my $hms = $dtt->hms; # 13:30:00
my $timestr = "$d.$m.$y $hms";
unless ($alarms) { return undef;}
setreading($hash, "letzte_Alarm", $timestr);
setreading($hash, "Meldetext", $txt);
if($timelastoffset >= $tslocal or our $testalarm == 1){
setreading($hash, "Alarm", "Alarm");
set_state($hash, "Alarm");
return 1;
}else{
setreading($hash, "Alarm", "kein Alarm");
set_state($hash, "running");
return undef;
}
}
sub set_state($$) {
my ($hash, $value) = @_;
$hash->{STATE} = $value;
return 1;
}
sub main($) {
my ($hash) = @_;
my $intervall = 30;
if( $hash->{intervall} > 0 ) {
$intervall = $hash->{intervall};
}
my $timer = gettimeofday() + $intervall;
my $start ="main";
get_alarms($hash);
is_alarm($hash);
our $hash = $hash;
RemoveInternalTimer($hash);
InternalTimer($timer, $start, $hash,0);
}
sub setreading($$$) {
my ($hash, $reading, $value) = @_;
readingsBeginUpdate($hash);
readingsBulkUpdate( $hash, $reading, $value );
readingsEndUpdate( $hash, 1 );
}
sub getreading($$$) {
my ($device, $reading, $hash) = @_;
my $result = ReadingsVal($device, $reading, "");
return $result
}
OK sorry hab es erst mal raus genommen danke für die Info. läuft bei mir aber tatsächlich ohne Fehler durch. Ich Überarbeite nochmal alles und würde mich dann nochmal melden.
Vielen Dank
Julien
Für den Anfang reicht es wenn Du die Präfix Gestaltung durch ziehst. Also überall vor den Funktionsnamen bsms_ schreibst so wie Du angefangen hast.
So ich hab das Modul nochmal überarbeitet Funktionsnamen sollten jetzt stimmen. Sorry nochmal für den Fehler hätte ich eigentlich auch selbst sehen müssen aber irgendwie völlig ignoriert.
CoolTux nochmals danke das du mich darauf aufmerksam gemacht hast und für deine Hilfe.
Grüße
Julien
Zitat von: crazier96 am 07 Februar 2020, 16:54:48
So ich hab das Modul nochmal überarbeitet Funktionsnamen sollten jetzt stimmen. Sorry nochmal für den Fehler hätte ich eigentlich auch selbst sehen müssen aber irgendwie völlig ignoriert.
CoolTux nochmals danke das du mich darauf aufmerksam gemacht hast und für deine Hilfe.
Grüße
Julien
Ich würde Dir auch empfehlen die für das abrufen der Daten die FHEM Internen Funktionen aus HttpUtils zu nehmen. Gerade was das Thema nonBlocking an geht.
Zitat von: CoolTux am 07 Februar 2020, 18:12:55
Ich würde Dir auch empfehlen die für das abrufen der Daten die FHEM Internen Funktionen aus HttpUtils zu nehmen. Gerade was das Thema nonBlocking an geht.
OK danke für den Tipp das gucke ich mir morgen mal an. :)
Kurze Info: Habe das Modul auf HttpUtils umgestellt.
Schneller Blick. Sieht gut ist. Haste toll gemacht.
Danke Dir
Zitat von: CoolTux am 09 Februar 2020, 18:20:15
Schneller Blick. Sieht gut ist. Haste toll gemacht.
Danke Dir
Ich habe dir zu danken für deine Unterstützung.
Vielen dank :)
Wenn Du magst kannst Du das Modul gerne ins fhem Github Repository transferieren.
Gib einfach kurz Bescheid dann schicke ich Dir eine Einladung.
Zitat von: CoolTux am 09 Februar 2020, 19:42:16
Wenn Du magst kannst Du das Modul gerne ins fhem Github Repository transferieren.
Gib einfach kurz Bescheid dann schicke ich Dir eine Einladung.
Ja gern :)
Hast Post
OK hab ich erledigt.
Danke :)