'Inteligenty' dom ze sterownikiem PLC

 Language:
Szukanie zaawansowane  

Aktualności:

Powrót do strony głównej: www.edom-plc.pl

Autor Wątek: Kamera IP - trigger z PLC do zapisu  (Przeczytany 6381 razy)

Gradek

  • Newbie
  • *
  • Wiadomości: 30
    • Zobacz profil
Kamera IP - trigger z PLC do zapisu
« dnia: Marca 05, 2020, 06:40:07 am »

Hej,

od pewno czasu mam na elewacji zainstalowaną kamerę IP. Wspiera ona ONVIF i RTSP. Chciałbym aby po pojawieniu się sygnału wejściowego na PLC na serwerze FTP został zapisane zdjęcie z kamery lub np. 5 sek nagrania przed i po sygnale. Domyślam się, że na RPi trzeba postawić jakiś pośredniczący serwer, który będzie łączył WAGO z kamerą. Będę wdzięczny za radę, jak to ogarnąć.

Pozdr,
Gradek
Zapisane

Simeone

  • Jr. Member
  • **
  • Wiadomości: 98
    • Zobacz profil
Odp: Kamera IP - trigger z PLC do zapisu
« Odpowiedź #1 dnia: Marca 05, 2020, 08:05:44 am »

Od dłuższego czasu do obsługi interfejsu obsługi edomu korzystam z serwera Node-Red (obrazki) (źródło), którego mogę polecić z czystym sumieniem. Łączy się z Wago po Modbusie i daje całą masę możliwości konfiguracji i rozbudowy.

Do obsługi kamer Onvif we wspomnianym serwerze dodałem bloczek (mogę udostępnić źródło) wykonujący zrzut i zapis do pliku co określony odstęp czasu. Obraz pobiera się po protokole rstp bezpośrednio z kamery i kompresuje przy pomocy kodeka ffmpeg, który w moim BeagleBone musiałem osobno zainstalować - nie wiem jak to jest w przypadku RPi - trzeba sprawdzić. Dodatkowo po naciśnięciu przycisku dzwonka z kamery skierowanej na wejście wymuszam zrzut i przesłanie do telefonu za pośrednictwem aplikacji Pushover.
Zapisane

Gradek

  • Newbie
  • *
  • Wiadomości: 30
    • Zobacz profil
Odp: Kamera IP - trigger z PLC do zapisu
« Odpowiedź #2 dnia: Marca 05, 2020, 08:56:07 am »

Dzięki Simeone. Uruchomię NodeRed na RPi i jak zacznie gadać po Modbusie z PLC, to się odezwę.
Zapisane

Simeone

  • Jr. Member
  • **
  • Wiadomości: 98
    • Zobacz profil
Odp: Kamera IP - trigger z PLC do zapisu
« Odpowiedź #3 dnia: Marca 05, 2020, 09:16:55 am »

Nie ma sprawy, informuj o postępach  :)
Zapisane

Gradek

  • Newbie
  • *
  • Wiadomości: 30
    • Zobacz profil
Odp: Kamera IP - trigger z PLC do zapisu
« Odpowiedź #4 dnia: Marca 07, 2020, 10:23:15 am »

Chciałbym skorzystać z jednego z systemów integrujących jak NodeRed, Domoticz, czy Supla zainstalowanych np. na Raspberry Pi. Komunikacja po Modbusie TCP wydaje się być dobrym pomysłem. Przejrzałem notę aplikacyjną Wago "Modbus with WAGO Ethernet Couplers and Controllers" i film Kurta Brauna "Raspberry Pi Node-RED Tutorial with Modbus & MQTT". Co trzeba zrobić po stronie RPi jest dla mnie jasne. Czy gdzieś znajdę przykład, najlepiej nie YouTube, jak krok po kroku uruchomić komunikację po Modbusie TCP w Wago? Mam PLC 750-880.
Zapisane

Simeone

  • Jr. Member
  • **
  • Wiadomości: 98
    • Zobacz profil
Odp: Kamera IP - trigger z PLC do zapisu
« Odpowiedź #5 dnia: Marca 08, 2020, 05:45:54 pm »

Czy gdzieś znajdę przykład, najlepiej nie YouTube, jak krok po kroku uruchomić komunikację po Modbusie TCP w Wago? Mam PLC 750-880.

Oczywiście, nawet bliżej niż myślisz, czyli na tej stronie  ;)
Tutaj Admin dokładnie opisał co i jak: Wstęp do MODBUSa, Adresowanie zmiennych w pamięci PLC

Najogólniej mówiąc, nic nie trzeba uruchamiać, bo sterownik z automatu ma uruchomionego modbusowego Slave'a. Trzeba jedynie umiejętnie adresować zmienne (%MWxx, %MX.. itd) oraz świadomie się do nich odwoływać.

Jakbyś potrzebował konkretny przykład to daj znać co dokładnie Cię interesuje
Zapisane

Gradek

  • Newbie
  • *
  • Wiadomości: 30
    • Zobacz profil
Odp: Kamera IP - trigger z PLC do zapisu
« Odpowiedź #6 dnia: Marca 11, 2020, 08:55:51 am »

Nawiązałem komunikację Wago->Node-RED, przez odczytanie pierwszych 8 DI. W debugu widzę 8x True/False, które zmieniają się po zmianie sygnału na wejściu. Niestety nie jestem w stanie doprowadzić do tego, aby ten sygnał był widoczny na wizualizacji. Poniżej export z Node-RED:

[
    {
        "id": "7a0c4296.ea5a9c",
        "type": "tab",
        "label": "Flow 1",
        "disabled": false,
        "info": ""
    },
    {
        "id": "633ba793.50d7",
        "type": "modbus-read",
        "z": "7a0c4296.ea5a9c",
        "name": "ModbusTCP DI Read",
        "topic": "",
        "showStatusActivities": false,
        "logIOActivities": false,
        "showErrors": false,
        "unitid": "",
        "dataType": "Coil",
        "adr": "0",
        "quantity": "8",
        "rate": "200",
        "rateUnit": "ms",
        "delayOnStart": false,
        "startDelayTime": "",
        "server": "c3ddc1e2.830ea8",
        "useIOFile": false,
        "ioFile": "",
        "useIOForPayload": false,
        "x": 160,
        "y": 80,
        "wires": [
            [
                "5b625ec.00d9ea"
            ],
            []
        ]
    },
    {
        "id": "5b625ec.00d9ea",
        "type": "function",
        "z": "7a0c4296.ea5a9c",
        "name": "On/Off",
        "func": "var x = [0,0,0,0,0,0,0,0];\nvar msg_o = [msg,msg,msg,msg,msg,msg,msg,msg,];\nfor(i = 0; i < 8; i++){\n    x[i] = msg.payload[i];\n    if (x[i] == true){\n        msg_o[i] = { payload: 1};\n    } else{\n        msg_o[i] = { payload: 0};\n    }\n}\nreturn msg_o;",
        "outputs": 8,
        "noerr": 0,
        "x": 390,
        "y": 100,
        "wires": [
            [
                "c5befe0e.22eb88"
            ],
            [
                "34777e13.f50a4a"
            ],
            [
                "b963963a.b93b08"
            ],
            [
                "1f9a6f56.39d781"
            ],
            [
                "1e2646f0.8adb81"
            ],
            [
                "ae1b4e85.55319"
            ],
            [
                "eb618409.7bbb3"
            ],
            [
                "f8035fa3.b7b918"
            ]
        ]
    },
    {
        "id": "c5befe0e.22eb88",
        "type": "ui_switch",
        "z": "7a0c4296.ea5a9c",
        "name": "xPrzGar1",
        "label": "xPrzGar1",
        "tooltip": "",
        "group": "f1129bdc.036ed",
        "order": 0,
        "width": 0,
        "height": 0,
        "passthru": true,
        "decouple": "false",
        "topic": "Digital",
        "style": "",
        "onvalue": "1",
        "onvalueType": "str",
        "onicon": "",
        "oncolor": "",
        "offvalue": "0",
        "offvalueType": "str",
        "officon": "",
        "offcolor": "",
        "x": 620,
        "y": 20,
        "wires": [
            []
        ]
    },
    {
        "id": "34777e13.f50a4a",
        "type": "ui_switch",
        "z": "7a0c4296.ea5a9c",
        "name": "xPrzLazDolLust",
        "label": "xPrzLazDolLust",
        "tooltip": "",
        "group": "f1129bdc.036ed",
        "order": 0,
        "width": 0,
        "height": 0,
        "passthru": true,
        "decouple": "false",
        "topic": "Digital",
        "style": "",
        "onvalue": "1",
        "onvalueType": "str",
        "onicon": "",
        "oncolor": "",
        "offvalue": "0",
        "offvalueType": "str",
        "officon": "",
        "offcolor": "",
        "x": 640,
        "y": 60,
        "wires": [
            []
        ]
    },
    {
        "id": "1f9a6f56.39d781",
        "type": "ui_switch",
        "z": "7a0c4296.ea5a9c",
        "name": "xPrzSpiz",
        "label": "xPrzSpiz",
        "tooltip": "",
        "group": "f1129bdc.036ed",
        "order": 0,
        "width": 0,
        "height": 0,
        "passthru": true,
        "decouple": "false",
        "topic": "Digital",
        "style": "",
        "onvalue": "1",
        "onvalueType": "str",
        "onicon": "",
        "oncolor": "",
        "offvalue": "0",
        "offvalueType": "str",
        "officon": "",
        "offcolor": "",
        "x": 620,
        "y": 140,
        "wires": [
            []
        ]
    },
    {
        "id": "1e2646f0.8adb81",
        "type": "ui_switch",
        "z": "7a0c4296.ea5a9c",
        "name": "xPrzKotl",
        "label": "xPrzKotl",
        "tooltip": "",
        "group": "f1129bdc.036ed",
        "order": 0,
        "width": 0,
        "height": 0,
        "passthru": true,
        "decouple": "false",
        "topic": "Digital",
        "style": "",
        "onvalue": "1",
        "onvalueType": "str",
        "onicon": "",
        "oncolor": "",
        "offvalue": "0",
        "offvalueType": "str",
        "officon": "",
        "offcolor": "",
        "x": 620,
        "y": 180,
        "wires": [
            []
        ]
    },
    {
        "id": "ae1b4e85.55319",
        "type": "ui_switch",
        "z": "7a0c4296.ea5a9c",
        "name": "xPrzWiatr1",
        "label": "xPrzWiatr1",
        "tooltip": "",
        "group": "f1129bdc.036ed",
        "order": 0,
        "width": 0,
        "height": 0,
        "passthru": true,
        "decouple": "false",
        "topic": "",
        "style": "",
        "onvalue": "true",
        "onvalueType": "bool",
        "onicon": "",
        "oncolor": "",
        "offvalue": "false",
        "offvalueType": "bool",
        "officon": "",
        "offcolor": "",
        "x": 630,
        "y": 220,
        "wires": [
            []
        ]
    },
    {
        "id": "eb618409.7bbb3",
        "type": "ui_switch",
        "z": "7a0c4296.ea5a9c",
        "name": "xPrzTel1",
        "label": "xPrzTel1",
        "tooltip": "",
        "group": "f1129bdc.036ed",
        "order": 0,
        "width": 0,
        "height": 0,
        "passthru": true,
        "decouple": "false",
        "topic": "",
        "style": "",
        "onvalue": "true",
        "onvalueType": "bool",
        "onicon": "",
        "oncolor": "",
        "offvalue": "false",
        "offvalueType": "bool",
        "officon": "",
        "offcolor": "",
        "x": 620,
        "y": 260,
        "wires": [
            []
        ]
    },
    {
        "id": "f8035fa3.b7b918",
        "type": "ui_switch",
        "z": "7a0c4296.ea5a9c",
        "name": "xPrzTel2",
        "label": "xPrzTel2",
        "tooltip": "",
        "group": "f1129bdc.036ed",
        "order": 0,
        "width": 0,
        "height": 0,
        "passthru": true,
        "decouple": "false",
        "topic": "",
        "style": "",
        "onvalue": "true",
        "onvalueType": "bool",
        "onicon": "",
        "oncolor": "",
        "offvalue": "false",
        "offvalueType": "bool",
        "officon": "",
        "offcolor": "",
        "x": 620,
        "y": 300,
        "wires": [
            []
        ]
    },
    {
        "id": "c0ce7d93.1b4278",
        "type": "function",
        "z": "7a0c4296.ea5a9c",
        "name": "ON/OFF",
        "func": "var x = msg.payload[0];\nif (x == \"1\") {\n    var msg_o = {payload : 1}\n} else{\n    var msg_o = {payload : 0}\n    }\nreturn msg_o;",
        "outputs": 1,
        "noerr": 0,
        "x": 280,
        "y": 720,
        "wires": [
            [
                "32816e94.e73112",
                "97c7e1bd.8d13e8"
            ]
        ]
    },
    {
        "id": "91243aaa.f4138",
        "type": "ui_switch",
        "z": "7a0c4296.ea5a9c",
        "name": "xOswSalGorne",
        "label": "xOswSalGorne",
        "tooltip": "",
        "group": "8e915ca2.3028a8",
        "order": 8,
        "width": 0,
        "height": 0,
        "passthru": true,
        "decouple": "false",
        "topic": "Output",
        "style": "",
        "onvalue": "1",
        "onvalueType": "str",
        "onicon": "",
        "oncolor": "",
        "offvalue": "0",
        "offvalueType": "str",
        "officon": "",
        "offcolor": "",
        "x": 100,
        "y": 760,
        "wires": [
            [
                "c0ce7d93.1b4278"
            ]
        ]
    },
    {
        "id": "32816e94.e73112",
        "type": "modbus-write",
        "z": "7a0c4296.ea5a9c",
        "name": "xOswSalGorne",
        "showStatusActivities": false,
        "showErrors": false,
        "unitid": "",
        "dataType": "Coil",
        "adr": "513",
        "quantity": "1",
        "server": "c3ddc1e2.830ea8",
        "x": 460,
        "y": 660,
        "wires": [
            [],
            []
        ]
    },
    {
        "id": "1a7c4fb6.bfc33",
        "type": "ui_button",
        "z": "7a0c4296.ea5a9c",
        "name": "ON",
        "group": "f1129bdc.036ed",
        "order": 8,
        "width": 0,
        "height": 0,
        "passthru": false,
        "label": "ON",
        "tooltip": "",
        "color": "",
        "bgcolor": "",
        "icon": "",
        "payload": "1",
        "payloadType": "str",
        "topic": "",
        "x": 90,
        "y": 680,
        "wires": [
            [
                "c0ce7d93.1b4278"
            ]
        ]
    },
    {
        "id": "150e6c82.190583",
        "type": "ui_button",
        "z": "7a0c4296.ea5a9c",
        "name": "OFF",
        "group": "f1129bdc.036ed",
        "order": 8,
        "width": 0,
        "height": 0,
        "passthru": false,
        "label": "OFF",
        "tooltip": "",
        "color": "",
        "bgcolor": "",
        "icon": "",
        "payload": "0",
        "payloadType": "str",
        "topic": "",
        "x": 90,
        "y": 720,
        "wires": [
            [
                "c0ce7d93.1b4278"
            ]
        ]
    },
    {
        "id": "59e6d4de.ecccfc",
        "type": "modbus-read",
        "z": "7a0c4296.ea5a9c",
        "name": "ModbusTCP DO Read",
        "topic": "",
        "showStatusActivities": false,
        "logIOActivities": false,
        "showErrors": false,
        "unitid": "",
        "dataType": "Coil",
        "adr": "512",
        "quantity": "8",
        "rate": "200",
        "rateUnit": "ms",
        "delayOnStart": false,
        "startDelayTime": "",
        "server": "c3ddc1e2.830ea8",
        "useIOFile": false,
        "ioFile": "",
        "useIOForPayload": false,
        "x": 160,
        "y": 440,
        "wires": [
            [
                "5688945f.e37734"
            ],
            []
        ]
    },
    {
        "id": "5688945f.e37734",
        "type": "function",
        "z": "7a0c4296.ea5a9c",
        "name": "On/Off",
        "func": "var x = [0,0,0,0,0,0,0,0];\nvar msg_o = [msg,msg,msg,msg,msg,msg,msg,msg,];\nfor(i = 0; i < 8; i++){\n    x[i] = msg.payload[i];\n    if (x[i] == true){\n        msg_o[i] = { payload: 1};\n    } else{\n        msg_o[i] = { payload: 0};\n    }\n}\nreturn msg_o;",
        "outputs": 8,
        "noerr": 0,
        "x": 390,
        "y": 460,
        "wires": [
            [
                "89109053.3175"
            ],
            [
                "cd912a1a.137658"
            ],
            [
                "908f3546.5cfd98"
            ],
            [
                "c0113071.b4013"
            ],
            [
                "6ad2748a.34b87c"
            ],
            [
                "3ca4a13e.7c833e"
            ],
            [],
            []
        ]
    },
    {
        "id": "97c7e1bd.8d13e8",
        "type": "ui_switch",
        "z": "7a0c4296.ea5a9c",
        "name": "test",
        "label": "test",
        "tooltip": "",
        "group": "8e915ca2.3028a8",
        "order": 1,
        "width": 0,
        "height": 0,
        "passthru": true,
        "decouple": "false",
        "topic": "",
        "style": "",
        "onvalue": "true",
        "onvalueType": "bool",
        "onicon": "",
        "oncolor": "",
        "offvalue": "false",
        "offvalueType": "bool",
        "officon": "",
        "offcolor": "",
        "x": 470,
        "y": 740,
        "wires": [
            []
        ]
    },
    {
        "id": "b963963a.b93b08",
        "type": "ui_switch",
        "z": "7a0c4296.ea5a9c",
        "name": "xPrzLazDol",
        "label": "xPrzLazDol",
        "tooltip": "",
        "group": "f1129bdc.036ed",
        "order": 0,
        "width": 0,
        "height": 0,
        "passthru": true,
        "decouple": "false",
        "topic": "Digital",
        "style": "",
        "onvalue": "1",
        "onvalueType": "str",
        "onicon": "",
        "oncolor": "",
        "offvalue": "0",
        "offvalueType": "str",
        "officon": "",
        "offcolor": "",
        "x": 630,
        "y": 100,
        "wires": [
            []
        ]
    },
    {
        "id": "89109053.3175",
        "type": "ui_switch",
        "z": "7a0c4296.ea5a9c",
        "name": "OswSalGorne",
        "label": "OswSalGorne",
        "tooltip": "",
        "group": "f1129bdc.036ed",
        "order": 10,
        "width": 0,
        "height": 0,
        "passthru": true,
        "decouple": "false",
        "topic": "",
        "style": "",
        "onvalue": "true",
        "onvalueType": "str",
        "onicon": "",
        "oncolor": "",
        "offvalue": "false",
        "offvalueType": "str",
        "officon": "",
        "offcolor": "",
        "x": 640,
        "y": 380,
        "wires": [
            []
        ]
    },
    {
        "id": "cd912a1a.137658",
        "type": "ui_switch",
        "z": "7a0c4296.ea5a9c",
        "name": "OswSalJad",
        "label": "OswJad",
        "tooltip": "",
        "group": "f1129bdc.036ed",
        "order": 10,
        "width": 0,
        "height": 0,
        "passthru": true,
        "decouple": "false",
        "topic": "",
        "style": "",
        "onvalue": "true",
        "onvalueType": "str",
        "onicon": "",
        "oncolor": "",
        "offvalue": "false",
        "offvalueType": "str",
        "officon": "",
        "offcolor": "",
        "x": 630,
        "y": 420,
        "wires": [
            []
        ]
    },
    {
        "id": "3ca4a13e.7c833e",
        "type": "ui_switch",
        "z": "7a0c4296.ea5a9c",
        "name": "OswSalGorne",
        "label": "OswSalGorne",
        "tooltip": "",
        "group": "f1129bdc.036ed",
        "order": 10,
        "width": 0,
        "height": 0,
        "passthru": true,
        "decouple": "false",
        "topic": "",
        "style": "",
        "onvalue": "true",
        "onvalueType": "str",
        "onicon": "",
        "oncolor": "",
        "offvalue": "false",
        "offvalueType": "str",
        "officon": "",
        "offcolor": "",
        "x": 640,
        "y": 580,
        "wires": [
            []
        ]
    },
    {
        "id": "6ad2748a.34b87c",
        "type": "ui_switch",
        "z": "7a0c4296.ea5a9c",
        "name": "OswSalGorne",
        "label": "OswSalGorne",
        "tooltip": "",
        "group": "f1129bdc.036ed",
        "order": 10,
        "width": 0,
        "height": 0,
        "passthru": true,
        "decouple": "false",
        "topic": "",
        "style": "",
        "onvalue": "true",
        "onvalueType": "str",
        "onicon": "",
        "oncolor": "",
        "offvalue": "false",
        "offvalueType": "str",
        "officon": "",
        "offcolor": "",
        "x": 640,
        "y": 540,
        "wires": [
            []
        ]
    },
    {
        "id": "c0113071.b4013",
        "type": "ui_switch",
        "z": "7a0c4296.ea5a9c",
        "name": "OswSalGorne",
        "label": "OswSalGorne",
        "tooltip": "",
        "group": "f1129bdc.036ed",
        "order": 10,
        "width": 0,
        "height": 0,
        "passthru": true,
        "decouple": "false",
        "topic": "",
        "style": "",
        "onvalue": "true",
        "onvalueType": "str",
        "onicon": "",
        "oncolor": "",
        "offvalue": "false",
        "offvalueType": "str",
        "officon": "",
        "offcolor": "",
        "x": 640,
        "y": 500,
        "wires": [
            []
        ]
    },
    {
        "id": "908f3546.5cfd98",
        "type": "ui_switch",
        "z": "7a0c4296.ea5a9c",
        "name": "OswSalGorne",
        "label": "OswSalGorne",
        "tooltip": "",
        "group": "f1129bdc.036ed",
        "order": 10,
        "width": 0,
        "height": 0,
        "passthru": true,
        "decouple": "false",
        "topic": "",
        "style": "",
        "onvalue": "true",
        "onvalueType": "str",
        "onicon": "",
        "oncolor": "",
        "offvalue": "false",
        "offvalueType": "str",
        "officon": "",
        "offcolor": "",
        "x": 640,
        "y": 460,
        "wires": [
            []
        ]
    },
    {
        "id": "c3ddc1e2.830ea8",
        "type": "modbus-client",
        "z": "",
        "name": "",
        "clienttype": "tcp",
        "bufferCommands": true,
        "stateLogEnabled": false,
        "tcpHost": "192.168.1.76",
        "tcpPort": "502",
        "tcpType": "DEFAULT",
        "serialPort": "/dev/ttyUSB",
        "serialType": "RTU-BUFFERD",
        "serialBaudrate": "9600",
        "serialDatabits": "8",
        "serialStopbits": "1",
        "serialParity": "none",
        "serialConnectionDelay": "100",
        "unit_id": "1",
        "commandDelay": "1",
        "clientTimeout": "1000",
        "reconnectOnTimeout": true,
        "reconnectTimeout": "2000",
        "parallelUnitIdsAllowed": true
    },
    {
        "id": "f1129bdc.036ed",
        "type": "ui_group",
        "z": "",
        "name": "Input",
        "tab": "3840244c.494fe4",
        "disp": true,
        "width": "6",
        "collapse": false
    },
    {
        "id": "8e915ca2.3028a8",
        "type": "ui_group",
        "z": "",
        "name": "Output",
        "tab": "3840244c.494fe4",
        "disp": true,
        "width": "6",
        "collapse": false
    },
    {
        "id": "3840244c.494fe4",
        "type": "ui_tab",
        "z": "",
        "name": "Home",
        "icon": "dashboard",
        "disabled": false,
        "hidden": false
    }
]

Będę wdzięczny za przykład: jak odczytać i zwizualizować stan wejścia i jak odczytać, zwizualizować i zmienić stan wyjścia.
Zapisane

Simeone

  • Jr. Member
  • **
  • Wiadomości: 98
    • Zobacz profil
Odp: Kamera IP - trigger z PLC do zapisu
« Odpowiedź #7 dnia: Marca 11, 2020, 09:49:35 am »

Prześlę Ci mój sposób na odczyt i wizualizację stanów.

Nie używam switchy tylko buttony, które jednocześnie służą do wymuszenia zmiany stanu zmiennej sterującej danym wyjściem. Dodatkowo w zależności od stanu wyjścia zmienia się kolor podświetlenia przycisku. Dzięki temu mam natychmiast informację czy naciśnięcie przycisku dało efekt w postaci załączenia obwodu.

Myślę, że jak dopasujesz adresy do swojej konfiguracji powinno Ci to zadziałać. Spróbuj zaimportować do siebie i daj znać jaki efekt

Łap przykładowego flowa:

Zapisane

Gradek

  • Newbie
  • *
  • Wiadomości: 30
    • Zobacz profil
Odp: Kamera IP - trigger z PLC do zapisu
« Odpowiedź #8 dnia: Marca 11, 2020, 08:40:49 pm »

Wybacz, ale dalej potrzebuję pomocy. Zmodyfikowałem Twój flow pod moją konfigurację i oto ona:
[
    {
        "id": "dd04aa0c.e32c08",
        "type": "tab",
        "label": "Światło parter",
        "disabled": false,
        "info": ""
    },
    {
        "id": "155805d1.e41cf2",
        "type": "modbus-read",
        "z": "dd04aa0c.e32c08",
        "name": "Read Output Cards",
        "topic": "",
        "showStatusActivities": true,
        "logIOActivities": false,
        "showErrors": true,
        "unitid": "",
        "dataType": "HoldingRegister",
        "adr": "512",
        "quantity": "10",
        "rate": "500",
        "rateUnit": "ms",
        "delayOnStart": false,
        "startDelayTime": "",
        "server": "c3ddc1e2.830ea8",
        "useIOFile": false,
        "ioFile": "",
        "useIOForPayload": false,
        "x": 130,
        "y": 60,
        "wires": [
            [
                "6fd4b1a0.df8848"
            ],
            [
                "6c36df23.ef7848",
                "51cff697.0f066",
                "55455765.796758"
            ]
        ]
    },
    {
        "id": "b5dc350a.9b293",
        "type": "ui_button",
        "z": "dd04aa0c.e32c08",
        "name": "Łazienka szafka",
        "group": "f1129bdc.036ed",
        "order": 6,
        "width": "",
        "height": "",
        "passthru": false,
        "label": "",
        "tooltip": "",
        "color": "",
        "bgcolor": "",
        "icon": "",
        "payload": "1",
        "payloadType": "str",
        "topic": "Digital",
        "x": 800,
        "y": 120,
        "wires": [
            [
                "7954b514.0c9164",
                "4e936292.ba3f04"
            ]
        ]
    },
    {
        "id": "7954b514.0c9164",
        "type": "delay",
        "z": "dd04aa0c.e32c08",
        "name": "100ms",
        "pauseType": "delay",
        "timeout": "100",
        "timeoutUnits": "milliseconds",
        "rate": "1",
        "nbRateUnits": "1",
        "rateUnits": "second",
        "randomFirst": "1",
        "randomLast": "5",
        "randomUnits": "seconds",
        "drop": false,
        "x": 850,
        "y": 180,
        "wires": [
            [
                "4d0977d9.bb3e5"
            ]
        ]
    },
    {
        "id": "4e936292.ba3f04",
        "type": "modbus-write",
        "z": "dd04aa0c.e32c08",
        "name": "12371",
        "showStatusActivities": false,
        "showErrors": false,
        "unitid": "",
        "dataType": "HoldingRegister",
        "adr": "12371",
        "quantity": "1",
        "server": "c3ddc1e2.830ea8",
        "x": 1030,
        "y": 120,
        "wires": [
            [],
            []
        ]
    },
    {
        "id": "4d0977d9.bb3e5",
        "type": "function",
        "z": "dd04aa0c.e32c08",
        "name": "ON/OFF",
        "func": "var x = msg.payload[1];\nmsg_o={payload:0}\nreturn msg_o;",
        "outputs": 1,
        "noerr": 0,
        "x": 980,
        "y": 180,
        "wires": [
            [
                "4e936292.ba3f04"
            ]
        ]
    },
    {
        "id": "36475dc7.c3f762",
        "type": "change",
        "z": "dd04aa0c.e32c08",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "colour",
                "pt": "msg",
                "to": "green",
                "tot": "str"
            },
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "<font size = 1>Łazienka szafka<br><i class=\"fa fa-lightbulb-o fa-fw fa-3x\" aria-hidden=\"true\"></i>",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 600,
        "y": 100,
        "wires": [
            [
                "b5dc350a.9b293"
            ]
        ]
    },
    {
        "id": "fb952228.beaa48",
        "type": "change",
        "z": "dd04aa0c.e32c08",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "colour",
                "pt": "msg",
                "to": "grey",
                "tot": "str"
            },
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "<font size = 3>Łazienka szafka<br><i class=\"fa fa-lightbulb-o fa-fw fa-3x\" aria-hidden=\"true\"></i>",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 600,
        "y": 140,
        "wires": [
            [
                "b5dc350a.9b293"
            ]
        ]
    },
    {
        "id": "6fd4b1a0.df8848",
        "type": "modbus-response",
        "z": "dd04aa0c.e32c08",
        "name": "",
        "registerShowMax": 20,
        "x": 400,
        "y": 40,
        "wires": []
    },
    {
        "id": "56c1906e.3042e8",
        "type": "ui_button",
        "z": "dd04aa0c.e32c08",
        "name": "OswSal",
        "group": "8e915ca2.3028a8",
        "order": 4,
        "width": "",
        "height": "",
        "passthru": false,
        "label": "OswSal",
        "tooltip": "",
        "color": "",
        "bgcolor": "",
        "icon": "",
        "payload": "1",
        "payloadType": "str",
        "topic": "Digital",
        "x": 780,
        "y": 300,
        "wires": [
            [
                "a99bc25c.9dec9",
                "9928c8b6.c38448"
            ]
        ]
    },
    {
        "id": "a99bc25c.9dec9",
        "type": "delay",
        "z": "dd04aa0c.e32c08",
        "name": "100ms",
        "pauseType": "delay",
        "timeout": "100",
        "timeoutUnits": "milliseconds",
        "rate": "1",
        "nbRateUnits": "1",
        "rateUnits": "second",
        "randomFirst": "1",
        "randomLast": "5",
        "randomUnits": "seconds",
        "drop": false,
        "x": 850,
        "y": 360,
        "wires": [
            [
                "7a043026.f8f178"
            ]
        ]
    },
    {
        "id": "9928c8b6.c38448",
        "type": "modbus-write",
        "z": "dd04aa0c.e32c08",
        "name": "12368",
        "showStatusActivities": false,
        "showErrors": false,
        "unitid": "",
        "dataType": "HoldingRegister",
        "adr": "12368",
        "quantity": "1",
        "server": "c3ddc1e2.830ea8",
        "x": 1050,
        "y": 280,
        "wires": [
            [],
            []
        ]
    },
    {
        "id": "7a043026.f8f178",
        "type": "function",
        "z": "dd04aa0c.e32c08",
        "name": "ON/OFF",
        "func": "var x = msg.payload[1];\nmsg_o={payload:0}\nreturn msg_o;",
        "outputs": 1,
        "noerr": 0,
        "x": 980,
        "y": 360,
        "wires": [
            [
                "9928c8b6.c38448"
            ]
        ]
    },
    {
        "id": "87f23bb5.926e38",
        "type": "change",
        "z": "dd04aa0c.e32c08",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "colour",
                "pt": "msg",
                "to": "green",
                "tot": "str"
            },
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "<font size = 1>Łazienka szafka<br><i class=\"fa fa-lightbulb-o fa-fw fa-3x\" aria-hidden=\"true\"></i>",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 600,
        "y": 280,
        "wires": [
            [
                "56c1906e.3042e8"
            ]
        ]
    },
    {
        "id": "1e977b7f.371065",
        "type": "change",
        "z": "dd04aa0c.e32c08",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "colour",
                "pt": "msg",
                "to": "grey",
                "tot": "str"
            },
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "<font size = 3>Łazienka szafka<br><i class=\"fa fa-lightbulb-o fa-fw fa-3x\" aria-hidden=\"true\"></i>",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 600,
        "y": 320,
        "wires": [
            [
                "56c1906e.3042e8"
            ]
        ]
    },
    {
        "id": "6c36df23.ef7848",
        "type": "function",
        "z": "dd04aa0c.e32c08",
        "name": "Karta 1 Wyjście 1",
        "func": "var karta = 1;\nvar bit = 1;\nvar pow = Math.pow(2, bit-1);\n// Create new Buffer based on array bytes\nconst buf = Buffer.from(msg.payload.buffer);\n\n// Represent these bytes as 32-bit unsigned int\nconst value = buf.readUInt16BE(2*(karta-1));\n\n// save the value\nmsg.payload = (value & pow)/pow;\n\nif (msg.payload==1) { return [msg,null]; }\nelse { return [null,msg]; }",
        "outputs": 2,
        "noerr": 0,
        "x": 370,
        "y": 300,
        "wires": [
            [
                "87f23bb5.926e38"
            ],
            [
                "1e977b7f.371065"
            ]
        ]
    },
    {
        "id": "51cff697.0f066",
        "type": "link out",
        "z": "dd04aa0c.e32c08",
        "name": "Bufor",
        "links": [
            "63375142.c3044",
            "1bed5b36.b62e45",
            "93e994ef.3841a8",
            "9271963d.c6f8a8",
            "ce34520.8540ab"
        ],
        "x": 295,
        "y": 180,
        "wires": []
    },
    {
        "id": "55455765.796758",
        "type": "function",
        "z": "dd04aa0c.e32c08",
        "name": "Karta 2 Wyjście 8",
        "func": "// Create new Buffer based on array bytes\nconst buf = Buffer.from(msg.payload.buffer);\n\n// Represent these bytes as 32-bit unsigned int\nconst value = buf.readUInt16BE(2);\n\n// save the value\nmsg.payload = (value & 128)/128;\n\nif (msg.payload==1) { return [msg,null]; }\nelse { return [null,msg]; }",
        "outputs": 2,
        "noerr": 0,
        "x": 370,
        "y": 120,
        "wires": [
            [
                "36475dc7.c3f762"
            ],
            [
                "fb952228.beaa48"
            ]
        ]
    },
    {
        "id": "c3ddc1e2.830ea8",
        "type": "modbus-client",
        "z": "",
        "name": "",
        "clienttype": "tcp",
        "bufferCommands": true,
        "stateLogEnabled": true,
        "tcpHost": "192.168.1.76",
        "tcpPort": "502",
        "tcpType": "DEFAULT",
        "serialPort": "/dev/ttyUSB",
        "serialType": "RTU-BUFFERD",
        "serialBaudrate": "9600",
        "serialDatabits": "8",
        "serialStopbits": "1",
        "serialParity": "none",
        "serialConnectionDelay": "100",
        "unit_id": "1",
        "commandDelay": "1",
        "clientTimeout": "1000",
        "reconnectOnTimeout": false,
        "reconnectTimeout": "1000",
        "parallelUnitIdsAllowed": false
    },
    {
        "id": "f1129bdc.036ed",
        "type": "ui_group",
        "z": "",
        "name": "Input",
        "tab": "3840244c.494fe4",
        "disp": true,
        "width": "6",
        "collapse": false
    },
    {
        "id": "8e915ca2.3028a8",
        "type": "ui_group",
        "z": "",
        "name": "Output",
        "tab": "3840244c.494fe4",
        "disp": true,
        "width": "6",
        "collapse": false
    },
    {
        "id": "3840244c.494fe4",
        "type": "ui_tab",
        "z": "",
        "name": "Home",
        "icon": "dashboard",
        "disabled": false,
        "hidden": false
    }
]

Jednym z moich licznych problemów to błąd:
"FSM Reset On State {"value":"failed","actions":[],"changed":true}"

Z tego co zrozumiałem działanie Twojego flow:

1. pobierasz hurtowo 10 słów (160 bitów)
2. za pomocą pierwszej funkcji w JavaScript "wyłuskujesz" konkretne wyjście
3. robisz czary-mary z kolorami i czcionkami przycisku

I co dalej? Co robi funkcja ON/OFF z tym delayem? Nie bardzo rozumiem też to przepisywanie: jeśli zmienna wejściowa = 1, to ustaw zmienną wyjściową na 1. Co to daje? Nie da rady bez tego?

Za PLC 750-880 mam 4x16DI+4X16DO. Czy dobrze rozumiem, że pierwsze wejście to adres Modbus 0 a ostatnie 63? Tak samo pierwsze wyjście to 512 a ostatnie 575? Jasne jest dla mnie operowanie na bitach, czyli wystawienie 1 na pierwsze wyjście PLC, czyli na adres Modbus 512, ale chyba tak prosto się nie da. Z tego powodu stosujesz FC6: Preset Single Register z adresami > 12000?

A wracając do Kurta, jak zrobić, żeby za pomocą switcha zwizualizować stan wejścia lub wyjścia?
Zapisane

Gradek

  • Newbie
  • *
  • Wiadomości: 30
    • Zobacz profil
Odp: Kamera IP - trigger z PLC do zapisu
« Odpowiedź #9 dnia: Marca 11, 2020, 10:40:11 pm »

Wybacz, ale dalej potrzebuję pomocy. Zmodyfikowałem Twój flow pod moją konfigurację i oto ona:
[
    {
        "id": "dd04aa0c.e32c08",
        "type": "tab",
        "label": "Światło parter",
        "disabled": false,
        "info": ""
    },
    {
        "id": "155805d1.e41cf2",
        "type": "modbus-read",
        "z": "dd04aa0c.e32c08",
        "name": "Read Output Cards",
        "topic": "",
        "showStatusActivities": true,
        "logIOActivities": false,
        "showErrors": true,
        "unitid": "",
        "dataType": "HoldingRegister",
        "adr": "512",
        "quantity": "10",
        "rate": "500",
        "rateUnit": "ms",
        "delayOnStart": false,
        "startDelayTime": "",
        "server": "c3ddc1e2.830ea8",
        "useIOFile": false,
        "ioFile": "",
        "useIOForPayload": false,
        "x": 130,
        "y": 60,
        "wires": [
            [
                "6fd4b1a0.df8848"
            ],
            [
                "6c36df23.ef7848",
                "51cff697.0f066",
                "55455765.796758"
            ]
        ]
    },
    {
        "id": "b5dc350a.9b293",
        "type": "ui_button",
        "z": "dd04aa0c.e32c08",
        "name": "Łazienka szafka",
        "group": "f1129bdc.036ed",
        "order": 6,
        "width": "",
        "height": "",
        "passthru": false,
        "label": "",
        "tooltip": "",
        "color": "",
        "bgcolor": "",
        "icon": "",
        "payload": "1",
        "payloadType": "str",
        "topic": "Digital",
        "x": 800,
        "y": 120,
        "wires": [
            [
                "7954b514.0c9164",
                "4e936292.ba3f04"
            ]
        ]
    },
    {
        "id": "7954b514.0c9164",
        "type": "delay",
        "z": "dd04aa0c.e32c08",
        "name": "100ms",
        "pauseType": "delay",
        "timeout": "100",
        "timeoutUnits": "milliseconds",
        "rate": "1",
        "nbRateUnits": "1",
        "rateUnits": "second",
        "randomFirst": "1",
        "randomLast": "5",
        "randomUnits": "seconds",
        "drop": false,
        "x": 850,
        "y": 180,
        "wires": [
            [
                "4d0977d9.bb3e5"
            ]
        ]
    },
    {
        "id": "4e936292.ba3f04",
        "type": "modbus-write",
        "z": "dd04aa0c.e32c08",
        "name": "12371",
        "showStatusActivities": false,
        "showErrors": false,
        "unitid": "",
        "dataType": "HoldingRegister",
        "adr": "12371",
        "quantity": "1",
        "server": "c3ddc1e2.830ea8",
        "x": 1030,
        "y": 120,
        "wires": [
            [],
            []
        ]
    },
    {
        "id": "4d0977d9.bb3e5",
        "type": "function",
        "z": "dd04aa0c.e32c08",
        "name": "ON/OFF",
        "func": "var x = msg.payload[1];\nmsg_o={payload:0}\nreturn msg_o;",
        "outputs": 1,
        "noerr": 0,
        "x": 980,
        "y": 180,
        "wires": [
            [
                "4e936292.ba3f04"
            ]
        ]
    },
    {
        "id": "36475dc7.c3f762",
        "type": "change",
        "z": "dd04aa0c.e32c08",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "colour",
                "pt": "msg",
                "to": "green",
                "tot": "str"
            },
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "<font size = 1>Łazienka szafka<br><i class=\"fa fa-lightbulb-o fa-fw fa-3x\" aria-hidden=\"true\"></i>",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 600,
        "y": 100,
        "wires": [
            [
                "b5dc350a.9b293"
            ]
        ]
    },
    {
        "id": "fb952228.beaa48",
        "type": "change",
        "z": "dd04aa0c.e32c08",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "colour",
                "pt": "msg",
                "to": "grey",
                "tot": "str"
            },
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "<font size = 3>Łazienka szafka<br><i class=\"fa fa-lightbulb-o fa-fw fa-3x\" aria-hidden=\"true\"></i>",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 600,
        "y": 140,
        "wires": [
            [
                "b5dc350a.9b293"
            ]
        ]
    },
    {
        "id": "6fd4b1a0.df8848",
        "type": "modbus-response",
        "z": "dd04aa0c.e32c08",
        "name": "",
        "registerShowMax": 20,
        "x": 400,
        "y": 40,
        "wires": []
    },
    {
        "id": "56c1906e.3042e8",
        "type": "ui_button",
        "z": "dd04aa0c.e32c08",
        "name": "OswSal",
        "group": "8e915ca2.3028a8",
        "order": 4,
        "width": "",
        "height": "",
        "passthru": false,
        "label": "OswSal",
        "tooltip": "",
        "color": "",
        "bgcolor": "",
        "icon": "",
        "payload": "1",
        "payloadType": "str",
        "topic": "Digital",
        "x": 780,
        "y": 300,
        "wires": [
            [
                "a99bc25c.9dec9",
                "9928c8b6.c38448"
            ]
        ]
    },
    {
        "id": "a99bc25c.9dec9",
        "type": "delay",
        "z": "dd04aa0c.e32c08",
        "name": "100ms",
        "pauseType": "delay",
        "timeout": "100",
        "timeoutUnits": "milliseconds",
        "rate": "1",
        "nbRateUnits": "1",
        "rateUnits": "second",
        "randomFirst": "1",
        "randomLast": "5",
        "randomUnits": "seconds",
        "drop": false,
        "x": 850,
        "y": 360,
        "wires": [
            [
                "7a043026.f8f178"
            ]
        ]
    },
    {
        "id": "9928c8b6.c38448",
        "type": "modbus-write",
        "z": "dd04aa0c.e32c08",
        "name": "12368",
        "showStatusActivities": false,
        "showErrors": false,
        "unitid": "",
        "dataType": "HoldingRegister",
        "adr": "12368",
        "quantity": "1",
        "server": "c3ddc1e2.830ea8",
        "x": 1050,
        "y": 280,
        "wires": [
            [],
            []
        ]
    },
    {
        "id": "7a043026.f8f178",
        "type": "function",
        "z": "dd04aa0c.e32c08",
        "name": "ON/OFF",
        "func": "var x = msg.payload[1];\nmsg_o={payload:0}\nreturn msg_o;",
        "outputs": 1,
        "noerr": 0,
        "x": 980,
        "y": 360,
        "wires": [
            [
                "9928c8b6.c38448"
            ]
        ]
    },
    {
        "id": "87f23bb5.926e38",
        "type": "change",
        "z": "dd04aa0c.e32c08",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "colour",
                "pt": "msg",
                "to": "green",
                "tot": "str"
            },
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "<font size = 1>Łazienka szafka<br><i class=\"fa fa-lightbulb-o fa-fw fa-3x\" aria-hidden=\"true\"></i>",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 600,
        "y": 280,
        "wires": [
            [
                "56c1906e.3042e8"
            ]
        ]
    },
    {
        "id": "1e977b7f.371065",
        "type": "change",
        "z": "dd04aa0c.e32c08",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "colour",
                "pt": "msg",
                "to": "grey",
                "tot": "str"
            },
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "<font size = 3>Łazienka szafka<br><i class=\"fa fa-lightbulb-o fa-fw fa-3x\" aria-hidden=\"true\"></i>",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 600,
        "y": 320,
        "wires": [
            [
                "56c1906e.3042e8"
            ]
        ]
    },
    {
        "id": "6c36df23.ef7848",
        "type": "function",
        "z": "dd04aa0c.e32c08",
        "name": "Karta 1 Wyjście 1",
        "func": "var karta = 1;\nvar bit = 1;\nvar pow = Math.pow(2, bit-1);\n// Create new Buffer based on array bytes\nconst buf = Buffer.from(msg.payload.buffer);\n\n// Represent these bytes as 32-bit unsigned int\nconst value = buf.readUInt16BE(2*(karta-1));\n\n// save the value\nmsg.payload = (value & pow)/pow;\n\nif (msg.payload==1) { return [msg,null]; }\nelse { return [null,msg]; }",
        "outputs": 2,
        "noerr": 0,
        "x": 370,
        "y": 300,
        "wires": [
            [
                "87f23bb5.926e38"
            ],
            [
                "1e977b7f.371065"
            ]
        ]
    },
    {
        "id": "51cff697.0f066",
        "type": "link out",
        "z": "dd04aa0c.e32c08",
        "name": "Bufor",
        "links": [
            "63375142.c3044",
            "1bed5b36.b62e45",
            "93e994ef.3841a8",
            "9271963d.c6f8a8",
            "ce34520.8540ab"
        ],
        "x": 295,
        "y": 180,
        "wires": []
    },
    {
        "id": "55455765.796758",
        "type": "function",
        "z": "dd04aa0c.e32c08",
        "name": "Karta 2 Wyjście 8",
        "func": "// Create new Buffer based on array bytes\nconst buf = Buffer.from(msg.payload.buffer);\n\n// Represent these bytes as 32-bit unsigned int\nconst value = buf.readUInt16BE(2);\n\n// save the value\nmsg.payload = (value & 128)/128;\n\nif (msg.payload==1) { return [msg,null]; }\nelse { return [null,msg]; }",
        "outputs": 2,
        "noerr": 0,
        "x": 370,
        "y": 120,
        "wires": [
            [
                "36475dc7.c3f762"
            ],
            [
                "fb952228.beaa48"
            ]
        ]
    },
    {
        "id": "c3ddc1e2.830ea8",
        "type": "modbus-client",
        "z": "",
        "name": "",
        "clienttype": "tcp",
        "bufferCommands": true,
        "stateLogEnabled": true,
        "tcpHost": "192.168.1.76",
        "tcpPort": "502",
        "tcpType": "DEFAULT",
        "serialPort": "/dev/ttyUSB",
        "serialType": "RTU-BUFFERD",
        "serialBaudrate": "9600",
        "serialDatabits": "8",
        "serialStopbits": "1",
        "serialParity": "none",
        "serialConnectionDelay": "100",
        "unit_id": "1",
        "commandDelay": "1",
        "clientTimeout": "1000",
        "reconnectOnTimeout": false,
        "reconnectTimeout": "1000",
        "parallelUnitIdsAllowed": false
    },
    {
        "id": "f1129bdc.036ed",
        "type": "ui_group",
        "z": "",
        "name": "Input",
        "tab": "3840244c.494fe4",
        "disp": true,
        "width": "6",
        "collapse": false
    },
    {
        "id": "8e915ca2.3028a8",
        "type": "ui_group",
        "z": "",
        "name": "Output",
        "tab": "3840244c.494fe4",
        "disp": true,
        "width": "6",
        "collapse": false
    },
    {
        "id": "3840244c.494fe4",
        "type": "ui_tab",
        "z": "",
        "name": "Home",
        "icon": "dashboard",
        "disabled": false,
        "hidden": false
    }
]

Jednym z moich licznych problemów to błąd:
"FSM Reset On State {"value":"failed","actions":[],"changed":true}"

Z tego co zrozumiałem działanie Twojego flow:

1. pobierasz hurtowo 10 słów (160 bitów)
2. za pomocą pierwszej funkcji w JavaScript "wyłuskujesz" konkretne wyjście
3. robisz czary-mary z kolorami i czcionkami przycisku

I co dalej? Co robi funkcja ON/OFF z tym delayem? Nie bardzo rozumiem też to przepisywanie: jeśli zmienna wejściowa = 1, to ustaw zmienną wyjściową na 1. Co to daje? Nie da rady bez tego?

Za PLC 750-880 mam 4x16DI+4X16DO. Czy dobrze rozumiem, że pierwsze wejście to adres Modbus 0 a ostatnie 63? Tak samo pierwsze wyjście to 512 a ostatnie 575? Jasne jest dla mnie operowanie na bitach, czyli wystawienie 1 na pierwsze wyjście PLC, czyli na adres Modbus 512, ale chyba tak prosto się nie da. Z tego powodu stosujesz FC6: Preset Single Register z adresami > 12000?

A wracając do Kurta, jak zrobić, żeby za pomocą switcha zwizualizować stan wejścia lub wyjścia?

Na ostatnie już znalazłem rozwiązanie. W czasie gdy Kurt nagrywał swój film NodeRED nie rozróżniał stringów od liczb. Po zmianie w switchu parametru "On Payload" ze string na number na wizualizacji wyświetla się już status wejścia/wyjścia.

Prześledziłem ponownie film Kurta i u mnie nie działa zmiana stanu wyjścia przez FC5 Force Single Coil na adresie 512. Gdy podepnę debuga pod Modbus Write otrzymuję takie info:
msg.payload : Object { value: true, unitid: "", fc: 5, address: 512, quantity: "1" … }

Będę wdzięczny za odpowiedź w pozostałych kwestiach.
Zapisane

Simeone

  • Jr. Member
  • **
  • Wiadomości: 98
    • Zobacz profil
Odp: Kamera IP - trigger z PLC do zapisu
« Odpowiedź #10 dnia: Marca 11, 2020, 11:02:27 pm »

Z tego co zrozumiałem działanie Twojego flow:
1. pobierasz hurtowo 10 słów (160 bitów)

Zgadza się - mam 10 kart wyjściowych szesnastokanałowych, czyli jednym zapytaniem otrzymuję informację o wszystkich wyjściach.

2. za pomocą pierwszej funkcji w JavaScript "wyłuskujesz" konkretne wyjście
3. robisz czary-mary z kolorami i czcionkami przycisku

Wciąż wszystko się zgadza

I co dalej? Co robi funkcja ON/OFF z tym delayem? Nie bardzo rozumiem też to przepisywanie: jeśli zmienna wejściowa = 1, to ustaw zmienną wyjściową na 1. Co to daje? Nie da rady bez tego?

To taka trochę proteza, bo bardziej elegancko wyglądał by bloczek Trigger i takie rozwiązanie Ci polecam. Wyjaśniam o co chodzi: po wciśnięciu przycisku, do bloczka "Modbus write node" wysyłana jest jedynka (bezpośrednie połączenie). Ten z kolei wysyła po modbusie żądanie ustawienia rejestru o zadanym adresie (np. 12371) na tą właśnie wartość (TRUE). Pod tym adresem (np. 12371) znajduje się zmienna w kodzie programu sterownika, która jest "do-or-owana" do wejścia sterowanego fizycznym pstryczkiem w ścianie (patrz załączony zrzut). Ponieważ bloki funkcyjne Fb_LatchingRelay, których używam w Codesys do sterowania oświetleniem wykrywają zbocza narastające, wysterowana zmienna musi wrócić do stanu niskiego i do tego właśnie używam funkcji ON/OFF w NodeRedzie poprzedzonej bloczkiem "Delay" ustawionym w tym przypadku na 100ms. Jednak tak jak wspomniałem wcześniej przymierzam się do wymiany tych par na pojedyncze bloczki Trigger.

Za PLC 750-880 mam 4x16DI+4X16DO. Czy dobrze rozumiem, że pierwsze wejście to adres Modbus 0 a ostatnie 63? Tak samo pierwsze wyjście to 512 a ostatnie 575? Jasne jest dla mnie operowanie na bitach, czyli wystawienie 1 na pierwsze wyjście PLC, czyli na adres Modbus 512, ale chyba tak prosto się nie da. Z tego powodu stosujesz FC6: Preset Single Register z adresami > 12000?

Wejścia adresowane są od 0 do 511, natomiast wyjścia od 512 do 1023. Odsyłam do podlinkowanego wcześniej artykuły Admina "Wstęp do Modbusa"

Prześledziłem ponownie film Kurta i u mnie nie działa zmiana stanu wyjścia przez FC5 Force Single Coil na adresie 512. Gdy podepnę debuga pod Modbus Write otrzymuję takie info:
msg.payload : Object { value: true, unitid: "", fc: 5, address: 512, quantity: "1" … }

Będę wdzięczny za odpowiedź w pozostałych kwestiach.

Absolutnie nie próbuj sterować wyjściami wysyłając żądania po Modbusie bo zwyczajnie się nie da. Domyślam się, że z tego wynika błąd, o którym pisałeś wcześniej. Wysterować wyjście możesz jedynie z poziomu programu sterownika, dlatego spróbuj to zrobić tak jak wyżej opisałem.

Poniżej załączam zrzut, który powinien co nieco wyjaśnić:
Zapisane

Gradek

  • Newbie
  • *
  • Wiadomości: 30
    • Zobacz profil
Odp: Kamera IP - trigger z PLC do zapisu
« Odpowiedź #11 dnia: Marca 12, 2020, 01:47:50 pm »

yeah! Wreszcie zagadało! Dzięki!!!

Twój flow importuje się chyba niekompletny, bo przy przyciskach miałem czerwone znaczki, że czegoś brakuje. Zabrakło chyba 2 zmiennych (patrz załącznik). Po ich uzupełnieniu wszystko działa. Jak zrobić, żeby ikony były wyświetlane po lewej stronie i wyrównane do siebie? Tabelę jakąś trzeba wstawić? U mnie ikona wyświetlana jest pod napisem a nie obok niego. Na razie sobie poradziłem wpisująć na sztywno nazwę ikony we właściwościach przycisku, ale da się to inaczej/lepiej zrobić?

Będę teraz powielał przyciski, ale pomyślałem, że jeśli zmieni mi się koncepcja i będę chciał zmienić np. kolor przycisków, to w aktualnej sytuacji będę musiał przeklikać każdy przycisk. Czy w Node-RED istnieje coś takiego jak zmienne w Codesys? Chodzi mi o rozwiązanie, że w jednym miejscu modyfikuję np. Black na Green i wszystkie przyciski zmieniają kolor.
Zapisane

Simeone

  • Jr. Member
  • **
  • Wiadomości: 98
    • Zobacz profil
Odp: Kamera IP - trigger z PLC do zapisu
« Odpowiedź #12 dnia: Marca 13, 2020, 07:23:43 am »

yeah! Wreszcie zagadało! Dzięki!!!

Super :)

Jak zrobić, żeby ikony były wyświetlane po lewej stronie i wyrównane do siebie? Tabelę jakąś trzeba wstawić? U mnie ikona wyświetlana jest pod napisem a nie obok niego. Na razie sobie poradziłem wpisująć na sztywno nazwę ikony we właściwościach przycisku, ale da się to inaczej/lepiej zrobić?

Format wyświetlania ustalany jest w postaci tagów tak jak w html (patrz załącznik) w nawiasach wąsatych występują parametry, które pobierają się z bloczka poprzedzającego tak jak w przypadku {{colour}} czy {{payload}}. Chodzi o to, żeby w momencie wysterowania danego wyjścia kolor przycisku zmienił się np. na zielony. Masz w ten sposób potwierdzenie, że wciśnięcie przycisku przyniosło spodziewany efekt.

Będę teraz powielał przyciski, ale pomyślałem, że jeśli zmieni mi się koncepcja i będę chciał zmienić np. kolor przycisków, to w aktualnej sytuacji będę musiał przeklikać każdy przycisk. Czy w Node-RED istnieje coś takiego jak zmienne w Codesys? Chodzi mi o rozwiązanie, że w jednym miejscu modyfikuję np. Black na Green i wszystkie przyciski zmieniają kolor.

Tutaj z pomocą przychodzą zmienne globalne. Na drugim zrzucie możesz zobaczyć, że po rozwinięciu comboboxu w węźle "Edit change node" masz wybór jaki typ zmiennej ma zostać użyty.
Więcej w temacie zmiennych globalnych możesz doczytać na stronie NodeReda
Zapisane

Gradek

  • Newbie
  • *
  • Wiadomości: 30
    • Zobacz profil
Odp: Kamera IP - trigger z PLC do zapisu
« Odpowiedź #13 dnia: Marca 13, 2020, 07:47:47 am »

Pomocy, coś znowu naknociłem. W poniższym flow kolor zmienia tylko pierwszy przycisk a pozostałe już nie. Zmiana stanu zmiennej w PLC działa prawidłowo.

[{"id":"7a0c4296.ea5a9c","type":"tab","label":"Flow 1","disabled":false,"info":""},{"id":"aacf6ccf.de7218","type":"modbus-read","z":"7a0c4296.ea5a9c","name":"Read Output Cards","topic":"","showStatusActivities":true,"logIOActivities":false,"showErrors":false,"unitid":"","dataType":"HoldingRegister","adr":"512","quantity":"4","rate":"500","rateUnit":"ms","delayOnStart":false,"startDelayTime":"","server":"c3ddc1e2.830ea8","useIOFile":false,"ioFile":"","useIOForPayload":false,"x":130,"y":60,"wires":[["d69384c.6661e78"],["2e3b6922.f97b36","fee1b2aa.3ea228"]]},{"id":"d69384c.6661e78","type":"modbus-response","z":"7a0c4296.ea5a9c","name":"","registerShowMax":20,"x":410,"y":40,"wires":[]},{"id":"ca2fca8b.4fd378","type":"ui_button","z":"7a0c4296.ea5a9c","name":"Salon górne","group":"8379383b.58d758","order":1,"width":0,"height":0,"passthru":false,"label":"Salon górne","tooltip":"","color":"{{colour}}","bgcolor":"","icon":"fa-lightbulb-o fa-fw fa-3x","payload":"1","payloadType":"str","topic":"a","x":790,"y":160,"wires":[["e4569b07.971da"]]},{"id":"6a4ed87d.1282f8","type":"modbus-write","z":"7a0c4296.ea5a9c","name":"12288","showStatusActivities":false,"showErrors":false,"unitid":"","dataType":"HoldingRegister","adr":"12288","quantity":"1","server":"c3ddc1e2.830ea8","x":1150,"y":160,"wires":[[],[]]},{"id":"2e3b6922.f97b36","type":"function","z":"7a0c4296.ea5a9c","name":"Karta 1 Wyjście 1","func":"var karta = 1;\nvar bit = 1;\nvar pow = Math.pow(2, bit-1);\n// Create new Buffer based on array bytes\nconst buf = Buffer.from(msg.payload.buffer);\n\n// Represent these bytes as 32-bit unsigned int\nconst value = buf.readUInt16BE(2*(karta-1));\n\n// save the value\nmsg.payload = (value & pow)/pow;\n\nif (msg.payload==1) { return [msg,null]; }\nelse { return [null,msg]; }","outputs":2,"noerr":0,"x":390,"y":160,"wires":[["41367ae2.a3c674"],["7814a2b0.d4f2ac"]]},{"id":"fee1b2aa.3ea228","type":"link out","z":"7a0c4296.ea5a9c","name":"Bufor","links":["63375142.c3044","1bed5b36.b62e45","93e994ef.3841a8","9271963d.c6f8a8","ce34520.8540ab"],"x":395,"y":100,"wires":[]},{"id":"41367ae2.a3c674","type":"change","z":"7a0c4296.ea5a9c","name":"","rules":[{"t":"set","p":"colour","pt":"msg","to":"yellow","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":600,"y":140,"wires":[["ca2fca8b.4fd378"]]},{"id":"7814a2b0.d4f2ac","type":"change","z":"7a0c4296.ea5a9c","name":"","rules":[{"t":"set","p":"colour","pt":"msg","to":"default","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":600,"y":180,"wires":[["ca2fca8b.4fd378"]]},{"id":"e4569b07.971da","type":"trigger","z":"7a0c4296.ea5a9c","op1":"1","op2":"0","op1type":"str","op2type":"str","duration":"100","extend":false,"units":"ms","reset":"0","bytopic":"all","name":"","x":1000,"y":160,"wires":[["6a4ed87d.1282f8"]]},{"id":"2d566dd.186f592","type":"ui_button","z":"7a0c4296.ea5a9c","name":"Jadalnia","group":"8379383b.58d758","order":2,"width":0,"height":0,"passthru":false,"label":"Jadalnia","tooltip":"","color":"{{colour}}","bgcolor":"","icon":"fa-lightbulb-o fa-fw fa-3x","payload":"1","payloadType":"str","topic":"a","x":780,"y":240,"wires":[["603f2d2.bc7da54"]]},{"id":"b858f27c.405058","type":"modbus-write","z":"7a0c4296.ea5a9c","name":"12289","showStatusActivities":false,"showErrors":false,"unitid":"","dataType":"HoldingRegister","adr":"12289","quantity":"1","server":"c3ddc1e2.830ea8","x":1170,"y":240,"wires":[[],[]]},{"id":"477c7ad2.1e48bc","type":"function","z":"7a0c4296.ea5a9c","name":"Karta 1 Wyjście 2","func":"var karta = 1;\nvar bit = 2;\nvar pow = Math.pow(2, bit-1);\n// Create new Buffer based on array bytes\nconst buf = Buffer.from(msg.payload.buffer);\n\n// Represent these bytes as 32-bit unsigned int\nconst value = buf.readUInt16BE(2*(karta-1));\n\n// save the value\nmsg.payload = (value & pow)/pow;\n\nif (msg.payload==1) { return [msg,null]; }\nelse { return [null,msg]; }","outputs":2,"noerr":0,"x":390,"y":240,"wires":[["d192ae91.9d7a1"],["20b7ddfc.e15be2"]]},{"id":"d192ae91.9d7a1","type":"change","z":"7a0c4296.ea5a9c","name":"","rules":[{"t":"set","p":"colour","pt":"msg","to":"yellow","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":600,"y":220,"wires":[["2d566dd.186f592"]]},{"id":"20b7ddfc.e15be2","type":"change","z":"7a0c4296.ea5a9c","name":"","rules":[{"t":"set","p":"colour","pt":"msg","to":"default","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":600,"y":260,"wires":[["2d566dd.186f592"]]},{"id":"603f2d2.bc7da54","type":"trigger","z":"7a0c4296.ea5a9c","op1":"1","op2":"0","op1type":"str","op2type":"str","duration":"100","extend":false,"units":"ms","reset":"0","bytopic":"all","name":"","x":1000,"y":240,"wires":[["b858f27c.405058"]]},{"id":"e6bba597.c0c398","type":"ui_button","z":"7a0c4296.ea5a9c","name":"Salon stolik","group":"8379383b.58d758","order":3,"width":0,"height":0,"passthru":false,"label":"Salon stolik","tooltip":"","color":"{{colour}}","bgcolor":"","icon":"fa-lightbulb-o fa-fw fa-3x","payload":"1","payloadType":"str","topic":"","x":790,"y":320,"wires":[["116ce3a7.dbdea4"]]},{"id":"526acf4e.54ceb","type":"modbus-write","z":"7a0c4296.ea5a9c","name":"12290","showStatusActivities":false,"showErrors":false,"unitid":"","dataType":"HoldingRegister","adr":"12290","quantity":"1","server":"c3ddc1e2.830ea8","x":1150,"y":320,"wires":[[],[]]},{"id":"b84b762f.919ca","type":"function","z":"7a0c4296.ea5a9c","name":"Karta 1 Wyjście 3","func":"var karta = 1;\nvar bit = 3;\nvar pow = Math.pow(2, bit-1);\n// Create new Buffer based on array bytes\nconst buf = Buffer.from(msg.payload.buffer);\n\n// Represent these bytes as 32-bit unsigned int\nconst value = buf.readUInt16BE(2*(karta-1));\n\n// save the value\nmsg.payload = (value & pow)/pow;\n\nif (msg.payload==1) { return [msg,null]; }\nelse { return [null,msg]; }","outputs":2,"noerr":0,"x":390,"y":320,"wires":[["1015e7bb.e0f62"],["2212ed9.1e62c12"]]},{"id":"1015e7bb.e0f62","type":"change","z":"7a0c4296.ea5a9c","name":"","rules":[{"t":"set","p":"colour","pt":"msg","to":"yellow","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":600,"y":300,"wires":[["e6bba597.c0c398"]]},{"id":"2212ed9.1e62c12","type":"change","z":"7a0c4296.ea5a9c","name":"","rules":[{"t":"set","p":"colour","pt":"msg","to":"default","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":600,"y":340,"wires":[["e6bba597.c0c398"]]},{"id":"116ce3a7.dbdea4","type":"trigger","z":"7a0c4296.ea5a9c","op1":"1","op2":"0","op1type":"str","op2type":"str","duration":"100","extend":false,"units":"ms","reset":"0","bytopic":"all","name":"","x":1000,"y":320,"wires":[["526acf4e.54ceb"]]},{"id":"809085e4.29064","type":"ui_button","z":"7a0c4296.ea5a9c","name":"Przedpokój","group":"8379383b.58d758","order":4,"width":0,"height":0,"passthru":false,"label":"Przedpokój","tooltip":"","color":"{{colour}}","bgcolor":"","icon":"fa-lightbulb-o fa-fw fa-3x","payload":"1","payloadType":"str","topic":"","x":790,"y":400,"wires":[["1a085fba.d1a5f8"]]},{"id":"9c4da1eb.2b1338","type":"modbus-write","z":"7a0c4296.ea5a9c","name":"12291","showStatusActivities":false,"showErrors":false,"unitid":"","dataType":"HoldingRegister","adr":"12291","quantity":"1","server":"c3ddc1e2.830ea8","x":1150,"y":400,"wires":[[],[]]},{"id":"fdc48fa.4dff7f","type":"function","z":"7a0c4296.ea5a9c","name":"Karta 1 Wyjście 4","func":"var karta = 1;\nvar bit = 4;\nvar pow = Math.pow(2, bit-1);\n// Create new Buffer based on array bytes\nconst buf = Buffer.from(msg.payload.buffer);\n\n// Represent these bytes as 32-bit unsigned int\nconst value = buf.readUInt16BE(2*(karta-1));\n\n// save the value\nmsg.payload = (value & pow)/pow;\n\nif (msg.payload==1) { return [msg,null]; }\nelse { return [null,msg]; }","outputs":2,"noerr":0,"x":390,"y":400,"wires":[["79962d57.824f4c"],["ea1dbe04.881a08"]]},{"id":"79962d57.824f4c","type":"change","z":"7a0c4296.ea5a9c","name":"","rules":[{"t":"set","p":"colour","pt":"msg","to":"yellow","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":600,"y":380,"wires":[["809085e4.29064"]]},{"id":"ea1dbe04.881a08","type":"change","z":"7a0c4296.ea5a9c","name":"","rules":[{"t":"set","p":"colour","pt":"msg","to":"default","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":600,"y":420,"wires":[["809085e4.29064"]]},{"id":"1a085fba.d1a5f8","type":"trigger","z":"7a0c4296.ea5a9c","op1":"1","op2":"0","op1type":"str","op2type":"str","duration":"100","extend":false,"units":"ms","reset":"0","bytopic":"all","name":"","x":1000,"y":400,"wires":[["9c4da1eb.2b1338"]]},{"id":"3033c4ae.35874c","type":"ui_button","z":"7a0c4296.ea5a9c","name":"Kuchnia halogeny","group":"8379383b.58d758","order":5,"width":0,"height":0,"passthru":false,"label":"Kuchnia halogeny","tooltip":"","color":"{{colour}}","bgcolor":"","icon":"fa-lightbulb-o fa-fw fa-3x","payload":"1","payloadType":"str","topic":"","x":810,"y":480,"wires":[["b7109f5c.e26a2"]]},{"id":"d9c096e9.d8f13","type":"modbus-write","z":"7a0c4296.ea5a9c","name":"12292","showStatusActivities":false,"showErrors":false,"unitid":"","dataType":"HoldingRegister","adr":"12292","quantity":"1","server":"c3ddc1e2.830ea8","x":1150,"y":480,"wires":[[],[]]},{"id":"5f4664ba.e7535c","type":"function","z":"7a0c4296.ea5a9c","name":"Karta 1 Wyjście 5","func":"var karta = 1;\nvar bit = 5;\nvar pow = Math.pow(2, bit-1);\n// Create new Buffer based on array bytes\nconst buf = Buffer.from(msg.payload.buffer);\n\n// Represent these bytes as 32-bit unsigned int\nconst value = buf.readUInt16BE(2*(karta-1));\n\n// save the value\nmsg.payload = (value & pow)/pow;\n\nif (msg.payload==1) { return [msg,null]; }\nelse { return [null,msg]; }","outputs":2,"noerr":0,"x":390,"y":480,"wires":[["d0a18251.b9828"],["d2565cd0.72a75"]]},{"id":"d0a18251.b9828","type":"change","z":"7a0c4296.ea5a9c","name":"","rules":[{"t":"set","p":"colour","pt":"msg","to":"yellow","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":600,"y":460,"wires":[["3033c4ae.35874c"]]},{"id":"d2565cd0.72a75","type":"change","z":"7a0c4296.ea5a9c","name":"","rules":[{"t":"set","p":"colour","pt":"msg","to":"default","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":600,"y":500,"wires":[["3033c4ae.35874c"]]},{"id":"b7109f5c.e26a2","type":"trigger","z":"7a0c4296.ea5a9c","op1":"1","op2":"0","op1type":"str","op2type":"str","duration":"100","extend":false,"units":"ms","reset":"0","bytopic":"all","name":"","x":1000,"y":480,"wires":[["d9c096e9.d8f13"]]},{"id":"4d59857d.492734","type":"ui_button","z":"7a0c4296.ea5a9c","name":"Schody kinkiet","group":"8379383b.58d758","order":6,"width":0,"height":0,"passthru":false,"label":"Schody kinkiet","tooltip":"","color":"{{colour}}","bgcolor":"","icon":"fa-lightbulb-o fa-fw fa-3x","payload":"1","payloadType":"str","topic":"a","x":800,"y":560,"wires":[["f79aff51.9c164"]]},{"id":"464c950e.2e199c","type":"modbus-write","z":"7a0c4296.ea5a9c","name":"12293","showStatusActivities":false,"showErrors":false,"unitid":"","dataType":"HoldingRegister","adr":"12293","quantity":"1","server":"c3ddc1e2.830ea8","x":1150,"y":560,"wires":[[],[]]},{"id":"b6835fc0.2eb738","type":"function","z":"7a0c4296.ea5a9c","name":"Karta 1 Wyjście 6","func":"var karta = 1;\nvar bit = 6;\nvar pow = Math.pow(2, bit-1);\n// Create new Buffer based on array bytes\nconst buf = Buffer.from(msg.payload.buffer);\n\n// Represent these bytes as 32-bit unsigned int\nconst value = buf.readUInt16BE(2*(karta-1));\n\n// save the value\nmsg.payload = (value & pow)/pow;\n\nif (msg.payload==1) { return [msg,null]; }\nelse { return [null,msg]; }","outputs":2,"noerr":0,"x":390,"y":560,"wires":[["d832d75b.ec5008"],["81621e29.ed636"]]},{"id":"d832d75b.ec5008","type":"change","z":"7a0c4296.ea5a9c","name":"","rules":[{"t":"set","p":"colour","pt":"msg","to":"yellow","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":600,"y":540,"wires":[["4d59857d.492734"]]},{"id":"81621e29.ed636","type":"change","z":"7a0c4296.ea5a9c","name":"","rules":[{"t":"set","p":"colour","pt":"msg","to":"default","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":600,"y":580,"wires":[["4d59857d.492734"]]},{"id":"f79aff51.9c164","type":"trigger","z":"7a0c4296.ea5a9c","op1":"1","op2":"0","op1type":"str","op2type":"str","duration":"100","extend":false,"units":"ms","reset":"","bytopic":"all","name":"","x":1000,"y":560,"wires":[["464c950e.2e199c"]]},{"id":"c3ddc1e2.830ea8","type":"modbus-client","z":"","name":"","clienttype":"tcp","bufferCommands":true,"stateLogEnabled":true,"tcpHost":"192.168.1.76","tcpPort":"502","tcpType":"DEFAULT","serialPort":"/dev/ttyUSB","serialType":"RTU-BUFFERD","serialBaudrate":"9600","serialDatabits":"8","serialStopbits":"1","serialParity":"none","serialConnectionDelay":"100","unit_id":"1","commandDelay":"1","clientTimeout":"1000","reconnectOnTimeout":false,"reconnectTimeout":"1000","parallelUnitIdsAllowed":false},{"id":"8379383b.58d758","type":"ui_group","z":"","name":"Oświetlenie","tab":"21a4c53.0efe1ba","disp":true,"width":3,"collapse":false},{"id":"21a4c53.0efe1ba","type":"ui_tab","z":"","name":"Start","icon":"dashboard","order":1}]
Zapisane

Gradek

  • Newbie
  • *
  • Wiadomości: 30
    • Zobacz profil
Odp: Kamera IP - trigger z PLC do zapisu
« Odpowiedź #14 dnia: Marca 13, 2020, 07:58:34 am »

Łomatko! nawet nie sprawdzaj, znalazłem powód. Nie połączyłem bloku Modbusa z resztą bloków. Odpowiedź klasy: urządzenie elektryczne działa lepiej, jak włączy się je do prądu...eh
Pomocy, coś znowu naknociłem. W poniższym flow kolor zmienia tylko pierwszy przycisk a pozostałe już nie. Zmiana stanu zmiennej w PLC działa prawidłowo.

[{"id":"7a0c4296.ea5a9c","type":"tab","label":"Flow 1","disabled":false,"info":""},{"id":"aacf6ccf.de7218","type":"modbus-read","z":"7a0c4296.ea5a9c","name":"Read Output Cards","topic":"","showStatusActivities":true,"logIOActivities":false,"showErrors":false,"unitid":"","dataType":"HoldingRegister","adr":"512","quantity":"4","rate":"500","rateUnit":"ms","delayOnStart":false,"startDelayTime":"","server":"c3ddc1e2.830ea8","useIOFile":false,"ioFile":"","useIOForPayload":false,"x":130,"y":60,"wires":[["d69384c.6661e78"],["2e3b6922.f97b36","fee1b2aa.3ea228"]]},{"id":"d69384c.6661e78","type":"modbus-response","z":"7a0c4296.ea5a9c","name":"","registerShowMax":20,"x":410,"y":40,"wires":[]},{"id":"ca2fca8b.4fd378","type":"ui_button","z":"7a0c4296.ea5a9c","name":"Salon górne","group":"8379383b.58d758","order":1,"width":0,"height":0,"passthru":false,"label":"Salon górne","tooltip":"","color":"{{colour}}","bgcolor":"","icon":"fa-lightbulb-o fa-fw fa-3x","payload":"1","payloadType":"str","topic":"a","x":790,"y":160,"wires":[["e4569b07.971da"]]},{"id":"6a4ed87d.1282f8","type":"modbus-write","z":"7a0c4296.ea5a9c","name":"12288","showStatusActivities":false,"showErrors":false,"unitid":"","dataType":"HoldingRegister","adr":"12288","quantity":"1","server":"c3ddc1e2.830ea8","x":1150,"y":160,"wires":[[],[]]},{"id":"2e3b6922.f97b36","type":"function","z":"7a0c4296.ea5a9c","name":"Karta 1 Wyjście 1","func":"var karta = 1;\nvar bit = 1;\nvar pow = Math.pow(2, bit-1);\n// Create new Buffer based on array bytes\nconst buf = Buffer.from(msg.payload.buffer);\n\n// Represent these bytes as 32-bit unsigned int\nconst value = buf.readUInt16BE(2*(karta-1));\n\n// save the value\nmsg.payload = (value & pow)/pow;\n\nif (msg.payload==1) { return [msg,null]; }\nelse { return [null,msg]; }","outputs":2,"noerr":0,"x":390,"y":160,"wires":[["41367ae2.a3c674"],["7814a2b0.d4f2ac"]]},{"id":"fee1b2aa.3ea228","type":"link out","z":"7a0c4296.ea5a9c","name":"Bufor","links":["63375142.c3044","1bed5b36.b62e45","93e994ef.3841a8","9271963d.c6f8a8","ce34520.8540ab"],"x":395,"y":100,"wires":[]},{"id":"41367ae2.a3c674","type":"change","z":"7a0c4296.ea5a9c","name":"","rules":[{"t":"set","p":"colour","pt":"msg","to":"yellow","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":600,"y":140,"wires":[["ca2fca8b.4fd378"]]},{"id":"7814a2b0.d4f2ac","type":"change","z":"7a0c4296.ea5a9c","name":"","rules":[{"t":"set","p":"colour","pt":"msg","to":"default","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":600,"y":180,"wires":[["ca2fca8b.4fd378"]]},{"id":"e4569b07.971da","type":"trigger","z":"7a0c4296.ea5a9c","op1":"1","op2":"0","op1type":"str","op2type":"str","duration":"100","extend":false,"units":"ms","reset":"0","bytopic":"all","name":"","x":1000,"y":160,"wires":[["6a4ed87d.1282f8"]]},{"id":"2d566dd.186f592","type":"ui_button","z":"7a0c4296.ea5a9c","name":"Jadalnia","group":"8379383b.58d758","order":2,"width":0,"height":0,"passthru":false,"label":"Jadalnia","tooltip":"","color":"{{colour}}","bgcolor":"","icon":"fa-lightbulb-o fa-fw fa-3x","payload":"1","payloadType":"str","topic":"a","x":780,"y":240,"wires":[["603f2d2.bc7da54"]]},{"id":"b858f27c.405058","type":"modbus-write","z":"7a0c4296.ea5a9c","name":"12289","showStatusActivities":false,"showErrors":false,"unitid":"","dataType":"HoldingRegister","adr":"12289","quantity":"1","server":"c3ddc1e2.830ea8","x":1170,"y":240,"wires":[[],[]]},{"id":"477c7ad2.1e48bc","type":"function","z":"7a0c4296.ea5a9c","name":"Karta 1 Wyjście 2","func":"var karta = 1;\nvar bit = 2;\nvar pow = Math.pow(2, bit-1);\n// Create new Buffer based on array bytes\nconst buf = Buffer.from(msg.payload.buffer);\n\n// Represent these bytes as 32-bit unsigned int\nconst value = buf.readUInt16BE(2*(karta-1));\n\n// save the value\nmsg.payload = (value & pow)/pow;\n\nif (msg.payload==1) { return [msg,null]; }\nelse { return [null,msg]; }","outputs":2,"noerr":0,"x":390,"y":240,"wires":[["d192ae91.9d7a1"],["20b7ddfc.e15be2"]]},{"id":"d192ae91.9d7a1","type":"change","z":"7a0c4296.ea5a9c","name":"","rules":[{"t":"set","p":"colour","pt":"msg","to":"yellow","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":600,"y":220,"wires":[["2d566dd.186f592"]]},{"id":"20b7ddfc.e15be2","type":"change","z":"7a0c4296.ea5a9c","name":"","rules":[{"t":"set","p":"colour","pt":"msg","to":"default","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":600,"y":260,"wires":[["2d566dd.186f592"]]},{"id":"603f2d2.bc7da54","type":"trigger","z":"7a0c4296.ea5a9c","op1":"1","op2":"0","op1type":"str","op2type":"str","duration":"100","extend":false,"units":"ms","reset":"0","bytopic":"all","name":"","x":1000,"y":240,"wires":[["b858f27c.405058"]]},{"id":"e6bba597.c0c398","type":"ui_button","z":"7a0c4296.ea5a9c","name":"Salon stolik","group":"8379383b.58d758","order":3,"width":0,"height":0,"passthru":false,"label":"Salon stolik","tooltip":"","color":"{{colour}}","bgcolor":"","icon":"fa-lightbulb-o fa-fw fa-3x","payload":"1","payloadType":"str","topic":"","x":790,"y":320,"wires":[["116ce3a7.dbdea4"]]},{"id":"526acf4e.54ceb","type":"modbus-write","z":"7a0c4296.ea5a9c","name":"12290","showStatusActivities":false,"showErrors":false,"unitid":"","dataType":"HoldingRegister","adr":"12290","quantity":"1","server":"c3ddc1e2.830ea8","x":1150,"y":320,"wires":[[],[]]},{"id":"b84b762f.919ca","type":"function","z":"7a0c4296.ea5a9c","name":"Karta 1 Wyjście 3","func":"var karta = 1;\nvar bit = 3;\nvar pow = Math.pow(2, bit-1);\n// Create new Buffer based on array bytes\nconst buf = Buffer.from(msg.payload.buffer);\n\n// Represent these bytes as 32-bit unsigned int\nconst value = buf.readUInt16BE(2*(karta-1));\n\n// save the value\nmsg.payload = (value & pow)/pow;\n\nif (msg.payload==1) { return [msg,null]; }\nelse { return [null,msg]; }","outputs":2,"noerr":0,"x":390,"y":320,"wires":[["1015e7bb.e0f62"],["2212ed9.1e62c12"]]},{"id":"1015e7bb.e0f62","type":"change","z":"7a0c4296.ea5a9c","name":"","rules":[{"t":"set","p":"colour","pt":"msg","to":"yellow","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":600,"y":300,"wires":[["e6bba597.c0c398"]]},{"id":"2212ed9.1e62c12","type":"change","z":"7a0c4296.ea5a9c","name":"","rules":[{"t":"set","p":"colour","pt":"msg","to":"default","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":600,"y":340,"wires":[["e6bba597.c0c398"]]},{"id":"116ce3a7.dbdea4","type":"trigger","z":"7a0c4296.ea5a9c","op1":"1","op2":"0","op1type":"str","op2type":"str","duration":"100","extend":false,"units":"ms","reset":"0","bytopic":"all","name":"","x":1000,"y":320,"wires":[["526acf4e.54ceb"]]},{"id":"809085e4.29064","type":"ui_button","z":"7a0c4296.ea5a9c","name":"Przedpokój","group":"8379383b.58d758","order":4,"width":0,"height":0,"passthru":false,"label":"Przedpokój","tooltip":"","color":"{{colour}}","bgcolor":"","icon":"fa-lightbulb-o fa-fw fa-3x","payload":"1","payloadType":"str","topic":"","x":790,"y":400,"wires":[["1a085fba.d1a5f8"]]},{"id":"9c4da1eb.2b1338","type":"modbus-write","z":"7a0c4296.ea5a9c","name":"12291","showStatusActivities":false,"showErrors":false,"unitid":"","dataType":"HoldingRegister","adr":"12291","quantity":"1","server":"c3ddc1e2.830ea8","x":1150,"y":400,"wires":[[],[]]},{"id":"fdc48fa.4dff7f","type":"function","z":"7a0c4296.ea5a9c","name":"Karta 1 Wyjście 4","func":"var karta = 1;\nvar bit = 4;\nvar pow = Math.pow(2, bit-1);\n// Create new Buffer based on array bytes\nconst buf = Buffer.from(msg.payload.buffer);\n\n// Represent these bytes as 32-bit unsigned int\nconst value = buf.readUInt16BE(2*(karta-1));\n\n// save the value\nmsg.payload = (value & pow)/pow;\n\nif (msg.payload==1) { return [msg,null]; }\nelse { return [null,msg]; }","outputs":2,"noerr":0,"x":390,"y":400,"wires":[["79962d57.824f4c"],["ea1dbe04.881a08"]]},{"id":"79962d57.824f4c","type":"change","z":"7a0c4296.ea5a9c","name":"","rules":[{"t":"set","p":"colour","pt":"msg","to":"yellow","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":600,"y":380,"wires":[["809085e4.29064"]]},{"id":"ea1dbe04.881a08","type":"change","z":"7a0c4296.ea5a9c","name":"","rules":[{"t":"set","p":"colour","pt":"msg","to":"default","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":600,"y":420,"wires":[["809085e4.29064"]]},{"id":"1a085fba.d1a5f8","type":"trigger","z":"7a0c4296.ea5a9c","op1":"1","op2":"0","op1type":"str","op2type":"str","duration":"100","extend":false,"units":"ms","reset":"0","bytopic":"all","name":"","x":1000,"y":400,"wires":[["9c4da1eb.2b1338"]]},{"id":"3033c4ae.35874c","type":"ui_button","z":"7a0c4296.ea5a9c","name":"Kuchnia halogeny","group":"8379383b.58d758","order":5,"width":0,"height":0,"passthru":false,"label":"Kuchnia halogeny","tooltip":"","color":"{{colour}}","bgcolor":"","icon":"fa-lightbulb-o fa-fw fa-3x","payload":"1","payloadType":"str","topic":"","x":810,"y":480,"wires":[["b7109f5c.e26a2"]]},{"id":"d9c096e9.d8f13","type":"modbus-write","z":"7a0c4296.ea5a9c","name":"12292","showStatusActivities":false,"showErrors":false,"unitid":"","dataType":"HoldingRegister","adr":"12292","quantity":"1","server":"c3ddc1e2.830ea8","x":1150,"y":480,"wires":[[],[]]},{"id":"5f4664ba.e7535c","type":"function","z":"7a0c4296.ea5a9c","name":"Karta 1 Wyjście 5","func":"var karta = 1;\nvar bit = 5;\nvar pow = Math.pow(2, bit-1);\n// Create new Buffer based on array bytes\nconst buf = Buffer.from(msg.payload.buffer);\n\n// Represent these bytes as 32-bit unsigned int\nconst value = buf.readUInt16BE(2*(karta-1));\n\n// save the value\nmsg.payload = (value & pow)/pow;\n\nif (msg.payload==1) { return [msg,null]; }\nelse { return [null,msg]; }","outputs":2,"noerr":0,"x":390,"y":480,"wires":[["d0a18251.b9828"],["d2565cd0.72a75"]]},{"id":"d0a18251.b9828","type":"change","z":"7a0c4296.ea5a9c","name":"","rules":[{"t":"set","p":"colour","pt":"msg","to":"yellow","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":600,"y":460,"wires":[["3033c4ae.35874c"]]},{"id":"d2565cd0.72a75","type":"change","z":"7a0c4296.ea5a9c","name":"","rules":[{"t":"set","p":"colour","pt":"msg","to":"default","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":600,"y":500,"wires":[["3033c4ae.35874c"]]},{"id":"b7109f5c.e26a2","type":"trigger","z":"7a0c4296.ea5a9c","op1":"1","op2":"0","op1type":"str","op2type":"str","duration":"100","extend":false,"units":"ms","reset":"0","bytopic":"all","name":"","x":1000,"y":480,"wires":[["d9c096e9.d8f13"]]},{"id":"4d59857d.492734","type":"ui_button","z":"7a0c4296.ea5a9c","name":"Schody kinkiet","group":"8379383b.58d758","order":6,"width":0,"height":0,"passthru":false,"label":"Schody kinkiet","tooltip":"","color":"{{colour}}","bgcolor":"","icon":"fa-lightbulb-o fa-fw fa-3x","payload":"1","payloadType":"str","topic":"a","x":800,"y":560,"wires":[["f79aff51.9c164"]]},{"id":"464c950e.2e199c","type":"modbus-write","z":"7a0c4296.ea5a9c","name":"12293","showStatusActivities":false,"showErrors":false,"unitid":"","dataType":"HoldingRegister","adr":"12293","quantity":"1","server":"c3ddc1e2.830ea8","x":1150,"y":560,"wires":[[],[]]},{"id":"b6835fc0.2eb738","type":"function","z":"7a0c4296.ea5a9c","name":"Karta 1 Wyjście 6","func":"var karta = 1;\nvar bit = 6;\nvar pow = Math.pow(2, bit-1);\n// Create new Buffer based on array bytes\nconst buf = Buffer.from(msg.payload.buffer);\n\n// Represent these bytes as 32-bit unsigned int\nconst value = buf.readUInt16BE(2*(karta-1));\n\n// save the value\nmsg.payload = (value & pow)/pow;\n\nif (msg.payload==1) { return [msg,null]; }\nelse { return [null,msg]; }","outputs":2,"noerr":0,"x":390,"y":560,"wires":[["d832d75b.ec5008"],["81621e29.ed636"]]},{"id":"d832d75b.ec5008","type":"change","z":"7a0c4296.ea5a9c","name":"","rules":[{"t":"set","p":"colour","pt":"msg","to":"yellow","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":600,"y":540,"wires":[["4d59857d.492734"]]},{"id":"81621e29.ed636","type":"change","z":"7a0c4296.ea5a9c","name":"","rules":[{"t":"set","p":"colour","pt":"msg","to":"default","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":600,"y":580,"wires":[["4d59857d.492734"]]},{"id":"f79aff51.9c164","type":"trigger","z":"7a0c4296.ea5a9c","op1":"1","op2":"0","op1type":"str","op2type":"str","duration":"100","extend":false,"units":"ms","reset":"","bytopic":"all","name":"","x":1000,"y":560,"wires":[["464c950e.2e199c"]]},{"id":"c3ddc1e2.830ea8","type":"modbus-client","z":"","name":"","clienttype":"tcp","bufferCommands":true,"stateLogEnabled":true,"tcpHost":"192.168.1.76","tcpPort":"502","tcpType":"DEFAULT","serialPort":"/dev/ttyUSB","serialType":"RTU-BUFFERD","serialBaudrate":"9600","serialDatabits":"8","serialStopbits":"1","serialParity":"none","serialConnectionDelay":"100","unit_id":"1","commandDelay":"1","clientTimeout":"1000","reconnectOnTimeout":false,"reconnectTimeout":"1000","parallelUnitIdsAllowed":false},{"id":"8379383b.58d758","type":"ui_group","z":"","name":"Oświetlenie","tab":"21a4c53.0efe1ba","disp":true,"width":3,"collapse":false},{"id":"21a4c53.0efe1ba","type":"ui_tab","z":"","name":"Start","icon":"dashboard","order":1}]
Zapisane

Simeone

  • Jr. Member
  • **
  • Wiadomości: 98
    • Zobacz profil
Odp: Kamera IP - trigger z PLC do zapisu
« Odpowiedź #15 dnia: Marca 13, 2020, 08:22:19 am »

Łomatko! nawet nie sprawdzaj, znalazłem powód. Nie połączyłem bloku Modbusa z resztą bloków. Odpowiedź klasy: urządzenie elektryczne działa lepiej, jak włączy się je do prądu...eh

 ;D ;)
Zapisane

Gradek

  • Newbie
  • *
  • Wiadomości: 30
    • Zobacz profil
Odp: Kamera IP - trigger z PLC do zapisu
« Odpowiedź #16 dnia: Marca 17, 2020, 06:57:10 pm »

Simeone, jeśli podtrzymujesz swoją propozycję, to z chęcią zapoznam się z Twoim rozwiązaniem odnośnie obsługi kamer w Node-RED.

Całkiem fajnie wygląda MotionEyeOS, ale z tego co widziałem potrzebne jest do tego osobne urządzenie, np. Raspberry.

Mam jeszcze pytanie, trochę dryfujące od tematu postu, odnośnie dalszej obróbki sygnałów, które przychodzą po Modbusie z Wago. Czy wrzucasz je do brokera MQTT? Jeśli tak, to z chęcią poznałbym Twój sposób. Mi na razie przychodzi do głowy tylko na piechotę zapisywanie każdego sygnału z Wago osobno do osobnego topicu. Chciałbym wrzucić do brokera MQTT wszystkie moje sygnały 64DI i 64DO a każdy z nich ma swoją nazwę w PLC. W drugą stronę (z brokera do Wago) użyłbym 2 macierzy: DI1= poz. 1 z matrycy "nazwy". Jak można to zrobić w Node-RED?
Zapisane

Simeone

  • Jr. Member
  • **
  • Wiadomości: 98
    • Zobacz profil
Odp: Kamera IP - trigger z PLC do zapisu
« Odpowiedź #17 dnia: Marca 18, 2020, 09:04:37 am »

Załączam flow

bloczek exec wywoluje co pare minunt komende:
 
/usr/local/bin/ffmpeg -err_detect aggressive -fflags discardcorrupt -loglevel fatal -i "rtsp://192.168.2.85:554/user=uzytkownik&password=haslo&channel=1&stream=0.sdp" -vframes 1 -r 1 -y  /var/www/html/periodic-camsnap/6.jpg
 
a na UI wyswietlam <img src “adres_serwera/periodic-camsnap/6.jpg”>
i tak dla kazdej kamery.

Pozmieniaj adresy i dane logowania dla każdej kamery i sprawdź jak Ci to zagada. Być może będziesz musiał doinstalować kodek ffmpeg, bo takiego używam do obsługi zrzutów, ale może też będziesz już go miał. Zobaczysz co Ci wyrzuci debugger

Co do MQTT to póki co nie używam. Dane analogowe wrzucam do MySql bezpośrednio z Wago (biblioteka) natomiast powiadomienia o zdarzeniach na smartfona za pomocą aplikacji Pushover.
Zapisane

Gradek

  • Newbie
  • *
  • Wiadomości: 30
    • Zobacz profil
Odp: Kamera IP - trigger z PLC do zapisu
« Odpowiedź #18 dnia: Marca 20, 2020, 09:11:22 am »

Trochę mi zajęło zainstalowanie FFMPEG, ale w końcu się udało. Zapisałem snapa w folderze /home/pi/temp/6.jpg

Z tego co się orientuję, żeby można było się dostać do zdjęcia z sieci wewnętrznej (umieszczonego na Apache) po wpisaniu adresu IP zdjęcie lub film musi być umieszczony w folderze /var/www/html. Niestety nie ma takiej możliwości, bo mam info o "permission denied". Używam WinSPC.

W kodzie template-u zauważyłem Twoją domenę. Rozumiem, że masz przekierowanie portu na routerze + ew. DynDNS? Czy przekierowanie portu wiąże się z otwarciem portu? Zwykle jak czytam coś o przekierowywaniu portów, to jest to coś czego powinno się unikać jak ognia. Jak jest z bezpieczeństwem w takim przypadku? To takie zło konieczne, aby system działał?
Zapisane

Simeone

  • Jr. Member
  • **
  • Wiadomości: 98
    • Zobacz profil
Odp: Kamera IP - trigger z PLC do zapisu
« Odpowiedź #19 dnia: Marca 20, 2020, 10:23:08 am »

W kodzie template-u zauważyłem Twoją domenę. Rozumiem, że masz przekierowanie portu na routerze + ew. DynDNS? Czy przekierowanie portu wiąże się z otwarciem portu? Zwykle jak czytam coś o przekierowywaniu portów, to jest to coś czego powinno się unikać jak ognia. Jak jest z bezpieczeństwem w takim przypadku? To takie zło konieczne, aby system działał?

Zrobiłem to w nieco inny sposób.

Mam wykupioną usługę VPS w najtańszej opcji w serwisie OVH za około 13 zł na miesiąc.
W tej cenie dostajesz serwer wirtualny z publicznym adresem IP i 20GB przestrzeni na dysku SSD. Wybierasz sobie jaką dystrybucję linuxa chcesz mieć i taką dostajesz. Szybkość przesyłu jest porównywalna z tą wewnątrz lokalnej sieci domowej. Masz zatem takiego jakby wirtualnego RaspberryPi z publicznym adresem IP.

Na tym systemie zainstalowałem serwer OpenVPN (darmowy), a u siebie w domu na BeagleBone Black klienta, a następnie zestawiłem tunel VPN. W ten sposób nie mając publicznego adresu IP u swojego dostawcy mogę się łączyć z dowolnego miejsca z zewnątrz. Bezpieczeństwo połączenia zapewniają mechanizmy VPN-owe oraz sam usługodawca OVH.

Oczywiście mając nawet tak dobrze zabezpieczone połączenie musisz świadomie wystawiać na zewnątrz porty do usług, do których chcesz mieć dostęp. Pamiętać trzeba o maksymalnym możliwym zabezpieczeniu każdej usługi (proxy, hasła, itp.) bo złośliwców ze skanerami portów nie brakuje.
Zapisane

Gradek

  • Newbie
  • *
  • Wiadomości: 30
    • Zobacz profil
Odp: Kamera IP - trigger z PLC do zapisu
« Odpowiedź #20 dnia: Marca 20, 2020, 12:57:45 pm »

Masz pomysł, co może być nie tak z tym brakiem uprawnień do zapisu w folderze /var/www/html? Przeszukałem net, ale to co znalazłem nie pomogło.
Zapisane

Simeone

  • Jr. Member
  • **
  • Wiadomości: 98
    • Zobacz profil
Odp: Kamera IP - trigger z PLC do zapisu
« Odpowiedź #21 dnia: Marca 20, 2020, 02:40:56 pm »

A jak Ci pokazuje tutaj:
Zapisane

Gradek

  • Newbie
  • *
  • Wiadomości: 30
    • Zobacz profil
Odp: Kamera IP - trigger z PLC do zapisu
« Odpowiedź #22 dnia: Marca 20, 2020, 03:01:50 pm »

Przesyłam zrzut. Tutaj chyba rozchodzi się o tego Roota.
Zapisane

Gradek

  • Newbie
  • *
  • Wiadomości: 30
    • Zobacz profil
Odp: Kamera IP - trigger z PLC do zapisu
« Odpowiedź #23 dnia: Marca 24, 2020, 05:29:34 am »

Simeone?
Zapisane