#erledigt# Importe von ioB in FHEM umbenennen

Begonnen von Helmi55, 11 Juni 2022, 13:00:12

Vorheriges Thema - Nächstes Thema

Helmi55

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

System1 fhem 6.1 auf RPi 4B mit 4GB, HMUSBConfig, DS9490R-1Wire, Busware USB 868, Pool-Solarsteuerung mit FHEM. System2 fhem 6.1 auf RPi 4B mit 4GB (Bullseye) mit Busware USB 868 und 433 und HMUARTLGW für Haussteuerung

https://www.flickr.com/photos/canonhelmi/

betateilchen

#1
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)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Helmi55

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?
System1 fhem 6.1 auf RPi 4B mit 4GB, HMUSBConfig, DS9490R-1Wire, Busware USB 868, Pool-Solarsteuerung mit FHEM. System2 fhem 6.1 auf RPi 4B mit 4GB (Bullseye) mit Busware USB 868 und 433 und HMUARTLGW für Haussteuerung

https://www.flickr.com/photos/canonhelmi/

betateilchen

#3
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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Helmi55

Danke.
Bin mir sicher da kommen noch einige Fragen.
Aber bei den Benzinpreisen muss ich informiert sein  :)
Schönen Nachmittag
Helmut
System1 fhem 6.1 auf RPi 4B mit 4GB, HMUSBConfig, DS9490R-1Wire, Busware USB 868, Pool-Solarsteuerung mit FHEM. System2 fhem 6.1 auf RPi 4B mit 4GB (Bullseye) mit Busware USB 868 und 433 und HMUARTLGW für Haussteuerung

https://www.flickr.com/photos/canonhelmi/

betateilchen

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


-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Helmi55

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
System1 fhem 6.1 auf RPi 4B mit 4GB, HMUSBConfig, DS9490R-1Wire, Busware USB 868, Pool-Solarsteuerung mit FHEM. System2 fhem 6.1 auf RPi 4B mit 4GB (Bullseye) mit Busware USB 868 und 433 und HMUARTLGW für Haussteuerung

https://www.flickr.com/photos/canonhelmi/

betateilchen

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Helmi55

ich dachte so:
multi(jsonPath('$.[*]'),(split(' ',property('name'), property('address')))[0],property('prices.[0].amount','n/a'))

Fehlanzeige.....
System1 fhem 6.1 auf RPi 4B mit 4GB, HMUSBConfig, DS9490R-1Wire, Busware USB 868, Pool-Solarsteuerung mit FHEM. System2 fhem 6.1 auf RPi 4B mit 4GB (Bullseye) mit Busware USB 868 und 433 und HMUARTLGW für Haussteuerung

https://www.flickr.com/photos/canonhelmi/

betateilchen

#9
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!
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Helmi55

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
System1 fhem 6.1 auf RPi 4B mit 4GB, HMUSBConfig, DS9490R-1Wire, Busware USB 868, Pool-Solarsteuerung mit FHEM. System2 fhem 6.1 auf RPi 4B mit 4GB (Bullseye) mit Busware USB 868 und 433 und HMUARTLGW für Haussteuerung

https://www.flickr.com/photos/canonhelmi/

betateilchen

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

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Helmi55

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
System1 fhem 6.1 auf RPi 4B mit 4GB, HMUSBConfig, DS9490R-1Wire, Busware USB 868, Pool-Solarsteuerung mit FHEM. System2 fhem 6.1 auf RPi 4B mit 4GB (Bullseye) mit Busware USB 868 und 433 und HMUARTLGW für Haussteuerung

https://www.flickr.com/photos/canonhelmi/

betateilchen

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

  • in allen drei fehlt jeweils ein Komma zwischen den mit concat() zu verbindenden Elementen (vor dem zweiten Unterstrich)
  • die dritte Variante funktioniert zusätzlich deshalb nicht, weil eine property verwendet wird, die nicht existiert (location.address.city). Außerdem enthält sie noch einen sinnlosen Unterstrich und es fehlt eine Klammer zum Abschluss von concat().

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Helmi55

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
System1 fhem 6.1 auf RPi 4B mit 4GB, HMUSBConfig, DS9490R-1Wire, Busware USB 868, Pool-Solarsteuerung mit FHEM. System2 fhem 6.1 auf RPi 4B mit 4GB (Bullseye) mit Busware USB 868 und 433 und HMUARTLGW für Haussteuerung

https://www.flickr.com/photos/canonhelmi/