Neues Modul:98_bsms.pm - Modul für Blaulichtsms Dashboard API

Begonnen von crazier96, 07 Februar 2020, 13:52:44

Vorheriges Thema - Nächstes Thema

crazier96

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/
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

CoolTux

#1
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
}
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

crazier96

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

CoolTux

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.
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

crazier96

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

CoolTux

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.
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

crazier96

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. :)

crazier96


CoolTux

Schneller Blick. Sieht gut ist. Haste toll gemacht.
Danke Dir
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

crazier96

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 :)

CoolTux

Wenn Du magst kannst Du das Modul gerne ins fhem Github Repository transferieren.
Gib einfach kurz Bescheid dann schicke ich Dir eine Einladung.
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

crazier96

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 :)

CoolTux

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

crazier96