[gelöst] Mobile Blitzer via HTTPMOD auslesen

Begonnen von t1me2die, 19 März 2018, 09:30:25

Vorheriges Thema - Nächstes Thema

t1me2die

Einen sonnigen guten Morgen,

ich versuche zur Zeit die mobilen Blitzer von der Seite www.verkehrslage.de auszulesen.

Dazu nutze ich den HTTPMOD:

Internals:
BUSY 0
CHANGED
DEF http://www.verkehrslage.de/Hamburg/mobile%20Blitzer 600
DeleteIfUnmatched 1
Interval 600
LASTSEND 1521445461.0572
MainURL http://www.verkehrslage.de/Hamburg/mobile%20Blitzer
ModuleVersion 3.4.2 - 10.2.2018
NAME Blitzer
NR 617
STATE ???
TRIGGERTIME 1521446061.05582
TRIGGERTIME_FMT 2018-03-19 08:54:21
TYPE HTTPMOD
addr https://www.verkehrslage.de:443
auth 0
buf
code 200
compress 1
conn
data
displayurl https://www.verkehrslage.de/Hamburg/mobile%20Blitzer
header
host www.verkehrslage.de
httpheader HTTP/1.1 200 OK
Date: Mon, 19 Mar 2018 07:46:37 GMT
Server: Apache/2.4.10 (Debian)
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 39232
Connection: close
Content-Type: text/html; charset=UTF-8
httpversion 1.0
hu_blocking 0
hu_filecount 196
hu_port 443
hu_portSfx ignoreredirects 0
loglevel 4
path /Hamburg/mobile%20Blitzer
protocol https
redirects 1
timeout 2
url https://www.verkehrslage.de/Hamburg/mobile%20Blitzer
value 0
QUEUE:
READINGS:
2018-03-19 08:44:21 Straßenname-1 August-Krogmann-Straße
2018-03-19 08:44:21 Straßenname-2 Klein Flottbeker Weg
2018-03-19 08:44:21 Straßenname-3 Sülldorfer Brooksweg
2018-03-19 08:44:21 Straßenname-4 Walddörferstraße
2018-03-19 08:44:21 String '[{\"id\":\"742073862\",\"lat\":\"53.614182\",\"lat_s\":\"53.6\",\"lng\":\"10.114728\",\"lng_s\":\"10.1\",\"state\":\"\",\"city\":\"Hamburg\",\"street\":\"August-Krogmann-Stra\\u00dfe\",\"content\":\"3962308760\",\"backend\":\"0-9541199\",\"type\":\"1\",\"vmax\":\"30\",\"counter\":\"0\",\"create_date\":\"2018-03-19 08:31:07\",\"confirm_date\":\"2018-03-19 08:31:07\",\"gps_status\":\"-\",\"info\":{\"count_180d\":null},\"polyline\":\"\"},{\"id\":\"742073756\",\"lat\":\"53.553566\",\"lat_s\":\"53.6\",\"lng\":\"9.877564\",\"lng_s\":\"9.9\",\"state\":\"Hamburg\",\"city\":\"Hamburg\",\"street\":\"Klein Flottbeker Weg\",\"content\":\"3962289839\",\"backend\":\"0-9541120\",\"type\":\"1\",\"vmax\":\"30\",\"counter\":\"2\",\"create_date\":\"2018-03-19 08:21:05\",\"confirm_date\":\"2018-03-19 08:33:51\",\"gps_status\":\"-\",\"info\":{\"count_180d\":\"0\"},\"polyline\":\"\"},{\"id\":\"742073637\",\"lat\":\"53.582275\",\"lat_s\":\"53.6\",\"lng\":\"10.095384\",\"lng_s\":\"10.1\",\"state\":\"Hamburg\",\"city\":\"Hamburg\",\"street\":\"Waldd\\u00f6rferstra\\u00dfe\",\"content\":\"3962262692\",\"backend\":\"0-9541035\",\"type\":\"1\",\"vmax\":\"30\",\"counter\":\"1\",\"create_date\":\"2018-03-19 08:06:39\",\"confirm_date\":\"2018-03-19 08:30:31\",\"gps_status\":\"-\",\"info\":{\"count_180d\":\"3\"},\"polyline\":\"\"},{\"id\":\"742073528\",\"lat\":\"53.576904\",\"lat_s\":\"53.6\",\"lng\":\"9.762631\",\"lng_s\":\"9.8\",\"state\":\"Hamburg\",\"city\":\"Hamburg\",\"street\":\"S\\u00fclldorfer Brooksweg\",\"content\":\"3962228533\",\"backend\":\"0-9540916\",\"type\":\"1\",\"vmax\":\"50\",\"counter\":\"2\",\"create_date\":\"2018-03-19 07:47:41\",\"confirm_date\":\"2018-03-19 08:31:07\",\"gps_status\":\"-\",\"info\":{\"count_180d\":\"1\"},\"polyline\":\"\"}]';
REQUEST:
data
header
ignoreredirects 0
retryCount 0
type update
url http://www.verkehrslage.de/Hamburg/mobile%20Blitzer
value 0
defptr:
readingBase:
Straßenname-1 reading
Straßenname-2 reading
Straßenname-3 reading
Straßenname-4 reading
String reading
readingNum:
Straßenname-1 01
Straßenname-2 01
Straßenname-3 01
Straßenname-4 01
String 02
readingOutdated:
readingSubNum:
Straßenname-1 -1
Straßenname-2 -2
Straßenname-3 -3
Straßenname-4 -4
requestReadings:
update:
Straßenname-1 reading 01-1
Straßenname-2 reading 01-2
Straßenname-3 reading 01-3
Straßenname-4 reading 01-4
String reading 02
sslargs:
Attributes:
DbLogExclude .*
enableControlSet 1
event-on-change-reading Straßenname-1
reading01DeleteIfUnmatched 1
reading01Name Straßenname
reading01RegOpt g
reading01Regex Hamburg, (.*), \(<a href
reading02Name String
reading02Regex <script>\n var json_str =(.*)
room Verkehr
userattr get01CheckAllReadings:0,1 reading01DeleteIfUnmatched reading01Name reading01RegOpt reading01Regex reading02Name reading02Regex
verbose 2


Durch den ersten Regex erhalte ich meine Straßennamen (diese sind Alphabetisch sortiert).

Nun möchte ich auch gerne noch die GPS Koordinaten auslesen.

Dazu habe ich mit folgenden Regex auf regex101.com experimentiert:

lat\\":\\"(.........)|lng\\":\\"(........)


Dieser liefert mir in einzelnen Groups die GPS Koordinaten zurück.
Dummerweise ist in dem JSON String die Reihenfolge der Straßen nicht identisch mit Regex01.
Innerhalb des JSON String befinden sich auch die Straßennamen leider bereiten mir hier die Unicode Sonderzeichen Probleme, weswegen ich die Straßennamen nicht 1:1 miteinander vergleichen kann.

Ich denke, am einfachsten wäre es, den JSON String von Unicode -> UTF-8 umzuformen, danach dann:

lat
lng
street

auszulesen und als Reading darzustellen.

Ich weiß nicht, ob ich auf dem richtigen Weg bin, vielleicht könnt ihr mich ja auf die richtige Bahn bringen.

Gruß
Mathze

@Edit: Habe den String nun via Perl-Code aufbereitet.

Fhemschorsch

Hi,
da Du Deinen Thread schon als "gelöst" gekennzeichnet hast: Hast Du das mit den Koordinaten bereits gelöst und erfolgreich weiterverarbeitet? Ich vermute mal, Du willst Deinen Arbeitsweg o.ä. als Koordinatenrange anlegen und dann Benachrichtigungen aussteuern, sobald ein neuer Blitzer kommt, korrekt?

steffen83

Magst du deine Lösung vielleicht teilen?

Heißt du möchtest einfach nur für deinen Ort immer die mobilen Blitzer angezeigt bekommen richtig?
Raspberry Pi 3 (Noobs, aktuelle Fhem und Pilight) | FHEMduino | HM-OCCU-SDK | HM-Sec-SCo | HM-Sec-SD-2 | HM-CC-RT-DN | HM-LC-Bl1PBU-FM

t1me2die

#3
Moin ihr Zwei,

ich bin von meiner Anfangsidee ein wenig abgewichen.
Früher wollte ich Anhand der GPS Koordinaten den jeweiligen Ort bestimmen, leider habe ich es nicht so recht hinbekommen die GPS Koordinaten in einen Ortsnamen umzuwandeln.

Daher habe ich mir nun eine Routine (oder auch mehrere) in meiner 99_myUtils geschrieben.
Alles läuft via Telegram, sprich ich schreibe nur noch "Blitzer Hamburg", "Blitzer A1", "Blitzer Mecklemburg-Vorpommern", "Blitzer Berlin", ... und erhalte kurz danach eine Nachricht mit allen Blitzern "schön" aufbereitet.

Ich kann zwischen "Festen" und "Mobilen" Blitzern unterscheiden.

Meine beiden Routinen schauen wie folgt aus, diese können nicht 1:1 übernommen werden, es muss noch etwas Feintuning vorgenommen werden, unteranderem fehlt die Rountine getEmoji($), welche ich weiter unten noch anhänge!
Diese Routinen erstellen nur die Devices, wenn man diese auch noch als eine Telegram Nachricht erhalten möchte, muss man weitere Vorkehrungen treffen, siehe weiter unten.

Zwei Screenshots siehe Anhang.


##################################################################################################
# Ermittelt die mobilen / festen Blitzer
##################################################################################################

sub getBlitzer($$)
{
    my ($message,$id) = @_;
    my $space = 0;
    my @array = "";
    my @ort    = "";
    my $ort1   = "";
    my $feste  = 0;
    my $mobile = 0;
   
    $ort[1] = "";
    if ($message eq "Feste Blitzer")
    {
        $feste = 1;
        $ort[0] = "";
        $ort[1] = "";
    }
    elsif ($message eq "Blitzer")
    {
        $mobile = 1;   
        $ort[0] = "";
        $ort[1] = "";
    }
    else
    {
        # Wenn ein Leerzeichen gefunden wurde
        $space = index($message,' ');
        for (my $i = 0; $i < 10; $i++)
        {
            $space = index($message,' ');
            if ($space != -1)
            {
                @array[$i] = substr($message,0,$space);
                $message = substr($message,$space+1);
            }
            else
            {
                @array[$i] = substr($message,0);
                last;
            }
        }   
        foreach(@array)
        {
            if ($_ =~ /Feste/g)
            { $feste = 1; }
            elsif ($_ =~ /Blitzer/g)
            { $mobile = 1; }
            else
            {
                if ($ort[0] eq "")
                { $ort[0] = $_; }
                else
                { $ort[1] = $_; }
            }
       
        }
    }
   
    if ($ort[1] ne "")
    {   $ort1 = $ort[0] ."_" .$ort[1]; }   
    elsif ($ort[1] eq "")
    {   $ort1 = $ort[0]; }   
   
    # Prüfe, ob das Objekt für den Blitzer existiert
    my ($error,$device) = checkHTTPMODBlitzer($feste,$mobile,$ort1);
   
    # Wenn kein Fehler vorhanden ist Daten auslesen
    if ($error != -1)
    {
        if ($error == 0)
        { return getInfoBlitzer($device); }
        elsif ($error == 1)
        {
            fhem "define temp_Blitzer at +00:00:07 { fhem \"set Telegram message \\\@$id \" .getInfoBlitzer(\"$device\") }";
            return "" .getEmoji(55) ."Sekunde, ich sammle alle Informationen!";
        }
    }
    # Device konnte nicht angelegt werden
    elsif($error == -1)
    {
        return "Gereat konnte nicht angelegt werden";
    }
   
}

##################################################################################################
# Errormeldungen:
# -1 = Device konnte nicht angelegt werden
#  0 = Device ist schon vorhanden
#  1 = Device wurde erfolgreich angelegt
##################################################################################################
sub checkHTTPMODBlitzer($$$)
{
    my($feste,$mobile,$ort) = @_;
    my $error = "";
    my $device = "";
    my $link = "";
   
    # Feste Blitzer + Ortsname
    if ($feste == 1 and $mobile == 1 and $ort ne "")
    {
        $device = "fb_" .$ort;
        $link = "https://www.verkehrslage.de/".$ort."/feste+Blitzer";
    }
    # mobile Blitzer + Ortsname
    elsif ($feste == 0 and $mobile == 1 and $ort ne "")
    {
        $device = "mb_" .$ort;
        $link = "https://www.verkehrslage.de/".$ort."/mobile+Blitzer";       
    }
    # Feste Blitzer ohne Ortsname -> Hamburg
    elsif ($feste == 1 and $mobile == 0 and $ort eq "")
    {
        $device = "fb_Hamburg";
        $ort    = "Hamburg";
        $link = "https://www.verkehrslage.de/Hamburg/feste+Blitzer";       
    }
    # mobile Blitzer ohne Ortsname -> Hamburg
    elsif ($feste == 0 and $mobile == 1 and $ort eq "")
    {
        $device = "mb_Hamburg"; 
        $link = "https://www.verkehrslage.de/Hamburg/mobile+Blitzer";
    }
   
    # Device ist noch nicht angelegt
    $device =~ s/-/_/g;
    if (Value("$device") eq "")
    {
        if(substr($device,0,3) eq "mb_")
        {
            fhem "  define $device HTTPMOD $link 600 ;
                    attr $device room Verkehr ;
                    attr $device enableControlSet 1 ;
                    attr $device reading01Name String ;
                    attr $device reading01Regex <script>\\n  var json_str = (.*) ;
                    attr $device reading01RegOpt g ;
                    attr $device reading01DeleteIfUnmatched 1 ;
                    attr $device reading02Name Strassenname ;
                    attr $device reading02Regex $ort, (.*), \\(<a href ;
                    attr $device reading02RegOpt g  ;
                    attr $device reading02DeleteIfUnmatched 1 ;
                    define t_delete_Blitzer_$device at +01:00:00 { fhem \"delete $device\" }
                    ";   
        }
        elsif(substr($device,0,3) eq "fb_")
        {
            $ort =~ s/_/+/g;
            fhem "  define $device HTTPMOD $link 600 ;
                    attr $device room Verkehr ;
                    attr $device enableControlSet 1 ;
                    attr $device reading01Name Strassenname ;
                    attr $device reading01Regex $ort, (.*), \\(<a href ;
                    attr $device reading01RegOpt g ;
                    attr $device reading01DeleteIfUnmatched 1 ;
                    define t_delete_Blitzer_$device at +01:00:00 { fhem \"delete $device\" }
                    "; 
        }
        if (Value("$device") eq "")
        { $error = -1;
          return ($error, "");
        }
        else
        { $error = 1;
          return ($error, $device);
        }   
    }
    # Device ist schon vorhanden
    else
    {
        $error = 0;
        return ($error, $device);
    }   
   
}


Wie man sehen kann arbeite ich mit HTTPMOD und lege die Devices in dem Raum "Verkehr" an, damit der Raum nicht unnötig zugemüllt wird, werden diese Devices 1h nach Erstellung auch wieder gelöscht, möchte ungern dutzende Devices haben, die alle 10Minuten die Daten abfragen (dies kann man nach seinen Wünschen überarbeiten!).


Wenn man nun die Informationen aus den Devices noch auslesen möchte, habe ich mir dazu eine weitere Routine gebaut:


# ------------------------------------------------------------------------ #
# Ermittelt die aktuellen Blitzer in Hamburg                               #
# ------------------------------------------------------------------------ #

sub getInfoBlitzer($)
{
    my ($device) = @_;
    my $reading;
    my @Blitzer;
    my $pfad;
    my $error = 0;
    my $strasse = "";
    my $txt ="";
    my $vmax = 0;
    my $kmh  = "";
    my $space = 0;
    my $len = "";
    my $str1 = (ReadingsVal("$device","String",""));
   
    if(substr($device,0,3) eq "mb_")
    {
        for (my $i = 0; $i <=15 ; $i++)
        {
            my $l_str = index($str1,'street');
            my $r_str = index($str1,'content');
            my $l_lat = index($str1,'lat');
            my $r_lat = index($str1,'lat_s');
            my $l_lng = index($str1,'lng');
            my $r_lng = index($str1,'lng_s'); 
            my $l_vmax  = index($str1,'vmax');
            my $r_vmax  = index($str1,'counter');
            my $l_id  = index($str1,'{"id"');
            my $r_id  = rindex($str1,'{"id"');
           
            if ($l_str eq "-1")
                { $error = "1"; }
            else
                { $error = "0";  }
            if ($error eq "0")
            {
                my $abc = substr($str1,$l_str+11,$r_str-$l_str-16);
                $abc =~ s/\\\\u00df/ß/g;
                $abc =~ s/\\\\u00e4/ä/g;
                $abc =~ s/\\\\u00f6/ö/g;
                $abc =~ s/\\\\u00fc/ü/g;
                $abc =~ s/\\\\u00dc/Ü/g;
                $abc =~ s/\\\\u00d6/Ö/g;
                #$vmax = substr($str1,$l_vmax+9,2);
                $vmax = substr($str1,$l_vmax+9,$r_vmax-$l_vmax-14);
                $len  = length($vmax);
                if ($len == 2)
                {
                    if ($vmax =~ /^\d\d$/)
                    { $kmh = $vmax ."km/h"; }
                    else
                    { $kmh = "Rotlichtüberwachung"; }
                }
                elsif ($len == 3)
                {
                    if ($vmax =~ /^\d\d\d$/)
                    { $kmh = $vmax ."km/h"; }               
                }
                if ($abc !~ /Oldesloer Straße/i)
                {
                    if ($strasse eq "")
                    { $strasse = "\n " .getEmoji(40) ." $abc ($kmh) " .getEmoji(8) ." \ngoogle.de/maps/place/" .substr($str1,$l_lat+8,$r_lat-$l_lat-13) ."+" .substr($str1,$l_lng+8,$r_lng-$l_lng-13) ." " .getEmoji(41);
                    }
                    else
                    { $strasse =  "$strasse\n " .getEmoji(40) ." $abc ($kmh) " .getEmoji(8) ." \ngoogle.de/maps/place/" .substr($str1,$l_lat+8,$r_lat-$l_lat-13) ."+" .substr($str1,$l_lng+8,$r_lng-$l_lng-13) ." " .getEmoji(41);
                    }
                    $str1 = substr($str1,$r_str+90);
                }
            }
        }   
        if ($strasse eq "")
        {
            $txt = "Es sind keine mobile Blitzer gemeldet, gib GUMMI " .getEmoji(10) ." " .getEmoji(4);
        }
        else
        {
            $txt = getEmoji(13) ." " .getEmoji(53) . " " .getEmoji(13) ." Fahr vorsichtig, zur Zeit sind folgende mobile Blitzer aktiv: " .$strasse;   
        }
    }
    elsif(substr($device,0,3) eq "fb_")
    {
        for (my $i = 0; $i <=50 ; $i++)
        {
            if ($i == 0)
            { $reading = "Strassenname"; }
            else
            { $reading = "Strassenname-" .$i; }
       
            if (ReadingsVal("$device",$reading,"") ne "")
            {
                $Blitzer[$i] = (ReadingsVal("$device",$reading,""));
            }
        }
        foreach(@Blitzer)
        {
            if ($strasse eq "")
            { $strasse = $_; }
            else
            { $strasse =  "$strasse" ."\n* " .$_; }
        }
   
        if ($strasse eq "")
        {   
            $txt = "Es sind keine festen Blitzer gemeldet, gib GUMMI :D";
        }
        else
        {
            $txt = "Fahr vorsichtig, zur Zeit sind folgende feste Blitzer aktiv: \n* " .$strasse;   
        }   
    }   
       
    return $txt;
   
}


In $txt findet sich dann zum Schluss der aufbereitete String, welchen ich via Telegram versende.


Hier ist die getEmoji Routine, welche mir lediglich die gewünschten Smileys liefert, diese Routine hat keinerlei Einfluss auf die Ermittlung der Blitzer!


# ------------------------------------------------------------------------ #
# Ermittel den jeweiligen Emoji                                            #
# ------------------------------------------------------------------------ #

sub getEmoji($)
{
    my ($emoji) = @_;
    my $emojibyte = "";
   
    if ($emoji == 1)
    {     
        $emojibyte = "\xF0\x9F\x98\x81"; #GRINNING FACE WITH SMILING EYES
        return $emojibyte;
    }
    elsif ($emoji == 2)
    {     
        $emojibyte = "\xF0\x9F\x98\x8B"; #FACE SAVOURING DELICIOUS FOOD
        return $emojibyte;
    }
    elsif ($emoji == 3)
    {     
        $emojibyte = "\xF0\x9F\x98\x8D"; #SMILING FACE WITH HEART-SHAPED EYES
        return $emojibyte;
    }
    elsif ($emoji == 4)
    {     
        $emojibyte = "\xF0\x9F\x99\x88"; #SEE-NO-EVIL MONKEY
        return $emojibyte;
    }
    elsif ($emoji == 5)
    {     
        $emojibyte = "\xF0\x9F\x99\x89"; #HEAR-NO-EVIL MONKEY
        return $emojibyte;
    }
    elsif ($emoji == 6)
    {     
        $emojibyte = "\xF0\x9F\x99\x8A"; #SPEAK-NO-EVIL MONKEY
        return $emojibyte;
    }
    elsif ($emoji == 7)
    {     
        $emojibyte = "\xF0\x9F\x99\x8B"; #HAPPY PERSON RAISING ONE HAND
        return $emojibyte;
    }
    elsif ($emoji == 8)
    {     
        $emojibyte = "\xF0\x9F\x9A\x93"; #POLICE CAR
        return $emojibyte;
    }
    elsif ($emoji == 9)
    {     
        $emojibyte = "\xF0\x9F\x9A\x97"; #AUTOMOBILE(RED)
        return $emojibyte;
    }
    elsif ($emoji == 10)
    {     
        $emojibyte = "\xF0\x9F\x9A\x99"; #AUTOMOBILE(BLUE)
        return $emojibyte;
    }
    elsif ($emoji == 11)
    {     
        $emojibyte = "\xF0\x9F\x9A\xA5"; #HORIZONTAL TRAFFIC LIGHT
        return $emojibyte;
    }
    elsif ($emoji == 12)
    {     
        $emojibyte = "\xF0\x9F\x9A\xA7"; #CONSTRUCTION SIGN
        return $emojibyte;
    }
    elsif ($emoji == 13)
    {     
        $emojibyte = "\xF0\x9F\x9A\xA8"; #POLICE CARS REVOLVING LIGHT
        return $emojibyte;
    }
    elsif ($emoji == 14)
    {     
        $emojibyte = "\xF0\x9F\x9A\xA9"; #TRIANGULAR FLAG ON POST
        return $emojibyte;
    }
    elsif ($emoji == 15)
    {     
        $emojibyte = "\xF0\x9F\x9A\xB6"; #PEDESTRIAN
        return $emojibyte;
    }
    elsif ($emoji == 16)
    {     
        $emojibyte = "\x30\xE2\x83\xA3"; #Zahl 0
        return $emojibyte;
    }
    elsif ($emoji == 17)
    {     
        $emojibyte = "\x31\xE2\x83\xA3"; #Zahl 1
        return $emojibyte;
    }
    elsif ($emoji == 18)
    {     
        $emojibyte = "\x32\xE2\x83\xA3"; #Zahl 2
        return $emojibyte;
    }
    elsif ($emoji == 19)
    {     
        $emojibyte = "\x33\xE2\x83\xA3"; #Zahl 3
        return $emojibyte;
    }
    elsif ($emoji == 20)
    {     
        $emojibyte = "\x34\xE2\x83\xA3"; #Zahl 4
        return $emojibyte;
    }
    elsif ($emoji == 21)
    {     
        $emojibyte = "\x35\xE2\x83\xA3"; #Zahl 5
        return $emojibyte;
    }
    elsif ($emoji == 22)
    {     
        $emojibyte = "\x36\xE2\x83\xA3"; #Zahl 6
        return $emojibyte;
    }
    elsif ($emoji == 23)
    {     
        $emojibyte = "\x37\xE2\x83\xA3"; #Zahl 7
        return $emojibyte;
    }
    elsif ($emoji == 24)
    {     
        $emojibyte = "\x38\xE2\x83\xA3"; #Zahl 8
        return $emojibyte;
    }
    elsif ($emoji == 25)
    {     
        $emojibyte = "\x39\xE2\x83\xA3"; #Zahl 9
        return $emojibyte;
    }
    elsif ($emoji == 26)
    {     
        $emojibyte = "\xF0\x9F\x94\x9F"; #Zahl 10
        return $emojibyte;
    }
    elsif ($emoji == 27)
    {     
        $emojibyte = "\xF0\x9F\x8F\xA0"; #Haus
        return $emojibyte;
    }
    elsif ($emoji == 28)
    {     
        $emojibyte = "\xF0\x9F\x8F\xA1"; #Haus mit Garten
        return $emojibyte;
    }
    elsif ($emoji == 29)
    {     
        $emojibyte = "\xF0\x9F\x90\x94"; #Hahn
        return $emojibyte;
    }
    elsif ($emoji == 30)
    {     
        $emojibyte = "\xF0\x9F\x90\x98"; #Elefant
        return $emojibyte;
    }
    elsif ($emoji == 31)
    {     
        $emojibyte = "\xF0\x9F\x90\xA2"; #Schildkröte
        return $emojibyte;
    }
    elsif ($emoji == 32)
    {     
        $emojibyte = "\xF0\x9F\x90\xAC"; #Delphin
        return $emojibyte;
    }
    elsif ($emoji == 33)
    {     
        $emojibyte = "\xF0\x9F\x90\xB3"; #Wal
        return $emojibyte;
    }
    elsif ($emoji == 34)
    {     
        $emojibyte = "\xF0\x9F\x90\xBB"; #Teddy
        return $emojibyte;
    }
    elsif ($emoji == 35)
    {     
        $emojibyte = "\xF0\x9F\x91\x89"; #Finger zeigt nach rechts
        return $emojibyte;
    }
    elsif ($emoji == 36)
    {     
        $emojibyte = "\xF0\x9F\x91\x8D"; #Daumen hoch
        return $emojibyte;
    }
    elsif ($emoji == 37)
    {     
        $emojibyte = "\xF0\x9F\x91\x8E"; #Daumen runter
        return $emojibyte;
    }
    elsif ($emoji == 38)
    {     
        $emojibyte = "\xF0\x9F\x92\xA9"; #Kackhaufen
        return $emojibyte;
    }
    elsif ($emoji == 39)
    {     
        $emojibyte = "\xF0\x9F\x93\x85"; #Kalender
        return $emojibyte;
    }
    elsif ($emoji == 40)
    {     
        $emojibyte = "\xF0\x9F\x93\x8C"; #Pin
        return $emojibyte;
    }
    elsif ($emoji == 41)
    {     
        $emojibyte = "\xF0\x9F\x93\x8D"; #ROUND PUSHPIN
        return $emojibyte;
    }
    elsif ($emoji == 42)
    {     
        $emojibyte = "\xE2\x9B\xBD"; #Zapfsäule
        return $emojibyte;
    }
    elsif ($emoji == 43)
    {     
        $emojibyte = "\xF0\x9F\x9A\xA6"; #Ampel
        return $emojibyte;
    }
    elsif ($emoji == 44)
    {     
        $emojibyte = "\xF0\x9F\x90\x8F"; #Schaf
        return $emojibyte;
    }
    elsif ($emoji == 45)
    {     
        $emojibyte = "\xF0\x9F\x98\x9A"; #KISSING FACE WITH CLOSED EYES
        return $emojibyte;
    }
    elsif ($emoji == 46)
    {     
        $emojibyte = "\xF0\x9F\x98\x98"; #FACE THROWING A KISS
        return $emojibyte;
    }
    elsif ($emoji == 47)
    {     
        $emojibyte = "\xF0\x9F\x98\xB3"; #Große Augen
        return $emojibyte;
    }
    elsif ($emoji == 48)
    {     
        $emojibyte = "\xE2\x9C\x88"; #Flugzeug
        return $emojibyte;
    }
    elsif ($emoji == 49)
    {     
        $emojibyte = "\xE2\x9C\x94"; #HEAVY CHECK MARK
        return $emojibyte;
    }
    elsif ($emoji == 50)
    {     
        $emojibyte = "\xE2\x9C\x96"; #HEAVY MULTIPLICATION X
        return $emojibyte;
    }
    elsif ($emoji == 51)
    {     
        $emojibyte = "\xF0\x9F\x9A\xAA"; #Tür
        return $emojibyte;
    }
    elsif ($emoji == 52)
    {     
        $emojibyte = "\xF0\x9F\x92\xA1"; #Lampe
        return $emojibyte;
    }   
    elsif ($emoji == 53)
    {     
        $emojibyte = "\xE2\x9A\xA0"; #Achtung
        return $emojibyte;
    }   
    elsif ($emoji == 54)
    {     
        $emojibyte = "\xE2\x98\x9D"; #Zeigefinger
        return $emojibyte;
    }   
    elsif ($emoji == 55)
    {     
        $emojibyte = "\xE2\x8F\xB3"; #Sanduhr
        return $emojibyte;
    }       
    elsif ($emoji == 56)
    {     
        $emojibyte = "\xE2\x9D\x93"; #rotes Fragezeichen
        return $emojibyte;
    }           
    elsif ($emoji == 57)
    {     
        $emojibyte = "\xE2\x9E\xA1"; #Pfeilzeichen nach rechts
        return $emojibyte;
    }     
    elsif ($emoji == 58)
    {     
        $emojibyte = "\xF0\x9F\x8D\xB9"; #Cocktail
        return $emojibyte;
    }   
    elsif ($emoji == 59)
    {     
        $emojibyte = "\xF0\x9F\x8C\xB4"; #Palme
        return $emojibyte;
    }       
    elsif ($emoji == 60)
    {     
        $emojibyte = "\xF0\x9F\x90\xA0"; #tropischer Fisch
        return $emojibyte;
    }       
    elsif ($emoji == 61)
    {     
        $emojibyte = "\xF0\x9F\x8F\x84"; #Surfer
        return $emojibyte;
    }       
}


Die Routinen habe ich natürlich sehr auf meine Bedürfnisse angepasst, via Copy & Paste kann man diese nicht einfach so übernehmen.
Ihr könnt Euch das ja einfach mal so anschauen, falls ihr Fragen habt, kann ich gerne genauer darauf eingehen.

Gruß
Mathze

steffen83

Klingt echt super. Ich hätte mir das so vorgestellt:
Ich verlasse das Haus und in dem Moment bekomme ich die Push Meldung dass in meiner Stadt folgende mobile Blitzer vorhanden sind....
Raspberry Pi 3 (Noobs, aktuelle Fhem und Pilight) | FHEMduino | HM-OCCU-SDK | HM-Sec-SCo | HM-Sec-SD-2 | HM-CC-RT-DN | HM-LC-Bl1PBU-FM

accessburn

Das als Modul wäre der Hammer :-)
Würde ich auch so einbauen, hab nur keine Ahnung davon  ;D
Wezzy Rpi2b> FHEM, Elro, Intenso, FTUI, Jeelink v3, Max!Cube, Fire5, Foscam, NAS, Fritz!Box + Fon, Max!Wandthermostat, Amazon Echo
Wezzy Rp3b> OctoPi
Jessie Rp3b> UPNP, NAS, Pi-Hole

t1me2die

#6
Zitat von: steffen83 am 06 Juni 2018, 14:38:17
Klingt echt super. Ich hätte mir das so vorgestellt:
Ich verlasse das Haus und in dem Moment bekomme ich die Push Meldung dass in meiner Stadt folgende mobile Blitzer vorhanden sind....

Genau so mache ich es aus. Wenn ich das Haus verlasse, bekomme ich direkt eine Nachricht, wo die Blitzer stehen  ;)

Anscheinend ist ja etwas Interesse da, ob dies für ein Modul reicht, wage ich zu bezweifeln.

Ihr könnt den Code ja mal in eure 99_myUtils knallen und dann schauen wir mal, wo Fehler vorhanden sind.

Eigentlich braucht ihr nur Telegram einrichten, einen notify der eingehende Nachrichten überwacht (optional, falls man Nachrichten an Telegram schicken möchte!).

Zuerst sollte der define für Telegram vorhanden sein (bzw. eingerichtet sein laut Wiki)

define Telegram TelegramBot


Der notify könnte ungefähr so ausschauen:

define getMessageTelegram notify Telegram:msgId:.* { checkMessage() }


Nun braucht ihr nur noch eine Routine, welches die eingehenden Nachrichten prüft (Achtung, habe diese Routine kurz gekürzt und nicht getestet, da meine Routine deutlich mehr Nachrichten prüfen kann!)

# -- Prüft die eingehende Nachricht
sub checkMessage()
{
my $id = ReadingsVal("Telegram","msgPeerId","");
my $alias = ReadingsVal("Telegram","msgPeer","");
my $message = ReadingsVal("Telegram","msgText","");

        if (($message =~ /Blitzer/g) and ($message ne "Hilfe Blitzer"))
        {
            fhem "set Telegram message \@$id " .getBlitzer($message,$id);
        }
        elsif ($message eq "Hilfe Blitzer")
        {
            fhem "set Telegram message \@$id "  .getEmoji(56) ." Blitzer-Hilfe:\n\n"
                                                .getEmoji(57) ." [Blitzer/Feste Blitzer] [Stadt/Bundesland]\n\n"
                                                .getEmoji(57) ." Es ist möglich als optionale Angabe auch eine Stadt oder Bundesland anzugeben.\n\n"
                                                .getEmoji(57) ." Beispiel: Blitzer Parchim \n (Zeigt alle mobilen Blitzer von Parchim an!)\n\n"
                                                .getEmoji(57) ." Beispiel: Feste Blitzer Parchim \n (Zeigt alle festen Blitzer von Parchim an!)\n\n"
                                                .getEmoji(57) ." Beispiel: Bad Segeberg Blitzer \n (Zeigt alle mobilen Blitzer von Bad Segeberg an!)\n\n"
                                                .getEmoji(57) ." Beispiel: Bad Segeberg Feste Blitzer \n (Zeigt alle festen Blitzer von Bad Segeberg an!)";           
        }
}


Nun sollte es möglich sein, die Blitzer abzufragen.

Am besten "Hilfe Blitzer" via Telegram senden und dann erscheint eine "kleine" Hilfe.

Falls ihr soweit gekommen seid, schauen wir mal weiter  :)

Gruß
Mathze

PS.: Falls hier unerwarteterweise doch mehr Interesse aufkommen sollte, muss ein Mod wohl den Thread verschieben.

accessburn

Geht einwandfrei! :D

Aaaaaber... Ort neben Frankfurt: Bad Homburg von der Höhe. Er macht Ärger, wahrscheinlich das ö.
Kann ich da was machen?
Wezzy Rpi2b> FHEM, Elro, Intenso, FTUI, Jeelink v3, Max!Cube, Fire5, Foscam, NAS, Fritz!Box + Fon, Max!Wandthermostat, Amazon Echo
Wezzy Rp3b> OctoPi
Jessie Rp3b> UPNP, NAS, Pi-Hole

Brice

FHEM auf RPi 4 4GB (Buster) | produktiv) CUL 868 für FS20 | S300TH | KS300 | Max!Cube als CUN 868 für TechemWZ | HM-MOD-RPI-PCB für HM | Z-Wave ZME_UZB1 | FRITZ!DECT 200 | HUE | Lightify | Echo Dot | WS3080

Fhemschorsch

Vielen Dank, das ist ja echt der Hammer!

Ich bin leider nicht so der oberbegnadete Programmierer, aber ich werde mir mal anschauen, ob man irgendwie einen Koordinatenkorridor (z.B. Weg zur Arbeit) vorgeben kann, in dem er die mobilen Blitzer rückmeldet. Bei mir ist es leider Bundeslandübergreifend (Schleswig-Holstein nach Hamburg-Nord), da interessiert mich der mobile Blitzer in Süd- oder Osthamburg auch nicht mehr wirklich.

t1me2die

#10
An so einen Ortsnamen habe ich natürlich nicht gedacht...
Hab kurz mal nen update gemacht und nur grob getestet.

Für Alle, die gerade neu dazukommen und Interesse haben dies auch mal auszuprobieren:

1. Telegram laut Wiki einrichten

define Telegram TelegramBot


2. Einen notify / doif (wie ihr mögt) anlegen der auf eingehende Nachrichten reagiert

define getMessageTelegram notify Telegram:msgId:.* { checkMessage() }


3. In der 99_myUtils nun die Routine einfügen, die durch das notify aufgerufen wird (diese könnte wie folgt ausschauen!)
Optional ist hier der Aufruf der Emoji's, welche man selber anpassen könnte. Wenn man den Aufruf der Emoji's raus nimmt, kann man Step 4 überspringen, ansonsten benötigt man Step 4, damit es keinen Compile-Fehler gibt.

# -- Prüft die eingehende Nachricht
sub checkMessage()
{
my $id = ReadingsVal("Telegram","msgPeerId","");
my $alias = ReadingsVal("Telegram","msgPeer","");
my $message = ReadingsVal("Telegram","msgText","");

        if (($message =~ /Blitzer/g) and ($message ne "Hilfe Blitzer"))
        {
            fhem "set Telegram message \@$id " .getBlitzer($message,$id);
        }
        elsif ($message eq "Hilfe Blitzer")
        {
            fhem "set Telegram message \@$id "  .getEmoji(56) ." Blitzer-Hilfe:\n\n"
                                                .getEmoji(57) ." [Blitzer/Feste Blitzer] [Stadt/Bundesland]\n\n"
                                                .getEmoji(57) ." Es ist möglich als optionale Angabe auch eine Stadt oder Bundesland anzugeben.\n\n"
                                                .getEmoji(57) ." Beispiel: Blitzer Parchim \n (Zeigt alle mobilen Blitzer von Parchim an!)\n\n"
                                                .getEmoji(57) ." Beispiel: Feste Blitzer Parchim \n (Zeigt alle festen Blitzer von Parchim an!)\n\n"
                                                .getEmoji(57) ." Beispiel: Bad Segeberg Blitzer \n (Zeigt alle mobilen Blitzer von Bad Segeberg an!)\n\n"
                                                .getEmoji(57) ." Beispiel: Bad Segeberg Feste Blitzer \n (Zeigt alle festen Blitzer von Bad Segeberg an!)";           
        }
}


4. Optional ist hier die Routine für die Emoji's

# ------------------------------------------------------------------------ #
# Ermittel den jeweiligen Emoji                                            #
# ------------------------------------------------------------------------ #

sub getEmoji($)
{
    my ($emoji) = @_;
    my $emojibyte = "";
   
    if ($emoji == 1)
    {     
        $emojibyte = "\xF0\x9F\x98\x81"; #GRINNING FACE WITH SMILING EYES
        return $emojibyte;
    }
    elsif ($emoji == 2)
    {     
        $emojibyte = "\xF0\x9F\x98\x8B"; #FACE SAVOURING DELICIOUS FOOD
        return $emojibyte;
    }
    elsif ($emoji == 3)
    {     
        $emojibyte = "\xF0\x9F\x98\x8D"; #SMILING FACE WITH HEART-SHAPED EYES
        return $emojibyte;
    }
    elsif ($emoji == 4)
    {     
        $emojibyte = "\xF0\x9F\x99\x88"; #SEE-NO-EVIL MONKEY
        return $emojibyte;
    }
    elsif ($emoji == 5)
    {     
        $emojibyte = "\xF0\x9F\x99\x89"; #HEAR-NO-EVIL MONKEY
        return $emojibyte;
    }
    elsif ($emoji == 6)
    {     
        $emojibyte = "\xF0\x9F\x99\x8A"; #SPEAK-NO-EVIL MONKEY
        return $emojibyte;
    }
    elsif ($emoji == 7)
    {     
        $emojibyte = "\xF0\x9F\x99\x8B"; #HAPPY PERSON RAISING ONE HAND
        return $emojibyte;
    }
    elsif ($emoji == 8)
    {     
        $emojibyte = "\xF0\x9F\x9A\x93"; #POLICE CAR
        return $emojibyte;
    }
    elsif ($emoji == 9)
    {     
        $emojibyte = "\xF0\x9F\x9A\x97"; #AUTOMOBILE(RED)
        return $emojibyte;
    }
    elsif ($emoji == 10)
    {     
        $emojibyte = "\xF0\x9F\x9A\x99"; #AUTOMOBILE(BLUE)
        return $emojibyte;
    }
    elsif ($emoji == 11)
    {     
        $emojibyte = "\xF0\x9F\x9A\xA5"; #HORIZONTAL TRAFFIC LIGHT
        return $emojibyte;
    }
    elsif ($emoji == 12)
    {     
        $emojibyte = "\xF0\x9F\x9A\xA7"; #CONSTRUCTION SIGN
        return $emojibyte;
    }
    elsif ($emoji == 13)
    {     
        $emojibyte = "\xF0\x9F\x9A\xA8"; #POLICE CARS REVOLVING LIGHT
        return $emojibyte;
    }
    elsif ($emoji == 14)
    {     
        $emojibyte = "\xF0\x9F\x9A\xA9"; #TRIANGULAR FLAG ON POST
        return $emojibyte;
    }
    elsif ($emoji == 15)
    {     
        $emojibyte = "\xF0\x9F\x9A\xB6"; #PEDESTRIAN
        return $emojibyte;
    }
    elsif ($emoji == 16)
    {     
        $emojibyte = "\x30\xE2\x83\xA3"; #Zahl 0
        return $emojibyte;
    }
    elsif ($emoji == 17)
    {     
        $emojibyte = "\x31\xE2\x83\xA3"; #Zahl 1
        return $emojibyte;
    }
    elsif ($emoji == 18)
    {     
        $emojibyte = "\x32\xE2\x83\xA3"; #Zahl 2
        return $emojibyte;
    }
    elsif ($emoji == 19)
    {     
        $emojibyte = "\x33\xE2\x83\xA3"; #Zahl 3
        return $emojibyte;
    }
    elsif ($emoji == 20)
    {     
        $emojibyte = "\x34\xE2\x83\xA3"; #Zahl 4
        return $emojibyte;
    }
    elsif ($emoji == 21)
    {     
        $emojibyte = "\x35\xE2\x83\xA3"; #Zahl 5
        return $emojibyte;
    }
    elsif ($emoji == 22)
    {     
        $emojibyte = "\x36\xE2\x83\xA3"; #Zahl 6
        return $emojibyte;
    }
    elsif ($emoji == 23)
    {     
        $emojibyte = "\x37\xE2\x83\xA3"; #Zahl 7
        return $emojibyte;
    }
    elsif ($emoji == 24)
    {     
        $emojibyte = "\x38\xE2\x83\xA3"; #Zahl 8
        return $emojibyte;
    }
    elsif ($emoji == 25)
    {     
        $emojibyte = "\x39\xE2\x83\xA3"; #Zahl 9
        return $emojibyte;
    }
    elsif ($emoji == 26)
    {     
        $emojibyte = "\xF0\x9F\x94\x9F"; #Zahl 10
        return $emojibyte;
    }
    elsif ($emoji == 27)
    {     
        $emojibyte = "\xF0\x9F\x8F\xA0"; #Haus
        return $emojibyte;
    }
    elsif ($emoji == 28)
    {     
        $emojibyte = "\xF0\x9F\x8F\xA1"; #Haus mit Garten
        return $emojibyte;
    }
    elsif ($emoji == 29)
    {     
        $emojibyte = "\xF0\x9F\x90\x94"; #Hahn
        return $emojibyte;
    }
    elsif ($emoji == 30)
    {     
        $emojibyte = "\xF0\x9F\x90\x98"; #Elefant
        return $emojibyte;
    }
    elsif ($emoji == 31)
    {     
        $emojibyte = "\xF0\x9F\x90\xA2"; #Schildkröte
        return $emojibyte;
    }
    elsif ($emoji == 32)
    {     
        $emojibyte = "\xF0\x9F\x90\xAC"; #Delphin
        return $emojibyte;
    }
    elsif ($emoji == 33)
    {     
        $emojibyte = "\xF0\x9F\x90\xB3"; #Wal
        return $emojibyte;
    }
    elsif ($emoji == 34)
    {     
        $emojibyte = "\xF0\x9F\x90\xBB"; #Teddy
        return $emojibyte;
    }
    elsif ($emoji == 35)
    {     
        $emojibyte = "\xF0\x9F\x91\x89"; #Finger zeigt nach rechts
        return $emojibyte;
    }
    elsif ($emoji == 36)
    {     
        $emojibyte = "\xF0\x9F\x91\x8D"; #Daumen hoch
        return $emojibyte;
    }
    elsif ($emoji == 37)
    {     
        $emojibyte = "\xF0\x9F\x91\x8E"; #Daumen runter
        return $emojibyte;
    }
    elsif ($emoji == 38)
    {     
        $emojibyte = "\xF0\x9F\x92\xA9"; #Kackhaufen
        return $emojibyte;
    }
    elsif ($emoji == 39)
    {     
        $emojibyte = "\xF0\x9F\x93\x85"; #Kalender
        return $emojibyte;
    }
    elsif ($emoji == 40)
    {     
        $emojibyte = "\xF0\x9F\x93\x8C"; #Pin
        return $emojibyte;
    }
    elsif ($emoji == 41)
    {     
        $emojibyte = "\xF0\x9F\x93\x8D"; #ROUND PUSHPIN
        return $emojibyte;
    }
    elsif ($emoji == 42)
    {     
        $emojibyte = "\xE2\x9B\xBD"; #Zapfsäule
        return $emojibyte;
    }
    elsif ($emoji == 43)
    {     
        $emojibyte = "\xF0\x9F\x9A\xA6"; #Ampel
        return $emojibyte;
    }
    elsif ($emoji == 44)
    {     
        $emojibyte = "\xF0\x9F\x90\x8F"; #Schaf
        return $emojibyte;
    }
    elsif ($emoji == 45)
    {     
        $emojibyte = "\xF0\x9F\x98\x9A"; #KISSING FACE WITH CLOSED EYES
        return $emojibyte;
    }
    elsif ($emoji == 46)
    {     
        $emojibyte = "\xF0\x9F\x98\x98"; #FACE THROWING A KISS
        return $emojibyte;
    }
    elsif ($emoji == 47)
    {     
        $emojibyte = "\xF0\x9F\x98\xB3"; #Große Augen
        return $emojibyte;
    }
    elsif ($emoji == 48)
    {     
        $emojibyte = "\xE2\x9C\x88"; #Flugzeug
        return $emojibyte;
    }
    elsif ($emoji == 49)
    {     
        $emojibyte = "\xE2\x9C\x94"; #HEAVY CHECK MARK
        return $emojibyte;
    }
    elsif ($emoji == 50)
    {     
        $emojibyte = "\xE2\x9C\x96"; #HEAVY MULTIPLICATION X
        return $emojibyte;
    }
    elsif ($emoji == 51)
    {     
        $emojibyte = "\xF0\x9F\x9A\xAA"; #Tür
        return $emojibyte;
    }
    elsif ($emoji == 52)
    {     
        $emojibyte = "\xF0\x9F\x92\xA1"; #Lampe
        return $emojibyte;
    }   
    elsif ($emoji == 53)
    {     
        $emojibyte = "\xE2\x9A\xA0"; #Achtung
        return $emojibyte;
    }   
    elsif ($emoji == 54)
    {     
        $emojibyte = "\xE2\x98\x9D"; #Zeigefinger
        return $emojibyte;
    }   
    elsif ($emoji == 55)
    {     
        $emojibyte = "\xE2\x8F\xB3"; #Sanduhr
        return $emojibyte;
    }       
    elsif ($emoji == 56)
    {     
        $emojibyte = "\xE2\x9D\x93"; #rotes Fragezeichen
        return $emojibyte;
    }           
    elsif ($emoji == 57)
    {     
        $emojibyte = "\xE2\x9E\xA1"; #Pfeilzeichen nach rechts
        return $emojibyte;
    }     
    elsif ($emoji == 58)
    {     
        $emojibyte = "\xF0\x9F\x8D\xB9"; #Cocktail
        return $emojibyte;
    }   
    elsif ($emoji == 59)
    {     
        $emojibyte = "\xF0\x9F\x8C\xB4"; #Palme
        return $emojibyte;
    }       
    elsif ($emoji == 60)
    {     
        $emojibyte = "\xF0\x9F\x90\xA0"; #tropischer Fisch
        return $emojibyte;
    }       
    elsif ($emoji == 61)
    {     
        $emojibyte = "\xF0\x9F\x8F\x84"; #Surfer
        return $emojibyte;
    }       
}


5. Nun braucht ihr auch noch die Hauptroutine getBlitzer, welche das Anlegen / Prüfen der Devices erledigt und zu guter letzt auch den Prozess des Auslesens anstößt:

##################################################################################################
# Ermittelt die mobilen / festen Blitzer
##################################################################################################

sub getBlitzer($$)
{
    my ($message,$id) = @_;
    my $space = 0;
    my @array = "";
    my @ort    = "";
    my $ort1   = "";
    my $feste  = 0;
    my $mobile = 0;
my $z      = 0;
   
    $ort[1] = "";
    if ($message eq "Feste Blitzer")
    {
        $feste = 1;
        $ort[0] = "";
        $ort[1] = "";
    }
    elsif ($message eq "Blitzer")
    {
        $mobile = 1;   
        $ort[0] = "";
        $ort[1] = "";
    }
    else
    {
        # Wenn ein Leerzeichen gefunden wurde
        $space = index($message,' ');
        for (my $i = 0; $i < 10; $i++)
        {
            $space = index($message,' ');
            if ($space != -1)
            {
                @array[$i] = substr($message,0,$space);
                $message = substr($message,$space+1);
            }
            else
            {
                @array[$i] = substr($message,0);
                last;
            }
        }   
        foreach(@array)
        {
            if ($_ =~ /Feste/g)
            { $feste = 1; }
            elsif ($_ =~ /Blitzer/g)
            { $mobile = 1; }
if ($_ !~/^Feste$/ and $_ !~/^Blitzer$/ and $z == 0)
{ $z = 1;
              $ort1 = $_;
}
            elsif ($_ !~/^Feste$/ and $_ !~/^Blitzer$/ and $z == 1)
            { $ort1 = $ort1 ."+" .$_;
            }
        }
    }
   
    # Prüfe, ob das Objekt für den Blitzer existiert
    my ($error,$device) = checkHTTPMODBlitzer($feste,$mobile,$ort1);
   
    # Wenn kein Fehler vorhanden ist Daten auslesen
    if ($error != -1)
    {
        if ($error == 0)
        { return getInfoBlitzer($device); }
        elsif ($error == 1)
        {
            fhem "define temp_Blitzer at +00:00:07 { fhem \"set Telegram message \\\@$id \" .getInfoBlitzer(\"$device\") }";
            return "" .getEmoji(55) ."Sekunde, ich sammle alle Informationen!";
        }
    }
    # Device konnte nicht angelegt werden
    elsif($error == -1)
    {
        return "Gereat konnte nicht angelegt werden";
    }
   
}


6. Es fehlt nun noch die Routine, die das HTTPMOD Device mit allen regex im Raum "Verkehr" anlegt.
Hier können weitere Attribute hinzugefügt oder entfernt werden.
(Info: Nach 1h wird das Device wieder gelöscht, wenn ein Device dauerhaft vorhanden sein soll, muss hier manuell eingegriffen werden!)

##################################################################################################
# Errormeldungen:
# -1 = Device konnte nicht angelegt werden
#  0 = Device ist schon vorhanden
#  1 = Device wurde erfolgreich angelegt
##################################################################################################
sub checkHTTPMODBlitzer($$$)
{
    my($feste,$mobile,$ort) = @_;
    my $error = "";
    my $device = "";
    my $link = "";
   
    # Feste Blitzer + Ortsname
    if ($feste == 1 and $mobile == 1 and $ort ne "")
    {
        $device = "fb_" .$ort;
        $link = "https://www.verkehrslage.de/".$ort."/feste+Blitzer";
    }
    # mobile Blitzer + Ortsname
    elsif ($feste == 0 and $mobile == 1 and $ort ne "")
    {
        $device = "mb_" .$ort;
        $link = "https://www.verkehrslage.de/".$ort."/mobile+Blitzer";       
    }
    # Feste Blitzer ohne Ortsname -> Hamburg
    elsif ($feste == 1 and $mobile == 0 and $ort eq "")
    {
        $device = "fb_Hamburg";
        $ort    = "Hamburg";
        $link = "https://www.verkehrslage.de/Hamburg/feste+Blitzer";       
    }
    # mobile Blitzer ohne Ortsname -> Hamburg
    elsif ($feste == 0 and $mobile == 1 and $ort eq "")
    {
        $device = "mb_Hamburg"; 
        $link = "https://www.verkehrslage.de/Hamburg/mobile+Blitzer";
    }
   
    # Device ist noch nicht angelegt
    $device =~ s/-/_/g;
    $device =~ s/\+/_/g;
$device =~ s/ö/oe/g;
$device =~ s/Ö/Oe/g;
$device =~ s/ü/ue/g;
$device =~ s/Ü/Ue/g;
$device =~ s/ä/ae/g;
$device =~ s/Ä/Ae/g;
$device =~ s/ö/oe/g;
$device =~ s/Ö/Oe/g;
$device =~ s/ö/oe/g;
$device =~ s/Ö/Oe/g;
$device =~ s/ß/ss/g;
$ort    =~ s/\+/ /g;

    if (Value("$device") eq "")
    {
        if(substr($device,0,3) eq "mb_")
        {
            fhem "  define $device HTTPMOD $link 600 ;
                    attr $device room Verkehr ;
                    attr $device enableControlSet 1 ;
                    attr $device reading01Name String ;
                    attr $device reading01Regex <script>\\n  var json_str = (.*) ;
                    attr $device reading01RegOpt g ;
                    attr $device reading01DeleteIfUnmatched 1 ;
                    attr $device reading02Name Strassenname ;
                    attr $device reading02Regex $ort, (.*), \\(<a href ;
                    attr $device reading02RegOpt g  ;
                    attr $device reading02DeleteIfUnmatched 1 ;
                    define t_delete_Blitzer_$device at +01:00:00 { fhem \"delete $device\" }
                    ";   
        }
        elsif(substr($device,0,3) eq "fb_")
        {
            #$ort =~ s/_/+/g;
            fhem "  define $device HTTPMOD $link 600 ;
                    attr $device room Verkehr ;
                    attr $device enableControlSet 1 ;
                    attr $device reading01Name Strassenname ;
                    attr $device reading01Regex $ort, (.*), \\(<a href ;
                    attr $device reading01RegOpt g ;
                    attr $device reading01DeleteIfUnmatched 1 ;
                    define t_delete_Blitzer_$device at +01:00:00 { fhem \"delete $device\" }
                    "; 
        }
        if (Value("$device") eq "")
        { $error = -1;
          return ($error, "");
        }
        else
        { $error = 1;
          return ($error, $device);
        }   
    }
    # Device ist schon vorhanden
    else
    {
        $error = 0;
        return ($error, $device);
    }   
   
}


7. Nun benötigen wir nur noch die Routine, welche die Daten aus dem jeweiligen HTTPMOD Device ausliest:

# ------------------------------------------------------------------------ #
# Ermittelt die aktuellen Blitzer in Hamburg                               #
# ------------------------------------------------------------------------ #

sub getInfoBlitzer($)
{
    my ($device) = @_;
    my $reading;
    my @Blitzer;
    my $pfad;
    my $error = 0;
    my $strasse = "";
    my $txt ="";
    my $vmax = 0;
    my $kmh  = "";
    my $space = 0;
    my $len = "";
    my $str1 = (ReadingsVal("$device","String",""));
   
    if(substr($device,0,3) eq "mb_")
    {
        for (my $i = 0; $i <=15 ; $i++)
        {
            my $l_str = index($str1,'street');
            my $r_str = index($str1,'content');
            my $l_lat = index($str1,'lat');
            my $r_lat = index($str1,'lat_s');
            my $l_lng = index($str1,'lng');
            my $r_lng = index($str1,'lng_s'); 
            my $l_vmax  = index($str1,'vmax');
            my $r_vmax  = index($str1,'counter');
            my $l_id  = index($str1,'{"id"');
            my $r_id  = rindex($str1,'{"id"');
           
            if ($l_str eq "-1")
                { $error = "1"; }
            else
                { $error = "0";  }
            if ($error eq "0")
            {
                my $abc = substr($str1,$l_str+11,$r_str-$l_str-16);
                $abc =~ s/\\\\u00df/ß/g;
                $abc =~ s/\\\\u00e4/ä/g;
                $abc =~ s/\\\\u00f6/ö/g;
                $abc =~ s/\\\\u00fc/ü/g;
                $abc =~ s/\\\\u00dc/Ü/g;
                $abc =~ s/\\\\u00d6/Ö/g;
                #$vmax = substr($str1,$l_vmax+9,2);
                $vmax = substr($str1,$l_vmax+9,$r_vmax-$l_vmax-14);
                $len  = length($vmax);
                if ($len == 2)
                {
                    if ($vmax =~ /^\d\d$/)
                    { $kmh = $vmax ."km/h"; }
                    else
                    { $kmh = "Rotlichtüberwachung"; }
                }
                elsif ($len == 3)
                {
                    if ($vmax =~ /^\d\d\d$/)
                    { $kmh = $vmax ."km/h"; }               
                }
                if ($abc !~ /Oldesloer Straße/i)
                {
                    if ($strasse eq "")
                    { $strasse = "\n " .getEmoji(40) ." $abc ($kmh) " .getEmoji(8) ." \ngoogle.de/maps/place/" .substr($str1,$l_lat+8,$r_lat-$l_lat-13) ."+" .substr($str1,$l_lng+8,$r_lng-$l_lng-13) ." " .getEmoji(41);
                    }
                    else
                    { $strasse =  "$strasse\n " .getEmoji(40) ." $abc ($kmh) " .getEmoji(8) ." \ngoogle.de/maps/place/" .substr($str1,$l_lat+8,$r_lat-$l_lat-13) ."+" .substr($str1,$l_lng+8,$r_lng-$l_lng-13) ." " .getEmoji(41);
                    }
                    $str1 = substr($str1,$r_str+90);
                }
            }
        }   
        if ($strasse eq "")
        {
            $txt = "Es sind keine mobile Blitzer gemeldet, gib GUMMI " .getEmoji(10) ." " .getEmoji(4);
        }
        else
        {
            $txt = getEmoji(13) ." " .getEmoji(53) . " " .getEmoji(13) ." Fahr vorsichtig, zur Zeit sind folgende mobile Blitzer aktiv: " .$strasse;   
        }
    }
    elsif(substr($device,0,3) eq "fb_")
    {
        for (my $i = 0; $i <=50 ; $i++)
        {
            if ($i == 0)
            { $reading = "Strassenname"; }
            else
            { $reading = "Strassenname-" .$i; }
       
            if (ReadingsVal("$device",$reading,"") ne "")
            {
                $Blitzer[$i] = (ReadingsVal("$device",$reading,""));
            }
        }
        foreach(@Blitzer)
        {
            if ($strasse eq "")
            { $strasse = $_; }
            else
            { $strasse =  "$strasse" ."\n* " .$_; }
        }
   
        if ($strasse eq "")
        {   
            $txt = "Es sind keine festen Blitzer gemeldet, gib GUMMI :D";
        }
        else
        {
            $txt = "Fahr vorsichtig, zur Zeit sind folgende feste Blitzer aktiv: \n* " .$strasse;   
        }   
    }   
       
    return $txt;
   
}



Wenn nun alles funktioniert hat, kann man eine Nachricht an seinen Telegrambot schreiben mit "Hilfe Blitzer" und erhält eine "grobe" Anleitung, wie man den Bot befüttern muss, damit man die aktuellen Blitzer mitgeteilt bekommt.

z.B.:

* Blitzer Hamburg (ermittelt alle mobilen Blitzer von Hamburg)
* Feste Blitzer Hamburg (ermittelt alle festen Blitzer von Hamburg)
* Blitzer Homburg vor der Höhe (ermittelt alle mobilen Blitzer von Homburg vor der Höhe)
* Feste Blitzer Homburg vor der Höhe (ermittelt alle festen Blitzer von Homburg vor der Höhe)
* Feste Blitzer Berlin (ermittelt alle festen Blitzer von Berlin)
* Blitzer Berlin (ermittelt alle mobilen Blitzer von Berlin)
* Blitzer A1 (ermittelt alle mobilen Blitzer auf der A1)
* Feste Blitzer A1 (ermittelt alle festen Blitzer auf der A1)
* Blitzer Bayern (ermittelt alle mobilen Blitzer im Bundesland "Bayern")


Zur Info:
Zur Zeit habe ich es eingestellt, dass maximal 15 mobile Blitzer geladen werden (wegen der Übersicht), dies kann man auch erhöhen, dazu einfach die Schleife in der Routine "getInfoBlitzer" von 15 auf die gewünschte Anzahl hochschrauben!
Bei den festen Blitzern ermittelt er maximal 50!

Falls das soweit klappt, würde ich gerne einen neuen Thread unter "Codeschnipsel" aufmachen und diesen Post als groben Leitfaden nutzen, was haltet ihr davon?

Im Anhang findet sich das Beispiel von Bad Homburg vor der Höhe.

PS.: Falls Interesse besteht, ich habe für die Ermittlung der Spritpreise eine ähnliche Routine geschrieben, siehe Screenshots. Könnte diese dann auch veröffentlichen  :)

Gruß
Mathze

t1me2die

Zitat von: Fhemschorsch am 06 Juni 2018, 22:18:59
Vielen Dank, das ist ja echt der Hammer!

Ich bin leider nicht so der oberbegnadete Programmierer, aber ich werde mir mal anschauen, ob man irgendwie einen Koordinatenkorridor (z.B. Weg zur Arbeit) vorgeben kann, in dem er die mobilen Blitzer rückmeldet. Bei mir ist es leider Bundeslandübergreifend (Schleswig-Holstein nach Hamburg-Nord), da interessiert mich der mobile Blitzer in Süd- oder Osthamburg auch nicht mehr wirklich.

Es gibt die App Geofancy (auf jeden Fall für iOS), die App teilt via Webhook die jeweils angelegten Orte direkt an FHEM mit, dazu einfach mal ins Wiki schauen (https://wiki.fhem.de/wiki/GEOFANCY).
Ich habe z.B. einen Radius um meine Arbeit angelegt, sobald dieser Radius verlassen wird, erhalte ich automatisch via Telegram die mobilen Blitzer.

Gruß
Mathze

steffen83

Mathze! Mega geil!
Läuft super per Copy Paste :-)
Raspberry Pi 3 (Noobs, aktuelle Fhem und Pilight) | FHEMduino | HM-OCCU-SDK | HM-Sec-SCo | HM-Sec-SD-2 | HM-CC-RT-DN | HM-LC-Bl1PBU-FM

t1me2die

Meistens ist es ja so, dass man die Blitzer immer für einen bestimmten Ort haben möchte, z.B. "Hamburg", "Berlin", "Bremen", "Schwerin", ....
Damit man nicht jedes mal "Blitzer Schwerin" schreiben muss, empfiehlt es sich beim 1. mal das delete-Device (welches nach 1h automatisch das angelegte Device wieder löscht) manuell unter dem Raum "Unsorted" zu löschen, sodass das Device weiterhin bestehen bleibt!

1.
Nun sollte das Device "mb_Ortsname" im Raum Verkehr weiterhin bestehen bleiben.

2.
In der Routine "checkHTTPMODBlitzer" muss nun noch der Ortsname angepasst werden (zur Zeit steht da fb_Hamburg und mb_Hamburg)

Zitat
# Feste Blitzer ohne Ortsname -> Hamburg
    elsif ($feste == 1 and $mobile == 0 and $ort eq "")
    {
        $device = "fb_Hamburg";
        $ort    = "Hamburg";
        $link = "https://www.verkehrslage.de/Hamburg/feste+Blitzer";       
    }
    # mobile Blitzer ohne Ortsname -> Hamburg
    elsif ($feste == 0 and $mobile == 1 and $ort eq "")
    {
        $device = "mb_Hamburg"; 
        $link = "https://www.verkehrslage.de/Hamburg/mobile+Blitzer";
    }


3.
Wenn das erledigt ist, sollte es reichen, wenn man Blitzer oder Feste Blitzer schreibt und man erhält dann automatisch die Liste für den unter Punkt 2 eingetragenen Ort.

4.
Durch diesen fest ausgewählten Ort kann man nun z.B. sich automatisch eine Nachricht zusenden lassen, wenn man das Haus verlässt (Bluetooth Anwesenheit, o.ä. Anwesenheitserkennungen...)
Dazu benötigt man nur noch ein Statement an der jeweiligen Stelle. Hier muss nur noch die Variable $nr durch die Telegram ID ersetzt werden. Dies kann man dynamisch ermitteln oder einfach fest im Quellcode reinschreiben. Je nach dem was man machen möchte!

fhem "set Telegram message \@$nr " .getBlitzer("Blitzer","");


Falls ihr Probleme haben solltet, schauen wir uns das mal genauer an  :)

Gruß
Mathze

binford6000

Hallo Mathze,
wirklich tolle Arbeit! Ich würde mich auch freuen wenn du die ganzen Codeschnipsel
in ein Modul gießen würdest!  Damit wäre eine einfachere Integration in FHEM möglich,
anpassbare Dialogtexte per attr usw.
Emojis können btw. auch direkt im Code drinstehen...
set TelegramBot msg 😉 geht auch einwandfrei!

ZitatVielen Dank, das ist ja echt der Hammer!

Ich bin leider nicht so der oberbegnadete Programmierer, aber ich werde mir mal anschauen, ob man irgendwie einen Koordinatenkorridor (z.B. Weg zur Arbeit) vorgeben kann, in dem er die mobilen Blitzer rückmeldet. Bei mir ist es leider Bundeslandübergreifend (Schleswig-Holstein nach Hamburg-Nord), da interessiert mich der mobile Blitzer in Süd- oder Osthamburg auch nicht mehr wirklich.

@Fhemschorsch: Mich teilt auch dein Schicksal: Ich starte in RLP, fahre ein Stück durch Hessen und lande wieder in RLP.
Habe aber auch Geofencing mit livetracking im Einsatz. Hätte also auch immer den aktuellen Standort parat. Aber so ein Korridor
wäre schon was feines... :-)

Aber wie gesagt, tolle Arbeit und weiter so Mathze!
VG Sebastian

Jamo

#15
Hallo Mathze,
super Sache das!!!!!!!  Macht Spass, man kann das ganze ja auch in die Telegrambot Favoriten packen, dann muss man nur einmal auf das kommando im Telegram Fenster tippen.
Siehe Favoriten für Kommandos: https://wiki.fhem.de/wiki/TelegramBot#Favoriten_f.C3.BCr_Kommandos_anlegen
(Ganz unten in diesem text mal mein Beispiel, ich übergebe allerdings meiner sub checkMessage das Event)

Noch 4 Sachen, die mir aufgefallen sind:
1) Wenn ich {getBlitzer("Blitzer Bayern","")} in fhem eingebe, also nach mobilen Blitzern in Bayern suche, kommen folgende Informationen, da fehlt aber der Ort, hier im Beispiel "Eching". Ohne den Ort weiss man aber gar nicht wo sich die E53 befindet und ob der Blitzer relevant für mich ist.
ZitatE53 (70km/h)
google.de/maps/place/48.317365+11.632915
im Webbrowser erscheint aber der Blitzer mit Strasse und Ort:
ZitatEching, E53, (Karte)


2) Ebenso bei den festen Blitzern: Kann man bei der langen Liste der festen Blitzer evtl auch vorne den Ort, und hinten den link zur Karte anhängen? Für München kommt zum Beispiel für feste Blitzer:
Zitat* A99
* B2R
* B2R
* B2R
* B2r Richard-Strauss-Tunnel
da kann man aber nicht draus ersehen, welcher Ort, wo die drei B2R Blitzer stecken. Wenn man den Ort hätte wüsste man ob man durch diesen Ort fährt, und evtl noch den Google maps link hätte, könnte man kurz nachschauen.
Auf der Website sind die Karten mit dabei:
ZitatMünchen, B2R, (Karte)
München, B2R, (Karte)
München, B2R, (Karte)


3) Wenn man aus Versehen "Blitzer  Hamburg" statt "Blitzer Hamburg" eingibt (also aus Versehen 2 Leerzeichen anstatt einem Leerzeichen), wird ein device
Zitatmb__Hamburg: Defined with URL https://www.verkehrslage.de/+Hamburg/mobile+Blitzer and interval 600
angelegt, und dann werden keine Blitzer für +Hamburg gefunden. Da muss man an der Leerzeichenerkennung was ändern, ich bin aber nicht der Experte.


4) Ich würde define t_delete_Blitzer_$device at .... in defmod t_delete_Blitzer_$device at .... ändern, weil fhem sich sonst evtl beschwert, das es das t_...  device schon gibt (Gut, ich gebe zu ich habe manuell das HTTPMOD device gelöscht,, und dann gab es das t_... at device natürlich noch, da hat FHEM sich dann beim neu-anlegen beschwert.)



Mein Beispiel für Telegram Favoriten (Raw definition):
attr Telegram favorites [Mobile Blitzer M]={checkMessage("Blitzer München")};;\
/[Feste  Blitzer M]={checkMessage("Feste Blitzer München")};;\
/[Mobile Blitzer H]={checkMessage("Blitzer Hamburg")};;\
/[Feste  Blitzer H]={checkMessage("Feste Blitzer Hamburg")};;

Beste Grüsse!


Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack

accessburn

#16
Hab mal bisschen weiter gespielt. Also das Favoriten-Ding funktioniert bei Telegram leider nicht, alle anderen Favoriten funktionieren nach wie vor:
Zitat{checkMessage("Blitzer"):: - Ergebnis: Too many arguments for main::checkMessage at (eval 317168) line 1, near "Blitzer"

Des weiteren ist es mir jetzt zweimal passiert das danach plötzlich alle "room" verstellt waren, es existiert nur noch "Verkehr" und "unsorted" und in Verkehr sind aaaaalle Devices drin die ich besitze.

Großes, dickes aua...
Wezzy Rpi2b> FHEM, Elro, Intenso, FTUI, Jeelink v3, Max!Cube, Fire5, Foscam, NAS, Fritz!Box + Fon, Max!Wandthermostat, Amazon Echo
Wezzy Rp3b> OctoPi
Jessie Rp3b> UPNP, NAS, Pi-Hole

t1me2die

#17
Mit soviel Resonanz habe ich nun aber gar nicht gerechnet   :o

Zuerst einmal ein kleiner Fix um das Problem mit doppelten Leerzeichen zu beheben!
Einfach die Rountine "getBlitzer($$)" durch folgende ersetzen.


##################################################################################################
# Ermittelt die mobilen / festen Blitzer
##################################################################################################

sub getBlitzer($$)
{
    my ($message,$id) = @_;
    my $space = 0;
    my @array = "";
    my @ort    = "";
    my $ort1   = "";
    my $feste  = 0;
    my $mobile = 0;
my $z      = 0;
   
    $ort[1] = "";
    if ($message eq "Feste Blitzer")
    {
        $feste = 1;
        $ort[0] = "";
        $ort[1] = "";
    }
    elsif ($message eq "Blitzer")
    {
        $mobile = 1;   
        $ort[0] = "";
        $ort[1] = "";
    }
    else
    {
        # Wenn ein Leerzeichen gefunden wurde
        $space = index($message,' ');
        for (my $i = 0; $i < 10; $i++)
        {
            $space = index($message,' ');
            if ($space != -1)
            {
                @array[$i] = substr($message,0,$space);
                $message = substr($message,$space+1);
$message =~ s/^\s+//;
            }
            else
            {
                @array[$i] = substr($message,0);
                last;
            }
        }   
        foreach(@array)
        {
            if ($_ =~ /Feste/g)
            { $feste = 1; }
            elsif ($_ =~ /Blitzer/g)
            { $mobile = 1; }
if ($_ !~/^Feste$/ and $_ !~/^Blitzer$/ and $z == 0)
{ $z = 1;
              $ort1 = $_;
}
            elsif ($_ !~/^Feste$/ and $_ !~/^Blitzer$/ and $z == 1)
            { $ort1 = $ort1 ."+" .$_;
            }
        }
    }
   
    # Prüfe, ob das Objekt für den Blitzer existiert
    my ($error,$device) = checkHTTPMODBlitzer($feste,$mobile,$ort1);
   
    # Wenn kein Fehler vorhanden ist Daten auslesen
    if ($error != -1)
    {
        if ($error == 0)
        { return getInfoBlitzer($device); }
        elsif ($error == 1)
        {
            fhem "defmod temp_Blitzer at +00:00:07 { fhem \"set Telegram message \\\@$id \" .getInfoBlitzer(\"$device\") }";
            return "" .getEmoji(55) ."Sekunde, ich sammle alle Informationen!";
        }
    }
    # Device konnte nicht angelegt werden
    elsif($error == -1)
    {
        return "Gereat konnte nicht angelegt werden";
    }
   
}


Die Abfrage der festen Blitzer für ein ganzes Bundesland funktioniert nur bei ganz wenigen Bundesländern (Hamburg, Bremen & Berlin).
Bei allen anderen Bundesländern funktioniert meine Regex nicht!
Das liegt damit zusammen, dass ich bei den festen Blitzern die Readings auslese die mir HTTPMOD bereitgestellt hat, mit dem jeweiligen RegEx.
Bei den mobilen Blitzern arbeite ich mit dem JSON String, welcher mir viel mehr Flexibilität gewährt.
(Ich muss dazu auch sagen, dass feste Blitzer nie mein Hauptaugenmerkt waren, da man die meisten festen Blitzer eh kennt!)

Habe die Routine "getInfoBlitzer" um den jeweiligen Ort erweitert. Der Ort wird nur dann angezeigt, wenn es sich um ein Bundesland mit mehr als einem Ort handelt!
(Bei Hamburg, Bremen und Berlin ist dies überflüssig!)


Habe die Routine kurzerhand umgeschrieben.
Die festen Blitzer habe ich nun auch auf JSON umgestellt (alte fb_Devices, sollten zu Beginn einmal gelöscht werden!)
Des Weiteren habe ich den Code etwas überarbeitet und verkürzt.


# ------------------------------------------------------------------------ #
# Ermittelt die aktuellen Blitzer in Hamburg                               #
# ------------------------------------------------------------------------ #

sub getInfoBlitzer($)
{
    my ($device) = @_;
    my $reading;
    my @Blitzer;
    my $pfad;
    my $error = 0;
    my $strasse = "";
my $city ="";
    my $txt ="";
    my $vmax = 0;
    my $kmh  = "";
    my $space = 0;
    my $len = "";
my $bundesland = 0;
my $zaehler = 0;
    my $str1 = (ReadingsVal("$device","String",""));
   
if    ((substr($device,3) eq "Brandenburg")
   or (substr($device,3) eq "Baden-Würtetemberg")
   or (substr($device,3) eq "Bayern")
   or (substr($device,3) eq "Hessen")
   or (substr($device,3) eq "Mecklemburg-Vorpommern")
   or (substr($device,3) eq "Niedersachsen")
   or (substr($device,3) eq "Nordrhein-Westfalen")
   or (substr($device,3) eq "Rheinland-Pfalz")
   or (substr($device,3) eq "Schleswig-Holstein")
   or (substr($device,3) eq "Saarland")
   or (substr($device,3) eq "Sachsen")
   or (substr($device,3) eq "Sachsen-Anhalt")
   or (substr($device,3) eq "Thüringen"))
{
$bundesland = 1;
}

# Bei mobilen Blitzern maximal 15Stück anzeigen
# Bei festen Blitzern maximal 100Stück anzeigen
# Mobile Blitzer werden im String anders aufbereitet
if(substr($device,0,3) eq "mb_")
{  $zaehler = 15; }
elsif(substr($device,0,3) eq "fb_")   
{  $zaehler = 100; }

    for (my $i = 0; $i <=$zaehler ; $i++)
    {
        my $l_str = index($str1,'street');
        my $r_str = index($str1,'content');
        my $l_lat = index($str1,'lat');
        my $r_lat = index($str1,'lat_s');
        my $l_lng = index($str1,'lng');
        my $r_lng = index($str1,'lng_s'); 
        my $l_vmax = index($str1,'vmax');
        my $r_vmax = index($str1,'counter');
        my $l_id   = index($str1,'{"id"');
        my $r_id   = rindex($str1,'{"id"');
my $l_city = index($str1,'city');
        my $r_city = rindex($str1,'street');
           
        if ($l_str eq "-1")
        { $error = "1"; }
        else
        { $error = "0";  }
       
if ($error eq "0")
        {
            my $abc = substr($str1,$l_str+11,$r_str-$l_str-16);
            $abc =~ s/\\\\u00df/ß/g;
            $abc =~ s/\\\\u00e4/ä/g;
            $abc =~ s/\\\\u00f6/ö/g;
            $abc =~ s/\\\\u00fc/ü/g;
            $abc =~ s/\\\\u00dc/Ü/g;
            $abc =~ s/\\\\u00d6/Ö/g;
               
$city = substr($str1,$l_city+9,$l_str-$l_city-14);
            $city =~ s/\\\\u00df/ß/g;
            $city =~ s/\\\\u00e4/ä/g;
            $city =~ s/\\\\u00f6/ö/g;
            $city =~ s/\\\\u00fc/ü/g;
            $city =~ s/\\\\u00dc/Ü/g;
            $city =~ s/\\\\u00d6/Ö/g;

            $vmax = substr($str1,$l_vmax+9,$r_vmax-$l_vmax-14);
            $len  = length($vmax);
            if ($len == 2)
            {
                if ($vmax =~ /^\d\d$/)
                { $kmh = $vmax ."km/h"; }
                else
                { $kmh = "Rotlichtüberwachung"; }
            }
            elsif ($len == 3)
            {
                if ($vmax =~ /^\d\d\d$/)
                { $kmh = $vmax ."km/h"; }               
                }
if ($bundesland == 1)
{ $abc = $city .", " .$abc;
}
            if ($abc !~ /Oldesloer Straße/i)
            {
if(substr($device,0,3) eq "mb_")
{
if ($strasse eq "")
{ $strasse = "\n " .getEmoji(40) ." $abc ($kmh) " .getEmoji(8) ." \ngoogle.de/maps/place/" .substr($str1,$l_lat+8,$r_lat-$l_lat-13) ."+" .substr($str1,$l_lng+8,$r_lng-$l_lng-13) ." " .getEmoji(41);
}
else
{ $strasse =  "$strasse\n " .getEmoji(40) ." $abc ($kmh) " .getEmoji(8) ." \ngoogle.de/maps/place/" .substr($str1,$l_lat+8,$r_lat-$l_lat-13) ."+" .substr($str1,$l_lng+8,$r_lng-$l_lng-13) ." " .getEmoji(41);
}
                }
elsif(substr($device,0,3) eq "fb_")   
{
if ($strasse eq "")
{ $strasse = "$abc ($kmh) "; }
else
{ $strasse = "$strasse\n* $abc ($kmh) "; }
}
}
}
$str1 = substr($str1,$r_str+180);
    }
   
    if ($strasse eq "" and (substr($device,0,3) eq "mb_"))
    { $txt = "Es sind keine mobile Blitzer gemeldet, gib GUMMI " .getEmoji(10) ." " .getEmoji(4);
    }
    elsif ($strasse ne "" and (substr($device,0,3) eq "mb_"))
    { $txt = getEmoji(13) ." " .getEmoji(53) . " " .getEmoji(13) ." Fahr vorsichtig, zur Zeit sind folgende mobile Blitzer aktiv: " .$strasse;   
    }
elsif ($strasse eq "" and (substr($device,0,3) eq "fb_"))
{ $txt = "Es sind keine festen Blitzer gemeldet, gib GUMMI " .getEmoji(10) ." " .getEmoji(4);
}
    elsif ($strasse ne "" and (substr($device,0,3) eq "fb_"))
{ $txt = getEmoji(13) ." " .getEmoji(53) . " " .getEmoji(13) ." Fahr vorsichtig, zur Zeit sind folgende feste Blitzer aktiv: \n* " .$strasse;   
}   
    return $txt;
   
}


Ich werde, wenn ich mal etwas Zeit bei dem schönen Wetter finde die "Festen Blitzer" auch auf den JSON String umbauen.
Das Problem bei festen Blitzern ist die Anzahl, ich könnte theoretisch auch hier jeden Blitzer mit den GPS Koordinaten aufbauen, jedoch würde ich dadurch die Telegram Nachricht unleserlich in die Länge ziehen.
Allein Hamburg hat schon gefühlt mehr als 40 Blitzer, wenn ich da nun mehr als den reinen Straßennamen anzeige würde, würde man sich in der Telegram Nachricht "tot" scrollen.
Ich werde mir da nochmal Gedanken drüber machen, aber wie schon weiter oben gesagt, liegt mein Hauptaugenmerk auf den "mobilen Blitzern", da diese ja für uns Autofahrer unerwarteter kommen als "feste Blitzer"  ;D

Um die Routine "getInfoBlitzer" verwenden zu können muss auch die Routine "checkHTTPMODBlitzer" angepasst werden!
Feste Blitzer haben nun ein zusätzliches RegEx spendiert bekommen, welches mir den JSON String in einem Reading ablegt, sodass ich diesen direkt auswerten kann  :)


##################################################################################################
# Errormeldungen:
# -1 = Device konnte nicht angelegt werden
#  0 = Device ist schon vorhanden
#  1 = Device wurde erfolgreich angelegt
##################################################################################################
sub checkHTTPMODBlitzer($$$)
{
    my($feste,$mobile,$ort) = @_;
    my $error = "";
    my $device = "";
    my $link = "";
   
    # Feste Blitzer + Ortsname
    if ($feste == 1 and $mobile == 1 and $ort ne "")
    {
        $device = "fb_" .$ort;
        $link = "https://www.verkehrslage.de/".$ort."/feste+Blitzer";
    }
    # mobile Blitzer + Ortsname
    elsif ($feste == 0 and $mobile == 1 and $ort ne "")
    {
        $device = "mb_" .$ort;
        $link = "https://www.verkehrslage.de/".$ort."/mobile+Blitzer";       
    }
    # Feste Blitzer ohne Ortsname -> Hamburg
    elsif ($feste == 1 and $mobile == 0 and $ort eq "")
    {
        $device = "fb_Hamburg";
        $ort    = "Hamburg";
        $link = "https://www.verkehrslage.de/Hamburg/feste+Blitzer";       
    }
    # mobile Blitzer ohne Ortsname -> Hamburg
    elsif ($feste == 0 and $mobile == 1 and $ort eq "")
    {
        $device = "mb_Hamburg"; 
        $link = "https://www.verkehrslage.de/Hamburg/mobile+Blitzer";
    }
   
    # Device ist noch nicht angelegt
    $device =~ s/-/_/g;
    $device =~ s/\+/_/g;
$device =~ s/ö/oe/g;
$device =~ s/Ö/Oe/g;
$device =~ s/ü/ue/g;
$device =~ s/Ü/Ue/g;
$device =~ s/ä/ae/g;
$device =~ s/Ä/Ae/g;
$device =~ s/ö/oe/g;
$device =~ s/Ö/Oe/g;
$device =~ s/ö/oe/g;
$device =~ s/Ö/Oe/g;
$device =~ s/ß/ss/g;
$ort    =~ s/\+/ /g;

    if (Value("$device") eq "")
    {
        if(substr($device,0,3) eq "mb_")
        {
            fhem "  define $device HTTPMOD $link 600 ;
                    attr $device room Verkehr ;
                    attr $device enableControlSet 1 ;
                    attr $device reading01Name String ;
                    attr $device reading01Regex <script>\\n  var json_str = (.*) ;
                    attr $device reading01RegOpt g ;
                    attr $device reading01DeleteIfUnmatched 1 ;
                    attr $device reading02Name Strassenname ;
                    attr $device reading02Regex $ort, (.*), \\(<a href ;
                    attr $device reading02RegOpt g  ;
                    attr $device reading02DeleteIfUnmatched 1 ;
                    defmod t_delete_Blitzer_$device at +01:00:00 { fhem \"delete $device\" }
                    ";   
        }
        elsif(substr($device,0,3) eq "fb_")
        {
            #$ort =~ s/_/+/g;
            fhem "  define $device HTTPMOD $link 600 ;
                    attr $device room Verkehr ;
                    attr $device enableControlSet 1 ;
                    attr $device reading01Name String ;
                    attr $device reading01Regex var json_str = (.*) ;
                    attr $device reading01RegOpt g ;
                    attr $device reading01DeleteIfUnmatched 1 ;
                    attr $device reading02Name Strassenname ;
                    attr $device reading02Regex $ort, (.*), \\(<a href ;
                    attr $device reading02RegOpt g ;
                    attr $device reading02DeleteIfUnmatched 1 ;
                    defmod t_delete_Blitzer_$device at +01:00:00 { fhem \"delete $device\" }
                    "; 
        }
        if (Value("$device") eq "")
        { $error = -1;
          return ($error, "");
        }
        else
        { $error = 1;
          return ($error, $device);
        }   
    }
    # Device ist schon vorhanden
    else
    {
        $error = 0;
        return ($error, $device);
    }   
   
}


Zur Info:

  • Anzahl der mobilen Blitzer = 15
  • Anzahl der festen Blitzer = 100

Ich muss auch aufpassen, dass ich die maximale Zeichenlänge der zulässigen Telegram Nachricht nicht sprenge  :)

Zu dem Thema Telegram Favouriten kann ich "noch" nichts sagen, da ich bisher diese Funktion nicht nutze!
Was da bei deinen Räumen passiert ist, kann ich nicht sagen jedoch vermute ich das Problem eher beim Telegram Modul, da ich keinerlei Räume lösche o.ä.

Gruß
Mathze

t1me2die

Zitat von: accessburn am 08 Juni 2018, 07:40:06
Hab mal bisschen weiter gespielt. Also das Favoriten-Ding funktioniert bei Telegram leider nicht, alle anderen Favoriten funktionieren nach wie vor:
Des weiteren ist es mir jetzt zweimal passiert das danach plötzlich alle "room" verstellt waren, es existiert nur noch "Verkehr" und "unsorted" und in Verkehr sind aaaaalle Devices drin die ich besitze.

Großes, dickes aua...

Ich weiß jetzt nicht genau, wie deine checkMessage Routine ausschaut, aber meine Routine wird OHNE Parameter aufgerufen!
Innerhalb der checkMessage Routine prüfe ich den letzten "msgText" aus dem Telegram Device!

Gruß
Mathze

Prof. Dr. Peter Henning

Hm, das sieht gut aus. Allerdings gefällt mir das dauernde Anlegen und Löschen der Devices nicht so sehr. Gibt es einen bestimmten Grund, dass das so gelöst wurde ?

LG

pah

t1me2die

Zitat von: Prof. Dr. Peter Henning am 08 Juni 2018, 14:37:42
Hm, das sieht gut aus. Allerdings gefällt mir das dauernde Anlegen und Löschen der Devices nicht so sehr. Gibt es einen bestimmten Grund, dass das so gelöst wurde ?

LG

pah

Beim testen (damals) ist mir aufgefallen, dass ich immer mehr den Überblick über all die angelegten Devices verliere / verloren habe.
Des Weiteren war / bin ich mir unsicher, ob es für FHEM relevant ist, ob er 1x alle 10Minuten per HTTPMOD eine Abfrage macht, oder ob evtl. 30,40, oder noch mehr Devices eine Abfrage machen.
Mir ist zwar bewusst, dass nicht alle Devices in der selben Sekunde die Abfrage machen, jedoch erzeugt dies ja auch Traffic auf der Webseite des Anbieters oder?
Theoretisch kann man das löschen 1Stunde nachdem die Abfrage via Telegram abgeschickt wurde auch einfach rausnehmen.
Ich persönlich empfand es für meine Bedürfnisse jedoch angenehmer nur die Tag täglichen Devices weiterhin bestehen zu lassen  :)

Gruß
Mathze

Prof. Dr. Peter Henning

Nein, das ist anders gemeint. Vor allem deshalb, weil die ganzen HTTPMOD-Abfragen ziemlich viel Zeit kosten und deshalb keinesfalls in der Hauptschleife von FHEM landen sollten. Ich hielte es für sinnvoll, EINE abfragende Instanz zu haben, die (von mir aus ale 10 Minuten) eine (z.B. je nach aktueller Position) leicht veränderte Abfrage sendet und die relevanten Daten intern verwaltet. Wir haben vor ca. 12 Jahren ein ganzes Geoinformationssystem gebaut, ich denke, ich werde mich der aktuellen Fragestellung mal annehmen.

Melde mich, sobald ich etwas habe.

LG

pah

bismosa

Hallo,

nach der Idee aus diesem Thread habe ich das etwas anders umgesetzt. Mir ging es aber um die Anzeige auf meinem Tablet. Siehe:
https://forum.fhem.de/index.php/topic,90014.0.html

Gruß
Bismosa
1x nanoCUL 433MHz (SlowRF Intertechno) für Fenstersensoren
1x nanoCUL 868Mhz für MAX (9x HT 1xWT)
1x ZigBee CUL
Weiteres: Squeezebox server, Kindle Display, ESP8266, Löterfahrung, ...

Mumpitz

Hallo zusammen

Ich bin häufig in der Schweiz unterwegs resp. ich wohne auch da. Auf Verkehrslage.de sehe ich zwar die Blitzer, Baustellen und solche Sachen auch in meinem Gebiet. Leider schaffe ich es jedoch nicht, diese abzufragen. Sprich mit Z.b Hamburg klappt es, aber Zürich kann ich nicht nehmen. Weiss jemand ob das mit einem anderen Syntax geht?

Gruess und Danke für die Hilfe

t1me2die

Zitat von: Mumpitz am 06 August 2018, 23:30:33
Hallo zusammen

Ich bin häufig in der Schweiz unterwegs resp. ich wohne auch da. Auf Verkehrslage.de sehe ich zwar die Blitzer, Baustellen und solche Sachen auch in meinem Gebiet. Leider schaffe ich es jedoch nicht, diese abzufragen. Sprich mit Z.b Hamburg klappt es, aber Zürich kann ich nicht nehmen. Weiss jemand ob das mit einem anderen Syntax geht?

Gruess und Danke für die Hilfe

Wie / Wo siehst du die Blitzer auf Verkehrslage.de? Mir wäre es neu, wenn die auch die Blitzer außerhalb von DE haben. Bzw. kann ich keine Städte o.ä. außerhalb von DE auswählen.
Gib mir mal ein konkretes Beispiel, wo / wie du die Blitzer siehst.

Gruß
Mathze

Mumpitz

Zitat von: t1me2die am 07 August 2018, 09:18:13
Wie / Wo siehst du die Blitzer auf Verkehrslage.de? Mir wäre es neu, wenn die auch die Blitzer außerhalb von DE haben. Bzw. kann ich keine Städte o.ä. außerhalb von DE auswählen.
Gib mir mal ein konkretes Beispiel, wo / wie du die Blitzer siehst.

Gruß
Mathze
Auf der Homepage in den Bereich der Schweiz, zB unterhalb des Bodensee zoomen und Blitzer aktivieren...

t1me2die

Da kann ich leider zur Zeit nicht helfen.
Ich weiß nicht, wie ich die Blitzer ohne Städtenamen auslesen kann.

Gruß
Mathze

bismosa

Hallo,

eine Lösung habe ich hier auch nicht wirklich. Vielleicht kannst Du aber das Beispiel von mir etwas umstricken: https://forum.fhem.de/index.php/topic,90014.0.html
Ich rufe auch nicht die Seite von www.verkehrslage.de auf, sondern frage mit Hilfe von Koordinaten die Blitzer direkt ab.
Gruß
Bismsoa
1x nanoCUL 433MHz (SlowRF Intertechno) für Fenstersensoren
1x nanoCUL 868Mhz für MAX (9x HT 1xWT)
1x ZigBee CUL
Weiteres: Squeezebox server, Kindle Display, ESP8266, Löterfahrung, ...

lapidu

Wie kann man sich die aktuellen festen und mobilen Blitzer z.B jeden Tag um 6 Uhr auf Telegram schicken lassen?

binford6000

Zitat von: lapidu am 16 Oktober 2018, 18:55:02
Wie kann man sich die aktuellen festen und mobilen Blitzer z.B jeden Tag um 6 Uhr auf Telegram schicken lassen?
So:
defmod blitzer_at at +*06:00:00 msg push Aktuelle Blitzer:\n[blitzer:PushText]
Wenn blitzer dein dummy device ist.
Wobei es hier doch um die mobilen Blitzer geht...  :o
VG Sebastian

lapidu

Hab kein dummy device. Nur das was in den forderen Seiten beschrieben ist. Ich kann über meinen Telegrambot die Blitzer abfragen.

binford6000

Sorry, falscher Thread. Meinte den hier:
https://forum.fhem.de/index.php/topic,90014.0.html
Basiert aber auf diesem hier...

VG Sebastian

Floriky

Zitat von: t1me2die am 07 Juni 2018, 11:50:49
Meistens ist es ja so, dass man die Blitzer immer für einen bestimmten Ort haben möchte, z.B. "Hamburg", "Berlin", "Bremen", "Schwerin", ....
Damit man nicht jedes mal "Blitzer Schwerin" schreiben muss, empfiehlt es sich beim 1. mal das delete-Device (welches nach 1h automatisch das angelegte Device wieder löscht) manuell unter dem Raum "Unsorted" zu löschen, sodass das Device weiterhin bestehen bleibt!

1.
Nun sollte das Device "mb_Ortsname" im Raum Verkehr weiterhin bestehen bleiben.

2.
In der Routine "checkHTTPMODBlitzer" muss nun noch der Ortsname angepasst werden (zur Zeit steht da fb_Hamburg und mb_Hamburg)

3.
Wenn das erledigt ist, sollte es reichen, wenn man Blitzer oder Feste Blitzer schreibt und man erhält dann automatisch die Liste für den unter Punkt 2 eingetragenen Ort.

4.
Durch diesen fest ausgewählten Ort kann man nun z.B. sich automatisch eine Nachricht zusenden lassen, wenn man das Haus verlässt (Bluetooth Anwesenheit, o.ä. Anwesenheitserkennungen...)
Dazu benötigt man nur noch ein Statement an der jeweiligen Stelle. Hier muss nur noch die Variable $nr durch die Telegram ID ersetzt werden. Dies kann man dynamisch ermitteln oder einfach fest im Quellcode reinschreiben. Je nach dem was man machen möchte!

fhem "set Telegram message \@$nr " .getBlitzer("Blitzer","");


Falls ihr Probleme haben solltet, schauen wir uns das mal genauer an  :)

Gruß
Mathze

Hallo Mathze,

also erstmal TAUSEND DANK für deine gigantische Arbeit!!!!!!! Echt klasse gemacht. Fällt dir eine Möglichkeit ein statt nur einem "Standard-Ort" (aus deinem Beispiel "Schwerin") auch mehrere Orte so anzulegen und eine Nachricht damit zu befüllen? Der Hintergrund ist der, dass ich morgens durch 5 Orte muss und ggf. nicht 5 mal die Nachricht "~Keine Blitzer gefunden~" generieren möchte. Wäre toll wenn du eine Idee hättest.

Und nochmals vielen Dank für deine tolle Arbeit!

t1me2die

Moin Floriky,

bismosa hat hier im Forum basierend auf meiner Idee alles auf Geo-Koordinaten umgebaut, da er wohl so ein ähnliches Problem hatte wie du.
Schau mal hier: https://forum.fhem.de/index.php/topic,90014.0.html

Wenn du einen Koordinatenbereich festlegst, welchen du jeden Tag passierst (deine 5 Ortschaften, die du durchquerst) dann kann man sich recht einfach die die jeweiligen Blitzer mitteilen lassen.

Ich muss zugeben, dass sich meine Routinen für das ermitteln der Blitzer mittlerweile stark verändert haben und ich diese sehr an meine Bedürfnisse (Geofancy, Telegram-Standortbestimmung, feste Orte) angepasst habe.

Ließ Dir am besten mal den o.g. Thread durch, ich denke das sollte so ziemlich das sein, was du brauchst / suchst  ;)

Gruß
Mathze

Floriky

Zitat von: t1me2die am 16 Januar 2019, 12:49:24
Moin Floriky,

bismosa hat hier im Forum basierend auf meiner Idee alles auf Geo-Koordinaten umgebaut, da er wohl so ein ähnliches Problem hatte wie du.
Schau mal hier: https://forum.fhem.de/index.php/topic,90014.0.html

Wenn du einen Koordinatenbereich festlegst, welchen du jeden Tag passierst (deine 5 Ortschaften, die du durchquerst) dann kann man sich recht einfach die die jeweiligen Blitzer mitteilen lassen.

Ich muss zugeben, dass sich meine Routinen für das ermitteln der Blitzer mittlerweile stark verändert haben und ich diese sehr an meine Bedürfnisse (Geofancy, Telegram-Standortbestimmung, feste Orte) angepasst habe.

Ließ Dir am besten mal den o.g. Thread durch, ich denke das sollte so ziemlich das sein, was du brauchst / suchst  ;)

Gruß
Mathze

Hallo Mathze,
vielen Dank für deine Antwort und den Link zum Thread. Werde mich gleich mal ans "Durcharbeiten" machen. Dir einen schönen Tag!

t1me2die

#35
Ganz grob:

Schau auf Google Maps, such Dir deinen Startpunkt raus Lat/Lon.
Such Dir deinen Endpunkt raus Lat/Lon.
Diese vier Koordinaten bilden dann ein Rechteck / Viereck.
Alles was in diesem Bereich gemeldet ist kann man recht einfach per API direkt abfragen:


https://cdn2.atudo.net/api/1.0/vl.php?type=0,1,2,3,4,5,6&box=52.605153,10.224384,52.836461,10.693572


Diesen Link kannst du bsp. als HTTPMOD Device anlegen, als RegEx nimmst du den ganzen String bsp.:

attr HTTPMODNAME reading01Name String
attr HTTPMODNAME  reading01Regex {(.*)}


Damit sollte ein Reading mit dem Namen "String" angelegt werden.
Die Koordinaten im Link findest du im angehängten Bild wieder.
Das Ergebnis (String) ist ein JSON String, den du einfach extrahieren kannst, Schlagwort "expandJSON".

Gruß
Mathze

dieda

Hallo in der Runde,

stehe gerade auf dem Schlauch.

Das hier habe ich in meinem Listing: Internals:
   DEF        5
   FUUID      5cb080bc-f33f-4b3a-1a6c-5787d38be416be41
   NAME       Blitzer_Mainz
   NR         464
   STATE      Defined
   TYPE       Blitzer
   refreshIntervall 5
   tempRadius
   OLDREADINGS:
   READINGS:
     2019-04-12 14:49:59   Anzeige         1
     2019-04-12 15:04:02   NextUpdate      Fri Apr 12 15:09:02 2019
     2019-04-12 14:49:59   html            <html> <p align='left'>Aktuelle Blitzer:<br>00 Mederhof L 75 Max. 100 km/h ( 26.9 km ) !! <br></p></html>
     2019-04-12 15:04:03   lastUpdate      Fri Apr 12 15:04:03 2019
     2019-04-12 15:04:03   status          ok
Attributes:
   Ausgabe    number,{OR,suburb,city_district,town,village,},road,building,[Max.],vmax,[km/h],[(],distanceShort,[km],[)],[!!],newline
   HTML_Before <html> <p align='left'>Aktuelle Blitzer:<br>
   HTML_Without <html> <p align='left'>Keine Blitzer in der Nähe</p></html>
   area_bottomLeft_latitude 48.6846846846847
   area_bottomLeft_longitude 7.51937965734501
   area_topRight_latitude 49.3153153153153
   area_topRight_longitude 8.48062034265499
   createAllReadings 0
   createNoHTML 0
   createUpdateReading 1
   home_latitude 49,9928617
   home_longitude 8,2472526
   icon       message_attention
   radius     35
   room       Blitzer


Der Blitzer, der ausgegeben wird ist allerdings in Baden-Würthenberg, das passt gar nicht. Wo liegt der Fehler?
Komponenten:
Sensoren und Aktoren: FS20, Max!, Zigbee, Zwave
IODev:  Cul1101, MaxLan, ZWAVE, Deconz
Router: KD-Fritte (6360)
Sonstiges: Raspberries,  1x LMS,1 FHEM, 1 x zum Testen,  Logitech-Clients,  Onkyo, SamsungTV, Squeezebox, TabletUIs

bismosa

Hallo!

Ich glaube Dein Beitrag ist im falschen Thread....

home_latitude 49,9928617
home_longitude 8,2472526

Nicht mit Komma, sondern bitte mit Punkt festlegen.

Gruß
Bismosa
1x nanoCUL 433MHz (SlowRF Intertechno) für Fenstersensoren
1x nanoCUL 868Mhz für MAX (9x HT 1xWT)
1x ZigBee CUL
Weiteres: Squeezebox server, Kindle Display, ESP8266, Löterfahrung, ...