Ankündigung
Einklappen
Keine Ankündigung bisher.
Benzinpreis-Plugin
Einklappen
X
-
Ich habe gerade den PR von Sisamiwe gemerged. leider haben wir jetzt ne reihe redundente funktionen. ich werde diese noch vereinheitlichen, ggf müssen dann meine "legacy" beispiele angepasst werden.
-
Also mit Core und Plugins auf Develop klappt es.
DANKE.
Einen Kommentar schreiben:
-
Update: Nachdem ich gestern schon im Halbschlaf war... Neben der Tatsache dass viele DEV Plugins mit dem Master Core nichtmehr tun, glaube ich, dass Du nicht einfach das Plugins Verzeichnis anders benennen darfst...
das war übrigens der fix für deinen fehler aus dem master: https://github.com/smarthomeNG/plugi...e08e46c060e57f
Einen Kommentar schreiben:
-
das im master ist ein im dev gefixter bug
dev plugins und master core funktionieren nicht. zumindest ein grossteil. zu viele aenderungen am core mit pluginrelevanz
Einen Kommentar schreiben:
-
Hallo,
ich versuche mal eine besser Beschreibung:
Ich habe 2 Tests gemacht:
1) Core und Plugins auf Master
Hier kommt es immer zu Fehlern beim Aufruf der Logik
Plugin.yaml
Logic.yamlCode:#Tankerkönig tankerkoenig: class_name: TankerKoenig class_path: plugins.tankerkoenig apikey: 'xxxxxx'
Code:PetrolStationCSVLogic: visu_acl: ro filename: petrol_station_csv_logic.py cycle: 360 crontab: init
Logik:
Log:Code:#!/usr/bin/env python3 # petrol_station_csv_logic.py import csv with open('/var/www/html/smartVISU2.9/pages/ZHW7/fuel/petrol_stations_e5.csv', 'w') as csvfile: fieldnames = ['place', 'brand', 'houseNumber', 'street', 'id', 'lng', 'name', 'lat', 'price', 'dist', 'isOpen', 'postCode'] writer = csv.DictWriter(csvfile, fieldnames=fieldnames, extrasaction='ignore') writer.writeheader() petrol_stations_e5 = sh.tankerkoenig.get_petrol_stations(sh._lat, sh._lon, 'e5', 'price', rad='7') if not petrol_stations_e5 is None: for element in petrol_stations_e5: # if element['id'] == 'c7ef3329-82d0-4cd7-9106-781ddf0164ec': # sh.petrol_station.EKZ.e5(element['price']) if element['price'] is not None: writer.writerow(element) with open('/var/www/html/smartVISU2.9/pages/ZHW7/fuel/petrol_stations_diesel.csv', 'w') as csvfile: fieldnames = ['place', 'brand', 'houseNumber', 'street', 'id', 'lng', 'name', 'lat', 'price', 'dist', 'isOpen', 'postCode'] writer = csv.DictWriter(csvfile, fieldnames=fieldnames, extrasaction='ignore') writer.writeheader() petrol_stations_diesel = sh.tankerkoenig.get_petrol_stations(sh._lat, sh._lon, 'diesel', 'price', rad='7') if not petrol_stations_diesel is None: for element in petrol_stations_diesel: # if element['id'] == 'c7ef3329-82d0-4cd7-9106-781ddf0164ec': # sh.petrol_station.EKZ.diesel(element['price']) if element['price'] is not None: writer.writerow(element)
Code:2018-05-14 02:01:08 ERROR logics.PetrolStationCSVLogic Logic: logics.PetrolStationCSVLogic, File: /usr/local/smarthome/plugins/tankerkoenig/__init__.py, Line: 76, Method: get_petrol_stations, Exception: 'stations' Traceback (most recent call last): File "/usr/local/smarthome/lib/scheduler.py", line 425, in _task exec(obj.bytecode) File "/usr/local/smarthome/logics/petrol_station_csv_logic.py", line 11, in <module> petrol_stations_e5 = sh.tankerkoenig.get_petrol_stations(sh._lat, sh._lon, 'e5', 'price', rad='7') File "/usr/local/smarthome/plugins/tankerkoenig/__init__.py", line 76, in get_petrol_stations for i in json_obj['stations']: KeyError: 'stations' 2018-05-14 02:01:08 ERROR logics.tankstelle1 Logic: logics.tankstelle1, File: /usr/local/smarthome/plugins/tankerkoenig/__init__.py, Line: 127, Method: get_petrol_station_prices, Exception: 'prices' Traceback (most recent call last): File "/usr/local/smarthome/lib/scheduler.py", line 425, in _task exec(obj.bytecode) File "/usr/local/smarthome/logics/tankstelle1.py", line 9, in <module> prices = sh.tankerkoenig.get_petrol_station_prices(['51d4b4e8-a095-1aa0-e100-80009459e03a','51d4b51f-a095-1aa0-e100-80009459e03a','77f1b150-2935-41d0-ab73-8cceda50c0db']) File "/usr/local/smarthome/plugins/tankerkoenig/__init__.py", line 127, in get_petrol_station_prices if key in json_obj['prices'][id]: KeyError: 'prices'
2) Core auf Master und Plugins auf Develop (heute)
Hier kommt es bereits zu einem Fehler beim Init des Plugin
Plugin.yaml
Log:Code:#Tankerkönig tankerkoenig: class_name: TankerKoenig class_path: plugins-develop.tankerkoenig apikey: 'xxxxxx'
Ich habe das auch auf meinem zweiten System getestet. Gleiches Ergebnis.Code:2018-05-14 21:36:57 INFO Main Loading '/usr/local/smarthome/plugins-develop/tankerkoenig/plugin.yaml' to 'OrderedDict' 2018-05-14 21:36:58 INFO Main plugin 'tankerkoenig': Metadata paramlist = '['apikey']' 2018-05-14 21:36:58 ERROR Main Plugin 'tankerkoenig' exception during import of __init__.py: invalid syntax (<string>, line 1) Traceback (most recent call last): File "/usr/local/smarthome/lib/plugin.py", line 364, in __init__ exec("import {0}".format(classpath)) File "<string>", line 1 import plugins-develop.tankerkoenig ^ SyntaxError: invalid syntax
Hilft das?
Einen Kommentar schreiben:
-
ich habe bei mir gestern das laden der id aus dem item auch via backend gemacht und hatte diese probleme nicht.
jetzt aber erstmal ins buero..
Einen Kommentar schreiben:
-
again:
- welche versionen. (plugin und core)
- WIE sieht die Logik aus?
- WIE sehen die weiteren Parameter der Logik (watch_item, cron, etc.) aus?
- wenn man sie WIE aendert? was sagt das log wenn man sie ändert? was sagt das log, wenn man sie triggert?
- was passiert wenn man sie NICHT ändert und neu lädt bzw. nur eine leerzeile einfuegtZuletzt geändert von psilo; 14.05.2018, 04:20.
Einen Kommentar schreiben:
-
psilo
nach dem Motto: "Jeder Boot tut gut" habe ich meinen RPI neu gestartet und nun geht es wieder.
Keine Ahnung warum.
Danke Dir!
Nachtrag:
Wenn man die Logik ändert und via dem Backend neu lädt, kommt der Fehler wieder.
Nach einen Neustart (Reboot) geht es wieder.Zuletzt geändert von Sisamiwe; 13.05.2018, 21:03.
Einen Kommentar schreiben:
-
stimmen deine ids noch? die aendern sich leider manchmal.
welche version verwendest du? im dev waren paar dinge erweitert
Einen Kommentar schreiben:
-
psilo
Danke für den Code.
Ich hatte das auch schon am Laufen und nun kommt ständig eine Fehlermeldung im Log und ich komme damit nicht weiter.
Meine Logik:
und die Fehlermeldung aus dem Log:Code:#!/usr/bin/env python3 # petrol_station_csv_logic.py import csv with open('/var/www/html/smartVISU2.9/pages/ZHW7/fuel/petrol_stations_e5.csv', 'w') as csvfile: fieldnames = ['place', 'brand', 'houseNumber', 'street', 'id', 'lng', 'name', 'lat', 'price', 'dist', 'isOpen', 'postCode'] writer = csv.DictWriter(csvfile, fieldnames=fieldnames, extrasaction='ignore') writer.writeheader() petrol_stations_e5 = sh.tankerkoenig.get_petrol_stations(sh._lat, sh._lon, 'e5', 'price', rad='7') if not petrol_stations_e5 is None: for element in petrol_stations_e5: # if element['id'] == 'c7ef3329-82d0-4cd7-9106-781ddf0164ec': # sh.petrol_station.EKZ.e5(element['price']) if element['price'] is not None: writer.writerow(element) with open('/var/www/html/smartVISU2.9/pages/ZHW7/fuel/petrol_stations_diesel.csv', 'w') as csvfile: fieldnames = ['place', 'brand', 'houseNumber', 'street', 'id', 'lng', 'name', 'lat', 'price', 'dist', 'isOpen', 'postCode'] writer = csv.DictWriter(csvfile, fieldnames=fieldnames, extrasaction='ignore') writer.writeheader() petrol_stations_diesel = sh.tankerkoenig.get_petrol_stations(sh._lat, sh._lon, 'diesel', 'price', rad='7') if not petrol_stations_diesel is None: for element in petrol_stations_diesel: # if element['id'] == 'c7ef3329-82d0-4cd7-9106-781ddf0164ec': # sh.petrol_station.EKZ.diesel(element['price']) if element['price'] is not None: writer.writerow(element)
Sagt Dir das was?Code:2018-05-13 20:55:07 INFO CP Server Thread-21 logic_findnew: _config = '{'PetrolStationCSVLogic': OrderedDict([('visu_acl', 'ro'), ('filename', 'petrol_station_csv_logic.py'), ('cycle', '360'), ('crontab', 'init'), ('pathname', '/usr/local/smarthome/logics/petrol_station_csv_logic.py')]), 'tankstelle1': OrderedDict([('visu_acl', 'ro'), ('filename', 'tankstelle1.py'), ('cycle', '180'), ('pathname', '/usr/local/smarthome/logics/tankstelle1.py')]), 'time': OrderedDict([('visu_acl', 'true'), ('filename', 'time.py'), ('crontab', ['init', '* * * *']), ('pathname', '/usr/local/smarthome/logics/time.py')]), 'WindLogic': OrderedDict([('filename', 'wind.py'), ('crontab', 'init'), ('watch_item', 'weather.wundergrund.windgeschwindigkeit.ms'), ('visu_acl', 'yes'), ('pathname', '/usr/local/smarthome/logics/wind.py')]), 'json_requests': OrderedDict([('filename', 'json_requests.py'), ('cycle', '180'), ('enabled', 'False'), ('pathname', '/usr/local/smarthome/logics/json_requests.py')]), 'UZSU_control': OrderedDict([('visu_acl', 'true'), ('filename', 'rollo_uzsu.py'), ('watch_item', ['uzsu_test.tuer']), ('pathname', '/usr/local/smarthome/logics/rollo_uzsu.py')]), 'HSV': OrderedDict([('enabled', 'True'), ('filename', 'hsv_umrechnung.py'), ('watch_item', ['Dimmer.One.HSV.H', 'Dimmer.One.HSV.S', 'Dimmer.One.HSV.V']), ('pathname', '/usr/local/smarthome/logics/hsv_umrechnung.py')])}' 2018-05-13 20:55:07 INFO CP Server Thread-21 192.168.2.107 - - [13/May/2018:20:55:07] "POST /backend/logics.html HTTP/1.1" 200 25732 "http://192.168.2.12:8383/backend/logics.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36" 2018-05-13 20:55:11 ERROR logics.PetrolStationCSVLogic Logic: logics.PetrolStationCSVLogic, File: /usr/lib/python3.5/json/decoder.py, Line: 357, Method: raw_decode, Exception: Expecting value: line 1 column 1 (char 0) Traceback (most recent call last): File "/usr/local/smarthome/lib/scheduler.py", line 425, in _task exec(obj.bytecode) File "/usr/local/smarthome/logics/petrol_station_csv_logic.py", line 11, in <module> petrol_stations_diesel = sh.tankerkoenig.get_petrol_stations(sh._lat, sh._lon, 'diesel', 'price', rad='7') File "/usr/local/smarthome/plugins/tankerkoenig/__init__.py", line 74, in get_petrol_stations json_obj = response.json() File "/usr/local/lib/python3.5/dist-packages/requests/models.py", line 892, in json return complexjson.loads(self.text, **kwargs) File "/usr/lib/python3.5/json/__init__.py", line 319, in loads return _default_decoder.decode(s) File "/usr/lib/python3.5/json/decoder.py", line 339, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) File "/usr/lib/python3.5/json/decoder.py", line 357, in raw_decode raise JSONDecodeError("Expecting value", s, err.value) from None json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
Einen Kommentar schreiben:
-
Sisamiwe und nein, ich werte die tankerkoenig id bisher nicht aus dem item aus. und ja ich sehe gerade, dass die 2te tanke in der logik nicht ins item (Aber ins CSV) geschrieben wird. aber ich habe gerade echt anderes zu tun als mein zeug aufzuraeumen.. es funktioniert für mich nutzbar, daher...Zuletzt geändert von psilo; 13.05.2018, 15:53.
Einen Kommentar schreiben:
-
Sisamiwe von was? den tankstellen die ich in beobachtung habe? oder die logik die die top 5 ausliest?
Hier die Logik - die Adressdaten unten habe ich auf Wunsche der Tankerkoenig Leute statisch hinterlegt:
Items:Code:import csv with open('/web/smartVISU/temp/petrol_stations.csv', 'w') as csvfile: fieldnames = ['place', 'brand', 'houseNumber', 'street', 'id', 'lng', 'name', 'lat', 'price', 'dist', 'isOpen', 'postCode'] writer = csv.DictWriter(csvfile, fieldnames=fieldnames, extrasaction='ignore') writer.writeheader() petrol_stations = sh.tankerkoenig.get_petrol_stations(sh._lat, sh._lon, 'diesel', 'price', rad='7') if not petrol_stations is None: for element in petrol_stations: if element['id'] == 'c7ef3329-82d0-4cd7-9106-781ddf0164ec': sh.petrol_station.EKZ.diesel(element['price']) if element['price'] is not None: writer.writerow(element) with open('/web/smartVISU/temp/petrol_stations_selected.csv', 'w') as csvfile: #fieldnames = ['e5', 'e10', 'diesel', 'street', 'houseNumber', 'postCode', 'place', 'brand', 'id', 'lng', 'name', 'lat', 'isOpen'] fieldnames = ['e5', 'e10', 'diesel', 'street', 'houseNumber', 'place', 'lat', 'lng', 'name', 'brand', 'isOpen', 'status'] writer = csv.DictWriter(csvfile, fieldnames=fieldnames, extrasaction='ignore') prices = sh.tankerkoenig.get_petrol_station_prices(['8f9beb3d-c617-47f1-08f7-cccb612a7dce','32f30926-01dd-41aa-9e05-7820caafd24f']) writer.writeheader() if not prices is None: for element in prices: if element['status'] in ['open']: if element['id'] == "8f9beb3d-c617-47f1-08f7-cccb612a7dce": element['lat'] = "48.214822" element['lng'] = "11.546543" element['name'] = "Süd-Treibstoff" element['brand'] = "Freie Tankstelle" element['isOpen'] = "True" element['place'] = "München" element['street'] = "Duelferstr." element['houseNumber'] = "52" sh.petrol_station.FREIE_TS_DUELFERSTR.diesel(element['diesel']) elif element['id'] == "32f30926-01dd-41aa-9e05-7820caafd24f": element['lat'] = "48.1411858" element['lng'] = "11.4139547" element['name'] = "Bavaria Petrol" element['brand'] = "Bavaria Petrol" element['isOpen'] = "True" element['place'] = "München" element['street'] = "Bodenseestraße" element['houseNumber'] = "317" writer.writerow(element)
Wie man das CSV in der SV anzeigt mag ich jetzt aber net wirklich erklären. Kostet alles leider Zeit... Ist ähnlich wie bei den Anrufen von der FB gemacht.Code:petrol_station: EKZ: tankerkoenig_id: c7ef3329-82d0-4cd7-9106-781ddf0164ec diesel: type: num visu_acl: ro database@mysqldb: init cent: type: num visu_acl: ro database@mysqldb: init eval: (round(sh.petrol_station.EKZ.diesel()*100)) eval_trigger: petrol_station.EKZ.diesel name: type: str visu_acl: ro isOpen: type: bool visu_acl: ro FREIE_TS_DUELFERSTR: tankerkoenig_id: 6367ff9a-823c-40c6-b656-025530bbf7cd diesel: type: num visu_acl: ro database@mysqldb: init cent: type: num visu_acl: ro database@mysqldb: init eval: (round(sh.petrol_station.FREIE_TS_DUELFERSTR.diesel()*100)) eval_trigger: petrol_station.FREIE_TS_DUELFERSTR.diesel name: type: str visu_acl: ro brand: type: str visu_acl: ro isOpen: type: bool visu_acl: roZuletzt geändert von psilo; 13.05.2018, 15:51.
Einen Kommentar schreiben:


Einen Kommentar schreiben: