Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Tester
    4. [Neuer Adapter] radar-trap

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [Neuer Adapter] radar-trap

    This topic has been deleted. Only users with topic management privileges can see it.
    • O
      Oli @carsten04 last edited by

      @carsten04
      Sorry, ich muss gleich noch eine Frage nach schieben.
      Wäre es nicht sinnvoller die Profile "Fahren" und "Fahrverkehr" in einem Profil zu Vereinen?

      In diesem Profil könnten dann beide Datenpunkte "duration" und "duration traffic" mit aufnehmen

      carsten04 1 Reply Last reply Reply Quote 0
      • carsten04
        carsten04 Developer @Oli last edited by carsten04

        @oli Das geht von der Systhematik her nicht. Die Profile generieren unterschiedliche Routen und müssen immer separat betrachtet werden. Du kannst aber die Route zweimal mit unterschiedlichem Profil anlegen und hast dann im Objektbaum alles sauber strukturiert.

        O 1 Reply Last reply Reply Quote 0
        • O
          Oli @carsten04 last edited by

          @carsten04
          danke für deine Antwort.

          Ein paar Fragen bzw. Anregungen habe ich noch:

          1. Den Streckenname in einen extra Datenpunkt aufnehmen, dann könnte man diesen direkt in die VIS einbinden
          2. Ist es möglich aus der Api eine Wegbeschreibung auszulesen und aufzunehmen?
          3. Kann ich für eine bestimmte Strecke, eine feste Route hinterlegen (von, über, nach)?
          4. könnte man im Map-Widget, für den Start- und Endpunkt frei wählbare Symbole einfügen (ähnlich bei beim Open Street Map Widget)?
          carsten04 1 Reply Last reply Reply Quote 0
          • carsten04
            carsten04 Developer @Oli last edited by

            @oli
            zu 1) Das läßt sich einfach umsetzen, kommt also demnächst.
            zu 2), 3), 4) Das ist mit mehr Aufwand verbunden und wäre ein Thema für eine der nächsten Versionen.

            Ich will den Adapter erstmal als Beta via NPM mit den aktuellen Funktionen plus 2-3 kleine Erweiterungen zur Verfügung stellen, danach geht es dann weiter.

            1 Reply Last reply Reply Quote 1
            • carsten04
              carsten04 Developer last edited by

              @oli @oxident Es gibt auf GitHub eine neue Version mit folgenden Anpassungen zum testen:

              1. VIS ohne Fehlermeldung, wenn Instanz nicht aktiv, oder noch nicht angelegt wurde. Widgets zeigen passende Meldung.
              2. Das List-Widget blendet die Hindernisüberschrift aus, wenn für den Typ keine Hindernisse vorhanden sind, oder der Typ abgewählt wurde.
              3. Im Objektbaum unter direction-infos gibt es jetzt den State description für jede Route.
              1 Reply Last reply Reply Quote 1
              • O
                Oli last edited by

                @carsten04
                muss vorher deinstalliert werden, oder kann man darüber installieren?

                carsten04 1 Reply Last reply Reply Quote 0
                • carsten04
                  carsten04 Developer @Oli last edited by

                  @oli Lieber erst sauber deinstallieren. Es müsste zwar auch so gehen, habe ich aber noch nicht ausreichend getestet.

                  O 2 Replies Last reply Reply Quote 0
                  • O
                    Oli @carsten04 last edited by

                    @carsten04
                    bei mir funktioniert alles wie es soll, danke nochmal für deine investierte Arbeit

                    1 Reply Last reply Reply Quote 0
                    • O
                      Oli @carsten04 last edited by

                      @carsten04
                      mir ist noch aufgefallen, dass dein Adapterloge immer noch den VIS- Editor in der Übersicht vom ioBroker überdeckt

                      efdddf39-5c3d-4c51-b40d-c20f07254c4e-image.png

                      1 Reply Last reply Reply Quote 0
                      • K
                        Krys last edited by Krys

                        Bei mir lässt sich der Adapter gar nicht erst installieren von github. Das ganze bleibt bei:

                        ost.raspberrypi
                        2023-02-15 12:36:25.452	info	iobroker NPM version: 8.19.3Installing Steiger04/ioBroker.radar-trap2#73c83b67a16941cb393b3bead33eba758621d044... (System call)
                        host.raspberrypi
                        2023-02-15 12:36:21.991	info	iobroker install Steiger04/ioBroker.radar-trap2#73c83b67a16941cb393b3bead33eba758621d044
                        host.raspberrypi
                        2023-02-15 12:36:09.753	info	iobroker url https://github.com/Steiger04/ioBroker.radar-trap2 --host raspberrypi --debug
                        

                        hängen und nichts weiter passiert. Ggfs. schmiert noch der ioBroker ab.
                        Sonst bisher keinerlei Probleme mit dem ioBroker gehabt.

                        Edit: Lief jetzt doch durch nachm 6. Mal. Keine Ahnung..

                        1 Reply Last reply Reply Quote 0
                        • K
                          Krys last edited by

                          Gibt es eine Möglichkeit, die Straßennamen / Geopositonen von den Blitzern extrahiert in eigenen Datenpunkte zu bekommen oder weiß jemand einen Weg über bspw. Blockly, um an die Daten ranzukommen?

                          1 Reply Last reply Reply Quote 0
                          • carsten04
                            carsten04 Developer last edited by

                            Es gibt eine neue Version auf GitHub mit zwei Änderungen:

                            1. Der Adapter überschreibt in der Übersicht nicht mehr den VIS-Editor
                            2. Es gibt bei der Anlage der Route das Eingabefeld maximaler Trap-Abstand (default: 10m). Mögliche Werte: 1m bis 100m. Dies gibt den maximalen Abstand der Hindernisse senkrecht zur Route an. Hintergrund: die Hindernisse kommen von der Atudo-API und kennen keine Richtung (Start-Ziel, Ziel-Start). Wählt man den Abstand geschickt (möglichst gering) bleiben tatsächlich nur Hindernisse in Fahrtrichtung übrig. Bei einem zu geringen Wert können aber auch Hindernisse verloren gehen. Der Wert 10m ist ein guter Kompromiss, kann aber an die individuelle Strecke und die eigene Erfahrung angepasst werden.
                            O 1 Reply Last reply Reply Quote 0
                            • O
                              Oli @carsten04 last edited by

                              @carsten04
                              Danke, werde ich bei Gelegenheit testen und berichten.
                              Was ist eigentlich der genaue Unterschied zwischen den Einstellungen "Fahren" und "Fahrverkehr"?

                              O 1 Reply Last reply Reply Quote 0
                              • O
                                oxident @Oli last edited by

                                @oli Ich glaube, "Fahrverkehr" ist wirklich die Route inkl. aktuellem/historischen Verkehr. Will sagen, er nimmt Routen, auf denen weniger los ist und man ggf. schneller an's Ziel kommt.

                                1 Reply Last reply Reply Quote 0
                                • carsten04
                                  carsten04 Developer last edited by

                                  @Oli Es ist so wie @oxident geschrieben hat. Wenn Du bei der Eingabe über die Profilbegriffe hoverst, dann bekommst Du jeweils eine kurze Erklärung angezeigt.

                                  1 Reply Last reply Reply Quote 0
                                  • carsten04
                                    carsten04 Developer last edited by carsten04

                                    Info: ich habe den Adapter wieder in radar-trap umbenannt. Bitte bei einer Neuinstallation beachten.

                                    O 1 Reply Last reply Reply Quote 0
                                    • O
                                      Oli @carsten04 last edited by Oli

                                      @carsten04
                                      ich habe gerade ein kleines Verständnisproblem. Es wird eine Route abgefragt, diese wirft folgendes Ergebnis aus:
                                      1772d43d-c2ac-4433-b1f2-a5e1c162b8b2-image.png

                                      Wenn ich die gleiche Strecke über Google eingebe, zeigt er mir folgendes:
                                      3cb810af-7741-4ea5-819c-5c1833283c1b-image.png

                                      Wenn ich die angezeigte Verzögerung aus deinem Adapter, mit der Fahrzeit aus deinem Adapter addiere, komme ich ca. auf die gleiche Zeit wie Google. Kann es sein, dass hier etwas noch nicht passt?

                                      Hier die Adaptereinstellung der Strecke:
                                      9cbd93a7-e661-421b-b6cd-597721001ef8-image.png

                                      Wenn ich eine Strecke über VIS manuell abfragen möchte, muss ich dann den Datenpunkt "run" oder "resume" triggern?

                                      Nashra carsten04 2 Replies Last reply Reply Quote 0
                                      • Nashra
                                        Nashra Most Active Forum Testing @Oli last edited by

                                        @oli sagte in [Neuer Adapter] radar-trap2:

                                        @carsten04
                                        ich habe gerade ein kleines Verständnisproblem. Es wird eine Route abgefragt, diese wirft folgendes Ergebnis aus:
                                        1772d43d-c2ac-4433-b1f2-a5e1c162b8b2-image.png

                                        Würdest Du die VIS teilen und mir sagen wie Du das mit den Daten im oberen Bereich gemacht hast.
                                        Vielen Dank

                                        ? O 2 Replies Last reply Reply Quote 0
                                        • ?
                                          A Former User @Nashra last edited by A Former User

                                          Bin zufällig auf den Adapter gestossen und finde die Arbeit genial. Absolut klasse, dass sich immer wieder Leute finden, die sich in solche Sachen vollends reinknien - zum wohle der Broker Gemeinde. Werde den Adapter in den nächsten Tagen testen.
                                          Edit: Mein Anliegen ist gelöst. Gottseidank gibt es bei der Programmierung immer mindestens 100 andere Wege 😉

                                          1 Reply Last reply Reply Quote 0
                                          • O
                                            Oli @Nashra last edited by

                                            @nashra
                                            klar, ich verwende momentan auch noch den Roadtraffic Adapter, dieser ist teilweise noch in den Widgets und im Script hinterleg, kannst du aber ersetzten. Voraussetzung für die VIS ist folgender Adapter:
                                            5b17ba8e-7cfe-4fb7-a756-e9725d5fcd8e-image.png
                                            VIS:


                                            Routenplanung_Route1_Karte.txt
                                            Routenplanung_Route1_Info.txt
                                            Routenplanung_Route1_Fahrzeit.txt
                                            Routenplanung_Route1.txt

                                            Das Script ist noch in der Testphase:

                                            /************************************************************************************************************************************************************************
                                            Version: 1.0.0
                                            created by Oliver Böhm 13.02.2023, 14:18
                                            Dieses Skript erzeugt Datenpunkte um Informationen im VIS mit den Material Design Widgets darzustellen 
                                            =========================================================================================================================================================================
                                            !!! Voraussetzungen !!!
                                            * Material Design Widgets               >= 0.3.6
                                            * Javascript Adapter                    >= 4.6.1
                                            * RoadTraffic Adapter                   >= 0.2.0
                                            * Radar-Trap Adapter                   >= 1.0.0
                                            =========================================================================================================================================================================
                                            --- Links ---
                                            * Support:          https://forum.iobroker.net/topic/29665/material-design-widgets-list-widget
                                            =========================================================================================================================================================================
                                            --- Changelog ---
                                            * 1.0.0:            Initial release
                                            ************************************************************************************************************************************************************************/
                                            
                                            // Skript Einstellungen *************************************************************************************************************************************************
                                            let idDatenpunktPrefix = '0_userdata.0';                                                                    // '0_userdata.0' or 'javascript.x'
                                            let idDatenPunktStrukturPrefix = 'Routenplanung.Route';                                                     // Struktur unter Prefix
                                            
                                            const checkInterval = 11;                                                                                   // Jede Stunde in der Minute ausführen
                                            
                                            let idRadarTrap = 'radar-trap.0';
                                            let idRoadTraffic = 'roadtraffic.0';
                                            
                                            let routeArbeit = 'von Zuhause zur Arbeit';
                                            
                                            let stauStufe1AbMinuten = 5;
                                            let stauStufe2AbMinuten = 10;
                                            let stauStufe3AbMinuten = 15; 
                                            // **********************************************************************************************************************************************************************
                                            
                                            // Selector für alle Routen
                                            let devices = $(`[id=${idRadarTrap}.*.direction-0.duration]`);
                                            
                                            // Beim skript start ausführen
                                            createInfo();
                                            
                                            // Ausführen bei manueller Abfrage
                                            on({id:`${idRadarTrap}.aWQ61Y--DOoZXui1oGuAX.cron-job.resume`, change: 'ne', val: true}, createInfo);
                                            
                                            // Funktion createInfo alle x Sekunden ausführen
                                            schedule(checkInterval  + ' * * * * ', createInfo);
                                            
                                            // auf Fahrzeitänderungen hören
                                            let durationSelector = `[id=${idRadarTrap}.*.direction-0.duration]`;
                                            let durationList = $(durationSelector);
                                            if (durationList.length === 0) {
                                               // Fehlermeldung ausgeben, wenn selector kein result liefert
                                               console.error(`no result for selector '${durationSelector}'`)
                                            } else {
                                               // listener nur für Änderung bei Fahrzeiten
                                               durationList.on(createInfo);
                                            }
                                            
                                            function createInfo() {
                                                   let anzahl = 0;
                                               for (var i = 0; i <= devices.length - 1; i++) {        
                                                   let staustufe = 0;
                                                   let staustufeText = 'Frei';
                                                   let stau = false;
                                                   let via = '';
                                                   let blitzer = '';
                                                   let blitzerAnzahl = 0
                                                   let verkehrsinfo = '';
                                                   let verkehrsinfoAnzahl = 0;
                                                   let wetterinfo = '';
                                                   let wetterinfoAnzahl = 0;
                                                   let meldung = '';
                                                   let meldungAnzahl = 0;
                                            
                                                   let id = devices[i].replace('.direction-0.duration', '');
                                                   let name = getObject(id).common.name;        
                                                   id = `${id}.direction-0`
                                                        
                                            
                                                   if (existsState(`${idRoadTraffic}.${name}.route.duration`)) {            
                                                       anzahl = anzahl + 1;
                                                       let fahrzeit = Math.ceil(getState(`${id}.duration`).val / 60);
                                                       let fahrzeitschnitt = Math.ceil(getState(`${idRoadTraffic}.${name}.route.duration`).val / 60);
                                                       let delta = fahrzeit - fahrzeitschnitt;       
                                                       
                                                       let distanz = getState(`${id}.distance`).val;                                  
                                                       
                                                       if (getState(`${id}.fixedTraps`).val.length === 0 && getState(`${id}.mobileTraps`).val.length === 0){
                                                           blitzer = 'Keine Informationen zu Geschwindikeits-, oder Abstandsmessungen vorhanden!';
                                                           blitzerAnzahl = 0;
                                                       } else {
                                                           blitzer = 'Ja';
                                                           blitzerAnzahl = getState(`${id}.fixedTraps`).val.length + getState(`${id}.mobileTraps`).val.length;
                                                       }          
                                                       
                                                       if (getState(`${id}.accidents`).val.length === 0 && getState(`${id}.objects`).val.length === 0 && getState(`${id}.roadWorks`).val.length === 0 && getState(`${id}.trafficJams`).val.length === 0){
                                                           verkehrsinfo = 'Keine Informationen zu Staus, Baustellen, Unfällen, oder Gegenständen vorhanden!';
                                                           verkehrsinfoAnzahl = 0;
                                                       } else {
                                                           verkehrsinfo = 'Ja';
                                                           verkehrsinfoAnzahl = getState(`${id}.accidents`).val.length + getState(`${id}.objects`).val.length + getState(`${id}.roadWorks`).val.length + getState(`${id}.trafficJams`).val.length;
                                                       }
                                            
                                                       if (getState(`${id}.fog`).val.length === 0 && getState(`${id}.sleekness`).val.length === 0){
                                                           wetterinfo = 'Keine Informationen zu wetterbedingten Störungen vorhanden!';
                                                           wetterinfoAnzahl = 0;
                                                       } else {
                                                           wetterinfo = 'Ja';
                                                           wetterinfoAnzahl = getState(`${id}.fog`).val.length + getState(`${id}.sleekness`).val.length;
                                                       }                       
                                            
                                                       if (name == routeArbeit) {                
                                                           if (distanz >= 17500) {
                                                               via = `über A73`;                    
                                                           } else if (distanz >= 15000 && distanz < 16000) {
                                                               via = `über Münchner Str.`;
                                                           } else if (distanz >= 17000 && distanz < 17500) {
                                                               via = `über Kornburg`;                   
                                                           } else if (distanz >= 14000 && distanz < 15000) {
                                                               via = `über Langwasser`;                   
                                                           } else if (distanz >= 16000 && distanz < 17000) {
                                                               via = `über Trierer Str.`;                   
                                                           }
                                            
                                                           if (blitzer == 'Ja' || verkehrsinfo == 'Ja' || wetterinfo == 'Ja') {
                                                               meldungAnzahl = blitzerAnzahl + verkehrsinfoAnzahl + wetterinfoAnzahl
                                                               
                                                               if (meldungAnzahl == 1) {
                                                                   meldung = meldungAnzahl  + ' Verkehsmeldung!';
                                                               } else {
                                                                   meldung = meldungAnzahl  + ' Verkehrsmeldungen!';
                                                               }
                                            
                                                           } else {
                                                               meldung = 'Keine Verkehrsmeldungen!'
                                                           }
                                                           
                                                           mySetState(`${idDatenpunktPrefix}.${idDatenPunktStrukturPrefix}${anzahl}.Via`, via, 'string', `Fahrweg Über auf der Route ${name}`);
                                                           mySetState(`${idDatenpunktPrefix}.${idDatenPunktStrukturPrefix}${anzahl}.Info`, meldung, 'string', `Informationen auf der Route ${name}`);
                                                       }                                 
                                            
                                                       if (delta >= stauStufe1AbMinuten) {
                                                           stau = true; 
                                                           staustufe = 1;
                                                           staustufeText = 'Erhöhte Verkehrsdichte';
                                                       }
                                                       if (delta >= stauStufe2AbMinuten) {
                                                           staustufe = 2;
                                                           staustufeText = 'Hohe Verkehrsdichte';
                                                       }
                                                       if (delta >= stauStufe3AbMinuten) {
                                                           staustufe = 3;
                                                           staustufeText = 'Stau';
                                                       }            
                                            
                                                       mySetState(`${idDatenpunktPrefix}.${idDatenPunktStrukturPrefix}${anzahl}.Stau`, stau, 'boolean', `Stau auf der Route ${name}`);
                                                       mySetState(`${idDatenpunktPrefix}.${idDatenPunktStrukturPrefix}${anzahl}.Staustufe`, staustufe, 'number', `Staustufe auf der Route ${name}`);
                                                       mySetState(`${idDatenpunktPrefix}.${idDatenPunktStrukturPrefix}${anzahl}.StaustufeText`, staustufeText, 'string', `Staustufe in Worten auf der Route ${name}`);
                                                       mySetState(`${idDatenpunktPrefix}.${idDatenPunktStrukturPrefix}${anzahl}.Delta`, delta, 'number', `Fahrzeitdifferenz auf der Route ${name}`);
                                                       mySetState(`${idDatenpunktPrefix}.${idDatenPunktStrukturPrefix}${anzahl}.Fahrzeit`, fahrzeit, 'number', `Fahrzeit in Minuten auf der Route ${name}`);           
                                            
                                                       mySetState(`${idDatenpunktPrefix}.${idDatenPunktStrukturPrefix}${anzahl}.Blitzerinfo`, blitzer, 'string', `Blitzer auf der Route ${name}`);
                                                       mySetState(`${idDatenpunktPrefix}.${idDatenPunktStrukturPrefix}${anzahl}.BlitzerinfoAnzahl`, blitzerAnzahl, 'number', `Anzahl Blitzer auf der Route ${name}`);
                                                       mySetState(`${idDatenpunktPrefix}.${idDatenPunktStrukturPrefix}${anzahl}.Verkehrsinfo`, verkehrsinfo, 'string', `Verkehrsinformationen auf der Route ${name}`);
                                                       mySetState(`${idDatenpunktPrefix}.${idDatenPunktStrukturPrefix}${anzahl}.VerkehrsinfoAnzahl`, verkehrsinfoAnzahl, 'number', `Anzahl Verkehrsinformationen auf der Route ${name}`);
                                                       mySetState(`${idDatenpunktPrefix}.${idDatenPunktStrukturPrefix}${anzahl}.Wetterinfo`, wetterinfo, 'string', `Wetterinformationen auf der Route ${name}`);
                                                       mySetState(`${idDatenpunktPrefix}.${idDatenPunktStrukturPrefix}${anzahl}.WetterinfoAnzahl`, wetterinfoAnzahl, 'number', `Anzahl Wetterinformationen auf der Route ${name}`);
                                                   }
                                               }        
                                            }
                                            
                                            function mySetState(id, val, type, name, write = true) {
                                               if (existsState(id)) {
                                                   setState(id, val, true);
                                               } else {
                                                   createState(id, {
                                                       'name': name,
                                                       'type': type,
                                                       'read': true,
                                                       'write': write
                                                   }, function () {
                                                       setState(id, val, write);
                                                   });
                                               }
                                            }
                                            
                                            
                                            

                                            1 Reply Last reply Reply Quote 1
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            768
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            26
                                            251
                                            26470
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo