API vmesnik

Projekt Pametna polnilnica, ki upošteva porabo celotnega doma in polnjenje prilagaja razpoložljivi moči celotne hiše.
Uporabniški avatar
CRF
EV ambasador
EV ambasador
Prispevkov: 4481
Kraj: Tržič
Avto: Kona in Zoe
3051
3203

API vmesnik

OdgovorNapisal/-a CRF » 28 Maj 2018, 13:46

Na željo in za lažjo integracijo polnilnice v okolje hišne avtomatizacije / pametne hiše, bom dodal API vmesnik.
Za začetek le v lokalnem omrežju (večina hišnih avtomatizacij teče lokalno) in le za nadzor. Kontrolne ukaze bom dodal kasneje.

Vmesnik se nahaja na naslovu http://IP_POSTAJE/api in vrača JSON niz s sledečo vsebino:

  • request: uspešnost API ukaza
    • "OK"
    • "Too many API requests!"
    • "ERROR:..."
  • charger: stanje polnilnice
    • 1 = "Polnilnica pripravljena"
    • 2 = "Avto priključen"
    • 3 = "Polnjenje v teku"
    • 4 = "Avto se pregreva"
    • 5 = "Napaka med polnjenjem"
    • 6 = "Napaka med polnjenjem"
    • 7 = "Polnjenje zakasnjeno"
    • 8 = "Polnjenje onemogočeno"
  • mode: Način delovanja
    • 1 = "VEDNO polni"
    • 2 = "Časovnik"
    • 3 = "NE polni"
  • I1c: polnilni tok prve faze v Amperih
  • I2c: polnilni tok druge faze v Amperih
  • I3c: polnilni tok tretje faze v Amperih
  • I1r: skupni tok prve faze v Amperih
  • I2r: skupni tok druge faze v Amperih
  • I3r: skupni tok tretje faze v Amperih
  • temp1: temperatura polnilnice
  • temp2: temperatura polnilnice
  • ienergy: tekoča vsota skupne energije brezžičnih senzorjev (0 do 65536Wh)

Primer: {"request":"OK","charger":"2","mode":"0","I1c":"28.53","I2c":"28.41","I3c":"28.32","I1r":"29.51","I2r":"29.99","I3r":"28.33"}

Več podatkov po želji dodam kasneje.
Priporočeno število API zahtev je največ 1 / minuto.
Nejccc, N75
Admin @ EVSVET.eu
Uporabniški avatar
Nejccc
EV specialist
EV specialist
Prispevkov: 579
Kraj: Horjul
Avto: Hyundai Ioniq EV
670
1309

Re: API vmesnik

OdgovorNapisal/-a Nejccc » 14 Jun 2018, 23:41

A se samo meni zdi ali je mode takole:
1 = "VEDNO polni"
2 = "Časovnik"
3 = "NE polni"
Uporabniški avatar
Nejccc
EV specialist
EV specialist
Prispevkov: 579
Kraj: Horjul
Avto: Hyundai Ioniq EV
670
1309

Re: API vmesnik

OdgovorNapisal/-a Nejccc » 14 Jun 2018, 23:46

V glavnem, če bo kdo zadevo kdaj implementiral v Home Assistanta:

Izsek iz config.yaml:

Koda: Izberi vse

sensor:
  - platform: rest
    name: Polnilnica_avto_rest
    resource: http://<IP naslov polnilnice>/api
    friendly_name: "Polnilnica"
    scan_interval: 60
    json_attributes:
      - request
      - charger
      - mode
      - I1c
      - I2c
      - I3c
      - I1r
      - I2r
      - I3r

  - platform: template
    sensors:
      polnilnica_request:
        friendly_name: "Polnilnica request"
        value_template: '{{ states.sensor.polnilnica_avto_rest.attributes["request"] }}'
       
      polnilnica_charger:
        friendly_name: "Polnilnica charger"
        value_template: >-
          {%- if is_state_attr('sensor.polnilnica_avto_rest', 'charger', '1') -%}
            Polnilnica pripravljena
          {%- elif is_state_attr('sensor.polnilnica_avto_rest', 'charger', '2') -%}
            Avto priključen
          {%- elif is_state_attr('sensor.polnilnica_avto_rest', 'charger', '3') -%}
            Polnjenje v teku
          {%- elif is_state_attr('sensor.polnilnica_avto_rest', 'charger', '4') -%}
            Avto se pregreva
          {%- elif is_state_attr('sensor.polnilnica_avto_rest', 'charger', '5') -%}
            Napaka med polnjenjem
          {%- elif is_state_attr('sensor.polnilnica_avto_rest', 'charger', '6') -%}
            Napaka med polnjenjem
          {%- elif is_state_attr('sensor.polnilnica_avto_rest', 'charger', '7') -%}
            Polnjenje zakasnjeno
          {%- elif is_state_attr('sensor.polnilnica_avto_rest', 'charger', '8') -%}
            Polnjenje onemogočeno
          {%- else -%}
            Stanje ni definirano!
          {%- endif -%}
         
      polnilnica_mode:
        friendly_name: "Polnilnica mode"
        value_template: >-
          {%- if is_state_attr('sensor.polnilnica_avto_rest', 'mode', '1') -%}
            VEDNO polni
          {%- elif is_state_attr('sensor.polnilnica_avto_rest', 'mode', '2') -%}
            Časovnik
          {%- elif is_state_attr('sensor.polnilnica_avto_rest', 'mode', '3') -%}
            NE polni
          {%- else -%}
            Stanje ni definirano!
          {%- endif -%}     
       
      polnilnica_faza1avto:
        friendly_name: "Polnilnica L1 tok polnjenja"
        value_template: '{{ states.sensor.polnilnica_avto_rest.attributes["I1c"] }}'
        unit_of_measurement: 'A'
      polnilnica_faza2avto:
        friendly_name: "Polnilnica L2 tok polnjenja"
        value_template: '{{ states.sensor.polnilnica_avto_rest.attributes["I2c"] }}'
        unit_of_measurement: 'A'
      polnilnica_faza3avto:
        friendly_name: "Polnilnica L3 tok polnjenja"
        value_template: '{{ states.sensor.polnilnica_avto_rest.attributes["I3c"] }}'
        unit_of_measurement: 'A'
      polnilnica_faza1hisa:
        friendly_name: "Polnilnica L1 skupni tok"
        value_template: '{{ states.sensor.polnilnica_avto_rest.attributes["I1r"] }}'
        unit_of_measurement: 'A'
      polnilnica_faza2hisa:
        friendly_name: "Polnilnica L2 skupni tok"
        value_template: '{{ states.sensor.polnilnica_avto_rest.attributes["I2r"] }}'
        unit_of_measurement: 'A'
      polnilnica_faza3hisa:
        friendly_name: "Polnilnica L3 skupni tok"
        value_template: '{{ states.sensor.polnilnica_avto_rest.attributes["I3r"] }}'
        unit_of_measurement: 'A'
CRF, pirpy
Uporabniški avatar
CRF
EV ambasador
EV ambasador
Prispevkov: 4481
Kraj: Tržič
Avto: Kona in Zoe
3051
3203

Re: API vmesnik

OdgovorNapisal/-a CRF » 15 Jun 2018, 07:34

Nejccc je napisal/-a:A se samo meni zdi ali je mode takole:
1 = "VEDNO polni"
2 = "Časovnik"
3 = "NE polni"

Ja, res je. Popravljeno. Hvala!
Nejccc
Admin @ EVSVET.eu
Uporabniški avatar
CRF
EV ambasador
EV ambasador
Prispevkov: 4481
Kraj: Tržič
Avto: Kona in Zoe
3051
3203

Re: API vmesnik

OdgovorNapisal/-a CRF » 15 Jun 2018, 07:51

In še sekvenca za Node-RED -> MQTT:

SmartandSimple-node-red.JPG


Koda: Izberi vse

[
    {
        "id": "65a6303c.ffaf2",
        "type": "inject",
        "z": "5748738.96c578c",
        "name": "5 minutes",
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "repeat": "300",
        "crontab": "",
        "once": false,
        "x": 130,
        "y": 360,
        "wires": [
            [
                "4d8adb45.2a0b84"
            ]
        ]
    },
    {
        "id": "4d8adb45.2a0b84",
        "type": "http request",
        "z": "5748738.96c578c",
        "name": "Poll Smart station",
        "method": "GET",
        "ret": "obj",
        "url": "http://192.168.1.202/api",
        "tls": "",
        "x": 330,
        "y": 360,
        "wires": [
            [
                "3bb58dbb.6600a2"
            ]
        ]
    },
    {
        "id": "ea62ae81.6c694",
        "type": "mqtt out",
        "z": "5748738.96c578c",
        "name": "charger/i1r",
        "topic": "charger/i1r",
        "qos": "1",
        "retain": "true",
        "broker": "d8bd18cc.8fa3f8",
        "x": 870,
        "y": 320,
        "wires": []
    },
    {
        "id": "3bb58dbb.6600a2",
        "type": "function",
        "z": "5748738.96c578c",
        "name": "Parse it",
        "func": "var state = [\"UNKNOWN\",\"READY\",\"PLUGED\",\"CHARGING\",\"HOT\",\"ERROR1\",\"ERROR2\",\"DELAYED\",\"DISABLED\"];\nvar mode = [\"UNKNOWN\",\"ALWAYS\",\"TIMER\",\"OFF\"];\nvar msg1 = { payload: msg.payload.I1r+\"A\" };\nvar msg2 = { payload: msg.payload.I2r+\"A\" };\nvar msg3 = { payload: msg.payload.I3r+\"A\" };\nvar msg4 = { payload: msg.payload.I1c+\"A\" };\nvar msg5 = { payload: msg.payload.I2c+\"A\" };\nvar msg6 = { payload: msg.payload.I3c+\"A\" };\nvar msg7 = { payload: mode[msg.payload.mode] };\nvar msg8 = { payload: state[msg.payload.charger] };\nreturn [msg1, msg2, msg3, msg4, msg5, msg6, msg7, msg8];",
        "outputs": "8",
        "noerr": 0,
        "x": 520,
        "y": 360,
        "wires": [
            [
                "ea62ae81.6c694"
            ],
            [
                "faeb54c1.929b38"
            ],
            [
                "f9715876.6d5368"
            ],
            [
                "b9d5e8bd.d7ac48"
            ],
            [
                "1c38e4a3.ecd90b"
            ],
            [
                "e9a623a0.338d3"
            ],
            [
                "38bfff35.84c79"
            ],
            [
                "f11512b1.ebf53"
            ]
        ]
    },
    {
        "id": "f11512b1.ebf53",
        "type": "mqtt out",
        "z": "5748738.96c578c",
        "name": "charger/state",
        "topic": "charger/state",
        "qos": "1",
        "retain": "true",
        "broker": "d8bd18cc.8fa3f8",
        "x": 870,
        "y": 740,
        "wires": []
    },
    {
        "id": "faeb54c1.929b38",
        "type": "mqtt out",
        "z": "5748738.96c578c",
        "name": "charger/i2r",
        "topic": "charger/i2r",
        "qos": "1",
        "retain": "true",
        "broker": "d8bd18cc.8fa3f8",
        "x": 870,
        "y": 380,
        "wires": []
    },
    {
        "id": "f9715876.6d5368",
        "type": "mqtt out",
        "z": "5748738.96c578c",
        "name": "charger/i3r",
        "topic": "charger/i3r",
        "qos": "1",
        "retain": "true",
        "broker": "d8bd18cc.8fa3f8",
        "x": 870,
        "y": 440,
        "wires": []
    },
    {
        "id": "b9d5e8bd.d7ac48",
        "type": "mqtt out",
        "z": "5748738.96c578c",
        "name": "charger/i1c",
        "topic": "charger/i1c",
        "qos": "1",
        "retain": "true",
        "broker": "d8bd18cc.8fa3f8",
        "x": 870,
        "y": 500,
        "wires": []
    },
    {
        "id": "1c38e4a3.ecd90b",
        "type": "mqtt out",
        "z": "5748738.96c578c",
        "name": "charger/i2c",
        "topic": "charger/i2c",
        "qos": "1",
        "retain": "true",
        "broker": "d8bd18cc.8fa3f8",
        "x": 870,
        "y": 560,
        "wires": []
    },
    {
        "id": "e9a623a0.338d3",
        "type": "mqtt out",
        "z": "5748738.96c578c",
        "name": "charger/i3c",
        "topic": "charger/i3c",
        "qos": "1",
        "retain": "true",
        "broker": "d8bd18cc.8fa3f8",
        "x": 870,
        "y": 620,
        "wires": []
    },
    {
        "id": "38bfff35.84c79",
        "type": "mqtt out",
        "z": "5748738.96c578c",
        "name": "charger/mode",
        "topic": "charger/mode",
        "qos": "1",
        "retain": "true",
        "broker": "d8bd18cc.8fa3f8",
        "x": 880,
        "y": 680,
        "wires": []
    },
    {
        "id": "d8bd18cc.8fa3f8",
        "type": "mqtt-broker",
        "z": "",
        "broker": "XXX.XXX.XXX.XXX",
        "port": "1883",
        "clientid": "REDMQTT",
        "usetls": false,
        "compatmode": true,
        "keepalive": "60",
        "cleansession": true,
        "willTopic": "",
        "willQos": "0",
        "willPayload": "",
        "birthTopic": "",
        "birthQos": "0",
        "birthPayload": ""
    }
]
Nejccc, pirpy
Admin @ EVSVET.eu
Uporabniški avatar
pirpy
EV ambasador
EV ambasador
Prispevkov: 1888
Kraj: Topolšica
Avto: ZOE R240 41kWh
1122
492

Re: API vmesnik

OdgovorNapisal/-a pirpy » 14 Dec 2018, 12:19

Ali lahko kaj več napišeš o temu, pravkar sem si nabavil google home mini :)

Nejccc je napisal/-a:V glavnem, če bo kdo zadevo kdaj implementiral v Home Assistanta:

Izsek iz config.yaml:

Koda: Izberi vse

sensor:
  - platform: rest
    name: Polnilnica_avto_rest
    resource: http://<IP naslov polnilnice>/api
    friendly_name: "Polnilnica"
    scan_interval: 60
    json_attributes:
      - request
      - charger
      - mode
      - I1c
      - I2c
      - I3c
      - I1r
      - I2r
      - I3r

  - platform: template
    sensors:
      polnilnica_request:
        friendly_name: "Polnilnica request"
        value_template: '{{ states.sensor.polnilnica_avto_rest.attributes["request"] }}'
       
      polnilnica_charger:
        friendly_name: "Polnilnica charger"
        value_template: >-
          {%- if is_state_attr('sensor.polnilnica_avto_rest', 'charger', '1') -%}
            Polnilnica pripravljena
          {%- elif is_state_attr('sensor.polnilnica_avto_rest', 'charger', '2') -%}
            Avto priključen
          {%- elif is_state_attr('sensor.polnilnica_avto_rest', 'charger', '3') -%}
            Polnjenje v teku
          {%- elif is_state_attr('sensor.polnilnica_avto_rest', 'charger', '4') -%}
            Avto se pregreva
          {%- elif is_state_attr('sensor.polnilnica_avto_rest', 'charger', '5') -%}
            Napaka med polnjenjem
          {%- elif is_state_attr('sensor.polnilnica_avto_rest', 'charger', '6') -%}
            Napaka med polnjenjem
          {%- elif is_state_attr('sensor.polnilnica_avto_rest', 'charger', '7') -%}
            Polnjenje zakasnjeno
          {%- elif is_state_attr('sensor.polnilnica_avto_rest', 'charger', '8') -%}
            Polnjenje onemogočeno
          {%- else -%}
            Stanje ni definirano!
          {%- endif -%}
         
      polnilnica_mode:
        friendly_name: "Polnilnica mode"
        value_template: >-
          {%- if is_state_attr('sensor.polnilnica_avto_rest', 'mode', '1') -%}
            VEDNO polni
          {%- elif is_state_attr('sensor.polnilnica_avto_rest', 'mode', '2') -%}
            Časovnik
          {%- elif is_state_attr('sensor.polnilnica_avto_rest', 'mode', '3') -%}
            NE polni
          {%- else -%}
            Stanje ni definirano!
          {%- endif -%}     
       
      polnilnica_faza1avto:
        friendly_name: "Polnilnica L1 tok polnjenja"
        value_template: '{{ states.sensor.polnilnica_avto_rest.attributes["I1c"] }}'
        unit_of_measurement: 'A'
      polnilnica_faza2avto:
        friendly_name: "Polnilnica L2 tok polnjenja"
        value_template: '{{ states.sensor.polnilnica_avto_rest.attributes["I2c"] }}'
        unit_of_measurement: 'A'
      polnilnica_faza3avto:
        friendly_name: "Polnilnica L3 tok polnjenja"
        value_template: '{{ states.sensor.polnilnica_avto_rest.attributes["I3c"] }}'
        unit_of_measurement: 'A'
      polnilnica_faza1hisa:
        friendly_name: "Polnilnica L1 skupni tok"
        value_template: '{{ states.sensor.polnilnica_avto_rest.attributes["I1r"] }}'
        unit_of_measurement: 'A'
      polnilnica_faza2hisa:
        friendly_name: "Polnilnica L2 skupni tok"
        value_template: '{{ states.sensor.polnilnica_avto_rest.attributes["I2r"] }}'
        unit_of_measurement: 'A'
      polnilnica_faza3hisa:
        friendly_name: "Polnilnica L3 skupni tok"
        value_template: '{{ states.sensor.polnilnica_avto_rest.attributes["I3r"] }}'
        unit_of_measurement: 'A'
Uporabniški avatar
CRF
EV ambasador
EV ambasador
Prispevkov: 4481
Kraj: Tržič
Avto: Kona in Zoe
3051
3203

Re: API vmesnik

OdgovorNapisal/-a CRF » 14 Dec 2018, 12:28

Google Home pa mislim da nima nobene direktne veze s Homa Assistantom....
Admin @ EVSVET.eu
Uporabniški avatar
BogyX
EV specialist
EV specialist
Prispevkov: 553
Kraj: MB
Avto: NISSAN
344
130

Re: API vmesnik

OdgovorNapisal/-a BogyX » 14 Dec 2018, 12:41

Z njim lahko krmiliš Home Assistant in posledično potem polnilnico - če omogoča vnos, če ne pa lahko povprašaš po stanju - ko seveda vse spišeš/skonfiguriraš pa če nisi tak levi ko jaz.
CRF
Uporabniški avatar
pirpy
EV ambasador
EV ambasador
Prispevkov: 1888
Kraj: Topolšica
Avto: ZOE R240 41kWh
1122
492

Re: API vmesnik

OdgovorNapisal/-a pirpy » 14 Dec 2018, 12:44

Z google home postane assistant bolj dosegljiv in zmeraj na mestu.
Ko grem spat samo rečem in assistant mi pogasne luči, spusti rolete, fino bi bilo, če bi ga lahko vprašal koliko je avto napolnjen ali pa nastavil timer,končni SOC...
Polnilnico sicer lahko kotroliram preko IFTTT in web requesta a nobenih podatkov ne dobim na tak našin.Ali pa jih ne znam dobiti.
Uporabniški avatar
CRF
EV ambasador
EV ambasador
Prispevkov: 4481
Kraj: Tržič
Avto: Kona in Zoe
3051
3203

Re: API vmesnik

OdgovorNapisal/-a CRF » 14 Dec 2018, 13:10

Aha, tako. Hvala za info! Nisem na tekočem.
Admin @ EVSVET.eu
Uporabniški avatar
Nejccc
EV specialist
EV specialist
Prispevkov: 579
Kraj: Horjul
Avto: Hyundai Ioniq EV
670
1309

Re: API vmesnik

OdgovorNapisal/-a Nejccc » 16 Dec 2018, 21:25

pirpy je napisal/-a:fino bi bilo, če bi ga lahko vprašal koliko je avto napolnjen ali pa nastavil timer,končni SOC...


Hja tale del bo bolj težko dosegljiv.
Zaenkrat bi lahko samo dobil stanje, ali se avto polni, s kakšnim tokom ter ko se avto preneha polnit (torej gre "charger" iz stanja 3 v stanje 2).
Stanje aku in SOC pa preko tega APIja žal ne moreš dobiti, ker polnilnica ne komunicira z avtom na takšen način :(

Na tole Google zadevico pa se nič ne spoznam, ker svoje pametne hiše ne mislim spuščati izven domačega omrežja (razen VPN).
Lahko pa se enkrat nekje dobiva pa v živo podebatirava :)
pirpy
Uporabniški avatar
pirpy
EV ambasador
EV ambasador
Prispevkov: 1888
Kraj: Topolšica
Avto: ZOE R240 41kWh
1122
492

Re: API vmesnik

OdgovorNapisal/-a pirpy » 16 Dec 2018, 22:33

Če jo imaš v asistantu si jo že izpustil izven svojega omrežja :) tudi jaz sem takšnega mnenja vendar pa tale assistant ponuja zelo dobro prepoznavanje govora.
Zanima me kako nastavit tale config yaml, da assistant razume, da imam polnilnico in da lahko potem vprašam za nek podatek na različne načine.
Sedaj to naredim preko ifttt a tu moram specificirat točno kako bom vprašal sicer ne razume, če pa imam v sobi naprimer pametno luč sonoff ki jo v assistantu postavim v neko sobo pa lahko rečem kakor koli in razzume da mora vklopit luč.
Uporabniški avatar
Nejccc
EV specialist
EV specialist
Prispevkov: 579
Kraj: Horjul
Avto: Hyundai Ioniq EV
670
1309

Re: API vmesnik

OdgovorNapisal/-a Nejccc » 17 Dec 2018, 08:17

Ni res, Home Assistanta gostujem na svojem strežniku (namenski) in od zunaj ni viden. To je bila zahteva z moje strani. Upravljam ga od "zunaj" lahko samo preko Telegram-a in še to samo vnaprej določene stvari (se pravi samo z mojega računa).
Glede govora ne vem, meni je bistvo avtomatizacije, da ne rabim delati nič. Primer: odprem vrata in mi sistem sam prižge luč za 30 sekund, da lahko stvari odložim in jo potem ročno prižgem.
Zjutraj mi zvoni budilka, hkrati se narahlo prižgejo luči v spalnici, ko budilko ugasnem pa avtomatika prižge luči do konca. Takšne stvari :)

S temle IFTTT sem se pa vse skupaj igral 5 minutk, tako da žal tudi ne poznam :(
Bova res morala na en kofe :D
pirpy
Uporabniški avatar
BogyX
EV specialist
EV specialist
Prispevkov: 553
Kraj: MB
Avto: NISSAN
344
130

Re: API vmesnik

OdgovorNapisal/-a BogyX » 17 Dec 2018, 09:22

Kaj je slučajno potrebno v configuration dodat kaj podobnega?

Koda: Izberi vse

sensor:
  platform: mqtt
  state_format: 'json:somekey[0].value'

Ker meni res ne prebere vrednosti, ikone so zgoraj podatkov not pa ni. Pa nimam zdaj tukaj možnosti sprobat :think:
Uporabniški avatar
Nejccc
EV specialist
EV specialist
Prispevkov: 579
Kraj: Horjul
Avto: Hyundai Ioniq EV
670
1309

Re: API vmesnik

OdgovorNapisal/-a Nejccc » 17 Dec 2018, 09:49

Za pridobivanje podatkov s polnilnice ne potrebuješ dodajati "switch"-ev. Polnilnica tudi ne podpira MQTT.

Vsekakor pa že, če bi hotel nekaj upravljati preko MQTT ti manjka par podatkov:

Koda: Izberi vse

  - platform: mqtt
    command_topic: "cmnd/home/sonoff/dviznapec/POWER"
    name: "Odpri garažna vrata"
    payload_on: "ON"
    payload_off: "OFF"
    state_topic: "stat/home/sonoff/dviznapec/POWER"
    #retain: true
    qos: 0
    optimistic: false   

Ta koda je recimo za Tasmota firmware za ESP module.

@CRF če preveč smetim po temi pa lahko izbrišeš prispevek (ali premakneš?) :angel:
BogyX
Uporabniški avatar
Damijan
EV ambasador
EV ambasador
Prispevkov: 1064
Kraj: West Gorenjska
Avto: Kia Soul EV, Toyota RAV4 HybridAWD, Nissan X-Trail
851
1122

Re: API vmesnik

OdgovorNapisal/-a Damijan » 17 Dec 2018, 16:50

Podatke o SOC/SOH ipd. bi lahko gledal preko TorquePro (namenski Android telefon povezan z BT OBD2 v EV).

Glede varnosti priporočam, da so IoT na svojem VLAN (primer: v internet povezan pomivalni stroj, ki nima posodobljenega firmwarea in ga nekdo exploita... :/
Soul EV believer ;)
Uporabniški avatar
BogyX
EV specialist
EV specialist
Prispevkov: 553
Kraj: MB
Avto: NISSAN
344
130

Re: API vmesnik

OdgovorNapisal/-a BogyX » 19 Dec 2018, 13:33

Dela - hvala.
Nekako sem uspel napačen IP vpisat.

Hvala-
Nejccc
Uporabniški avatar
Nejccc
EV specialist
EV specialist
Prispevkov: 579
Kraj: Horjul
Avto: Hyundai Ioniq EV
670
1309

Re: API vmesnik

OdgovorNapisal/-a Nejccc » 23 Dec 2018, 22:12

@CRF: a bi bila opcija, da bi javil nekako tudi prehodna stanja?
Primer:
1: avto priključen in se polni (če gre iz stanja 1 v 3)
2: polnjenje je končano (iz stanja 3 v 2)
3: avto izklopljen (iz stanja 2 v 1)
4: avto priključen, polnjenje zakasnjeno (iz stanja 1 v 7)
5: polnjenje zakasnjeno (iz stanja 7 v 2)
6: nadaljujem polnjenje (iz stanja 7 v 3)

Štos je v tem, da vsakič, ko kliknem "Deploy" na Node-Red le-ta ne ve v katerem "prehodnem" stanju se polnilnica nahaja.

Razen, če imaš kakšno boljšo idejo? :)
Uporabniški avatar
CRF
EV ambasador
EV ambasador
Prispevkov: 4481
Kraj: Tržič
Avto: Kona in Zoe
3051
3203

Re: API vmesnik

OdgovorNapisal/-a CRF » 24 Dec 2018, 07:20

Ja, no, enostavna rešitev je da v node-redu shraniš predhodno stanje.

flow.set("prejšnjestanje", msg.payload);
var pr= flow.get("prejšnjestanje") || false;
Nejccc
Admin @ EVSVET.eu
Uporabniški avatar
Nejccc
EV specialist
EV specialist
Prispevkov: 579
Kraj: Horjul
Avto: Hyundai Ioniq EV
670
1309

Re: API vmesnik

OdgovorNapisal/-a Nejccc » 26 Dec 2018, 21:25

To mi načeloma sedaj deluje.

Moram potestirat, kaj se zgodi, če gre vse skupaj v kakšno nedefinirano stanje - še vedno precej izgublja povezavo.

Koda pa je takšnale:

Koda: Izberi vse

var pr = flow.get("prevstate") || 0;

/*
    1 = "Polnilnica pripravljena"
    2 = "Avto priključen"
    3 = "Polnjenje v teku"
    4 = "Avto se pregreva"
    5 = "Napaka med polnjenjem"
    6 = "Napaka med polnjenjem"
    7 = "Polnjenje zakasnjeno"
    8 = "Polnjenje onemogočeno"
   
*/

if (msg.payload == "1" ){
    if (pr === 0 || pr === 1 || pr === 4 || pr === 5 || pr === 6 || pr === 8){
    msg.payload = "Polnilnica pripravljena.";
    flow.set("prevstate", 1);
    return [msg, null];
    }
    else if (pr === 3 || pr === 2 || pr === 7 ){
    msg.payload = "Polnilnica pripravljena, avto odklopljen.";
    flow.set("prevstate", 1);
    return [msg, null];
    }
}
else if (msg.payload == "2" ){
    // če je avto poln ali ostane priključen
    if (pr === 3 || pr === 7 ){
    msg.payload = "Avto je končal polnjenje.";
    flow.set("prevstate", 2);
    return [msg, null];
    }
    else if ( pr === 1 ){
    msg.payload = "Avto priključen, se še ne polni.";
    flow.set("prevstate", 2);
    return [msg, null];
    }
    else if ( pr === 2 ){
    msg.payload = "Avto priključen.";
    flow.set("prevstate", 2);
    return [msg, null];
    }
}
else if (msg.payload == "3" ){
    if (pr === 1 || pr === 2 || pr === 3 ){
    msg.payload = "Avto se polni.";
    flow.set("prevstate", 3);
    return [msg, null];
    }
    else if (pr === 7){
    msg.payload = "Avto se je pričel polniti po časovniku.";
    flow.set("prevstate", 3);
    return [msg, null];
    }
}
else if (msg.payload == "4" ){
    msg.payload = "Avto se pregreva.";
    flow.set("prevstate", 4);
    return [msg, null];
}
else if (msg.payload == "5" || msg.payload === "6" ){
    msg.payload = "Napaka med polnjenjem.";
    flow.set("prevstate", 5);
    return [msg, null];
}
else if (msg.payload == "7" ){
    if (pr === 1 || pr === 7 || pr === 2){
        msg.payload = "Avto priključen, polnjenje zakasnjeno.";
        flow.set("prevstate", 7);
        return [msg, null];
    }
    else if (pr === 3 ){
        msg.payload = "Polnjenje prekinjeno - časovnik.";
        flow.set("prevstate", 7);
        return [msg, null];
    }
}
else if (msg.payload == "8" ){
    msg.payload = "Polnjenje onemogočeno.";
    flow.set("prevstate", 8);
    return [msg, null];
}




// drugi izhod za napake / obvestila:
else if (msg.payload == "Reset"){
    flow.set("prevstate", 0);
    return (null, { payload: "Flow var \"prevstate\" postavljen na: " + pr });
}
else if (msg.payload == "getVar"){
    return (null, { payload: "Flow var \"prevstate\" = " + pr });
}
else if (msg.payload == "EHOSTUNREACH"){
    return (null, { payload: "Napaka API dostopa. Ni povezave s polnilnico?" });
}
else {
    msg.payload = "Polnilnica charger napaka. Dobil sem: \"" + msg.payload + "\" & prevstate= \"" + flow.get('prevstate') + "\"";
    return [null, msg];
}


Ni najlepša, ampak nekako pa deluje :giggle:

Tole je pa koda za parser:

Koda: Izberi vse

if (msg.statusCode === "EHOSTUNREACH"){
    return [null, {payload: "EHOSTUNREACH"}]
}
else {
var request = { payload: msg.payload.request };
var charger = { payload: msg.payload.charger };
var mode = { payload: msg.payload.mode };
var I1c = { payload: msg.payload.I1c+" A" };
var I2c = { payload: msg.payload.I2c+" A" };
var I3c = { payload: msg.payload.I3c+" A" };
var I1r = { payload: msg.payload.I1r+" A" };
var I2r = { payload: msg.payload.I2r+" A" };
var I3r = { payload: msg.payload.I3r+" A" };
var temp1 = { payload: msg.payload.temp1+" °C" };
var temp2 = { payload: msg.payload.temp2+" °C" };
var ienergy = { payload: msg.payload.ienergy+" Wh" };
return [request, charger, mode, I1c, I2c, I3c, I1r, I2c, I3r, temp1, temp2, ienergy];
}


Prvi node je povezan na drugi izhod parserja - "charger".
CRF

  • Podobne Teme
    Odgovori
    Ogledi
    Zadnji prispevek

Vrni se na