NEWS
#Stauerkennung #DieAutobahn
-
@Rushmed
Danke für die Rückmeldug!Ja, das ist beabsichtigt. Dann ärgere ich mich nicht weil ich vor einigen Stunden eine Meldung bekam, diese aber vergaß und dann doch wieder im Stau stecke!
Eventuell baue ich noch einen schalter ein um Mehrfachsendungen optional zu vermeiden.
Ich teste gerade noch an einer anderen Version in der man zwei startzeiten eintragen kann. Um die startzeiten wird dann zufällig +-2 Minuten gestartet. un der Intervall variert um +-0,5 Minuten.
Bin gerade durch Zufall über diesen Thread gestolpert. Ich habe mal einen Adapter radar-trap geschrieben, der für beliebige Strecken und Gebiete alle möglichen Infos zur Verfügung stellt. Vielleicht geht das ja in die Richtung was ihr braucht.
-
Bin gerade durch Zufall über diesen Thread gestolpert. Ich habe mal einen Adapter radar-trap geschrieben, der für beliebige Strecken und Gebiete alle möglichen Infos zur Verfügung stellt. Vielleicht geht das ja in die Richtung was ihr braucht.
@carsten04
Schönes Teil, leider habe ich den Adapter nicht mit Stauwarnungen in Verbindung gebracht!
Naja, den werde ich auch testen!
Darf ich fragen woher die daten Stammen? Warnt der auch vor Sperrung und langsamem Verkehr? -
@carsten04
Schönes Teil, leider habe ich den Adapter nicht mit Stauwarnungen in Verbindung gebracht!
Naja, den werde ich auch testen!
Darf ich fragen woher die daten Stammen? Warnt der auch vor Sperrung und langsamem Verkehr?@Hotze Daten kommen von `https://cdn2.atudo.net/api/4.0/pois.php und Mapbox. Die atudo.net-Daten werden z.B. auch von blitzer.de genutzt. Mapbox brauche ich für die Routen.
-
@Hotze Daten kommen von `https://cdn2.atudo.net/api/4.0/pois.php und Mapbox. Die atudo.net-Daten werden z.B. auch von blitzer.de genutzt. Mapbox brauche ich für die Routen.
@carsten04
Vielen Dank!
Das Ist echt an mir vorbei gegangen. Die Scheinen aber fast genau so vorzugehen wie ich (box= lat1,lon1,lat2,lon2; rechteckiger Kartenausschnitt)
Da kann ich mir was basteln!
Vermutlich nutze ich einfach deinen adapter. -
@hotze
Wenn ich versuche die JSON per Blockly zu zerlegen.
Etwa so:

Kommt immer:
javascript.0 19:15:20.474 error Cannot parse "0_userdata.0.Verkehr_JSON": SyntaxError: Unexpected non-whitespace character after JSON at position 1 (line 1 column 2)Können die Infomeldungen im LOG auch auf Debug umgestellt werden?
Wenn ichs so probiere kommt immer "undefined":

-
@hotze
Wenn ich versuche die JSON per Blockly zu zerlegen.
Etwa so:

Kommt immer:
javascript.0 19:15:20.474 error Cannot parse "0_userdata.0.Verkehr_JSON": SyntaxError: Unexpected non-whitespace character after JSON at position 1 (line 1 column 2)Können die Infomeldungen im LOG auch auf Debug umgestellt werden?
Wenn ichs so probiere kommt immer "undefined":

@Rushmed
Also mit Blockly sind JSON ausgaben etwas tricky, du musst das erst "parsen"!
Ich konnte dein Problem auch mit anderen JSON Datenpunkten nachstellen!Funktioniert hatte es dann so:

Dass heißt du MUSST aktiv triggern!
Es geht aber auch anders, das ist aber ein wenig umständlich. Du musst erst zu einem String konvertieren und kannst diesen dann auswerten!
Weil ein Bild mehr als Worte sagt, hier (du benötigst NUR den letzten Debug-Block, der rest ist Erklärung):

- Die ersten beiden blöcken geben eine Zahl zurück (Infozeile 2 und 3).
- Wenn du dir den Text dazwischen ausgeben lassen willst geht das mit dem dritten Debug-Block. Unter Umständen kommt dann aber zuviel aus dem String (Infozeile 4)!
- Im vierten Block ist dann auch das trimming drin!
Hier die Erklärung was der Block macht:
Im Text Konvertiert nach String bekommt jedes Zeichen eine Positionsnummer (aufsteigend).
Ausgegeben werden Positionsnummern mit denen man auch rechnen kann.
Damit kann die genaue Positionsnummer zwischen zwei wiederkehrenden begriffen bestimmt werden. Wenn das Ergebnis nicht ganz passt kann man noch positionen nach rechts (+) und links (-) gerückt werden. -
Ok, danke das funktioniert.
In anderen JSON kann ich aber einfach über den Baustein:
die Informationen extrahieren.
Bspw diese JSON aus dem Alexa Adapter:
{"name":"Küche Studio","serialNumber":"G2A0XX47103500JT","summary":"licht aus","creationTime":1767132098880,"domainApplicationId":"","domainApplicationName":"","cardContent":"","card":"","answerText":"","utteranceType":"DEVICE_ARBITRATION","domain":"","intent":"Unknown"}
Das ist doch bestimmt so ein Object/String/JSO-was weiß ich was Ding.
Ich bin begeistert von deinem Script weil es einfach ist!
Der Radar-Trap Adapter bietet sauviele (für mich zuviele) Informationen die sicher mit einer VIS toll habdlebar sind.
Ich bekomme dort mit zwei Routen und einem Gebiet 782 DPs und der rüsslt mir 150 MB RAM weg. Das ist Overkill für meine Anwendung.
Das brauche ich alles nicht.
Ich möchte hauptsächlich Infos zu Verkehrsproblemen für mein Strecke zuhause --> Arbeit und andersrum haben. Da passt das was dein Script leistet schon gut.Was ich brauche ist eine per Blockly gut handlebare JSON.
Damit kann ich meine Alexa Morgenroutine genauso gut füttern wie eine Telegram Meldung zum Feierabend.Wie gesagt, es wäre toll wenn man Richtungen unterscheiden könnte, keine Ahnung ob das geht.
Die Zeilenumbrüche (\n) brauche ich in der JSON nicht. Gerne können dafür weitere Atrribute dazu kommen, wie im Original mit "description 1....x".
Die Blitzer Interessieren mich sowiesonicht und meine Strecke besteht zu 90% aus Autobahn.
Danke vorab und einen guten Rutsch!
-
@hotze
Wenn ich versuche die JSON per Blockly zu zerlegen.
Etwa so:

Kommt immer:
javascript.0 19:15:20.474 error Cannot parse "0_userdata.0.Verkehr_JSON": SyntaxError: Unexpected non-whitespace character after JSON at position 1 (line 1 column 2)Können die Infomeldungen im LOG auch auf Debug umgestellt werden?
Wenn ichs so probiere kommt immer "undefined":

@Rushmed sagte in #Stauerkennung #DieAutobahn:
@hotze
Wenn ich versuche die JSON per Blockly zu zerlegen.
Etwa so:

Die Objekt ID ist ja ein String (daher ist der Baustein ja auch grün, wie alle Strings). Das ist also kein gültiges JSON. Der
state.valwird ja JSON sein. Also "Wert von Objekt ...". So wie Du es unten zeigst.@Rushmed sagte in #Stauerkennung #DieAutobahn:
Ok, danke das funktioniert.
In anderen JSON kann ich aber einfach über den Baustein:
die Informationen extrahieren.
So ist es richtig. Bitte kein komischen Teilstrings suchen und extrahieren. So arbeitet man nicht mit JSON. Zeig am besten mal das JSON und was Du haben möchtest. Dann kann man auch helfen die Eigenschaften zu extrahieren. Du hast ja nur die Objekt-Definition aus der Objekt-Datenbank geteilt. Nicht den State.
-
@Rushmed sagte in #Stauerkennung #DieAutobahn:
@hotze
Wenn ich versuche die JSON per Blockly zu zerlegen.
Etwa so:

Die Objekt ID ist ja ein String (daher ist der Baustein ja auch grün, wie alle Strings). Das ist also kein gültiges JSON. Der
state.valwird ja JSON sein. Also "Wert von Objekt ...". So wie Du es unten zeigst.@Rushmed sagte in #Stauerkennung #DieAutobahn:
Ok, danke das funktioniert.
In anderen JSON kann ich aber einfach über den Baustein:
die Informationen extrahieren.
So ist es richtig. Bitte kein komischen Teilstrings suchen und extrahieren. So arbeitet man nicht mit JSON. Zeig am besten mal das JSON und was Du haben möchtest. Dann kann man auch helfen die Eigenschaften zu extrahieren. Du hast ja nur die Objekt-Definition aus der Objekt-Datenbank geteilt. Nicht den State.
@haus-automatisierung @rushmed
Das JSON sieht so aus:
Ich habe einen Abschnitt mit zwei meldungen erstellt, denn das kann ja mal vorkommen!
Was Blocklys an geht bin ich aber auch kein Held!Man könnte im Script einstellen für jede meldung einen Datenpunkt zu erzeugen. Oder auch ein Verzeichnis pro Meldung und dort für jeden Punkt im JSON einen Datenpunkt.
Das würde aber wiederum nicht so sparsam sein wie ich es gerne hätte. -
@haus-automatisierung @rushmed
Das JSON sieht so aus:
Ich habe einen Abschnitt mit zwei meldungen erstellt, denn das kann ja mal vorkommen!
Was Blocklys an geht bin ich aber auch kein Held!Man könnte im Script einstellen für jede meldung einen Datenpunkt zu erzeugen. Oder auch ein Verzeichnis pro Meldung und dort für jeden Punkt im JSON einen Datenpunkt.
Das würde aber wiederum nicht so sparsam sein wie ich es gerne hätte.@Hotze sagte in #Stauerkennung #DieAutobahn:
Was Blocklys an geht bin ich aber auch kein Held!
Das kann man ja lernen. Soll ja ganz ausführlicher Lerninhalte geben ;)
Das ist ein Array aus Objekten. Also erstmal über den Index zugreifen:
0.roadbzw.1.road. Alternativ mit einer Schleife über alle Objekte gehen:
-
So!
Nun hatte ich einige Zeit und habe mal ein echtes Durcheinander veranstaltet, so dass nur der Kern des Eigendlichen Scriptes übrig blieb!Ich habe es ordentlich erweitert:
- Zeitfenster (Uhrzeiten):
-
- Startzeitfenster zwischen zwei Uhrzeiten Vormittags und nachmittags, bzw. Fenster 1 und 2
-
- Fester Stop für Vormittags und Nachmittags
- "Jitter" der im gewählten Startzeitsfenster variiert
- "Jitter" der das Intervall (15min) um +- 30 Sekunden variiert
- Richtung in der Meldung und den Datenpunkten (im JSON unter subtitel)
Zumindest lief dieses Script bei mir fehlerfrei durch:
Mit der Variation sollten die Abfragen auf die API gut verteilt sein!
So und nun wird gefeiert! Guten rutsch wünsche ich Euch!
-
@Hotze sagte in #Stauerkennung #DieAutobahn:
Was Blocklys an geht bin ich aber auch kein Held!
Das kann man ja lernen. Soll ja ganz ausführlicher Lerninhalte geben ;)
Das ist ein Array aus Objekten. Also erstmal über den Index zugreifen:
0.roadbzw.1.road. Alternativ mit einer Schleife über alle Objekte gehen:
Frohes Neues meine Herren!
@haus-automatisierung Was muss ich denn in dem Blockly als Liste setzen?
So funktionierts schonmal nicht:

DAnke vorab.@hotze Ich beginne heute Abend den Test des neuen Scripts. Danke schonmal!
-
Frohes Neues meine Herren!
@haus-automatisierung Was muss ich denn in dem Blockly als Liste setzen?
So funktionierts schonmal nicht:

DAnke vorab.@hotze Ich beginne heute Abend den Test des neuen Scripts. Danke schonmal!
@Rushmed sagte in #Stauerkennung #DieAutobahn:
@haus-automatisierung Was muss ich denn in dem Blockly als Liste setzen?
Na das JSON, welches in ein Objekt gewandelt wurde (unter Konvertierung). Und dann hast Du innerhalb der Schleife jedes Listenelement (ist ja dann auch ein Objekt), von welchem man sich das Attribut holen kann.

-
Perfekt, das klappt. Danke!
-
@hotze Hab das Script gestartet.
Muss hier etwas angepasst werden:Zeitfenster Konfiguration ========================= Format: "HH:MM" (24h) - morningStart..morningStartWindowEnd: Startfenster morgens (zufälliger Start) - morningStop: feste Stoppzeit morgens - afternoonStart..afternoonStartWindowEnd: Startfenster nachmittags (zufälliger Start) - afternoonStop: feste Stoppzeit nachmittagsIch hoffe die Stoppzeiten bedeuten nicht dass von da an keine Meldungen mehr kommen. Sonst müsste ich die anpassen.
Können die Infomeldungen im Debug bitte per Schalter im Script auf debug umgestellt werden? Langfristig interessieren mich nur Fehler und Warnungen.
Danke vorab.
-
@hotze Hab das Script gestartet.
Muss hier etwas angepasst werden:Zeitfenster Konfiguration ========================= Format: "HH:MM" (24h) - morningStart..morningStartWindowEnd: Startfenster morgens (zufälliger Start) - morningStop: feste Stoppzeit morgens - afternoonStart..afternoonStartWindowEnd: Startfenster nachmittags (zufälliger Start) - afternoonStop: feste Stoppzeit nachmittagsIch hoffe die Stoppzeiten bedeuten nicht dass von da an keine Meldungen mehr kommen. Sonst müsste ich die anpassen.
Können die Infomeldungen im Debug bitte per Schalter im Script auf debug umgestellt werden? Langfristig interessieren mich nur Fehler und Warnungen.
Danke vorab.
Der Teil zwischen /* und */ ist Auskommentiert. Was bedeutet, dass nicht ausgeführt wird! Es ist quasi nur die Erklärung:
/* ========================= Zeitfenster Konfiguration ========================= Format: "HH:MM" (24h) - morningStart..morningStartWindowEnd: Startfenster morgens (zufälliger Start) - morningStop: feste Stoppzeit morgens - afternoonStart..afternoonStartWindowEnd: Startfenster nachmittags (zufälliger Start) - afternoonStop: feste Stoppzeit nachmittags */Direkt darunter solltest du etwas eintragen!
Zwei Startfenster in denen der 15 Minuten Zyklus random startet.
Sowie die jeweiligen Endzeiten.Ich brauche nach 16:00 ihr keine Meldungen bis 5:00 Uhr. Weil ich dann Zuhause bin.
Zwischen 7:30 und 13:00 Uhr benötige ich keine Meldungen weil ich auf der Arbeit bin.const morningStart = "04:58"; // frühester Startzeitpunkt morgens (Startfenster beginnt) const morningStartWindowEnd = "05:02"; // spätester Startzeitpunkt morgens (Startfenster endet) const morningStop = "07:30"; // feste Stoppzeit morgens const afternoonStart = "12:58"; // frühester Startzeitpunkt nachmittags (Startfenster beginnt) const afternoonStartWindowEnd = "13:02"; // spätester Startzeitpunkt nachmittags (Startfenster endet) const afternoonStop = "16:00"; // feste Stoppzeit nachmittags