Ankündigung

Einklappen
Keine Ankündigung bisher.

Benzinpreis-Plugin

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • psilo
    antwortet
    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.

    Einen Kommentar schreiben:


  • Sisamiwe
    antwortet
    Also mit Core und Plugins auf Develop klappt es.
    DANKE.

    Einen Kommentar schreiben:


  • psilo
    antwortet
    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:


  • psilo
    antwortet
    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:


  • Sisamiwe
    antwortet
    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
    Code:
    #Tankerkönig
    tankerkoenig:
        class_name: TankerKoenig
        class_path: plugins.tankerkoenig
        apikey: 'xxxxxx'
    Logic.yaml
    Code:
    PetrolStationCSVLogic:
        visu_acl: ro
        filename: petrol_station_csv_logic.py
        cycle: 360
        crontab: init

    Logik:
    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)
    Log:
    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
    Code:
    #Tankerkönig
    tankerkoenig:
        class_name: TankerKoenig
        class_path: plugins-develop.tankerkoenig
        apikey: 'xxxxxx'
    Log:
    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
    Ich habe das auch auf meinem zweiten System getestet. Gleiches Ergebnis.
    Hilft das?

    Einen Kommentar schreiben:


  • psilo
    antwortet
    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:


  • psilo
    antwortet
    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 einfuegt
    Zuletzt geändert von psilo; 14.05.2018, 04:20.

    Einen Kommentar schreiben:


  • Sisamiwe
    antwortet
    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:


  • psilo
    antwortet
    stimmen deine ids noch? die aendern sich leider manchmal.
    welche version verwendest du? im dev waren paar dinge erweitert

    Einen Kommentar schreiben:


  • Sisamiwe
    antwortet
    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:
    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)
    und die Fehlermeldung aus dem Log:
    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)
    Sagt Dir das was?

    Einen Kommentar schreiben:


  • psilo
    antwortet
    Sisamiwe am beispiel greifst du übrigens so auf die ID zu:

    Code:
    sh.petrol_station.FREIE_TS_DUELFERSTR.conf['tankerkoenig_id']

    Einen Kommentar schreiben:


  • psilo
    antwortet
    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
    antwortet
    psilo
    Vielleicht stelle ich mich auch nur blöd an....
    Wenn es Dir nichts aus macht, von beiden.

    Ich kann dann wieder einen Blog-Eintrag dazu schreiben.
    OK?

    Einen Kommentar schreiben:


  • psilo
    antwortet
    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:
    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)
    Items:
    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: ro
    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.
    Zuletzt geändert von psilo; 13.05.2018, 15:51.

    Einen Kommentar schreiben:


  • Sisamiwe
    antwortet
    psilo
    Könntest Du bitte mal eine Beispiel-Config posten?
    Danke.

    Einen Kommentar schreiben:

Lädt...
X