direkt in Google Sheet schreiben

Begonnen von Marlen, 19 August 2019, 12:24:11

Vorheriges Thema - Nächstes Thema

Marlen

Hallo,

gibt es schon eine Möglichkeit, direkt in Google-Sheet zu schreiben?

LG
  Marlen

Marlen

..... ist meine Frage zu einfach oder zu schwierig??? :-[

Otto123

Hi,

ich denke deine Frage ist einfach zu schwierig :)
Ich habe keine Lösung, ich habe nur mal gelesen, dass Google Docs eine API hat und man über json arbeiten kann.

Vielleicht  hilft Dir der Hinweis in die Richtung, mehr helfen kann ich leider nicht.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Marlen

#3
Hallo,

hab einen Lösungsweg gefunden:

Läuft allerdings über pushingbox.com
https://www.hackster.io/detox/transmit-esp8266-data-to-google-sheets-8fc617

Nur wie baue ich das:
http://api.pushingbox.com/pushingbox?devid=(YOUR-DEVID-HERE)
&humidityData=33&celData=44&fehrData=111&hicData=22&hifData=77

in ein notify ein?

LG
Marlen

Otto123

Hallo Marlen,

mir klingt diese "Lösung" ziemlich nach Abenteuer. Ich meide solche Ketten Tool1 -> Tool2 -> Tool3 -> Toolxx

Das Ganze liest sich für mich so, als ob das was pushingbox dort macht auch direkt in einem Aufruf mit wget / curl/ http irgendwas gemacht werden kann.
Dann würde Google Script ja schon reichen. Ich bin aber noch nicht dazu gekommen, dort mal ein bisschen zu testen und zu recherchieren.
Aber vielleicht lieg ich da auch falsch.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Marlen

Zitat von: Otto123 am 25 August 2019, 12:27:54
Ich meide solche Ketten Tool1 -> Tool2 -> Tool3 -> Toolxx

Hallo,

ich meide das auch, dann wird irgendwo mal was umgestellt und schon geht die Suche los.....

LG
  Marlen

a-p-s

#6
Hallo zusammen,

habe seit Jahren schon folgende Lösung im Einsatz, die ohne 3rd-Party-Tool auskommt.

Hierzu einfach GScript einsetzen - dort kann man nämlich eigene kleine Web-Anwendungen veröffentlichen. Im betreffenden Sheet den Script-Editor öffnen und dort Funktionen doGet oder doPost einfügen:

function doGet(e)
{
   var meter = e.parameter.meter;
   var value = Number(e.parameter.value);
   console.info(meter + ":" + value);
   // .. und hier ins Sheet einfügen
}

   
Dann im Menü "Publish" als Web-App veröffentlichen - dort wird die URL angezeigt.

Ab dann reicht ein HTTP-GET oder POST-Aufruf.

Grüße,
a-p-s

Christoph Morrison

Glücklicherweise bist du nicht die erste, die gerne GSheets nutzen möchte und so gibt es gleich einige Lösungen, z.B. Net::Google::Spreadsheets.

Marlen

Zitat von: a-p-s am 28 August 2019, 12:55:48
Hallo zusammen,

habe seit Jahren schon folgende Lösung im Einsatz, die ohne 3rd-Party-Tool auskommt.

Hierzu einfach GScript einsetzen - dort kann man nämlich eigene kleine Web-Anwendungen veröffentlichen. Im betreffenden Sheet den Script-Editor öffnen und dort Funktionen doGet oder doPost einfügen:

function doGet(e)
{
   var meter = e.parameter.meter;
   var value = Number(e.parameter.value);
   console.info(meter + ":" + value);
   // .. und hier ins Sheet einfügen
}

   
Dann im Menü "Publish" als Web-App veröffentlichen - dort wird die URL angezeigt.

Ab dann reicht ein HTTP-GET oder POST-Aufruf.

Grüße,
a-p-s

Ah ja, sowas suche ich. Danke.

Kannst du mal ein ganzes Script und wie das HTTP-GET dann aus FHEM sendest posten?

LG
  Marlen

a-p-s

#9
Zitat von: Marlen am 28 August 2019, 20:24:02
Kannst du mal ein ganzes Script und wie das HTTP-GET dann aus FHEM sendest posten?

Ja, ich versuche es :)  Das Skript ist so eine typische gewachsene Geschichte. Deshalb hier mal eine vereinfachte Variante, bei der ich hoffentlich alles korrekt angepasst habe. Für das Beispiel nehmen wir an, dass wir für einen Zähler den jeweiligen Wert für heute loggen wollen. Setup ist, dass die Werte in einem Sheet "Zählerstände" in den Spalten A und B erscheinen sollen (A ist Datum, B ist der Wert), das Ganze ab Zeile 2. Es wird davon ausgegangen, dass bereits mindestens eine Zeile korrekt angelegt wurde und dort das Datum von gestern drin steht. Das passte bei mir so - sonst müsste man die Prüfung anpassen.


function doGet(e)
{
   var value = Number(e.parameter.value);
 
   console.info(meter + ":" + value);

   var s = SpreadsheetApp.getActiveSpreadsheet();
   var ss = s.getSheetByName("Zählerstände"); // Get the sheet by name
   // Create a date object set to beginning of today
   var today = new Date();
   today = new Date(today.getFullYear(), today.getMonth(), today.getDate());
   
   
   var datecol = 0;
   var valcol = 1;
   var range  = ss.getRange('A2:B1999');
     

   var values = range.getValues();
   for (var i = 1; i < values.length; i++) {
    if (DateDiffInDays(values[i][datecol],today) == -1) {
      range.getCell(i+1,datecol).setValue(today);
      range.getCell(i+1,valcol).setValue(value);
    }
   }

   return ContentService.createTextOutput('ok');
}

function DateDiffInDays(a, b)
{
  try
  {
    var _MS_PER_DAY = 1000 * 60 * 60 * 24;
    // Discard the time and time-zone information.
    var utc1 = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate());
    var utc2 = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate());
    return Math.floor((utc2 - utc1) / _MS_PER_DAY);
  }
  catch (e)
  {
    Logger.log(e);
    return -999;
  }
}


Dieses Skript dann in das zugehörige Sheet kopieren und wie angedeutet veröffentlichen (wichtig: anonymen Zugriff auf das Skript ermöglichen, sonst braucht man die OAUTH-Geschichte). Das muss man nach jeder Änderung machen. Dort sieht man die (gleichbleibende) URL.

So, dann in FHEM als Perl-Ausdruck (z.B. in einem DOIF oder notify):

GetFileFromURL("https://script.google.com/macros/s/xxx/exec?value=10")

Hoffe, das hilft.

Grüße,
a-p-s

Marlen

#10
Ok, danke..

Das  Script bringt beim test den Fehler:
ReferenceError: "meter" ist nicht definiert. (Zeile 5, Datei "Code")
Was macht: console.info(meter + ":" + value);

Wie würde das ausschauen wenn ich mehrere Werte auf einmal senden möchte?

Ich check noch nicht wirklich wo im Script hier /exec?value=10") 10 der Variablen value zugeordnet wird.

LG
  Marlen

a-p-s

Zitat von: Marlen am 28 August 2019, 21:53:20
Das  Script bringt beim test den Fehler:
ReferenceError: "meter" ist nicht definiert. (Zeile 5, Datei "Code")
Was macht: console.info(meter + ":" + value);

Wie würde das ausschauen wenn ich mehrere Werte auf einmal senden möchte?

Ich check noch nicht wirklich wo im Script hier /exec?value=10") 10 der Variablen value zugeordnet wird.

Sorry, das Original unterstützt mehrere Zähler. Die console.log ist ohnehin nur für das Logging da, also einfach auf console.log(value) ändern.

Die 10 ist nur ein Beispiel. Da muss dann natürlich der Wert rein, der in das Sheet eingetragen werden soll. Könnte z.B. auch


GetFileFromURL("https://script.google.com/macros/s/xxx/exec?value=" . Value('zaehler'))


heißen, wenn dein Gerät zaehler heißt und der Wert im State steht.

Marlen

Hallo,

ja, ist mir schon klar, dass ich anstatt den Wert das Device eintragen muss.

aber es funktioniert ja schon nicht mit einen fix-Wert.

Kann wie schaut dein notify aus?
Kommt der Code GetFileFromURL("https://script.google.com/macros/s/xxx/exec?value=" . Value('zaehler')) direkt ins notify?

LG
  Marlen

Marlen

Ok, fehler gefunden.

Man muss, wenn man das Skript neu veröffentlicht Version "neu" auswählen.

Jetzt bräuchte ich noch ein bisschen Hilfe wenn man mehrer Werte auf einmal schicken möchte.

LG
  Marlen

Marlen

Hab es geschafft.  ;D

Mehrere Werte senden:
GetFileFromURL("https://script.google.com/macros/s/<<<SCRIPT ID>>>/exec?Typ=Monat&Strom=" . $Strom_ver . "&PV=". $PV_ver . "&StrH=". $StromHeizung_ver . "&WaMa=". $washer_ver . "&Wasser=" . $Wasser_ver . "&Gas=" . $Gas_ver);;


LG
  Marlen

Marlen

Hallo,

kann man das auch gleich von einem Arduino aus an Google Sheet senden???

Wie geht HTTPGet in Aduino?

LG
  Marlen

Marlen

Hallo,

ich hab jetzt verschiedene Beispiele gefunden wie das mit Arduino funktionieren sollte.
z.B.: https://electrosome.com/updating-sensor-data-google-spreadsheet-esp8266-iot-project/

Aber ich bekomme da immer ein connection failed  :-\

Vielleicht kann mir auch wenn das hier kein Arduino-Forum ist weiterhelfen.

LG
  Marlen

Marlen

Zitat von: Marlen am 09 September 2019, 21:59:34
Hallo,

ich hab jetzt verschiedene Beispiele gefunden wie das mit Arduino funktionieren sollte.
z.B.: https://electrosome.com/updating-sensor-data-google-spreadsheet-esp8266-iot-project/

Aber ich bekomme da immer ein connection failed  :-\

Vielleicht kann mir auch wenn das hier kein Arduino-Forum ist weiterhelfen.

LG
  Marlen
Hat das so noch niemand im Einsatz?

LG Marlen

Gesendet von meinem Mi 9T mit Tapatalk


MadMax-FHEM

Hallo Marlen,

ich nutze zwar nicht das Schreiben in Google Sheets aber ESPs...

Kommen denn vorher Ausgaben?

Weil es wird ja breits die Verbindung zum "internen" Netz "protokolliert:


  Serial.println("");
  Serial.println("WiFi connected"); 
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  Serial.print("Netmask: ");
  Serial.println(WiFi.subnetMask());
  Serial.print("Gateway: ");
  Serial.println(WiFi.gatewayIP());


Kommen da Ausgaben!?

Wenn nicht, dann kann sich der ESP!! (nicht Arduino!) schon nicht mit dem Router verbinden, dann geht nat. auch keine Verbindung zu Google-Sheets...

Wenn da Ausgaben kommen (müssten eigentlich, weil sonst ja endlos in der "Verbinde zum Router" Schleife gehangen wird)...
...weiß ich nicht, ob die Namensauflösung tut...
Evtl. mal statt script.google.com die IP eintragen.
Also auf einem Rechner mal ping script.google.com eingeben und die dann erscheinende IP eintragen...

Wenn du ein fhem mit https hast, dann kannst du auch mal ("spasseshalber") dahin connecten, um zu sehen, ob der https-Connect überhaupt klappt...

Ansonsten kenne ich die Umgebung bzgl. Google-Sheets zu wenig...
...und auch https per ESP...

Viel Erfolg, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

AET_FHEM

ich versuche auch gerade einen Zählerstand in die Google Tabellen zu schreiben hab in meiner google Tabelle ein Script und dies veröffentlicht


wenn ich aber =
https://script.google.com/macros/_____________________________/exec?value=10
aufrufe

bekomme ich im Browser "OK" => also kommt es am Script an aber in die Tabelle wird nichts geschrieben, kann mir jemand weiterhelfen?

Otto123

Hi,

mit wenig Infos wirst Du wohl keine sinnvolle Antwort bekommen.
Dein Link ist falsch, da fehlt /s/ aber das wird beim löschen Deiner ID passiert sein.
Ich habe das Beispiel aus dem Link in #16 durchgespielt und wenn ich im Browser den Link
https://script.google.com/macros/s/AppID/exec?func=addData&val=20eingebe wird der Wert in die Tabelle eingetragen.
Wichtig ist, dass im Scriptcode auch die ID der Tabelle richtig eingetragen wird.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz