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: 6389
Avto: Kona in Zoe
4910
5969

API vmesnik

Odgovor Napisal/-a CRF »

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
Uporabniški avatar
Nejccc
EV ambasador
EV ambasador
Prispevkov: 1020
Kraj: Horjul
Avto: Ioniq EV 28 kWh, e-Niro 64kWh
1243
2402

Re: API vmesnik

Odgovor Napisal/-a Nejccc »

A se samo meni zdi ali je mode takole:
1 = "VEDNO polni"
2 = "Časovnik"
3 = "NE polni"
Uporabniški avatar
Nejccc
EV ambasador
EV ambasador
Prispevkov: 1020
Kraj: Horjul
Avto: Ioniq EV 28 kWh, e-Niro 64kWh
1243
2402

Re: API vmesnik

Odgovor Napisal/-a Nejccc »

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: 6389
Avto: Kona in Zoe
4910
5969

Re: API vmesnik

Odgovor Napisal/-a CRF »

Nejccc 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
Uporabniški avatar
CRF
EV ambasador
EV ambasador
Prispevkov: 6389
Avto: Kona in Zoe
4910
5969

Re: API vmesnik

Odgovor Napisal/-a CRF »

In še sekvenca za Node-RED -> MQTT:
SmartandSimple-node-red.JPG
SmartandSimple-node-red.JPG (33.49 KiB) Pogledano 7717 krat
[/center]

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
Uporabniški avatar
pirpy
EV ambasador
EV ambasador
Prispevkov: 3562
Kraj: Topolšica
Avto: ZOE 38 i,leaf 35,e-imt 24,PW 21+15+8 kWh
3095
1614

Re: API vmesnik

Odgovor Napisal/-a pirpy »

Ali lahko kaj več napišeš o temu, pravkar sem si nabavil google home mini
Nejccc 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: 6389
Avto: Kona in Zoe
4910
5969

Re: API vmesnik

Odgovor Napisal/-a CRF »

Google Home pa mislim da nima nobene direktne veze s Homa Assistantom....
Uporabniški avatar
BogyX
EV ambasador
EV ambasador
Prispevkov: 1534
Kraj: MB
Avto: NISSAN, YLR
812
945

Re: API vmesnik

Odgovor Napisal/-a BogyX »

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: 3562
Kraj: Topolšica
Avto: ZOE 38 i,leaf 35,e-imt 24,PW 21+15+8 kWh
3095
1614

Re: API vmesnik

Odgovor Napisal/-a pirpy »

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: 6389
Avto: Kona in Zoe
4910
5969

Re: API vmesnik

Odgovor Napisal/-a CRF »

Aha, tako. Hvala za info! Nisem na tekočem.
Uporabniški avatar
Nejccc
EV ambasador
EV ambasador
Prispevkov: 1020
Kraj: Horjul
Avto: Ioniq EV 28 kWh, e-Niro 64kWh
1243
2402

Re: API vmesnik

Odgovor Napisal/-a Nejccc »

pirpy 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: 3562
Kraj: Topolšica
Avto: ZOE 38 i,leaf 35,e-imt 24,PW 21+15+8 kWh
3095
1614

Re: API vmesnik

Odgovor Napisal/-a pirpy »

Č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 ambasador
EV ambasador
Prispevkov: 1020
Kraj: Horjul
Avto: Ioniq EV 28 kWh, e-Niro 64kWh
1243
2402

Re: API vmesnik

Odgovor Napisal/-a Nejccc »

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
pirpy
Uporabniški avatar
BogyX
EV ambasador
EV ambasador
Prispevkov: 1534
Kraj: MB
Avto: NISSAN, YLR
812
945

Re: API vmesnik

Odgovor Napisal/-a BogyX »

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
Uporabniški avatar
Nejccc
EV ambasador
EV ambasador
Prispevkov: 1020
Kraj: Horjul
Avto: Ioniq EV 28 kWh, e-Niro 64kWh
1243
2402

Re: API vmesnik

Odgovor Napisal/-a Nejccc »

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š?)
BogyX
Uporabniški avatar
Damijan
EV ambasador
EV ambasador
Prispevkov: 1239
Kraj: West Gorenjska
Avto: malo mešano ;)
989
1509

Re: API vmesnik

Odgovor Napisal/-a Damijan »

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 ambasador
EV ambasador
Prispevkov: 1534
Kraj: MB
Avto: NISSAN, YLR
812
945

Re: API vmesnik

Odgovor Napisal/-a BogyX »

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

Hvala-
Nejccc
Uporabniški avatar
Nejccc
EV ambasador
EV ambasador
Prispevkov: 1020
Kraj: Horjul
Avto: Ioniq EV 28 kWh, e-Niro 64kWh
1243
2402

Re: API vmesnik

Odgovor Napisal/-a Nejccc »

@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: 6389
Avto: Kona in Zoe
4910
5969

Re: API vmesnik

Odgovor Napisal/-a CRF »

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
Uporabniški avatar
Nejccc
EV ambasador
EV ambasador
Prispevkov: 1020
Kraj: Horjul
Avto: Ioniq EV 28 kWh, e-Niro 64kWh
1243
2402

Re: API vmesnik

Odgovor Napisal/-a Nejccc »

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

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
Odgovori

Vrni se na “Smart & Simple”