Did 1 630 Signaler ce message Posté(e) 20 novembre 2020 Bonjour tout le monde, J'ai installé mon module Robonect sur l'Automower, tout fonctionne parfaitement sans les remontées vers la HC2, mais après pas mal de recherche, je suis enfin tombé sur un VD pour HC2 concernant la carte Robonect (sur leur site d'ailleurs, je ne l'avais pas vu la première fois). https://robonect.de/viewtopic.php?f=12&t=287 Le problème est qu'il est en allemand, j'ai commencé à traduire quelques étiquettes, entrer mes identifiants et créer les trois variables requises, il fonctionne mais quelques petits soucis subsistent, même en rentrant les numéros des icônes, celle du VD reste invariablement sur la OFFline (même quand elle tond). Je n'ai pas non plus encore testé les boutons de mode, juste le "Statut". Voici la mainloop (je vous livre celle du VD d'origine pour ne pas laisser mes identifiants): fibaro:debug('Starte PING') local IP = '192.168.xx.xx' local PORT = 80 local versuche = 3 local iconOFFLINE = "1009" -- ANPASSEN; Gerät ist offline local iconONLINE = "1001" -- ANPASSEN; Gerät ist online local iconCHECK = "1003" -- ANPASSEN; Gerät wird angepingt local function _ping(retry) fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", iconCHECK) retry = retry or 0 local tcpSocket = Net.FTcpSocket(IP, PORT) tcpSocket:setReadTimeout(250) fibaro:debug('Suche..., versuche #' .. retry .. ' bitte warten...') fibaro:sleep(250) local bytes, errorCode = tcpSocket:write('ping') if errorCode == 0 then return true else if retry < versuche then fibaro:debug('Nicht gefunden, erneut versuchen, bitte warten...') fibaro:sleep(1000); return _ping(retry + 1) end return false end end local f, result = pcall(_ping) if (f) then if (result == true) and (fibaro:getGlobalValue("Variable_AM_Timer") == "Aktiv" ) then fibaro:debug(IP.. ':' .. PORT .. ' wurde gefunden, der Timer Status des Automower ist Aktiv') fibaro:debug("Status wird abgefragt"); fibaro:call(175, "pressButton", "6"); fibaro:debug("Status wurde abgefragt, warte für 2 Minuten"); fibaro:call(175, "setProperty", "currentIcon", iconONLINE); fibaro:sleep(120000) elseif (result == true) and (fibaro:getGlobalValue("Variable_AM_Timer") == "Standby" ) then fibaro:debug(IP.. ':' .. PORT .. ' wurde gefunden, der Timer Status des Automower ist Standby') fibaro:debug("Status wird abgefragt"); fibaro:call(175, "pressButton", "6"); fibaro:debug("Status wurde abgefragt, warte für 30 Minuten"); fibaro:call(175, "setProperty", "currentIcon", iconONLINE); fibaro:sleep(1800000) elseif (result == true) and (fibaro:getGlobalValue("Variable_AM_Timer") == "Deaktiviert" ) then fibaro:debug(IP.. ':' .. PORT .. ' wurde gefunden, der Timer Status des Automower ist Deaktiviert') fibaro:debug("Status wird abgefragt"); fibaro:call(175, "pressButton", "6"); fibaro:debug("Status wurde abgefragt, warte für 30 Minuten"); fibaro:call(175, "setProperty", "currentIcon", iconONLINE); fibaro:sleep(1800000) elseif (result == true) and (fibaro:getGlobalValue("Variable_AM_Timer") == "Manuell" ) then fibaro:debug(IP.. ':' .. PORT .. ' wurde gefunden, der Timer Status des Automower ist Manuell') fibaro:debug("Status wird abgefragt"); fibaro:call(175, "pressButton", "6"); fibaro:debug("Status wurde abgefragt, warte für 10 Minuten"); fibaro:call(175, "setProperty", "currentIcon", iconONLINE); fibaro:sleep(600000) else fibaro:debug(IP.. ':' .. PORT .. ' wurde nicht gefunden.') fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", iconOFFLINE) fibaro:call(175, "setProperty", "currentIcon", iconOFFLINE); fibaro:debug("Status des Automower wird aufgrund mangelnder Erreichbarkeit nicht abgefragt") fibaro:debug("Status wurde nicht abgefragt, warte für 10 Minuten)"); fibaro:sleep(600000) end else fibaro:debug('Error: ' .. f) end Et le bouton n°6 "Status" (les autres n'ont que quelques lignes): -- Setze Verbindungsdaten -- Benutzername Passwort fuer MOWER mowerUser = "MOWER" mowerPW = "PWD" -- hole ip adresse aus virtuellem modul selfId = fibaro:getSelfId() mowerIP = fibaro:get(selfId, "IPAddress") mowerPort = fibaro:get(selfId, "TCPPort") -- setze variable MOWER aus IP und Logindaten MOWER = Net.FHttp(mowerIP) MOWER:setBasicAuthentication(mowerUser, mowerPW) -- ------------------------------------------------- -- ------------------------------------------------- -- geting info about specific device response = MOWER:GET("/json?cmd=status") -- decoding json string to table extractedjson = json.decode(response) -- "status/battery": "Battery Status" -- "status/duration": "Mode Duration" -- "status/hours": "Hours" -- "status/mode": "Mode" -- "status/status": "Status" -- "timer/status": "Timer Status" battery = extractedjson.status.battery duration = extractedjson.status.duration hours = extractedjson.status.hours AM_Status = extractedjson.status.status AM_Mode = extractedjson.status.mode AM_Timer = extractedjson.timer.status fibaro:debug(battery.."%") fibaro:debug(duration.."s") fibaro:debug(hours.."h") fibaro:debug(AM_Status) fibaro:debug(AM_Mode) fibaro:debug(AM_Timer) fibaro:call(selfId, "setProperty", "ui.LabelBatterystatus.value",(battery).." %"); fibaro:call(selfId, "setProperty", "ui.LabelModeDuration.value",(duration).." s"); fibaro:call(selfId, "setProperty", "ui.LabelHours.value",(hours).."h"); fibaro:call(selfId, "setProperty", "ui.LabelMode.value",(AM_Mode)); fibaro:call(selfId, "setProperty", "ui.LabelStatus.value",(AM_Status)); fibaro:call(selfId, "setProperty", "ui.LabelTimer.value",(AM_Timer)); fibaro:debug("Status Auswertung gestartet") if (AM_Status == 0) then fibaro:call(selfId, "setProperty", "ui.LabelStatus.value"," Status wird ermittelt"); fibaro:log("Status: Status wird ermittelt") fibaro:debug("Status wird ermittelt") elseif (AM_Status == 1) then fibaro:call(selfId, "setProperty", "ui.LabelStatus.value"," Automower parkt"); fibaro:log("Status: Automower parkt") fibaro:debug("Automower parkt") elseif (AM_Status == 2) then fibaro:call(selfId, "setProperty", "ui.LabelStatus.value"," Automower mäht"); fibaro:log("Status: Automower mäht") fibaro:debug("Automower mäht") elseif (AM_Status == 3) then fibaro:call(selfId, "setProperty", "ui.LabelStatus.value"," Automower sucht die Ladestation"); fibaro:log("Status: Automower sucht die Ladestation") fibaro:debug("Automower sucht die Ladestation") elseif (AM_Status == 4) then fibaro:call(selfId, "setProperty", "ui.LabelStatus.value"," Automower lädt"); fibaro:log("Status: Automower lädt") fibaro:debug("Automower lädt") elseif (AM_Status == 5) then fibaro:call(selfId, "setProperty", "ui.LabelStatus.value"," Automower sucht (wartet auf das Umsetzen im manuellen Modus)"); fibaro:log("Status: Automower sucht (wartet auf das Umsetzen im manuellen Modus)") fibaro:debug("Automower sucht (wartet auf das Umsetzen im manuellen Modus)") elseif (AM_Status == 7) then fibaro:call(selfId, "setProperty", "ui.LabelStatus.value"," Fehlerstatus"); fibaro:log("Status: Fehlerstatus") fibaro:debug("Fehlerstatus") elseif (AM_Status == 8) then fibaro:call(selfId, "setProperty", "ui.LabelStatus.value"," Schleifensignal verloren"); fibaro:log("Status: Automower Schleifensignal verloren") fibaro:debug("Automower Schleifensignal verloren") elseif (AM_Status == 16) then fibaro:call(selfId, "setProperty", "ui.LabelStatus.value"," Automower abgeschaltet"); fibaro:log("Status: Automower abgeschaltet") fibaro:debug("Automower abgeschaltet") elseif (AM_Status == 17) then fibaro:call(selfId, "setProperty", "ui.LabelStatus.value"," Automower schläft"); fibaro:log("Status: Automower schläft") fibaro:debug("Automower schläft") else fibaro:call(selfId, "setProperty", "ui.LabelState.value"," Error"); fibaro:log("Status: Ladefehler") fibaro:debug("Ladefehler") end fibaro:setGlobal("AM_Status", AM_Status); fibaro:sleep(100); fibaro:debug("Mode Auswertung gestartet") if (AM_Mode == 0) then fibaro:call(selfId, "setProperty", "ui.LabelMode.value"," Auto"); fibaro:log("Mode: Auto") fibaro:debug("Auto") elseif (AM_Mode == 1) then fibaro:call(selfId, "setProperty", "ui.LabelMode.value"," Manuell"); fibaro:log("Mode: Manuell") fibaro:debug("Manuell") elseif (AM_Mode == 2) then fibaro:call(selfId, "setProperty", "ui.LabelMode.value"," Home"); fibaro:log("Mode: Home") fibaro:debug("Home") elseif (AM_Mode == 3) then fibaro:call(selfId, "setProperty", "ui.LabelMode.value"," Demo"); fibaro:log("Mode: Demo") fibaro:debug("Demo") else fibaro:call(selfId, "setProperty", "ui.LabelMode.value"," Error"); fibaro:log("Mode: Fehler") fibaro:debug("Fehler") end fibaro:setGlobal("AM_Mode", AM_Mode); fibaro:sleep(100); fibaro:debug("Timer Auswertung gestartet") if (AM_Timer == 0) then fibaro:call(selfId, "setProperty", "ui.LabelTimer.value"," Deaktiviert"); fibaro:log("Timer: Deaktiviert") fibaro:debug("Deaktiviert") elseif (AM_Timer == 1) then fibaro:call(selfId, "setProperty", "ui.LabelTimer.value"," Auto"); fibaro:log("Timer: Auto") fibaro:debug("Auto") elseif (AM_Timer == 2) then fibaro:call(selfId, "setProperty", "ui.LabelTimer.value"," Standby"); fibaro:log("Timer: Standby") fibaro:debug("Standby") else fibaro:call(selfId, "setProperty", "ui.LabelTimer.value"," Error"); fibaro:log("Timer: Fehler") fibaro:debug("Fehler") end fibaro:setGlobal("AM_Timer", AM_Timer); -- Setze Icon fibaro:debug('Starte PING') local IP = '192.168.xx.xx' local PORT = 80 local versuche = 3 local iconOFFLINE = "1002" -- ANPASSEN; Gerät ist offline local iconONLINE = "1001" -- ANPASSEN; Gerät ist online local iconCHECK = "1003" -- ANPASSEN; Gerät wird angepingt local function _ping(retry) fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", iconCHECK) retry = retry or 0 local tcpSocket = Net.FTcpSocket(IP, PORT) tcpSocket:setReadTimeout(250) fibaro:debug('Suche..., versuche #' .. retry .. ' bitte warten...') fibaro:sleep(250) local bytes, errorCode = tcpSocket:write('ping') if errorCode == 0 then return true else if retry < versuche then fibaro:debug('Nicht gefunden, erneut versuchen, bitte warten...') fibaro:sleep(1000); return _ping(retry + 1) end return false end end local f, result = pcall(_ping) if (f) then if (result == true) and (fibaro:getGlobalValue("Variable_AM_Timer") == "Aktiv" ) then fibaro:debug(IP.. ':' .. PORT .. ' wurde gefunden, der Timer Status des Automower ist Aktiv') fibaro:debug("Status wird abgefragt"); fibaro:call(175, "setProperty", "currentIcon", iconONLINE); elseif (result == true) and (fibaro:getGlobalValue("Variable_AM_Timer") == "Standby" ) then fibaro:debug(IP.. ':' .. PORT .. ' wurde gefunden, der Timer Status des Automower ist Standby') fibaro:debug("Status wird abgefragt"); fibaro:call(175, "setProperty", "currentIcon", iconONLINE); elseif (result == true) and (fibaro:getGlobalValue("Variable_AM_Timer") == "Deaktiviert" ) then fibaro:debug(IP.. ':' .. PORT .. ' wurde gefunden, der Timer Status des Automower ist Deaktiviert') fibaro:debug("Status wird abgefragt"); fibaro:call(175, "setProperty", "currentIcon", iconONLINE); elseif (result == true) and (fibaro:getGlobalValue("Variable_AM_Timer") == "Manuell" ) then fibaro:debug(IP.. ':' .. PORT .. ' wurde gefunden, der Timer Status des Automower ist Manuell') fibaro:debug("Status wird abgefragt"); fibaro:call(175, "setProperty", "currentIcon", iconONLINE); else fibaro:debug(IP.. ':' .. PORT .. ' wurde nicht gefunden.') fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", iconOFFLINE) fibaro:call(175, "setProperty", "currentIcon", iconOFFLINE); fibaro:debug("Status des Automower wird aufgrund mangelnder Erreichbarkeit nicht abgefragt") end else fibaro:debug('Error: ' .. f) end J'ai aussi bien remplacé chaque numéro 175 par l'ID de mon VD. J'ai remarqué des différences sur quelques lignes, certaines ont des apostrophes au lieu des guillemets, est-ce normal? Comment fait-on pour ajouter d'autres infos du genre température, humidité, usure des lames ou même la position GPS qui doivent apparaître dans la trame json? J'ai bien essayé d'ajouter une nouvelle étiquette et dupliquer des lignes du genre fibaro:call(selfId, "setProperty", "ui.LabelHours.value" en remplaçant par blades par exemple (pour l'info des lames). J'aimerais aussi ajouter une icône quand la tondeuse est en charge et une autre quand elle est en défaut. Je cherche toujours un doc sur l'API du Robonect. Merci pour votre aide. VD_Automower_2019 Robonect.vfib P.S: Je vous rajoute aussi une trame du json: http://IP_mower/xml?cmd=status&blades&quality%7BAuthorization=Basic <robonect> <name>**********</name> <id>******</id> <status> <status>17</status> <distance>0</distance> <stopped>false</stopped> <duration>3417</duration> <mode>0</mode> <battery>100</battery> <hours>2202</hours> </status> <timer> <status>2</status> <next> <date>2020-11-21</date> <time>17:00:00</time> <unix>1605978000</unix> </next> </timer> <blades> <quality>73</quality> <hours>3</hours> <days>25</days> </blades> <wlan> <signal>-73</signal> </wlan> <health> <temperature>14</temperature> <humidity>47</humidity> </health> <clock> <date>2020-11-20</date> <time>22:39:33</time> <unix>1605911973</unix> </clock> <successful>true</successful> </robonect> 1 Partager ce message Lien à poster Partager sur d’autres sites
Nico 1 857 Signaler ce message Posté(e) 21 novembre 2020 Top top Did ! Partager ce message Lien à poster Partager sur d’autres sites