RooWifi & Fibaro (Roomba)

Hallo,

ich habe das komplette Tutorial befolgt, soweit, so gut.
Wenn ich mir dort die Bilder anschaue, dann sieht das wie folgt aus:

Bei mir sieht das ganze allerdings so aus:

Irgendwas mache ich falsch, allerdings was?

Hi,

am Besten schaust du mal in den Debug von dem Button/Main-Loop. Da werden bestimmt Fehlermeldungen auflaufen.

Gruß :slight_smile:

Hi boomx,

also das läuft soweit:

aber was meinst du mit dem Debug? Wo finde ich den? Ich habe keinen Button, der so heißt.

Gruß

– Setze Verbindungsdaten
– Benutzername Passwort fuer roowifi
roombaUser = “admin”
roombaPW = “roombawifi”
– hole ip adresse aus virtuellem modul
selfId = fibaro:getSelfId()
roombaIP = fibaro:get(selfId, “IPAddress”)
roombaPort = fibaro:get(selfId, “TCPPort”)
– setze variable ROOMBA aus IP und Logindaten
ROOMBA = Net.FHttp(roombaIP)
ROOMBA:setBasicAuthentication(roombaUser, roombaPW)



– geting info about specific device
response = ROOMBA:GET("/roomba.json")

– decoding json string to table
extractedjson = json.decode(response)

– Special usecase of [""] for json tree items with a - in it.
– Be aware not to use a . infront of the [ !!
– The following JSON codes can be extracted
– All that needs to be done is replace the rX value and rename the variable to whatever you liek

– “r0”: “Bumps Wheeldrops”
– “r1”: “Wall”
– “r2”: “Cliff Left”
– “r3”: “Cliff Front Left”
– “r4”: “Cliff Front Right”
– “r5”: “‘Cliff Right’”
– “r6”: “Virtual Wall”
– “r7”: “Motor Overcurrents”
– “r8”: “Dirt Detector - Left”
– “r9”: “Dirt Detector - Right”
– “r10”: “Remote Opcode”
– “r11”: “Buttons”
– “r12”: “Distance”
– “r13”: “‘Angle’”
– “r14”: “Charging State”
– “r15”: “Voltage”
– “r16”: “Current”
– “r17”: “Temperature”
– “r18”: “Charge”
– “r19”: “Capacity”
motorovercurrents = extractedjson.response.r7.value
distance = extractedjson.response.r12.value
chargingstate = extractedjson.response.r14.value
voltage = extractedjson.response.r15.value
current = extractedjson.response.r16.value
temperature = extractedjson.response.r17.value
charge = extractedjson.response.r18.value
capacity = extractedjson.response.r19.value

fcharge = fibaro:getGlobal(‘roombacharge’)

chargeProz = ((charge/capacity)*100)
fchargeProz = ((fcharge/capacity)*100)

– output to resultline and globalvariable
fibaro:call(selfId, “setProperty”, “ui.LabelCharge.value”,(charge)…" mAh");

if charge > fcharge then
fibaro:call(selfId,“setProperty”,“ui.LabelCharge.value”,string.format("%d%s(↑)", charge, “mAh “))
fibaro:call(selfId,“setProperty”,“ui.LabelProz.value”,string.format(”%d%s(↑%d)”, chargeProz, “% “, fchargeProz))
elseif charge < fcharge then
fibaro:call(selfId,“setProperty”,“ui.LabelCharge.value”,string.format(”%d%s(↓)”, charge, “mAh “))
fibaro:call(selfId,“setProperty”,“ui.LabelProz.value”,string.format(”%d%s(↓%d)”, chargeProz, “% “, fchargeProz))
else
fibaro:call(selfId,“setProperty”,“ui.LabelCharge.value”,string.format(”%d%s(-)”, charge, “mAh “))
fibaro:call(selfId,“setProperty”,“ui.LabelProz.value”,string.format(”%d%s(-)”, chargeProz, “% “))
end
fibaro:setGlobal(“roombacharge”, charge);
fibaro:call(selfId, “setProperty”, “ui.LabelCurrent.value”,(current)…” mA”);

fibaro:call(selfId, “setProperty”, “ui.LabelTemp.value”,(temperature)…" °C");

fibaro:call(selfId, “setProperty”, “ui.LabelKapazitat.value”,(capacity)…“mAh”);

if chargingstate == “0” then
fibaro:call(selfId, “setProperty”, “ui.LabelState.value”,(chargingstate)…" Not Charging");
fibaro:log(“Ladestatus: Nicht geladen”)
elseif chargingstate == “1” then
fibaro:call(selfId, “setProperty”, “ui.LabelState.value”,(chargingstate)…" Charging Recovery");
fibaro:log(“Ladestatus: Charging Recovery”)
elseif chargingstate == “2” then
fibaro:call(selfId, “setProperty”, “ui.LabelState.value”,(chargingstate)…" Charging");
fibaro:log(“Ladestatus: lädt”)
elseif chargingstate == “3” then
fibaro:call(selfId, “setProperty”, “ui.LabelState.value”,(chargingstate)…" Trickle Charging");
fibaro:log(“Ladestatus: Erhaltungsladung”)
elseif chargingstate == “4” then
fibaro:call(selfId, “setProperty”, “ui.LabelState.value”,(chargingstate)…" Waiting");
fibaro:log(“Ladestatus: wartet”)
else
fibaro:call(selfId, “setProperty”, “ui.LabelState.value”,(chargingstate)…" Charging Error");
fibaro:log(“Ladestatus: Ladefehler”)
end
fibaro:setGlobal(“roombachargingstat”, chargingstate);

Hab es gefunden, er gibt mir immer

“[ERROR] 19:08:37: line 20: attempt to index global ‘Fibaro’ (a nil value)” als Error aus.
In der Line steht folgendes “Fibaro.log(result);”

Was kann das Problem sein?

Mach aus den Fibaro:log mal ein print.

Du meinst:

result = response;
Fibaro:print(result);

Nein, print(result)

Okay, danke.
Nun sieht es besser aus :slight_smile:

Jetzt nur die frage, wie bekomme ich das Feld nun größer, ist zwar jetzt nicht wichtig, aber sicherlich dennoch Interessant.

MfG

roomba4.jpg

Du musst das Label in den erweiterten Einstellungen als Main markieren. Rechts oben ein Kleiner Punkt mit “Main” daneben.

Danke boomx, langsam komme ich rein in das ganze :slight_smile:

Hallo,
mein bestelltes RooWifi-Modul ist gestern angekommen. Das Einbinden ins heimische WLAN und dann in das HC2 hat ohne Probleme funktioniert.
Nun meine Frage dazu: Gibt es eine Variable für den Sensor des Staubfaches? Der ROOMBA soll ja nicht losfahren wenn das Staubfach voll ist.
Für einen kleinen Tipp wäre ich dankbar.
VG, Volker

Hi,

hab mir die API mal angeschaut. Nein, da gibt es nichts. Dies scheint nur beim Thinking Cleaner so vorhanden zu sein.

Gruß

Hi,

ich hab mir da ein kleines Script geschrieben damit er mich nach der zehnten Reinigung fragt, ob meine Roombas auf die “Reinigungspostion” fahren sollen zwecks Leerung der Behälter.
Bestätige ich dieses fahren die Sauger unterm Schrank hervor und der Counter wird genullt.

Vielleicht ist das ein Ansatz.

LG

… vielen Dank Euch beiden für die Antwort. Ich hab dem RooWifi Entwickler eine Mail mit meiner Frage geschrieben… mal sehen

Hi Zero-G

can you share the Reinigungspostion script you made ?

Best Regards
Christian

Hello Christian,

it´s just a simple string of commands from the Virtual Device (https://www.siio.de/roowifi-fibaro-jetzt-putzt-der-roomba-staubsauger-automatisch-deinem-smart-home/) but here it is:

--[[
%% properties
%% globals
--]]

 fibaro:debug("start Roomba 1")
      fibaro:call(117, "pressButton", "7");
  fibaro:sleep(6000)
      fibaro:call(117, "pressButton", "9");
  fibaro:sleep(2000)
      fibaro:call(117, "pressButton", "9");
  fibaro:sleep(1000)
      fibaro:call(117, "pressButton", "11");
   fibaro:sleep(2000)
  fibaro:call(117, "pressButton", "9");
   fibaro:sleep(6000)
  fibaro:call(117, "pressButton", "9");
   fibaro:sleep(2000)
     fibaro:call(117, "pressButton", "3");
   fibaro:sleep(1000)
    fibaro:call(117, "pressButton", "3");
	  fibaro:debug("finish 1")

	  fibaro:debug("start 2")
    fibaro:call(118, "pressButton", "7");
  fibaro:sleep(6000)
      fibaro:call(118, "pressButton", "9");
  fibaro:sleep(6000)
      fibaro:call(118, "pressButton", "9");
  fibaro:sleep(1000)
      fibaro:call(118, "pressButton", "10");
   fibaro:sleep(2000)
      fibaro:call(118, "pressButton", "10");
     fibaro:sleep(2000)
      fibaro:call(118, "pressButton", "8");
       fibaro:sleep(6000)
      fibaro:call(118, "pressButton", "11");
     fibaro:sleep(3000)
   	   fibaro:call(118, "pressButton", "10");
       fibaro:sleep(13000)
      fibaro:call(118, "pressButton", "8");
	  fibaro:sleep (1000)
       fibaro:call(118, "pressButton", "10");
 		fibaro:sleep (1000)
       fibaro:call(118, "pressButton", "10");
  fibaro:sleep (1000)
       fibaro:call(118, "pressButton", "3");
  fibaro:sleep (1000)
       fibaro:call(118, "pressButton", "3");
	  fibaro:debug("Finish 2")
  fibaro:setGlobal("Roombacount", "0");

In my case the script have to be start manually

Greetings

Hallo zusammen,

bislang hat mich der Status eines Roombas nicht interessiert, ich hab diese lediglich “angepingt” als Lebenszeichen.

Da ich nun den ersten Akku tauschen musste stellte ich fest, das diese Informationen doch nützlich sind und habe diese wieder ins VD implementiert.
Damit ist mein VD wieder dasselbe wie im Tutorial (Link) nur mit zusätzlichem “anpingen” im Statusbutton. Dieser wird über ein Script alle paar Minuten “gedrückt”.

Nun stellte ich fest, dass nicht immer die Labels mit Daten gefüllt sind, meistens nach einem Neustart der Fritz oder des Roowifi Moduls.
Die alten Daten bleiben einfach stehen sofern vorher welche vorhanden waren.

Wenn ich den Roowifi einmal über den Browser geöffnet habe funktioniert es wieder ohne Probleme. Ich muss diesen wirklich nur öffnen, nicht mehr.
Dies beobachte ich bei beiden Roombas die ich im Netz habe.

Dies passiert auch mit dem original VD ohne meine Anpassung.

Hat jemand eine Idee für ein Workaround?

Danke & Gruß

Unbenannt.jpg

Hallo zusammen,

nur für den Fall das es jemand interessiert, der Fehler liegt an den Roowifis.
Roomba.json gibt nach einer Zeit keine aktualisierten Werte mehr raus, dasselbe bei der Ausgabe über .xml

Ich recherchiere weiter und teste ob der Fehler auch auftritt wenn man einen Benutzer und Passwort in den Roowifis konfiguriert hat (habe ich aktuell nicht).

Grüße