FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Helmi55 am 11 Juni 2022, 13:00:12

Titel: #erledigt# Importe von ioB in FHEM umbenennen
Beitrag von: Helmi55 am 11 Juni 2022, 13:00:12
Hallo und Mahlzeit
da es den Benzinpreismonitor nur für DE gibt habe ich nun auf meinem Testsystem den ioBroker installiert und verwende den fuelpricemonitor Adapter
Ich sende die Werte nach FHEM wo sie auch schön ankommen.
ABER die Felder "Alias" und "Comment" sind leider durch die Importe von ioB besetzt (werden jedesmal überschrieben)

Welche Möglichkeit würde es geben den Importen einen sprechenden Namen zu geben?
Hier mal zwei Screenshots -

Ich könnte für jede Tankstelle eine eigene Gruppe anlegen. Das wäre das einzige was mir einfällt. Aber dann habe ich ja auch die Importgruppe.....
Danke für eure Vorschläge
Gruß
Helmut

Titel: Antw:Importe von ioB in FHEM umbenennen
Beitrag von: betateilchen am 11 Juni 2022, 13:40:47
Warum machst Du den Abruf der Preise nicht direkt in FHEM mit JsonMod?


defmod fuelprice JsonMod https://api.e-control.at/sprit/1.0/search/gas-stations/by-address?latitude=48.14&longitude=16.21&fuelType=SUP&includeClosed=true
attr fuelprice readingList complete()


Die Aufbereitung der readings kannst Du natürlich auch individuell einschränken auf das, was Du wirklich haben möchtest.


attr fuelprice readingList single(jsonPath('$.0.name'),'name_0',-1)\
single(sprintf("%.2f",jsonPath('$.0.prices.0.amount')),'preis_0',-1)
Titel: Antw:Importe von ioB in FHEM umbenennen
Beitrag von: Helmi55 am 11 Juni 2022, 13:54:32
Ok genial
D.h. ioB muss definiert sein und ich hole die Preise von dort ab?

Aber ich stehe noch immer vor dem Problem, wie bekomme ich "sprechende Namen" für die Tankstellen?
Titel: Antw:Importe von ioB in FHEM umbenennen
Beitrag von: betateilchen am 11 Juni 2022, 13:56:03
Zitat von: Helmi55 am 11 Juni 2022, 13:54:32
D.h. ioB muss definiert sein und ich hole die Preise von dort ab?

Nein, Du brauchst keinen ioB. Sowas primitives kriegt FHEM durchaus alleine hin.

Und zur Benennung der Tankstellen - schau mal in meinen letzten Beitrag ich habe da noch was ergänzt.
Das funktioniert natürlich auch für mehrere Tankstellen gleichzeitig (multi()), schau Dir einfach mal die Möglichkeiten von JsonMod an.
Titel: Antw:Importe von ioB in FHEM umbenennen
Beitrag von: Helmi55 am 11 Juni 2022, 13:59:35
Danke.
Bin mir sicher da kommen noch einige Fragen.
Aber bei den Benzinpreisen muss ich informiert sein  :)
Schönen Nachmittag
Helmut
Titel: Antw:Importe von ioB in FHEM umbenennen
Beitrag von: betateilchen am 11 Juni 2022, 15:13:01
Zitat von: Helmi55 am 11 Juni 2022, 13:54:32
wie bekomme ich "sprechende Namen" für die Tankstellen?

zum Beispiel so:


defmod fuelprice JsonMod https://api.e-control.at/sprit/1.0/search/gas-stations/by-address?latitude=48.14&longitude=16.21&fuelType=SUP&includeClosed=true
attr fuelprice readingList multi(jsonPath('$.[*]'),(split(' ',property('name')))[0],property('prices.[0].amount','n/a'))


Titel: Antw:Importe von ioB in FHEM umbenennen
Beitrag von: Helmi55 am 11 Juni 2022, 15:51:09
Danke du bist "Genial" und hilfst auch Nichtwissenden weiter - Danke

Darf ich noch frech fragen: Wie bekomme ich in den "readings" Noch die Adresszeile dazu - denn bei Turmöl gibts zwei..........

Danke
Helmut
Titel: Antw:Importe von ioB in FHEM umbenennen
Beitrag von: betateilchen am 11 Juni 2022, 16:01:50
Zitat von: Helmi55 am 11 Juni 2022, 15:51:09
Wie bekomme ich in den "readings" Noch die Adresszeile dazu - denn bei Turmöl gibts zwei..........

Genau so wie den Preis oder den Namen: über die entsprechende property.
Ein bisschen was darfst Du ruhig auch selbst dazulernen. Mit copy&paste lernt man nix.
Titel: Antw:Importe von ioB in FHEM umbenennen
Beitrag von: Helmi55 am 11 Juni 2022, 16:18:24
ich dachte so:
multi(jsonPath('$.[*]'),(split(' ',property('name'), property('address')))[0],property('prices.[0].amount','n/a'))

Fehlanzeige.....
Titel: Antw:Importe von ioB in FHEM umbenennen
Beitrag von: betateilchen am 11 Juni 2022, 16:49:42
Hast Du denn inzwischen mal in die commandref zu JsonMod geschaut oder machst Du es Dir einfach "bequem"?
Oder in die im Forum und Wiki vorhandenen Beispiele zum Einsatz von JsonMod?

Zitat von: Helmi55 am 11 Juni 2022, 16:18:24
Fehlanzeige.....

Naja, das ist die falsche Syntax für split()

Zitat
multi(jsonPath('$. [ * ] '),(split(' ',property('name')))[0],property('prices.[0].amount','n/a'))

(Achtung: die Leerzeichen um die eckigen roten Klammern musst Du weglassen, die sind nur drin, damit die Forumsoftware den Text nicht verunstaltet)

Syntax von multi() = multi("quelle", readingName, readingWert)

Wenn Du also die Adresse noch im readingName unterbringen möchtest, musst Du das im grün markierten Bereich tun.
Dort kannst Du auch mit perl Funktionen arbeiten. Um Strings zu verbinden, kannst Du beispielsweise mit concat() arbeiten.
Und was Du tun möchtest, ist: "verbinde den Namen der Tankstelle mit ihrer Adresse"

Name der Tankstelle = (split(' ',property('name')))[0]

Die "richtige" property findet man heraus, wenn man sich den JSON output für eine Tankstelle genau anschaut.
Adresse der Tankstelle = property('location.address')

Jetzt aber... los!
Titel: Antw:Importe von ioB in FHEM umbenennen
Beitrag von: Helmi55 am 11 Juni 2022, 17:04:19
Danke für deine Geduld, aber ich bin anscheinend zu blöd dafür......
Habe es nun so
multi(jsonPath('$.[*]'),(split(' ',property('name','location.address')))[0],property('prices.[0].amount','n/a'))

und so versucht
multi(jsonPath('$.[*]'),(split(' ',property('name'),property('location.address')))[0],property('prices.[0].amount','n/a'))

sorry

Helmut
Titel: Antw:Importe von ioB in FHEM umbenennen
Beitrag von: betateilchen am 11 Juni 2022, 17:27:11
Zitat von: betateilchen am 11 Juni 2022, 16:49:42
Name der Tankstelle = (split(' ',property('name')))[0]

Du verstehst das grundlegende Prinzip der Verbindung der benötigten Strings nicht.
Alles was Du an den Namen der Tankstelle anhängen möchtest, muss NACH dem Splitergebnis des Namens stehen.

multi(jsonPath('$.[*]'),concat((split(' ',property('name')))[0],'_',property('location.address')),property('prices.[0].amount','n/a'))

Zitatconcat((split(' ',property('name')))[0],'_',property('location.address'))

Mit concat() werden die drei farbig markierten Teile zum readingName verbunden, der aus dem ersten "Wort" des Stationsnamens (rot), einem Verbindungszeichen (grün) und der Adresse (blau)  besteht.

Und bevor Du fragst: Die weiteren Unterstriche im Straßennamen werden automatisch hinzugefügt, weil Leerzeichen in einem readingName nicht vorkommen dürfen.

Titel: Antw:Importe von ioB in FHEM umbenennen
Beitrag von: Helmi55 am 12 Juni 2022, 12:17:25
Servus und Mahlzeit - schönen Vatertag.
Sorry für die späte Rückmeldung....

Nein ich bin mir sicher ich habs nicht verstanden. Ich dachte es ist einfacher. Ich wollte eigentlich nur die "City" anfügen
Die steckt ja mMn wie die Adresse in "location"
[{"id":1147026,"name":"Turmöl Quick","location":{"address":"Jahnstraße 47","postalCode":"3430","city":"Tulln","latitude":48.3280541,"longitude":16.0449461},"contact":

Habe jetzt 3 Varianten ausprobiert - ohne Erfolg.
multi(jsonPath('$.[*]'),concat((split(' ',property('name')))[0],'_',property('location.address')'_',property('city')),property('prices.[0].amount','n/a'))
multi(jsonPath('$.[*]'),concat((split(' ',property('name')))[0],'_',property('location.address')'_',property('location.city')),property('prices.[0].amount','n/a'))
und
multi(jsonPath('$.[*]'),concat((split(' ',property('name')))[0],'_',property('location.address.city')'_',property('prices.[0].amount','n/a'))

Ich glaube ich bin ein hoffnungsloser Fall 8)

Gruß
Helmut
Titel: Antw:Importe von ioB in FHEM umbenennen
Beitrag von: betateilchen am 12 Juni 2022, 13:01:18
Warum nimmst Du meine Hinweise und meine vorgeschlagenen Lösungswege nicht ernst, sondern versuchst stattdessen weiterhin, planlos weiterzuwurschteln?
Da kann nix sinnvolles rauskommen.

Zitat von: betateilchen am 11 Juni 2022, 16:49:42
Die "richtige" property findet man heraus, wenn man sich den JSON output für eine Tankstelle genau anschaut.

Dann mach wir das doch mal...


{
  "id": 1469126,
  "name": "Turmöl Quick",
  "location": {
    "address": "Breitenfurterstraße 473",
    "postalCode": "1230",
    "city": "Wien",
    "latitude": 48.137832,
    "longitude": 16.257546
  },
  "contact": {},
  "openingHours": [
    {
      "day": "MO",
      "label": "Montag",
      "order": 1,
      "from": "06:00",
      "to": "22:00"
    },
    {
      "day": "DI",
      "label": "Dienstag",
      "order": 2,
      "from": "06:00",
      "to": "22:00"
    },
    {
      "day": "MI",
      "label": "Mittwoch",
      "order": 3,
      "from": "06:00",
      "to": "22:00"
    },
    {
      "day": "DO",
      "label": "Donnerstag",
      "order": 4,
      "from": "06:00",
      "to": "22:00"
    },
    {
      "day": "FR",
      "label": "Freitag",
      "order": 5,
      "from": "06:00",
      "to": "22:00"
    },
    {
      "day": "SA",
      "label": "Samstag",
      "order": 6,
      "from": "06:00",
      "to": "22:00"
    },
    {
      "day": "SO",
      "label": "Sonntag",
      "order": 7,
      "from": "06:00",
      "to": "22:00"
    },
    {
      "day": "FE",
      "label": "Feiertag",
      "order": 8,
      "from": "06:00",
      "to": "22:00"
    }
  ],
  "offerInformation": {
    "service": false,
    "selfService": false,
    "unattended": true
  },
  "paymentMethods": {
    "cash": true,
    "debitCard": true,
    "creditCard": true
  },
  "paymentArrangements": {
    "cooperative": false,
    "clubCard": false
  },
  "position": 1,
  "open": true,
  "distance": 3.5402642817354395,
  "prices": [
    {
      "fuelType": "SUP",
      "amount": 2.023,
      "label": "Super 95"
    }
  ]
}


Daraus ergibt sich, dass die property für die Stadt "location.city" heißt und nicht "location.address.city" - wie kamst Du eigentlich auf diese Idee?

multi(jsonPath('$.[*]'),concat((split(' ',property('name')))[0],'_',property('location.city')),property('prices.[0].amount','n/a'))

Zitat von: Helmi55 am 12 Juni 2022, 12:17:25
Habe jetzt 3 Varianten ausprobiert - ohne Erfolg.

Die drei Varianten können nicht funktionieren.

Die Fehler mit dem fehlenden Komma hättest Du übrigens im FHEM Log erkennen können, da müsste ein Syntaxfehler in concat() protokolliert sein.
Den Fehler mit der nicht vorhandenen property hättest Du bemerkt, wenn Du einen default-Wert in property() mit angegeben hättest (steht in der Dokumentation zu JsonMod...)

Zitat von: Helmi55 am 12 Juni 2022, 12:17:25
Ich glaube ich bin ein hoffnungsloser Fall

Nein. Du bist offenbar einfach zu bequem, Dich mit der Dokumentation zu beschäftigen, um zu verstehen, was Du da eigentlich tust.
Titel: Antw:Importe von ioB in FHEM umbenennen
Beitrag von: Helmi55 am 12 Juni 2022, 14:02:32
Servus
nein ich bin sicher nicht bequem - ich geb es zu ich verstehe es nicht!
Ich wollte eigentlich zur Adresse (Straße) noch die Stadt (City) hinzufügen. Habe jetzt auch den Beistrich vor dem Unterstrich gesetzt und location.city hinzugefügt

Dann sieht meine Anzeige so aus :'(

Location muss ich ja angeben, das ist ja Bestandteil von address, postalCode, city usw.....?


So siehts jetzt aus - die Klammern sollten jetzt passen (zumindest zeigt die Klammerprüfung nix an?
multi(jsonPath('$.[*]'),concat((split(' ',property('name')))[0],'_',property('location.adress'),'_',property('location.city')),property('prices.[0].amount','n/a'))

Danke
Helmut
Titel: Antw:Importe von ioB in FHEM umbenennen
Beitrag von: betateilchen am 12 Juni 2022, 14:20:10
Würdest Du jetzt noch die property für die Adresse richtig abschreiben, täte es funktionieren.

falsch: property('location.adress')
richtig: property('location.address')
Titel: Antw:Importe von ioB in FHEM umbenennen
Beitrag von: Helmi55 am 12 Juni 2022, 14:24:02
Hornochse ich bin.......
Da hab ich mich zuseher auf die auf die Kommas und Klammern fixiert.

Danke für deine Geduld und Hilfe
Schönen Sonntag noch
Helmut
Titel: Antw:#erledigt# Importe von ioB in FHEM umbenennen
Beitrag von: betateilchen am 12 Juni 2022, 14:27:46
gewöhne Dir an, bei property() als zweiten Parameter einen default-Wert anzugeben, der dann gezogen wird, wenn die angegebenen property keinen Wert ergibt. Ein ähnliches Prinzip wie bei ReadingsVal() usw. Beispiel siehe beim Preis ('n/a'). Dann erkennst Du direkt, wenn bei der property selbst irgendwas nicht stimmt. Meistens sind es dann Tippfehler.
Titel: Antw:#erledigt# Importe von ioB in FHEM umbenennen
Beitrag von: Helmi55 am 12 Juni 2022, 16:08:42
Servus
Der Wert "n/a" wird in Österreich angezeigt wenn er aus der Toleranzgrenze rausfällt - es werden nur die 5 Besten angezeigt
Kann man diese Werte "n/a" nicht anzeigen lassen?
Eine rG scheidet ja aus, da die "readings" alle anders heißen
Ich habe zwei verschiedene Abfragen
1) Bereich Tulln
2) Bereich Wördern

Nochmals Danke für deine Geduld
Helmut
Titel: Antw:#erledigt# Importe von ioB in FHEM umbenennen
Beitrag von: betateilchen am 12 Juni 2022, 16:28:52
Zitat von: Helmi55 am 12 Juni 2022, 16:08:42
Der Wert "n/a" wird in Österreich angezeigt

"n/a" wird angezeigt, weil ich das so bestimmt habe.

Zitatproperty('prices.[0].amount','n/a')
Titel: Antw:#erledigt# Importe von ioB in FHEM umbenennen
Beitrag von: Helmi55 am 12 Juni 2022, 17:02:20
Ja sorry ok. Das wurde von dir definiert weil in der Abfrage keine aktueller Wert vorhanden ist. Die teuren scheiden aus.
Da müssten eigentlich bei preisen von über € 2 (bzw. 1,50) alle rausfallen :D
Titel: Antw:#erledigt# Importe von ioB in FHEM umbenennen
Beitrag von: Helmi55 am 12 Juni 2022, 17:06:38
Ich weiß ich nerve dich jetzt endgültig
Aber welche Möglichkeit gäbe es beide Abfragen (sind verschiedene lat und long) zusammenzuführen.
Kann ich in der DEF mehrere lat und long eintragen

Das gemeine ander Abfrage für BenzinKostenWoerden ist: es werden Tankstellen im Umkreis von ca. 6-7km angezeigt - NUR da liegt die Donau dazwischen (Stockerau) und da gibt es keine Brücke = Anfahrsweg nicht 6km sondern ca. 25km!)

Gruß
Helmut
Titel: Antw:#erledigt# Importe von ioB in FHEM umbenennen
Beitrag von: betateilchen am 12 Juni 2022, 17:23:16
Zitat von: Helmi55 am 12 Juni 2022, 17:06:38
Aber welche Möglichkeit gäbe es beide Abfragen (sind verschiedene lat und long) zusammenzuführen.
Kann ich in der DEF mehrere lat und long eintragen

Geht nicht.
Das hat aber nix mit FHEM zu tun, sondern mit der verwendeten API.

Titel: Antw:#erledigt# Importe von ioB in FHEM umbenennen
Beitrag von: betateilchen am 12 Juni 2022, 17:33:27
Zitat von: Helmi55 am 12 Juni 2022, 16:08:42
es werden nur die 5 Besten angezeigt
Kann man diese Werte "n/a" nicht anzeigen lassen?

Wenn es ohnehin immer nur 5 Werte gibt, kannst Du natürlich anstatt mit multi() auch fünf mal mit single() arbeiten und damit nur fünf readings erzeugen.


attr fuelprice readingList single(jsonPath('$.0.prices.0.amount'),concat((split(' ',jsonPath('$.0.name')))[0],'_',jsonPath('$.0.location.city')))\
single(jsonPath('$.1.prices.0.amount'),concat((split(' ',jsonPath('$.1.name')))[0],'_',jsonPath('$.1.location.city')))\
single(jsonPath('$.2.prices.0.amount'),concat((split(' ',jsonPath('$.2.name')))[0],'_',jsonPath('$.2.location.city')))\
single(jsonPath('$.3.prices.0.amount'),concat((split(' ',jsonPath('$.3.name')))[0],'_',jsonPath('$.3.location.city')))\
single(jsonPath('$.4.prices.0.amount'),concat((split(' ',jsonPath('$.4.name')))[0],'_',jsonPath('$.4.location.city')))
Titel: Antw:#erledigt# Importe von ioB in FHEM umbenennen
Beitrag von: Helmi55 am 12 Juni 2022, 18:14:22
Ich bin doch noch lernfähig  :D ;D
single(jsonPath('$.0.prices.0.amount'),concat((split(' ',jsonPath('$.0.name')))[0],'_',jsonPath('$.0.location.address'),'_',jsonPath('$.0.location.city')))
single(jsonPath('$.1.prices.0.amount'),concat((split(' ',jsonPath('$.1.name')))
[0],'_',jsonPath('$.1.location.address'),'_',jsonPath('$.1.location.city')))
single(jsonPath('$.2.prices.0.amount'),concat((split(' ',jsonPath('$.2.name')))[0],'_',jsonPath('$.2.location.address'),'_',jsonPath('$.2.location.city')))
single(jsonPath('$.3.prices.0.amount'),concat((split(' ',jsonPath('$.3.name')))[0],'_',jsonPath('$.3.location.address'),'_',jsonPath('$.3.location.city')))
single(jsonPath('$.4.prices.0.amount'),concat((split(' ',jsonPath('$.4.name')))[0],'_',jsonPath('$.4.location.address'),'_',jsonPath('$.4.location.city')))


Ich habe doch noch die Adresse rein bekommen!!!!!!!

Danke
Helmut
Titel: Antw:#erledigt# Importe von ioB in FHEM umbenennen
Beitrag von: betateilchen am 12 Juni 2022, 18:21:20
Wenn Du jetzt noch sprintf() einbaust, kannst Du die Preise auch noch einheitlich mit zwei oder drei Nachkommastellen anzeigen lassen.

*duck-und-weg*
Titel: Antw:#erledigt# Importe von ioB in FHEM umbenennen
Beitrag von: Helmi55 am 12 Juni 2022, 18:25:58
Mal sehen heute nicht mehr - aber ich melde mich 8)
Titel: Antw:#erledigt# Importe von ioB in FHEM umbenennen
Beitrag von: Helmi55 am 15 Juni 2022, 12:54:28
Ich hoffe es gefällt dem Meister so  ;D

Nochmals Danke für die Hilfe
Gruß
Helmut